Name: series-workflowf5zd8 Phase: Succeeded StartedAt: 2026-09-07 22:08:45 +0000 UTC FinishedAt: 2026-09-08 01:59:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5zd8[0] Phase: Succeeded StartedAt: 2026-09-07 22:08:45 +0000 UTC FinishedAt: 2026-09-07 22:12:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5zd8[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 22:08:45 +0000 UTC FinishedAt: 2026-09-07 22:12:53 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS", "NETFILTER", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS", "NETFILTER", "INET" ], "series_id": "0410e528-7572-4d57-92bb-02a0d226795d" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_vs_dest_update_overload", "ip_vs_bind_dest", "ip_vs_unbind_dest", "__ip_vs_update_dest", "ip_vs_edit_dest", "ip_vs_add_dest", "ip_vs_rr_schedule", "ip_vs_wrr_schedule", "ip_vs_wlc_schedule", "ip_vs_lc_schedule", "ip_vs_fo_schedule", "ip_vs_ovf_schedule", "ip_vs_twos_schedule" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-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+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQmIzM0OywKICAgICYjMzQ7aXBfdnNfYmluZF9kZXN0JiMzNDssCiAgICAmIzM0O2lwX3ZzX3VuYmluZF9kZXN0JiMzNDssCiAgICAmIzM0O19faXBfdnNfdXBkYXRlX2Rlc3QmIzM0OywKICAgICYjMzQ7aXBfdnNfZWRpdF9kZXN0JiMzNDssCiAgICAmIzM0O2lwX3ZzX2FkZF9kZXN0JiMzNDssCiAgICAmIzM0O2lwX3ZzX3JyX3NjaGVkdWxlJiMzNDssCiAgICAmIzM0O2lwX3ZzX3dycl9zY2hlZHVsZSYjMzQ7LAogICAgJiMzNDtpcF92c193bGNfc2NoZWR1bGUmIzM0OywKICAgICYjMzQ7aXBfdnNfbGNfc2NoZWR1bGUmIzM0OywKICAgICYjMzQ7aXBfdnNfZm9fc2NoZWR1bGUmIzM0OywKICAgICYjMzQ7aXBfdnNfb3ZmX3NjaGVkdWxlJiMzNDssCiAgICAmIzM0O2lwX3ZzX3R3b3Nfc2NoZWR1bGUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW9yZ2FuaXplcyBmaWVsZHMgaW4gYHN0cnVjdCBpcF92c19kZXN0YCBmb3IgYmV0dGVyIGNhY2hlbGluZSB1dGlsaXphdGlvbiBhbmQgcmVmYWN0b3JzIHRoZSBkZXN0aW5hdGlvbiBvdmVybG9hZCBzdGF0dXMgdHJhY2tpbmcgdG8gdXNlIGBsX3RocmVzaG9sZF92YWxgIC8gYHVfdGhyZXNob2xkX3ZhbGAgaW5zdGVhZCBvZiBgZGVzdC1cdTAwM2VmbGFnc2Agd2l0aCBgSVBfVlNfREVTVF9GX09WRVJMT0FEYC5cblxuQWxsIGBzdHJ1Y3QgaXBfdnNfZGVzdGAgaW5zdGFuY2VzIGFyZSB6ZXJvLWFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iaigpYCBhbmQgdGhlaXIgdGhyZXNob2xkIGZpZWxkcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdXBvbiBjcmVhdGlvbi4gVGhlIHN0cnVjdHVyZSBpdHNlbGYgaXMgbm90IGNvcGllZCB0byB1c2Vyc3BhY2UgYXMgYSByYXcgYmxvYjsgdXNlcnNwYWNlIHF1ZXJpZXMgc2VyaWFsaXplIGluZGl2aWR1YWwgZmllbGRzIG9yIHVzZSB6ZXJvZWQgaW50ZXJtZWRpYXRlIHN0cnVjdHVyZXMgKGBtZW1zZXRgIGluIGBfX2lwX3ZzX2dldF9kZXN0X2VudHJpZXNgIGFuZCBpbmRpdmlkdWFsIE5ldGxpbmsgYXR0cmlidXRlcyBpbiBgaXBfdnNfZ2VubF9maWxsX2Rlc3RgKS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgYnJhbmNoZWQgdXBvbi5cblxuQmVjYXVzZSB0aGUgY2hhbmdlcyBpbnRyb2R1Y2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBkZXN0aW5hdGlvbiBvdmVybG9hZCB0cmFja2luZyBsb2dpYyBhbmQgZGVzdGluYXRpb24gc3RydWN0dXJlIGxheW91dCBpbiB0aGUgSVBWUyAoSVAgVmlydHVhbCBTZXJ2ZXIpIHN1YnN5c3RlbS4gSXQgdXBkYXRlcyBjb25uZWN0aW9uIGJpbmRpbmcgYW5kIHVuYmluZGluZyB0aHJlc2hvbGRzLCBjb250cm9sIHBsYW5lIGRlc3RpbmF0aW9uIHVwZGF0ZXMsIGFuZCBzY2hlZHVsZXIgb3ZlcmxvYWQgZXZhbHVhdGlvbiBhY3Jvc3MgSVBWUyBhbGdvcml0aG1zLiBUaGVzZSBhcmUgcmVhY2hhYmxlLCBleGVjdXRhYmxlIG5ldHdvcmsgcGF0aHMgdGhhdCBzaG91bGQgYmUgZnV6emVkIGZvciByYWNlIGNvbmRpdGlvbnMsIGFyaXRobWV0aWMgb3Igc3RhdGUgaGFuZGxpbmcgYnVncywgYW5kIHRocmVzaG9sZCBlZGdlIGNhc2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjEwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTAyOWMxODUzOWUyYmQ0MzkzYmI4NzM2ZGYwMDAzZTQyMmNiN2M5YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMjI6MTA6MTYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBfdnMuaCBiL2luY2x1ZGUvbmV0L2lwX3ZzLmhcbmluZGV4IDMyZmRlNzMxYmNlYjcuLjlhODNiZmYzMjU2OWQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9pcF92cy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcF92cy5oXG5AQCAtMzYsOSAmIzQzOzM2LDYgQEBcbiAjZGVmaW5lIElQX1ZTX0hEUl9JTlZFUlNFXHQxXG4gI2RlZmluZSBJUF9WU19IRFJfSUNNUFx0XHQyXG4gXG4tLyogRGVzdGluYXRpb24gU2VydmVyIEZsYWdzICovXG4tI2RlZmluZSBJUF9WU19ERVNUX0ZfT1ZFUkxPQURcdDB4MDAwMlx0XHQvKiBzZXJ2ZXIgaXMgb3ZlcmxvYWRlZCAqL1xuLVxuIC8qIERlc3RpbmF0aW9uIFNlcnZlciBDb25maWcgRmxhZ3MgKi9cbiAjZGVmaW5lIElQX1ZTX0RFU1RfQ0ZfQVZBSUxBQkxFXHQweDAwMDFcdFx0Lyogc2VydmVyIGlzIGF2YWlsYWJsZSAqL1xuIFxuQEAgLTk3MywzMiAmIzQzOzk3MCw0MyBAQCBzdHJ1Y3QgaXBfdnNfZGVzdF9kc3Qge1xuICAqIGFuZCBzbyBvbi5cbiAgKi9cbiBzdHJ1Y3QgaXBfdnNfZGVzdCB7XG4mIzQzO1x0LyogQ2FjaGVsaW5lIGZvciBoYXNoIHRhYmxlIG5vZGVzIC0gcmVhZC1tb3N0bHkgKi9cbiYjNDM7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRuX2xpc3Q7ICAgLyogZm9yIHRoZSBkZXN0cyBpbiB0aGUgc2VydmljZSAqL1xuIFx0c3RydWN0IGhsaXN0X25vZGVcdGRfbGlzdDsgICAvKiBmb3IgdGFibGUgd2l0aCBhbGwgdGhlIGRlc3RzICovXG4gXG4tXHR1MTZcdFx0XHRhZjtcdFx0LyogYWRkcmVzcyBmYW1pbHkgKi9cbi1cdF9fYmUxNlx0XHRcdHBvcnQ7XHRcdC8qIHBvcnQgbnVtYmVyIG9mIHRoZSBzZXJ2ZXIgKi9cbi1cdHVuaW9uIG5mX2luZXRfYWRkclx0YWRkcjtcdFx0LyogSVAgYWRkcmVzcyBvZiB0aGUgc2VydmVyICovXG4tXHR2b2xhdGlsZSB1bnNpZ25lZCBpbnRcdGZsYWdzO1x0XHQvKiBkZXN0IHN0YXR1cyBmbGFncyAqL1xuLVx0YXRvbWljX3RcdFx0Y29ubl9mbGFncztcdC8qIGZsYWdzIHRvIGNvcHkgdG8gY29ubiAqL1xuIFx0YXRvbWljX3RcdFx0d2VpZ2h0O1x0XHQvKiBzZXJ2ZXIgd2VpZ2h0ICovXG4tXHR1bnNpZ25lZCBsb25nXHRcdGNmbGFncztcdFx0LyogY29uZmlnIGZsYWdzICovXG4gXHRhdG9taWNfdFx0XHRsYXN0X3dlaWdodDtcdC8qIHNlcnZlciBsYXRlc3Qgd2VpZ2h0ICovXG4mIzQzO1xuJiM0MztcdC8qIGNvbm5lY3Rpb24gdGhyZXNob2xkcyAqL1xuJiM0MztcdHUzMlx0XHRcdGxfdGhyZXNob2xkX3ZhbDsvKiB1c2VkIGxvd2VyIHRocmVzaG9sZCAqL1xuJiM0MztcdHUzMlx0XHRcdHVfdGhyZXNob2xkX3ZhbDsvKiB1c2VkIHVwcGVyIHRocmVzaG9sZCAqL1xuJiM0MztcdC8qIDMyLzQ4ICovXG4mIzQzO1x0dTMyXHRcdFx0bF90aHJlc2hvbGQ7XHQvKiBsb3dlciB0aHJlc2hvbGQgKi9cbiYjNDM7XHR1MzJcdFx0XHR1X3RocmVzaG9sZDtcdC8qIHVwcGVyIHRocmVzaG9sZCAqL1xuJiM0MztcbiYjNDM7XHR1bnNpZ25lZCBsb25nXHRcdGNmbGFncztcdFx0LyogY29uZmlnIGZsYWdzICovXG4mIzQzO1xuJiM0MztcdC8qIDQ0LzY0ICovXG4mIzQzO1x0YXRvbWljX3RcdFx0Y29ubl9mbGFncztcdC8qIGZsYWdzIHRvIGNvcHkgdG8gY29ubiAqL1xuJiM0MztcbiBcdF9fdTE2XHRcdFx0dHVuX3R5cGU7XHQvKiB0dW5uZWwgdHlwZSAqL1xuIFx0X19iZTE2XHRcdFx0dHVuX3BvcnQ7XHQvKiB0dW5uZWwgcG9ydCAqL1xuIFx0X191MTZcdFx0XHR0dW5fZmxhZ3M7XHQvKiB0dW5uZWwgZmxhZ3MgKi9cbiBcbi1cdHJlZmNvdW50X3RcdFx0cmVmY250O1x0XHQvKiByZWZlcmVuY2UgY291bnRlciAqL1xuLVx0c3RydWN0IGlwX3ZzX3N0YXRzICAgICAgc3RhdHM7ICAgICAgICAgIC8qIHN0YXRpc3RpY3MgKi9cbi1cdHVuc2lnbmVkIGxvbmdcdFx0aWRsZV9zdGFydDtcdC8qIHN0YXJ0IHRpbWUsIGppZmZpZXMgKi9cbiYjNDM7XHR1MTZcdFx0XHRhZjtcdFx0LyogYWRkcmVzcyBmYW1pbHkgKi9cbiYjNDM7XHRfX2JlMTZcdFx0XHRwb3J0O1x0XHQvKiBwb3J0IG51bWJlciBvZiB0aGUgc2VydmVyICovXG4mIzQzO1x0LyogNjAvODAgKi9cbiYjNDM7XHR1bmlvbiBuZl9pbmV0X2FkZHJcdGFkZHI7XHRcdC8qIElQIGFkZHJlc3Mgb2YgdGhlIHNlcnZlciAqL1xuIFxuLVx0LyogY29ubmVjdGlvbiBjb3VudGVycyBhbmQgdGhyZXNob2xkcyAqL1xuLVx0YXRvbWljX3RcdFx0YWN0aXZlY29ubnM7XHQvKiBhY3RpdmUgY29ubmVjdGlvbnMgKi9cbiYjNDM7XHQvKiBjb25uZWN0aW9uIGNvdW50ZXJzICovXG4gXHRhdG9taWNfdFx0XHR0b3RhbGNvbm5zO1x0LyogdG90YWwgY29ubmVjdGlvbnMgKi9cbiYjNDM7XHRhdG9taWNfdFx0XHRhY3RpdmVjb25ucztcdC8qIGFjdGl2ZSBjb25uZWN0aW9ucyAqL1xuIFx0YXRvbWljX3RcdFx0cGVyc2lzdGNvbm5zO1x0LyogcGVyc2lzdGVudCBjb25uZWN0aW9ucyAqL1xuLVx0X191MzJcdFx0XHR1X3RocmVzaG9sZDtcdC8qIHVwcGVyIHRocmVzaG9sZCAqL1xuLVx0X191MzJcdFx0XHRsX3RocmVzaG9sZDtcdC8qIGxvd2VyIHRocmVzaG9sZCAqL1xuLVx0X191MzJcdFx0XHRsX3RocmVzaG9sZF92YWw7LyogdXNlZCBsb3dlciB0aHJlc2hvbGQgKi9cbiYjNDM7XG4mIzQzO1x0cmVmY291bnRfdFx0XHRyZWZjbnQ7XHRcdC8qIHJlZmVyZW5jZSBjb3VudGVyICovXG4mIzQzO1x0c3RydWN0IGlwX3ZzX3N0YXRzICAgICAgc3RhdHM7ICAgICAgICAgIC8qIHN0YXRpc3RpY3MgKi9cbiYjNDM7XHR1bnNpZ25lZCBsb25nXHRcdGlkbGVfc3RhcnQ7XHQvKiBzdGFydCB0aW1lLCBqaWZmaWVzICovXG4gXG4gXHQvKiBmb3IgZGVzdGluYXRpb24gY2FjaGUgKi9cbiBcdHNwaW5sb2NrX3RcdFx0ZHN0X2xvY2s7XHQvKiBsb2NrIG9mIGRzdF9jYWNoZSAqL1xuQEAgLTE5MTUsNyAmIzQzOzE5MjMsMTMgQEAgc3RhdGljIGlubGluZSB2b2lkIGlwX3ZzX2Rlc3RfcHV0X2FuZF9mcmVlKHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KVxuIFx0XHRrZnJlZShkZXN0KTtcbiB9XG4gXG4tdm9pZCBpcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCwgaW50IG1vZGUpO1xuJiM0Mzt2b2lkIGlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKHN0cnVjdCBpcF92c19kZXN0ICpkZXN0LCBib29sIG92ZXJsb2FkKTtcbiYjNDM7XG4mIzQzOy8qIENoZWNrIGlmIGRlc3QgaXMgaW4gb3ZlcmxvYWRlZCBzdGF0ZSAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGNvbnN0IHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIFJFQURfT05DRShkZXN0LVx1MDAzZWxfdGhyZXNob2xkX3ZhbCk7XG4mIzQzO31cbiBcbiAvKiBJUFZTIHN5bmMgZGFlbW9uIGRhdGEgYW5kIGZ1bmN0aW9uIHByb3RvdHlwZXNcbiAgKiAoZnJvbSBpcF92c19zeW5jLmMpXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNcbmluZGV4IDZmYTNlMWRjNTM0YzMuLjUzNDhjMmY0OWI2NGUgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jXG5AQCAtMTE1MCw4ICYjNDM7MTE1MCw4IEBAIGlwX3ZzX2JpbmRfZGVzdChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KVxuIFx0XHRpZiAoIShmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX0lOQUNUSVZFKSlcbiBcdFx0XHRhdG9taWNfaW5jKFx1MDAyNmRlc3QtXHUwMDNlYWN0aXZlY29ubnMpO1xuIFx0XHR0YyA9IGF0b21pY19pbmNfcmV0dXJuKFx1MDAyNmRlc3QtXHUwMDNldG90YWxjb25ucyk7XG4tXHRcdGlmICh0YyA9PSBSRUFEX09OQ0UoZGVzdC1cdTAwM2V1X3RocmVzaG9sZCkpXG4tXHRcdFx0aXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoZGVzdCwgMSk7XG4mIzQzO1x0XHRpZiAodGMgXHUwMDNlPSBSRUFEX09OQ0UoZGVzdC1cdTAwM2V1X3RocmVzaG9sZF92YWwpKVxuJiM0MztcdFx0XHRpcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChkZXN0LCB0cnVlKTtcbiBcdH0gZWxzZSB7XG4gXHRcdC8qIEl0IGlzIGEgcGVyc2lzdGVudCBjb25uZWN0aW9uL3RlbXBsYXRlLCBzbyBpbmNyZWFzZVxuIFx0XHQgICB0aGUgcGVyc2lzdGVudCBjb25uZWN0aW9uIGNvdW50ZXIgKi9cbkBAIC0xMjQzLDggJiM0MzsxMjQzLDggQEAgc3RhdGljIGlubGluZSB2b2lkIGlwX3ZzX3VuYmluZF9kZXN0KHN0cnVjdCBpcF92c19jb25uICpjcClcbiBcdFx0aWYgKCEoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9JTkFDVElWRSkpXG4gXHRcdFx0YXRvbWljX2RlYyhcdTAwMjZkZXN0LVx1MDAzZWFjdGl2ZWNvbm5zKTtcbiBcdFx0dGMgPSBhdG9taWNfZmV0Y2hfZGVjKFx1MDAyNmRlc3QtXHUwMDNldG90YWxjb25ucyk7XG4tXHRcdGlmICh0YyA9PSBSRUFEX09OQ0UoZGVzdC1cdTAwM2VsX3RocmVzaG9sZF92YWwpKVxuLVx0XHRcdGlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKGRlc3QsIC0xKTtcbiYjNDM7XHRcdGlmICh0YyBcdTAwM2M9IFJFQURfT05DRShkZXN0LVx1MDAzZWxfdGhyZXNob2xkX3ZhbCkpXG4mIzQzO1x0XHRcdGlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKGRlc3QsIGZhbHNlKTtcbiBcdH0gZWxzZSB7XG4gXHRcdC8qIEl0IGlzIGEgcGVyc2lzdGVudCBjb25uZWN0aW9uL3RlbXBsYXRlLCBzbyBkZWNyZWFzZVxuIFx0XHQgICB0aGUgcGVyc2lzdGVudCBjb25uZWN0aW9uIGNvdW50ZXIgKi9cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmNcbmluZGV4IDRjMWM3Mzk0NDZiNzYuLjMwMDM1NDdkY2FiZTUgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuY1xuQEAgLTEzMDksMzIgJiM0MzsxMzA5LDMyIEBAIHZvaWQgaXBfdnNfc3RhdHNfZnJlZShzdHJ1Y3QgaXBfdnNfc3RhdHMgKnN0YXRzKVxuICAqIC0gY29ubnMgcmVhY2ggdV90aHJlc2hvbGQgYW5kIGV4Y2VlZCBpdDogc2V0IHRoZSBmbGFnXG4gICogLSBjb25ucyBnbyBiZWxvdyBsX3RocmVzaG9sZCAob3IgNzUlIG9mIHVfdGhyZXNob2xkKTogY2xlYXIgdGhlIGZsYWdcbiAgKi9cbi1zdGF0aWMgdm9pZCBfX2lwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKHN0cnVjdCBpcF92c19kZXN0ICpkZXN0LCBpbnQgbW9kZSlcbiYjNDM7c3RhdGljIHZvaWQgX19pcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCwgYm9vbCBvdmVybG9hZClcbiB7XG4gXHRpbnQgY29ubnM7XG4gXHR1MzIgbCwgdTtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2ZGVzdC1cdTAwM2Vkc3RfbG9jayk7XG4gXHR1ID0gUkVBRF9PTkNFKGRlc3QtXHUwMDNldV90aHJlc2hvbGQpO1xuLVx0aWYgKCF1KVxuLVx0XHRnb3RvIHVuc2V0O1xuLVx0bCA9IFJFQURfT05DRShkZXN0LVx1MDAzZWxfdGhyZXNob2xkX3ZhbCk7XG4tXHRjb25ucyA9IGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNldG90YWxjb25ucyk7XG4tXHRpZiAoY29ubnMgXHUwMDNlPSAobW9kZSBcdTAwM2UgMCA/IGwgOiB1KSkge1xuLVx0XHRkZXN0LVx1MDAzZWZsYWdzIHw9IElQX1ZTX0RFU1RfRl9PVkVSTE9BRDtcbi1cdFx0cmV0dXJuO1xuJiM0MztcdGlmICh1KSB7XG4mIzQzO1x0XHQvKiBMb3cgdGhyZXNob2xkIGRlZmF1bHRzIHRvIDc1JSBvZiB1cHBlciB0aHJlc2hvbGQgKi9cbiYjNDM7XHRcdGwgPSBSRUFEX09OQ0UoZGVzdC1cdTAwM2VsX3RocmVzaG9sZCkgPyA6ICh1IC0gKHUgXHUwMDNlXHUwMDNlIDIpKTtcbiYjNDM7XHRcdGNvbm5zID0gYXRvbWljX3JlYWQoXHUwMDI2ZGVzdC1cdTAwM2V0b3RhbGNvbm5zKTtcbiYjNDM7XHRcdGlmIChjb25ucyBcdTAwM2U9IChvdmVybG9hZCA/IGwgOiB1KSkge1xuJiM0MztcdFx0XHRXUklURV9PTkNFKGRlc3QtXHUwMDNldV90aHJlc2hvbGRfdmFsLCBJTlRfTUFYKTtcbiYjNDM7XHRcdFx0V1JJVEVfT05DRShkZXN0LVx1MDAzZWxfdGhyZXNob2xkX3ZhbCwgbCk7XG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XHRcdH1cbiBcdH1cbi1cdGlmIChjb25ucyBcdTAwM2U9IChtb2RlIFx1MDAzYyAwID8gdSA6IGwpKVxuLVx0XHRyZXR1cm47XG4gXG4tdW5zZXQ6XG4tXHRkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNj0gfklQX1ZTX0RFU1RfRl9PVkVSTE9BRDtcbiYjNDM7XHRXUklURV9PTkNFKGRlc3QtXHUwMDNldV90aHJlc2hvbGRfdmFsLCB1ID8gOiBJTlRfTUFYKTtcbiYjNDM7XHRXUklURV9PTkNFKGRlc3QtXHUwMDNlbF90aHJlc2hvbGRfdmFsLCAwKTtcbiB9XG4gXG4tdm9pZCBpcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCwgaW50IG1vZGUpXG4mIzQzO3ZvaWQgaXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QsIGJvb2wgb3ZlcmxvYWQpXG4ge1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmRlc3QtXHUwMDNlZHN0X2xvY2spO1xuLVx0X19pcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChkZXN0LCBtb2RlKTtcbiYjNDM7XHRfX2lwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKGRlc3QsIG92ZXJsb2FkKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmRlc3QtXHUwMDNlZHN0X2xvY2spO1xuIH1cbiBcbkBAIC0xNDA2LDE1ICYjNDM7MTQwNiwxMyBAQCBfX2lwX3ZzX3VwZGF0ZV9kZXN0KHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIHN0cnVjdCBpcF92c19kZXN0ICpkZXN0LFxuIFxuIFx0aWYgKFJFQURfT05DRShkZXN0LVx1MDAzZXVfdGhyZXNob2xkKSAhPSB1ZGVzdC1cdTAwM2V1X3RocmVzaG9sZCB8fFxuIFx0ICAgIFJFQURfT05DRShkZXN0LVx1MDAzZWxfdGhyZXNob2xkKSAhPSB1ZGVzdC1cdTAwM2VsX3RocmVzaG9sZCkge1xuJiM0MztcdFx0Ym9vbCBvdmVybG9hZDtcbiYjNDM7XG4gXHRcdHNwaW5fbG9ja19iaChcdTAwMjZkZXN0LVx1MDAzZWRzdF9sb2NrKTtcbiBcdFx0V1JJVEVfT05DRShkZXN0LVx1MDAzZXVfdGhyZXNob2xkLCB1ZGVzdC1cdTAwM2V1X3RocmVzaG9sZCk7XG4gXHRcdFdSSVRFX09OQ0UoZGVzdC1cdTAwM2VsX3RocmVzaG9sZCwgdWRlc3QtXHUwMDNlbF90aHJlc2hvbGQpO1xuLVx0XHQvKiBMb3cgdGhyZXNob2xkIGRlZmF1bHRzIHRvIDc1JSBvZiB1cHBlciB0aHJlc2hvbGQgKi9cbi1cdFx0V1JJVEVfT05DRShkZXN0LVx1MDAzZWxfdGhyZXNob2xkX3ZhbCxcbi1cdFx0XHQgICB1ZGVzdC1cdTAwM2VsX3RocmVzaG9sZCA/IDpcbi1cdFx0XHQgICAodWRlc3QtXHUwMDNldV90aHJlc2hvbGQgLVxuLVx0XHRcdCAgICAodWRlc3QtXHUwMDNldV90aHJlc2hvbGQgXHUwMDNlXHUwMDNlIDIpKSk7XG4tXHRcdF9faXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoZGVzdCwgMCk7XG4mIzQzO1x0XHRvdmVybG9hZCA9IGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KTtcbiYjNDM7XHRcdF9faXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoZGVzdCwgb3ZlcmxvYWQpO1xuIFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZkZXN0LVx1MDAzZWRzdF9sb2NrKTtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZGguYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19kaC5jXG5pbmRleCA0M2FiZWQ3YTI2YTZhLi45NWU1Mjk1MGFkYmI3IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2RoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19kaC5jXG5AQCAtMTk1LDE2ICYjNDM7MTk1LDYgQEAgc3RhdGljIGludCBpcF92c19kaF9kZXN0X2NoYW5nZWQoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YyxcbiB9XG4gXG4gXG4tLypcbi0gKiAgICAgIElmIHRoZSBkZXN0IGZsYWdzIGlzIHNldCB3aXRoIElQX1ZTX0RFU1RfRl9PVkVSTE9BRCxcbi0gKiAgICAgIGNvbnNpZGVyIHRoYXQgdGhlIHNlcnZlciBpcyBvdmVybG9hZGVkIGhlcmUuXG4tICovXG4tc3RhdGljIGlubGluZSBpbnQgaXNfb3ZlcmxvYWRlZChzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcbi17XG4tXHRyZXR1cm4gZGVzdC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEO1xuLX1cbi1cbi1cbiAvKlxuICAqICAgICAgRGVzdGluYXRpb24gaGFzaGluZyBzY2hlZHVsaW5nXG4gICovXG5AQCAtMjE5LDEwICYjNDM7MjA5LDggQEAgaXBfdnNfZGhfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBcdHMgPSAoc3RydWN0IGlwX3ZzX2RoX3N0YXRlICopIHN2Yy1cdTAwM2VzY2hlZF9kYXRhO1xuIFx0ZGVzdCA9IGlwX3ZzX2RoX2dldChzdmMtXHUwMDNlYWYsIHMsIFx1MDAyNmlwaC1cdTAwM2VkYWRkcik7XG4tXHRpZiAoIWRlc3QgfHxcbi1cdCAgICAhKGRlc3QtXHUwMDNlY2ZsYWdzIFx1MDAyNiBJUF9WU19ERVNUX0NGX0FWQUlMQUJMRSlcbi1cdCAgICB8fCBhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZXdlaWdodCkgXHUwMDNjPSAwXG4tXHQgICAgfHwgaXNfb3ZlcmxvYWRlZChkZXN0KSkge1xuJiM0MztcdGlmICghZGVzdCB8fCBhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZXdlaWdodCkgXHUwMDNjPSAwIHx8XG4mIzQzO1x0ICAgIGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSkge1xuIFx0XHRpcF92c19zY2hlZHVsZXJfZXJyKHN2YywgXCYjMzQ7bm8gZGVzdGluYXRpb24gYXZhaWxhYmxlXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2ZvLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZm8uY1xuaW5kZXggZDY1N2I0N2M2NTExZi4uZTA3ZmEzM2Y2ZDUyNyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZm8uY1xuQEAgLTI5LDcgJiM0MzsyOSw3IEBAIGlwX3ZzX2ZvX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHQgKiBGaW5kIHZpcnR1YWwgc2VydmVyIHdpdGggaGlnaGVzdCB3ZWlnaHQgYW5kIHNlbmQgaXQgdHJhZmZpY1xuIFx0ICovXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkZXN0LCBcdTAwMjZzdmMtXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcbi1cdFx0aWYgKCEoZGVzdC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdGlmICghaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgYXRvbWljX3JlYWQoXHUwMDI2ZGVzdC1cdTAwM2V3ZWlnaHQpIFx1MDAzZSBodykge1xuIFx0XHRcdGh3ZWlnaHQgPSBkZXN0O1xuIFx0XHRcdGh3ID0gYXRvbWljX3JlYWQoXHUwMDI2ZGVzdC1cdTAwM2V3ZWlnaHQpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsYy5jXG5pbmRleCA2OTNiY2M4MmNjYjc3Li5iZmYxMDljMWM5NTliIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGMuY1xuQEAgLTQxNCw3ICYjNDM7NDE0LDcgQEAgX19pcF92c19sYmxjX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMpXG4gXHQgKiBuZXcgY29ubmVjdGlvbi5cbiBcdCAqL1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZGVzdCwgXHUwMDI2c3ZjLVx1MDAzZWRlc3RpbmF0aW9ucywgbl9saXN0KSB7XG4tXHRcdGlmIChkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpXG4mIzQzO1x0XHRpZiAoaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2ZGVzdC1cdTAwM2V3ZWlnaHQpIFx1MDAzZSAwKSB7XG4gXHRcdFx0bGVhc3QgPSBkZXN0O1xuQEAgLTQyOSw3ICYjNDM7NDI5LDcgQEAgX19pcF92c19sYmxjX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMpXG4gXHQgKi9cbiAgIG5leHRzdGFnZTpcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmN1KGRlc3QsIFx1MDAyNnN2Yy1cdTAwM2VkZXN0aW5hdGlvbnMsIG5fbGlzdCkge1xuLVx0XHRpZiAoZGVzdC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKVxuJiM0MztcdFx0aWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0ZG9oID0gaXBfdnNfZGVzdF9jb25uX292ZXJoZWFkKGRlc3QpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjci5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGNyLmNcbmluZGV4IGY1M2YwNWNlZWEzNmYuLmMyODUzZTA3ZTc4NzIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsY3IuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGNyLmNcbkBAIC0xNjYsNyAmIzQzOzE2Niw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGlwX3ZzX2Rlc3QgKmlwX3ZzX2Rlc3Rfc2V0X21pbihzdHJ1Y3QgaXBfdnNfZGVzdF9zZXQgKnNldClcbiBcdC8qIHNlbGVjdCB0aGUgZmlyc3QgZGVzdGluYXRpb24gc2VydmVyLCB3aG9zZSB3ZWlnaHQgXHUwMDNlIDAgKi9cbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGUsIFx1MDAyNnNldC1cdTAwM2VsaXN0LCBsaXN0KSB7XG4gXHRcdGxlYXN0ID0gZS1cdTAwM2VkZXN0O1xuLVx0XHRpZiAobGVhc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRClcbiYjNDM7XHRcdGlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQobGVhc3QpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAoKGF0b21pY19yZWFkKFx1MDAyNmxlYXN0LVx1MDAzZXdlaWdodCkgXHUwMDNlIDApIFx1MDAyNlx1MDAyNlxuQEAgLTE4MSw3ICYjNDM7MTgxLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaXBfdnNfZGVzdCAqaXBfdnNfZGVzdF9zZXRfbWluKHN0cnVjdCBpcF92c19kZXN0X3NldCAqc2V0KVxuICAgbmV4dHN0YWdlOlxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yY3UoZSwgXHUwMDI2c2V0LVx1MDAzZWxpc3QsIGxpc3QpIHtcbiBcdFx0ZGVzdCA9IGUtXHUwMDNlZGVzdDtcbi1cdFx0aWYgKGRlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRClcbiYjNDM7XHRcdGlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGRvaCA9IGlwX3ZzX2Rlc3RfY29ubl9vdmVyaGVhZChkZXN0KTtcbkBAIC01NzcsNyAmIzQzOzU3Nyw3IEBAIF9faXBfdnNfbGJsY3Jfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YylcbiBcdCAqIG5ldyBjb25uZWN0aW9uLlxuIFx0ICovXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkZXN0LCBcdTAwMjZzdmMtXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcbi1cdFx0aWYgKGRlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRClcbiYjNDM7XHRcdGlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZXdlaWdodCkgXHUwMDNlIDApIHtcbkBAIC01OTMsNyAmIzQzOzU5Myw3IEBAIF9faXBfdnNfbGJsY3Jfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YylcbiBcdCAqL1xuICAgbmV4dHN0YWdlOlxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yY3UoZGVzdCwgXHUwMDI2c3ZjLVx1MDAzZWRlc3RpbmF0aW9ucywgbl9saXN0KSB7XG4tXHRcdGlmIChkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpXG4mIzQzO1x0XHRpZiAoaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRkb2ggPSBpcF92c19kZXN0X2Nvbm5fb3ZlcmhlYWQoZGVzdCk7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xjLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGMuY1xuaW5kZXggMThiOTc2YTdjNGQyMC4uOTAwMmY0OTFiZmY2OCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGMuY1xuQEAgLTM4LDcgJiM0MzszOCw3IEBAIGlwX3ZzX2xjX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHQgKi9cbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsIFx1MDAyNnN2Yy1cdTAwM2VkZXN0aW5hdGlvbnMsIG5fbGlzdCkge1xuLVx0XHRpZiAoKGRlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRCkgfHxcbiYjNDM7XHRcdGlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkgfHxcbiBcdFx0ICAgIGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNld2VpZ2h0KSA9PSAwKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRkb2ggPSBpcF92c19kZXN0X2Nvbm5fb3ZlcmhlYWQoZGVzdCk7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX21oLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbWguY1xuaW5kZXggMDIwODYzMDQ3NTYyZC4uZDcwYjIzYWVjNWZlYyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19taC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbWguY1xuQEAgLTgwLDcgJiM0Mzs4MCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZW5lcmF0ZV9oYXNoX3NlY3JldChoc2lwaGFzaF9rZXlfdCAqaGFzaDEsXG4gc3RhdGljIGlubGluZSBib29sIGlzX3VuYXZhaWxhYmxlKHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KVxuIHtcbiBcdHJldHVybiBhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZXdlaWdodCkgXHUwMDNjPSAwIHx8XG4tXHQgICAgICAgZGVzdC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEO1xuJiM0MztcdCAgICAgICBpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCk7XG4gfVxuIFxuIC8qIFJldHVybnMgaGFzaCB2YWx1ZSBmb3IgSVBWUyBNSCBlbnRyeSAqL1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19ucS5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX25xLmNcbmluZGV4IGFkYTE1OGM2MTBjZTEuLjdjYzI4OTAyMDg2ZTcgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbnEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX25xLmNcbkBAIC03Miw3ICYjNDM7NzIsNyBAQCBpcF92c19ucV9zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZGVzdCwgXHUwMDI2c3ZjLVx1MDAzZWRlc3RpbmF0aW9ucywgbl9saXN0KSB7XG4gXG4tXHRcdGlmIChkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQgfHxcbiYjNDM7XHRcdGlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkgfHxcbiBcdFx0ICAgICFhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZXdlaWdodCkpXG4gXHRcdFx0Y29udGludWU7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX292Zi5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX292Zi5jXG5pbmRleCBjNWM2N2RmODBhMGIzLi5lYWEzYTdhZTZlZmE2IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX292Zi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfb3ZmLmNcbkBAIC0zMyw3ICYjNDM7MzMsNyBAQCBpcF92c19vdmZfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdCovXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkZXN0LCBcdTAwMjZzdmMtXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcbiBcdFx0dyA9IGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNld2VpZ2h0KTtcbi1cdFx0aWYgKChkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpIHx8XG4mIzQzO1x0XHRpZiAoaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpIHx8XG4gXHRcdCAgICBhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZWFjdGl2ZWNvbm5zKSBcdTAwM2UgdyB8fFxuIFx0XHQgICAgdyA9PSAwKVxuIFx0XHRcdGNvbnRpbnVlO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19yci5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3JyLmNcbmluZGV4IDQxMjVlZTU2MWNkYzMuLmJkMTdjZGQwOTJmNWYgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcnIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3JyLmNcbkBAIC02Niw3ICYjNDM7NjYsNyBAQCBpcF92c19ycl9zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShkZXN0LFxuIFx0XHRcdFx0XHRcdCBcdTAwMjZzdmMtXHUwMDNlZGVzdGluYXRpb25zLFxuIFx0XHRcdFx0XHRcdCBuX2xpc3QpIHtcbi1cdFx0XHRpZiAoIShkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHRpZiAoIWlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICAgYXRvbWljX3JlYWQoXHUwMDI2ZGVzdC1cdTAwM2V3ZWlnaHQpIFx1MDAzZSAwKVxuIFx0XHRcdFx0LyogSElUICovXG4gXHRcdFx0XHRnb3RvIG91dDtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2VkLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2VkLmNcbmluZGV4IDI0NWEzMjNjODRjZDMuLjc5MjVmNGQyOGZjZTkgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2VkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zZWQuY1xuQEAgLTc1LDcgJiM0Mzs3NSw3IEBAIGlwX3ZzX3NlZF9zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0ICovXG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkZXN0LCBcdTAwMjZzdmMtXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcbi1cdFx0aWYgKCEoZGVzdC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdGlmICghaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgYXRvbWljX3JlYWQoXHUwMDI2ZGVzdC1cdTAwM2V3ZWlnaHQpIFx1MDAzZSAwKSB7XG4gXHRcdFx0bGVhc3QgPSBkZXN0O1xuIFx0XHRcdGxvaCA9IGlwX3ZzX3NlZF9kZXN0X292ZXJoZWFkKGxlYXN0KTtcbkBAIC05MCw3ICYjNDM7OTAsNyBAQCBpcF92c19zZWRfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdCAqL1xuICAgbmV4dHN0YWdlOlxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yY3UoZGVzdCwgXHUwMDI2c3ZjLVx1MDAzZWRlc3RpbmF0aW9ucywgbl9saXN0KSB7XG4tXHRcdGlmIChkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpXG4mIzQzO1x0XHRpZiAoaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRkb2ggPSBpcF92c19zZWRfZGVzdF9vdmVyaGVhZChkZXN0KTtcbiBcdFx0aWYgKChfX3M2NClsb2ggKiBhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZXdlaWdodCkgXHUwMDNlXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NoLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2guY1xuaW5kZXggY2Q2NzA2NmUzYjI2MS4uYzI0ZGQ1Y2I3ZTQ3OCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zaC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2guY1xuQEAgLTczLDcgJiM0Mzs3Myw3IEBAIHN0cnVjdCBpcF92c19zaF9zdGF0ZSB7XG4gc3RhdGljIGlubGluZSBib29sIGlzX3VuYXZhaWxhYmxlKHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KVxuIHtcbiBcdHJldHVybiBhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZXdlaWdodCkgXHUwMDNjPSAwIHx8XG4tXHQgICAgICAgZGVzdC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEO1xuJiM0MztcdCAgICAgICBpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCk7XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3R3b3MuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c190d29zLmNcbmluZGV4IGRiYjdmNWZkNDY4OGEuLjg2MTg2MTIyYTFmMDEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfdHdvcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfdHdvcy5jXG5AQCAtNTIsNyAmIzQzOzUyLDcgQEAgc3RhdGljIHN0cnVjdCBpcF92c19kZXN0ICppcF92c190d29zX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsXG4gXG4gXHQvKiBHZW5lcmF0ZSBhIHJhbmRvbSB3ZWlnaHQgYmV0d2VlbiBbMCxzdW0gb2YgYWxsIHdlaWdodHMpICovXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkZXN0LCBcdTAwMjZzdmMtXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcbi1cdFx0aWYgKCEoZGVzdC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKSkge1xuJiM0MztcdFx0aWYgKCFpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkpIHtcbiBcdFx0XHR3ZWlnaHQgPSBhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZXdlaWdodCk7XG4gXHRcdFx0aWYgKHdlaWdodCBcdTAwM2UgMCkge1xuIFx0XHRcdFx0dG90YWxfd2VpZ2h0ICYjNDM7PSB3ZWlnaHQ7XG5AQCAtNzUsNyAmIzQzOzc1LDcgQEAgc3RhdGljIHN0cnVjdCBpcF92c19kZXN0ICppcF92c190d29zX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsXG4gXG4gXHQvKiBQaWNrIHR3byB3ZWlnaHRlZCBzZXJ2ZXJzICovXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkZXN0LCBcdTAwMjZzdmMtXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcbi1cdFx0aWYgKGRlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRClcbiYjNDM7XHRcdGlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdHdlaWdodCA9IGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNld2VpZ2h0KTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd2xjLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd2xjLmNcbmluZGV4IDlkYTQ0NWNhMDlhMTQuLjA4ZTllMjJmNzJiZjggMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd2xjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c193bGMuY1xuQEAgLTQ3LDcgJiM0Mzs0Nyw3IEBAIGlwX3ZzX3dsY19zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0ICovXG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkZXN0LCBcdTAwMjZzdmMtXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcbi1cdFx0aWYgKCEoZGVzdC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdGlmICghaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgYXRvbWljX3JlYWQoXHUwMDI2ZGVzdC1cdTAwM2V3ZWlnaHQpIFx1MDAzZSAwKSB7XG4gXHRcdFx0bGVhc3QgPSBkZXN0O1xuIFx0XHRcdGxvaCA9IGlwX3ZzX2Rlc3RfY29ubl9vdmVyaGVhZChsZWFzdCk7XG5AQCAtNjIsNyAmIzQzOzYyLDcgQEAgaXBfdnNfd2xjX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHQgKi9cbiAgIG5leHRzdGFnZTpcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmN1KGRlc3QsIFx1MDAyNnN2Yy1cdTAwM2VkZXN0aW5hdGlvbnMsIG5fbGlzdCkge1xuLVx0XHRpZiAoZGVzdC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKVxuJiM0MztcdFx0aWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSlcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0ZG9oID0gaXBfdnNfZGVzdF9jb25uX292ZXJoZWFkKGRlc3QpO1xuIFx0XHRpZiAoKF9fczY0KWxvaCAqIGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNld2VpZ2h0KSBcdTAwM2VcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd3JyLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd3JyLmNcbmluZGV4IDJkY2ZmMTA0MGRhNTIuLmZhZDY5YmFlNWEyMmIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd3JyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c193cnIuY1xuQEAgLTE3Niw3ICYjNDM7MTc2LDcgQEAgaXBfdnNfd3JyX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmN1KGRlc3QsXG4gXHRcdFx0XHRcdFx0IFx1MDAyNnN2Yy1cdTAwM2VkZXN0aW5hdGlvbnMsXG4gXHRcdFx0XHRcdFx0IG5fbGlzdCkge1xuLVx0XHRcdGlmICghKGRlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdGlmICghaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICBhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZXdlaWdodCkgXHUwMDNlPSBtYXJrLVx1MDAzZWN3KVxuIFx0XHRcdFx0Z290byBmb3VuZDtcbiBcdFx0XHRpZiAoZGVzdCA9PSBzdG9wKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjEwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQmIzM0OywKICAgICYjMzQ7aXBfdnNfYmluZF9kZXN0JiMzNDssCiAgICAmIzM0O2lwX3ZzX3VuYmluZF9kZXN0JiMzNDssCiAgICAmIzM0O19faXBfdnNfdXBkYXRlX2Rlc3QmIzM0OywKICAgICYjMzQ7aXBfdnNfZWRpdF9kZXN0JiMzNDssCiAgICAmIzM0O2lwX3ZzX2FkZF9kZXN0JiMzNDssCiAgICAmIzM0O2lwX3ZzX3JyX3NjaGVkdWxlJiMzNDssCiAgICAmIzM0O2lwX3ZzX3dycl9zY2hlZHVsZSYjMzQ7LAogICAgJiMzNDtpcF92c193bGNfc2NoZWR1bGUmIzM0OywKICAgICYjMzQ7aXBfdnNfbGNfc2NoZWR1bGUmIzM0OywKICAgICYjMzQ7aXBfdnNfZm9fc2NoZWR1bGUmIzM0OywKICAgICYjMzQ7aXBfdnNfb3ZmX3NjaGVkdWxlJiMzNDssCiAgICAmIzM0O2lwX3ZzX3R3b3Nfc2NoZWR1bGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGRlc3RpbmF0aW9uIG92ZXJsb2FkIHRyYWNraW5nIGxvZ2ljIGFuZCBkZXN0aW5hdGlvbiBzdHJ1Y3R1cmUgbGF5b3V0IGluIHRoZSBJUFZTIChJUCBWaXJ0dWFsIFNlcnZlcikgc3Vic3lzdGVtLiBJdCB1cGRhdGVzIGNvbm5lY3Rpb24gYmluZGluZyBhbmQgdW5iaW5kaW5nIHRocmVzaG9sZHMsIGNvbnRyb2wgcGxhbmUgZGVzdGluYXRpb24gdXBkYXRlcywgYW5kIHNjaGVkdWxlciBvdmVybG9hZCBldmFsdWF0aW9uIGFjcm9zcyBJUFZTIGFsZ29yaXRobXMuIFRoZXNlIGFyZSByZWFjaGFibGUsIGV4ZWN1dGFibGUgbmV0d29yayBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgZm9yIHJhY2UgY29uZGl0aW9ucywgYXJpdGhtZXRpYyBvciBzdGF0ZSBoYW5kbGluZyBidWdzLCBhbmQgdGhyZXNob2xkIGVkZ2UgY2FzZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhMDI5YzE4NTM5ZTJiZDQzOTNiYjg3MzZkZjAwMDNlNDIyY2I3YzliCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAyMjoxMDoxNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX3ZzLmggYi9pbmNsdWRlL25ldC9pcF92cy5oCmluZGV4IDMyZmRlNzMxYmNlYjcuLjlhODNiZmYzMjU2OWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwX3ZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvaXBfdnMuaApAQCAtMzYsOSAmIzQzOzM2LDYgQEAKICNkZWZpbmUgSVBfVlNfSERSX0lOVkVSU0UJMQogI2RlZmluZSBJUF9WU19IRFJfSUNNUAkJMgogCi0vKiBEZXN0aW5hdGlvbiBTZXJ2ZXIgRmxhZ3MgKi8KLSNkZWZpbmUgSVBfVlNfREVTVF9GX09WRVJMT0FECTB4MDAwMgkJLyogc2VydmVyIGlzIG92ZXJsb2FkZWQgKi8KLQogLyogRGVzdGluYXRpb24gU2VydmVyIENvbmZpZyBGbGFncyAqLwogI2RlZmluZSBJUF9WU19ERVNUX0NGX0FWQUlMQUJMRQkweDAwMDEJCS8qIHNlcnZlciBpcyBhdmFpbGFibGUgKi8KIApAQCAtOTczLDMyICYjNDM7OTcwLDQzIEBAIHN0cnVjdCBpcF92c19kZXN0X2RzdCB7CiAgKiBhbmQgc28gb24uCiAgKi8KIHN0cnVjdCBpcF92c19kZXN0IHsKJiM0MzsJLyogQ2FjaGVsaW5lIGZvciBoYXNoIHRhYmxlIG5vZGVzIC0gcmVhZC1tb3N0bHkgKi8KJiM0MzsKIAlzdHJ1Y3QgbGlzdF9oZWFkCW5fbGlzdDsgICAvKiBmb3IgdGhlIGRlc3RzIGluIHRoZSBzZXJ2aWNlICovCiAJc3RydWN0IGhsaXN0X25vZGUJZF9saXN0OyAgIC8qIGZvciB0YWJsZSB3aXRoIGFsbCB0aGUgZGVzdHMgKi8KIAotCXUxNgkJCWFmOwkJLyogYWRkcmVzcyBmYW1pbHkgKi8KLQlfX2JlMTYJCQlwb3J0OwkJLyogcG9ydCBudW1iZXIgb2YgdGhlIHNlcnZlciAqLwotCXVuaW9uIG5mX2luZXRfYWRkcglhZGRyOwkJLyogSVAgYWRkcmVzcyBvZiB0aGUgc2VydmVyICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgaW50CWZsYWdzOwkJLyogZGVzdCBzdGF0dXMgZmxhZ3MgKi8KLQlhdG9taWNfdAkJY29ubl9mbGFnczsJLyogZmxhZ3MgdG8gY29weSB0byBjb25uICovCiAJYXRvbWljX3QJCXdlaWdodDsJCS8qIHNlcnZlciB3ZWlnaHQgKi8KLQl1bnNpZ25lZCBsb25nCQljZmxhZ3M7CQkvKiBjb25maWcgZmxhZ3MgKi8KIAlhdG9taWNfdAkJbGFzdF93ZWlnaHQ7CS8qIHNlcnZlciBsYXRlc3Qgd2VpZ2h0ICovCiYjNDM7CiYjNDM7CS8qIGNvbm5lY3Rpb24gdGhyZXNob2xkcyAqLwomIzQzOwl1MzIJCQlsX3RocmVzaG9sZF92YWw7LyogdXNlZCBsb3dlciB0aHJlc2hvbGQgKi8KJiM0MzsJdTMyCQkJdV90aHJlc2hvbGRfdmFsOy8qIHVzZWQgdXBwZXIgdGhyZXNob2xkICovCiYjNDM7CS8qIDMyLzQ4ICovCiYjNDM7CXUzMgkJCWxfdGhyZXNob2xkOwkvKiBsb3dlciB0aHJlc2hvbGQgKi8KJiM0MzsJdTMyCQkJdV90aHJlc2hvbGQ7CS8qIHVwcGVyIHRocmVzaG9sZCAqLwomIzQzOwomIzQzOwl1bnNpZ25lZCBsb25nCQljZmxhZ3M7CQkvKiBjb25maWcgZmxhZ3MgKi8KJiM0MzsKJiM0MzsJLyogNDQvNjQgKi8KJiM0MzsJYXRvbWljX3QJCWNvbm5fZmxhZ3M7CS8qIGZsYWdzIHRvIGNvcHkgdG8gY29ubiAqLwomIzQzOwogCV9fdTE2CQkJdHVuX3R5cGU7CS8qIHR1bm5lbCB0eXBlICovCiAJX19iZTE2CQkJdHVuX3BvcnQ7CS8qIHR1bm5lbCBwb3J0ICovCiAJX191MTYJCQl0dW5fZmxhZ3M7CS8qIHR1bm5lbCBmbGFncyAqLwogCi0JcmVmY291bnRfdAkJcmVmY250OwkJLyogcmVmZXJlbmNlIGNvdW50ZXIgKi8KLQlzdHJ1Y3QgaXBfdnNfc3RhdHMgICAgICBzdGF0czsgICAgICAgICAgLyogc3RhdGlzdGljcyAqLwotCXVuc2lnbmVkIGxvbmcJCWlkbGVfc3RhcnQ7CS8qIHN0YXJ0IHRpbWUsIGppZmZpZXMgKi8KJiM0MzsJdTE2CQkJYWY7CQkvKiBhZGRyZXNzIGZhbWlseSAqLwomIzQzOwlfX2JlMTYJCQlwb3J0OwkJLyogcG9ydCBudW1iZXIgb2YgdGhlIHNlcnZlciAqLwomIzQzOwkvKiA2MC84MCAqLwomIzQzOwl1bmlvbiBuZl9pbmV0X2FkZHIJYWRkcjsJCS8qIElQIGFkZHJlc3Mgb2YgdGhlIHNlcnZlciAqLwogCi0JLyogY29ubmVjdGlvbiBjb3VudGVycyBhbmQgdGhyZXNob2xkcyAqLwotCWF0b21pY190CQlhY3RpdmVjb25uczsJLyogYWN0aXZlIGNvbm5lY3Rpb25zICovCiYjNDM7CS8qIGNvbm5lY3Rpb24gY291bnRlcnMgKi8KIAlhdG9taWNfdAkJdG90YWxjb25uczsJLyogdG90YWwgY29ubmVjdGlvbnMgKi8KJiM0MzsJYXRvbWljX3QJCWFjdGl2ZWNvbm5zOwkvKiBhY3RpdmUgY29ubmVjdGlvbnMgKi8KIAlhdG9taWNfdAkJcGVyc2lzdGNvbm5zOwkvKiBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zICovCi0JX191MzIJCQl1X3RocmVzaG9sZDsJLyogdXBwZXIgdGhyZXNob2xkICovCi0JX191MzIJCQlsX3RocmVzaG9sZDsJLyogbG93ZXIgdGhyZXNob2xkICovCi0JX191MzIJCQlsX3RocmVzaG9sZF92YWw7LyogdXNlZCBsb3dlciB0aHJlc2hvbGQgKi8KJiM0MzsKJiM0MzsJcmVmY291bnRfdAkJcmVmY250OwkJLyogcmVmZXJlbmNlIGNvdW50ZXIgKi8KJiM0MzsJc3RydWN0IGlwX3ZzX3N0YXRzICAgICAgc3RhdHM7ICAgICAgICAgIC8qIHN0YXRpc3RpY3MgKi8KJiM0MzsJdW5zaWduZWQgbG9uZwkJaWRsZV9zdGFydDsJLyogc3RhcnQgdGltZSwgamlmZmllcyAqLwogCiAJLyogZm9yIGRlc3RpbmF0aW9uIGNhY2hlICovCiAJc3BpbmxvY2tfdAkJZHN0X2xvY2s7CS8qIGxvY2sgb2YgZHN0X2NhY2hlICovCkBAIC0xOTE1LDcgJiM0MzsxOTIzLDEzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c19kZXN0X3B1dF9hbmRfZnJlZShzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCkKIAkJa2ZyZWUoZGVzdCk7CiB9CiAKLXZvaWQgaXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QsIGludCBtb2RlKTsKJiM0Mzt2b2lkIGlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKHN0cnVjdCBpcF92c19kZXN0ICpkZXN0LCBib29sIG92ZXJsb2FkKTsKJiM0MzsKJiM0MzsvKiBDaGVjayBpZiBkZXN0IGlzIGluIG92ZXJsb2FkZWQgc3RhdGUgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGNvbnN0IHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KQomIzQzO3sKJiM0MzsJcmV0dXJuIFJFQURfT05DRShkZXN0LSZndDtsX3RocmVzaG9sZF92YWwpOwomIzQzO30KIAogLyogSVBWUyBzeW5jIGRhZW1vbiBkYXRhIGFuZCBmdW5jdGlvbiBwcm90b3R5cGVzCiAgKiAoZnJvbSBpcF92c19zeW5jLmMpCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYwppbmRleCA2ZmEzZTFkYzUzNGMzLi41MzQ4YzJmNDliNjRlIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMKQEAgLTExNTAsOCAmIzQzOzExNTAsOCBAQCBpcF92c19iaW5kX2Rlc3Qoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCkKIAkJaWYgKCEoZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX0lOQUNUSVZFKSkKIAkJCWF0b21pY19pbmMoJmFtcDtkZXN0LSZndDthY3RpdmVjb25ucyk7CiAJCXRjID0gYXRvbWljX2luY19yZXR1cm4oJmFtcDtkZXN0LSZndDt0b3RhbGNvbm5zKTsKLQkJaWYgKHRjID09IFJFQURfT05DRShkZXN0LSZndDt1X3RocmVzaG9sZCkpCi0JCQlpcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChkZXN0LCAxKTsKJiM0MzsJCWlmICh0YyAmZ3Q7PSBSRUFEX09OQ0UoZGVzdC0mZ3Q7dV90aHJlc2hvbGRfdmFsKSkKJiM0MzsJCQlpcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChkZXN0LCB0cnVlKTsKIAl9IGVsc2UgewogCQkvKiBJdCBpcyBhIHBlcnNpc3RlbnQgY29ubmVjdGlvbi90ZW1wbGF0ZSwgc28gaW5jcmVhc2UKIAkJICAgdGhlIHBlcnNpc3RlbnQgY29ubmVjdGlvbiBjb3VudGVyICovCkBAIC0xMjQzLDggJiM0MzsxMjQzLDggQEAgc3RhdGljIGlubGluZSB2b2lkIGlwX3ZzX3VuYmluZF9kZXN0KHN0cnVjdCBpcF92c19jb25uICpjcCkKIAkJaWYgKCEoY3AtJmd0O2ZsYWdzICZhbXA7IElQX1ZTX0NPTk5fRl9JTkFDVElWRSkpCiAJCQlhdG9taWNfZGVjKCZhbXA7ZGVzdC0mZ3Q7YWN0aXZlY29ubnMpOwogCQl0YyA9IGF0b21pY19mZXRjaF9kZWMoJmFtcDtkZXN0LSZndDt0b3RhbGNvbm5zKTsKLQkJaWYgKHRjID09IFJFQURfT05DRShkZXN0LSZndDtsX3RocmVzaG9sZF92YWwpKQotCQkJaXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoZGVzdCwgLTEpOwomIzQzOwkJaWYgKHRjICZsdDs9IFJFQURfT05DRShkZXN0LSZndDtsX3RocmVzaG9sZF92YWwpKQomIzQzOwkJCWlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKGRlc3QsIGZhbHNlKTsKIAl9IGVsc2UgewogCQkvKiBJdCBpcyBhIHBlcnNpc3RlbnQgY29ubmVjdGlvbi90ZW1wbGF0ZSwgc28gZGVjcmVhc2UKIAkJICAgdGhlIHBlcnNpc3RlbnQgY29ubmVjdGlvbiBjb3VudGVyICovCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMKaW5kZXggNGMxYzczOTQ0NmI3Ni4uMzAwMzU0N2RjYWJlNSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYwpAQCAtMTMwOSwzMiAmIzQzOzEzMDksMzIgQEAgdm9pZCBpcF92c19zdGF0c19mcmVlKHN0cnVjdCBpcF92c19zdGF0cyAqc3RhdHMpCiAgKiAtIGNvbm5zIHJlYWNoIHVfdGhyZXNob2xkIGFuZCBleGNlZWQgaXQ6IHNldCB0aGUgZmxhZwogICogLSBjb25ucyBnbyBiZWxvdyBsX3RocmVzaG9sZCAob3IgNzUlIG9mIHVfdGhyZXNob2xkKTogY2xlYXIgdGhlIGZsYWcKICAqLwotc3RhdGljIHZvaWQgX19pcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCwgaW50IG1vZGUpCiYjNDM7c3RhdGljIHZvaWQgX19pcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCwgYm9vbCBvdmVybG9hZCkKIHsKIAlpbnQgY29ubnM7CiAJdTMyIGwsIHU7CiAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7ZGVzdC0mZ3Q7ZHN0X2xvY2spOwogCXUgPSBSRUFEX09OQ0UoZGVzdC0mZ3Q7dV90aHJlc2hvbGQpOwotCWlmICghdSkKLQkJZ290byB1bnNldDsKLQlsID0gUkVBRF9PTkNFKGRlc3QtJmd0O2xfdGhyZXNob2xkX3ZhbCk7Ci0JY29ubnMgPSBhdG9taWNfcmVhZCgmYW1wO2Rlc3QtJmd0O3RvdGFsY29ubnMpOwotCWlmIChjb25ucyAmZ3Q7PSAobW9kZSAmZ3Q7IDAgPyBsIDogdSkpIHsKLQkJZGVzdC0mZ3Q7ZmxhZ3MgfD0gSVBfVlNfREVTVF9GX09WRVJMT0FEOwotCQlyZXR1cm47CiYjNDM7CWlmICh1KSB7CiYjNDM7CQkvKiBMb3cgdGhyZXNob2xkIGRlZmF1bHRzIHRvIDc1JSBvZiB1cHBlciB0aHJlc2hvbGQgKi8KJiM0MzsJCWwgPSBSRUFEX09OQ0UoZGVzdC0mZ3Q7bF90aHJlc2hvbGQpID8gOiAodSAtICh1ICZndDsmZ3Q7IDIpKTsKJiM0MzsJCWNvbm5zID0gYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt0b3RhbGNvbm5zKTsKJiM0MzsJCWlmIChjb25ucyAmZ3Q7PSAob3ZlcmxvYWQgPyBsIDogdSkpIHsKJiM0MzsJCQlXUklURV9PTkNFKGRlc3QtJmd0O3VfdGhyZXNob2xkX3ZhbCwgSU5UX01BWCk7CiYjNDM7CQkJV1JJVEVfT05DRShkZXN0LSZndDtsX3RocmVzaG9sZF92YWwsIGwpOwomIzQzOwkJCXJldHVybjsKJiM0MzsJCX0KIAl9Ci0JaWYgKGNvbm5zICZndDs9IChtb2RlICZsdDsgMCA/IHUgOiBsKSkKLQkJcmV0dXJuOwogCi11bnNldDoKLQlkZXN0LSZndDtmbGFncyAmYW1wOz0gfklQX1ZTX0RFU1RfRl9PVkVSTE9BRDsKJiM0MzsJV1JJVEVfT05DRShkZXN0LSZndDt1X3RocmVzaG9sZF92YWwsIHUgPyA6IElOVF9NQVgpOwomIzQzOwlXUklURV9PTkNFKGRlc3QtJmd0O2xfdGhyZXNob2xkX3ZhbCwgMCk7CiB9CiAKLXZvaWQgaXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QsIGludCBtb2RlKQomIzQzO3ZvaWQgaXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QsIGJvb2wgb3ZlcmxvYWQpCiB7CiAJc3Bpbl9sb2NrX2JoKCZhbXA7ZGVzdC0mZ3Q7ZHN0X2xvY2spOwotCV9faXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoZGVzdCwgbW9kZSk7CiYjNDM7CV9faXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoZGVzdCwgb3ZlcmxvYWQpOwogCXNwaW5fdW5sb2NrX2JoKCZhbXA7ZGVzdC0mZ3Q7ZHN0X2xvY2spOwogfQogCkBAIC0xNDA2LDE1ICYjNDM7MTQwNiwxMyBAQCBfX2lwX3ZzX3VwZGF0ZV9kZXN0KHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIHN0cnVjdCBpcF92c19kZXN0ICpkZXN0LAogCiAJaWYgKFJFQURfT05DRShkZXN0LSZndDt1X3RocmVzaG9sZCkgIT0gdWRlc3QtJmd0O3VfdGhyZXNob2xkIHx8CiAJICAgIFJFQURfT05DRShkZXN0LSZndDtsX3RocmVzaG9sZCkgIT0gdWRlc3QtJmd0O2xfdGhyZXNob2xkKSB7CiYjNDM7CQlib29sIG92ZXJsb2FkOwomIzQzOwogCQlzcGluX2xvY2tfYmgoJmFtcDtkZXN0LSZndDtkc3RfbG9jayk7CiAJCVdSSVRFX09OQ0UoZGVzdC0mZ3Q7dV90aHJlc2hvbGQsIHVkZXN0LSZndDt1X3RocmVzaG9sZCk7CiAJCVdSSVRFX09OQ0UoZGVzdC0mZ3Q7bF90aHJlc2hvbGQsIHVkZXN0LSZndDtsX3RocmVzaG9sZCk7Ci0JCS8qIExvdyB0aHJlc2hvbGQgZGVmYXVsdHMgdG8gNzUlIG9mIHVwcGVyIHRocmVzaG9sZCAqLwotCQlXUklURV9PTkNFKGRlc3QtJmd0O2xfdGhyZXNob2xkX3ZhbCwKLQkJCSAgIHVkZXN0LSZndDtsX3RocmVzaG9sZCA/IDoKLQkJCSAgICh1ZGVzdC0mZ3Q7dV90aHJlc2hvbGQgLQotCQkJICAgICh1ZGVzdC0mZ3Q7dV90aHJlc2hvbGQgJmd0OyZndDsgMikpKTsKLQkJX19pcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChkZXN0LCAwKTsKJiM0MzsJCW92ZXJsb2FkID0gaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpOwomIzQzOwkJX19pcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChkZXN0LCBvdmVybG9hZCk7CiAJCXNwaW5fdW5sb2NrX2JoKCZhbXA7ZGVzdC0mZ3Q7ZHN0X2xvY2spOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2RoLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZGguYwppbmRleCA0M2FiZWQ3YTI2YTZhLi45NWU1Mjk1MGFkYmI3IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZGguYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZGguYwpAQCAtMTk1LDE2ICYjNDM7MTk1LDYgQEAgc3RhdGljIGludCBpcF92c19kaF9kZXN0X2NoYW5nZWQoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywKIH0KIAogCi0vKgotICogICAgICBJZiB0aGUgZGVzdCBmbGFncyBpcyBzZXQgd2l0aCBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQsCi0gKiAgICAgIGNvbnNpZGVyIHRoYXQgdGhlIHNlcnZlciBpcyBvdmVybG9hZGVkIGhlcmUuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGlzX292ZXJsb2FkZWQoc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QpCi17Ci0JcmV0dXJuIGRlc3QtJmd0O2ZsYWdzICZhbXA7IElQX1ZTX0RFU1RfRl9PVkVSTE9BRDsKLX0KLQotCiAvKgogICogICAgICBEZXN0aW5hdGlvbiBoYXNoaW5nIHNjaGVkdWxpbmcKICAqLwpAQCAtMjE5LDEwICYjNDM7MjA5LDggQEAgaXBfdnNfZGhfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAogCXMgPSAoc3RydWN0IGlwX3ZzX2RoX3N0YXRlICopIHN2Yy0mZ3Q7c2NoZWRfZGF0YTsKIAlkZXN0ID0gaXBfdnNfZGhfZ2V0KHN2Yy0mZ3Q7YWYsIHMsICZhbXA7aXBoLSZndDtkYWRkcik7Ci0JaWYgKCFkZXN0IHx8Ci0JICAgICEoZGVzdC0mZ3Q7Y2ZsYWdzICZhbXA7IElQX1ZTX0RFU1RfQ0ZfQVZBSUxBQkxFKQotCSAgICB8fCBhdG9taWNfcmVhZCgmYW1wO2Rlc3QtJmd0O3dlaWdodCkgJmx0Oz0gMAotCSAgICB8fCBpc19vdmVybG9hZGVkKGRlc3QpKSB7CiYjNDM7CWlmICghZGVzdCB8fCBhdG9taWNfcmVhZCgmYW1wO2Rlc3QtJmd0O3dlaWdodCkgJmx0Oz0gMCB8fAomIzQzOwkgICAgaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpKSB7CiAJCWlwX3ZzX3NjaGVkdWxlcl9lcnIoc3ZjLCAmIzM0O25vIGRlc3RpbmF0aW9uIGF2YWlsYWJsZSYjMzQ7KTsKIAkJcmV0dXJuIE5VTEw7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2ZvLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZm8uYwppbmRleCBkNjU3YjQ3YzY1MTFmLi5lMDdmYTMzZjZkNTI3IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZm8uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZm8uYwpAQCAtMjksNyAmIzQzOzI5LDcgQEAgaXBfdnNfZm9fc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkgKiBGaW5kIHZpcnR1YWwgc2VydmVyIHdpdGggaGlnaGVzdCB3ZWlnaHQgYW5kIHNlbmQgaXQgdHJhZmZpYwogCSAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsICZhbXA7c3ZjLSZndDtkZXN0aW5hdGlvbnMsIG5fbGlzdCkgewotCQlpZiAoIShkZXN0LSZndDtmbGFncyAmYW1wOyBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpICZhbXA7JmFtcDsKJiM0MzsJCWlmICghaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpICZhbXA7JmFtcDsKIAkJICAgIGF0b21pY19yZWFkKCZhbXA7ZGVzdC0mZ3Q7d2VpZ2h0KSAmZ3Q7IGh3KSB7CiAJCQlod2VpZ2h0ID0gZGVzdDsKIAkJCWh3ID0gYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt3ZWlnaHQpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGMuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjLmMKaW5kZXggNjkzYmNjODJjY2I3Ny4uYmZmMTA5YzFjOTU5YiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsYy5jCkBAIC00MTQsNyAmIzQzOzQxNCw3IEBAIF9faXBfdnNfbGJsY19zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjKQogCSAqIG5ldyBjb25uZWN0aW9uLgogCSAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsICZhbXA7c3ZjLSZndDtkZXN0aW5hdGlvbnMsIG5fbGlzdCkgewotCQlpZiAoZGVzdC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfREVTVF9GX09WRVJMT0FEKQomIzQzOwkJaWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt3ZWlnaHQpICZndDsgMCkgewogCQkJbGVhc3QgPSBkZXN0OwpAQCAtNDI5LDcgJiM0Mzs0MjksNyBAQCBfX2lwX3ZzX2xibGNfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YykKIAkgKi8KICAgbmV4dHN0YWdlOgogCWxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmN1KGRlc3QsICZhbXA7c3ZjLSZndDtkZXN0aW5hdGlvbnMsIG5fbGlzdCkgewotCQlpZiAoZGVzdC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfREVTVF9GX09WRVJMT0FEKQomIzQzOwkJaWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSkKIAkJCWNvbnRpbnVlOwogCiAJCWRvaCA9IGlwX3ZzX2Rlc3RfY29ubl9vdmVyaGVhZChkZXN0KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjci5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGNyLmMKaW5kZXggZjUzZjA1Y2VlYTM2Zi4uYzI4NTNlMDdlNzg3MiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGNyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGNyLmMKQEAgLTE2Niw3ICYjNDM7MTY2LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaXBfdnNfZGVzdCAqaXBfdnNfZGVzdF9zZXRfbWluKHN0cnVjdCBpcF92c19kZXN0X3NldCAqc2V0KQogCS8qIHNlbGVjdCB0aGUgZmlyc3QgZGVzdGluYXRpb24gc2VydmVyLCB3aG9zZSB3ZWlnaHQgJmd0OyAwICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZSwgJmFtcDtzZXQtJmd0O2xpc3QsIGxpc3QpIHsKIAkJbGVhc3QgPSBlLSZndDtkZXN0OwotCQlpZiAobGVhc3QtJmd0O2ZsYWdzICZhbXA7IElQX1ZTX0RFU1RfRl9PVkVSTE9BRCkKJiM0MzsJCWlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQobGVhc3QpKQogCQkJY29udGludWU7CiAKIAkJaWYgKChhdG9taWNfcmVhZCgmYW1wO2xlYXN0LSZndDt3ZWlnaHQpICZndDsgMCkgJmFtcDsmYW1wOwpAQCAtMTgxLDcgJiM0MzsxODEsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpcF92c19kZXN0ICppcF92c19kZXN0X3NldF9taW4oc3RydWN0IGlwX3ZzX2Rlc3Rfc2V0ICpzZXQpCiAgIG5leHRzdGFnZToKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShlLCAmYW1wO3NldC0mZ3Q7bGlzdCwgbGlzdCkgewogCQlkZXN0ID0gZS0mZ3Q7ZGVzdDsKLQkJaWYgKGRlc3QtJmd0O2ZsYWdzICZhbXA7IElQX1ZTX0RFU1RfRl9PVkVSTE9BRCkKJiM0MzsJCWlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkpCiAJCQljb250aW51ZTsKIAogCQlkb2ggPSBpcF92c19kZXN0X2Nvbm5fb3ZlcmhlYWQoZGVzdCk7CkBAIC01NzcsNyAmIzQzOzU3Nyw3IEBAIF9faXBfdnNfbGJsY3Jfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YykKIAkgKiBuZXcgY29ubmVjdGlvbi4KIAkgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkZXN0LCAmYW1wO3N2Yy0mZ3Q7ZGVzdGluYXRpb25zLCBuX2xpc3QpIHsKLQkJaWYgKGRlc3QtJmd0O2ZsYWdzICZhbXA7IElQX1ZTX0RFU1RfRl9PVkVSTE9BRCkKJiM0MzsJCWlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkpCiAJCQljb250aW51ZTsKIAogCQlpZiAoYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt3ZWlnaHQpICZndDsgMCkgewpAQCAtNTkzLDcgJiM0Mzs1OTMsNyBAQCBfX2lwX3ZzX2xibGNyX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMpCiAJICovCiAgIG5leHRzdGFnZToKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShkZXN0LCAmYW1wO3N2Yy0mZ3Q7ZGVzdGluYXRpb25zLCBuX2xpc3QpIHsKLQkJaWYgKGRlc3QtJmd0O2ZsYWdzICZhbXA7IElQX1ZTX0RFU1RfRl9PVkVSTE9BRCkKJiM0MzsJCWlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkpCiAJCQljb250aW51ZTsKIAogCQlkb2ggPSBpcF92c19kZXN0X2Nvbm5fb3ZlcmhlYWQoZGVzdCk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGMuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYy5jCmluZGV4IDE4Yjk3NmE3YzRkMjAuLjkwMDJmNDkxYmZmNjggMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYy5jCkBAIC0zOCw3ICYjNDM7MzgsNyBAQCBpcF92c19sY19zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCSAqLwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZGVzdCwgJmFtcDtzdmMtJmd0O2Rlc3RpbmF0aW9ucywgbl9saXN0KSB7Ci0JCWlmICgoZGVzdC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfREVTVF9GX09WRVJMT0FEKSB8fAomIzQzOwkJaWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSB8fAogCQkgICAgYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt3ZWlnaHQpID09IDApCiAJCQljb250aW51ZTsKIAkJZG9oID0gaXBfdnNfZGVzdF9jb25uX292ZXJoZWFkKGRlc3QpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX21oLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbWguYwppbmRleCAwMjA4NjMwNDc1NjJkLi5kNzBiMjNhZWM1ZmVjIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbWguYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbWguYwpAQCAtODAsNyAmIzQzOzgwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGdlbmVyYXRlX2hhc2hfc2VjcmV0KGhzaXBoYXNoX2tleV90ICpoYXNoMSwKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc191bmF2YWlsYWJsZShzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCkKIHsKIAlyZXR1cm4gYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt3ZWlnaHQpICZsdDs9IDAgfHwKLQkgICAgICAgZGVzdC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfREVTVF9GX09WRVJMT0FEOwomIzQzOwkgICAgICAgaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpOwogfQogCiAvKiBSZXR1cm5zIGhhc2ggdmFsdWUgZm9yIElQVlMgTUggZW50cnkgKi8KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19ucS5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX25xLmMKaW5kZXggYWRhMTU4YzYxMGNlMS4uN2NjMjg5MDIwODZlNyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX25xLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX25xLmMKQEAgLTcyLDcgJiM0Mzs3Miw3IEBAIGlwX3ZzX25xX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkZXN0LCAmYW1wO3N2Yy0mZ3Q7ZGVzdGluYXRpb25zLCBuX2xpc3QpIHsKIAotCQlpZiAoZGVzdC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfREVTVF9GX09WRVJMT0FEIHx8CiYjNDM7CQlpZiAoaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpIHx8CiAJCSAgICAhYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt3ZWlnaHQpKQogCQkJY29udGludWU7CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19vdmYuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19vdmYuYwppbmRleCBjNWM2N2RmODBhMGIzLi5lYWEzYTdhZTZlZmE2IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfb3ZmLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX292Zi5jCkBAIC0zMyw3ICYjNDM7MzMsNyBAQCBpcF92c19vdmZfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsICZhbXA7c3ZjLSZndDtkZXN0aW5hdGlvbnMsIG5fbGlzdCkgewogCQl3ID0gYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt3ZWlnaHQpOwotCQlpZiAoKGRlc3QtJmd0O2ZsYWdzICZhbXA7IElQX1ZTX0RFU1RfRl9PVkVSTE9BRCkgfHwKJiM0MzsJCWlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkgfHwKIAkJICAgIGF0b21pY19yZWFkKCZhbXA7ZGVzdC0mZ3Q7YWN0aXZlY29ubnMpICZndDsgdyB8fAogCQkgICAgdyA9PSAwKQogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcnIuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19yci5jCmluZGV4IDQxMjVlZTU2MWNkYzMuLmJkMTdjZGQwOTJmNWYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19yci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19yci5jCkBAIC02Niw3ICYjNDM7NjYsNyBAQCBpcF92c19ycl9zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShkZXN0LAogCQkJCQkJICZhbXA7c3ZjLSZndDtkZXN0aW5hdGlvbnMsCiAJCQkJCQkgbl9saXN0KSB7Ci0JCQlpZiAoIShkZXN0LSZndDtmbGFncyAmYW1wOyBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpICZhbXA7JmFtcDsKJiM0MzsJCQlpZiAoIWlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSAmYW1wOyZhbXA7CiAJCQkgICAgYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt3ZWlnaHQpICZndDsgMCkKIAkJCQkvKiBISVQgKi8KIAkJCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zZWQuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zZWQuYwppbmRleCAyNDVhMzIzYzg0Y2QzLi43OTI1ZjRkMjhmY2U5IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2VkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NlZC5jCkBAIC03NSw3ICYjNDM7NzUsNyBAQCBpcF92c19zZWRfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkgKi8KIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsICZhbXA7c3ZjLSZndDtkZXN0aW5hdGlvbnMsIG5fbGlzdCkgewotCQlpZiAoIShkZXN0LSZndDtmbGFncyAmYW1wOyBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpICZhbXA7JmFtcDsKJiM0MzsJCWlmICghaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpICZhbXA7JmFtcDsKIAkJICAgIGF0b21pY19yZWFkKCZhbXA7ZGVzdC0mZ3Q7d2VpZ2h0KSAmZ3Q7IDApIHsKIAkJCWxlYXN0ID0gZGVzdDsKIAkJCWxvaCA9IGlwX3ZzX3NlZF9kZXN0X292ZXJoZWFkKGxlYXN0KTsKQEAgLTkwLDcgJiM0Mzs5MCw3IEBAIGlwX3ZzX3NlZF9zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCSAqLwogICBuZXh0c3RhZ2U6CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yY3UoZGVzdCwgJmFtcDtzdmMtJmd0O2Rlc3RpbmF0aW9ucywgbl9saXN0KSB7Ci0JCWlmIChkZXN0LSZndDtmbGFncyAmYW1wOyBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpCiYjNDM7CQlpZiAoaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpKQogCQkJY29udGludWU7CiAJCWRvaCA9IGlwX3ZzX3NlZF9kZXN0X292ZXJoZWFkKGRlc3QpOwogCQlpZiAoKF9fczY0KWxvaCAqIGF0b21pY19yZWFkKCZhbXA7ZGVzdC0mZ3Q7d2VpZ2h0KSAmZ3Q7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2guYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zaC5jCmluZGV4IGNkNjcwNjZlM2IyNjEuLmMyNGRkNWNiN2U0NzggMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zaC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zaC5jCkBAIC03Myw3ICYjNDM7NzMsNyBAQCBzdHJ1Y3QgaXBfdnNfc2hfc3RhdGUgewogc3RhdGljIGlubGluZSBib29sIGlzX3VuYXZhaWxhYmxlKHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KQogewogCXJldHVybiBhdG9taWNfcmVhZCgmYW1wO2Rlc3QtJmd0O3dlaWdodCkgJmx0Oz0gMCB8fAotCSAgICAgICBkZXN0LSZndDtmbGFncyAmYW1wOyBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQ7CiYjNDM7CSAgICAgICBpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfdHdvcy5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3R3b3MuYwppbmRleCBkYmI3ZjVmZDQ2ODhhLi44NjE4NjEyMmExZjAxIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfdHdvcy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c190d29zLmMKQEAgLTUyLDcgJiM0Mzs1Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgaXBfdnNfZGVzdCAqaXBfdnNfdHdvc19zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLAogCiAJLyogR2VuZXJhdGUgYSByYW5kb20gd2VpZ2h0IGJldHdlZW4gWzAsc3VtIG9mIGFsbCB3ZWlnaHRzKSAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsICZhbXA7c3ZjLSZndDtkZXN0aW5hdGlvbnMsIG5fbGlzdCkgewotCQlpZiAoIShkZXN0LSZndDtmbGFncyAmYW1wOyBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpKSB7CiYjNDM7CQlpZiAoIWlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSkgewogCQkJd2VpZ2h0ID0gYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt3ZWlnaHQpOwogCQkJaWYgKHdlaWdodCAmZ3Q7IDApIHsKIAkJCQl0b3RhbF93ZWlnaHQgJiM0Mzs9IHdlaWdodDsKQEAgLTc1LDcgJiM0Mzs3NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgaXBfdnNfZGVzdCAqaXBfdnNfdHdvc19zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLAogCiAJLyogUGljayB0d28gd2VpZ2h0ZWQgc2VydmVycyAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsICZhbXA7c3ZjLSZndDtkZXN0aW5hdGlvbnMsIG5fbGlzdCkgewotCQlpZiAoZGVzdC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfREVTVF9GX09WRVJMT0FEKQomIzQzOwkJaWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSkKIAkJCWNvbnRpbnVlOwogCiAJCXdlaWdodCA9IGF0b21pY19yZWFkKCZhbXA7ZGVzdC0mZ3Q7d2VpZ2h0KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c193bGMuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c193bGMuYwppbmRleCA5ZGE0NDVjYTA5YTE0Li4wOGU5ZTIyZjcyYmY4IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd2xjLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3dsYy5jCkBAIC00Nyw3ICYjNDM7NDcsNyBAQCBpcF92c193bGNfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkgKi8KIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsICZhbXA7c3ZjLSZndDtkZXN0aW5hdGlvbnMsIG5fbGlzdCkgewotCQlpZiAoIShkZXN0LSZndDtmbGFncyAmYW1wOyBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpICZhbXA7JmFtcDsKJiM0MzsJCWlmICghaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpICZhbXA7JmFtcDsKIAkJICAgIGF0b21pY19yZWFkKCZhbXA7ZGVzdC0mZ3Q7d2VpZ2h0KSAmZ3Q7IDApIHsKIAkJCWxlYXN0ID0gZGVzdDsKIAkJCWxvaCA9IGlwX3ZzX2Rlc3RfY29ubl9vdmVyaGVhZChsZWFzdCk7CkBAIC02Miw3ICYjNDM7NjIsNyBAQCBpcF92c193bGNfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkgKi8KICAgbmV4dHN0YWdlOgogCWxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmN1KGRlc3QsICZhbXA7c3ZjLSZndDtkZXN0aW5hdGlvbnMsIG5fbGlzdCkgewotCQlpZiAoZGVzdC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfREVTVF9GX09WRVJMT0FEKQomIzQzOwkJaWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSkKIAkJCWNvbnRpbnVlOwogCQlkb2ggPSBpcF92c19kZXN0X2Nvbm5fb3ZlcmhlYWQoZGVzdCk7CiAJCWlmICgoX19zNjQpbG9oICogYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt3ZWlnaHQpICZndDsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c193cnIuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c193cnIuYwppbmRleCAyZGNmZjEwNDBkYTUyLi5mYWQ2OWJhZTVhMjJiIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd3JyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3dyci5jCkBAIC0xNzYsNyAmIzQzOzE3Niw3IEBAIGlwX3ZzX3dycl9zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShkZXN0LAogCQkJCQkJICZhbXA7c3ZjLSZndDtkZXN0aW5hdGlvbnMsCiAJCQkJCQkgbl9saXN0KSB7Ci0JCQlpZiAoIShkZXN0LSZndDtmbGFncyAmYW1wOyBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpICZhbXA7JmFtcDsKJiM0MzsJCQlpZiAoIWlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSAmYW1wOyZhbXA7CiAJCQkgICAgYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt3ZWlnaHQpICZndDs9IG1hcmstJmd0O2N3KQogCQkJCWdvdG8gZm91bmQ7CiAJCQlpZiAoZGVzdCA9PSBzdG9wKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE0MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDgzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQVlMgT3ZlcmxvYWQgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGZvciB0aGUgSVBWUyBzdWJzeXN0ZW0uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBtZXRob2RpY2FsbHkgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSB3YW50IHRvIGdldCBhIGdvb2QgaGFuZGxlIG9uIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy4KClRoZSBwYXRjaCB0YXJnZXRzIHNldmVyYWwgYXJlYXMuIFRoZSBtb3N0IHNpZ25pZmljYW50IGNoYW5nZXMgc2VlbSB0byBiZSBpbiBgaW5jbHVkZS9uZXQvaXBfdnMuaGAuIEl0JiMzOTtzIHJlbW92aW5nIGBJUF9WU19ERVNUX0ZfT1ZFUkxPQURgLCB3aGljaCBpcyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4gVGhpcyBzdWdnZXN0cyBhIHNoaWZ0IGluIGhvdyBvdmVybG9hZCBzdGF0dXMgaXMgbWFuYWdlZC4gVGhlIHJlb3JnYW5pemF0aW9uIG9mIGBzdHJ1Y3QgaXBfdnNfZGVzdGAgdG8gaW5jbHVkZSBgdV90aHJlc2hvbGRfdmFsYCBhbmQgZm9jdXMgb24gY2FjaGVsaW5lIGFsaWdubWVudCBpcyBhbm90aGVyIHBvaW50IHRvIGNvbnNpZGVyLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGhvdyB0aGF0IGltcGFjdHMgZXhpc3RpbmcgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBwb3RlbnRpYWwgbG9jayBjb250ZW50aW9uLiBBbHNvLCBhIG5ldyBpbmxpbmUgaGVscGVyIGZ1bmN0aW9uIGBpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoKWAgaXMgZGVmaW5lZC4KClRoZSBjaGFuZ2VzIGluIGBpcF92c19jb25uLmNgIGFyZSBjcnVjaWFsLiBUaGUgY29uZGl0aW9uYWxzIGluIGBpcF92c19iaW5kX2Rlc3RgIGFuZCBgaXBfdnNfdW5iaW5kX2Rlc3RgIHRoYXQgbm93IGNvbXBhcmUgdGhlIHRyYWZmaWMgY291bnQgdG8gYHVfdGhyZXNob2xkX3ZhbGAgYXJlIGEgY3JpdGljYWwgc2hpZnQuIEVzc2VudGlhbGx5IGl0IGNoYW5nZXMgdGhlIG92ZXJsb2FyZCBjYWxjdWxhdGlvbi4gVGhlIHVzZSBvZiBgUkVBRF9PTkNFYCBoZXJlIGlzIGdvb2QgdG8gc2VlIGFzIGl0IHN1Z2dlc3RzIG1lbW9yeSBiYXJyaWVycyBhcmUgYmVpbmcgY29uc2lkZXJlZC4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgdV90aHJlc2hvbGRfdmFsYCBpcyBwb3B1bGF0ZWQgYW5kIGhvdyB0aGUgYGlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkYCBmdW5jdGlvbiBpcyBiZWluZyB1c2VkIHRvIGFmZmVjdCB0aGlzIHRocmVzaG9sZC4KClRoZSB1cGRhdGVzIHRvIGBpcF92c19jdGwuY2Agd2l0aCB0aGUgYWx0ZXJlZCBpbXBsZW1lbnRhdGlvbnMgb2YgIGBfX2lwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkYCBhbmQgYGlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkYCByZXF1aXJlIGNsb3NlIGluc3BlY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gc2VlIHByZWNpc2VseSBob3cgdGhpcyBpbXBhY3RzIHRoZSBjb250cm9sIHBhdGggYW5kIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLgoKRmluYWxseSwgdGhlIGZhY3QgdGhhdCBhIHdob2xlIHNsZXcgb2Ygc2NoZWR1bGVyIG1vZHVsZXMg4oCTIGBkaGAsIGBmb2AsIGBsYmxjYCwgYGxibGNyYCwgYGxjYCwgYG1oYCwgYG5xYCwgYG92ZmAsIGBycmAsIGBzZWRgLCBgc2hgLCBgdHdvc2AsIGB3bGNgLCBhbmQgYHdycmAg4oCTIGFyZSBiZWluZyB0b3VjaGVkIGluZGljYXRlcyBhIHBlcnZhc2l2ZSBjaGFuZ2UgaW4gb3ZlcmxvYWQgaGFuZGxpbmcgYWNyb3NzIHZhcmlvdXMgc2NoZWR1bGluZyBhbGdvcml0aG1zLiBUaGlzIGlzIHNpZ25pZmljYW50LiBJdCYjMzk7cyBsaWtlbHkgdGhhdCB0aGUgb3ZlcmxvYWQgc3RhdGUgZGlyZWN0bHkgaW1wYWN0cyBzY2hlZHVsaW5nIGRlY2lzaW9ucywgYW5kIHRoZXJlZm9yZSB0aGUgZWZmZWN0IG9mIG92ZXJsb2FkIHN0YXR1cyBvbiBhbGwgdGhlIHNjaGVkdWxpbmcgYWxnb3JpdGhtcyBuZWVkcyB0byBiZSBjYXJlZnVsbHkgZXZhbHVhdGVkLAoKQmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gdGhlIGNvZGUsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBLY29uZmlnIGZvciBJUFZTIHRvIGVzdGFibGlzaCB0aGUgZXhhY3QgY29uZmlndXJhdGlvbiBzeW1ib2xzIGluIHBsYXksIGFzIHRoaXMgd2lsbCBoZWxwIG1lIGVzdGFibGlzaCB0aGUgY29udGV4dCBmb3IgdGhpcyBwYXRjaC4gSSBleHBlY3QgdGhpcyB3aWxsIGFsc28gZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZXNlIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX1ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy00LSNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjU6bWVudWNvbmZpZyBJUF9WU1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNi1cdHRyaXN0YXRlIFwmIzM0O0lQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0yODY9Y29tbWVudCAmIzM5O0lQVlMgU0ggc2NoZWR1bGVyJiMzOTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4Ny1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI4ODpjb25maWcgSVBfVlNfU0hfVEFCX0JJVFNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4OS1cdGludCBcJiMzNDtJUFZTIHNvdXJjZSBoYXNoaW5nIHRhYmxlIHNpemUgKHRoZSBOdGggcG93ZXIgb2YgMilcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMDE9Y29tbWVudCAmIzM5O0lQVlMgTUggc2NoZWR1bGVyJiMzOTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwMi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMwMzpjb25maWcgSVBfVlNfTUhfVEFCX0lOREVYXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDQtXHRpbnQgXCYjMzQ7SVBWUyBtYWdsZXYgaGFzaGluZyB0YWJsZSBpbmRleCBvZiBzaXplICh0aGUgcHJpbWUgbnVtYmVycylcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTgyNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBJUFZTIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCBhIHJlZnJlc2hlciBvbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gSVBWUyBhbmQgdGhlIGF2YWlsYWJsZSBzY2hlZHVsaW5nIGFsZ29yaXRobXMuIEkmIzM5O2xsIGhlYWQgc3RyYWlnaHQgZm9yIHRoZSBzb3VyY2Ug4oCTIGBuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgZGVjaXNpb25zIGFyZSBtYWRlLCByaWdodD8gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcmVsZXZhbnQgc3ltYm9scywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IG5ldyBhZGRpdGlvbnMgc2luY2UgdGhlIGxhc3QgdGltZSBJIGR1ZyBpbnRvIHRoaXMuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgYW55IHN1YnRsZSBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIHRvIHRoZSBzY2hlZHVsZXIgb3B0aW9ucywgbWF5YmUgbmV3IGFsZ29yaXRobXMgb3IgZGVwZW5kZW5jaWVzIEkmIzM5O3ZlIG1pc3NlZC4gVGhpcyBLY29uZmlnIGZpbGUgd2lsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGN1cnJlbnQgZmVhdHVyZSBzZXQgYW5kIGJ1aWxkIG9wdGlvbnMgYXZhaWxhYmxlIGZvciBjb25maWd1cmluZyBJUFZTIGluIGEgcnVubmluZyBzeXN0ZW0sIG9yIGEgYnVpbGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIElQIFZpcnR1YWwgU2VydmVyIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0bWVudWNvbmZpZyBJUF9WU1xuICAgNjpcdFx0dHJpc3RhdGUgXCYjMzQ7SVAgdmlydHVhbCBzZXJ2ZXIgc3VwcG9ydFwmIzM0O1xuICAgNzpcdFx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBORVRGSUxURVJcbiAgIDg6XHRcdGRlcGVuZHMgb24gKE5GX0NPTk5UUkFDSyB8fCBORl9DT05OVFJBQ0s9bilcbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgSVAgVmlydHVhbCBTZXJ2ZXIgc3VwcG9ydCB3aWxsIGxldCB5b3UgYnVpbGQgYSBoaWdoLXBlcmZvcm1hbmNlXG4gIDExOlx0XHQgIHZpcnR1YWwgc2VydmVyIGJhc2VkIG9uIGNsdXN0ZXIgb2YgdHdvIG9yIG1vcmUgcmVhbCBzZXJ2ZXJzLiBUaGlzXG4gIDEyOlx0XHQgIG9wdGlvbiBtdXN0IGJlIGVuYWJsZWQgZm9yIGF0IGxlYXN0IG9uZSBvZiB0aGUgY2x1c3RlcmVkIGNvbXB1dGVyc1xuICAxMzpcdFx0ICB0aGF0IHdpbGwgdGFrZSBjYXJlIG9mIGludGVyY2VwdGluZyBpbmNvbWluZyBjb25uZWN0aW9ucyB0byBhXG4gIDE0Olx0XHQgIHNpbmdsZSBJUCBhZGRyZXNzIGFuZCBzY2hlZHVsaW5nIHRoZW0gdG8gcmVhbCBzZXJ2ZXJzLlxuICAxNTpcdFxuICAxNjpcdFx0ICBUaHJlZSByZXF1ZXN0IGRpc3BhdGNoaW5nIHRlY2huaXF1ZXMgYXJlIGltcGxlbWVudGVkLCB0aGV5IGFyZVxuICAxNzpcdFx0ICB2aXJ0dWFsIHNlcnZlciB2aWEgTkFULCB2aXJ0dWFsIHNlcnZlciB2aWEgdHVubmVsaW5nIGFuZCB2aXJ0dWFsXG4gIDE4Olx0XHQgIHNlcnZlciB2aWEgZGlyZWN0IHJvdXRpbmcuIFRoZSBzZXZlcmFsIHNjaGVkdWxpbmcgYWxnb3JpdGhtcyBjYW5cbiAgMTk6XHRcdCAgYmUgdXNlZCB0byBjaG9vc2Ugd2hpY2ggc2VydmVyIHRoZSBjb25uZWN0aW9uIGlzIGRpcmVjdGVkIHRvLFxuICAyMDpcdFx0ICB0aHVzIGxvYWQgYmFsYW5jaW5nIGNhbiBiZSBhY2hpZXZlZCBhbW9uZyB0aGUgc2VydmVycy4gIEZvciBtb3JlXG4gIDIxOlx0XHQgIGluZm9ybWF0aW9uIGFuZCBpdHMgYWRtaW5pc3RyYXRpb24gcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHRoZVxuICAyMjpcdFx0ICBmb2xsb3dpbmcgVVJMOiBcdTAwM2NodHRwOi8vd3d3LmxpbnV4dmlydHVhbHNlcnZlci5vcmcvXHUwMDNlLlxuICAyMzpcdFxuICAyNDpcdFx0ICBJZiB5b3Ugd2FudCB0byBjb21waWxlIGl0IGluIGtlcm5lbCwgc2F5IFkuIFRvIGNvbXBpbGUgaXQgYXMgYVxuICAyNTpcdFx0ICBtb2R1bGUsIGNob29zZSBNIGhlcmUuIElmIHVuc3VyZSwgc2F5IE4uXG4gIDI2Olx0XG4gIDI3Olx0aWYgSVBfVlNcbiAgMjg6XHRcbiAgMjk6XHRjb25maWdcdElQX1ZTX0lQVjZcbiAgMzA6XHRcdGJvb2wgXCYjMzQ7SVB2NiBzdXBwb3J0IGZvciBJUFZTXCYjMzQ7XG4gIDMxOlx0XHRkZXBlbmRzIG9uIElQVjYgPSB5IHx8IElQX1ZTID0gSVBWNlxuICAzMjpcdFx0c2VsZWN0IE5GX0RFRlJBR19JUFY2XG4gIDMzOlx0XHRoZWxwXG4gIDM0Olx0XHQgIEFkZCBJUHY2IHN1cHBvcnQgdG8gSVBWUy5cbiAgMzU6XHRcbiAgMzY6XHRcdCAgU2F5IFkgaWYgdW5zdXJlLlxuICAzNzpcdFxuICAzODpcdGNvbmZpZ1x0SVBfVlNfREVCVUdcbiAgMzk6XHRcdGJvb2wgXCYjMzQ7SVAgdmlydHVhbCBzZXJ2ZXIgZGVidWdnaW5nXCYjMzQ7XG4gIDQwOlx0XHRoZWxwXG4gIDQxOlx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gZ2V0IGFkZGl0aW9uYWwgbWVzc2FnZXMgdXNlZnVsIGluXG4gIDQyOlx0XHQgIGRlYnVnZ2luZyB0aGUgSVAgdmlydHVhbCBzZXJ2ZXIgY29kZS4gWW91IGNhbiBjaGFuZ2UgdGhlIGRlYnVnXG4gIDQzOlx0XHQgIGxldmVsIGluIC9wcm9jL3N5cy9uZXQvaXB2NC92cy9kZWJ1Z19sZXZlbFxuICA0NDpcdFxuICA0NTpcdGNvbmZpZ1x0SVBfVlNfVEFCX0JJVFNcbiAgNDY6XHRcdGludCBcJiMzNDtJUFZTIGNvbm5lY3Rpb24gdGFibGUgc2l6ZSAodGhlIE50aCBwb3dlciBvZiAyKVwmIzM0O1xuICA0NzpcdFx0cmFuZ2UgOCAyMCBpZiAhNjRCSVRcbiAgNDg6XHRcdHJhbmdlIDggMjcgaWYgNjRCSVRcbiAgNDk6XHRcdGRlZmF1bHQgMTJcbiAgNTA6XHRcdGhlbHBcbiAgNTE6XHRcdCAgVGhlIElQVlMgY29ubmVjdGlvbiBoYXNoIHRhYmxlIHVzZXMgdGhlIGNoYWluaW5nIHNjaGVtZSB0byBoYW5kbGVcbiAgNTI6XHRcdCAgaGFzaCBjb2xsaXNpb25zLiBVc2luZyBhIGJpZyBJUFZTIGNvbm5lY3Rpb24gaGFzaCB0YWJsZSB3aWxsIGdyZWF0bHlcbiAgNTM6XHRcdCAgcmVkdWNlIGNvbmZsaWN0cyB3aGVuIHRoZXJlIGFyZSBodW5kcmVkcyBvZiB0aG91c2FuZHMgb2YgY29ubmVjdGlvbnNcbiAgNTQ6XHRcdCAgaW4gdGhlIGhhc2ggdGFibGUuXG4gIDU1Olx0XG4gIDU2Olx0XHQgIE5vdGUgdGhlIHRhYmxlIHNpemUgbXVzdCBiZSBwb3dlciBvZiAyLiBUaGUgdGFibGUgc2l6ZSB3aWxsIGJlIHRoZVxuICA1NzpcdFx0ICB2YWx1ZSBvZiAyIHRvIHRoZSB5b3VyIGlucHV0IG51bWJlciBwb3dlci4gVGhlIG51bWJlciB0byBjaG9vc2UgaXNcbiAgNTg6XHRcdCAgZnJvbSA4IHRvIDI3IGZvciA2NEJJVCgyMCBvdGhlcndpc2UpLCB0aGUgZGVmYXVsdCBudW1iZXIgaXMgMTIsXG4gIDU5Olx0XHQgIHdoaWNoIG1lYW5zIHRoZSB0YWJsZSBzaXplIGlzIDQwOTYuIERvbiYjMzk7dCBpbnB1dCB0aGUgbnVtYmVyIHRvb1xuICA2MDpcdFx0ICBzbWFsbCwgb3RoZXJ3aXNlIHlvdSB3aWxsIGxvc2UgcGVyZm9ybWFuY2Ugb24gaXQuIFlvdSBjYW4gYWRhcHQgdGhlXG4gIDYxOlx0XHQgIHRhYmxlIHNpemUgeW91cnNlbGYsIGFjY29yZGluZyB0byB5b3VyIHZpcnR1YWwgc2VydmVyIGFwcGxpY2F0aW9uLlxuICA2MjpcdFx0ICBJdCBpcyBnb29kIHRvIHNldCB0aGUgdGFibGUgc2l6ZSBub3QgZmFyIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mXG4gIDYzOlx0XHQgIGNvbm5lY3Rpb25zIHBlciBzZWNvbmQgbXVsdGlwbHlpbmcgYXZlcmFnZSBsYXN0aW5nIHRpbWUgb2ZcbiAgNjQ6XHRcdCAgY29ubmVjdGlvbiBpbiB0aGUgdGFibGUuICBGb3IgZXhhbXBsZSwgeW91ciB2aXJ0dWFsIHNlcnZlciBnZXRzIDIwMFxuICA2NTpcdFx0ICBjb25uZWN0aW9ucyBwZXIgc2Vjb25kLCB0aGUgY29ubmVjdGlvbiBsYXN0cyBmb3IgMjAwIHNlY29uZHMgaW5cbiAgNjY6XHRcdCAgYXZlcmFnZSBpbiB0aGUgY29ubmVjdGlvbiB0YWJsZSwgdGhlIHRhYmxlIHNpemUgc2hvdWxkIGJlIG5vdCBmYXJcbiAgNjc6XHRcdCAgbGVzcyB0aGFuIDIwMHgyMDAsIGl0IGlzIGdvb2QgdG8gc2V0IHRoZSB0YWJsZSBzaXplIDMyNzY4ICgyKioxNSkuXG4gIDY4Olx0XG4gIDY5Olx0XHQgIEFub3RoZXIgbm90ZSB0aGF0IGVhY2ggY29ubmVjdGlvbiBvY2N1cGllcyAxMjggYnl0ZXMgZWZmZWN0aXZlbHkgYW5kXG4gIDcwOlx0XHQgIGVhY2ggaGFzaCBlbnRyeSB1c2VzIDggYnl0ZXMsIHNvIHlvdSBjYW4gZXN0aW1hdGUgaG93IG11Y2ggbWVtb3J5IGlzXG4gIDcxOlx0XHQgIG5lZWRlZCBmb3IgeW91ciBib3guXG4gIDcyOlx0XG4gIDczOlx0XHQgIFlvdSBjYW4gb3ZlcndyaXRlIHRoaXMgbnVtYmVyIHNldHRpbmcgY29ubl90YWJfYml0cyBtb2R1bGUgcGFyYW1ldGVyXG4gIDc0Olx0XHQgIG9yIGJ5IGFwcGVuZGluZyBpcF92cy5jb25uX3RhYl9iaXRzPT8gdG8gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgaWZcbiAgNzU6XHRcdCAgSVAgVlMgd2FzIGNvbXBpbGVkIGJ1aWx0LWluLlxuICA3NjpcdFxuICA3NzpcdGNvbW1lbnQgXCYjMzQ7SVBWUyB0cmFuc3BvcnQgcHJvdG9jb2wgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFwmIzM0O1xuICA3ODpcdFxuICA3OTpcdGNvbmZpZ1x0SVBfVlNfUFJPVE9fVENQXG4gIDgwOlx0XHRib29sIFwmIzM0O1RDUCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzMTMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyB0aGUgSVBWUyBTY2hlZHVsZXIgQ29uZmlndXJhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgYmFjayBpbnRvIHRoZSBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgIGZpbGUuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gZ2V0dGluZyBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgc2NoZWR1bGVyIGNvbmZpZ3VyYXRpb25zLiBJIGtub3cgdGhlIGJhc2ljcywgYnV0IEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGNydWNpYWwgcmVnYXJkaW5nIHRoZSBhdmFpbGFibGUgc2NoZWR1bGluZyBhbGdvcml0aG1zIGFuZCB0aGVpciBhc3NvY2lhdGVkIG9wdGlvbnMgd2l0aGluIHRoZSBJUFZTIGZyYW1ld29yay4gSSB3YW50IHRvIGVuc3VyZSBJIGhhdmUgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGFueSBwb3RlbnRpYWwgY2F2ZWF0cyBhc3NvY2lhdGVkIHdpdGggc3BlY2lmaWMgc2NoZWR1bGVyIHNlbGVjdGlvbnMuIFRpbWUgdG8gc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODE6XHRcdGhlbHBcbiAgODI6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBsb2FkIGJhbGFuY2luZyBUQ1AgdHJhbnNwb3J0XG4gIDgzOlx0XHQgIHByb3RvY29sLiBTYXkgWSBpZiB1bnN1cmUuXG4gIDg0Olx0XG4gIDg1Olx0Y29uZmlnXHRJUF9WU19QUk9UT19VRFBcbiAgODY6XHRcdGJvb2wgXCYjMzQ7VURQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcJiMzNDtcbiAgODc6XHRcdGhlbHBcbiAgODg6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBsb2FkIGJhbGFuY2luZyBVRFAgdHJhbnNwb3J0XG4gIDg5Olx0XHQgIHByb3RvY29sLiBTYXkgWSBpZiB1bnN1cmUuXG4gIDkwOlx0XG4gIDkxOlx0Y29uZmlnXHRJUF9WU19QUk9UT19BSF9FU1BcbiAgOTI6XHRcdGRlZl9ib29sIElQX1ZTX1BST1RPX0VTUCB8fCBJUF9WU19QUk9UT19BSFxuICA5MzpcdFxuICA5NDpcdGNvbmZpZ1x0SVBfVlNfUFJPVE9fRVNQXG4gIDk1Olx0XHRib29sIFwmIzM0O0VTUCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XCYjMzQ7XG4gIDk2Olx0XHRoZWxwXG4gIDk3Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgbG9hZCBiYWxhbmNpbmcgRVNQIChFbmNhcHN1bGF0aW9uXG4gIDk4Olx0XHQgIFNlY3VyaXR5IFBheWxvYWQpIHRyYW5zcG9ydCBwcm90b2NvbC4gU2F5IFkgaWYgdW5zdXJlLlxuICA5OTpcdFxuIDEwMDpcdGNvbmZpZ1x0SVBfVlNfUFJPVE9fQUhcbiAxMDE6XHRcdGJvb2wgXCYjMzQ7QUggbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFwmIzM0O1xuIDEwMjpcdFx0aGVscFxuIDEwMzpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGxvYWQgYmFsYW5jaW5nIEFIIChBdXRoZW50aWNhdGlvblxuIDEwNDpcdFx0ICBIZWFkZXIpIHRyYW5zcG9ydCBwcm90b2NvbC4gU2F5IFkgaWYgdW5zdXJlLlxuIDEwNTpcdFxuIDEwNjpcdGNvbmZpZyAgSVBfVlNfUFJPVE9fU0NUUFxuIDEwNzpcdFx0Ym9vbCBcJiMzNDtTQ1RQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcJiMzNDtcbiAxMDg6XHRcdHNlbGVjdCBORVRfQ1JDMzJDXG4gMTA5Olx0XHRoZWxwXG4gMTEwOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgbG9hZCBiYWxhbmNpbmcgU0NUUCB0cmFuc3BvcnRcbiAxMTE6XHRcdCAgcHJvdG9jb2wuIFNheSBZIGlmIHVuc3VyZS5cbiAxMTI6XHRcbiAxMTM6XHRjb21tZW50IFwmIzM0O0lQVlMgc2NoZWR1bGVyXCYjMzQ7XG4gMTE0Olx0XG4gMTE1Olx0Y29uZmlnXHRJUF9WU19SUlxuIDExNjpcdFx0dHJpc3RhdGUgXCYjMzQ7cm91bmQtcm9iaW4gc2NoZWR1bGluZ1wmIzM0O1xuIDExNzpcdFx0aGVscFxuIDExODpcdFx0ICBUaGUgcm9iaW4tcm9iaW4gc2NoZWR1bGluZyBhbGdvcml0aG0gc2ltcGx5IGRpcmVjdHMgbmV0d29ya1xuIDExOTpcdFx0ICBjb25uZWN0aW9ucyB0byBkaWZmZXJlbnQgcmVhbCBzZXJ2ZXJzIGluIGEgcm91bmQtcm9iaW4gbWFubmVyLlxuIDEyMDpcdFxuIDEyMTpcdFx0ICBJZiB5b3Ugd2FudCB0byBjb21waWxlIGl0IGluIGtlcm5lbCwgc2F5IFkuIFRvIGNvbXBpbGUgaXQgYXMgYVxuIDEyMjpcdFx0ICBtb2R1bGUsIGNob29zZSBNIGhlcmUuIElmIHVuc3VyZSwgc2F5IE4uXG4gMTIzOlx0IFxuIDEyNDpcdGNvbmZpZ1x0SVBfVlNfV1JSXG4gMTI1Olx0XHR0cmlzdGF0ZSBcJiMzNDt3ZWlnaHRlZCByb3VuZC1yb2JpbiBzY2hlZHVsaW5nXCYjMzQ7XG4gMTI2Olx0XHRoZWxwXG4gMTI3Olx0XHQgIFRoZSB3ZWlnaHRlZCByb2Jpbi1yb2JpbiBzY2hlZHVsaW5nIGFsZ29yaXRobSBkaXJlY3RzIG5ldHdvcmtcbiAxMjg6XHRcdCAgY29ubmVjdGlvbnMgdG8gZGlmZmVyZW50IHJlYWwgc2VydmVycyBiYXNlZCBvbiBzZXJ2ZXIgd2VpZ2h0c1xuIDEyOTpcdFx0ICBpbiBhIHJvdW5kLXJvYmluIG1hbm5lci4gU2VydmVycyB3aXRoIGhpZ2hlciB3ZWlnaHRzIHJlY2VpdmVcbiAxMzA6XHRcdCAgbmV3IGNvbm5lY3Rpb25zIGZpcnN0IHRoYW4gdGhvc2Ugd2l0aCBsZXNzIHdlaWdodHMsIGFuZCBzZXJ2ZXJzXG4gMTMxOlx0XHQgIHdpdGggaGlnaGVyIHdlaWdodHMgZ2V0IG1vcmUgY29ubmVjdGlvbnMgdGhhbiB0aG9zZSB3aXRoIGxlc3NcbiAxMzI6XHRcdCAgd2VpZ2h0cyBhbmQgc2VydmVycyB3aXRoIGVxdWFsIHdlaWdodHMgZ2V0IGVxdWFsIGNvbm5lY3Rpb25zLlxuIDEzMzpcdFxuIDEzNDpcdFx0ICBJZiB5b3Ugd2FudCB0byBjb21waWxlIGl0IGluIGtlcm5lbCwgc2F5IFkuIFRvIGNvbXBpbGUgaXQgYXMgYVxuIDEzNTpcdFx0ICBtb2R1bGUsIGNob29zZSBNIGhlcmUuIElmIHVuc3VyZSwgc2F5IE4uXG4gMTM2Olx0XG4gMTM3Olx0Y29uZmlnXHRJUF9WU19MQ1xuIDEzODpcdFx0dHJpc3RhdGUgXCYjMzQ7bGVhc3QtY29ubmVjdGlvbiBzY2hlZHVsaW5nXCYjMzQ7XG4gMTM5Olx0XHRoZWxwXG4gMTQwOlx0XHQgIFRoZSBsZWFzdC1jb25uZWN0aW9uIHNjaGVkdWxpbmcgYWxnb3JpdGhtIGRpcmVjdHMgbmV0d29ya1xuIDE0MTpcdFx0ICBjb25uZWN0aW9ucyB0byB0aGUgc2VydmVyIHdpdGggdGhlIGxlYXN0IG51bWJlciBvZiBhY3RpdmUgXG4gMTQyOlx0XHQgIGNvbm5lY3Rpb25zLlxuIDE0MzpcdFxuIDE0NDpcdFx0ICBJZiB5b3Ugd2FudCB0byBjb21waWxlIGl0IGluIGtlcm5lbCwgc2F5IFkuIFRvIGNvbXBpbGUgaXQgYXMgYVxuIDE0NTpcdFx0ICBtb2R1bGUsIGNob29zZSBNIGhlcmUuIElmIHVuc3VyZSwgc2F5IE4uXG4gMTQ2Olx0XG4gMTQ3Olx0Y29uZmlnXHRJUF9WU19XTENcbiAxNDg6XHRcdHRyaXN0YXRlIFwmIzM0O3dlaWdodGVkIGxlYXN0LWNvbm5lY3Rpb24gc2NoZWR1bGluZ1wmIzM0O1xuIDE0OTpcdFx0aGVscFxuIDE1MDpcdFx0ICBUaGUgd2VpZ2h0ZWQgbGVhc3QtY29ubmVjdGlvbiBzY2hlZHVsaW5nIGFsZ29yaXRobSBkaXJlY3RzIG5ldHdvcmtcbiAxNTE6XHRcdCAgY29ubmVjdGlvbnMgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSBsZWFzdCBhY3RpdmUgY29ubmVjdGlvbnNcbiAxNTI6XHRcdCAgbm9ybWFsaXplZCBieSB0aGUgc2VydmVyIHdlaWdodC5cbiAxNTM6XHRcbiAxNTQ6XHRcdCAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBpbiBrZXJuZWwsIHNheSBZLiBUbyBjb21waWxlIGl0IGFzIGFcbiAxNTU6XHRcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBJZiB1bnN1cmUsIHNheSBOLlxuIDE1NjpcdFxuIDE1NzpcdGNvbmZpZyAgSVBfVlNfRk9cbiAxNTg6XHRcdFx0dHJpc3RhdGUgXCYjMzQ7d2VpZ2h0ZWQgZmFpbG92ZXIgc2NoZWR1bGluZ1wmIzM0O1xuIDE1OTpcdFx0aGVscFxuIDE2MDpcdFx0ICBUaGUgd2VpZ2h0ZWQgZmFpbG92ZXIgc2NoZWR1bGluZyBhbGdvcml0aG0gZGlyZWN0cyBuZXR3b3JrXG4gMTYxOlx0XHQgIGNvbm5lY3Rpb25zIHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgaGlnaGVzdCB3ZWlnaHQgdGhhdCBpc1xuIDE2MjpcdFx0ICBjdXJyZW50bHkgYXZhaWxhYmxlLlxuIDE2MzpcdFxuIDE2NDpcdFx0ICBJZiB5b3Ugd2FudCB0byBjb21waWxlIGl0IGluIGtlcm5lbCwgc2F5IFkuIFRvIGNvbXBpbGUgaXQgYXMgYVxuIDE2NTpcdFx0ICBtb2R1bGUsIGNob29zZSBNIGhlcmUuIElmIHVuc3VyZSwgc2F5IE4uXG4gMTY2Olx0XG4gMTY3Olx0Y29uZmlnICBJUF9WU19PVkZcbiAxNjg6XHRcdHRyaXN0YXRlIFwmIzM0O3dlaWdodGVkIG92ZXJmbG93IHNjaGVkdWxpbmdcJiMzNDtcbiAxNjk6XHRcdGhlbHBcbiAxNzA6XHRcdCAgVGhlIHdlaWdodGVkIG92ZXJmbG93IHNjaGVkdWxpbmcgYWxnb3JpdGhtIGRpcmVjdHMgbmV0d29ya1xuIDE3MTpcdFx0ICBjb25uZWN0aW9ucyB0byB0aGUgc2VydmVyIHdpdGggdGhlIGhpZ2hlc3Qgd2VpZ2h0IHRoYXQgaXNcbiAxNzI6XHRcdCAgY3VycmVudGx5IGF2YWlsYWJsZSBhbmQgb3ZlcmZsb3dzIHRvIHRoZSBuZXh0IHdoZW4gYWN0aXZlXG4gMTczOlx0XHQgIGNvbm5lY3Rpb25zIGV4Y2VlZCB0aGUgbm9kZSYjMzk7cyB3ZWlnaHQuXG4gMTc0Olx0XG4gMTc1Olx0XHQgIElmIHlvdSB3YW50IHRvIGNvbXBpbGUgaXQgaW4ga2VybmVsLCBzYXkgWS4gVG8gY29tcGlsZSBpdCBhcyBhXG4gMTc2Olx0XHQgIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gSWYgdW5zdXJlLCBzYXkgTi5cbiAxNzc6XHRcbiAxNzg6XHRjb25maWdcdElQX1ZTX0xCTENcbiAxNzk6XHRcdHRyaXN0YXRlIFwmIzM0O2xvY2FsaXR5LWJhc2VkIGxlYXN0LWNvbm5lY3Rpb24gc2NoZWR1bGluZ1wmIzM0O1xuIDE4MDpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0OTQxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBJUFZTIERlc3RpbmF0aW9uIE92ZXJsb2FkIFRocmVzaG9sZCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJUFZTIGlzIGRlZmluaXRlbHkgYSBrZXkgY29tcG9uZW50IGhlcmUsIHBhcnQgb2YgbmV0ZmlsdGVyLCBhbmQgYWNjZXNzaWJsZSB0aHJvdWdoIG5ldGxpbmsgaW50ZXJmYWNlcywgc29ja29wdCwgZXRjLiwgd2hpY2ggaXMgYSBnb29kIHNpZ24sIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgaXRzIGludGVncmF0aW9uIGluIFFFTVUvdmlydCBlbnZpcm9ubWVudHMuIFRoZSBjcml0aWNhbCBxdWVzdGlvbjogSXMgdGhpcyB0aGluZyByZWFjaGFibGUgdGhyb3VnaCBzeXprYWxsZXI/IFllcCwgc3l6a2FsbGVyIHN1cHBvcnRzIElQVlMgbmV0bGluayBhbmQgbmV0ZmlsdGVyIG9wZXJhdGlvbnMuIEV4Y2VsbGVudC4KCk5vdywgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgY29kZSB0aGF0JiMzOTtzIHBvdGVudGlhbGx5IG1vZGlmeWluZyB0aGUgSVBWUyBkZXN0aW5hdGlvbiBvdmVybG9hZCB0aHJlc2hvbGQgbG9naWMgYW5kIHRoZSB1bmRlcmx5aW5nIHN0cnVjdHVyZSBsYXlvdXQuIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgZXhhY3QgbG9jYXRpb25zOgotICAgYGlwX3ZzX2JpbmRfZGVzdGAgYW5kIGBpcF92c191bmJpbmRfZGVzdGAgd2l0aGluIGBuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jYC4KLSAgIGBpcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZGAsIGBfX2lwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkYCwgYW5kIGBfX2lwX3ZzX3VwZGF0ZV9kZXN0YCB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuY2AuCi0gICBBbmQgdGhlIHNjaGVkdWxlciBmdW5jdGlvbnMgaW4gdGhlIHZhcmlvdXMgc2NoZWR1bGVyIGZpbGVzIGludm9sdmVkLgoKVGltZSB0byBzZWUgaWYgdGhpcyBpcyAmIzM0O1dvcnRoRnV6emluZyYjMzQ7LiBDb25zaWRlcmluZyB0aGF0IGl0IHRvdWNoZXMgZXhlY3V0YWJsZSBuZXR3b3JraW5nLCBuZXRmaWx0ZXIsIGFuZCBJUFZTIGNvZGUgdGhhdCYjMzk7cyByZWFjaGFibGUsIHRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nICYjMzQ7eWVzJiMzNDsuIFNvLCB0aGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBzZXQgdG8gYHRydWVgLgoKTm93IGZvciBgRm9jdXNTeW1ib2xzYC4gSSBuZWVkIHRvIGJlIHByZWNpc2UsIHplcm9pbmcgaW4gb24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IGFyZSBiZWluZyBtb2RpZmllZCBvciBkaXJlY3RseSBjYWxsIHRoZSBtb2RpZmllZCBsb2dpYywgYW5kIHRoYXQgYXJlIG5vdCB1YmlxdWl0b3VzLiBMZXQmIzM5O3Mgc2VlLi4uCgpJbiBgaXBfdnNfY29ubi5jYCwgd2UgaGF2ZToKLSBgaXBfdnNfYmluZF9kZXN0YAotIGBpcF92c191bmJpbmRfZGVzdGAKCkFuZCB0aGVuIGluIGBpcF92c19jdGwuY2A6Ci0gYGlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkYCAoVGhpcyBpcyBleHBvcnRlZCBhbmQgbm9uLXN0YXRpYywgc28gcHJvbWlzaW5nISkKLSBgX19pcF92c191cGRhdGVfZGVzdGAgKG9yIGFueSBvZiBpdHMgY2FsbGVycywgYGlwX3ZzX2VkaXRfZGVzdGAgb3IgYGlwX3ZzX2FkZF9kZXN0YC4pCgpMZXQmIzM5O3MgZGl2ZSBpbnRvIGBpcF92c19jdGwuY2AgYXJvdW5kIGBfX2lwX3ZzX3VwZGF0ZV9kZXN0YC4gVGhhdCBzZWVtcyBsaWtlIHRoZSByaWdodCBhcmVhIHRvIGNvbmNlbnRyYXRlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2lwX3ZzX3VwZGF0ZV9kZXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MTM0ND1zdGF0aWMgdm9pZFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjEzNDU6X19pcF92c191cGRhdGVfZGVzdChzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xMzQ2LVx0XHQgICAgc3RydWN0IGlwX3ZzX2Rlc3RfdXNlcl9rZXJuICp1ZGVzdCwgaW50IGFkZClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MTQ0Mz1pcF92c19uZXdfZGVzdChzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBzdHJ1Y3QgaXBfdnNfZGVzdF91c2VyX2tlcm4gKnVkZXN0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xNDk0LVx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2ZGVzdC1cdTAwM2Vkc3RfbG9jayk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MTQ5NTpcdF9faXBfdnNfdXBkYXRlX2Rlc3Qoc3ZjLCBkZXN0LCB1ZGVzdCwgMSk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMTQ5Ni1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MTUxMj1pcF92c19hZGRfZGVzdChzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBzdHJ1Y3QgaXBfdnNfZGVzdF91c2VyX2tlcm4gKnVkZXN0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xNTcyLVx0XHRlbHNlXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MTU3MzpcdFx0XHRfX2lwX3ZzX3VwZGF0ZV9kZXN0KHN2YywgZGVzdCwgdWRlc3QsIDEpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTE1NzQtXHR9IGVsc2Uge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0xNTg5PWlwX3ZzX2VkaXRfZGVzdChzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBzdHJ1Y3QgaXBfdnNfZGVzdF91c2VyX2tlcm4gKnVkZXN0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xNjI3LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjE2Mjg6XHRfX2lwX3ZzX3VwZGF0ZV9kZXN0KHN2YywgZGVzdCwgdWRlc3QsIDApO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTE2MjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDMxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIElQVlMgU2NoZWR1bGVyIE1vZGlmaWNhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSB3aGljaCBzY2hlZHVsZXJzIGhhdmUgYmVlbiB0b3VjaGVkLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZXNlIHR3ZWx2ZTogYGlwX3ZzX2RoX3NjaGVkdWxlYCwgYGlwX3ZzX2ZvX3NjaGVkdWxlYCwgYF9faXBfdnNfbGJsY19zY2hlZHVsZWAsIGBfX2lwX3ZzX2xibGNyX3NjaGVkdWxlYCwgYGlwX3ZzX2xjX3NjaGVkdWxlYCwgYGlwX3ZzX25xX3NjaGVkdWxlYCwgYGlwX3ZzX292Zl9zY2hlZHVsZWAsIGBpcF92c19ycl9zY2hlZHVsZWAsIGBpcF92c19zZWRfc2NoZWR1bGVgLCBgaXBfdnNfdHdvc19zY2hlZHVsZWAsIGBpcF92c193bGNfc2NoZWR1bGVgLCBhbmQgYGlwX3ZzX3dycl9zY2hlZHVsZWAuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgc3VwcG9ydGluZyBmdW5jdGlvbnMgYXMgd2VsbDogYGlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkYCwgYGlwX3ZzX2JpbmRfZGVzdGAsIGBpcF92c191bmJpbmRfZGVzdGAsIGBpcF92c19lZGl0X2Rlc3RgLCBhbmQgYGlwX3ZzX2FkZF9kZXN0YC4KCk5vdywgYmVmb3JlIEkgcHJvY2VlZCB3aXRoIGFueSBmdXJ0aGVyIGludmVzdGlnYXRpb24sIEkgbmVlZCB0byBjaGVjayB3aGF0IGNvbmZpZ3VyYXRpb25zLCBpZiBhbnksIGFyZSBuZWVkZWQuIEEgcXVpY2sgbG9vayBhdCB0aGUgYEtjb25maWdgIGZvciB0aGUgSVBWUyBjb3JlIHRlbGxzIG1lIHRoYXQgaXQgZGVwZW5kcyBvbiBgSU5FVGAgYW5kIGBORVRGSUxURVJgIGFuZCBlaXRoZXIgYE5GX0NPTk5UUkFDS2Agb3IgYE5GX0NPTk5UUkFDSz1uYC4gVGhhdCBtYWtlcyBzZW5zZS4gSSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGVzZSBkZXBlbmRlbmNpZXMgYXJlIHByb3Blcmx5IGhhbmRsZWQuCgpBbmQgb2YgY291cnNlLCB0aGUgc2NoZWR1bGVycyB0aGVtc2VsdmVzIGFyZSBlbmFibGVkIGJ5IGNvbmZpZ3MgYXMgd2VsbCwgbmFtZWx5OiBgSVBfVlNfUlJgLCBgSVBfVlNfV1JSYCwgYElQX1ZTX0xDYCwgYElQX1ZTX1dMQ2AsIGBJUF9WU19GT2AsIGBJUF9WU19PVkZgLCBgSVBfVlNfTEJMQ2AsIGBJUF9WU19MQkxDUmAsIGBJUF9WU19ESGAsIGBJUF9WU19TSGAsIGBJUF9WU19TRURgLCBgSVBfVlNfTlFgLCBgSVBfVlNfVFdPU2AsIGFuZCBgSVBfVlNfTUhgLiBJIHNob3VsZCBhbHNvIHJlLWNvbmZpcm0gdGhhdCBgTkVURklMVEVSYCBhbmQgYElORVRgIGFyZSBjb25maWd1cmVkIGNvcnJlY3RseSBhbmQgdGhhdCB0aGVyZSBhcmUgbm8gY29uZmxpY3RzLgoKVG8gbWFrZSBzdXJlIEkmIzM5O20gcHJlY2lzZSwgSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIHRoZSBgS2NvbmZpZ2AgZmlsZXMgbW9yZSBjbG9zZWx5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gYWNjb3VudGluZyBmb3IgZXZlcnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX1ZTXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTI4Nj1jb21tZW50ICYjMzk7SVBWUyBTSCBzY2hlZHVsZXImIzM5O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg3LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6Mjg4OmNvbmZpZyBJUF9WU19TSF9UQUJfQklUU1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg5LVx0aW50IFwmIzM0O0lQVlMgc291cmNlIGhhc2hpbmcgdGFibGUgc2l6ZSAodGhlIE50aCBwb3dlciBvZiAyKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMwMT1jb21tZW50ICYjMzk7SVBWUyBNSCBzY2hlZHVsZXImIzM5O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzAyLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzAzOmNvbmZpZyBJUF9WU19NSF9UQUJfSU5ERVhcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwNC1cdGludCBcJiMzNDtJUFZTIG1hZ2xldiBoYXNoaW5nIHRhYmxlIGluZGV4IG9mIHNpemUgKHRoZSBwcmltZSBudW1iZXJzKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzU1OAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIHRoZSBJUFZTIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBJUFZTIEtjb25maWcgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBzZWN0aW9uIGZyb20gbGluZXMgMTgwIHRvIDMyMCBpbiBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgLiBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG9uIHdoYXQgb3B0aW9ucyBhcmUgZGVmaW5lZCB3aXRoaW4gdGhhdCBhcmVhLiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgYXQgdGhpcyB0byBlaXRoZXIgdW5kZXJzdGFuZCBhIHNwZWNpZmljIGZlYXR1cmUmIzM5O3MgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLCBkZWJ1ZyBhIGJ1aWxkIGlzc3VlLCBvciBwZXJoYXBzIGV2ZW4gYW5hbHl6ZSB0aGUgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBnb3Zlcm5zIHdoaWNoIG1vZHVsZXMgb3IgZmVhdHVyZXMgZ2V0IGVuYWJsZWQuIE15IGdvYWwgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQgdGhlIHVzZXIgaGFzIHRoZSBhYmlsaXR5IHRvIGVuYWJsZSBvciBkaXNhYmxlIGFuZCB0byB3aGljaCBvdGhlciBzZXR0aW5ncyB0aGVzZSBmZWF0dXJlcyBhcmUgZGVwZW5kZW50LiBLbm93aW5nIHRoaXMgaXMgY3JpdGljYWwsIHNpbmNlIGEgbWlzY29uZmlndXJhdGlvbiBvciBtaXN1bmRlcnN0YW5kaW5nIGNhbiBsZWFkIHRvIG9wZXJhdGlvbmFsIGluc3RhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTgwOlx0XHRoZWxwXG4gMTgxOlx0XHQgIFRoZSBsb2NhbGl0eS1iYXNlZCBsZWFzdC1jb25uZWN0aW9uIHNjaGVkdWxpbmcgYWxnb3JpdGhtIGlzIGZvclxuIDE4MjpcdFx0ICBkZXN0aW5hdGlvbiBJUCBsb2FkIGJhbGFuY2luZy4gSXQgaXMgdXN1YWxseSB1c2VkIGluIGNhY2hlIGNsdXN0ZXIuXG4gMTgzOlx0XHQgIFRoaXMgYWxnb3JpdGhtIHVzdWFsbHkgZGlyZWN0cyBwYWNrZXQgZGVzdGluZWQgZm9yIGFuIElQIGFkZHJlc3MgdG9cbiAxODQ6XHRcdCAgaXRzIHNlcnZlciBpZiB0aGUgc2VydmVyIGlzIGFsaXZlIGFuZCB1bmRlciBsb2FkLiBJZiB0aGUgc2VydmVyIGlzXG4gMTg1Olx0XHQgIG92ZXJsb2FkZWQgKGl0cyBhY3RpdmUgY29ubmVjdGlvbiBudW1iZXJzIGlzIGxhcmdlciB0aGFuIGl0cyB3ZWlnaHQpXG4gMTg2Olx0XHQgIGFuZCB0aGVyZSBpcyBhIHNlcnZlciBpbiBpdHMgaGFsZiBsb2FkLCB0aGVuIGFsbG9jYXRlIHRoZSB3ZWlnaHRlZFxuIDE4NzpcdFx0ICBsZWFzdC1jb25uZWN0aW9uIHNlcnZlciB0byB0aGlzIElQIGFkZHJlc3MuXG4gMTg4Olx0XG4gMTg5Olx0XHQgIElmIHlvdSB3YW50IHRvIGNvbXBpbGUgaXQgaW4ga2VybmVsLCBzYXkgWS4gVG8gY29tcGlsZSBpdCBhcyBhXG4gMTkwOlx0XHQgIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gSWYgdW5zdXJlLCBzYXkgTi5cbiAxOTE6XHRcbiAxOTI6XHRjb25maWcgIElQX1ZTX0xCTENSXG4gMTkzOlx0XHR0cmlzdGF0ZSBcJiMzNDtsb2NhbGl0eS1iYXNlZCBsZWFzdC1jb25uZWN0aW9uIHdpdGggcmVwbGljYXRpb24gc2NoZWR1bGluZ1wmIzM0O1xuIDE5NDpcdFx0aGVscFxuIDE5NTpcdFx0ICBUaGUgbG9jYWxpdHktYmFzZWQgbGVhc3QtY29ubmVjdGlvbiB3aXRoIHJlcGxpY2F0aW9uIHNjaGVkdWxpbmdcbiAxOTY6XHRcdCAgYWxnb3JpdGhtIGlzIGFsc28gZm9yIGRlc3RpbmF0aW9uIElQIGxvYWQgYmFsYW5jaW5nLiBJdCBpcyBcbiAxOTc6XHRcdCAgdXN1YWxseSB1c2VkIGluIGNhY2hlIGNsdXN0ZXIuIEl0IGRpZmZlcnMgZnJvbSB0aGUgTEJMQyBzY2hlZHVsaW5nXG4gMTk4Olx0XHQgIGFzIGZvbGxvd3M6IHRoZSBsb2FkIGJhbGFuY2VyIG1haW50YWlucyBtYXBwaW5ncyBmcm9tIGEgdGFyZ2V0XG4gMTk5Olx0XHQgIHRvIGEgc2V0IG9mIHNlcnZlciBub2RlcyB0aGF0IGNhbiBzZXJ2ZSB0aGUgdGFyZ2V0LiBSZXF1ZXN0cyBmb3JcbiAyMDA6XHRcdCAgYSB0YXJnZXQgYXJlIGFzc2lnbmVkIHRvIHRoZSBsZWFzdC1jb25uZWN0aW9uIG5vZGUgaW4gdGhlIHRhcmdldCYjMzk7c1xuIDIwMTpcdFx0ICBzZXJ2ZXIgc2V0LiBJZiBhbGwgdGhlIG5vZGUgaW4gdGhlIHNlcnZlciBzZXQgYXJlIG92ZXIgbG9hZGVkLFxuIDIwMjpcdFx0ICBpdCBwaWNrcyB1cCBhIGxlYXN0LWNvbm5lY3Rpb24gbm9kZSBpbiB0aGUgY2x1c3RlciBhbmQgYWRkcyBpdFxuIDIwMzpcdFx0ICBpbiB0aGUgc2V2ZXIgc2V0IGZvciB0aGUgdGFyZ2V0LiBJZiB0aGUgc2VydmVyIHNldCBoYXMgbm90IGJlZW5cbiAyMDQ6XHRcdCAgbW9kaWZpZWQgZm9yIHRoZSBzcGVjaWZpZWQgdGltZSwgdGhlIG1vc3QgbG9hZGVkIG5vZGUgaXMgcmVtb3ZlZFxuIDIwNTpcdFx0ICBmcm9tIHRoZSBzZXJ2ZXIgc2V0LCBpbiBvcmRlciB0byBhdm9pZCBoaWdoIGRlZ3JlZSBvZiByZXBsaWNhdGlvbi5cbiAyMDY6XHRcbiAyMDc6XHRcdCAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBpbiBrZXJuZWwsIHNheSBZLiBUbyBjb21waWxlIGl0IGFzIGFcbiAyMDg6XHRcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBJZiB1bnN1cmUsIHNheSBOLlxuIDIwOTpcdFxuIDIxMDpcdGNvbmZpZ1x0SVBfVlNfREhcbiAyMTE6XHRcdHRyaXN0YXRlIFwmIzM0O2Rlc3RpbmF0aW9uIGhhc2hpbmcgc2NoZWR1bGluZ1wmIzM0O1xuIDIxMjpcdFx0aGVscFxuIDIxMzpcdFx0ICBUaGUgZGVzdGluYXRpb24gaGFzaGluZyBzY2hlZHVsaW5nIGFsZ29yaXRobSBhc3NpZ25zIG5ldHdvcmtcbiAyMTQ6XHRcdCAgY29ubmVjdGlvbnMgdG8gdGhlIHNlcnZlcnMgdGhyb3VnaCBsb29raW5nIHVwIGEgc3RhdGljYWxseSBhc3NpZ25lZFxuIDIxNTpcdFx0ICBoYXNoIHRhYmxlIGJ5IHRoZWlyIGRlc3RpbmF0aW9uIElQIGFkZHJlc3Nlcy5cbiAyMTY6XHRcbiAyMTc6XHRcdCAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBpbiBrZXJuZWwsIHNheSBZLiBUbyBjb21waWxlIGl0IGFzIGFcbiAyMTg6XHRcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBJZiB1bnN1cmUsIHNheSBOLlxuIDIxOTpcdFxuIDIyMDpcdGNvbmZpZ1x0SVBfVlNfU0hcbiAyMjE6XHRcdHRyaXN0YXRlIFwmIzM0O3NvdXJjZSBoYXNoaW5nIHNjaGVkdWxpbmdcJiMzNDtcbiAyMjI6XHRcdGhlbHBcbiAyMjM6XHRcdCAgVGhlIHNvdXJjZSBoYXNoaW5nIHNjaGVkdWxpbmcgYWxnb3JpdGhtIGFzc2lnbnMgbmV0d29ya1xuIDIyNDpcdFx0ICBjb25uZWN0aW9ucyB0byB0aGUgc2VydmVycyB0aHJvdWdoIGxvb2tpbmcgdXAgYSBzdGF0aWNhbGx5IGFzc2lnbmVkXG4gMjI1Olx0XHQgIGhhc2ggdGFibGUgYnkgdGhlaXIgc291cmNlIElQIGFkZHJlc3Nlcy5cbiAyMjY6XHRcbiAyMjc6XHRcdCAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBpbiBrZXJuZWwsIHNheSBZLiBUbyBjb21waWxlIGl0IGFzIGFcbiAyMjg6XHRcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBJZiB1bnN1cmUsIHNheSBOLlxuIDIyOTpcdFxuIDIzMDpcdGNvbmZpZ1x0SVBfVlNfTUhcbiAyMzE6XHRcdHRyaXN0YXRlIFwmIzM0O21hZ2xldiBoYXNoaW5nIHNjaGVkdWxpbmdcJiMzNDtcbiAyMzI6XHRcdGhlbHBcbiAyMzM6XHRcdCAgVGhlIG1hZ2xldiBjb25zaXN0ZW50IGhhc2hpbmcgc2NoZWR1bGluZyBhbGdvcml0aG0gcHJvdmlkZXMgdGhlXG4gMjM0Olx0XHQgIEdvb2dsZSYjMzk7cyBNYWdsZXYgaGFzaGluZyBhbGdvcml0aG0gYXMgYSBJUFZTIHNjaGVkdWxlci4gSXQgYXNzaWduc1xuIDIzNTpcdFx0ICBuZXR3b3JrIGNvbm5lY3Rpb25zIHRvIHRoZSBzZXJ2ZXJzIHRocm91Z2ggbG9va2luZyB1cCBhIHN0YXRpY2FsbHlcbiAyMzY6XHRcdCAgYXNzaWduZWQgc3BlY2lhbCBoYXNoIHRhYmxlIGNhbGxlZCB0aGUgbG9va3VwIHRhYmxlLiBNYWdsZXYgaGFzaGluZ1xuIDIzNzpcdFx0ICBpcyB0byBhc3NpZ24gYSBwcmVmZXJlbmNlIGxpc3Qgb2YgYWxsIHRoZSBsb29rdXAgdGFibGUgcG9zaXRpb25zXG4gMjM4Olx0XHQgIHRvIGVhY2ggZGVzdGluYXRpb24uXG4gMjM5Olx0XG4gMjQwOlx0XHQgIFRocm91Z2ggdGhpcyBvcGVyYXRpb24sIFRoZSBtYWdsZXYgaGFzaGluZyBnaXZlcyBhbiBhbG1vc3QgZXF1YWxcbiAyNDE6XHRcdCAgc2hhcmUgb2YgdGhlIGxvb2t1cCB0YWJsZSB0byBlYWNoIG9mIHRoZSBkZXN0aW5hdGlvbnMgYW5kIHByb3ZpZGVzXG4gMjQyOlx0XHQgIG1pbmltYWwgZGlzcnVwdGlvbiBieSB1c2luZyB0aGUgbG9va3VwIHRhYmxlLiBXaGVuIHRoZSBzZXQgb2ZcbiAyNDM6XHRcdCAgZGVzdGluYXRpb25zIGNoYW5nZXMsIGEgY29ubmVjdGlvbiB3aWxsIGxpa2VseSBiZSBzZW50IHRvIHRoZSBzYW1lXG4gMjQ0Olx0XHQgIGRlc3RpbmF0aW9uIGFzIGl0IHdhcyBiZWZvcmUuXG4gMjQ1Olx0XG4gMjQ2Olx0XHQgIElmIHlvdSB3YW50IHRvIGNvbXBpbGUgaXQgaW4ga2VybmVsLCBzYXkgWS4gVG8gY29tcGlsZSBpdCBhcyBhXG4gMjQ3Olx0XHQgIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gSWYgdW5zdXJlLCBzYXkgTi5cbiAyNDg6XHRcbiAyNDk6XHRjb25maWdcdElQX1ZTX1NFRFxuIDI1MDpcdFx0dHJpc3RhdGUgXCYjMzQ7c2hvcnRlc3QgZXhwZWN0ZWQgZGVsYXkgc2NoZWR1bGluZ1wmIzM0O1xuIDI1MTpcdFx0aGVscFxuIDI1MjpcdFx0ICBUaGUgc2hvcnRlc3QgZXhwZWN0ZWQgZGVsYXkgc2NoZWR1bGluZyBhbGdvcml0aG0gYXNzaWducyBuZXR3b3JrXG4gMjUzOlx0XHQgIGNvbm5lY3Rpb25zIHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgc2hvcnRlc3QgZXhwZWN0ZWQgZGVsYXkuIFRoZSBcbiAyNTQ6XHRcdCAgZXhwZWN0ZWQgZGVsYXkgdGhhdCB0aGUgam9iIHdpbGwgZXhwZXJpZW5jZSBpcyAoQ2kgJiM0MzsgMSkgLyBVaSBpZiBcbiAyNTU6XHRcdCAgc2VudCB0byB0aGUgaXRoIHNlcnZlciwgaW4gd2hpY2ggQ2kgaXMgdGhlIG51bWJlciBvZiBjb25uZWN0aW9uc1xuIDI1NjpcdFx0ICBvbiB0aGUgaXRoIHNlcnZlciBhbmQgVWkgaXMgdGhlIGZpeGVkIHNlcnZpY2UgcmF0ZSAod2VpZ2h0KVxuIDI1NzpcdFx0ICBvZiB0aGUgaXRoIHNlcnZlci5cbiAyNTg6XHRcbiAyNTk6XHRcdCAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBpbiBrZXJuZWwsIHNheSBZLiBUbyBjb21waWxlIGl0IGFzIGFcbiAyNjA6XHRcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBJZiB1bnN1cmUsIHNheSBOLlxuIDI2MTpcdFxuIDI2MjpcdGNvbmZpZ1x0SVBfVlNfTlFcbiAyNjM6XHRcdHRyaXN0YXRlIFwmIzM0O25ldmVyIHF1ZXVlIHNjaGVkdWxpbmdcJiMzNDtcbiAyNjQ6XHRcdGhlbHBcbiAyNjU6XHRcdCAgVGhlIG5ldmVyIHF1ZXVlIHNjaGVkdWxpbmcgYWxnb3JpdGhtIGFkb3B0cyBhIHR3by1zcGVlZCBtb2RlbC5cbiAyNjY6XHRcdCAgV2hlbiB0aGVyZSBpcyBhbiBpZGxlIHNlcnZlciBhdmFpbGFibGUsIHRoZSBqb2Igd2lsbCBiZSBzZW50IHRvXG4gMjY3Olx0XHQgIHRoZSBpZGxlIHNlcnZlciwgaW5zdGVhZCBvZiB3YWl0aW5nIGZvciBhIGZhc3Qgb25lLiBXaGVuIHRoZXJlXG4gMjY4Olx0XHQgIGlzIG5vIGlkbGUgc2VydmVyIGF2YWlsYWJsZSwgdGhlIGpvYiB3aWxsIGJlIHNlbnQgdG8gdGhlIHNlcnZlclxuIDI2OTpcdFx0ICB0aGF0IG1pbmltaXplIGl0cyBleHBlY3RlZCBkZWxheSAoVGhlIFNob3J0ZXN0IEV4cGVjdGVkIERlbGF5XG4gMjcwOlx0XHQgIHNjaGVkdWxpbmcgYWxnb3JpdGhtKS5cbiAyNzE6XHRcbiAyNzI6XHRcdCAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBpbiBrZXJuZWwsIHNheSBZLiBUbyBjb21waWxlIGl0IGFzIGFcbiAyNzM6XHRcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBJZiB1bnN1cmUsIHNheSBOLlxuIDI3NDpcdFxuIDI3NTpcdGNvbmZpZ1x0SVBfVlNfVFdPU1xuIDI3NjpcdFx0dHJpc3RhdGUgXCYjMzQ7d2VpZ2h0ZWQgcmFuZG9tIHR3b3MgY2hvaWNlIGxlYXN0LWNvbm5lY3Rpb24gc2NoZWR1bGluZ1wmIzM0O1xuIDI3NzpcdFx0aGVscFxuIDI3ODpcdFx0ICBUaGUgd2VpZ2h0ZWQgcmFuZG9tIHR3b3MgY2hvaWNlIGxlYXN0LWNvbm5lY3Rpb24gc2NoZWR1bGluZ1xuIDI3OTpcdFx0ICBhbGdvcml0aG0gcGlja3MgdHdvIHJhbmRvbSByZWFsIHNlcnZlcnMgYW5kIGRpcmVjdHMgbmV0d29ya1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQ1OAoJCQkJCQkJb3V0cHV0OiAyNTYKCQkJCQkJCXRob3VnaHRzOiA3MjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSVBWUyBPdmVybG9hZCBIYW5kbGluZyBQYXRjaCBSZXZpZXcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBtZXRpY3Vsb3VzbHkgZXhhbWluZSB0aGUgY2hhbmdlcyB0byB0aGUgSVBWUyBjb3JlLiBJdCBhcHBlYXJzIHdlJiMzOTtyZSBhZGRyZXNzaW5nIHRoZSBvdmVybG9hZCBtZWNoYW5pc20sIGFuZCB0aGUgcmVtb3ZhbCBvZiBgSVBfVlNfREVTVF9GX09WRVJMT0FEYCBmcm9tIHRoZSBgZmxhZ3NgIGZpZWxkIGluIGBpbmNsdWRlL25ldC9pcF92cy5oYCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl0IGltcGxpZXMgYSBzaGlmdCBpbiBob3cgb3ZlcmxvYWQgc3RhdGUgaXMgbWFuYWdlZCDigJMgbGlrZWx5LCB3ZSYjMzk7cmUgbW92aW5nIHRvd2FyZHMgYSBtb3JlIGV4cGxpY2l0IHRocmVzaG9sZC1iYXNlZCBhcHByb2FjaCwgY29uZmlybWVkIGJ5IHRoZSBgUkVBRF9PTkNFKGRlc3QtJmd0O2xfdGhyZXNob2xkX3ZhbClgIGNoZWNrIGFuZCB0aGUgYWRkaXRpb24vcmVvcmRlcmluZyBvZiBgdV90aHJlc2hvbGRfdmFsYCBhbmQgYGxfdGhyZXNob2xkX3ZhbGAgaW4gYHN0cnVjdCBpcF92c19kZXN0YC4gVGhhdCBzdHJ1Y3QgcmVvcmdhbml6YXRpb24gZGVzZXJ2ZXMgYSBjbG9zZXIgbG9vayB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgYWxpZ25tZW50IGlzc3VlcyB0aGF0IGNvdWxkIGNyb3AgdXAsIGV2ZW4gd2l0aCBgUkVBRF9PTkNFYCBpbiBwbGF5LgoKTmV4dCwgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgc2lkZSBpbiBgaXBfdnNfY29ubi5jYCBpcyBrZXkuIGBpcF92c19iaW5kX2Rlc3RgIGFuZCBgaXBfdnNfdW5iaW5kX2Rlc3RgIG5vdyBleHBsaWNpdGx5IGNhbGwgYGlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkYCBiYXNlZCBvbiBjb21wYXJpc29ucyB3aXRoIHRoZSBuZXcgdGhyZXNob2xkIHZhbHVlcywgYHVfdGhyZXNob2xkX3ZhbGAgYW5kIGBsX3RocmVzaG9sZF92YWxgLCByZXNwZWN0aXZlbHkuIFRoaXMgaXMgdGhlIGhlYXJ0IG9mIHRoZSBsb2dpYywgYW5kIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGhvdyB0aGVzZSB0aHJlc2hvbGRzIGFyZSBiZWluZyBzZXQgYW5kIHVzZWQgdG8gdG9nZ2xlIHRoZSBvdmVybG9hZCBzdGF0ZSwgYW5kIGlmIHRoZXJlIGFyZSBlZGdlIGNhc2VzIGluIHRoZSBjb25uZWN0aW9ucyBsaWZlIGN5Y2xlLgoKVGhlIGNvbnRyb2wgcGxhbmUgY2hhbmdlcyBpbiBgaXBfdnNfY3RsLmNgIHdpdGggdGhlIG5ldyB1cGRhdGUgZnVuY3Rpb25zIGFyZSBnb2luZyB0byBiZSBpbXBvcnRhbnQgdG9vIOKAkyBzcGVjaWZpY2FsbHkgYF9faXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWRgLCBgaXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWRgLCBhbmQgYF9faXBfdnNfdXBkYXRlX2Rlc3RgLiBJIG5lZWQgdG8gdHJhY2sgaG93IHRoZXkgYXJlIHRyaWdnZXJlZCwgdG8gdmVyaWZ5IHRoZXkgZml0IHdpdGggdGhlIHRocmVzaG9sZCBjaGFuZ2VzIGFuZCB0aGUgc2NoZWR1bGVyIGxvZ2ljLgoKRmluYWxseSwgdGhlIHNjaGVkdWxlciBpbnRlZ3JhdGlvbiBpcyBjcnVjaWFsLiBJIHNlZSBjaGFuZ2VzIGluIG1hbnkgb2YgdGhlIHNjaGVkdWxlcnMsIHNwZWNpZmljYWxseTogYGlwX3ZzX2RoX3NjaGVkdWxlYCwgYGlwX3ZzX2ZvX3NjaGVkdWxlYCwgYF9faXBfdnNfbGJsY19zY2hlZHVsZWAsIGBfX2lwX3ZzX2xibGNyX3NjaGVkdWxlYCwgYGlwX3ZzX2xjX3NjaGVkdWxlYCwgYGlzX3VuYXZhaWxhYmxlYCBpbiBtaCBhbmQgc2gsIGBpcF92c19ucV9zY2hlZHVsZWAsIGBpcF92c19vdmZfc2NoZWR1bGVgLCBgaXBfdnNfcnJfc2NoZWR1bGVgLCBgaXBfdnNfc2VkX3NjaGVkdWxlYCwgYGlwX3ZzX3R3b3Nfc2NoZWR1bGVgLCBgaXBfdnNfd2xjX3NjaGVkdWxlYCwgYGlwX3ZzX3dycl9zY2hlZHVsZWAuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBvdmVybG9hZCBzdGF0ZSBhZmZlY3RzIHRoZSBzY2hlZHVsaW5nIGRlY2lzaW9ucy4gRm9yIGluc3RhbmNlLCBpcyBgaXNfdW5hdmFpbGFibGVgIGJlaW5nIHVzZWQgaW4gdGhlIG92ZXJsb2FkIHBhdGg/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBlYWNoIHNjaGVkdWxlciBpcyBiZWhhdmluZyBjb3JyZWN0bHkgYW5kIHRoYXQgbm8gdW5leHBlY3RlZCBiZWhhdmlvciwgc3VjaCBhcyB1bm5lY2Vzc2FyeSBiYWNrLW9mZiwgaXMgaW50cm9kdWNlZC4KCkdpdmVuIHRoZSBzdHJ1Y3R1cmFsIGNoYW5nZXMgYW5kIGxvZ2ljIHNoaWZ0LCBJIG5lZWQgdG8gc3BlY2lmeSB0aGVzZSBGb2N1c1N5bWJvbHMgdG8gYmUgdGFyZ2V0ZWQgZm9yIGZ1enppbmc6IGBpcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZGAsIGBpcF92c19iaW5kX2Rlc3RgLCBgaXBfdnNfdW5iaW5kX2Rlc3RgLCBgX19pcF92c191cGRhdGVfZGVzdGAsIGBpcF92c19hZGRfZGVzdGAsIGBpcF92c19lZGl0X2Rlc3RgLCBgaXBfdnNfZGhfc2NoZWR1bGVgLCBgaXBfdnNfZm9fc2NoZWR1bGVgLCBgaXBfdnNfbGNfc2NoZWR1bGVgLCBgaXBfdnNfb3ZmX3NjaGVkdWxlYCwgYGlwX3ZzX3JyX3NjaGVkdWxlYCwgYGlwX3ZzX3NlZF9zY2hlZHVsZWAsIGBpcF92c190d29zX3NjaGVkdWxlYCwgYGlwX3ZzX3dsY19zY2hlZHVsZWAsIGFuZCBgaXBfdnNfd3JyX3NjaGVkdWxlYC4KClRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBhcHBlYXIgdG8gYmUgdGhlIHN0YW5kYXJkIElQVlMgc3RhY2s6IGBJUF9WU2AsIGBORVRGSUxURVJgLCBhbmQgYElORVRgLiBOb3RoaW5nIHVuZXhwZWN0ZWQgdGhlcmUuCgpVbHRpbWF0ZWx5LCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoZXNlIGNoYW5nZXMgd2FycmFudCB0aG9yb3VnaCBmdXp6aW5nLiBUaGUgcGF0Y2ggc2lnbmlmaWNhbnRseSBhbHRlcnMgZGF0YSBzdHJ1Y3R1cmUgbGF5b3V0IGFuZCB0aGUgdGhyZXNob2xkL292ZXJsb2FkIHN0YXRlIGxvZ2ljLCBpbXBhY3RpbmcgSVBWUyBjb25uZWN0aW9uIHRyYWNraW5nLCBjb250cm9sIHBsYW5lIGRlc3RpbmF0aW9uIHVwZGF0aW5nLCBhbmQgc2NoZWR1bGluZyBhbGdvcml0aG1zLiBUaGVyZWZvcmUsIHRoZSByZWFzb25pbmcgZm9yIGBzZXQtcmVzdWx0c2Agd2lsbCBjbGVhcmx5IGV4cGxhaW4gdGhpcyBmYWN0LCBzcGVjaWZ5IHRoZSBmb2N1cyBzeW1ib2xzLCBhbmQgaW5jbHVkZSB0aGUgZW5hYmxlIGNvbmZpZ3VyYXRpb25zLiBUaGlzIGNvdmVycyBldmVyeXRoaW5nLiBMZXQmIzM5O3MgcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQmIzM0OywKICAgICYjMzQ7aXBfdnNfYmluZF9kZXN0JiMzNDssCiAgICAmIzM0O2lwX3ZzX3VuYmluZF9kZXN0JiMzNDssCiAgICAmIzM0O19faXBfdnNfdXBkYXRlX2Rlc3QmIzM0OywKICAgICYjMzQ7aXBfdnNfZWRpdF9kZXN0JiMzNDssCiAgICAmIzM0O2lwX3ZzX2FkZF9kZXN0JiMzNDssCiAgICAmIzM0O2lwX3ZzX3JyX3NjaGVkdWxlJiMzNDssCiAgICAmIzM0O2lwX3ZzX3dycl9zY2hlZHVsZSYjMzQ7LAogICAgJiMzNDtpcF92c193bGNfc2NoZWR1bGUmIzM0OywKICAgICYjMzQ7aXBfdnNfbGNfc2NoZWR1bGUmIzM0OywKICAgICYjMzQ7aXBfdnNfZm9fc2NoZWR1bGUmIzM0OywKICAgICYjMzQ7aXBfdnNfb3ZmX3NjaGVkdWxlJiMzNDssCiAgICAmIzM0O2lwX3ZzX3R3b3Nfc2NoZWR1bGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGRlc3RpbmF0aW9uIG92ZXJsb2FkIHRyYWNraW5nIGxvZ2ljIGFuZCBkZXN0aW5hdGlvbiBzdHJ1Y3R1cmUgbGF5b3V0IGluIHRoZSBJUFZTIChJUCBWaXJ0dWFsIFNlcnZlcikgc3Vic3lzdGVtLiBJdCB1cGRhdGVzIGNvbm5lY3Rpb24gYmluZGluZyBhbmQgdW5iaW5kaW5nIHRocmVzaG9sZHMsIGNvbnRyb2wgcGxhbmUgZGVzdGluYXRpb24gdXBkYXRlcywgYW5kIHNjaGVkdWxlciBvdmVybG9hZCBldmFsdWF0aW9uIGFjcm9zcyBJUFZTIGFsZ29yaXRobXMuIFRoZXNlIGFyZSByZWFjaGFibGUsIGV4ZWN1dGFibGUgbmV0d29yayBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgZm9yIHJhY2UgY29uZGl0aW9ucywgYXJpdGhtZXRpYyBvciBzdGF0ZSBoYW5kbGluZyBidWdzLCBhbmQgdGhyZXNob2xkIGVkZ2UgY2FzZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQmIzM0OywKICAgICYjMzQ7aXBfdnNfYmluZF9kZXN0JiMzNDssCiAgICAmIzM0O2lwX3ZzX3VuYmluZF9kZXN0JiMzNDssCiAgICAmIzM0O19faXBfdnNfdXBkYXRlX2Rlc3QmIzM0OywKICAgICYjMzQ7aXBfdnNfZWRpdF9kZXN0JiMzNDssCiAgICAmIzM0O2lwX3ZzX2FkZF9kZXN0JiMzNDssCiAgICAmIzM0O2lwX3ZzX3JyX3NjaGVkdWxlJiMzNDssCiAgICAmIzM0O2lwX3ZzX3dycl9zY2hlZHVsZSYjMzQ7LAogICAgJiMzNDtpcF92c193bGNfc2NoZWR1bGUmIzM0OywKICAgICYjMzQ7aXBfdnNfbGNfc2NoZWR1bGUmIzM0OywKICAgICYjMzQ7aXBfdnNfZm9fc2NoZWR1bGUmIzM0OywKICAgICYjMzQ7aXBfdnNfb3ZmX3NjaGVkdWxlJiMzNDssCiAgICAmIzM0O2lwX3ZzX3R3b3Nfc2NoZWR1bGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGRlc3RpbmF0aW9uIG92ZXJsb2FkIHRyYWNraW5nIGxvZ2ljIGFuZCBkZXN0aW5hdGlvbiBzdHJ1Y3R1cmUgbGF5b3V0IGluIHRoZSBJUFZTIChJUCBWaXJ0dWFsIFNlcnZlcikgc3Vic3lzdGVtLiBJdCB1cGRhdGVzIGNvbm5lY3Rpb24gYmluZGluZyBhbmQgdW5iaW5kaW5nIHRocmVzaG9sZHMsIGNvbnRyb2wgcGxhbmUgZGVzdGluYXRpb24gdXBkYXRlcywgYW5kIHNjaGVkdWxlciBvdmVybG9hZCBldmFsdWF0aW9uIGFjcm9zcyBJUFZTIGFsZ29yaXRobXMuIFRoZXNlIGFyZSByZWFjaGFibGUsIGV4ZWN1dGFibGUgbmV0d29yayBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgZm9yIHJhY2UgY29uZGl0aW9ucywgYXJpdGhtZXRpYyBvciBzdGF0ZSBoYW5kbGluZyBidWdzLCBhbmQgdGhyZXNob2xkIGVkZ2UgY2FzZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjExPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW9yZ2FuaXplcyBmaWVsZHMgaW4gYHN0cnVjdCBpcF92c19kZXN0YCBmb3IgYmV0dGVyIGNhY2hlbGluZSB1dGlsaXphdGlvbiBhbmQgcmVmYWN0b3JzIHRoZSBkZXN0aW5hdGlvbiBvdmVybG9hZCBzdGF0dXMgdHJhY2tpbmcgdG8gdXNlIGBsX3RocmVzaG9sZF92YWxgIC8gYHVfdGhyZXNob2xkX3ZhbGAgaW5zdGVhZCBvZiBgZGVzdC1cdTAwM2VmbGFnc2Agd2l0aCBgSVBfVlNfREVTVF9GX09WRVJMT0FEYC5cblxuQWxsIGBzdHJ1Y3QgaXBfdnNfZGVzdGAgaW5zdGFuY2VzIGFyZSB6ZXJvLWFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iaigpYCBhbmQgdGhlaXIgdGhyZXNob2xkIGZpZWxkcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdXBvbiBjcmVhdGlvbi4gVGhlIHN0cnVjdHVyZSBpdHNlbGYgaXMgbm90IGNvcGllZCB0byB1c2Vyc3BhY2UgYXMgYSByYXcgYmxvYjsgdXNlcnNwYWNlIHF1ZXJpZXMgc2VyaWFsaXplIGluZGl2aWR1YWwgZmllbGRzIG9yIHVzZSB6ZXJvZWQgaW50ZXJtZWRpYXRlIHN0cnVjdHVyZXMgKGBtZW1zZXRgIGluIGBfX2lwX3ZzX2dldF9kZXN0X2VudHJpZXNgIGFuZCBpbmRpdmlkdWFsIE5ldGxpbmsgYXR0cmlidXRlcyBpbiBgaXBfdnNfZ2VubF9maWxsX2Rlc3RgKS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgYnJhbmNoZWQgdXBvbi5cblxuQmVjYXVzZSB0aGUgY2hhbmdlcyBpbnRyb2R1Y2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhMDI5YzE4NTM5ZTJiZDQzOTNiYjg3MzZkZjAwMDNlNDIyY2I3YzliCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAyMjoxMDoxNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX3ZzLmggYi9pbmNsdWRlL25ldC9pcF92cy5oCmluZGV4IDMyZmRlNzMxYmNlYjcuLjlhODNiZmYzMjU2OWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwX3ZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvaXBfdnMuaApAQCAtMzYsOSAmIzQzOzM2LDYgQEAKICNkZWZpbmUgSVBfVlNfSERSX0lOVkVSU0UJMQogI2RlZmluZSBJUF9WU19IRFJfSUNNUAkJMgogCi0vKiBEZXN0aW5hdGlvbiBTZXJ2ZXIgRmxhZ3MgKi8KLSNkZWZpbmUgSVBfVlNfREVTVF9GX09WRVJMT0FECTB4MDAwMgkJLyogc2VydmVyIGlzIG92ZXJsb2FkZWQgKi8KLQogLyogRGVzdGluYXRpb24gU2VydmVyIENvbmZpZyBGbGFncyAqLwogI2RlZmluZSBJUF9WU19ERVNUX0NGX0FWQUlMQUJMRQkweDAwMDEJCS8qIHNlcnZlciBpcyBhdmFpbGFibGUgKi8KIApAQCAtOTczLDMyICYjNDM7OTcwLDQzIEBAIHN0cnVjdCBpcF92c19kZXN0X2RzdCB7CiAgKiBhbmQgc28gb24uCiAgKi8KIHN0cnVjdCBpcF92c19kZXN0IHsKJiM0MzsJLyogQ2FjaGVsaW5lIGZvciBoYXNoIHRhYmxlIG5vZGVzIC0gcmVhZC1tb3N0bHkgKi8KJiM0MzsKIAlzdHJ1Y3QgbGlzdF9oZWFkCW5fbGlzdDsgICAvKiBmb3IgdGhlIGRlc3RzIGluIHRoZSBzZXJ2aWNlICovCiAJc3RydWN0IGhsaXN0X25vZGUJZF9saXN0OyAgIC8qIGZvciB0YWJsZSB3aXRoIGFsbCB0aGUgZGVzdHMgKi8KIAotCXUxNgkJCWFmOwkJLyogYWRkcmVzcyBmYW1pbHkgKi8KLQlfX2JlMTYJCQlwb3J0OwkJLyogcG9ydCBudW1iZXIgb2YgdGhlIHNlcnZlciAqLwotCXVuaW9uIG5mX2luZXRfYWRkcglhZGRyOwkJLyogSVAgYWRkcmVzcyBvZiB0aGUgc2VydmVyICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgaW50CWZsYWdzOwkJLyogZGVzdCBzdGF0dXMgZmxhZ3MgKi8KLQlhdG9taWNfdAkJY29ubl9mbGFnczsJLyogZmxhZ3MgdG8gY29weSB0byBjb25uICovCiAJYXRvbWljX3QJCXdlaWdodDsJCS8qIHNlcnZlciB3ZWlnaHQgKi8KLQl1bnNpZ25lZCBsb25nCQljZmxhZ3M7CQkvKiBjb25maWcgZmxhZ3MgKi8KIAlhdG9taWNfdAkJbGFzdF93ZWlnaHQ7CS8qIHNlcnZlciBsYXRlc3Qgd2VpZ2h0ICovCiYjNDM7CiYjNDM7CS8qIGNvbm5lY3Rpb24gdGhyZXNob2xkcyAqLwomIzQzOwl1MzIJCQlsX3RocmVzaG9sZF92YWw7LyogdXNlZCBsb3dlciB0aHJlc2hvbGQgKi8KJiM0MzsJdTMyCQkJdV90aHJlc2hvbGRfdmFsOy8qIHVzZWQgdXBwZXIgdGhyZXNob2xkICovCiYjNDM7CS8qIDMyLzQ4ICovCiYjNDM7CXUzMgkJCWxfdGhyZXNob2xkOwkvKiBsb3dlciB0aHJlc2hvbGQgKi8KJiM0MzsJdTMyCQkJdV90aHJlc2hvbGQ7CS8qIHVwcGVyIHRocmVzaG9sZCAqLwomIzQzOwomIzQzOwl1bnNpZ25lZCBsb25nCQljZmxhZ3M7CQkvKiBjb25maWcgZmxhZ3MgKi8KJiM0MzsKJiM0MzsJLyogNDQvNjQgKi8KJiM0MzsJYXRvbWljX3QJCWNvbm5fZmxhZ3M7CS8qIGZsYWdzIHRvIGNvcHkgdG8gY29ubiAqLwomIzQzOwogCV9fdTE2CQkJdHVuX3R5cGU7CS8qIHR1bm5lbCB0eXBlICovCiAJX19iZTE2CQkJdHVuX3BvcnQ7CS8qIHR1bm5lbCBwb3J0ICovCiAJX191MTYJCQl0dW5fZmxhZ3M7CS8qIHR1bm5lbCBmbGFncyAqLwogCi0JcmVmY291bnRfdAkJcmVmY250OwkJLyogcmVmZXJlbmNlIGNvdW50ZXIgKi8KLQlzdHJ1Y3QgaXBfdnNfc3RhdHMgICAgICBzdGF0czsgICAgICAgICAgLyogc3RhdGlzdGljcyAqLwotCXVuc2lnbmVkIGxvbmcJCWlkbGVfc3RhcnQ7CS8qIHN0YXJ0IHRpbWUsIGppZmZpZXMgKi8KJiM0MzsJdTE2CQkJYWY7CQkvKiBhZGRyZXNzIGZhbWlseSAqLwomIzQzOwlfX2JlMTYJCQlwb3J0OwkJLyogcG9ydCBudW1iZXIgb2YgdGhlIHNlcnZlciAqLwomIzQzOwkvKiA2MC84MCAqLwomIzQzOwl1bmlvbiBuZl9pbmV0X2FkZHIJYWRkcjsJCS8qIElQIGFkZHJlc3Mgb2YgdGhlIHNlcnZlciAqLwogCi0JLyogY29ubmVjdGlvbiBjb3VudGVycyBhbmQgdGhyZXNob2xkcyAqLwotCWF0b21pY190CQlhY3RpdmVjb25uczsJLyogYWN0aXZlIGNvbm5lY3Rpb25zICovCiYjNDM7CS8qIGNvbm5lY3Rpb24gY291bnRlcnMgKi8KIAlhdG9taWNfdAkJdG90YWxjb25uczsJLyogdG90YWwgY29ubmVjdGlvbnMgKi8KJiM0MzsJYXRvbWljX3QJCWFjdGl2ZWNvbm5zOwkvKiBhY3RpdmUgY29ubmVjdGlvbnMgKi8KIAlhdG9taWNfdAkJcGVyc2lzdGNvbm5zOwkvKiBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zICovCi0JX191MzIJCQl1X3RocmVzaG9sZDsJLyogdXBwZXIgdGhyZXNob2xkICovCi0JX191MzIJCQlsX3RocmVzaG9sZDsJLyogbG93ZXIgdGhyZXNob2xkICovCi0JX191MzIJCQlsX3RocmVzaG9sZF92YWw7LyogdXNlZCBsb3dlciB0aHJlc2hvbGQgKi8KJiM0MzsKJiM0MzsJcmVmY291bnRfdAkJcmVmY250OwkJLyogcmVmZXJlbmNlIGNvdW50ZXIgKi8KJiM0MzsJc3RydWN0IGlwX3ZzX3N0YXRzICAgICAgc3RhdHM7ICAgICAgICAgIC8qIHN0YXRpc3RpY3MgKi8KJiM0MzsJdW5zaWduZWQgbG9uZwkJaWRsZV9zdGFydDsJLyogc3RhcnQgdGltZSwgamlmZmllcyAqLwogCiAJLyogZm9yIGRlc3RpbmF0aW9uIGNhY2hlICovCiAJc3BpbmxvY2tfdAkJZHN0X2xvY2s7CS8qIGxvY2sgb2YgZHN0X2NhY2hlICovCkBAIC0xOTE1LDcgJiM0MzsxOTIzLDEzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c19kZXN0X3B1dF9hbmRfZnJlZShzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCkKIAkJa2ZyZWUoZGVzdCk7CiB9CiAKLXZvaWQgaXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QsIGludCBtb2RlKTsKJiM0Mzt2b2lkIGlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKHN0cnVjdCBpcF92c19kZXN0ICpkZXN0LCBib29sIG92ZXJsb2FkKTsKJiM0MzsKJiM0MzsvKiBDaGVjayBpZiBkZXN0IGlzIGluIG92ZXJsb2FkZWQgc3RhdGUgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGNvbnN0IHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KQomIzQzO3sKJiM0MzsJcmV0dXJuIFJFQURfT05DRShkZXN0LSZndDtsX3RocmVzaG9sZF92YWwpOwomIzQzO30KIAogLyogSVBWUyBzeW5jIGRhZW1vbiBkYXRhIGFuZCBmdW5jdGlvbiBwcm90b3R5cGVzCiAgKiAoZnJvbSBpcF92c19zeW5jLmMpCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYwppbmRleCA2ZmEzZTFkYzUzNGMzLi41MzQ4YzJmNDliNjRlIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMKQEAgLTExNTAsOCAmIzQzOzExNTAsOCBAQCBpcF92c19iaW5kX2Rlc3Qoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCkKIAkJaWYgKCEoZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX0lOQUNUSVZFKSkKIAkJCWF0b21pY19pbmMoJmFtcDtkZXN0LSZndDthY3RpdmVjb25ucyk7CiAJCXRjID0gYXRvbWljX2luY19yZXR1cm4oJmFtcDtkZXN0LSZndDt0b3RhbGNvbm5zKTsKLQkJaWYgKHRjID09IFJFQURfT05DRShkZXN0LSZndDt1X3RocmVzaG9sZCkpCi0JCQlpcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChkZXN0LCAxKTsKJiM0MzsJCWlmICh0YyAmZ3Q7PSBSRUFEX09OQ0UoZGVzdC0mZ3Q7dV90aHJlc2hvbGRfdmFsKSkKJiM0MzsJCQlpcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChkZXN0LCB0cnVlKTsKIAl9IGVsc2UgewogCQkvKiBJdCBpcyBhIHBlcnNpc3RlbnQgY29ubmVjdGlvbi90ZW1wbGF0ZSwgc28gaW5jcmVhc2UKIAkJICAgdGhlIHBlcnNpc3RlbnQgY29ubmVjdGlvbiBjb3VudGVyICovCkBAIC0xMjQzLDggJiM0MzsxMjQzLDggQEAgc3RhdGljIGlubGluZSB2b2lkIGlwX3ZzX3VuYmluZF9kZXN0KHN0cnVjdCBpcF92c19jb25uICpjcCkKIAkJaWYgKCEoY3AtJmd0O2ZsYWdzICZhbXA7IElQX1ZTX0NPTk5fRl9JTkFDVElWRSkpCiAJCQlhdG9taWNfZGVjKCZhbXA7ZGVzdC0mZ3Q7YWN0aXZlY29ubnMpOwogCQl0YyA9IGF0b21pY19mZXRjaF9kZWMoJmFtcDtkZXN0LSZndDt0b3RhbGNvbm5zKTsKLQkJaWYgKHRjID09IFJFQURfT05DRShkZXN0LSZndDtsX3RocmVzaG9sZF92YWwpKQotCQkJaXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoZGVzdCwgLTEpOwomIzQzOwkJaWYgKHRjICZsdDs9IFJFQURfT05DRShkZXN0LSZndDtsX3RocmVzaG9sZF92YWwpKQomIzQzOwkJCWlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKGRlc3QsIGZhbHNlKTsKIAl9IGVsc2UgewogCQkvKiBJdCBpcyBhIHBlcnNpc3RlbnQgY29ubmVjdGlvbi90ZW1wbGF0ZSwgc28gZGVjcmVhc2UKIAkJICAgdGhlIHBlcnNpc3RlbnQgY29ubmVjdGlvbiBjb3VudGVyICovCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMKaW5kZXggNGMxYzczOTQ0NmI3Ni4uMzAwMzU0N2RjYWJlNSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYwpAQCAtMTMwOSwzMiAmIzQzOzEzMDksMzIgQEAgdm9pZCBpcF92c19zdGF0c19mcmVlKHN0cnVjdCBpcF92c19zdGF0cyAqc3RhdHMpCiAgKiAtIGNvbm5zIHJlYWNoIHVfdGhyZXNob2xkIGFuZCBleGNlZWQgaXQ6IHNldCB0aGUgZmxhZwogICogLSBjb25ucyBnbyBiZWxvdyBsX3RocmVzaG9sZCAob3IgNzUlIG9mIHVfdGhyZXNob2xkKTogY2xlYXIgdGhlIGZsYWcKICAqLwotc3RhdGljIHZvaWQgX19pcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCwgaW50IG1vZGUpCiYjNDM7c3RhdGljIHZvaWQgX19pcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCwgYm9vbCBvdmVybG9hZCkKIHsKIAlpbnQgY29ubnM7CiAJdTMyIGwsIHU7CiAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7ZGVzdC0mZ3Q7ZHN0X2xvY2spOwogCXUgPSBSRUFEX09OQ0UoZGVzdC0mZ3Q7dV90aHJlc2hvbGQpOwotCWlmICghdSkKLQkJZ290byB1bnNldDsKLQlsID0gUkVBRF9PTkNFKGRlc3QtJmd0O2xfdGhyZXNob2xkX3ZhbCk7Ci0JY29ubnMgPSBhdG9taWNfcmVhZCgmYW1wO2Rlc3QtJmd0O3RvdGFsY29ubnMpOwotCWlmIChjb25ucyAmZ3Q7PSAobW9kZSAmZ3Q7IDAgPyBsIDogdSkpIHsKLQkJZGVzdC0mZ3Q7ZmxhZ3MgfD0gSVBfVlNfREVTVF9GX09WRVJMT0FEOwotCQlyZXR1cm47CiYjNDM7CWlmICh1KSB7CiYjNDM7CQkvKiBMb3cgdGhyZXNob2xkIGRlZmF1bHRzIHRvIDc1JSBvZiB1cHBlciB0aHJlc2hvbGQgKi8KJiM0MzsJCWwgPSBSRUFEX09OQ0UoZGVzdC0mZ3Q7bF90aHJlc2hvbGQpID8gOiAodSAtICh1ICZndDsmZ3Q7IDIpKTsKJiM0MzsJCWNvbm5zID0gYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt0b3RhbGNvbm5zKTsKJiM0MzsJCWlmIChjb25ucyAmZ3Q7PSAob3ZlcmxvYWQgPyBsIDogdSkpIHsKJiM0MzsJCQlXUklURV9PTkNFKGRlc3QtJmd0O3VfdGhyZXNob2xkX3ZhbCwgSU5UX01BWCk7CiYjNDM7CQkJV1JJVEVfT05DRShkZXN0LSZndDtsX3RocmVzaG9sZF92YWwsIGwpOwomIzQzOwkJCXJldHVybjsKJiM0MzsJCX0KIAl9Ci0JaWYgKGNvbm5zICZndDs9IChtb2RlICZsdDsgMCA/IHUgOiBsKSkKLQkJcmV0dXJuOwogCi11bnNldDoKLQlkZXN0LSZndDtmbGFncyAmYW1wOz0gfklQX1ZTX0RFU1RfRl9PVkVSTE9BRDsKJiM0MzsJV1JJVEVfT05DRShkZXN0LSZndDt1X3RocmVzaG9sZF92YWwsIHUgPyA6IElOVF9NQVgpOwomIzQzOwlXUklURV9PTkNFKGRlc3QtJmd0O2xfdGhyZXNob2xkX3ZhbCwgMCk7CiB9CiAKLXZvaWQgaXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QsIGludCBtb2RlKQomIzQzO3ZvaWQgaXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QsIGJvb2wgb3ZlcmxvYWQpCiB7CiAJc3Bpbl9sb2NrX2JoKCZhbXA7ZGVzdC0mZ3Q7ZHN0X2xvY2spOwotCV9faXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoZGVzdCwgbW9kZSk7CiYjNDM7CV9faXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoZGVzdCwgb3ZlcmxvYWQpOwogCXNwaW5fdW5sb2NrX2JoKCZhbXA7ZGVzdC0mZ3Q7ZHN0X2xvY2spOwogfQogCkBAIC0xNDA2LDE1ICYjNDM7MTQwNiwxMyBAQCBfX2lwX3ZzX3VwZGF0ZV9kZXN0KHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIHN0cnVjdCBpcF92c19kZXN0ICpkZXN0LAogCiAJaWYgKFJFQURfT05DRShkZXN0LSZndDt1X3RocmVzaG9sZCkgIT0gdWRlc3QtJmd0O3VfdGhyZXNob2xkIHx8CiAJICAgIFJFQURfT05DRShkZXN0LSZndDtsX3RocmVzaG9sZCkgIT0gdWRlc3QtJmd0O2xfdGhyZXNob2xkKSB7CiYjNDM7CQlib29sIG92ZXJsb2FkOwomIzQzOwogCQlzcGluX2xvY2tfYmgoJmFtcDtkZXN0LSZndDtkc3RfbG9jayk7CiAJCVdSSVRFX09OQ0UoZGVzdC0mZ3Q7dV90aHJlc2hvbGQsIHVkZXN0LSZndDt1X3RocmVzaG9sZCk7CiAJCVdSSVRFX09OQ0UoZGVzdC0mZ3Q7bF90aHJlc2hvbGQsIHVkZXN0LSZndDtsX3RocmVzaG9sZCk7Ci0JCS8qIExvdyB0aHJlc2hvbGQgZGVmYXVsdHMgdG8gNzUlIG9mIHVwcGVyIHRocmVzaG9sZCAqLwotCQlXUklURV9PTkNFKGRlc3QtJmd0O2xfdGhyZXNob2xkX3ZhbCwKLQkJCSAgIHVkZXN0LSZndDtsX3RocmVzaG9sZCA/IDoKLQkJCSAgICh1ZGVzdC0mZ3Q7dV90aHJlc2hvbGQgLQotCQkJICAgICh1ZGVzdC0mZ3Q7dV90aHJlc2hvbGQgJmd0OyZndDsgMikpKTsKLQkJX19pcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChkZXN0LCAwKTsKJiM0MzsJCW92ZXJsb2FkID0gaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpOwomIzQzOwkJX19pcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChkZXN0LCBvdmVybG9hZCk7CiAJCXNwaW5fdW5sb2NrX2JoKCZhbXA7ZGVzdC0mZ3Q7ZHN0X2xvY2spOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2RoLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZGguYwppbmRleCA0M2FiZWQ3YTI2YTZhLi45NWU1Mjk1MGFkYmI3IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZGguYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZGguYwpAQCAtMTk1LDE2ICYjNDM7MTk1LDYgQEAgc3RhdGljIGludCBpcF92c19kaF9kZXN0X2NoYW5nZWQoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywKIH0KIAogCi0vKgotICogICAgICBJZiB0aGUgZGVzdCBmbGFncyBpcyBzZXQgd2l0aCBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQsCi0gKiAgICAgIGNvbnNpZGVyIHRoYXQgdGhlIHNlcnZlciBpcyBvdmVybG9hZGVkIGhlcmUuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGlzX292ZXJsb2FkZWQoc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QpCi17Ci0JcmV0dXJuIGRlc3QtJmd0O2ZsYWdzICZhbXA7IElQX1ZTX0RFU1RfRl9PVkVSTE9BRDsKLX0KLQotCiAvKgogICogICAgICBEZXN0aW5hdGlvbiBoYXNoaW5nIHNjaGVkdWxpbmcKICAqLwpAQCAtMjE5LDEwICYjNDM7MjA5LDggQEAgaXBfdnNfZGhfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAogCXMgPSAoc3RydWN0IGlwX3ZzX2RoX3N0YXRlICopIHN2Yy0mZ3Q7c2NoZWRfZGF0YTsKIAlkZXN0ID0gaXBfdnNfZGhfZ2V0KHN2Yy0mZ3Q7YWYsIHMsICZhbXA7aXBoLSZndDtkYWRkcik7Ci0JaWYgKCFkZXN0IHx8Ci0JICAgICEoZGVzdC0mZ3Q7Y2ZsYWdzICZhbXA7IElQX1ZTX0RFU1RfQ0ZfQVZBSUxBQkxFKQotCSAgICB8fCBhdG9taWNfcmVhZCgmYW1wO2Rlc3QtJmd0O3dlaWdodCkgJmx0Oz0gMAotCSAgICB8fCBpc19vdmVybG9hZGVkKGRlc3QpKSB7CiYjNDM7CWlmICghZGVzdCB8fCBhdG9taWNfcmVhZCgmYW1wO2Rlc3QtJmd0O3dlaWdodCkgJmx0Oz0gMCB8fAomIzQzOwkgICAgaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpKSB7CiAJCWlwX3ZzX3NjaGVkdWxlcl9lcnIoc3ZjLCAmIzM0O25vIGRlc3RpbmF0aW9uIGF2YWlsYWJsZSYjMzQ7KTsKIAkJcmV0dXJuIE5VTEw7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2ZvLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZm8uYwppbmRleCBkNjU3YjQ3YzY1MTFmLi5lMDdmYTMzZjZkNTI3IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZm8uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZm8uYwpAQCAtMjksNyAmIzQzOzI5LDcgQEAgaXBfdnNfZm9fc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkgKiBGaW5kIHZpcnR1YWwgc2VydmVyIHdpdGggaGlnaGVzdCB3ZWlnaHQgYW5kIHNlbmQgaXQgdHJhZmZpYwogCSAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsICZhbXA7c3ZjLSZndDtkZXN0aW5hdGlvbnMsIG5fbGlzdCkgewotCQlpZiAoIShkZXN0LSZndDtmbGFncyAmYW1wOyBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpICZhbXA7JmFtcDsKJiM0MzsJCWlmICghaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpICZhbXA7JmFtcDsKIAkJICAgIGF0b21pY19yZWFkKCZhbXA7ZGVzdC0mZ3Q7d2VpZ2h0KSAmZ3Q7IGh3KSB7CiAJCQlod2VpZ2h0ID0gZGVzdDsKIAkJCWh3ID0gYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt3ZWlnaHQpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGMuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjLmMKaW5kZXggNjkzYmNjODJjY2I3Ny4uYmZmMTA5YzFjOTU5YiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsYy5jCkBAIC00MTQsNyAmIzQzOzQxNCw3IEBAIF9faXBfdnNfbGJsY19zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjKQogCSAqIG5ldyBjb25uZWN0aW9uLgogCSAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsICZhbXA7c3ZjLSZndDtkZXN0aW5hdGlvbnMsIG5fbGlzdCkgewotCQlpZiAoZGVzdC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfREVTVF9GX09WRVJMT0FEKQomIzQzOwkJaWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt3ZWlnaHQpICZndDsgMCkgewogCQkJbGVhc3QgPSBkZXN0OwpAQCAtNDI5LDcgJiM0Mzs0MjksNyBAQCBfX2lwX3ZzX2xibGNfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YykKIAkgKi8KICAgbmV4dHN0YWdlOgogCWxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmN1KGRlc3QsICZhbXA7c3ZjLSZndDtkZXN0aW5hdGlvbnMsIG5fbGlzdCkgewotCQlpZiAoZGVzdC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfREVTVF9GX09WRVJMT0FEKQomIzQzOwkJaWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSkKIAkJCWNvbnRpbnVlOwogCiAJCWRvaCA9IGlwX3ZzX2Rlc3RfY29ubl9vdmVyaGVhZChkZXN0KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjci5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGNyLmMKaW5kZXggZjUzZjA1Y2VlYTM2Zi4uYzI4NTNlMDdlNzg3MiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGNyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGNyLmMKQEAgLTE2Niw3ICYjNDM7MTY2LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaXBfdnNfZGVzdCAqaXBfdnNfZGVzdF9zZXRfbWluKHN0cnVjdCBpcF92c19kZXN0X3NldCAqc2V0KQogCS8qIHNlbGVjdCB0aGUgZmlyc3QgZGVzdGluYXRpb24gc2VydmVyLCB3aG9zZSB3ZWlnaHQgJmd0OyAwICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZSwgJmFtcDtzZXQtJmd0O2xpc3QsIGxpc3QpIHsKIAkJbGVhc3QgPSBlLSZndDtkZXN0OwotCQlpZiAobGVhc3QtJmd0O2ZsYWdzICZhbXA7IElQX1ZTX0RFU1RfRl9PVkVSTE9BRCkKJiM0MzsJCWlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQobGVhc3QpKQogCQkJY29udGludWU7CiAKIAkJaWYgKChhdG9taWNfcmVhZCgmYW1wO2xlYXN0LSZndDt3ZWlnaHQpICZndDsgMCkgJmFtcDsmYW1wOwpAQCAtMTgxLDcgJiM0MzsxODEsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpcF92c19kZXN0ICppcF92c19kZXN0X3NldF9taW4oc3RydWN0IGlwX3ZzX2Rlc3Rfc2V0ICpzZXQpCiAgIG5leHRzdGFnZToKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShlLCAmYW1wO3NldC0mZ3Q7bGlzdCwgbGlzdCkgewogCQlkZXN0ID0gZS0mZ3Q7ZGVzdDsKLQkJaWYgKGRlc3QtJmd0O2ZsYWdzICZhbXA7IElQX1ZTX0RFU1RfRl9PVkVSTE9BRCkKJiM0MzsJCWlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkpCiAJCQljb250aW51ZTsKIAogCQlkb2ggPSBpcF92c19kZXN0X2Nvbm5fb3ZlcmhlYWQoZGVzdCk7CkBAIC01NzcsNyAmIzQzOzU3Nyw3IEBAIF9faXBfdnNfbGJsY3Jfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YykKIAkgKiBuZXcgY29ubmVjdGlvbi4KIAkgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkZXN0LCAmYW1wO3N2Yy0mZ3Q7ZGVzdGluYXRpb25zLCBuX2xpc3QpIHsKLQkJaWYgKGRlc3QtJmd0O2ZsYWdzICZhbXA7IElQX1ZTX0RFU1RfRl9PVkVSTE9BRCkKJiM0MzsJCWlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkpCiAJCQljb250aW51ZTsKIAogCQlpZiAoYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt3ZWlnaHQpICZndDsgMCkgewpAQCAtNTkzLDcgJiM0Mzs1OTMsNyBAQCBfX2lwX3ZzX2xibGNyX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMpCiAJICovCiAgIG5leHRzdGFnZToKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShkZXN0LCAmYW1wO3N2Yy0mZ3Q7ZGVzdGluYXRpb25zLCBuX2xpc3QpIHsKLQkJaWYgKGRlc3QtJmd0O2ZsYWdzICZhbXA7IElQX1ZTX0RFU1RfRl9PVkVSTE9BRCkKJiM0MzsJCWlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkpCiAJCQljb250aW51ZTsKIAogCQlkb2ggPSBpcF92c19kZXN0X2Nvbm5fb3ZlcmhlYWQoZGVzdCk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGMuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYy5jCmluZGV4IDE4Yjk3NmE3YzRkMjAuLjkwMDJmNDkxYmZmNjggMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYy5jCkBAIC0zOCw3ICYjNDM7MzgsNyBAQCBpcF92c19sY19zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCSAqLwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZGVzdCwgJmFtcDtzdmMtJmd0O2Rlc3RpbmF0aW9ucywgbl9saXN0KSB7Ci0JCWlmICgoZGVzdC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfREVTVF9GX09WRVJMT0FEKSB8fAomIzQzOwkJaWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSB8fAogCQkgICAgYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt3ZWlnaHQpID09IDApCiAJCQljb250aW51ZTsKIAkJZG9oID0gaXBfdnNfZGVzdF9jb25uX292ZXJoZWFkKGRlc3QpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX21oLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbWguYwppbmRleCAwMjA4NjMwNDc1NjJkLi5kNzBiMjNhZWM1ZmVjIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbWguYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbWguYwpAQCAtODAsNyAmIzQzOzgwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGdlbmVyYXRlX2hhc2hfc2VjcmV0KGhzaXBoYXNoX2tleV90ICpoYXNoMSwKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc191bmF2YWlsYWJsZShzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCkKIHsKIAlyZXR1cm4gYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt3ZWlnaHQpICZsdDs9IDAgfHwKLQkgICAgICAgZGVzdC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfREVTVF9GX09WRVJMT0FEOwomIzQzOwkgICAgICAgaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpOwogfQogCiAvKiBSZXR1cm5zIGhhc2ggdmFsdWUgZm9yIElQVlMgTUggZW50cnkgKi8KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19ucS5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX25xLmMKaW5kZXggYWRhMTU4YzYxMGNlMS4uN2NjMjg5MDIwODZlNyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX25xLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX25xLmMKQEAgLTcyLDcgJiM0Mzs3Miw3IEBAIGlwX3ZzX25xX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkZXN0LCAmYW1wO3N2Yy0mZ3Q7ZGVzdGluYXRpb25zLCBuX2xpc3QpIHsKIAotCQlpZiAoZGVzdC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfREVTVF9GX09WRVJMT0FEIHx8CiYjNDM7CQlpZiAoaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpIHx8CiAJCSAgICAhYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt3ZWlnaHQpKQogCQkJY29udGludWU7CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19vdmYuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19vdmYuYwppbmRleCBjNWM2N2RmODBhMGIzLi5lYWEzYTdhZTZlZmE2IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfb3ZmLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX292Zi5jCkBAIC0zMyw3ICYjNDM7MzMsNyBAQCBpcF92c19vdmZfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsICZhbXA7c3ZjLSZndDtkZXN0aW5hdGlvbnMsIG5fbGlzdCkgewogCQl3ID0gYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt3ZWlnaHQpOwotCQlpZiAoKGRlc3QtJmd0O2ZsYWdzICZhbXA7IElQX1ZTX0RFU1RfRl9PVkVSTE9BRCkgfHwKJiM0MzsJCWlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkgfHwKIAkJICAgIGF0b21pY19yZWFkKCZhbXA7ZGVzdC0mZ3Q7YWN0aXZlY29ubnMpICZndDsgdyB8fAogCQkgICAgdyA9PSAwKQogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcnIuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19yci5jCmluZGV4IDQxMjVlZTU2MWNkYzMuLmJkMTdjZGQwOTJmNWYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19yci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19yci5jCkBAIC02Niw3ICYjNDM7NjYsNyBAQCBpcF92c19ycl9zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShkZXN0LAogCQkJCQkJICZhbXA7c3ZjLSZndDtkZXN0aW5hdGlvbnMsCiAJCQkJCQkgbl9saXN0KSB7Ci0JCQlpZiAoIShkZXN0LSZndDtmbGFncyAmYW1wOyBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpICZhbXA7JmFtcDsKJiM0MzsJCQlpZiAoIWlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSAmYW1wOyZhbXA7CiAJCQkgICAgYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt3ZWlnaHQpICZndDsgMCkKIAkJCQkvKiBISVQgKi8KIAkJCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zZWQuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zZWQuYwppbmRleCAyNDVhMzIzYzg0Y2QzLi43OTI1ZjRkMjhmY2U5IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2VkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NlZC5jCkBAIC03NSw3ICYjNDM7NzUsNyBAQCBpcF92c19zZWRfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkgKi8KIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsICZhbXA7c3ZjLSZndDtkZXN0aW5hdGlvbnMsIG5fbGlzdCkgewotCQlpZiAoIShkZXN0LSZndDtmbGFncyAmYW1wOyBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpICZhbXA7JmFtcDsKJiM0MzsJCWlmICghaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpICZhbXA7JmFtcDsKIAkJICAgIGF0b21pY19yZWFkKCZhbXA7ZGVzdC0mZ3Q7d2VpZ2h0KSAmZ3Q7IDApIHsKIAkJCWxlYXN0ID0gZGVzdDsKIAkJCWxvaCA9IGlwX3ZzX3NlZF9kZXN0X292ZXJoZWFkKGxlYXN0KTsKQEAgLTkwLDcgJiM0Mzs5MCw3IEBAIGlwX3ZzX3NlZF9zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCSAqLwogICBuZXh0c3RhZ2U6CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yY3UoZGVzdCwgJmFtcDtzdmMtJmd0O2Rlc3RpbmF0aW9ucywgbl9saXN0KSB7Ci0JCWlmIChkZXN0LSZndDtmbGFncyAmYW1wOyBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpCiYjNDM7CQlpZiAoaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpKQogCQkJY29udGludWU7CiAJCWRvaCA9IGlwX3ZzX3NlZF9kZXN0X292ZXJoZWFkKGRlc3QpOwogCQlpZiAoKF9fczY0KWxvaCAqIGF0b21pY19yZWFkKCZhbXA7ZGVzdC0mZ3Q7d2VpZ2h0KSAmZ3Q7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2guYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zaC5jCmluZGV4IGNkNjcwNjZlM2IyNjEuLmMyNGRkNWNiN2U0NzggMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zaC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zaC5jCkBAIC03Myw3ICYjNDM7NzMsNyBAQCBzdHJ1Y3QgaXBfdnNfc2hfc3RhdGUgewogc3RhdGljIGlubGluZSBib29sIGlzX3VuYXZhaWxhYmxlKHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KQogewogCXJldHVybiBhdG9taWNfcmVhZCgmYW1wO2Rlc3QtJmd0O3dlaWdodCkgJmx0Oz0gMCB8fAotCSAgICAgICBkZXN0LSZndDtmbGFncyAmYW1wOyBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQ7CiYjNDM7CSAgICAgICBpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfdHdvcy5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3R3b3MuYwppbmRleCBkYmI3ZjVmZDQ2ODhhLi44NjE4NjEyMmExZjAxIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfdHdvcy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c190d29zLmMKQEAgLTUyLDcgJiM0Mzs1Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgaXBfdnNfZGVzdCAqaXBfdnNfdHdvc19zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLAogCiAJLyogR2VuZXJhdGUgYSByYW5kb20gd2VpZ2h0IGJldHdlZW4gWzAsc3VtIG9mIGFsbCB3ZWlnaHRzKSAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsICZhbXA7c3ZjLSZndDtkZXN0aW5hdGlvbnMsIG5fbGlzdCkgewotCQlpZiAoIShkZXN0LSZndDtmbGFncyAmYW1wOyBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpKSB7CiYjNDM7CQlpZiAoIWlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSkgewogCQkJd2VpZ2h0ID0gYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt3ZWlnaHQpOwogCQkJaWYgKHdlaWdodCAmZ3Q7IDApIHsKIAkJCQl0b3RhbF93ZWlnaHQgJiM0Mzs9IHdlaWdodDsKQEAgLTc1LDcgJiM0Mzs3NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgaXBfdnNfZGVzdCAqaXBfdnNfdHdvc19zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLAogCiAJLyogUGljayB0d28gd2VpZ2h0ZWQgc2VydmVycyAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsICZhbXA7c3ZjLSZndDtkZXN0aW5hdGlvbnMsIG5fbGlzdCkgewotCQlpZiAoZGVzdC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfREVTVF9GX09WRVJMT0FEKQomIzQzOwkJaWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSkKIAkJCWNvbnRpbnVlOwogCiAJCXdlaWdodCA9IGF0b21pY19yZWFkKCZhbXA7ZGVzdC0mZ3Q7d2VpZ2h0KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c193bGMuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c193bGMuYwppbmRleCA5ZGE0NDVjYTA5YTE0Li4wOGU5ZTIyZjcyYmY4IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd2xjLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3dsYy5jCkBAIC00Nyw3ICYjNDM7NDcsNyBAQCBpcF92c193bGNfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkgKi8KIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsICZhbXA7c3ZjLSZndDtkZXN0aW5hdGlvbnMsIG5fbGlzdCkgewotCQlpZiAoIShkZXN0LSZndDtmbGFncyAmYW1wOyBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpICZhbXA7JmFtcDsKJiM0MzsJCWlmICghaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpICZhbXA7JmFtcDsKIAkJICAgIGF0b21pY19yZWFkKCZhbXA7ZGVzdC0mZ3Q7d2VpZ2h0KSAmZ3Q7IDApIHsKIAkJCWxlYXN0ID0gZGVzdDsKIAkJCWxvaCA9IGlwX3ZzX2Rlc3RfY29ubl9vdmVyaGVhZChsZWFzdCk7CkBAIC02Miw3ICYjNDM7NjIsNyBAQCBpcF92c193bGNfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkgKi8KICAgbmV4dHN0YWdlOgogCWxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmN1KGRlc3QsICZhbXA7c3ZjLSZndDtkZXN0aW5hdGlvbnMsIG5fbGlzdCkgewotCQlpZiAoZGVzdC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfREVTVF9GX09WRVJMT0FEKQomIzQzOwkJaWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSkKIAkJCWNvbnRpbnVlOwogCQlkb2ggPSBpcF92c19kZXN0X2Nvbm5fb3ZlcmhlYWQoZGVzdCk7CiAJCWlmICgoX19zNjQpbG9oICogYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt3ZWlnaHQpICZndDsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c193cnIuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c193cnIuYwppbmRleCAyZGNmZjEwNDBkYTUyLi5mYWQ2OWJhZTVhMjJiIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd3JyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3dyci5jCkBAIC0xNzYsNyAmIzQzOzE3Niw3IEBAIGlwX3ZzX3dycl9zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShkZXN0LAogCQkJCQkJICZhbXA7c3ZjLSZndDtkZXN0aW5hdGlvbnMsCiAJCQkJCQkgbl9saXN0KSB7Ci0JCQlpZiAoIShkZXN0LSZndDtmbGFncyAmYW1wOyBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpICZhbXA7JmFtcDsKJiM0MzsJCQlpZiAoIWlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSAmYW1wOyZhbXA7CiAJCQkgICAgYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt3ZWlnaHQpICZndDs9IG1hcmstJmd0O2N3KQogCQkJCWdvdG8gZm91bmQ7CiAJCQlpZiAoZGVzdCA9PSBzdG9wKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM1MgoJCQkJCQkJb3V0cHV0OiA2NQoJCQkJCQkJdGhvdWdodHM6IDU1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQVlMgUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgYXNzZXNzIHRoZSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlLCBzcGVjaWZpY2FsbHkgd2l0aCBhbiBleWUgdG93YXJkcyB3aGV0aGVyIGEgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIHdhcnJhbnRlZC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgYHN0cnVjdCBpcF92c19kZXN0YCBhbmQgaG93IGl0cyBmaWVsZHMgYXJlIGhhbmRsZWQsIGVzcGVjaWFsbHkgYWZ0ZXIgdGhlc2UgY2hhbmdlcy4KCkZpcnN0LCB0aGUgY29yZSBjaGFuZ2VzLiBUaGUgYCNkZWZpbmUgSVBfVlNfREVTVF9GX09WRVJMT0FEYCBpcyBnb25lLCB3aGljaCBzdWdnZXN0cyBhIHNoaWZ0IGF3YXkgZnJvbSBiaXRmaWVsZHMuIFRoZSBgc3RydWN0IGlwX3ZzX2Rlc3RgIGl0c2VsZiBoYXMgYmVlbiByZW9yZ2FuaXplZCwgcmVtb3ZpbmcgdGhlIGB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgZmxhZ3NgIGFuZCByZW9yZGVyaW5nIGZvciBjYWNoZWxpbmUgYWxpZ25tZW50IGFuZCBwYWNraW5nLiBUaGF0JiMzOTtzIGEgc3RhbmRhcmQgb3B0aW1pemF0aW9uLCBidXQgdGhlIGFkZGl0aW9uIG9mIGB1MzIgdV90aHJlc2hvbGRfdmFsYCBhbmQgdGhlIGlubGluZSBoZWxwZXIgYGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZCgpYCBhcmUga2V5LiBUaGUgb3ZlcmxvYWQgbG9naWMgc2VlbXMgdG8gYmUgbm93IGJhc2VkIGVudGlyZWx5IG9uIHRoZXNlIHRocmVzaG9sZCB2YWx1ZXMgKGBsX3RocmVzaG9sZF92YWxgIGFuZCBgdV90aHJlc2hvbGRfdmFsYCkuIFRoZSBgaXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWRgIHNpZ25hdHVyZSBjaGFuZ2VkIHRvby4gVGhpcyBpcyBhbGwgZ29vZCwgY2xlYW4gY29kZSwgYnV0IGl0IG5lZWRzIHRvIGJlIHVuZGVyc3Rvb2QuCgpMb29raW5nIGF0IHRoZSBjb2RlIHV0aWxpemluZyB0aGUgc3RydWN0dXJlLCBzcGVjaWZpY2FsbHkgYGlwX3ZzX2Nvbm4uY2AsIHdlIHNlZSB0aGUgb3ZlcmxvYWQgbG9naWMgaW4gYGlwX3ZzX2JpbmRfZGVzdGAgYW5kIGBpcF92c191bmJpbmRfZGVzdGAuIFRoZSBjb21wYXJpc29ucyBhZ2FpbnN0IGBSRUFEX09OQ0UoZGVzdC0mZ3Q7dV90aHJlc2hvbGRfdmFsKWAgYW5kIGBSRUFEX09OQ0UoZGVzdC0mZ3Q7bF90aHJlc2hvbGRfdmFsKWAgYW5kIHN1YnNlcXVlbnQgY2FsbHMgdG8gYGlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkYCBhcmUgY2xlYXIgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBuZXcgb3ZlcmxvYWQgbWVjaGFuaXNtLiBUaGUgZGVmaW5pdGlvbiBvZiB0aGUgdGhyZXNob2xkcyBhcmUgaGFuZGxlZCBpbiBgaXBfdnNfY3RsLmNgLCBhbmQgdGhlIG5ldyBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIG92ZXJsb2FkIGJ5IHJlYWRpbmcgdGhlIHJlc3BlY3RpdmUgdGhyZXNob2xkcy4KClRoZSBjcnVjaWFsIG5leHQgc3RlcCBpcyB0byB1bmRlcnN0YW5kIGhvdyBgc3RydWN0IGlwX3ZzX2Rlc3RgIGlzIGFsbG9jYXRlZCwgaW5pdGlhbGl6ZWQsIGFuZCwgbW9zdCBpbXBvcnRhbnRseSwgaWYgYW55IG9mIGl0cyBjb250ZW50cyBhcmUgZXZlciBjb3BpZWQgdG8gdXNlciBzcGFjZS4gSWYgd2UgYXJlIHBhc3NpbmcgdGhpcyBzdHJ1Y3R1cmUgaW50byB1c2VyLXNwYWNlLCBhIHNlY3VyaXR5IGJ1ZyBpcyBpbnRyb2R1Y2VkIGlmIHRoZXJlIGlzIGFueSBtZW1vcnkgbGVhayBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGlzIGlzIHdoZXJlIGBncmVwcGVyYCB3aWxsIGNvbWUgaW4gaGFuZHkuIEkmIzM5O2xsIHNlYXJjaCBmb3IgYWxsb2NhdGlvbnMgb2YgYGlwX3ZzX2Rlc3RgIGFuZCBhbnkgaW5zdGFuY2VzIHdoZXJlIGl0cyBkYXRhIGlzIGV4cG9zZWQgdmlhIGBnZXRzb2Nrb3B0YCwgbmV0bGluaywgb3IgYW55IG90aGVyIG1lYW5zIG9mIGNvbW11bmljYXRpbmcgaW5mb3JtYXRpb24gdG8gdXNlciBzcGFjZS4gTXkgYXNzdW1wdGlvbiBpcyB0aGF0IHRoZSBkYXRhIHdpbGwgYmUgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBzbyB0aGF0IGlzIHRoZSBrZXkuIFRoZW4gSSBuZWVkIHRvIGludmVzdGlnYXRlIGlmIHRoZXJlIGlzIGFueSBpbml0aWFsaXphdGlvbi4KCk15IHN1c3BpY2lvbiBpcyB0aGlzIHdpbGwgYmUgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZywgZGVwZW5kaW5nIG9uIGhvdyB0aGlzIHN0cnVjdCBpcyBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtremFsbG9jLippcF92c19kZXN0fGlwX3ZzX2Rlc3RfbmV3fGlwX3ZzX2dlbmxfZHVtcF9kZXN0fGlwX3ZzX2dlbmxfZ2V0X2Rlc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTE0NDM9aXBfdnNfbmV3X2Rlc3Qoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2Yywgc3RydWN0IGlwX3ZzX2Rlc3RfdXNlcl9rZXJuICp1ZGVzdClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMTQ2Ny1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoxNDY4Olx0ZGVzdCA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBpcF92c19kZXN0KTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xNDY5LVx0aWYgKGRlc3QgPT0gTlVMTClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9NDMwNT1zdGF0aWMgaW50IGlwX3ZzX2dlbmxfZmlsbF9kZXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00MzUzLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjQzNTQ6c3RhdGljIGludCBpcF92c19nZW5sX2R1bXBfZGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00MzU1LVx0XHRcdFx0c3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00Mzc1LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjQzNzY6c3RhdGljIGludCBpcF92c19nZW5sX2R1bXBfZGVzdHMoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00Mzc3LVx0XHRcdFx0IHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDQwMS1cdFx0XHRjb250aW51ZTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzo0NDAyOlx0XHRpZiAoaXBfdnNfZ2VubF9kdW1wX2Rlc3Qoc2tiLCBkZXN0LCBjYikgXHUwMDNjIDApIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00NDAzLVx0XHRcdGlkeC0tO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz00OTE0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgaXBfdnNfZ2VubF9vcHNbXSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDk2MS1cdFx0LmZsYWdzXHQ9IEdFTkxfQURNSU5fUEVSTSxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzo0OTYyOlx0XHQuZHVtcGl0XHQ9IGlwX3ZzX2dlbmxfZHVtcF9kZXN0cyxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00OTYzLVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExNzkKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyOgoKKipEaWdnaW5nIGludG8gdGhlIGBpcF92c19jdGwuY2AgS2VybmVsIENvZGUqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHdheSB0aGVzZSBkZXN0aW5hdGlvbiBhbmQgc29ja2V0IG9wdGlvbiBmdW5jdGlvbmFsaXRpZXMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBJUCBWaXJ0dWFsIFNlcnZlciAoSVBWUykgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBgaXBfdnNfY3RsLmNgLiBJIG5lZWQgdG8gemVybyBpbiBvbiBwb3RlbnRpYWwgYXJlYXMgd2hlcmUgZGF0YSBtaWdodCBiZSBpbmNvcnJlY3RseSBjb3BpZWQgb3IgaGFuZGxlZC4KCk15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiB0aGUgYGlwX3ZzX25ld19kZXN0YCBhbmQgYGlwX3ZzX2dlbmxfZmlsbF9kZXN0YCBmdW5jdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gbWV0aWN1bG91c2x5IGV4YW1pbmUgaG93IGRhdGEgaXMgZmV0Y2hlZCBvciBwbGFjZWQgaW4gdGhlcmUsIGJlY2F1c2UgaW5jb3JyZWN0IGNvcHlpbmcgaW4gdGhvc2UgYXJlYXMgY291bGQgbWFuaWZlc3QgaW4gc3RyYW5nZSB3YXlzLCBhbmQgdGhvc2UgZnVuY3Rpb25zIGxvb2sgbGlrZSBsaWtlbHkgcGxhY2VzLiBIb3dldmVyLCBJJiMzOTttIG5vdCBnb2luZyB0byBzdG9wIHRoZXJlLiBJIGFsc28gbmVlZCB0byBicm9hZGVuIHRoZSBzY29wZSBhbmQgYmUgc3VyZSBJIGNvdmVyIGFueSBvdGhlciBnZXRzb2Nrb3B0IGNvcHlpbmcgY29kZSB3aXRoaW4gYGlwX3ZzX2N0bC5jYCB0aGF0IGNvdWxkIGFsc28gbGVhZCB0byBpc3N1ZXMuIEl0JiMzOTtzIGJlc3QgdG8gYmUgdGhvcm91Z2ggYXQgdGhpcyBzdGFnZS4gSSYjMzk7bGwgcmV2aWV3IHRob3NlIHNlY3Rpb25zIHRvIHNlZSBpZiB0aGV5JiMzOTtyZSByZWxldmFudCwgdG9vLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQ2MDpcdFx0fSBlbHNlXG4xNDYxOlx0I2VuZGlmXG4xNDYyOlx0XHR7XG4xNDYzOlx0XHRcdGF0eXBlID0gaW5ldF9hZGRyX3R5cGUoc3ZjLVx1MDAzZWlwdnMtXHUwMDNlbmV0LCB1ZGVzdC1cdTAwM2VhZGRyLmlwKTtcbjE0NjQ6XHRcdFx0aWYgKGF0eXBlICE9IFJUTl9MT0NBTCBcdTAwMjZcdTAwMjYgYXR5cGUgIT0gUlROX1VOSUNBU1QpXG4xNDY1Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNDY2Olx0XHR9XG4xNDY3Olx0XG4xNDY4Olx0XHRkZXN0ID0ga3phbGxvY19vYmooc3RydWN0IGlwX3ZzX2Rlc3QpO1xuMTQ2OTpcdFx0aWYgKGRlc3QgPT0gTlVMTClcbjE0NzA6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xNDcxOlx0XG4xNDcyOlx0XHRyZXQgPSBpcF92c19zdGF0c19pbml0X2FsbG9jKFx1MDAyNmRlc3QtXHUwMDNlc3RhdHMpO1xuMTQ3MzpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjE0NzQ6XHRcdFx0Z290byBlcnJfYWxsb2M7XG4xNDc1Olx0XG4xNDc2Olx0XHRyZXQgPSBpcF92c19zdGFydF9lc3RpbWF0b3Ioc3ZjLVx1MDAzZWlwdnMsIFx1MDAyNmRlc3QtXHUwMDNlc3RhdHMpO1xuMTQ3NzpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjE0Nzg6XHRcdFx0Z290byBlcnJfc3RhdHM7XG4xNDc5Olx0XG4xNDgwOlx0XHRkZXN0LVx1MDAzZWFmID0gdWRlc3QtXHUwMDNlYWY7XG4xNDgxOlx0XHRkZXN0LVx1MDAzZXByb3RvY29sID0gc3ZjLVx1MDAzZXByb3RvY29sO1xuMTQ4MjpcdFx0ZGVzdC1cdTAwM2V2YWRkciA9IHN2Yy1cdTAwM2VhZGRyO1xuMTQ4MzpcdFx0ZGVzdC1cdTAwM2V2cG9ydCA9IHN2Yy1cdTAwM2Vwb3J0O1xuMTQ4NDpcdFx0ZGVzdC1cdTAwM2V2ZndtYXJrID0gc3ZjLVx1MDAzZWZ3bWFyaztcbjE0ODU6XHRcdGlwX3ZzX2FkZHJfY29weSh1ZGVzdC1cdTAwM2VhZiwgXHUwMDI2ZGVzdC1cdTAwM2VhZGRyLCBcdTAwMjZ1ZGVzdC1cdTAwM2VhZGRyKTtcbjE0ODY6XHRcdGRlc3QtXHUwMDNlcG9ydCA9IHVkZXN0LVx1MDAzZXBvcnQ7XG4xNDg3Olx0XG4xNDg4Olx0XHRhdG9taWNfc2V0KFx1MDAyNmRlc3QtXHUwMDNlYWN0aXZlY29ubnMsIDApO1xuMTQ4OTpcdFx0YXRvbWljX3NldChcdTAwMjZkZXN0LVx1MDAzZXRvdGFsY29ubnMsIDApO1xuMTQ5MDpcdFx0YXRvbWljX3NldChcdTAwMjZkZXN0LVx1MDAzZXBlcnNpc3Rjb25ucywgMCk7XG4xNDkxOlx0XHRyZWZjb3VudF9zZXQoXHUwMDI2ZGVzdC1cdTAwM2VyZWZjbnQsIDEpO1xuMTQ5MjpcdFxuMTQ5MzpcdFx0SU5JVF9ITElTVF9OT0RFKFx1MDAyNmRlc3QtXHUwMDNlZF9saXN0KTtcbjE0OTQ6XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNmRlc3QtXHUwMDNlZHN0X2xvY2spO1xuMTQ5NTpcdFx0X19pcF92c191cGRhdGVfZGVzdChzdmMsIGRlc3QsIHVkZXN0LCAxKTtcbjE0OTY6XHRcbjE0OTc6XHRcdHJldHVybiAwO1xuMTQ5ODpcdFxuMTQ5OTpcdGVycl9zdGF0czpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxMTcKCQkJCQkJCW91dHB1dDogNTQKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBEZWVwZXIgaW50byBJUFZTIERlc3RpbmF0aW9uIEhhbmRsaW5nKioKCkFscmlnaHQsIGdpdmVuIHRoZSBjb250ZXh0LCBJIHRoaW5rIGl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhlIG5pdHR5LWdyaXR0eSBvZiBob3cgSVBWUyBtYW5hZ2VzIGRlc3RpbmF0aW9uIGVudHJpZXMuIEkmIzM5O20gZ29pbmcgdG8gc2hpZnQgbXkgZm9jdXMgdG8gdGhvc2UgY29yZSBmdW5jdGlvbnMg4oCTIGBpcF92c19nZW5sX2ZpbGxfZGVzdGAgYW5kIGBpcF92c19jb3B5X2Rlc3RfZW50cnlgLiBJIHdhbnQgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCBhbmQgaG93IHRoZXkmIzM5O3JlIGJlaW5nIHBvcHVsYXRlZCBhbmQgbW9kaWZpZWQuCgpUaGUgYGdldHNvY2tvcHRgIGhhbmRsZXJzIGFyZSBhbHNvIHJlbGV2YW50IGFuZCBuZWVkIGEgY2xvc2VyIGxvb2sgYmVjYXVzZSB0aGV5IHJlcHJlc2VudCBleHRlcm5hbCBhY2Nlc3MgdG8gdGhlIGRlc3RpbmF0aW9uIGRhdGEuIEkgbmVlZCB0byBzZWUgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCBgaXBfdnNfZ2VubF9maWxsX2Rlc3RgIGFuZCBgaXBfdnNfY29weV9kZXN0X2VudHJ5YCwgZW5zdXJpbmcgY29uc2lzdGVuY3kgYW5kIHRoYXQgbm8gdW5leHBlY3RlZCBpbmZvcm1hdGlvbiBsZWFrcyBvY2N1ciB0aHJvdWdoIHRoZXNlIGhhbmRsZXJzLiBJIG5lZWQgdG8gaWRlbnRpZnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBjb25jdXJyZW5jeSBpc3N1ZXMgaW4gbWFuaXB1bGF0aW5nIHRoZXNlIGRlc3RpbmF0aW9uIGVudHJpZXMuIFBlcmhhcHMgdGhlcmUgYXJlIGRhdGEgYWNjZXNzIG9yIGxvY2tpbmcgc3VidGxldGllcyBpbiB0aGUgYGdldHNvY2tvcHRgIGhhbmRsZXIgdGhhdCBhcmUgY2F1c2luZyBhIHByb2JsZW0uIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGRhdGEgZmxvdyBhbmQgbG9vayBmb3IgcG90ZW50aWFsIHdlYWtuZXNzZXMgb3IgdnVsbmVyYWJpbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF92c19kZXN0X2VudHJ5fGlwX3ZzX2dlbmxfZmlsbF9kZXN0fGlwX3ZzX2dldF9kZXN0cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MzY4MD1zdGF0aWMgaW5saW5lIGludFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjM2ODE6X19pcF92c19nZXRfZGVzdF9lbnRyaWVzKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBjb25zdCBzdHJ1Y3QgaXBfdnNfZ2V0X2Rlc3RzICpnZXQsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MzY4MjpcdFx0XHQgc3RydWN0IGlwX3ZzX2dldF9kZXN0cyBfX3VzZXIgKnVwdHIpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzY4My17XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTM2OTgtXHRcdHN0cnVjdCBpcF92c19kZXN0ICpkZXN0O1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjM2OTk6XHRcdHN0cnVjdCBpcF92c19kZXN0X2VudHJ5IGVudHJ5O1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTM3MDAtXHRcdHN0cnVjdCBpcF92c19rc3RhdHMga3N0YXRzO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0zNzU3PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGdldF9hcmdsZW5bQ01ESUQoSVBfVlNfU09fR0VUX01BWCkgJiM0MzsgMV0gPSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTM3NjEtXHRbQ01ESUQoSVBfVlNfU09fR0VUX1NFUlZJQ0UpXSAgPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3NlcnZpY2VfZW50cnkpLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjM3NjI6XHRbQ01ESUQoSVBfVlNfU09fR0VUX0RFU1RTKV0gICAgPSBzaXplb2Yoc3RydWN0IGlwX3ZzX2dldF9kZXN0cyksXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzc2My1cdFtDTURJRChJUF9WU19TT19HRVRfVElNRU9VVCldICA9IHNpemVvZihzdHJ1Y3QgaXBfdnNfdGltZW91dF91c2VyKSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9Mzc2Nz11bmlvbiBpcF92c19nZXRfYXJnbGVuIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzc3MS1cdHN0cnVjdCBpcF92c19zZXJ2aWNlX2VudHJ5XHRmaWVsZF9JUF9WU19TT19HRVRfU0VSVklDRTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzozNzcyOlx0c3RydWN0IGlwX3ZzX2dldF9kZXN0c1x0XHRmaWVsZF9JUF9WU19TT19HRVRfREVTVFM7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzc3My1cdHN0cnVjdCBpcF92c190aW1lb3V0X3VzZXJcdGZpZWxkX0lQX1ZTX1NPX0dFVF9USU1FT1VUO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0zNzgwPWRvX2lwX3ZzX2dldF9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB2b2lkIF9fdXNlciAqdXNlciwgaW50ICpsZW4pXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTM5MTQtXHR7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MzkxNTpcdFx0c3RydWN0IGlwX3ZzX2dldF9kZXN0cyAqZ2V0O1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTM5MTYtXHRcdHNpemVfdCBzaXplO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTM5MTctXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MzkxODpcdFx0Z2V0ID0gKHN0cnVjdCBpcF92c19nZXRfZGVzdHMgKilhcmc7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzkxOS1cdFx0c2l6ZSA9IHN0cnVjdF9zaXplKGdldCwgZW50cnl0YWJsZSwgZ2V0LVx1MDAzZW51bV9kZXN0cyk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTQyOTQ9c3RhdGljIHN0cnVjdCBpcF92c19zZXJ2aWNlICppcF92c19nZW5sX2ZpbmRfc2VydmljZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDMwNC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzo0MzA1OnN0YXRpYyBpbnQgaXBfdnNfZ2VubF9maWxsX2Rlc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDMwNi17XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTQzNTQ9c3RhdGljIGludCBpcF92c19nZW5sX2R1bXBfZGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDM2NC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzo0MzY1Olx0aWYgKGlwX3ZzX2dlbmxfZmlsbF9kZXN0KHNrYiwgZGVzdCkgXHUwMDNjIDApXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDM2Ni1cdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjI4CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIElQVlMgQ29udHJvbCBQbGFuZSoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgdW5kZXJzdGFuZCBob3cgdGhlc2UgSVBWUyBkZXN0aW5hdGlvbnMgYXJlIGhhbmRsZWQgYXQgdGhlIGNvbnRyb2wgcGxhbmUgbGV2ZWwuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgaXBfdnNfY3RsLmNgIGZpbGUgYW5kIHNwZWNpZmljYWxseSBmb2N1cyBvbiB0aGUgZnVuY3Rpb25zIGBpcF92c19nZW5sX2ZpbGxfZGVzdGAgYW5kIGBfX2lwX3ZzX2dldF9kZXN0X2VudHJpZXNgLiBUaGVzZSBuYW1lcyBhcmUgcHJldHR5IGRlc2NyaXB0aXZlLCBzbyBJJiMzOTttIGV4cGVjdGluZyBgaXBfdnNfZ2VubF9maWxsX2Rlc3RgIHRvIGJlIHJlc3BvbnNpYmxlIGZvciBwb3B1bGF0aW5nIHRoZSBkZXN0aW5hdGlvbiBpbmZvcm1hdGlvbiwgcHJvYmFibHkgdXNpbmcgR2VuZXJpYyBOZXRsaW5rLCBhbmQgYF9faXBfdnNfZ2V0X2Rlc3RfZW50cmllc2Agc2hvdWxkIGJlIHRoZSBsb3dlci1sZXZlbCBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5IHJldHJpZXZlcyB0aGlzIGRlc3RpbmF0aW9uIGRhdGEuIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBob3cgdGhlc2Ugd29yayB0b2dldGhlciB0byBwcm92aWRlIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gZm9yIHRoZSB1c2VyIHNwYWNlIGNvbnRyb2wgdXRpbGl0eSB0byBtYW5hZ2UgdGhlIGxvYWQgYmFsYW5jaW5nIGRlc3RpbmF0aW9ucy4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSBpbnRlcmFjdCBhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiB1bmRlciB0aGUgaG9vZC4gSSB3YW50IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBvcHRpbWl6YXRpb24gdGVjaG5pcXVlcywgb3IgcG9zc2libGUgYXJlYXMgb2YgaW1wcm92ZW1lbnQgaGVyZS4gVGhpcyBzaG91bGQgcHJvdmlkZSBzb21lIHNvbGlkIGluc2lnaHQgaW50byBob3cgSVBWUyBjb25maWd1cmVzIGFuZCBzdG9yZXMgZGVzdGluYXRpb24gZW50cmllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNjkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM2OTA6XHRcdFx0c3ZjID0gX19pcF92c19zdmNfZndtX2ZpbmQoaXB2cywgQUZfSU5FVCwgZ2V0LVx1MDAzZWZ3bWFyayk7XG4zNjkxOlx0XHRlbHNlXG4zNjkyOlx0XHRcdHN2YyA9IF9faXBfdnNfc2VydmljZV9maW5kKGlwdnMsIEFGX0lORVQsIGdldC1cdTAwM2Vwcm90b2NvbCwgXHUwMDI2YWRkcixcbjM2OTM6XHRcdFx0XHRcdFx0ICAgZ2V0LVx1MDAzZXBvcnQpO1xuMzY5NDpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4zNjk1Olx0XG4zNjk2Olx0XHRpZiAoc3ZjKSB7XG4zNjk3Olx0XHRcdGludCBjb3VudCA9IDA7XG4zNjk4Olx0XHRcdHN0cnVjdCBpcF92c19kZXN0ICpkZXN0O1xuMzY5OTpcdFx0XHRzdHJ1Y3QgaXBfdnNfZGVzdF9lbnRyeSBlbnRyeTtcbjM3MDA6XHRcdFx0c3RydWN0IGlwX3ZzX2tzdGF0cyBrc3RhdHM7XG4zNzAxOlx0XG4zNzAyOlx0XHRcdG1lbXNldChcdTAwMjZlbnRyeSwgMCwgc2l6ZW9mKGVudHJ5KSk7XG4zNzAzOlx0XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoZGVzdCwgXHUwMDI2c3ZjLVx1MDAzZWRlc3RpbmF0aW9ucywgbl9saXN0KSB7XG4zNzA0Olx0XHRcdFx0aWYgKGNvdW50IFx1MDAzZT0gZ2V0LVx1MDAzZW51bV9kZXN0cylcbjM3MDU6XHRcdFx0XHRcdGJyZWFrO1xuMzcwNjpcdFxuMzcwNzpcdFx0XHRcdC8qIENhbm5vdCBleHBvc2UgaGV0ZXJvZ2VuZW91cyBtZW1iZXJzIHZpYSBzb2Nrb3B0XG4zNzA4Olx0XHRcdFx0ICogaW50ZXJmYWNlXG4zNzA5Olx0XHRcdFx0ICovXG4zNzEwOlx0XHRcdFx0aWYgKGRlc3QtXHUwMDNlYWYgIT0gc3ZjLVx1MDAzZWFmKVxuMzcxMTpcdFx0XHRcdFx0Y29udGludWU7XG4zNzEyOlx0XG4zNzEzOlx0XHRcdFx0ZW50cnkuYWRkciA9IGRlc3QtXHUwMDNlYWRkci5pcDtcbjM3MTQ6XHRcdFx0XHRlbnRyeS5wb3J0ID0gZGVzdC1cdTAwM2Vwb3J0O1xuMzcxNTpcdFx0XHRcdGVudHJ5LmNvbm5fZmxhZ3MgPSBhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZWNvbm5fZmxhZ3MpO1xuMzcxNjpcdFx0XHRcdGVudHJ5LndlaWdodCA9IGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNld2VpZ2h0KTtcbjM3MTc6XHRcdFx0XHRlbnRyeS51X3RocmVzaG9sZCA9IFJFQURfT05DRShkZXN0LVx1MDAzZXVfdGhyZXNob2xkKTtcbjM3MTg6XHRcdFx0XHRlbnRyeS5sX3RocmVzaG9sZCA9IFJFQURfT05DRShkZXN0LVx1MDAzZWxfdGhyZXNob2xkKTtcbjM3MTk6XHRcdFx0XHRlbnRyeS5hY3RpdmVjb25ucyA9IGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNlYWN0aXZlY29ubnMpO1xuMzcyMDpcdFx0XHRcdGVudHJ5LmluYWN0Y29ubnMgPSBpcF92c19kZXN0X2luYWN0Y29ubnMoZGVzdCk7XG4zNzIxOlx0XHRcdFx0ZW50cnkucGVyc2lzdGNvbm5zID0gYXRvbWljX3JlYWQoXHUwMDI2ZGVzdC1cdTAwM2VwZXJzaXN0Y29ubnMpO1xuMzcyMjpcdFx0XHRcdGlwX3ZzX2NvcHlfc3RhdHMoXHUwMDI2a3N0YXRzLCBcdTAwMjZkZXN0LVx1MDAzZXN0YXRzKTtcbjM3MjM6XHRcdFx0XHRpcF92c19leHBvcnRfc3RhdHNfdXNlcihcdTAwMjZlbnRyeS5zdGF0cywgXHUwMDI2a3N0YXRzKTtcbjM3MjQ6XHRcdFx0XHRpZiAoY29weV90b191c2VyKFx1MDAyNnVwdHItXHUwMDNlZW50cnl0YWJsZVtjb3VudF0sXG4zNzI1Olx0XHRcdFx0XHRcdCBcdTAwMjZlbnRyeSwgc2l6ZW9mKGVudHJ5KSkpIHtcbjM3MjY6XHRcdFx0XHRcdHJldCA9IC1FRkFVTFQ7XG4zNzI3Olx0XHRcdFx0XHRicmVhaztcbjM3Mjg6XHRcdFx0XHR9XG4zNzI5Olx0XHRcdFx0Y291bnQmIzQzOyYjNDM7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDYxOAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBpcF92c19nZW5sX2ZpbGxfZGVzdGAqKgoKUmlnaHQsIGxldCYjMzk7cyBjaXJjbGUgYmFjayBhbmQgdGFrZSBhIGxvb2sgYXQgYGlwX3ZzX2dlbmxfZmlsbF9kZXN0YC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBkZXN0aW5hdGlvbiBmaWxsaW5nIGxvZ2ljIHdpdGhpbiB0aGUgZ2VuZXJpYyBuZXRsaW5rIGludGVyZmFjZSBpcyBmdW5jdGlvbmluZyBhcyBleHBlY3RlZC4gSXQmIzM5O3MgYSBjcml0aWNhbCBwaWVjZSBmb3IgcHJvcGVyIGZvcndhcmRpbmcgd2l0aGluIHRoZSBJUFZTIHNldHVwLCBzbyBhIGNvbXByZWhlbnNpdmUgcmV2aWV3IGlzIGluIG9yZGVyLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byBkYXRhIGludGVncml0eSwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIG9yIGFueSB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cy4gTWFraW5nIHN1cmUgdGhpcyBmdW5jdGlvbiBpcyBzb2xpZCBpcyBrZXkgZm9yIG92ZXJhbGwgc3RhYmlsaXR5IGFuZCBlZmZpY2llbnQgbG9hZCBiYWxhbmNpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDMwNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MzA1Olx0c3RhdGljIGludCBpcF92c19nZW5sX2ZpbGxfZGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcbjQzMDY6XHR7XG40MzA3Olx0XHRzdHJ1Y3QgbmxhdHRyICpubF9kZXN0O1xuNDMwODpcdFx0c3RydWN0IGlwX3ZzX2tzdGF0cyBrc3RhdHM7XG40MzA5Olx0XG40MzEwOlx0XHRubF9kZXN0ID0gbmxhX25lc3Rfc3RhcnRfbm9mbGFnKHNrYiwgSVBWU19DTURfQVRUUl9ERVNUKTtcbjQzMTE6XHRcdGlmICghbmxfZGVzdClcbjQzMTI6XHRcdFx0cmV0dXJuIC1FTVNHU0laRTtcbjQzMTM6XHRcbjQzMTQ6XHRcdGlmIChubGFfcHV0KHNrYiwgSVBWU19ERVNUX0FUVFJfQUREUiwgc2l6ZW9mKGRlc3QtXHUwMDNlYWRkciksIFx1MDAyNmRlc3QtXHUwMDNlYWRkcikgfHxcbjQzMTU6XHRcdCAgICBubGFfcHV0X2JlMTYoc2tiLCBJUFZTX0RFU1RfQVRUUl9QT1JULCBkZXN0LVx1MDAzZXBvcnQpIHx8XG40MzE2Olx0XHQgICAgbmxhX3B1dF91MzIoc2tiLCBJUFZTX0RFU1RfQVRUUl9GV0RfTUVUSE9ELFxuNDMxNzpcdFx0XHRcdChhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZWNvbm5fZmxhZ3MpIFx1MDAyNlxuNDMxODpcdFx0XHRcdCBJUF9WU19DT05OX0ZfRldEX01BU0spKSB8fFxuNDMxOTpcdFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSVBWU19ERVNUX0FUVFJfV0VJR0hULFxuNDMyMDpcdFx0XHRcdGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNld2VpZ2h0KSkgfHxcbjQzMjE6XHRcdCAgICBubGFfcHV0X3U4KHNrYiwgSVBWU19ERVNUX0FUVFJfVFVOX1RZUEUsXG40MzIyOlx0XHRcdCAgICAgICBkZXN0LVx1MDAzZXR1bl90eXBlKSB8fFxuNDMyMzpcdFx0ICAgIG5sYV9wdXRfYmUxNihza2IsIElQVlNfREVTVF9BVFRSX1RVTl9QT1JULFxuNDMyNDpcdFx0XHRcdCBkZXN0LVx1MDAzZXR1bl9wb3J0KSB8fFxuNDMyNTpcdFx0ICAgIG5sYV9wdXRfdTE2KHNrYiwgSVBWU19ERVNUX0FUVFJfVFVOX0ZMQUdTLFxuNDMyNjpcdFx0XHRcdGRlc3QtXHUwMDNldHVuX2ZsYWdzKSB8fFxuNDMyNzpcdFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSVBWU19ERVNUX0FUVFJfVV9USFJFU0gsXG40MzI4Olx0XHRcdFx0UkVBRF9PTkNFKGRlc3QtXHUwMDNldV90aHJlc2hvbGQpKSB8fFxuNDMyOTpcdFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSVBWU19ERVNUX0FUVFJfTF9USFJFU0gsXG40MzMwOlx0XHRcdFx0UkVBRF9PTkNFKGRlc3QtXHUwMDNlbF90aHJlc2hvbGQpKSB8fFxuNDMzMTpcdFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSVBWU19ERVNUX0FUVFJfQUNUSVZFX0NPTk5TLFxuNDMzMjpcdFx0XHRcdGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNlYWN0aXZlY29ubnMpKSB8fFxuNDMzMzpcdFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSVBWU19ERVNUX0FUVFJfSU5BQ1RfQ09OTlMsXG40MzM0Olx0XHRcdFx0aXBfdnNfZGVzdF9pbmFjdGNvbm5zKGRlc3QpKSB8fFxuNDMzNTpcdFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSVBWU19ERVNUX0FUVFJfUEVSU0lTVF9DT05OUyxcbjQzMzY6XHRcdFx0XHRhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZXBlcnNpc3Rjb25ucykpIHx8XG40MzM3Olx0XHQgICAgbmxhX3B1dF91MTYoc2tiLCBJUFZTX0RFU1RfQVRUUl9BRERSX0ZBTUlMWSwgZGVzdC1cdTAwM2VhZikpXG40MzM4Olx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuNDMzOTpcdFx0aXBfdnNfY29weV9zdGF0cyhcdTAwMjZrc3RhdHMsIFx1MDAyNmRlc3QtXHUwMDNlc3RhdHMpO1xuNDM0MDpcdFx0aWYgKGlwX3ZzX2dlbmxfZmlsbF9zdGF0cyhza2IsIElQVlNfREVTVF9BVFRSX1NUQVRTLCBcdTAwMjZrc3RhdHMpKVxuNDM0MTpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjQzNDI6XHRcdGlmIChpcF92c19nZW5sX2ZpbGxfc3RhdHM2NChza2IsIElQVlNfREVTVF9BVFRSX1NUQVRTNjQsIFx1MDAyNmtzdGF0cykpXG40MzQzOlx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuNDM0NDpcdFxuNDM0NTpcdFx0bmxhX25lc3RfZW5kKHNrYiwgbmxfZGVzdCk7XG40MzQ2Olx0XG40MzQ3Olx0XHRyZXR1cm4gMDtcbjQzNDg6XHRcbjQzNDk6XHRubGFfcHV0X2ZhaWx1cmU6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODEzCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNjI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSVBWUyBEZXN0aW5hdGlvbiBPdmVybG9hZCBUcmFja2luZyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kICpleGFjdGx5KiB3aGF0JiMzOTtzIGNoYW5naW5nLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGFuIG9wdGltaXphdGlvbiBhbmQgcmVmYWN0b3Jpbmcgb2YgaG93IElQVlMgdHJhY2tzIGRlc3RpbmF0aW9uIG92ZXJsb2FkLiBQcmV2aW91c2x5LCB0aGUgYElQX1ZTX0RFU1RfRl9PVkVSTE9BRGAgZmxhZyBpbiBgZGVzdC0mZ3Q7ZmxhZ3NgIHdhcyB0aGUgZ28tdG8gaW5kaWNhdG9yLiBUaGUgcGF0Y2ggcmVtb3ZlcyB0aGlzIGZsYWcsIGFuZCBpcyBnb2luZyB0byB1dGlsaXplIGBkZXN0LSZndDtsX3RocmVzaG9sZF92YWxgIGRpcmVjdGx5LiBDbGV2ZXIsIHVzaW5nIGEgbm9uLXplcm8gdmFsdWUgZm9yIGBsX3RocmVzaG9sZF92YWxgIGFzIHRoZSBvdmVybG9hZCBpbmRpY2F0b3IsIHdoaWNoIHNlZW1zIGxpa2UgYSBnb29kIGNob2ljZSB0byBvcHRpbWl6ZSB0aGUgY2FjaGUgbGluZXMuCgpJIGltbWVkaWF0ZWx5IHdhbnQgdG8gdmVyaWZ5IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIFNpbmNlIGBkZXN0YCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgd2hpY2ggY2FsbHMgYGt6YWxsb2NgLCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEnigJltIHRoaW5raW5nIHRoZXJlIGlzIGEgY2hhbmNlIHRoZXJlIGFyZSBzaWRlIGVmZmVjdHMuIEkgcmVjYWxsIGBremFsbG9jYCB6ZXJvLWluaXRpYWxpemVzIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgdHJ1ZSBmb3IgYHN0cnVjdCBpcF92c19kZXN0YC4KClNvLCB0aGUgbmV4dCBzdGVwIGlzIHRvIG1ha2Ugc3VyZSBgc3RydWN0IGlwX3ZzX2Rlc3RgIGlzIG5ldmVyIGNvcGllZCBkaXJlY3RseSB0byB1c2Vyc3BhY2UuIEdvb2QsIGZyb20gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVsZXZhbnQgY29kZSwgYF9faXBfdnNfZ2V0X2Rlc3RfZW50cmllc2AgYW5kIGdlbmVyaWMgbmV0bGluaywgb25seSBpbmRpdmlkdWFsIGZpZWxkcyBhcmUgY29waWVkLCBhbmQgdGhvc2UgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBUaGF0JiMzOTtzIGEgaHVnZSByZWxpZWYuIE5vIG5ldyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgYmVpbmcgZXhwb3NlZCwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgYnJhbmNoZWQgdXBvbi4gVGhlIHBhdGNoJiMzOTtzIGNob2ljZSB0byB6ZXJvLWluaXRpYWxpemUgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZvciBgZGVzdGAgaXMgc291bmQgYW5kIGl0JiMzOTtzIGFsc28gZ29vZCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZXhwbGljaXRseSBzZXQgb3IgdXBkYXRlZCBhZnRlciBhbGxvY2F0aW9uLgoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIHNjaGVkdWxlciBpbnRlcmFjdGlvbnMuIEkgc2VlIHRoYXQgdGhlIGNvZGUgc2ltcGx5IHJlcGxhY2VzIGAoZGVzdC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfREVTVF9GX09WRVJMT0FEKWAgY2hlY2tzIHdpdGggYGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KWAuIFRoYXQgc2hvdWxkIGJlIGEgc3RyYWlnaHRmb3J3YXJkIHN1YnN0aXR1dGlvbiBhcyBsb25nIGFzIHRoZSBzZW1hbnRpY3MgYXJlIGlkZW50aWNhbC4gSSB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZSBgaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkYCBmdW5jdGlvbiBjb3JyZWN0bHkgcmVmbGVjdHMgdGhlIG92ZXJsb2FkIHN0YXRlIGJhc2VkIG9uIHRoZSBuZXcgYGxfdGhyZXNob2xkX3ZhbGAgYXBwcm9hY2guIEl0JiMzOTtzIHVzaW5nIGAmbHQ7PWAgYW5kIGAmZ3Q7PWAgd2l0aCBgbF90aHJlc2hvbGRfdmFsYCBhbmQgYHVfdGhyZXNob2xkX3ZhbGAgaW4gYGlwX3ZzX2Nvbm4uY2AsIHdoaWNoIG1ha2VzIHNlbnNlLgoKRmluYWxseSwgSSBuZWVkIHRvIHBlcmZvcm0gYSBjb21wcmVoZW5zaXZlIHN3ZWVwIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGNoYW5nZSBpcyBjb250YWluZWQuIEkmIzM5O2xsIHNlYXJjaCB0aGUgY29kZSBmb3IgYW55IHVzZXMgb2YgYGxfdGhyZXNob2xkX3ZhbGAgb3IgYHVfdGhyZXNob2xkX3ZhbGAgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBwbGFjZXMgd2hlcmUgdGhpcyBjb3VsZCBjYXVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbnRyb2R1Y2UgdW5leHBlY3RlZCBiZWhhdmlvci4gSSYjMzk7bGwgbmVlZCB0byBkbyBhIGZ1bGwgZ3JlcCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7KGxfdGhyZXNob2xkX3ZhbHx1X3RocmVzaG9sZF92YWwpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9MTA4OT1pcF92c19iaW5kX2Rlc3Qoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTExNTItXHRcdHRjID0gYXRvbWljX2luY19yZXR1cm4oXHUwMDI2ZGVzdC1cdTAwM2V0b3RhbGNvbm5zKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTE1MzpcdFx0aWYgKHRjIFx1MDAzZT0gUkVBRF9PTkNFKGRlc3QtXHUwMDNldV90aHJlc2hvbGRfdmFsKSlcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTE1NC1cdFx0XHRpcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChkZXN0LCB0cnVlKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTEyMjA9c3RhdGljIGlubGluZSB2b2lkIGlwX3ZzX3VuYmluZF9kZXN0KHN0cnVjdCBpcF92c19jb25uICpjcClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEyNDUtXHRcdHRjID0gYXRvbWljX2ZldGNoX2RlYyhcdTAwMjZkZXN0LVx1MDAzZXRvdGFsY29ubnMpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMjQ2Olx0XHRpZiAodGMgXHUwMDNjPSBSRUFEX09OQ0UoZGVzdC1cdTAwM2VsX3RocmVzaG9sZF92YWwpKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMjQ3LVx0XHRcdGlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKGRlc3QsIGZhbHNlKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MTMxMj1zdGF0aWMgdm9pZCBfX2lwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKHN0cnVjdCBpcF92c19kZXN0ICpkZXN0LCBib29sIG92ZXJsb2FkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xMzIzLVx0XHRpZiAoY29ubnMgXHUwMDNlPSAob3ZlcmxvYWQgPyBsIDogdSkpIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoxMzI0Olx0XHRcdFdSSVRFX09OQ0UoZGVzdC1cdTAwM2V1X3RocmVzaG9sZF92YWwsIElOVF9NQVgpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjEzMjU6XHRcdFx0V1JJVEVfT05DRShkZXN0LVx1MDAzZWxfdGhyZXNob2xkX3ZhbCwgbCk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMTMyNi1cdFx0XHRyZXR1cm47XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTEzMjktXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MTMzMDpcdFdSSVRFX09OQ0UoZGVzdC1cdTAwM2V1X3RocmVzaG9sZF92YWwsIHUgPyA6IElOVF9NQVgpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjEzMzE6XHRXUklURV9PTkNFKGRlc3QtXHUwMDNlbF90aHJlc2hvbGRfdmFsLCAwKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xMzMyLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc3MjgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhpcyBjb2RlIGNoYW5nZS4gRmlyc3QsIEkgbmVlZCB0byBsb29rIGF0IHRoZSBgZmxhZ3NgIGZpZWxkIHdpdGhpbiB0aGUgYGlwX3ZzX2Rlc3RgIHN0cnVjdHVyZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzICpuZXcqIGFib3V0IGl0IHdpdGggdGhpcyBwYXRjaC4gV2FzIHRoZXJlIGFueXRoaW5nIHNldCBpbiBgZGVzdC0mZ3Q7ZmxhZ3NgIHByZXZpb3VzbHk/IEkmIzM5O20gZ29pbmcgdG8gY29uc3VsdCB0aGUgZGVmaW5pdGlvbiBvZiBgSVBfVlNfREVTVF9GX2AgdG8gY29uZmlybSB3aGF0IHdhcyBhbHJlYWR5IHRoZXJlLiBUaGlzIGlzIGFsbCBhYm91dCBlbnN1cmluZyBJIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhlc2UgZmxhZyBjaGFuZ2VzIG9uIGV4aXN0aW5nIGJlaGF2aW9yIGFuZCB3aGF0IG1pZ2h0IGhhdmUgYmVlbiBhZGRlZC4gSSBuZWVkIHRvIGJlIHByZWNpc2UsIG9yIEkmIzM5O2xsIGludHJvZHVjZSBhIHN1YnRsZSBidWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SVBfVlNfREVTVF9GXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTU4CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBJUF9WU19ERVNUX0ZfYCBGbGFnIFVzYWdlKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIGBJUF9WU19ERVNUX0ZfYCBmbGFnIGtpY2tpbmcgYXJvdW5kLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgYW5kIHdoZXJlIGl0JiMzOTtzIGFjdHVhbGx5IHVzZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgSVBWUyBpbXBsZW1lbnRhdGlvbi4gTXkgZmlyc3QgbW92ZSBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIHNvdXJjZSBjb2RlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggdGhlIG1vc3QgbGlrZWx5IHBsYWNlLCB3aGljaCBpcyB0aGUgYGluY2x1ZGUvbmV0L2lwX3ZzLmhgIGhlYWRlciBmaWxlLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciBkZWZpbmluZyBhbmQsIGhvcGVmdWxseSwgZG9jdW1lbnRpbmcgd2hhdCB0aGUgZmxhZyBldmVuICptZWFucyouCgpIb3dldmVyLCBJJiMzOTttIG5vdCBnb2luZyB0byBzdG9wIHRoZXJlLiBJIGtub3cgaG93IGVhc2lseSB0aGluZ3MgY2FuIGJlIGJ1cmllZCBvciBkZWZpbmVkIGluIG11bHRpcGxlIHBsYWNlcy4gU28sIGFmdGVyIGEgcXVpY2sgcGVlayBpbiBgaXBfdnMuaGAsIEkmIzM5O2xsIHVzZSBncmVwIG9yIGEgc2ltaWxhciB0b29sIHRvIHNjb3VyIHRoZSBlbnRpcmUga2VybmVsIHRyZWUuIEkmIzM5O20gbG9va2luZyBmb3IgKmFueSogaW5zdGFuY2Ugb2YgYElQX1ZTX0RFU1RfRl9gLCB0byBnZXQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuIEkgd2FudCB0byBzZWUgaG93IGl0JiMzOTtzIGJlaW5nIHNldCwgY2hlY2tlZCwgYW5kIG1vZGlmaWVkLiBDb250ZXh0IGlzIGtleSBoZXJlOyB0aGUgaGVhZGVyIGZpbGUgbGlrZWx5IG9ubHkgcHJvdmlkZXMgdGhlIHN0YXRpYyBkZWZpbml0aW9uIGFuZCBtYXliZSBzb21lIGJhc2ljIGRvY3VtZW50YXRpb24uIFRoZSByZWFsIG1lYXQgb2YgdGhlIHN0b3J5IGxpZXMgaW4gdGhlIHByYWN0aWNhbCBpbXBsZW1lbnRhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIGhhcyB0byBzYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SVBfVlNfREVTVF9GXyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MzExCgkJCQkJCQlvdXRwdXQ6IDIyOQoJCQkJCQkJdGhvdWdodHM6IDI0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSAmIzM0O0lQX1ZTX0RFU1RfRl9PVkVSTE9BRCYjMzQ7IEZsYWcqKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSBgSVBfVlNfREVTVF9GX09WRVJMT0FEYCB3YXMgaW5kZWVkIHRoZSBvbmx5IGZsYWcgaW4gcXVlc3Rpb24gaGVyZS4gTGV0JiMzOTtzIHJ1biB0aHJvdWdoIHRoZSBjaGVja2xpc3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLgoKRmlyc3QsIHRoZSBwb3NzaWJpbGl0eSBvZiBrZXJuZWwgc3RydWN0dXJlcyBiZWluZyBzZW50IGRpcmVjdGx5IHRvIHVzZXJzcGFjZSB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBCdXQsIHRoZSBjb2RlIGV4cGxpY2l0bHkgKmRvZXNuJiMzOTt0KiBkbyB0aGF0LiBUaGUgYHN0cnVjdCBpcF92c19kZXN0YCBpc24mIzM5O3QgZGlyZWN0bHkgZXhwb3NlZDsgZ2V0dGVycyBjb3B5IHNlbGVjdGVkLCBpbml0aWFsaXplZCBmaWVsZHMgaW50byB6ZXJvZWQgYnVmZmVycy4gVGhleSB1c2UgYG1lbXNldCgmYW1wO2VudHJ5LCAwLCAuLi4pYCBhbmQgaW5kaXZpZHVhbCBOZXRsaW5rIGF0dHJpYnV0ZXMsIHNvIHRoYXQmIzM5O3MgY292ZXJlZC4KCk5leHQsIGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IG1pZ2h0IHJlbHkgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEhtbSwgbG9va2luZyBhdCBpdCwgYWxsIGZpZWxkcyBvZiBgZGVzdGAgYXJlIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmooKWAsIHdoaWNoLCBhcyBJIHJlY2FsbCwgemVyb2VzIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LiBUaGV5JiMzOTtyZSBhbHNvIGluaXRpYWxpemVkIHdpdGhpbiBgaXBfdnNfbmV3X2Rlc3RgIG9yIGBfX2lwX3ZzX3VwZGF0ZV9kZXN0YC4gVGhhdCByZW1vdmVzIHRoaXMgY29uY2VybiB0b28uCgpUaGVuIHRoZXJlJiMzOTtzIHRoZSBjaGFuY2Ugb2YgYWxsb2NhdGlvbnMgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiB3aGVyZSBsYXRlciBjb2RlIHBhdGhzIG1pZ2h0IGFjY2VzcyB1bmluaXRpYWxpemVkIGRhdGEuIEhvd2V2ZXIsIHRoZXJlIGFyZW4mIzM5O3QgYW55IHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBUaGF0JiMzOTtzIGEgZ29vZCB0aGluZy4KCkZpbmFsbHksIGJvdW5kcyBjaGVja3Mgb3IgbG9naWMgdGhhdCBtaWdodCBhbGxvdyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzLiBUaGlzIGRvZXNuJiMzOTt0IHNlZW0gYXBwbGljYWJsZSBoZXJlLgoKQWxyaWdodCwgYWZ0ZXIgcmV2aWV3aW5nIGFsbCB0aGUgY3JpdGVyaWEsIGl0JiMzOTtzIGNsZWFyIHRoYXQgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgKmFueSogdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIERlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzbiYjMzk7dCByZXF1aXJlZC4gV2UgY2FuIGNvbmZpZGVudGx5IG1vdmUgZm9yd2FyZC4gSSYjMzk7bGwgcHJlcGFyZSB0aGUgY2FsbCB0byBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW9yZ2FuaXplcyBmaWVsZHMgaW4gYHN0cnVjdCBpcF92c19kZXN0YCBmb3IgYmV0dGVyIGNhY2hlbGluZSB1dGlsaXphdGlvbiBhbmQgcmVmYWN0b3JzIHRoZSBkZXN0aW5hdGlvbiBvdmVybG9hZCBzdGF0dXMgdHJhY2tpbmcgdG8gdXNlIGBsX3RocmVzaG9sZF92YWxgIC8gYHVfdGhyZXNob2xkX3ZhbGAgaW5zdGVhZCBvZiBgZGVzdC1cdTAwM2VmbGFnc2Agd2l0aCBgSVBfVlNfREVTVF9GX09WRVJMT0FEYC5cblxuQWxsIGBzdHJ1Y3QgaXBfdnNfZGVzdGAgaW5zdGFuY2VzIGFyZSB6ZXJvLWFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iaigpYCBhbmQgdGhlaXIgdGhyZXNob2xkIGZpZWxkcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdXBvbiBjcmVhdGlvbi4gVGhlIHN0cnVjdHVyZSBpdHNlbGYgaXMgbm90IGNvcGllZCB0byB1c2Vyc3BhY2UgYXMgYSByYXcgYmxvYjsgdXNlcnNwYWNlIHF1ZXJpZXMgc2VyaWFsaXplIGluZGl2aWR1YWwgZmllbGRzIG9yIHVzZSB6ZXJvZWQgaW50ZXJtZWRpYXRlIHN0cnVjdHVyZXMgKGBtZW1zZXRgIGluIGBfX2lwX3ZzX2dldF9kZXN0X2VudHJpZXNgIGFuZCBpbmRpdmlkdWFsIE5ldGxpbmsgYXR0cmlidXRlcyBpbiBgaXBfdnNfZ2VubF9maWxsX2Rlc3RgKS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgYnJhbmNoZWQgdXBvbi5cblxuQmVjYXVzZSB0aGUgY2hhbmdlcyBpbnRyb2R1Y2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW9yZ2FuaXplcyBmaWVsZHMgaW4gYHN0cnVjdCBpcF92c19kZXN0YCBmb3IgYmV0dGVyIGNhY2hlbGluZSB1dGlsaXphdGlvbiBhbmQgcmVmYWN0b3JzIHRoZSBkZXN0aW5hdGlvbiBvdmVybG9hZCBzdGF0dXMgdHJhY2tpbmcgdG8gdXNlIGBsX3RocmVzaG9sZF92YWxgIC8gYHVfdGhyZXNob2xkX3ZhbGAgaW5zdGVhZCBvZiBgZGVzdC1cdTAwM2VmbGFnc2Agd2l0aCBgSVBfVlNfREVTVF9GX09WRVJMT0FEYC5cblxuQWxsIGBzdHJ1Y3QgaXBfdnNfZGVzdGAgaW5zdGFuY2VzIGFyZSB6ZXJvLWFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iaigpYCBhbmQgdGhlaXIgdGhyZXNob2xkIGZpZWxkcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdXBvbiBjcmVhdGlvbi4gVGhlIHN0cnVjdHVyZSBpdHNlbGYgaXMgbm90IGNvcGllZCB0byB1c2Vyc3BhY2UgYXMgYSByYXcgYmxvYjsgdXNlcnNwYWNlIHF1ZXJpZXMgc2VyaWFsaXplIGluZGl2aWR1YWwgZmllbGRzIG9yIHVzZSB6ZXJvZWQgaW50ZXJtZWRpYXRlIHN0cnVjdHVyZXMgKGBtZW1zZXRgIGluIGBfX2lwX3ZzX2dldF9kZXN0X2VudHJpZXNgIGFuZCBpbmRpdmlkdWFsIE5ldGxpbmsgYXR0cmlidXRlcyBpbiBgaXBfdnNfZ2VubF9maWxsX2Rlc3RgKS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgYnJhbmNoZWQgdXBvbi5cblxuQmVjYXVzZSB0aGUgY2hhbmdlcyBpbnRyb2R1Y2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjEwOjE3LjU1MDQ1MzA4NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTYwOTAzMTkxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9WU1wiLFxuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWRcIixcbiAgICBcImlwX3ZzX2JpbmRfZGVzdFwiLFxuICAgIFwiaXBfdnNfdW5iaW5kX2Rlc3RcIixcbiAgICBcIl9faXBfdnNfdXBkYXRlX2Rlc3RcIixcbiAgICBcImlwX3ZzX2VkaXRfZGVzdFwiLFxuICAgIFwiaXBfdnNfYWRkX2Rlc3RcIixcbiAgICBcImlwX3ZzX3JyX3NjaGVkdWxlXCIsXG4gICAgXCJpcF92c193cnJfc2NoZWR1bGVcIixcbiAgICBcImlwX3ZzX3dsY19zY2hlZHVsZVwiLFxuICAgIFwiaXBfdnNfbGNfc2NoZWR1bGVcIixcbiAgICBcImlwX3ZzX2ZvX3NjaGVkdWxlXCIsXG4gICAgXCJpcF92c19vdmZfc2NoZWR1bGVcIixcbiAgICBcImlwX3ZzX3R3b3Nfc2NoZWR1bGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlb3JnYW5pemVzIGZpZWxkcyBpbiBgc3RydWN0IGlwX3ZzX2Rlc3RgIGZvciBiZXR0ZXIgY2FjaGVsaW5lIHV0aWxpemF0aW9uIGFuZCByZWZhY3RvcnMgdGhlIGRlc3RpbmF0aW9uIG92ZXJsb2FkIHN0YXR1cyB0cmFja2luZyB0byB1c2UgYGxfdGhyZXNob2xkX3ZhbGAgLyBgdV90aHJlc2hvbGRfdmFsYCBpbnN0ZWFkIG9mIGBkZXN0LVxcdTAwM2VmbGFnc2Agd2l0aCBgSVBfVlNfREVTVF9GX09WRVJMT0FEYC5cXG5cXG5BbGwgYHN0cnVjdCBpcF92c19kZXN0YCBpbnN0YW5jZXMgYXJlIHplcm8tYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqKClgIGFuZCB0aGVpciB0aHJlc2hvbGQgZmllbGRzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB1cG9uIGNyZWF0aW9uLiBUaGUgc3RydWN0dXJlIGl0c2VsZiBpcyBub3QgY29waWVkIHRvIHVzZXJzcGFjZSBhcyBhIHJhdyBibG9iOyB1c2Vyc3BhY2UgcXVlcmllcyBzZXJpYWxpemUgaW5kaXZpZHVhbCBmaWVsZHMgb3IgdXNlIHplcm9lZCBpbnRlcm1lZGlhdGUgc3RydWN0dXJlcyAoYG1lbXNldGAgaW4gYF9faXBfdnNfZ2V0X2Rlc3RfZW50cmllc2AgYW5kIGluZGl2aWR1YWwgTmV0bGluayBhdHRyaWJ1dGVzIGluIGBpcF92c19nZW5sX2ZpbGxfZGVzdGApLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hlZCB1cG9uLlxcblxcbkJlY2F1c2UgdGhlIGNoYW5nZXMgaW50cm9kdWNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBkZXN0aW5hdGlvbiBvdmVybG9hZCB0cmFja2luZyBsb2dpYyBhbmQgZGVzdGluYXRpb24gc3RydWN0dXJlIGxheW91dCBpbiB0aGUgSVBWUyAoSVAgVmlydHVhbCBTZXJ2ZXIpIHN1YnN5c3RlbS4gSXQgdXBkYXRlcyBjb25uZWN0aW9uIGJpbmRpbmcgYW5kIHVuYmluZGluZyB0aHJlc2hvbGRzLCBjb250cm9sIHBsYW5lIGRlc3RpbmF0aW9uIHVwZGF0ZXMsIGFuZCBzY2hlZHVsZXIgb3ZlcmxvYWQgZXZhbHVhdGlvbiBhY3Jvc3MgSVBWUyBhbGdvcml0aG1zLiBUaGVzZSBhcmUgcmVhY2hhYmxlLCBleGVjdXRhYmxlIG5ldHdvcmsgcGF0aHMgdGhhdCBzaG91bGQgYmUgZnV6emVkIGZvciByYWNlIGNvbmRpdGlvbnMsIGFyaXRobWV0aWMgb3Igc3RhdGUgaGFuZGxpbmcgYnVncywgYW5kIHRocmVzaG9sZCBlZGdlIGNhc2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxMDoxNy41NTA0NTgzODZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1NTcxNTk2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGEwMjljMTg1MzllMmJkNDM5M2JiODczNmRmMDAwM2U0MjJjYjdjOWJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgNyAyMjoxMDoxNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcF92cy5oIGIvaW5jbHVkZS9uZXQvaXBfdnMuaFxcbmluZGV4IDMyZmRlNzMxYmNlYjcuLjlhODNiZmYzMjU2OWQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvaXBfdnMuaFxcbisrKyBiL2luY2x1ZGUvbmV0L2lwX3ZzLmhcXG5AQCAtMzYsOSArMzYsNiBAQFxcbiAjZGVmaW5lIElQX1ZTX0hEUl9JTlZFUlNFXFx0MVxcbiAjZGVmaW5lIElQX1ZTX0hEUl9JQ01QXFx0XFx0MlxcbiBcXG4tLyogRGVzdGluYXRpb24gU2VydmVyIEZsYWdzICovXFxuLSNkZWZpbmUgSVBfVlNfREVTVF9GX09WRVJMT0FEXFx0MHgwMDAyXFx0XFx0Lyogc2VydmVyIGlzIG92ZXJsb2FkZWQgKi9cXG4tXFxuIC8qIERlc3RpbmF0aW9uIFNlcnZlciBDb25maWcgRmxhZ3MgKi9cXG4gI2RlZmluZSBJUF9WU19ERVNUX0NGX0FWQUlMQUJMRVxcdDB4MDAwMVxcdFxcdC8qIHNlcnZlciBpcyBhdmFpbGFibGUgKi9cXG4gXFxuQEAgLTk3MywzMiArOTcwLDQzIEBAIHN0cnVjdCBpcF92c19kZXN0X2RzdCB7XFxuICAqIGFuZCBzbyBvbi5cXG4gICovXFxuIHN0cnVjdCBpcF92c19kZXN0IHtcXG4rXFx0LyogQ2FjaGVsaW5lIGZvciBoYXNoIHRhYmxlIG5vZGVzIC0gcmVhZC1tb3N0bHkgKi9cXG4rXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRuX2xpc3Q7ICAgLyogZm9yIHRoZSBkZXN0cyBpbiB0aGUgc2VydmljZSAqL1xcbiBcXHRzdHJ1Y3QgaGxpc3Rfbm9kZVxcdGRfbGlzdDsgICAvKiBmb3IgdGFibGUgd2l0aCBhbGwgdGhlIGRlc3RzICovXFxuIFxcbi1cXHR1MTZcXHRcXHRcXHRhZjtcXHRcXHQvKiBhZGRyZXNzIGZhbWlseSAqL1xcbi1cXHRfX2JlMTZcXHRcXHRcXHRwb3J0O1xcdFxcdC8qIHBvcnQgbnVtYmVyIG9mIHRoZSBzZXJ2ZXIgKi9cXG4tXFx0dW5pb24gbmZfaW5ldF9hZGRyXFx0YWRkcjtcXHRcXHQvKiBJUCBhZGRyZXNzIG9mIHRoZSBzZXJ2ZXIgKi9cXG4tXFx0dm9sYXRpbGUgdW5zaWduZWQgaW50XFx0ZmxhZ3M7XFx0XFx0LyogZGVzdCBzdGF0dXMgZmxhZ3MgKi9cXG4tXFx0YXRvbWljX3RcXHRcXHRjb25uX2ZsYWdzO1xcdC8qIGZsYWdzIHRvIGNvcHkgdG8gY29ubiAqL1xcbiBcXHRhdG9taWNfdFxcdFxcdHdlaWdodDtcXHRcXHQvKiBzZXJ2ZXIgd2VpZ2h0ICovXFxuLVxcdHVuc2lnbmVkIGxvbmdcXHRcXHRjZmxhZ3M7XFx0XFx0LyogY29uZmlnIGZsYWdzICovXFxuIFxcdGF0b21pY190XFx0XFx0bGFzdF93ZWlnaHQ7XFx0Lyogc2VydmVyIGxhdGVzdCB3ZWlnaHQgKi9cXG4rXFxuK1xcdC8qIGNvbm5lY3Rpb24gdGhyZXNob2xkcyAqL1xcbitcXHR1MzJcXHRcXHRcXHRsX3RocmVzaG9sZF92YWw7LyogdXNlZCBsb3dlciB0aHJlc2hvbGQgKi9cXG4rXFx0dTMyXFx0XFx0XFx0dV90aHJlc2hvbGRfdmFsOy8qIHVzZWQgdXBwZXIgdGhyZXNob2xkICovXFxuK1xcdC8qIDMyLzQ4ICovXFxuK1xcdHUzMlxcdFxcdFxcdGxfdGhyZXNob2xkO1xcdC8qIGxvd2VyIHRocmVzaG9sZCAqL1xcbitcXHR1MzJcXHRcXHRcXHR1X3RocmVzaG9sZDtcXHQvKiB1cHBlciB0aHJlc2hvbGQgKi9cXG4rXFxuK1xcdHVuc2lnbmVkIGxvbmdcXHRcXHRjZmxhZ3M7XFx0XFx0LyogY29uZmlnIGZsYWdzICovXFxuK1xcbitcXHQvKiA0NC82NCAqL1xcbitcXHRhdG9taWNfdFxcdFxcdGNvbm5fZmxhZ3M7XFx0LyogZmxhZ3MgdG8gY29weSB0byBjb25uICovXFxuK1xcbiBcXHRfX3UxNlxcdFxcdFxcdHR1bl90eXBlO1xcdC8qIHR1bm5lbCB0eXBlICovXFxuIFxcdF9fYmUxNlxcdFxcdFxcdHR1bl9wb3J0O1xcdC8qIHR1bm5lbCBwb3J0ICovXFxuIFxcdF9fdTE2XFx0XFx0XFx0dHVuX2ZsYWdzO1xcdC8qIHR1bm5lbCBmbGFncyAqL1xcbiBcXG4tXFx0cmVmY291bnRfdFxcdFxcdHJlZmNudDtcXHRcXHQvKiByZWZlcmVuY2UgY291bnRlciAqL1xcbi1cXHRzdHJ1Y3QgaXBfdnNfc3RhdHMgICAgICBzdGF0czsgICAgICAgICAgLyogc3RhdGlzdGljcyAqL1xcbi1cXHR1bnNpZ25lZCBsb25nXFx0XFx0aWRsZV9zdGFydDtcXHQvKiBzdGFydCB0aW1lLCBqaWZmaWVzICovXFxuK1xcdHUxNlxcdFxcdFxcdGFmO1xcdFxcdC8qIGFkZHJlc3MgZmFtaWx5ICovXFxuK1xcdF9fYmUxNlxcdFxcdFxcdHBvcnQ7XFx0XFx0LyogcG9ydCBudW1iZXIgb2YgdGhlIHNlcnZlciAqL1xcbitcXHQvKiA2MC84MCAqL1xcbitcXHR1bmlvbiBuZl9pbmV0X2FkZHJcXHRhZGRyO1xcdFxcdC8qIElQIGFkZHJlc3Mgb2YgdGhlIHNlcnZlciAqL1xcbiBcXG4tXFx0LyogY29ubmVjdGlvbiBjb3VudGVycyBhbmQgdGhyZXNob2xkcyAqL1xcbi1cXHRhdG9taWNfdFxcdFxcdGFjdGl2ZWNvbm5zO1xcdC8qIGFjdGl2ZSBjb25uZWN0aW9ucyAqL1xcbitcXHQvKiBjb25uZWN0aW9uIGNvdW50ZXJzICovXFxuIFxcdGF0b21pY190XFx0XFx0dG90YWxjb25ucztcXHQvKiB0b3RhbCBjb25uZWN0aW9ucyAqL1xcbitcXHRhdG9taWNfdFxcdFxcdGFjdGl2ZWNvbm5zO1xcdC8qIGFjdGl2ZSBjb25uZWN0aW9ucyAqL1xcbiBcXHRhdG9taWNfdFxcdFxcdHBlcnNpc3Rjb25ucztcXHQvKiBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zICovXFxuLVxcdF9fdTMyXFx0XFx0XFx0dV90aHJlc2hvbGQ7XFx0LyogdXBwZXIgdGhyZXNob2xkICovXFxuLVxcdF9fdTMyXFx0XFx0XFx0bF90aHJlc2hvbGQ7XFx0LyogbG93ZXIgdGhyZXNob2xkICovXFxuLVxcdF9fdTMyXFx0XFx0XFx0bF90aHJlc2hvbGRfdmFsOy8qIHVzZWQgbG93ZXIgdGhyZXNob2xkICovXFxuK1xcbitcXHRyZWZjb3VudF90XFx0XFx0cmVmY250O1xcdFxcdC8qIHJlZmVyZW5jZSBjb3VudGVyICovXFxuK1xcdHN0cnVjdCBpcF92c19zdGF0cyAgICAgIHN0YXRzOyAgICAgICAgICAvKiBzdGF0aXN0aWNzICovXFxuK1xcdHVuc2lnbmVkIGxvbmdcXHRcXHRpZGxlX3N0YXJ0O1xcdC8qIHN0YXJ0IHRpbWUsIGppZmZpZXMgKi9cXG4gXFxuIFxcdC8qIGZvciBkZXN0aW5hdGlvbiBjYWNoZSAqL1xcbiBcXHRzcGlubG9ja190XFx0XFx0ZHN0X2xvY2s7XFx0LyogbG9jayBvZiBkc3RfY2FjaGUgKi9cXG5AQCAtMTkxNSw3ICsxOTIzLDEzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c19kZXN0X3B1dF9hbmRfZnJlZShzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcXG4gXFx0XFx0a2ZyZWUoZGVzdCk7XFxuIH1cXG4gXFxuLXZvaWQgaXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QsIGludCBtb2RlKTtcXG4rdm9pZCBpcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCwgYm9vbCBvdmVybG9hZCk7XFxuK1xcbisvKiBDaGVjayBpZiBkZXN0IGlzIGluIG92ZXJsb2FkZWQgc3RhdGUgKi9cXG4rc3RhdGljIGlubGluZSBib29sIGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChjb25zdCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcXG4re1xcbitcXHRyZXR1cm4gUkVBRF9PTkNFKGRlc3QtXFx1MDAzZWxfdGhyZXNob2xkX3ZhbCk7XFxuK31cXG4gXFxuIC8qIElQVlMgc3luYyBkYWVtb24gZGF0YSBhbmQgZnVuY3Rpb24gcHJvdG90eXBlc1xcbiAgKiAoZnJvbSBpcF92c19zeW5jLmMpXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jXFxuaW5kZXggNmZhM2UxZGM1MzRjMy4uNTM0OGMyZjQ5YjY0ZSAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uY1xcbkBAIC0xMTUwLDggKzExNTAsOCBAQCBpcF92c19iaW5kX2Rlc3Qoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcXG4gXFx0XFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfSU5BQ1RJVkUpKVxcbiBcXHRcXHRcXHRhdG9taWNfaW5jKFxcdTAwMjZkZXN0LVxcdTAwM2VhY3RpdmVjb25ucyk7XFxuIFxcdFxcdHRjID0gYXRvbWljX2luY19yZXR1cm4oXFx1MDAyNmRlc3QtXFx1MDAzZXRvdGFsY29ubnMpO1xcbi1cXHRcXHRpZiAodGMgPT0gUkVBRF9PTkNFKGRlc3QtXFx1MDAzZXVfdGhyZXNob2xkKSlcXG4tXFx0XFx0XFx0aXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoZGVzdCwgMSk7XFxuK1xcdFxcdGlmICh0YyBcXHUwMDNlPSBSRUFEX09OQ0UoZGVzdC1cXHUwMDNldV90aHJlc2hvbGRfdmFsKSlcXG4rXFx0XFx0XFx0aXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoZGVzdCwgdHJ1ZSk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdC8qIEl0IGlzIGEgcGVyc2lzdGVudCBjb25uZWN0aW9uL3RlbXBsYXRlLCBzbyBpbmNyZWFzZVxcbiBcXHRcXHQgICB0aGUgcGVyc2lzdGVudCBjb25uZWN0aW9uIGNvdW50ZXIgKi9cXG5AQCAtMTI0Myw4ICsxMjQzLDggQEAgc3RhdGljIGlubGluZSB2b2lkIGlwX3ZzX3VuYmluZF9kZXN0KHN0cnVjdCBpcF92c19jb25uICpjcClcXG4gXFx0XFx0aWYgKCEoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX0lOQUNUSVZFKSlcXG4gXFx0XFx0XFx0YXRvbWljX2RlYyhcXHUwMDI2ZGVzdC1cXHUwMDNlYWN0aXZlY29ubnMpO1xcbiBcXHRcXHR0YyA9IGF0b21pY19mZXRjaF9kZWMoXFx1MDAyNmRlc3QtXFx1MDAzZXRvdGFsY29ubnMpO1xcbi1cXHRcXHRpZiAodGMgPT0gUkVBRF9PTkNFKGRlc3QtXFx1MDAzZWxfdGhyZXNob2xkX3ZhbCkpXFxuLVxcdFxcdFxcdGlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKGRlc3QsIC0xKTtcXG4rXFx0XFx0aWYgKHRjIFxcdTAwM2M9IFJFQURfT05DRShkZXN0LVxcdTAwM2VsX3RocmVzaG9sZF92YWwpKVxcbitcXHRcXHRcXHRpcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChkZXN0LCBmYWxzZSk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdC8qIEl0IGlzIGEgcGVyc2lzdGVudCBjb25uZWN0aW9uL3RlbXBsYXRlLCBzbyBkZWNyZWFzZVxcbiBcXHRcXHQgICB0aGUgcGVyc2lzdGVudCBjb25uZWN0aW9uIGNvdW50ZXIgKi9cXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jXFxuaW5kZXggNGMxYzczOTQ0NmI3Ni4uMzAwMzU0N2RjYWJlNSAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmNcXG5AQCAtMTMwOSwzMiArMTMwOSwzMiBAQCB2b2lkIGlwX3ZzX3N0YXRzX2ZyZWUoc3RydWN0IGlwX3ZzX3N0YXRzICpzdGF0cylcXG4gICogLSBjb25ucyByZWFjaCB1X3RocmVzaG9sZCBhbmQgZXhjZWVkIGl0OiBzZXQgdGhlIGZsYWdcXG4gICogLSBjb25ucyBnbyBiZWxvdyBsX3RocmVzaG9sZCAob3IgNzUlIG9mIHVfdGhyZXNob2xkKTogY2xlYXIgdGhlIGZsYWdcXG4gICovXFxuLXN0YXRpYyB2b2lkIF9faXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QsIGludCBtb2RlKVxcbitzdGF0aWMgdm9pZCBfX2lwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKHN0cnVjdCBpcF92c19kZXN0ICpkZXN0LCBib29sIG92ZXJsb2FkKVxcbiB7XFxuIFxcdGludCBjb25ucztcXG4gXFx0dTMyIGwsIHU7XFxuIFxcbiBcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZkZXN0LVxcdTAwM2Vkc3RfbG9jayk7XFxuIFxcdHUgPSBSRUFEX09OQ0UoZGVzdC1cXHUwMDNldV90aHJlc2hvbGQpO1xcbi1cXHRpZiAoIXUpXFxuLVxcdFxcdGdvdG8gdW5zZXQ7XFxuLVxcdGwgPSBSRUFEX09OQ0UoZGVzdC1cXHUwMDNlbF90aHJlc2hvbGRfdmFsKTtcXG4tXFx0Y29ubnMgPSBhdG9taWNfcmVhZChcXHUwMDI2ZGVzdC1cXHUwMDNldG90YWxjb25ucyk7XFxuLVxcdGlmIChjb25ucyBcXHUwMDNlPSAobW9kZSBcXHUwMDNlIDAgPyBsIDogdSkpIHtcXG4tXFx0XFx0ZGVzdC1cXHUwMDNlZmxhZ3MgfD0gSVBfVlNfREVTVF9GX09WRVJMT0FEO1xcbi1cXHRcXHRyZXR1cm47XFxuK1xcdGlmICh1KSB7XFxuK1xcdFxcdC8qIExvdyB0aHJlc2hvbGQgZGVmYXVsdHMgdG8gNzUlIG9mIHVwcGVyIHRocmVzaG9sZCAqL1xcbitcXHRcXHRsID0gUkVBRF9PTkNFKGRlc3QtXFx1MDAzZWxfdGhyZXNob2xkKSA/IDogKHUgLSAodSBcXHUwMDNlXFx1MDAzZSAyKSk7XFxuK1xcdFxcdGNvbm5zID0gYXRvbWljX3JlYWQoXFx1MDAyNmRlc3QtXFx1MDAzZXRvdGFsY29ubnMpO1xcbitcXHRcXHRpZiAoY29ubnMgXFx1MDAzZT0gKG92ZXJsb2FkID8gbCA6IHUpKSB7XFxuK1xcdFxcdFxcdFdSSVRFX09OQ0UoZGVzdC1cXHUwMDNldV90aHJlc2hvbGRfdmFsLCBJTlRfTUFYKTtcXG4rXFx0XFx0XFx0V1JJVEVfT05DRShkZXN0LVxcdTAwM2VsX3RocmVzaG9sZF92YWwsIGwpO1xcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdH1cXG4gXFx0fVxcbi1cXHRpZiAoY29ubnMgXFx1MDAzZT0gKG1vZGUgXFx1MDAzYyAwID8gdSA6IGwpKVxcbi1cXHRcXHRyZXR1cm47XFxuIFxcbi11bnNldDpcXG4tXFx0ZGVzdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfklQX1ZTX0RFU1RfRl9PVkVSTE9BRDtcXG4rXFx0V1JJVEVfT05DRShkZXN0LVxcdTAwM2V1X3RocmVzaG9sZF92YWwsIHUgPyA6IElOVF9NQVgpO1xcbitcXHRXUklURV9PTkNFKGRlc3QtXFx1MDAzZWxfdGhyZXNob2xkX3ZhbCwgMCk7XFxuIH1cXG4gXFxuLXZvaWQgaXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QsIGludCBtb2RlKVxcbit2b2lkIGlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKHN0cnVjdCBpcF92c19kZXN0ICpkZXN0LCBib29sIG92ZXJsb2FkKVxcbiB7XFxuIFxcdHNwaW5fbG9ja19iaChcXHUwMDI2ZGVzdC1cXHUwMDNlZHN0X2xvY2spO1xcbi1cXHRfX2lwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKGRlc3QsIG1vZGUpO1xcbitcXHRfX2lwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKGRlc3QsIG92ZXJsb2FkKTtcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmRlc3QtXFx1MDAzZWRzdF9sb2NrKTtcXG4gfVxcbiBcXG5AQCAtMTQwNiwxNSArMTQwNiwxMyBAQCBfX2lwX3ZzX3VwZGF0ZV9kZXN0KHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIHN0cnVjdCBpcF92c19kZXN0ICpkZXN0LFxcbiBcXG4gXFx0aWYgKFJFQURfT05DRShkZXN0LVxcdTAwM2V1X3RocmVzaG9sZCkgIT0gdWRlc3QtXFx1MDAzZXVfdGhyZXNob2xkIHx8XFxuIFxcdCAgICBSRUFEX09OQ0UoZGVzdC1cXHUwMDNlbF90aHJlc2hvbGQpICE9IHVkZXN0LVxcdTAwM2VsX3RocmVzaG9sZCkge1xcbitcXHRcXHRib29sIG92ZXJsb2FkO1xcbitcXG4gXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZkZXN0LVxcdTAwM2Vkc3RfbG9jayk7XFxuIFxcdFxcdFdSSVRFX09OQ0UoZGVzdC1cXHUwMDNldV90aHJlc2hvbGQsIHVkZXN0LVxcdTAwM2V1X3RocmVzaG9sZCk7XFxuIFxcdFxcdFdSSVRFX09OQ0UoZGVzdC1cXHUwMDNlbF90aHJlc2hvbGQsIHVkZXN0LVxcdTAwM2VsX3RocmVzaG9sZCk7XFxuLVxcdFxcdC8qIExvdyB0aHJlc2hvbGQgZGVmYXVsdHMgdG8gNzUlIG9mIHVwcGVyIHRocmVzaG9sZCAqL1xcbi1cXHRcXHRXUklURV9PTkNFKGRlc3QtXFx1MDAzZWxfdGhyZXNob2xkX3ZhbCxcXG4tXFx0XFx0XFx0ICAgdWRlc3QtXFx1MDAzZWxfdGhyZXNob2xkID8gOlxcbi1cXHRcXHRcXHQgICAodWRlc3QtXFx1MDAzZXVfdGhyZXNob2xkIC1cXG4tXFx0XFx0XFx0ICAgICh1ZGVzdC1cXHUwMDNldV90aHJlc2hvbGQgXFx1MDAzZVxcdTAwM2UgMikpKTtcXG4tXFx0XFx0X19pcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChkZXN0LCAwKTtcXG4rXFx0XFx0b3ZlcmxvYWQgPSBpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCk7XFxuK1xcdFxcdF9faXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoZGVzdCwgb3ZlcmxvYWQpO1xcbiBcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2ZGVzdC1cXHUwMDNlZHN0X2xvY2spO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZGguYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19kaC5jXFxuaW5kZXggNDNhYmVkN2EyNmE2YS4uOTVlNTI5NTBhZGJiNyAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZGguY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19kaC5jXFxuQEAgLTE5NSwxNiArMTk1LDYgQEAgc3RhdGljIGludCBpcF92c19kaF9kZXN0X2NoYW5nZWQoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YyxcXG4gfVxcbiBcXG4gXFxuLS8qXFxuLSAqICAgICAgSWYgdGhlIGRlc3QgZmxhZ3MgaXMgc2V0IHdpdGggSVBfVlNfREVTVF9GX09WRVJMT0FELFxcbi0gKiAgICAgIGNvbnNpZGVyIHRoYXQgdGhlIHNlcnZlciBpcyBvdmVybG9hZGVkIGhlcmUuXFxuLSAqL1xcbi1zdGF0aWMgaW5saW5lIGludCBpc19vdmVybG9hZGVkKHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KVxcbi17XFxuLVxcdHJldHVybiBkZXN0LVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRDtcXG4tfVxcbi1cXG4tXFxuIC8qXFxuICAqICAgICAgRGVzdGluYXRpb24gaGFzaGluZyBzY2hlZHVsaW5nXFxuICAqL1xcbkBAIC0yMTksMTAgKzIwOSw4IEBAIGlwX3ZzX2RoX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcbiBcXHRzID0gKHN0cnVjdCBpcF92c19kaF9zdGF0ZSAqKSBzdmMtXFx1MDAzZXNjaGVkX2RhdGE7XFxuIFxcdGRlc3QgPSBpcF92c19kaF9nZXQoc3ZjLVxcdTAwM2VhZiwgcywgXFx1MDAyNmlwaC1cXHUwMDNlZGFkZHIpO1xcbi1cXHRpZiAoIWRlc3QgfHxcXG4tXFx0ICAgICEoZGVzdC1cXHUwMDNlY2ZsYWdzIFxcdTAwMjYgSVBfVlNfREVTVF9DRl9BVkFJTEFCTEUpXFxuLVxcdCAgICB8fCBhdG9taWNfcmVhZChcXHUwMDI2ZGVzdC1cXHUwMDNld2VpZ2h0KSBcXHUwMDNjPSAwXFxuLVxcdCAgICB8fCBpc19vdmVybG9hZGVkKGRlc3QpKSB7XFxuK1xcdGlmICghZGVzdCB8fCBhdG9taWNfcmVhZChcXHUwMDI2ZGVzdC1cXHUwMDNld2VpZ2h0KSBcXHUwMDNjPSAwIHx8XFxuK1xcdCAgICBpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkpIHtcXG4gXFx0XFx0aXBfdnNfc2NoZWR1bGVyX2VycihzdmMsIFxcXCJubyBkZXN0aW5hdGlvbiBhdmFpbGFibGVcXFwiKTtcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2ZvLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZm8uY1xcbmluZGV4IGQ2NTdiNDdjNjUxMWYuLmUwN2ZhMzNmNmQ1MjcgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2ZvLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZm8uY1xcbkBAIC0yOSw3ICsyOSw3IEBAIGlwX3ZzX2ZvX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdCAqIEZpbmQgdmlydHVhbCBzZXJ2ZXIgd2l0aCBoaWdoZXN0IHdlaWdodCBhbmQgc2VuZCBpdCB0cmFmZmljXFxuIFxcdCAqL1xcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkZXN0LCBcXHUwMDI2c3ZjLVxcdTAwM2VkZXN0aW5hdGlvbnMsIG5fbGlzdCkge1xcbi1cXHRcXHRpZiAoIShkZXN0LVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0aWYgKCFpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIGF0b21pY19yZWFkKFxcdTAwMjZkZXN0LVxcdTAwM2V3ZWlnaHQpIFxcdTAwM2UgaHcpIHtcXG4gXFx0XFx0XFx0aHdlaWdodCA9IGRlc3Q7XFxuIFxcdFxcdFxcdGh3ID0gYXRvbWljX3JlYWQoXFx1MDAyNmRlc3QtXFx1MDAzZXdlaWdodCk7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsYy5jXFxuaW5kZXggNjkzYmNjODJjY2I3Ny4uYmZmMTA5YzFjOTU5YiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsYy5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGMuY1xcbkBAIC00MTQsNyArNDE0LDcgQEAgX19pcF92c19sYmxjX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMpXFxuIFxcdCAqIG5ldyBjb25uZWN0aW9uLlxcbiBcXHQgKi9cXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZGVzdCwgXFx1MDAyNnN2Yy1cXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcXG4tXFx0XFx0aWYgKGRlc3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKVxcbitcXHRcXHRpZiAoaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0aWYgKGF0b21pY19yZWFkKFxcdTAwMjZkZXN0LVxcdTAwM2V3ZWlnaHQpIFxcdTAwM2UgMCkge1xcbiBcXHRcXHRcXHRsZWFzdCA9IGRlc3Q7XFxuQEAgLTQyOSw3ICs0MjksNyBAQCBfX2lwX3ZzX2xibGNfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YylcXG4gXFx0ICovXFxuICAgbmV4dHN0YWdlOlxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShkZXN0LCBcXHUwMDI2c3ZjLVxcdTAwM2VkZXN0aW5hdGlvbnMsIG5fbGlzdCkge1xcbi1cXHRcXHRpZiAoZGVzdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpXFxuK1xcdFxcdGlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0ZG9oID0gaXBfdnNfZGVzdF9jb25uX292ZXJoZWFkKGRlc3QpO1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsY3IuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjci5jXFxuaW5kZXggZjUzZjA1Y2VlYTM2Zi4uYzI4NTNlMDdlNzg3MiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsY3IuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjci5jXFxuQEAgLTE2Niw3ICsxNjYsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpcF92c19kZXN0ICppcF92c19kZXN0X3NldF9taW4oc3RydWN0IGlwX3ZzX2Rlc3Rfc2V0ICpzZXQpXFxuIFxcdC8qIHNlbGVjdCB0aGUgZmlyc3QgZGVzdGluYXRpb24gc2VydmVyLCB3aG9zZSB3ZWlnaHQgXFx1MDAzZSAwICovXFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGUsIFxcdTAwMjZzZXQtXFx1MDAzZWxpc3QsIGxpc3QpIHtcXG4gXFx0XFx0bGVhc3QgPSBlLVxcdTAwM2VkZXN0O1xcbi1cXHRcXHRpZiAobGVhc3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKVxcbitcXHRcXHRpZiAoaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGxlYXN0KSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbiBcXHRcXHRpZiAoKGF0b21pY19yZWFkKFxcdTAwMjZsZWFzdC1cXHUwMDNld2VpZ2h0KSBcXHUwMDNlIDApIFxcdTAwMjZcXHUwMDI2XFxuQEAgLTE4MSw3ICsxODEsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpcF92c19kZXN0ICppcF92c19kZXN0X3NldF9taW4oc3RydWN0IGlwX3ZzX2Rlc3Rfc2V0ICpzZXQpXFxuICAgbmV4dHN0YWdlOlxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShlLCBcXHUwMDI2c2V0LVxcdTAwM2VsaXN0LCBsaXN0KSB7XFxuIFxcdFxcdGRlc3QgPSBlLVxcdTAwM2VkZXN0O1xcbi1cXHRcXHRpZiAoZGVzdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpXFxuK1xcdFxcdGlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0ZG9oID0gaXBfdnNfZGVzdF9jb25uX292ZXJoZWFkKGRlc3QpO1xcbkBAIC01NzcsNyArNTc3LDcgQEAgX19pcF92c19sYmxjcl9zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjKVxcbiBcXHQgKiBuZXcgY29ubmVjdGlvbi5cXG4gXFx0ICovXFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsIFxcdTAwMjZzdmMtXFx1MDAzZWRlc3RpbmF0aW9ucywgbl9saXN0KSB7XFxuLVxcdFxcdGlmIChkZXN0LVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRClcXG4rXFx0XFx0aWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbiBcXHRcXHRpZiAoYXRvbWljX3JlYWQoXFx1MDAyNmRlc3QtXFx1MDAzZXdlaWdodCkgXFx1MDAzZSAwKSB7XFxuQEAgLTU5Myw3ICs1OTMsNyBAQCBfX2lwX3ZzX2xibGNyX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMpXFxuIFxcdCAqL1xcbiAgIG5leHRzdGFnZTpcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yY3UoZGVzdCwgXFx1MDAyNnN2Yy1cXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcXG4tXFx0XFx0aWYgKGRlc3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKVxcbitcXHRcXHRpZiAoaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdGRvaCA9IGlwX3ZzX2Rlc3RfY29ubl9vdmVyaGVhZChkZXN0KTtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xjLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGMuY1xcbmluZGV4IDE4Yjk3NmE3YzRkMjAuLjkwMDJmNDkxYmZmNjggMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xjLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGMuY1xcbkBAIC0zOCw3ICszOCw3IEBAIGlwX3ZzX2xjX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdCAqL1xcbiBcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZGVzdCwgXFx1MDAyNnN2Yy1cXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcXG4tXFx0XFx0aWYgKChkZXN0LVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRCkgfHxcXG4rXFx0XFx0aWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSB8fFxcbiBcXHRcXHQgICAgYXRvbWljX3JlYWQoXFx1MDAyNmRlc3QtXFx1MDAzZXdlaWdodCkgPT0gMClcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdGRvaCA9IGlwX3ZzX2Rlc3RfY29ubl9vdmVyaGVhZChkZXN0KTtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX21oLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbWguY1xcbmluZGV4IDAyMDg2MzA0NzU2MmQuLmQ3MGIyM2FlYzVmZWMgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX21oLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbWguY1xcbkBAIC04MCw3ICs4MCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZW5lcmF0ZV9oYXNoX3NlY3JldChoc2lwaGFzaF9rZXlfdCAqaGFzaDEsXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBpc191bmF2YWlsYWJsZShzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcXG4ge1xcbiBcXHRyZXR1cm4gYXRvbWljX3JlYWQoXFx1MDAyNmRlc3QtXFx1MDAzZXdlaWdodCkgXFx1MDAzYz0gMCB8fFxcbi1cXHQgICAgICAgZGVzdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQ7XFxuK1xcdCAgICAgICBpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCk7XFxuIH1cXG4gXFxuIC8qIFJldHVybnMgaGFzaCB2YWx1ZSBmb3IgSVBWUyBNSCBlbnRyeSAqL1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbnEuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19ucS5jXFxuaW5kZXggYWRhMTU4YzYxMGNlMS4uN2NjMjg5MDIwODZlNyAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbnEuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19ucS5jXFxuQEAgLTcyLDcgKzcyLDcgQEAgaXBfdnNfbnFfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsIFxcdTAwMjZzdmMtXFx1MDAzZWRlc3RpbmF0aW9ucywgbl9saXN0KSB7XFxuIFxcbi1cXHRcXHRpZiAoZGVzdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQgfHxcXG4rXFx0XFx0aWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSB8fFxcbiBcXHRcXHQgICAgIWF0b21pY19yZWFkKFxcdTAwMjZkZXN0LVxcdTAwM2V3ZWlnaHQpKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19vdmYuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19vdmYuY1xcbmluZGV4IGM1YzY3ZGY4MGEwYjMuLmVhYTNhN2FlNmVmYTYgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX292Zi5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX292Zi5jXFxuQEAgLTMzLDcgKzMzLDcgQEAgaXBfdnNfb3ZmX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdCovXFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsIFxcdTAwMjZzdmMtXFx1MDAzZWRlc3RpbmF0aW9ucywgbl9saXN0KSB7XFxuIFxcdFxcdHcgPSBhdG9taWNfcmVhZChcXHUwMDI2ZGVzdC1cXHUwMDNld2VpZ2h0KTtcXG4tXFx0XFx0aWYgKChkZXN0LVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRCkgfHxcXG4rXFx0XFx0aWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSB8fFxcbiBcXHRcXHQgICAgYXRvbWljX3JlYWQoXFx1MDAyNmRlc3QtXFx1MDAzZWFjdGl2ZWNvbm5zKSBcXHUwMDNlIHcgfHxcXG4gXFx0XFx0ICAgIHcgPT0gMClcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19yci5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3JyLmNcXG5pbmRleCA0MTI1ZWU1NjFjZGMzLi5iZDE3Y2RkMDkyZjVmIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19yci5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3JyLmNcXG5AQCAtNjYsNyArNjYsNyBAQCBpcF92c19ycl9zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShkZXN0LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnN2Yy1cXHUwMDNlZGVzdGluYXRpb25zLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgbl9saXN0KSB7XFxuLVxcdFxcdFxcdGlmICghKGRlc3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRpZiAoIWlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHQgICAgYXRvbWljX3JlYWQoXFx1MDAyNmRlc3QtXFx1MDAzZXdlaWdodCkgXFx1MDAzZSAwKVxcbiBcXHRcXHRcXHRcXHQvKiBISVQgKi9cXG4gXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zZWQuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zZWQuY1xcbmluZGV4IDI0NWEzMjNjODRjZDMuLjc5MjVmNGQyOGZjZTkgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NlZC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NlZC5jXFxuQEAgLTc1LDcgKzc1LDcgQEAgaXBfdnNfc2VkX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdCAqL1xcbiBcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZGVzdCwgXFx1MDAyNnN2Yy1cXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcXG4tXFx0XFx0aWYgKCEoZGVzdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdGlmICghaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICBhdG9taWNfcmVhZChcXHUwMDI2ZGVzdC1cXHUwMDNld2VpZ2h0KSBcXHUwMDNlIDApIHtcXG4gXFx0XFx0XFx0bGVhc3QgPSBkZXN0O1xcbiBcXHRcXHRcXHRsb2ggPSBpcF92c19zZWRfZGVzdF9vdmVyaGVhZChsZWFzdCk7XFxuQEAgLTkwLDcgKzkwLDcgQEAgaXBfdnNfc2VkX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdCAqL1xcbiAgIG5leHRzdGFnZTpcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yY3UoZGVzdCwgXFx1MDAyNnN2Yy1cXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcXG4tXFx0XFx0aWYgKGRlc3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKVxcbitcXHRcXHRpZiAoaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0ZG9oID0gaXBfdnNfc2VkX2Rlc3Rfb3ZlcmhlYWQoZGVzdCk7XFxuIFxcdFxcdGlmICgoX19zNjQpbG9oICogYXRvbWljX3JlYWQoXFx1MDAyNmRlc3QtXFx1MDAzZXdlaWdodCkgXFx1MDAzZVxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2guYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zaC5jXFxuaW5kZXggY2Q2NzA2NmUzYjI2MS4uYzI0ZGQ1Y2I3ZTQ3OCAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2guY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zaC5jXFxuQEAgLTczLDcgKzczLDcgQEAgc3RydWN0IGlwX3ZzX3NoX3N0YXRlIHtcXG4gc3RhdGljIGlubGluZSBib29sIGlzX3VuYXZhaWxhYmxlKHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KVxcbiB7XFxuIFxcdHJldHVybiBhdG9taWNfcmVhZChcXHUwMDI2ZGVzdC1cXHUwMDNld2VpZ2h0KSBcXHUwMDNjPSAwIHx8XFxuLVxcdCAgICAgICBkZXN0LVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRDtcXG4rXFx0ICAgICAgIGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KTtcXG4gfVxcbiBcXG4gLypcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3R3b3MuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c190d29zLmNcXG5pbmRleCBkYmI3ZjVmZDQ2ODhhLi44NjE4NjEyMmExZjAxIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c190d29zLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfdHdvcy5jXFxuQEAgLTUyLDcgKzUyLDcgQEAgc3RhdGljIHN0cnVjdCBpcF92c19kZXN0ICppcF92c190d29zX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsXFxuIFxcbiBcXHQvKiBHZW5lcmF0ZSBhIHJhbmRvbSB3ZWlnaHQgYmV0d2VlbiBbMCxzdW0gb2YgYWxsIHdlaWdodHMpICovXFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsIFxcdTAwMjZzdmMtXFx1MDAzZWRlc3RpbmF0aW9ucywgbl9saXN0KSB7XFxuLVxcdFxcdGlmICghKGRlc3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKSkge1xcbitcXHRcXHRpZiAoIWlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSkge1xcbiBcXHRcXHRcXHR3ZWlnaHQgPSBhdG9taWNfcmVhZChcXHUwMDI2ZGVzdC1cXHUwMDNld2VpZ2h0KTtcXG4gXFx0XFx0XFx0aWYgKHdlaWdodCBcXHUwMDNlIDApIHtcXG4gXFx0XFx0XFx0XFx0dG90YWxfd2VpZ2h0ICs9IHdlaWdodDtcXG5AQCAtNzUsNyArNzUsNyBAQCBzdGF0aWMgc3RydWN0IGlwX3ZzX2Rlc3QgKmlwX3ZzX3R3b3Nfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YyxcXG4gXFxuIFxcdC8qIFBpY2sgdHdvIHdlaWdodGVkIHNlcnZlcnMgKi9cXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZGVzdCwgXFx1MDAyNnN2Yy1cXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcXG4tXFx0XFx0aWYgKGRlc3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKVxcbitcXHRcXHRpZiAoaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdHdlaWdodCA9IGF0b21pY19yZWFkKFxcdTAwMjZkZXN0LVxcdTAwM2V3ZWlnaHQpO1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd2xjLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd2xjLmNcXG5pbmRleCA5ZGE0NDVjYTA5YTE0Li4wOGU5ZTIyZjcyYmY4IDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c193bGMuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c193bGMuY1xcbkBAIC00Nyw3ICs0Nyw3IEBAIGlwX3ZzX3dsY19zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHQgKi9cXG4gXFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsIFxcdTAwMjZzdmMtXFx1MDAzZWRlc3RpbmF0aW9ucywgbl9saXN0KSB7XFxuLVxcdFxcdGlmICghKGRlc3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRpZiAoIWlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgYXRvbWljX3JlYWQoXFx1MDAyNmRlc3QtXFx1MDAzZXdlaWdodCkgXFx1MDAzZSAwKSB7XFxuIFxcdFxcdFxcdGxlYXN0ID0gZGVzdDtcXG4gXFx0XFx0XFx0bG9oID0gaXBfdnNfZGVzdF9jb25uX292ZXJoZWFkKGxlYXN0KTtcXG5AQCAtNjIsNyArNjIsNyBAQCBpcF92c193bGNfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0ICovXFxuICAgbmV4dHN0YWdlOlxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShkZXN0LCBcXHUwMDI2c3ZjLVxcdTAwM2VkZXN0aW5hdGlvbnMsIG5fbGlzdCkge1xcbi1cXHRcXHRpZiAoZGVzdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpXFxuK1xcdFxcdGlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRkb2ggPSBpcF92c19kZXN0X2Nvbm5fb3ZlcmhlYWQoZGVzdCk7XFxuIFxcdFxcdGlmICgoX19zNjQpbG9oICogYXRvbWljX3JlYWQoXFx1MDAyNmRlc3QtXFx1MDAzZXdlaWdodCkgXFx1MDAzZVxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd3JyLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd3JyLmNcXG5pbmRleCAyZGNmZjEwNDBkYTUyLi5mYWQ2OWJhZTVhMjJiIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c193cnIuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c193cnIuY1xcbkBAIC0xNzYsNyArMTc2LDcgQEAgaXBfdnNfd3JyX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmN1KGRlc3QsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2c3ZjLVxcdTAwM2VkZXN0aW5hdGlvbnMsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCBuX2xpc3QpIHtcXG4tXFx0XFx0XFx0aWYgKCEoZGVzdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdGlmICghaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdCAgICBhdG9taWNfcmVhZChcXHUwMDI2ZGVzdC1cXHUwMDNld2VpZ2h0KSBcXHUwMDNlPSBtYXJrLVxcdTAwM2VjdylcXG4gXFx0XFx0XFx0XFx0Z290byBmb3VuZDtcXG4gXFx0XFx0XFx0aWYgKGRlc3QgPT0gc3RvcClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6MTA6MTguMjA2ODY1Mzg1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo4OTYyOTM4NTIxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9WU1wiLFxuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWRcIixcbiAgICBcImlwX3ZzX2JpbmRfZGVzdFwiLFxuICAgIFwiaXBfdnNfdW5iaW5kX2Rlc3RcIixcbiAgICBcIl9faXBfdnNfdXBkYXRlX2Rlc3RcIixcbiAgICBcImlwX3ZzX2VkaXRfZGVzdFwiLFxuICAgIFwiaXBfdnNfYWRkX2Rlc3RcIixcbiAgICBcImlwX3ZzX3JyX3NjaGVkdWxlXCIsXG4gICAgXCJpcF92c193cnJfc2NoZWR1bGVcIixcbiAgICBcImlwX3ZzX3dsY19zY2hlZHVsZVwiLFxuICAgIFwiaXBfdnNfbGNfc2NoZWR1bGVcIixcbiAgICBcImlwX3ZzX2ZvX3NjaGVkdWxlXCIsXG4gICAgXCJpcF92c19vdmZfc2NoZWR1bGVcIixcbiAgICBcImlwX3ZzX3R3b3Nfc2NoZWR1bGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZGVzdGluYXRpb24gb3ZlcmxvYWQgdHJhY2tpbmcgbG9naWMgYW5kIGRlc3RpbmF0aW9uIHN0cnVjdHVyZSBsYXlvdXQgaW4gdGhlIElQVlMgKElQIFZpcnR1YWwgU2VydmVyKSBzdWJzeXN0ZW0uIEl0IHVwZGF0ZXMgY29ubmVjdGlvbiBiaW5kaW5nIGFuZCB1bmJpbmRpbmcgdGhyZXNob2xkcywgY29udHJvbCBwbGFuZSBkZXN0aW5hdGlvbiB1cGRhdGVzLCBhbmQgc2NoZWR1bGVyIG92ZXJsb2FkIGV2YWx1YXRpb24gYWNyb3NzIElQVlMgYWxnb3JpdGhtcy4gVGhlc2UgYXJlIHJlYWNoYWJsZSwgZXhlY3V0YWJsZSBuZXR3b3JrIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZCBmb3IgcmFjZSBjb25kaXRpb25zLCBhcml0aG1ldGljIG9yIHN0YXRlIGhhbmRsaW5nIGJ1Z3MsIGFuZCB0aHJlc2hvbGQgZWRnZSBjYXNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhMDI5YzE4NTM5ZTJiZDQzOTNiYjg3MzZkZjAwMDNlNDIyY2I3YzliXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAyMjoxMDoxNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX3ZzLmggYi9pbmNsdWRlL25ldC9pcF92cy5oXG5pbmRleCAzMmZkZTczMWJjZWI3Li45YTgzYmZmMzI1NjlkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXBfdnMuaFxuKysrIGIvaW5jbHVkZS9uZXQvaXBfdnMuaFxuQEAgLTM2LDkgKzM2LDYgQEBcbiAjZGVmaW5lIElQX1ZTX0hEUl9JTlZFUlNFXHQxXG4gI2RlZmluZSBJUF9WU19IRFJfSUNNUFx0XHQyXG4gXG4tLyogRGVzdGluYXRpb24gU2VydmVyIEZsYWdzICovXG4tI2RlZmluZSBJUF9WU19ERVNUX0ZfT1ZFUkxPQURcdDB4MDAwMlx0XHQvKiBzZXJ2ZXIgaXMgb3ZlcmxvYWRlZCAqL1xuLVxuIC8qIERlc3RpbmF0aW9uIFNlcnZlciBDb25maWcgRmxhZ3MgKi9cbiAjZGVmaW5lIElQX1ZTX0RFU1RfQ0ZfQVZBSUxBQkxFXHQweDAwMDFcdFx0Lyogc2VydmVyIGlzIGF2YWlsYWJsZSAqL1xuIFxuQEAgLTk3MywzMiArOTcwLDQzIEBAIHN0cnVjdCBpcF92c19kZXN0X2RzdCB7XG4gICogYW5kIHNvIG9uLlxuICAqL1xuIHN0cnVjdCBpcF92c19kZXN0IHtcbitcdC8qIENhY2hlbGluZSBmb3IgaGFzaCB0YWJsZSBub2RlcyAtIHJlYWQtbW9zdGx5ICovXG4rXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRuX2xpc3Q7ICAgLyogZm9yIHRoZSBkZXN0cyBpbiB0aGUgc2VydmljZSAqL1xuIFx0c3RydWN0IGhsaXN0X25vZGVcdGRfbGlzdDsgICAvKiBmb3IgdGFibGUgd2l0aCBhbGwgdGhlIGRlc3RzICovXG4gXG4tXHR1MTZcdFx0XHRhZjtcdFx0LyogYWRkcmVzcyBmYW1pbHkgKi9cbi1cdF9fYmUxNlx0XHRcdHBvcnQ7XHRcdC8qIHBvcnQgbnVtYmVyIG9mIHRoZSBzZXJ2ZXIgKi9cbi1cdHVuaW9uIG5mX2luZXRfYWRkclx0YWRkcjtcdFx0LyogSVAgYWRkcmVzcyBvZiB0aGUgc2VydmVyICovXG4tXHR2b2xhdGlsZSB1bnNpZ25lZCBpbnRcdGZsYWdzO1x0XHQvKiBkZXN0IHN0YXR1cyBmbGFncyAqL1xuLVx0YXRvbWljX3RcdFx0Y29ubl9mbGFncztcdC8qIGZsYWdzIHRvIGNvcHkgdG8gY29ubiAqL1xuIFx0YXRvbWljX3RcdFx0d2VpZ2h0O1x0XHQvKiBzZXJ2ZXIgd2VpZ2h0ICovXG4tXHR1bnNpZ25lZCBsb25nXHRcdGNmbGFncztcdFx0LyogY29uZmlnIGZsYWdzICovXG4gXHRhdG9taWNfdFx0XHRsYXN0X3dlaWdodDtcdC8qIHNlcnZlciBsYXRlc3Qgd2VpZ2h0ICovXG4rXG4rXHQvKiBjb25uZWN0aW9uIHRocmVzaG9sZHMgKi9cbitcdHUzMlx0XHRcdGxfdGhyZXNob2xkX3ZhbDsvKiB1c2VkIGxvd2VyIHRocmVzaG9sZCAqL1xuK1x0dTMyXHRcdFx0dV90aHJlc2hvbGRfdmFsOy8qIHVzZWQgdXBwZXIgdGhyZXNob2xkICovXG4rXHQvKiAzMi80OCAqL1xuK1x0dTMyXHRcdFx0bF90aHJlc2hvbGQ7XHQvKiBsb3dlciB0aHJlc2hvbGQgKi9cbitcdHUzMlx0XHRcdHVfdGhyZXNob2xkO1x0LyogdXBwZXIgdGhyZXNob2xkICovXG4rXG4rXHR1bnNpZ25lZCBsb25nXHRcdGNmbGFncztcdFx0LyogY29uZmlnIGZsYWdzICovXG4rXG4rXHQvKiA0NC82NCAqL1xuK1x0YXRvbWljX3RcdFx0Y29ubl9mbGFncztcdC8qIGZsYWdzIHRvIGNvcHkgdG8gY29ubiAqL1xuK1xuIFx0X191MTZcdFx0XHR0dW5fdHlwZTtcdC8qIHR1bm5lbCB0eXBlICovXG4gXHRfX2JlMTZcdFx0XHR0dW5fcG9ydDtcdC8qIHR1bm5lbCBwb3J0ICovXG4gXHRfX3UxNlx0XHRcdHR1bl9mbGFncztcdC8qIHR1bm5lbCBmbGFncyAqL1xuIFxuLVx0cmVmY291bnRfdFx0XHRyZWZjbnQ7XHRcdC8qIHJlZmVyZW5jZSBjb3VudGVyICovXG4tXHRzdHJ1Y3QgaXBfdnNfc3RhdHMgICAgICBzdGF0czsgICAgICAgICAgLyogc3RhdGlzdGljcyAqL1xuLVx0dW5zaWduZWQgbG9uZ1x0XHRpZGxlX3N0YXJ0O1x0Lyogc3RhcnQgdGltZSwgamlmZmllcyAqL1xuK1x0dTE2XHRcdFx0YWY7XHRcdC8qIGFkZHJlc3MgZmFtaWx5ICovXG4rXHRfX2JlMTZcdFx0XHRwb3J0O1x0XHQvKiBwb3J0IG51bWJlciBvZiB0aGUgc2VydmVyICovXG4rXHQvKiA2MC84MCAqL1xuK1x0dW5pb24gbmZfaW5ldF9hZGRyXHRhZGRyO1x0XHQvKiBJUCBhZGRyZXNzIG9mIHRoZSBzZXJ2ZXIgKi9cbiBcbi1cdC8qIGNvbm5lY3Rpb24gY291bnRlcnMgYW5kIHRocmVzaG9sZHMgKi9cbi1cdGF0b21pY190XHRcdGFjdGl2ZWNvbm5zO1x0LyogYWN0aXZlIGNvbm5lY3Rpb25zICovXG4rXHQvKiBjb25uZWN0aW9uIGNvdW50ZXJzICovXG4gXHRhdG9taWNfdFx0XHR0b3RhbGNvbm5zO1x0LyogdG90YWwgY29ubmVjdGlvbnMgKi9cbitcdGF0b21pY190XHRcdGFjdGl2ZWNvbm5zO1x0LyogYWN0aXZlIGNvbm5lY3Rpb25zICovXG4gXHRhdG9taWNfdFx0XHRwZXJzaXN0Y29ubnM7XHQvKiBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zICovXG4tXHRfX3UzMlx0XHRcdHVfdGhyZXNob2xkO1x0LyogdXBwZXIgdGhyZXNob2xkICovXG4tXHRfX3UzMlx0XHRcdGxfdGhyZXNob2xkO1x0LyogbG93ZXIgdGhyZXNob2xkICovXG4tXHRfX3UzMlx0XHRcdGxfdGhyZXNob2xkX3ZhbDsvKiB1c2VkIGxvd2VyIHRocmVzaG9sZCAqL1xuK1xuK1x0cmVmY291bnRfdFx0XHRyZWZjbnQ7XHRcdC8qIHJlZmVyZW5jZSBjb3VudGVyICovXG4rXHRzdHJ1Y3QgaXBfdnNfc3RhdHMgICAgICBzdGF0czsgICAgICAgICAgLyogc3RhdGlzdGljcyAqL1xuK1x0dW5zaWduZWQgbG9uZ1x0XHRpZGxlX3N0YXJ0O1x0Lyogc3RhcnQgdGltZSwgamlmZmllcyAqL1xuIFxuIFx0LyogZm9yIGRlc3RpbmF0aW9uIGNhY2hlICovXG4gXHRzcGlubG9ja190XHRcdGRzdF9sb2NrO1x0LyogbG9jayBvZiBkc3RfY2FjaGUgKi9cbkBAIC0xOTE1LDcgKzE5MjMsMTMgQEAgc3RhdGljIGlubGluZSB2b2lkIGlwX3ZzX2Rlc3RfcHV0X2FuZF9mcmVlKHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KVxuIFx0XHRrZnJlZShkZXN0KTtcbiB9XG4gXG4tdm9pZCBpcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCwgaW50IG1vZGUpO1xuK3ZvaWQgaXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QsIGJvb2wgb3ZlcmxvYWQpO1xuK1xuKy8qIENoZWNrIGlmIGRlc3QgaXMgaW4gb3ZlcmxvYWRlZCBzdGF0ZSAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoY29uc3Qgc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QpXG4re1xuK1x0cmV0dXJuIFJFQURfT05DRShkZXN0LVx1MDAzZWxfdGhyZXNob2xkX3ZhbCk7XG4rfVxuIFxuIC8qIElQVlMgc3luYyBkYWVtb24gZGF0YSBhbmQgZnVuY3Rpb24gcHJvdG90eXBlc1xuICAqIChmcm9tIGlwX3ZzX3N5bmMuYylcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uY1xuaW5kZXggNmZhM2UxZGM1MzRjMy4uNTM0OGMyZjQ5YjY0ZSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNcbkBAIC0xMTUwLDggKzExNTAsOCBAQCBpcF92c19iaW5kX2Rlc3Qoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcbiBcdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9JTkFDVElWRSkpXG4gXHRcdFx0YXRvbWljX2luYyhcdTAwMjZkZXN0LVx1MDAzZWFjdGl2ZWNvbm5zKTtcbiBcdFx0dGMgPSBhdG9taWNfaW5jX3JldHVybihcdTAwMjZkZXN0LVx1MDAzZXRvdGFsY29ubnMpO1xuLVx0XHRpZiAodGMgPT0gUkVBRF9PTkNFKGRlc3QtXHUwMDNldV90aHJlc2hvbGQpKVxuLVx0XHRcdGlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKGRlc3QsIDEpO1xuK1x0XHRpZiAodGMgXHUwMDNlPSBSRUFEX09OQ0UoZGVzdC1cdTAwM2V1X3RocmVzaG9sZF92YWwpKVxuK1x0XHRcdGlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKGRlc3QsIHRydWUpO1xuIFx0fSBlbHNlIHtcbiBcdFx0LyogSXQgaXMgYSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24vdGVtcGxhdGUsIHNvIGluY3JlYXNlXG4gXHRcdCAgIHRoZSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24gY291bnRlciAqL1xuQEAgLTEyNDMsOCArMTI0Myw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c191bmJpbmRfZGVzdChzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXG4gXHRcdGlmICghKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfSU5BQ1RJVkUpKVxuIFx0XHRcdGF0b21pY19kZWMoXHUwMDI2ZGVzdC1cdTAwM2VhY3RpdmVjb25ucyk7XG4gXHRcdHRjID0gYXRvbWljX2ZldGNoX2RlYyhcdTAwMjZkZXN0LVx1MDAzZXRvdGFsY29ubnMpO1xuLVx0XHRpZiAodGMgPT0gUkVBRF9PTkNFKGRlc3QtXHUwMDNlbF90aHJlc2hvbGRfdmFsKSlcbi1cdFx0XHRpcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChkZXN0LCAtMSk7XG4rXHRcdGlmICh0YyBcdTAwM2M9IFJFQURfT05DRShkZXN0LVx1MDAzZWxfdGhyZXNob2xkX3ZhbCkpXG4rXHRcdFx0aXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoZGVzdCwgZmFsc2UpO1xuIFx0fSBlbHNlIHtcbiBcdFx0LyogSXQgaXMgYSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24vdGVtcGxhdGUsIHNvIGRlY3JlYXNlXG4gXHRcdCAgIHRoZSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24gY291bnRlciAqL1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuY1xuaW5kZXggNGMxYzczOTQ0NmI3Ni4uMzAwMzU0N2RjYWJlNSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jXG5AQCAtMTMwOSwzMiArMTMwOSwzMiBAQCB2b2lkIGlwX3ZzX3N0YXRzX2ZyZWUoc3RydWN0IGlwX3ZzX3N0YXRzICpzdGF0cylcbiAgKiAtIGNvbm5zIHJlYWNoIHVfdGhyZXNob2xkIGFuZCBleGNlZWQgaXQ6IHNldCB0aGUgZmxhZ1xuICAqIC0gY29ubnMgZ28gYmVsb3cgbF90aHJlc2hvbGQgKG9yIDc1JSBvZiB1X3RocmVzaG9sZCk6IGNsZWFyIHRoZSBmbGFnXG4gICovXG4tc3RhdGljIHZvaWQgX19pcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCwgaW50IG1vZGUpXG4rc3RhdGljIHZvaWQgX19pcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCwgYm9vbCBvdmVybG9hZClcbiB7XG4gXHRpbnQgY29ubnM7XG4gXHR1MzIgbCwgdTtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2ZGVzdC1cdTAwM2Vkc3RfbG9jayk7XG4gXHR1ID0gUkVBRF9PTkNFKGRlc3QtXHUwMDNldV90aHJlc2hvbGQpO1xuLVx0aWYgKCF1KVxuLVx0XHRnb3RvIHVuc2V0O1xuLVx0bCA9IFJFQURfT05DRShkZXN0LVx1MDAzZWxfdGhyZXNob2xkX3ZhbCk7XG4tXHRjb25ucyA9IGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNldG90YWxjb25ucyk7XG4tXHRpZiAoY29ubnMgXHUwMDNlPSAobW9kZSBcdTAwM2UgMCA/IGwgOiB1KSkge1xuLVx0XHRkZXN0LVx1MDAzZWZsYWdzIHw9IElQX1ZTX0RFU1RfRl9PVkVSTE9BRDtcbi1cdFx0cmV0dXJuO1xuK1x0aWYgKHUpIHtcbitcdFx0LyogTG93IHRocmVzaG9sZCBkZWZhdWx0cyB0byA3NSUgb2YgdXBwZXIgdGhyZXNob2xkICovXG4rXHRcdGwgPSBSRUFEX09OQ0UoZGVzdC1cdTAwM2VsX3RocmVzaG9sZCkgPyA6ICh1IC0gKHUgXHUwMDNlXHUwMDNlIDIpKTtcbitcdFx0Y29ubnMgPSBhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZXRvdGFsY29ubnMpO1xuK1x0XHRpZiAoY29ubnMgXHUwMDNlPSAob3ZlcmxvYWQgPyBsIDogdSkpIHtcbitcdFx0XHRXUklURV9PTkNFKGRlc3QtXHUwMDNldV90aHJlc2hvbGRfdmFsLCBJTlRfTUFYKTtcbitcdFx0XHRXUklURV9PTkNFKGRlc3QtXHUwMDNlbF90aHJlc2hvbGRfdmFsLCBsKTtcbitcdFx0XHRyZXR1cm47XG4rXHRcdH1cbiBcdH1cbi1cdGlmIChjb25ucyBcdTAwM2U9IChtb2RlIFx1MDAzYyAwID8gdSA6IGwpKVxuLVx0XHRyZXR1cm47XG4gXG4tdW5zZXQ6XG4tXHRkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNj0gfklQX1ZTX0RFU1RfRl9PVkVSTE9BRDtcbitcdFdSSVRFX09OQ0UoZGVzdC1cdTAwM2V1X3RocmVzaG9sZF92YWwsIHUgPyA6IElOVF9NQVgpO1xuK1x0V1JJVEVfT05DRShkZXN0LVx1MDAzZWxfdGhyZXNob2xkX3ZhbCwgMCk7XG4gfVxuIFxuLXZvaWQgaXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QsIGludCBtb2RlKVxuK3ZvaWQgaXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QsIGJvb2wgb3ZlcmxvYWQpXG4ge1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmRlc3QtXHUwMDNlZHN0X2xvY2spO1xuLVx0X19pcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChkZXN0LCBtb2RlKTtcbitcdF9faXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoZGVzdCwgb3ZlcmxvYWQpO1xuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2ZGVzdC1cdTAwM2Vkc3RfbG9jayk7XG4gfVxuIFxuQEAgLTE0MDYsMTUgKzE0MDYsMTMgQEAgX19pcF92c191cGRhdGVfZGVzdChzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCxcbiBcbiBcdGlmIChSRUFEX09OQ0UoZGVzdC1cdTAwM2V1X3RocmVzaG9sZCkgIT0gdWRlc3QtXHUwMDNldV90aHJlc2hvbGQgfHxcbiBcdCAgICBSRUFEX09OQ0UoZGVzdC1cdTAwM2VsX3RocmVzaG9sZCkgIT0gdWRlc3QtXHUwMDNlbF90aHJlc2hvbGQpIHtcbitcdFx0Ym9vbCBvdmVybG9hZDtcbitcbiBcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmRlc3QtXHUwMDNlZHN0X2xvY2spO1xuIFx0XHRXUklURV9PTkNFKGRlc3QtXHUwMDNldV90aHJlc2hvbGQsIHVkZXN0LVx1MDAzZXVfdGhyZXNob2xkKTtcbiBcdFx0V1JJVEVfT05DRShkZXN0LVx1MDAzZWxfdGhyZXNob2xkLCB1ZGVzdC1cdTAwM2VsX3RocmVzaG9sZCk7XG4tXHRcdC8qIExvdyB0aHJlc2hvbGQgZGVmYXVsdHMgdG8gNzUlIG9mIHVwcGVyIHRocmVzaG9sZCAqL1xuLVx0XHRXUklURV9PTkNFKGRlc3QtXHUwMDNlbF90aHJlc2hvbGRfdmFsLFxuLVx0XHRcdCAgIHVkZXN0LVx1MDAzZWxfdGhyZXNob2xkID8gOlxuLVx0XHRcdCAgICh1ZGVzdC1cdTAwM2V1X3RocmVzaG9sZCAtXG4tXHRcdFx0ICAgICh1ZGVzdC1cdTAwM2V1X3RocmVzaG9sZCBcdTAwM2VcdTAwM2UgMikpKTtcbi1cdFx0X19pcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChkZXN0LCAwKTtcbitcdFx0b3ZlcmxvYWQgPSBpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCk7XG4rXHRcdF9faXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoZGVzdCwgb3ZlcmxvYWQpO1xuIFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZkZXN0LVx1MDAzZWRzdF9sb2NrKTtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZGguYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19kaC5jXG5pbmRleCA0M2FiZWQ3YTI2YTZhLi45NWU1Mjk1MGFkYmI3IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2RoLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19kaC5jXG5AQCAtMTk1LDE2ICsxOTUsNiBAQCBzdGF0aWMgaW50IGlwX3ZzX2RoX2Rlc3RfY2hhbmdlZChzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLFxuIH1cbiBcbiBcbi0vKlxuLSAqICAgICAgSWYgdGhlIGRlc3QgZmxhZ3MgaXMgc2V0IHdpdGggSVBfVlNfREVTVF9GX09WRVJMT0FELFxuLSAqICAgICAgY29uc2lkZXIgdGhhdCB0aGUgc2VydmVyIGlzIG92ZXJsb2FkZWQgaGVyZS5cbi0gKi9cbi1zdGF0aWMgaW5saW5lIGludCBpc19vdmVybG9hZGVkKHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KVxuLXtcbi1cdHJldHVybiBkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQ7XG4tfVxuLVxuLVxuIC8qXG4gICogICAgICBEZXN0aW5hdGlvbiBoYXNoaW5nIHNjaGVkdWxpbmdcbiAgKi9cbkBAIC0yMTksMTAgKzIwOSw4IEBAIGlwX3ZzX2RoX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXG4gXHRzID0gKHN0cnVjdCBpcF92c19kaF9zdGF0ZSAqKSBzdmMtXHUwMDNlc2NoZWRfZGF0YTtcbiBcdGRlc3QgPSBpcF92c19kaF9nZXQoc3ZjLVx1MDAzZWFmLCBzLCBcdTAwMjZpcGgtXHUwMDNlZGFkZHIpO1xuLVx0aWYgKCFkZXN0IHx8XG4tXHQgICAgIShkZXN0LVx1MDAzZWNmbGFncyBcdTAwMjYgSVBfVlNfREVTVF9DRl9BVkFJTEFCTEUpXG4tXHQgICAgfHwgYXRvbWljX3JlYWQoXHUwMDI2ZGVzdC1cdTAwM2V3ZWlnaHQpIFx1MDAzYz0gMFxuLVx0ICAgIHx8IGlzX292ZXJsb2FkZWQoZGVzdCkpIHtcbitcdGlmICghZGVzdCB8fCBhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZXdlaWdodCkgXHUwMDNjPSAwIHx8XG4rXHQgICAgaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpKSB7XG4gXHRcdGlwX3ZzX3NjaGVkdWxlcl9lcnIoc3ZjLCBcIm5vIGRlc3RpbmF0aW9uIGF2YWlsYWJsZVwiKTtcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2ZvLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZm8uY1xuaW5kZXggZDY1N2I0N2M2NTExZi4uZTA3ZmEzM2Y2ZDUyNyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mby5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZm8uY1xuQEAgLTI5LDcgKzI5LDcgQEAgaXBfdnNfZm9fc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdCAqIEZpbmQgdmlydHVhbCBzZXJ2ZXIgd2l0aCBoaWdoZXN0IHdlaWdodCBhbmQgc2VuZCBpdCB0cmFmZmljXG4gXHQgKi9cbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsIFx1MDAyNnN2Yy1cdTAwM2VkZXN0aW5hdGlvbnMsIG5fbGlzdCkge1xuLVx0XHRpZiAoIShkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpIFx1MDAyNlx1MDAyNlxuK1x0XHRpZiAoIWlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNld2VpZ2h0KSBcdTAwM2UgaHcpIHtcbiBcdFx0XHRod2VpZ2h0ID0gZGVzdDtcbiBcdFx0XHRodyA9IGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNld2VpZ2h0KTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsYy5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGMuY1xuaW5kZXggNjkzYmNjODJjY2I3Ny4uYmZmMTA5YzFjOTU5YiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjLmNcbkBAIC00MTQsNyArNDE0LDcgQEAgX19pcF92c19sYmxjX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMpXG4gXHQgKiBuZXcgY29ubmVjdGlvbi5cbiBcdCAqL1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZGVzdCwgXHUwMDI2c3ZjLVx1MDAzZWRlc3RpbmF0aW9ucywgbl9saXN0KSB7XG4tXHRcdGlmIChkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpXG4rXHRcdGlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGlmIChhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZXdlaWdodCkgXHUwMDNlIDApIHtcbiBcdFx0XHRsZWFzdCA9IGRlc3Q7XG5AQCAtNDI5LDcgKzQyOSw3IEBAIF9faXBfdnNfbGJsY19zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjKVxuIFx0ICovXG4gICBuZXh0c3RhZ2U6XG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShkZXN0LCBcdTAwMjZzdmMtXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcbi1cdFx0aWYgKGRlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRClcbitcdFx0aWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0ZG9oID0gaXBfdnNfZGVzdF9jb25uX292ZXJoZWFkKGRlc3QpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjci5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGNyLmNcbmluZGV4IGY1M2YwNWNlZWEzNmYuLmMyODUzZTA3ZTc4NzIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsY3IuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGNyLmNcbkBAIC0xNjYsNyArMTY2LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaXBfdnNfZGVzdCAqaXBfdnNfZGVzdF9zZXRfbWluKHN0cnVjdCBpcF92c19kZXN0X3NldCAqc2V0KVxuIFx0Lyogc2VsZWN0IHRoZSBmaXJzdCBkZXN0aW5hdGlvbiBzZXJ2ZXIsIHdob3NlIHdlaWdodCBcdTAwM2UgMCAqL1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZSwgXHUwMDI2c2V0LVx1MDAzZWxpc3QsIGxpc3QpIHtcbiBcdFx0bGVhc3QgPSBlLVx1MDAzZWRlc3Q7XG4tXHRcdGlmIChsZWFzdC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKVxuK1x0XHRpZiAoaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGxlYXN0KSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKChhdG9taWNfcmVhZChcdTAwMjZsZWFzdC1cdTAwM2V3ZWlnaHQpIFx1MDAzZSAwKSBcdTAwMjZcdTAwMjZcbkBAIC0xODEsNyArMTgxLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaXBfdnNfZGVzdCAqaXBfdnNfZGVzdF9zZXRfbWluKHN0cnVjdCBpcF92c19kZXN0X3NldCAqc2V0KVxuICAgbmV4dHN0YWdlOlxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yY3UoZSwgXHUwMDI2c2V0LVx1MDAzZWxpc3QsIGxpc3QpIHtcbiBcdFx0ZGVzdCA9IGUtXHUwMDNlZGVzdDtcbi1cdFx0aWYgKGRlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRClcbitcdFx0aWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0ZG9oID0gaXBfdnNfZGVzdF9jb25uX292ZXJoZWFkKGRlc3QpO1xuQEAgLTU3Nyw3ICs1NzcsNyBAQCBfX2lwX3ZzX2xibGNyX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMpXG4gXHQgKiBuZXcgY29ubmVjdGlvbi5cbiBcdCAqL1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZGVzdCwgXHUwMDI2c3ZjLVx1MDAzZWRlc3RpbmF0aW9ucywgbl9saXN0KSB7XG4tXHRcdGlmIChkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpXG4rXHRcdGlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZXdlaWdodCkgXHUwMDNlIDApIHtcbkBAIC01OTMsNyArNTkzLDcgQEAgX19pcF92c19sYmxjcl9zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjKVxuIFx0ICovXG4gICBuZXh0c3RhZ2U6XG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShkZXN0LCBcdTAwMjZzdmMtXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcbi1cdFx0aWYgKGRlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRClcbitcdFx0aWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0ZG9oID0gaXBfdnNfZGVzdF9jb25uX292ZXJoZWFkKGRlc3QpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYy5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xjLmNcbmluZGV4IDE4Yjk3NmE3YzRkMjAuLjkwMDJmNDkxYmZmNjggMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGMuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xjLmNcbkBAIC0zOCw3ICszOCw3IEBAIGlwX3ZzX2xjX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHQgKi9cbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsIFx1MDAyNnN2Yy1cdTAwM2VkZXN0aW5hdGlvbnMsIG5fbGlzdCkge1xuLVx0XHRpZiAoKGRlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRCkgfHxcbitcdFx0aWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSB8fFxuIFx0XHQgICAgYXRvbWljX3JlYWQoXHUwMDI2ZGVzdC1cdTAwM2V3ZWlnaHQpID09IDApXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGRvaCA9IGlwX3ZzX2Rlc3RfY29ubl9vdmVyaGVhZChkZXN0KTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbWguYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19taC5jXG5pbmRleCAwMjA4NjMwNDc1NjJkLi5kNzBiMjNhZWM1ZmVjIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX21oLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19taC5jXG5AQCAtODAsNyArODAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZ2VuZXJhdGVfaGFzaF9zZWNyZXQoaHNpcGhhc2hfa2V5X3QgKmhhc2gxLFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBpc191bmF2YWlsYWJsZShzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcbiB7XG4gXHRyZXR1cm4gYXRvbWljX3JlYWQoXHUwMDI2ZGVzdC1cdTAwM2V3ZWlnaHQpIFx1MDAzYz0gMCB8fFxuLVx0ICAgICAgIGRlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRDtcbitcdCAgICAgICBpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCk7XG4gfVxuIFxuIC8qIFJldHVybnMgaGFzaCB2YWx1ZSBmb3IgSVBWUyBNSCBlbnRyeSAqL1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19ucS5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX25xLmNcbmluZGV4IGFkYTE1OGM2MTBjZTEuLjdjYzI4OTAyMDg2ZTcgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbnEuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX25xLmNcbkBAIC03Miw3ICs3Miw3IEBAIGlwX3ZzX25xX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkZXN0LCBcdTAwMjZzdmMtXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcbiBcbi1cdFx0aWYgKGRlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRCB8fFxuK1x0XHRpZiAoaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpIHx8XG4gXHRcdCAgICAhYXRvbWljX3JlYWQoXHUwMDI2ZGVzdC1cdTAwM2V3ZWlnaHQpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19vdmYuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19vdmYuY1xuaW5kZXggYzVjNjdkZjgwYTBiMy4uZWFhM2E3YWU2ZWZhNiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19vdmYuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX292Zi5jXG5AQCAtMzMsNyArMzMsNyBAQCBpcF92c19vdmZfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdCovXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkZXN0LCBcdTAwMjZzdmMtXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcbiBcdFx0dyA9IGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNld2VpZ2h0KTtcbi1cdFx0aWYgKChkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpIHx8XG4rXHRcdGlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkgfHxcbiBcdFx0ICAgIGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNlYWN0aXZlY29ubnMpIFx1MDAzZSB3IHx8XG4gXHRcdCAgICB3ID09IDApXG4gXHRcdFx0Y29udGludWU7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3JyLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcnIuY1xuaW5kZXggNDEyNWVlNTYxY2RjMy4uYmQxN2NkZDA5MmY1ZiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19yci5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcnIuY1xuQEAgLTY2LDcgKzY2LDcgQEAgaXBfdnNfcnJfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yY3UoZGVzdCxcbiBcdFx0XHRcdFx0XHQgXHUwMDI2c3ZjLVx1MDAzZWRlc3RpbmF0aW9ucyxcbiBcdFx0XHRcdFx0XHQgbl9saXN0KSB7XG4tXHRcdFx0aWYgKCEoZGVzdC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKSBcdTAwMjZcdTAwMjZcbitcdFx0XHRpZiAoIWlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICAgYXRvbWljX3JlYWQoXHUwMDI2ZGVzdC1cdTAwM2V3ZWlnaHQpIFx1MDAzZSAwKVxuIFx0XHRcdFx0LyogSElUICovXG4gXHRcdFx0XHRnb3RvIG91dDtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2VkLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2VkLmNcbmluZGV4IDI0NWEzMjNjODRjZDMuLjc5MjVmNGQyOGZjZTkgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2VkLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zZWQuY1xuQEAgLTc1LDcgKzc1LDcgQEAgaXBfdnNfc2VkX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHQgKi9cbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsIFx1MDAyNnN2Yy1cdTAwM2VkZXN0aW5hdGlvbnMsIG5fbGlzdCkge1xuLVx0XHRpZiAoIShkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpIFx1MDAyNlx1MDAyNlxuK1x0XHRpZiAoIWlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNld2VpZ2h0KSBcdTAwM2UgMCkge1xuIFx0XHRcdGxlYXN0ID0gZGVzdDtcbiBcdFx0XHRsb2ggPSBpcF92c19zZWRfZGVzdF9vdmVyaGVhZChsZWFzdCk7XG5AQCAtOTAsNyArOTAsNyBAQCBpcF92c19zZWRfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdCAqL1xuICAgbmV4dHN0YWdlOlxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yY3UoZGVzdCwgXHUwMDI2c3ZjLVx1MDAzZWRlc3RpbmF0aW9ucywgbl9saXN0KSB7XG4tXHRcdGlmIChkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpXG4rXHRcdGlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGRvaCA9IGlwX3ZzX3NlZF9kZXN0X292ZXJoZWFkKGRlc3QpO1xuIFx0XHRpZiAoKF9fczY0KWxvaCAqIGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNld2VpZ2h0KSBcdTAwM2VcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2guYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zaC5jXG5pbmRleCBjZDY3MDY2ZTNiMjYxLi5jMjRkZDVjYjdlNDc4IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NoLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zaC5jXG5AQCAtNzMsNyArNzMsNyBAQCBzdHJ1Y3QgaXBfdnNfc2hfc3RhdGUge1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBpc191bmF2YWlsYWJsZShzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcbiB7XG4gXHRyZXR1cm4gYXRvbWljX3JlYWQoXHUwMDI2ZGVzdC1cdTAwM2V3ZWlnaHQpIFx1MDAzYz0gMCB8fFxuLVx0ICAgICAgIGRlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRDtcbitcdCAgICAgICBpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCk7XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3R3b3MuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c190d29zLmNcbmluZGV4IGRiYjdmNWZkNDY4OGEuLjg2MTg2MTIyYTFmMDEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfdHdvcy5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfdHdvcy5jXG5AQCAtNTIsNyArNTIsNyBAQCBzdGF0aWMgc3RydWN0IGlwX3ZzX2Rlc3QgKmlwX3ZzX3R3b3Nfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YyxcbiBcbiBcdC8qIEdlbmVyYXRlIGEgcmFuZG9tIHdlaWdodCBiZXR3ZWVuIFswLHN1bSBvZiBhbGwgd2VpZ2h0cykgKi9cbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsIFx1MDAyNnN2Yy1cdTAwM2VkZXN0aW5hdGlvbnMsIG5fbGlzdCkge1xuLVx0XHRpZiAoIShkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpKSB7XG4rXHRcdGlmICghaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpKSB7XG4gXHRcdFx0d2VpZ2h0ID0gYXRvbWljX3JlYWQoXHUwMDI2ZGVzdC1cdTAwM2V3ZWlnaHQpO1xuIFx0XHRcdGlmICh3ZWlnaHQgXHUwMDNlIDApIHtcbiBcdFx0XHRcdHRvdGFsX3dlaWdodCArPSB3ZWlnaHQ7XG5AQCAtNzUsNyArNzUsNyBAQCBzdGF0aWMgc3RydWN0IGlwX3ZzX2Rlc3QgKmlwX3ZzX3R3b3Nfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YyxcbiBcbiBcdC8qIFBpY2sgdHdvIHdlaWdodGVkIHNlcnZlcnMgKi9cbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsIFx1MDAyNnN2Yy1cdTAwM2VkZXN0aW5hdGlvbnMsIG5fbGlzdCkge1xuLVx0XHRpZiAoZGVzdC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKVxuK1x0XHRpZiAoaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHR3ZWlnaHQgPSBhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZXdlaWdodCk7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3dsYy5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3dsYy5jXG5pbmRleCA5ZGE0NDVjYTA5YTE0Li4wOGU5ZTIyZjcyYmY4IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3dsYy5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd2xjLmNcbkBAIC00Nyw3ICs0Nyw3IEBAIGlwX3ZzX3dsY19zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0ICovXG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkZXN0LCBcdTAwMjZzdmMtXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcbi1cdFx0aWYgKCEoZGVzdC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKSBcdTAwMjZcdTAwMjZcbitcdFx0aWYgKCFpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZXdlaWdodCkgXHUwMDNlIDApIHtcbiBcdFx0XHRsZWFzdCA9IGRlc3Q7XG4gXHRcdFx0bG9oID0gaXBfdnNfZGVzdF9jb25uX292ZXJoZWFkKGxlYXN0KTtcbkBAIC02Miw3ICs2Miw3IEBAIGlwX3ZzX3dsY19zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0ICovXG4gICBuZXh0c3RhZ2U6XG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShkZXN0LCBcdTAwMjZzdmMtXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcbi1cdFx0aWYgKGRlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRClcbitcdFx0aWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSlcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0ZG9oID0gaXBfdnNfZGVzdF9jb25uX292ZXJoZWFkKGRlc3QpO1xuIFx0XHRpZiAoKF9fczY0KWxvaCAqIGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNld2VpZ2h0KSBcdTAwM2VcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd3JyLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd3JyLmNcbmluZGV4IDJkY2ZmMTA0MGRhNTIuLmZhZDY5YmFlNWEyMmIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd3JyLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c193cnIuY1xuQEAgLTE3Niw3ICsxNzYsNyBAQCBpcF92c193cnJfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yY3UoZGVzdCxcbiBcdFx0XHRcdFx0XHQgXHUwMDI2c3ZjLVx1MDAzZWRlc3RpbmF0aW9ucyxcbiBcdFx0XHRcdFx0XHQgbl9saXN0KSB7XG4tXHRcdFx0aWYgKCEoZGVzdC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKSBcdTAwMjZcdTAwMjZcbitcdFx0XHRpZiAoIWlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICAgYXRvbWljX3JlYWQoXHUwMDI2ZGVzdC1cdTAwM2V3ZWlnaHQpIFx1MDAzZT0gbWFyay1cdTAwM2VjdylcbiBcdFx0XHRcdGdvdG8gZm91bmQ7XG4gXHRcdFx0aWYgKGRlc3QgPT0gc3RvcClcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjEwOjE4LjIwNjg2NjgzNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUyOTcxNTUyOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJUFZTIE92ZXJsb2FkIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggZm9yIHRoZSBJUFZTIHN1YnN5c3RlbS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1ldGhvZGljYWxseSBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHdhbnQgdG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLlxuXG5UaGUgcGF0Y2ggdGFyZ2V0cyBzZXZlcmFsIGFyZWFzLiBUaGUgbW9zdCBzaWduaWZpY2FudCBjaGFuZ2VzIHNlZW0gdG8gYmUgaW4gYGluY2x1ZGUvbmV0L2lwX3ZzLmhgLiBJdCdzIHJlbW92aW5nIGBJUF9WU19ERVNUX0ZfT1ZFUkxPQURgLCB3aGljaCBpcyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4gVGhpcyBzdWdnZXN0cyBhIHNoaWZ0IGluIGhvdyBvdmVybG9hZCBzdGF0dXMgaXMgbWFuYWdlZC4gVGhlIHJlb3JnYW5pemF0aW9uIG9mIGBzdHJ1Y3QgaXBfdnNfZGVzdGAgdG8gaW5jbHVkZSBgdV90aHJlc2hvbGRfdmFsYCBhbmQgZm9jdXMgb24gY2FjaGVsaW5lIGFsaWdubWVudCBpcyBhbm90aGVyIHBvaW50IHRvIGNvbnNpZGVyLiBJJ2xsIG5lZWQgdG8gY2hlY2sgaG93IHRoYXQgaW1wYWN0cyBleGlzdGluZyBkYXRhIHN0cnVjdHVyZXMgYW5kIHBvdGVudGlhbCBsb2NrIGNvbnRlbnRpb24uIEFsc28sIGEgbmV3IGlubGluZSBoZWxwZXIgZnVuY3Rpb24gYGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZCgpYCBpcyBkZWZpbmVkLlxuXG5UaGUgY2hhbmdlcyBpbiBgaXBfdnNfY29ubi5jYCBhcmUgY3J1Y2lhbC4gVGhlIGNvbmRpdGlvbmFscyBpbiBgaXBfdnNfYmluZF9kZXN0YCBhbmQgYGlwX3ZzX3VuYmluZF9kZXN0YCB0aGF0IG5vdyBjb21wYXJlIHRoZSB0cmFmZmljIGNvdW50IHRvIGB1X3RocmVzaG9sZF92YWxgIGFyZSBhIGNyaXRpY2FsIHNoaWZ0LiBFc3NlbnRpYWxseSBpdCBjaGFuZ2VzIHRoZSBvdmVybG9hcmQgY2FsY3VsYXRpb24uIFRoZSB1c2Ugb2YgYFJFQURfT05DRWAgaGVyZSBpcyBnb29kIHRvIHNlZSBhcyBpdCBzdWdnZXN0cyBtZW1vcnkgYmFycmllcnMgYXJlIGJlaW5nIGNvbnNpZGVyZWQuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgdV90aHJlc2hvbGRfdmFsYCBpcyBwb3B1bGF0ZWQgYW5kIGhvdyB0aGUgYGlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkYCBmdW5jdGlvbiBpcyBiZWluZyB1c2VkIHRvIGFmZmVjdCB0aGlzIHRocmVzaG9sZC5cblxuVGhlIHVwZGF0ZXMgdG8gYGlwX3ZzX2N0bC5jYCB3aXRoIHRoZSBhbHRlcmVkIGltcGxlbWVudGF0aW9ucyBvZiAgYF9faXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWRgIGFuZCBgaXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWRgIHJlcXVpcmUgY2xvc2UgaW5zcGVjdGlvbi4gSSdsbCBuZWVkIHRvIHNlZSBwcmVjaXNlbHkgaG93IHRoaXMgaW1wYWN0cyB0aGUgY29udHJvbCBwYXRoIGFuZCBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy5cblxuRmluYWxseSwgdGhlIGZhY3QgdGhhdCBhIHdob2xlIHNsZXcgb2Ygc2NoZWR1bGVyIG1vZHVsZXMg4oCTIGBkaGAsIGBmb2AsIGBsYmxjYCwgYGxibGNyYCwgYGxjYCwgYG1oYCwgYG5xYCwgYG92ZmAsIGBycmAsIGBzZWRgLCBgc2hgLCBgdHdvc2AsIGB3bGNgLCBhbmQgYHdycmAg4oCTIGFyZSBiZWluZyB0b3VjaGVkIGluZGljYXRlcyBhIHBlcnZhc2l2ZSBjaGFuZ2UgaW4gb3ZlcmxvYWQgaGFuZGxpbmcgYWNyb3NzIHZhcmlvdXMgc2NoZWR1bGluZyBhbGdvcml0aG1zLiBUaGlzIGlzIHNpZ25pZmljYW50LiBJdCdzIGxpa2VseSB0aGF0IHRoZSBvdmVybG9hZCBzdGF0ZSBkaXJlY3RseSBpbXBhY3RzIHNjaGVkdWxpbmcgZGVjaXNpb25zLCBhbmQgdGhlcmVmb3JlIHRoZSBlZmZlY3Qgb2Ygb3ZlcmxvYWQgc3RhdHVzIG9uIGFsbCB0aGUgc2NoZWR1bGluZyBhbGdvcml0aG1zIG5lZWRzIHRvIGJlIGNhcmVmdWxseSBldmFsdWF0ZWQsXG5cbkJlZm9yZSBJIGdldCB0b28gZGVlcCBpbnRvIHRoZSBjb2RlLCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgS2NvbmZpZyBmb3IgSVBWUyB0byBlc3RhYmxpc2ggdGhlIGV4YWN0IGNvbmZpZ3VyYXRpb24gc3ltYm9scyBpbiBwbGF5LCBhcyB0aGlzIHdpbGwgaGVscCBtZSBlc3RhYmxpc2ggdGhlIGNvbnRleHQgZm9yIHRoaXMgcGF0Y2guIEkgZXhwZWN0IHRoaXMgd2lsbCBhbHNvIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGVzZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE0MCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjEwOjIzLjUwNDAyNTI1M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDU1NDcyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBfVlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy00LSNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo1Om1lbnVjb25maWcgSVBfVlNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy02LVxcdHRyaXN0YXRlIFxcXCJJUCB2aXJ0dWFsIHNlcnZlciBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Mjg2PWNvbW1lbnQgJ0lQVlMgU0ggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyODg6Y29uZmlnIElQX1ZTX1NIX1RBQl9CSVRTXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg5LVxcdGludCBcXFwiSVBWUyBzb3VyY2UgaGFzaGluZyB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzAxPWNvbW1lbnQgJ0lQVlMgTUggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwMi1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMDM6Y29uZmlnIElQX1ZTX01IX1RBQl9JTkRFWFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwNC1cXHRpbnQgXFxcIklQVlMgbWFnbGV2IGhhc2hpbmcgdGFibGUgaW5kZXggb2Ygc2l6ZSAodGhlIHByaW1lIG51bWJlcnMpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxMDoyMy41NTg1ODcyNDRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTkzOTAxMjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgSVBWUyBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCBhIHJlZnJlc2hlciBvbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gSVBWUyBhbmQgdGhlIGF2YWlsYWJsZSBzY2hlZHVsaW5nIGFsZ29yaXRobXMuIEknbGwgaGVhZCBzdHJhaWdodCBmb3IgdGhlIHNvdXJjZSDigJMgYG5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBkZWNpc2lvbnMgYXJlIG1hZGUsIHJpZ2h0PyBJJ20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHJlbGV2YW50IHN5bWJvbHMsIGRlcGVuZGVuY2llcywgYW5kIGFueSBuZXcgYWRkaXRpb25zIHNpbmNlIHRoZSBsYXN0IHRpbWUgSSBkdWcgaW50byB0aGlzLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgYW55IHN1YnRsZSBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIHRvIHRoZSBzY2hlZHVsZXIgb3B0aW9ucywgbWF5YmUgbmV3IGFsZ29yaXRobXMgb3IgZGVwZW5kZW5jaWVzIEkndmUgbWlzc2VkLiBUaGlzIEtjb25maWcgZmlsZSB3aWxsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY3VycmVudCBmZWF0dXJlIHNldCBhbmQgYnVpbGQgb3B0aW9ucyBhdmFpbGFibGUgZm9yIGNvbmZpZ3VyaW5nIElQVlMgaW4gYSBydW5uaW5nIHN5c3RlbSwgb3IgYSBidWlsZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4MjYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxMDoyNS41NTI0OTEzMzJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBJUCBWaXJ0dWFsIFNlcnZlciBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRtZW51Y29uZmlnIElQX1ZTXFxuICAgNjpcXHRcXHR0cmlzdGF0ZSBcXFwiSVAgdmlydHVhbCBzZXJ2ZXIgc3VwcG9ydFxcXCJcXG4gICA3OlxcdFxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBORVRGSUxURVJcXG4gICA4OlxcdFxcdGRlcGVuZHMgb24gKE5GX0NPTk5UUkFDSyB8fCBORl9DT05OVFJBQ0s9bilcXG4gICA5OlxcdFxcdGhlbHBcXG4gIDEwOlxcdFxcdCAgSVAgVmlydHVhbCBTZXJ2ZXIgc3VwcG9ydCB3aWxsIGxldCB5b3UgYnVpbGQgYSBoaWdoLXBlcmZvcm1hbmNlXFxuICAxMTpcXHRcXHQgIHZpcnR1YWwgc2VydmVyIGJhc2VkIG9uIGNsdXN0ZXIgb2YgdHdvIG9yIG1vcmUgcmVhbCBzZXJ2ZXJzLiBUaGlzXFxuICAxMjpcXHRcXHQgIG9wdGlvbiBtdXN0IGJlIGVuYWJsZWQgZm9yIGF0IGxlYXN0IG9uZSBvZiB0aGUgY2x1c3RlcmVkIGNvbXB1dGVyc1xcbiAgMTM6XFx0XFx0ICB0aGF0IHdpbGwgdGFrZSBjYXJlIG9mIGludGVyY2VwdGluZyBpbmNvbWluZyBjb25uZWN0aW9ucyB0byBhXFxuICAxNDpcXHRcXHQgIHNpbmdsZSBJUCBhZGRyZXNzIGFuZCBzY2hlZHVsaW5nIHRoZW0gdG8gcmVhbCBzZXJ2ZXJzLlxcbiAgMTU6XFx0XFxuICAxNjpcXHRcXHQgIFRocmVlIHJlcXVlc3QgZGlzcGF0Y2hpbmcgdGVjaG5pcXVlcyBhcmUgaW1wbGVtZW50ZWQsIHRoZXkgYXJlXFxuICAxNzpcXHRcXHQgIHZpcnR1YWwgc2VydmVyIHZpYSBOQVQsIHZpcnR1YWwgc2VydmVyIHZpYSB0dW5uZWxpbmcgYW5kIHZpcnR1YWxcXG4gIDE4OlxcdFxcdCAgc2VydmVyIHZpYSBkaXJlY3Qgcm91dGluZy4gVGhlIHNldmVyYWwgc2NoZWR1bGluZyBhbGdvcml0aG1zIGNhblxcbiAgMTk6XFx0XFx0ICBiZSB1c2VkIHRvIGNob29zZSB3aGljaCBzZXJ2ZXIgdGhlIGNvbm5lY3Rpb24gaXMgZGlyZWN0ZWQgdG8sXFxuICAyMDpcXHRcXHQgIHRodXMgbG9hZCBiYWxhbmNpbmcgY2FuIGJlIGFjaGlldmVkIGFtb25nIHRoZSBzZXJ2ZXJzLiAgRm9yIG1vcmVcXG4gIDIxOlxcdFxcdCAgaW5mb3JtYXRpb24gYW5kIGl0cyBhZG1pbmlzdHJhdGlvbiBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgdGhlXFxuICAyMjpcXHRcXHQgIGZvbGxvd2luZyBVUkw6IFxcdTAwM2NodHRwOi8vd3d3LmxpbnV4dmlydHVhbHNlcnZlci5vcmcvXFx1MDAzZS5cXG4gIDIzOlxcdFxcbiAgMjQ6XFx0XFx0ICBJZiB5b3Ugd2FudCB0byBjb21waWxlIGl0IGluIGtlcm5lbCwgc2F5IFkuIFRvIGNvbXBpbGUgaXQgYXMgYVxcbiAgMjU6XFx0XFx0ICBtb2R1bGUsIGNob29zZSBNIGhlcmUuIElmIHVuc3VyZSwgc2F5IE4uXFxuICAyNjpcXHRcXG4gIDI3OlxcdGlmIElQX1ZTXFxuICAyODpcXHRcXG4gIDI5OlxcdGNvbmZpZ1xcdElQX1ZTX0lQVjZcXG4gIDMwOlxcdFxcdGJvb2wgXFxcIklQdjYgc3VwcG9ydCBmb3IgSVBWU1xcXCJcXG4gIDMxOlxcdFxcdGRlcGVuZHMgb24gSVBWNiA9IHkgfHwgSVBfVlMgPSBJUFY2XFxuICAzMjpcXHRcXHRzZWxlY3QgTkZfREVGUkFHX0lQVjZcXG4gIDMzOlxcdFxcdGhlbHBcXG4gIDM0OlxcdFxcdCAgQWRkIElQdjYgc3VwcG9ydCB0byBJUFZTLlxcbiAgMzU6XFx0XFxuICAzNjpcXHRcXHQgIFNheSBZIGlmIHVuc3VyZS5cXG4gIDM3OlxcdFxcbiAgMzg6XFx0Y29uZmlnXFx0SVBfVlNfREVCVUdcXG4gIDM5OlxcdFxcdGJvb2wgXFxcIklQIHZpcnR1YWwgc2VydmVyIGRlYnVnZ2luZ1xcXCJcXG4gIDQwOlxcdFxcdGhlbHBcXG4gIDQxOlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBnZXQgYWRkaXRpb25hbCBtZXNzYWdlcyB1c2VmdWwgaW5cXG4gIDQyOlxcdFxcdCAgZGVidWdnaW5nIHRoZSBJUCB2aXJ0dWFsIHNlcnZlciBjb2RlLiBZb3UgY2FuIGNoYW5nZSB0aGUgZGVidWdcXG4gIDQzOlxcdFxcdCAgbGV2ZWwgaW4gL3Byb2Mvc3lzL25ldC9pcHY0L3ZzL2RlYnVnX2xldmVsXFxuICA0NDpcXHRcXG4gIDQ1OlxcdGNvbmZpZ1xcdElQX1ZTX1RBQl9CSVRTXFxuICA0NjpcXHRcXHRpbnQgXFxcIklQVlMgY29ubmVjdGlvbiB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXFxcIlxcbiAgNDc6XFx0XFx0cmFuZ2UgOCAyMCBpZiAhNjRCSVRcXG4gIDQ4OlxcdFxcdHJhbmdlIDggMjcgaWYgNjRCSVRcXG4gIDQ5OlxcdFxcdGRlZmF1bHQgMTJcXG4gIDUwOlxcdFxcdGhlbHBcXG4gIDUxOlxcdFxcdCAgVGhlIElQVlMgY29ubmVjdGlvbiBoYXNoIHRhYmxlIHVzZXMgdGhlIGNoYWluaW5nIHNjaGVtZSB0byBoYW5kbGVcXG4gIDUyOlxcdFxcdCAgaGFzaCBjb2xsaXNpb25zLiBVc2luZyBhIGJpZyBJUFZTIGNvbm5lY3Rpb24gaGFzaCB0YWJsZSB3aWxsIGdyZWF0bHlcXG4gIDUzOlxcdFxcdCAgcmVkdWNlIGNvbmZsaWN0cyB3aGVuIHRoZXJlIGFyZSBodW5kcmVkcyBvZiB0aG91c2FuZHMgb2YgY29ubmVjdGlvbnNcXG4gIDU0OlxcdFxcdCAgaW4gdGhlIGhhc2ggdGFibGUuXFxuICA1NTpcXHRcXG4gIDU2OlxcdFxcdCAgTm90ZSB0aGUgdGFibGUgc2l6ZSBtdXN0IGJlIHBvd2VyIG9mIDIuIFRoZSB0YWJsZSBzaXplIHdpbGwgYmUgdGhlXFxuICA1NzpcXHRcXHQgIHZhbHVlIG9mIDIgdG8gdGhlIHlvdXIgaW5wdXQgbnVtYmVyIHBvd2VyLiBUaGUgbnVtYmVyIHRvIGNob29zZSBpc1xcbiAgNTg6XFx0XFx0ICBmcm9tIDggdG8gMjcgZm9yIDY0QklUKDIwIG90aGVyd2lzZSksIHRoZSBkZWZhdWx0IG51bWJlciBpcyAxMixcXG4gIDU5OlxcdFxcdCAgd2hpY2ggbWVhbnMgdGhlIHRhYmxlIHNpemUgaXMgNDA5Ni4gRG9uJ3QgaW5wdXQgdGhlIG51bWJlciB0b29cXG4gIDYwOlxcdFxcdCAgc21hbGwsIG90aGVyd2lzZSB5b3Ugd2lsbCBsb3NlIHBlcmZvcm1hbmNlIG9uIGl0LiBZb3UgY2FuIGFkYXB0IHRoZVxcbiAgNjE6XFx0XFx0ICB0YWJsZSBzaXplIHlvdXJzZWxmLCBhY2NvcmRpbmcgdG8geW91ciB2aXJ0dWFsIHNlcnZlciBhcHBsaWNhdGlvbi5cXG4gIDYyOlxcdFxcdCAgSXQgaXMgZ29vZCB0byBzZXQgdGhlIHRhYmxlIHNpemUgbm90IGZhciBsZXNzIHRoYW4gdGhlIG51bWJlciBvZlxcbiAgNjM6XFx0XFx0ICBjb25uZWN0aW9ucyBwZXIgc2Vjb25kIG11bHRpcGx5aW5nIGF2ZXJhZ2UgbGFzdGluZyB0aW1lIG9mXFxuICA2NDpcXHRcXHQgIGNvbm5lY3Rpb24gaW4gdGhlIHRhYmxlLiAgRm9yIGV4YW1wbGUsIHlvdXIgdmlydHVhbCBzZXJ2ZXIgZ2V0cyAyMDBcXG4gIDY1OlxcdFxcdCAgY29ubmVjdGlvbnMgcGVyIHNlY29uZCwgdGhlIGNvbm5lY3Rpb24gbGFzdHMgZm9yIDIwMCBzZWNvbmRzIGluXFxuICA2NjpcXHRcXHQgIGF2ZXJhZ2UgaW4gdGhlIGNvbm5lY3Rpb24gdGFibGUsIHRoZSB0YWJsZSBzaXplIHNob3VsZCBiZSBub3QgZmFyXFxuICA2NzpcXHRcXHQgIGxlc3MgdGhhbiAyMDB4MjAwLCBpdCBpcyBnb29kIHRvIHNldCB0aGUgdGFibGUgc2l6ZSAzMjc2OCAoMioqMTUpLlxcbiAgNjg6XFx0XFxuICA2OTpcXHRcXHQgIEFub3RoZXIgbm90ZSB0aGF0IGVhY2ggY29ubmVjdGlvbiBvY2N1cGllcyAxMjggYnl0ZXMgZWZmZWN0aXZlbHkgYW5kXFxuICA3MDpcXHRcXHQgIGVhY2ggaGFzaCBlbnRyeSB1c2VzIDggYnl0ZXMsIHNvIHlvdSBjYW4gZXN0aW1hdGUgaG93IG11Y2ggbWVtb3J5IGlzXFxuICA3MTpcXHRcXHQgIG5lZWRlZCBmb3IgeW91ciBib3guXFxuICA3MjpcXHRcXG4gIDczOlxcdFxcdCAgWW91IGNhbiBvdmVyd3JpdGUgdGhpcyBudW1iZXIgc2V0dGluZyBjb25uX3RhYl9iaXRzIG1vZHVsZSBwYXJhbWV0ZXJcXG4gIDc0OlxcdFxcdCAgb3IgYnkgYXBwZW5kaW5nIGlwX3ZzLmNvbm5fdGFiX2JpdHM9PyB0byB0aGUga2VybmVsIGNvbW1hbmQgbGluZSBpZlxcbiAgNzU6XFx0XFx0ICBJUCBWUyB3YXMgY29tcGlsZWQgYnVpbHQtaW4uXFxuICA3NjpcXHRcXG4gIDc3OlxcdGNvbW1lbnQgXFxcIklQVlMgdHJhbnNwb3J0IHByb3RvY29sIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcXFwiXFxuICA3ODpcXHRcXG4gIDc5OlxcdGNvbmZpZ1xcdElQX1ZTX1BST1RPX1RDUFxcbiAgODA6XFx0XFx0Ym9vbCBcXFwiVENQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjEwOjI1LjU1MjU3OTA5MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NTIxMTgzNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIHRoZSBJUFZTIFNjaGVkdWxlciBDb25maWd1cmF0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgYmFjayBpbnRvIHRoZSBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgIGZpbGUuIEknbSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiBnZXR0aW5nIGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBzY2hlZHVsZXIgY29uZmlndXJhdGlvbnMuIEkga25vdyB0aGUgYmFzaWNzLCBidXQgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBjcnVjaWFsIHJlZ2FyZGluZyB0aGUgYXZhaWxhYmxlIHNjaGVkdWxpbmcgYWxnb3JpdGhtcyBhbmQgdGhlaXIgYXNzb2NpYXRlZCBvcHRpb25zIHdpdGhpbiB0aGUgSVBWUyBmcmFtZXdvcmsuIEkgd2FudCB0byBlbnN1cmUgSSBoYXZlIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgcG90ZW50aWFsIGNhdmVhdHMgYXNzb2NpYXRlZCB3aXRoIHNwZWNpZmljIHNjaGVkdWxlciBzZWxlY3Rpb25zLiBUaW1lIHRvIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzMTMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjEwOjI3LjQwNDY5OTQ5NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTY3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgODE6XFx0XFx0aGVscFxcbiAgODI6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGxvYWQgYmFsYW5jaW5nIFRDUCB0cmFuc3BvcnRcXG4gIDgzOlxcdFxcdCAgcHJvdG9jb2wuIFNheSBZIGlmIHVuc3VyZS5cXG4gIDg0OlxcdFxcbiAgODU6XFx0Y29uZmlnXFx0SVBfVlNfUFJPVE9fVURQXFxuICA4NjpcXHRcXHRib29sIFxcXCJVRFAgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFxcXCJcXG4gIDg3OlxcdFxcdGhlbHBcXG4gIDg4OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBsb2FkIGJhbGFuY2luZyBVRFAgdHJhbnNwb3J0XFxuICA4OTpcXHRcXHQgIHByb3RvY29sLiBTYXkgWSBpZiB1bnN1cmUuXFxuICA5MDpcXHRcXG4gIDkxOlxcdGNvbmZpZ1xcdElQX1ZTX1BST1RPX0FIX0VTUFxcbiAgOTI6XFx0XFx0ZGVmX2Jvb2wgSVBfVlNfUFJPVE9fRVNQIHx8IElQX1ZTX1BST1RPX0FIXFxuICA5MzpcXHRcXG4gIDk0OlxcdGNvbmZpZ1xcdElQX1ZTX1BST1RPX0VTUFxcbiAgOTU6XFx0XFx0Ym9vbCBcXFwiRVNQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcXFwiXFxuICA5NjpcXHRcXHRoZWxwXFxuICA5NzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgbG9hZCBiYWxhbmNpbmcgRVNQIChFbmNhcHN1bGF0aW9uXFxuICA5ODpcXHRcXHQgIFNlY3VyaXR5IFBheWxvYWQpIHRyYW5zcG9ydCBwcm90b2NvbC4gU2F5IFkgaWYgdW5zdXJlLlxcbiAgOTk6XFx0XFxuIDEwMDpcXHRjb25maWdcXHRJUF9WU19QUk9UT19BSFxcbiAxMDE6XFx0XFx0Ym9vbCBcXFwiQUggbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFxcXCJcXG4gMTAyOlxcdFxcdGhlbHBcXG4gMTAzOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBsb2FkIGJhbGFuY2luZyBBSCAoQXV0aGVudGljYXRpb25cXG4gMTA0OlxcdFxcdCAgSGVhZGVyKSB0cmFuc3BvcnQgcHJvdG9jb2wuIFNheSBZIGlmIHVuc3VyZS5cXG4gMTA1OlxcdFxcbiAxMDY6XFx0Y29uZmlnICBJUF9WU19QUk9UT19TQ1RQXFxuIDEwNzpcXHRcXHRib29sIFxcXCJTQ1RQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcXFwiXFxuIDEwODpcXHRcXHRzZWxlY3QgTkVUX0NSQzMyQ1xcbiAxMDk6XFx0XFx0aGVscFxcbiAxMTA6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGxvYWQgYmFsYW5jaW5nIFNDVFAgdHJhbnNwb3J0XFxuIDExMTpcXHRcXHQgIHByb3RvY29sLiBTYXkgWSBpZiB1bnN1cmUuXFxuIDExMjpcXHRcXG4gMTEzOlxcdGNvbW1lbnQgXFxcIklQVlMgc2NoZWR1bGVyXFxcIlxcbiAxMTQ6XFx0XFxuIDExNTpcXHRjb25maWdcXHRJUF9WU19SUlxcbiAxMTY6XFx0XFx0dHJpc3RhdGUgXFxcInJvdW5kLXJvYmluIHNjaGVkdWxpbmdcXFwiXFxuIDExNzpcXHRcXHRoZWxwXFxuIDExODpcXHRcXHQgIFRoZSByb2Jpbi1yb2JpbiBzY2hlZHVsaW5nIGFsZ29yaXRobSBzaW1wbHkgZGlyZWN0cyBuZXR3b3JrXFxuIDExOTpcXHRcXHQgIGNvbm5lY3Rpb25zIHRvIGRpZmZlcmVudCByZWFsIHNlcnZlcnMgaW4gYSByb3VuZC1yb2JpbiBtYW5uZXIuXFxuIDEyMDpcXHRcXG4gMTIxOlxcdFxcdCAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBpbiBrZXJuZWwsIHNheSBZLiBUbyBjb21waWxlIGl0IGFzIGFcXG4gMTIyOlxcdFxcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBJZiB1bnN1cmUsIHNheSBOLlxcbiAxMjM6XFx0IFxcbiAxMjQ6XFx0Y29uZmlnXFx0SVBfVlNfV1JSXFxuIDEyNTpcXHRcXHR0cmlzdGF0ZSBcXFwid2VpZ2h0ZWQgcm91bmQtcm9iaW4gc2NoZWR1bGluZ1xcXCJcXG4gMTI2OlxcdFxcdGhlbHBcXG4gMTI3OlxcdFxcdCAgVGhlIHdlaWdodGVkIHJvYmluLXJvYmluIHNjaGVkdWxpbmcgYWxnb3JpdGhtIGRpcmVjdHMgbmV0d29ya1xcbiAxMjg6XFx0XFx0ICBjb25uZWN0aW9ucyB0byBkaWZmZXJlbnQgcmVhbCBzZXJ2ZXJzIGJhc2VkIG9uIHNlcnZlciB3ZWlnaHRzXFxuIDEyOTpcXHRcXHQgIGluIGEgcm91bmQtcm9iaW4gbWFubmVyLiBTZXJ2ZXJzIHdpdGggaGlnaGVyIHdlaWdodHMgcmVjZWl2ZVxcbiAxMzA6XFx0XFx0ICBuZXcgY29ubmVjdGlvbnMgZmlyc3QgdGhhbiB0aG9zZSB3aXRoIGxlc3Mgd2VpZ2h0cywgYW5kIHNlcnZlcnNcXG4gMTMxOlxcdFxcdCAgd2l0aCBoaWdoZXIgd2VpZ2h0cyBnZXQgbW9yZSBjb25uZWN0aW9ucyB0aGFuIHRob3NlIHdpdGggbGVzc1xcbiAxMzI6XFx0XFx0ICB3ZWlnaHRzIGFuZCBzZXJ2ZXJzIHdpdGggZXF1YWwgd2VpZ2h0cyBnZXQgZXF1YWwgY29ubmVjdGlvbnMuXFxuIDEzMzpcXHRcXG4gMTM0OlxcdFxcdCAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBpbiBrZXJuZWwsIHNheSBZLiBUbyBjb21waWxlIGl0IGFzIGFcXG4gMTM1OlxcdFxcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBJZiB1bnN1cmUsIHNheSBOLlxcbiAxMzY6XFx0XFxuIDEzNzpcXHRjb25maWdcXHRJUF9WU19MQ1xcbiAxMzg6XFx0XFx0dHJpc3RhdGUgXFxcImxlYXN0LWNvbm5lY3Rpb24gc2NoZWR1bGluZ1xcXCJcXG4gMTM5OlxcdFxcdGhlbHBcXG4gMTQwOlxcdFxcdCAgVGhlIGxlYXN0LWNvbm5lY3Rpb24gc2NoZWR1bGluZyBhbGdvcml0aG0gZGlyZWN0cyBuZXR3b3JrXFxuIDE0MTpcXHRcXHQgIGNvbm5lY3Rpb25zIHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgbGVhc3QgbnVtYmVyIG9mIGFjdGl2ZSBcXG4gMTQyOlxcdFxcdCAgY29ubmVjdGlvbnMuXFxuIDE0MzpcXHRcXG4gMTQ0OlxcdFxcdCAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBpbiBrZXJuZWwsIHNheSBZLiBUbyBjb21waWxlIGl0IGFzIGFcXG4gMTQ1OlxcdFxcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBJZiB1bnN1cmUsIHNheSBOLlxcbiAxNDY6XFx0XFxuIDE0NzpcXHRjb25maWdcXHRJUF9WU19XTENcXG4gMTQ4OlxcdFxcdHRyaXN0YXRlIFxcXCJ3ZWlnaHRlZCBsZWFzdC1jb25uZWN0aW9uIHNjaGVkdWxpbmdcXFwiXFxuIDE0OTpcXHRcXHRoZWxwXFxuIDE1MDpcXHRcXHQgIFRoZSB3ZWlnaHRlZCBsZWFzdC1jb25uZWN0aW9uIHNjaGVkdWxpbmcgYWxnb3JpdGhtIGRpcmVjdHMgbmV0d29ya1xcbiAxNTE6XFx0XFx0ICBjb25uZWN0aW9ucyB0byB0aGUgc2VydmVyIHdpdGggdGhlIGxlYXN0IGFjdGl2ZSBjb25uZWN0aW9uc1xcbiAxNTI6XFx0XFx0ICBub3JtYWxpemVkIGJ5IHRoZSBzZXJ2ZXIgd2VpZ2h0LlxcbiAxNTM6XFx0XFxuIDE1NDpcXHRcXHQgIElmIHlvdSB3YW50IHRvIGNvbXBpbGUgaXQgaW4ga2VybmVsLCBzYXkgWS4gVG8gY29tcGlsZSBpdCBhcyBhXFxuIDE1NTpcXHRcXHQgIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gSWYgdW5zdXJlLCBzYXkgTi5cXG4gMTU2OlxcdFxcbiAxNTc6XFx0Y29uZmlnICBJUF9WU19GT1xcbiAxNTg6XFx0XFx0XFx0dHJpc3RhdGUgXFxcIndlaWdodGVkIGZhaWxvdmVyIHNjaGVkdWxpbmdcXFwiXFxuIDE1OTpcXHRcXHRoZWxwXFxuIDE2MDpcXHRcXHQgIFRoZSB3ZWlnaHRlZCBmYWlsb3ZlciBzY2hlZHVsaW5nIGFsZ29yaXRobSBkaXJlY3RzIG5ldHdvcmtcXG4gMTYxOlxcdFxcdCAgY29ubmVjdGlvbnMgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSBoaWdoZXN0IHdlaWdodCB0aGF0IGlzXFxuIDE2MjpcXHRcXHQgIGN1cnJlbnRseSBhdmFpbGFibGUuXFxuIDE2MzpcXHRcXG4gMTY0OlxcdFxcdCAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBpbiBrZXJuZWwsIHNheSBZLiBUbyBjb21waWxlIGl0IGFzIGFcXG4gMTY1OlxcdFxcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBJZiB1bnN1cmUsIHNheSBOLlxcbiAxNjY6XFx0XFxuIDE2NzpcXHRjb25maWcgIElQX1ZTX09WRlxcbiAxNjg6XFx0XFx0dHJpc3RhdGUgXFxcIndlaWdodGVkIG92ZXJmbG93IHNjaGVkdWxpbmdcXFwiXFxuIDE2OTpcXHRcXHRoZWxwXFxuIDE3MDpcXHRcXHQgIFRoZSB3ZWlnaHRlZCBvdmVyZmxvdyBzY2hlZHVsaW5nIGFsZ29yaXRobSBkaXJlY3RzIG5ldHdvcmtcXG4gMTcxOlxcdFxcdCAgY29ubmVjdGlvbnMgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSBoaWdoZXN0IHdlaWdodCB0aGF0IGlzXFxuIDE3MjpcXHRcXHQgIGN1cnJlbnRseSBhdmFpbGFibGUgYW5kIG92ZXJmbG93cyB0byB0aGUgbmV4dCB3aGVuIGFjdGl2ZVxcbiAxNzM6XFx0XFx0ICBjb25uZWN0aW9ucyBleGNlZWQgdGhlIG5vZGUncyB3ZWlnaHQuXFxuIDE3NDpcXHRcXG4gMTc1OlxcdFxcdCAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBpbiBrZXJuZWwsIHNheSBZLiBUbyBjb21waWxlIGl0IGFzIGFcXG4gMTc2OlxcdFxcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBJZiB1bnN1cmUsIHNheSBOLlxcbiAxNzc6XFx0XFxuIDE3ODpcXHRjb25maWdcXHRJUF9WU19MQkxDXFxuIDE3OTpcXHRcXHR0cmlzdGF0ZSBcXFwibG9jYWxpdHktYmFzZWQgbGVhc3QtY29ubmVjdGlvbiBzY2hlZHVsaW5nXFxcIlxcbiAxODA6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxMDoyNy40MDQ4MDcwMDZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MzI1OTQ2MTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBJUFZTIERlc3RpbmF0aW9uIE92ZXJsb2FkIFRocmVzaG9sZCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSVBWUyBpcyBkZWZpbml0ZWx5IGEga2V5IGNvbXBvbmVudCBoZXJlLCBwYXJ0IG9mIG5ldGZpbHRlciwgYW5kIGFjY2Vzc2libGUgdGhyb3VnaCBuZXRsaW5rIGludGVyZmFjZXMsIHNvY2tvcHQsIGV0Yy4sIHdoaWNoIGlzIGEgZ29vZCBzaWduLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIGl0cyBpbnRlZ3JhdGlvbiBpbiBRRU1VL3ZpcnQgZW52aXJvbm1lbnRzLiBUaGUgY3JpdGljYWwgcXVlc3Rpb246IElzIHRoaXMgdGhpbmcgcmVhY2hhYmxlIHRocm91Z2ggc3l6a2FsbGVyPyBZZXAsIHN5emthbGxlciBzdXBwb3J0cyBJUFZTIG5ldGxpbmsgYW5kIG5ldGZpbHRlciBvcGVyYXRpb25zLiBFeGNlbGxlbnQuXG5cbk5vdywgd2UncmUgdGFsa2luZyBhYm91dCBjb2RlIHRoYXQncyBwb3RlbnRpYWxseSBtb2RpZnlpbmcgdGhlIElQVlMgZGVzdGluYXRpb24gb3ZlcmxvYWQgdGhyZXNob2xkIGxvZ2ljIGFuZCB0aGUgdW5kZXJseWluZyBzdHJ1Y3R1cmUgbGF5b3V0LiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGxvY2F0aW9uczpcbi0gICBgaXBfdnNfYmluZF9kZXN0YCBhbmQgYGlwX3ZzX3VuYmluZF9kZXN0YCB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNgLlxuLSAgIGBpcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZGAsIGBfX2lwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkYCwgYW5kIGBfX2lwX3ZzX3VwZGF0ZV9kZXN0YCB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuY2AuXG4tICAgQW5kIHRoZSBzY2hlZHVsZXIgZnVuY3Rpb25zIGluIHRoZSB2YXJpb3VzIHNjaGVkdWxlciBmaWxlcyBpbnZvbHZlZC5cblxuVGltZSB0byBzZWUgaWYgdGhpcyBpcyBcIldvcnRoRnV6emluZ1wiLiBDb25zaWRlcmluZyB0aGF0IGl0IHRvdWNoZXMgZXhlY3V0YWJsZSBuZXR3b3JraW5nLCBuZXRmaWx0ZXIsIGFuZCBJUFZTIGNvZGUgdGhhdCdzIHJlYWNoYWJsZSwgdGhlIGFuc3dlciBpcyBhIHJlc291bmRpbmcgXCJ5ZXNcIi4gU28sIHRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIGlzIHNldCB0byBgdHJ1ZWAuXG5cbk5vdyBmb3IgYEZvY3VzU3ltYm9sc2AuIEkgbmVlZCB0byBiZSBwcmVjaXNlLCB6ZXJvaW5nIGluIG9uIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCBhcmUgYmVpbmcgbW9kaWZpZWQgb3IgZGlyZWN0bHkgY2FsbCB0aGUgbW9kaWZpZWQgbG9naWMsIGFuZCB0aGF0IGFyZSBub3QgdWJpcXVpdG91cy4gTGV0J3Mgc2VlLi4uXG5cbkluIGBpcF92c19jb25uLmNgLCB3ZSBoYXZlOlxuLSBgaXBfdnNfYmluZF9kZXN0YFxuLSBgaXBfdnNfdW5iaW5kX2Rlc3RgXG5cbkFuZCB0aGVuIGluIGBpcF92c19jdGwuY2A6XG4tIGBpcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZGAgKFRoaXMgaXMgZXhwb3J0ZWQgYW5kIG5vbi1zdGF0aWMsIHNvIHByb21pc2luZyEpXG4tIGBfX2lwX3ZzX3VwZGF0ZV9kZXN0YCAob3IgYW55IG9mIGl0cyBjYWxsZXJzLCBgaXBfdnNfZWRpdF9kZXN0YCBvciBgaXBfdnNfYWRkX2Rlc3RgLilcblxuTGV0J3MgZGl2ZSBpbnRvIGBpcF92c19jdGwuY2AgYXJvdW5kIGBfX2lwX3ZzX3VwZGF0ZV9kZXN0YC4gVGhhdCBzZWVtcyBsaWtlIHRoZSByaWdodCBhcmVhIHRvIGNvbmNlbnRyYXRlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDk0MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjEwOjMyLjczMDc1NTUyMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYzMjQ2NTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19pcF92c191cGRhdGVfZGVzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0xMzQ0PXN0YXRpYyB2b2lkXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjEzNDU6X19pcF92c191cGRhdGVfZGVzdChzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMTM0Ni1cXHRcXHQgICAgc3RydWN0IGlwX3ZzX2Rlc3RfdXNlcl9rZXJuICp1ZGVzdCwgaW50IGFkZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0xNDQzPWlwX3ZzX25ld19kZXN0KHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIHN0cnVjdCBpcF92c19kZXN0X3VzZXJfa2VybiAqdWRlc3QpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMTQ5NC1cXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2ZGVzdC1cXHUwMDNlZHN0X2xvY2spO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoxNDk1OlxcdF9faXBfdnNfdXBkYXRlX2Rlc3Qoc3ZjLCBkZXN0LCB1ZGVzdCwgMSk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTE0OTYtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MTUxMj1pcF92c19hZGRfZGVzdChzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBzdHJ1Y3QgaXBfdnNfZGVzdF91c2VyX2tlcm4gKnVkZXN0KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTE1NzItXFx0XFx0ZWxzZVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoxNTczOlxcdFxcdFxcdF9faXBfdnNfdXBkYXRlX2Rlc3Qoc3ZjLCBkZXN0LCB1ZGVzdCwgMSk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTE1NzQtXFx0fSBlbHNlIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0xNTg5PWlwX3ZzX2VkaXRfZGVzdChzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBzdHJ1Y3QgaXBfdnNfZGVzdF91c2VyX2tlcm4gKnVkZXN0KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTE2MjctXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjE2Mjg6XFx0X19pcF92c191cGRhdGVfZGVzdChzdmMsIGRlc3QsIHVkZXN0LCAwKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMTYyOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6MTA6MzIuNzg3MDg0NTI1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU4MDQzMTU5NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgSVBWUyBTY2hlZHVsZXIgTW9kaWZpY2F0aW9ucyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSB3aGljaCBzY2hlZHVsZXJzIGhhdmUgYmVlbiB0b3VjaGVkLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZXNlIHR3ZWx2ZTogYGlwX3ZzX2RoX3NjaGVkdWxlYCwgYGlwX3ZzX2ZvX3NjaGVkdWxlYCwgYF9faXBfdnNfbGJsY19zY2hlZHVsZWAsIGBfX2lwX3ZzX2xibGNyX3NjaGVkdWxlYCwgYGlwX3ZzX2xjX3NjaGVkdWxlYCwgYGlwX3ZzX25xX3NjaGVkdWxlYCwgYGlwX3ZzX292Zl9zY2hlZHVsZWAsIGBpcF92c19ycl9zY2hlZHVsZWAsIGBpcF92c19zZWRfc2NoZWR1bGVgLCBgaXBfdnNfdHdvc19zY2hlZHVsZWAsIGBpcF92c193bGNfc2NoZWR1bGVgLCBhbmQgYGlwX3ZzX3dycl9zY2hlZHVsZWAuIEknbGwgbmVlZCB0byBsb29rIGF0IHRoZSBzdXBwb3J0aW5nIGZ1bmN0aW9ucyBhcyB3ZWxsOiBgaXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWRgLCBgaXBfdnNfYmluZF9kZXN0YCwgYGlwX3ZzX3VuYmluZF9kZXN0YCwgYGlwX3ZzX2VkaXRfZGVzdGAsIGFuZCBgaXBfdnNfYWRkX2Rlc3RgLlxuXG5Ob3csIGJlZm9yZSBJIHByb2NlZWQgd2l0aCBhbnkgZnVydGhlciBpbnZlc3RpZ2F0aW9uLCBJIG5lZWQgdG8gY2hlY2sgd2hhdCBjb25maWd1cmF0aW9ucywgaWYgYW55LCBhcmUgbmVlZGVkLiBBIHF1aWNrIGxvb2sgYXQgdGhlIGBLY29uZmlnYCBmb3IgdGhlIElQVlMgY29yZSB0ZWxscyBtZSB0aGF0IGl0IGRlcGVuZHMgb24gYElORVRgIGFuZCBgTkVURklMVEVSYCBhbmQgZWl0aGVyIGBORl9DT05OVFJBQ0tgIG9yIGBORl9DT05OVFJBQ0s9bmAuIFRoYXQgbWFrZXMgc2Vuc2UuIEkgaGF2ZSB0byBtYWtlIHN1cmUgdGhlc2UgZGVwZW5kZW5jaWVzIGFyZSBwcm9wZXJseSBoYW5kbGVkLlxuXG5BbmQgb2YgY291cnNlLCB0aGUgc2NoZWR1bGVycyB0aGVtc2VsdmVzIGFyZSBlbmFibGVkIGJ5IGNvbmZpZ3MgYXMgd2VsbCwgbmFtZWx5OiBgSVBfVlNfUlJgLCBgSVBfVlNfV1JSYCwgYElQX1ZTX0xDYCwgYElQX1ZTX1dMQ2AsIGBJUF9WU19GT2AsIGBJUF9WU19PVkZgLCBgSVBfVlNfTEJMQ2AsIGBJUF9WU19MQkxDUmAsIGBJUF9WU19ESGAsIGBJUF9WU19TSGAsIGBJUF9WU19TRURgLCBgSVBfVlNfTlFgLCBgSVBfVlNfVFdPU2AsIGFuZCBgSVBfVlNfTUhgLiBJIHNob3VsZCBhbHNvIHJlLWNvbmZpcm0gdGhhdCBgTkVURklMVEVSYCBhbmQgYElORVRgIGFyZSBjb25maWd1cmVkIGNvcnJlY3RseSBhbmQgdGhhdCB0aGVyZSBhcmUgbm8gY29uZmxpY3RzLlxuXG5UbyBtYWtlIHN1cmUgSSdtIHByZWNpc2UsIEknbGwgbmVlZCB0byBleGFtaW5lIHRoZSBgS2NvbmZpZ2AgZmlsZXMgbW9yZSBjbG9zZWx5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gYWNjb3VudGluZyBmb3IgZXZlcnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0MzEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6MTA6MzguNTkxNDA0NThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MjIwNDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUF9WU19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Mjg2PWNvbW1lbnQgJ0lQVlMgU0ggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyODg6Y29uZmlnIElQX1ZTX1NIX1RBQl9CSVRTXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg5LVxcdGludCBcXFwiSVBWUyBzb3VyY2UgaGFzaGluZyB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzAxPWNvbW1lbnQgJ0lQVlMgTUggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwMi1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMDM6Y29uZmlnIElQX1ZTX01IX1RBQl9JTkRFWFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwNC1cXHRpbnQgXFxcIklQVlMgbWFnbGV2IGhhc2hpbmcgdGFibGUgaW5kZXggb2Ygc2l6ZSAodGhlIHByaW1lIG51bWJlcnMpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxMDozOC42MzY2Mjk5MTNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjIyNTgwOTQxNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIHRoZSBJUFZTIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgSVBWUyBLY29uZmlnIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgc2VjdGlvbiBmcm9tIGxpbmVzIDE4MCB0byAzMjAgaW4gYG5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnYC4gSSdtIGdvaW5nIHRvIGZvY3VzIG9uIHdoYXQgb3B0aW9ucyBhcmUgZGVmaW5lZCB3aXRoaW4gdGhhdCBhcmVhLiBJJ20gcHJvYmFibHkgbG9va2luZyBhdCB0aGlzIHRvIGVpdGhlciB1bmRlcnN0YW5kIGEgc3BlY2lmaWMgZmVhdHVyZSdzIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycywgZGVidWcgYSBidWlsZCBpc3N1ZSwgb3IgcGVyaGFwcyBldmVuIGFuYWx5emUgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZ292ZXJucyB3aGljaCBtb2R1bGVzIG9yIGZlYXR1cmVzIGdldCBlbmFibGVkLiBNeSBnb2FsIGlzIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0IHRoZSB1c2VyIGhhcyB0aGUgYWJpbGl0eSB0byBlbmFibGUgb3IgZGlzYWJsZSBhbmQgdG8gd2hpY2ggb3RoZXIgc2V0dGluZ3MgdGhlc2UgZmVhdHVyZXMgYXJlIGRlcGVuZGVudC4gS25vd2luZyB0aGlzIGlzIGNyaXRpY2FsLCBzaW5jZSBhIG1pc2NvbmZpZ3VyYXRpb24gb3IgbWlzdW5kZXJzdGFuZGluZyBjYW4gbGVhZCB0byBvcGVyYXRpb25hbCBpbnN0YWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc1NTgsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxMTo0MC44OTQ3MjczNTFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTYxNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTgwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE4MDpcXHRcXHRoZWxwXFxuIDE4MTpcXHRcXHQgIFRoZSBsb2NhbGl0eS1iYXNlZCBsZWFzdC1jb25uZWN0aW9uIHNjaGVkdWxpbmcgYWxnb3JpdGhtIGlzIGZvclxcbiAxODI6XFx0XFx0ICBkZXN0aW5hdGlvbiBJUCBsb2FkIGJhbGFuY2luZy4gSXQgaXMgdXN1YWxseSB1c2VkIGluIGNhY2hlIGNsdXN0ZXIuXFxuIDE4MzpcXHRcXHQgIFRoaXMgYWxnb3JpdGhtIHVzdWFsbHkgZGlyZWN0cyBwYWNrZXQgZGVzdGluZWQgZm9yIGFuIElQIGFkZHJlc3MgdG9cXG4gMTg0OlxcdFxcdCAgaXRzIHNlcnZlciBpZiB0aGUgc2VydmVyIGlzIGFsaXZlIGFuZCB1bmRlciBsb2FkLiBJZiB0aGUgc2VydmVyIGlzXFxuIDE4NTpcXHRcXHQgIG92ZXJsb2FkZWQgKGl0cyBhY3RpdmUgY29ubmVjdGlvbiBudW1iZXJzIGlzIGxhcmdlciB0aGFuIGl0cyB3ZWlnaHQpXFxuIDE4NjpcXHRcXHQgIGFuZCB0aGVyZSBpcyBhIHNlcnZlciBpbiBpdHMgaGFsZiBsb2FkLCB0aGVuIGFsbG9jYXRlIHRoZSB3ZWlnaHRlZFxcbiAxODc6XFx0XFx0ICBsZWFzdC1jb25uZWN0aW9uIHNlcnZlciB0byB0aGlzIElQIGFkZHJlc3MuXFxuIDE4ODpcXHRcXG4gMTg5OlxcdFxcdCAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBpbiBrZXJuZWwsIHNheSBZLiBUbyBjb21waWxlIGl0IGFzIGFcXG4gMTkwOlxcdFxcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBJZiB1bnN1cmUsIHNheSBOLlxcbiAxOTE6XFx0XFxuIDE5MjpcXHRjb25maWcgIElQX1ZTX0xCTENSXFxuIDE5MzpcXHRcXHR0cmlzdGF0ZSBcXFwibG9jYWxpdHktYmFzZWQgbGVhc3QtY29ubmVjdGlvbiB3aXRoIHJlcGxpY2F0aW9uIHNjaGVkdWxpbmdcXFwiXFxuIDE5NDpcXHRcXHRoZWxwXFxuIDE5NTpcXHRcXHQgIFRoZSBsb2NhbGl0eS1iYXNlZCBsZWFzdC1jb25uZWN0aW9uIHdpdGggcmVwbGljYXRpb24gc2NoZWR1bGluZ1xcbiAxOTY6XFx0XFx0ICBhbGdvcml0aG0gaXMgYWxzbyBmb3IgZGVzdGluYXRpb24gSVAgbG9hZCBiYWxhbmNpbmcuIEl0IGlzIFxcbiAxOTc6XFx0XFx0ICB1c3VhbGx5IHVzZWQgaW4gY2FjaGUgY2x1c3Rlci4gSXQgZGlmZmVycyBmcm9tIHRoZSBMQkxDIHNjaGVkdWxpbmdcXG4gMTk4OlxcdFxcdCAgYXMgZm9sbG93czogdGhlIGxvYWQgYmFsYW5jZXIgbWFpbnRhaW5zIG1hcHBpbmdzIGZyb20gYSB0YXJnZXRcXG4gMTk5OlxcdFxcdCAgdG8gYSBzZXQgb2Ygc2VydmVyIG5vZGVzIHRoYXQgY2FuIHNlcnZlIHRoZSB0YXJnZXQuIFJlcXVlc3RzIGZvclxcbiAyMDA6XFx0XFx0ICBhIHRhcmdldCBhcmUgYXNzaWduZWQgdG8gdGhlIGxlYXN0LWNvbm5lY3Rpb24gbm9kZSBpbiB0aGUgdGFyZ2V0J3NcXG4gMjAxOlxcdFxcdCAgc2VydmVyIHNldC4gSWYgYWxsIHRoZSBub2RlIGluIHRoZSBzZXJ2ZXIgc2V0IGFyZSBvdmVyIGxvYWRlZCxcXG4gMjAyOlxcdFxcdCAgaXQgcGlja3MgdXAgYSBsZWFzdC1jb25uZWN0aW9uIG5vZGUgaW4gdGhlIGNsdXN0ZXIgYW5kIGFkZHMgaXRcXG4gMjAzOlxcdFxcdCAgaW4gdGhlIHNldmVyIHNldCBmb3IgdGhlIHRhcmdldC4gSWYgdGhlIHNlcnZlciBzZXQgaGFzIG5vdCBiZWVuXFxuIDIwNDpcXHRcXHQgIG1vZGlmaWVkIGZvciB0aGUgc3BlY2lmaWVkIHRpbWUsIHRoZSBtb3N0IGxvYWRlZCBub2RlIGlzIHJlbW92ZWRcXG4gMjA1OlxcdFxcdCAgZnJvbSB0aGUgc2VydmVyIHNldCwgaW4gb3JkZXIgdG8gYXZvaWQgaGlnaCBkZWdyZWUgb2YgcmVwbGljYXRpb24uXFxuIDIwNjpcXHRcXG4gMjA3OlxcdFxcdCAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBpbiBrZXJuZWwsIHNheSBZLiBUbyBjb21waWxlIGl0IGFzIGFcXG4gMjA4OlxcdFxcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBJZiB1bnN1cmUsIHNheSBOLlxcbiAyMDk6XFx0XFxuIDIxMDpcXHRjb25maWdcXHRJUF9WU19ESFxcbiAyMTE6XFx0XFx0dHJpc3RhdGUgXFxcImRlc3RpbmF0aW9uIGhhc2hpbmcgc2NoZWR1bGluZ1xcXCJcXG4gMjEyOlxcdFxcdGhlbHBcXG4gMjEzOlxcdFxcdCAgVGhlIGRlc3RpbmF0aW9uIGhhc2hpbmcgc2NoZWR1bGluZyBhbGdvcml0aG0gYXNzaWducyBuZXR3b3JrXFxuIDIxNDpcXHRcXHQgIGNvbm5lY3Rpb25zIHRvIHRoZSBzZXJ2ZXJzIHRocm91Z2ggbG9va2luZyB1cCBhIHN0YXRpY2FsbHkgYXNzaWduZWRcXG4gMjE1OlxcdFxcdCAgaGFzaCB0YWJsZSBieSB0aGVpciBkZXN0aW5hdGlvbiBJUCBhZGRyZXNzZXMuXFxuIDIxNjpcXHRcXG4gMjE3OlxcdFxcdCAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBpbiBrZXJuZWwsIHNheSBZLiBUbyBjb21waWxlIGl0IGFzIGFcXG4gMjE4OlxcdFxcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBJZiB1bnN1cmUsIHNheSBOLlxcbiAyMTk6XFx0XFxuIDIyMDpcXHRjb25maWdcXHRJUF9WU19TSFxcbiAyMjE6XFx0XFx0dHJpc3RhdGUgXFxcInNvdXJjZSBoYXNoaW5nIHNjaGVkdWxpbmdcXFwiXFxuIDIyMjpcXHRcXHRoZWxwXFxuIDIyMzpcXHRcXHQgIFRoZSBzb3VyY2UgaGFzaGluZyBzY2hlZHVsaW5nIGFsZ29yaXRobSBhc3NpZ25zIG5ldHdvcmtcXG4gMjI0OlxcdFxcdCAgY29ubmVjdGlvbnMgdG8gdGhlIHNlcnZlcnMgdGhyb3VnaCBsb29raW5nIHVwIGEgc3RhdGljYWxseSBhc3NpZ25lZFxcbiAyMjU6XFx0XFx0ICBoYXNoIHRhYmxlIGJ5IHRoZWlyIHNvdXJjZSBJUCBhZGRyZXNzZXMuXFxuIDIyNjpcXHRcXG4gMjI3OlxcdFxcdCAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBpbiBrZXJuZWwsIHNheSBZLiBUbyBjb21waWxlIGl0IGFzIGFcXG4gMjI4OlxcdFxcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBJZiB1bnN1cmUsIHNheSBOLlxcbiAyMjk6XFx0XFxuIDIzMDpcXHRjb25maWdcXHRJUF9WU19NSFxcbiAyMzE6XFx0XFx0dHJpc3RhdGUgXFxcIm1hZ2xldiBoYXNoaW5nIHNjaGVkdWxpbmdcXFwiXFxuIDIzMjpcXHRcXHRoZWxwXFxuIDIzMzpcXHRcXHQgIFRoZSBtYWdsZXYgY29uc2lzdGVudCBoYXNoaW5nIHNjaGVkdWxpbmcgYWxnb3JpdGhtIHByb3ZpZGVzIHRoZVxcbiAyMzQ6XFx0XFx0ICBHb29nbGUncyBNYWdsZXYgaGFzaGluZyBhbGdvcml0aG0gYXMgYSBJUFZTIHNjaGVkdWxlci4gSXQgYXNzaWduc1xcbiAyMzU6XFx0XFx0ICBuZXR3b3JrIGNvbm5lY3Rpb25zIHRvIHRoZSBzZXJ2ZXJzIHRocm91Z2ggbG9va2luZyB1cCBhIHN0YXRpY2FsbHlcXG4gMjM2OlxcdFxcdCAgYXNzaWduZWQgc3BlY2lhbCBoYXNoIHRhYmxlIGNhbGxlZCB0aGUgbG9va3VwIHRhYmxlLiBNYWdsZXYgaGFzaGluZ1xcbiAyMzc6XFx0XFx0ICBpcyB0byBhc3NpZ24gYSBwcmVmZXJlbmNlIGxpc3Qgb2YgYWxsIHRoZSBsb29rdXAgdGFibGUgcG9zaXRpb25zXFxuIDIzODpcXHRcXHQgIHRvIGVhY2ggZGVzdGluYXRpb24uXFxuIDIzOTpcXHRcXG4gMjQwOlxcdFxcdCAgVGhyb3VnaCB0aGlzIG9wZXJhdGlvbiwgVGhlIG1hZ2xldiBoYXNoaW5nIGdpdmVzIGFuIGFsbW9zdCBlcXVhbFxcbiAyNDE6XFx0XFx0ICBzaGFyZSBvZiB0aGUgbG9va3VwIHRhYmxlIHRvIGVhY2ggb2YgdGhlIGRlc3RpbmF0aW9ucyBhbmQgcHJvdmlkZXNcXG4gMjQyOlxcdFxcdCAgbWluaW1hbCBkaXNydXB0aW9uIGJ5IHVzaW5nIHRoZSBsb29rdXAgdGFibGUuIFdoZW4gdGhlIHNldCBvZlxcbiAyNDM6XFx0XFx0ICBkZXN0aW5hdGlvbnMgY2hhbmdlcywgYSBjb25uZWN0aW9uIHdpbGwgbGlrZWx5IGJlIHNlbnQgdG8gdGhlIHNhbWVcXG4gMjQ0OlxcdFxcdCAgZGVzdGluYXRpb24gYXMgaXQgd2FzIGJlZm9yZS5cXG4gMjQ1OlxcdFxcbiAyNDY6XFx0XFx0ICBJZiB5b3Ugd2FudCB0byBjb21waWxlIGl0IGluIGtlcm5lbCwgc2F5IFkuIFRvIGNvbXBpbGUgaXQgYXMgYVxcbiAyNDc6XFx0XFx0ICBtb2R1bGUsIGNob29zZSBNIGhlcmUuIElmIHVuc3VyZSwgc2F5IE4uXFxuIDI0ODpcXHRcXG4gMjQ5OlxcdGNvbmZpZ1xcdElQX1ZTX1NFRFxcbiAyNTA6XFx0XFx0dHJpc3RhdGUgXFxcInNob3J0ZXN0IGV4cGVjdGVkIGRlbGF5IHNjaGVkdWxpbmdcXFwiXFxuIDI1MTpcXHRcXHRoZWxwXFxuIDI1MjpcXHRcXHQgIFRoZSBzaG9ydGVzdCBleHBlY3RlZCBkZWxheSBzY2hlZHVsaW5nIGFsZ29yaXRobSBhc3NpZ25zIG5ldHdvcmtcXG4gMjUzOlxcdFxcdCAgY29ubmVjdGlvbnMgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSBzaG9ydGVzdCBleHBlY3RlZCBkZWxheS4gVGhlIFxcbiAyNTQ6XFx0XFx0ICBleHBlY3RlZCBkZWxheSB0aGF0IHRoZSBqb2Igd2lsbCBleHBlcmllbmNlIGlzIChDaSArIDEpIC8gVWkgaWYgXFxuIDI1NTpcXHRcXHQgIHNlbnQgdG8gdGhlIGl0aCBzZXJ2ZXIsIGluIHdoaWNoIENpIGlzIHRoZSBudW1iZXIgb2YgY29ubmVjdGlvbnNcXG4gMjU2OlxcdFxcdCAgb24gdGhlIGl0aCBzZXJ2ZXIgYW5kIFVpIGlzIHRoZSBmaXhlZCBzZXJ2aWNlIHJhdGUgKHdlaWdodClcXG4gMjU3OlxcdFxcdCAgb2YgdGhlIGl0aCBzZXJ2ZXIuXFxuIDI1ODpcXHRcXG4gMjU5OlxcdFxcdCAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBpbiBrZXJuZWwsIHNheSBZLiBUbyBjb21waWxlIGl0IGFzIGFcXG4gMjYwOlxcdFxcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBJZiB1bnN1cmUsIHNheSBOLlxcbiAyNjE6XFx0XFxuIDI2MjpcXHRjb25maWdcXHRJUF9WU19OUVxcbiAyNjM6XFx0XFx0dHJpc3RhdGUgXFxcIm5ldmVyIHF1ZXVlIHNjaGVkdWxpbmdcXFwiXFxuIDI2NDpcXHRcXHRoZWxwXFxuIDI2NTpcXHRcXHQgIFRoZSBuZXZlciBxdWV1ZSBzY2hlZHVsaW5nIGFsZ29yaXRobSBhZG9wdHMgYSB0d28tc3BlZWQgbW9kZWwuXFxuIDI2NjpcXHRcXHQgIFdoZW4gdGhlcmUgaXMgYW4gaWRsZSBzZXJ2ZXIgYXZhaWxhYmxlLCB0aGUgam9iIHdpbGwgYmUgc2VudCB0b1xcbiAyNjc6XFx0XFx0ICB0aGUgaWRsZSBzZXJ2ZXIsIGluc3RlYWQgb2Ygd2FpdGluZyBmb3IgYSBmYXN0IG9uZS4gV2hlbiB0aGVyZVxcbiAyNjg6XFx0XFx0ICBpcyBubyBpZGxlIHNlcnZlciBhdmFpbGFibGUsIHRoZSBqb2Igd2lsbCBiZSBzZW50IHRvIHRoZSBzZXJ2ZXJcXG4gMjY5OlxcdFxcdCAgdGhhdCBtaW5pbWl6ZSBpdHMgZXhwZWN0ZWQgZGVsYXkgKFRoZSBTaG9ydGVzdCBFeHBlY3RlZCBEZWxheVxcbiAyNzA6XFx0XFx0ICBzY2hlZHVsaW5nIGFsZ29yaXRobSkuXFxuIDI3MTpcXHRcXG4gMjcyOlxcdFxcdCAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBpbiBrZXJuZWwsIHNheSBZLiBUbyBjb21waWxlIGl0IGFzIGFcXG4gMjczOlxcdFxcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBJZiB1bnN1cmUsIHNheSBOLlxcbiAyNzQ6XFx0XFxuIDI3NTpcXHRjb25maWdcXHRJUF9WU19UV09TXFxuIDI3NjpcXHRcXHR0cmlzdGF0ZSBcXFwid2VpZ2h0ZWQgcmFuZG9tIHR3b3MgY2hvaWNlIGxlYXN0LWNvbm5lY3Rpb24gc2NoZWR1bGluZ1xcXCJcXG4gMjc3OlxcdFxcdGhlbHBcXG4gMjc4OlxcdFxcdCAgVGhlIHdlaWdodGVkIHJhbmRvbSB0d29zIGNob2ljZSBsZWFzdC1jb25uZWN0aW9uIHNjaGVkdWxpbmdcXG4gMjc5OlxcdFxcdCAgYWxnb3JpdGhtIHBpY2tzIHR3byByYW5kb20gcmVhbCBzZXJ2ZXJzIGFuZCBkaXJlY3RzIG5ldHdvcmtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6MTE6NDAuODk0ODI1MTQyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY4NjM3OTU5NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSVBWUyBPdmVybG9hZCBIYW5kbGluZyBQYXRjaCBSZXZpZXcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gbWV0aWN1bG91c2x5IGV4YW1pbmUgdGhlIGNoYW5nZXMgdG8gdGhlIElQVlMgY29yZS4gSXQgYXBwZWFycyB3ZSdyZSBhZGRyZXNzaW5nIHRoZSBvdmVybG9hZCBtZWNoYW5pc20sIGFuZCB0aGUgcmVtb3ZhbCBvZiBgSVBfVlNfREVTVF9GX09WRVJMT0FEYCBmcm9tIHRoZSBgZmxhZ3NgIGZpZWxkIGluIGBpbmNsdWRlL25ldC9pcF92cy5oYCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl0IGltcGxpZXMgYSBzaGlmdCBpbiBob3cgb3ZlcmxvYWQgc3RhdGUgaXMgbWFuYWdlZCDigJMgbGlrZWx5LCB3ZSdyZSBtb3ZpbmcgdG93YXJkcyBhIG1vcmUgZXhwbGljaXQgdGhyZXNob2xkLWJhc2VkIGFwcHJvYWNoLCBjb25maXJtZWQgYnkgdGhlIGBSRUFEX09OQ0UoZGVzdC1cdTAwM2VsX3RocmVzaG9sZF92YWwpYCBjaGVjayBhbmQgdGhlIGFkZGl0aW9uL3Jlb3JkZXJpbmcgb2YgYHVfdGhyZXNob2xkX3ZhbGAgYW5kIGBsX3RocmVzaG9sZF92YWxgIGluIGBzdHJ1Y3QgaXBfdnNfZGVzdGAuIFRoYXQgc3RydWN0IHJlb3JnYW5pemF0aW9uIGRlc2VydmVzIGEgY2xvc2VyIGxvb2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGFsaWdubWVudCBpc3N1ZXMgdGhhdCBjb3VsZCBjcm9wIHVwLCBldmVuIHdpdGggYFJFQURfT05DRWAgaW4gcGxheS5cblxuTmV4dCwgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgc2lkZSBpbiBgaXBfdnNfY29ubi5jYCBpcyBrZXkuIGBpcF92c19iaW5kX2Rlc3RgIGFuZCBgaXBfdnNfdW5iaW5kX2Rlc3RgIG5vdyBleHBsaWNpdGx5IGNhbGwgYGlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkYCBiYXNlZCBvbiBjb21wYXJpc29ucyB3aXRoIHRoZSBuZXcgdGhyZXNob2xkIHZhbHVlcywgYHVfdGhyZXNob2xkX3ZhbGAgYW5kIGBsX3RocmVzaG9sZF92YWxgLCByZXNwZWN0aXZlbHkuIFRoaXMgaXMgdGhlIGhlYXJ0IG9mIHRoZSBsb2dpYywgYW5kIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGhvdyB0aGVzZSB0aHJlc2hvbGRzIGFyZSBiZWluZyBzZXQgYW5kIHVzZWQgdG8gdG9nZ2xlIHRoZSBvdmVybG9hZCBzdGF0ZSwgYW5kIGlmIHRoZXJlIGFyZSBlZGdlIGNhc2VzIGluIHRoZSBjb25uZWN0aW9ucyBsaWZlIGN5Y2xlLlxuXG5UaGUgY29udHJvbCBwbGFuZSBjaGFuZ2VzIGluIGBpcF92c19jdGwuY2Agd2l0aCB0aGUgbmV3IHVwZGF0ZSBmdW5jdGlvbnMgYXJlIGdvaW5nIHRvIGJlIGltcG9ydGFudCB0b28g4oCTIHNwZWNpZmljYWxseSBgX19pcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZGAsIGBpcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZGAsIGFuZCBgX19pcF92c191cGRhdGVfZGVzdGAuIEkgbmVlZCB0byB0cmFjayBob3cgdGhleSBhcmUgdHJpZ2dlcmVkLCB0byB2ZXJpZnkgdGhleSBmaXQgd2l0aCB0aGUgdGhyZXNob2xkIGNoYW5nZXMgYW5kIHRoZSBzY2hlZHVsZXIgbG9naWMuXG5cbkZpbmFsbHksIHRoZSBzY2hlZHVsZXIgaW50ZWdyYXRpb24gaXMgY3J1Y2lhbC4gSSBzZWUgY2hhbmdlcyBpbiBtYW55IG9mIHRoZSBzY2hlZHVsZXJzLCBzcGVjaWZpY2FsbHk6IGBpcF92c19kaF9zY2hlZHVsZWAsIGBpcF92c19mb19zY2hlZHVsZWAsIGBfX2lwX3ZzX2xibGNfc2NoZWR1bGVgLCBgX19pcF92c19sYmxjcl9zY2hlZHVsZWAsIGBpcF92c19sY19zY2hlZHVsZWAsIGBpc191bmF2YWlsYWJsZWAgaW4gbWggYW5kIHNoLCBgaXBfdnNfbnFfc2NoZWR1bGVgLCBgaXBfdnNfb3ZmX3NjaGVkdWxlYCwgYGlwX3ZzX3JyX3NjaGVkdWxlYCwgYGlwX3ZzX3NlZF9zY2hlZHVsZWAsIGBpcF92c190d29zX3NjaGVkdWxlYCwgYGlwX3ZzX3dsY19zY2hlZHVsZWAsIGBpcF92c193cnJfc2NoZWR1bGVgLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgb3ZlcmxvYWQgc3RhdGUgYWZmZWN0cyB0aGUgc2NoZWR1bGluZyBkZWNpc2lvbnMuIEZvciBpbnN0YW5jZSwgaXMgYGlzX3VuYXZhaWxhYmxlYCBiZWluZyB1c2VkIGluIHRoZSBvdmVybG9hZCBwYXRoPyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgZWFjaCBzY2hlZHVsZXIgaXMgYmVoYXZpbmcgY29ycmVjdGx5IGFuZCB0aGF0IG5vIHVuZXhwZWN0ZWQgYmVoYXZpb3IsIHN1Y2ggYXMgdW5uZWNlc3NhcnkgYmFjay1vZmYsIGlzIGludHJvZHVjZWQuXG5cbkdpdmVuIHRoZSBzdHJ1Y3R1cmFsIGNoYW5nZXMgYW5kIGxvZ2ljIHNoaWZ0LCBJIG5lZWQgdG8gc3BlY2lmeSB0aGVzZSBGb2N1c1N5bWJvbHMgdG8gYmUgdGFyZ2V0ZWQgZm9yIGZ1enppbmc6IGBpcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZGAsIGBpcF92c19iaW5kX2Rlc3RgLCBgaXBfdnNfdW5iaW5kX2Rlc3RgLCBgX19pcF92c191cGRhdGVfZGVzdGAsIGBpcF92c19hZGRfZGVzdGAsIGBpcF92c19lZGl0X2Rlc3RgLCBgaXBfdnNfZGhfc2NoZWR1bGVgLCBgaXBfdnNfZm9fc2NoZWR1bGVgLCBgaXBfdnNfbGNfc2NoZWR1bGVgLCBgaXBfdnNfb3ZmX3NjaGVkdWxlYCwgYGlwX3ZzX3JyX3NjaGVkdWxlYCwgYGlwX3ZzX3NlZF9zY2hlZHVsZWAsIGBpcF92c190d29zX3NjaGVkdWxlYCwgYGlwX3ZzX3dsY19zY2hlZHVsZWAsIGFuZCBgaXBfdnNfd3JyX3NjaGVkdWxlYC5cblxuVGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGFwcGVhciB0byBiZSB0aGUgc3RhbmRhcmQgSVBWUyBzdGFjazogYElQX1ZTYCwgYE5FVEZJTFRFUmAsIGFuZCBgSU5FVGAuIE5vdGhpbmcgdW5leHBlY3RlZCB0aGVyZS5cblxuVWx0aW1hdGVseSwgSSdtIGNvbmZpZGVudCB0aGF0IHRoZXNlIGNoYW5nZXMgd2FycmFudCB0aG9yb3VnaCBmdXp6aW5nLiBUaGUgcGF0Y2ggc2lnbmlmaWNhbnRseSBhbHRlcnMgZGF0YSBzdHJ1Y3R1cmUgbGF5b3V0IGFuZCB0aGUgdGhyZXNob2xkL292ZXJsb2FkIHN0YXRlIGxvZ2ljLCBpbXBhY3RpbmcgSVBWUyBjb25uZWN0aW9uIHRyYWNraW5nLCBjb250cm9sIHBsYW5lIGRlc3RpbmF0aW9uIHVwZGF0aW5nLCBhbmQgc2NoZWR1bGluZyBhbGdvcml0aG1zLiBUaGVyZWZvcmUsIHRoZSByZWFzb25pbmcgZm9yIGBzZXQtcmVzdWx0c2Agd2lsbCBjbGVhcmx5IGV4cGxhaW4gdGhpcyBmYWN0LCBzcGVjaWZ5IHRoZSBmb2N1cyBzeW1ib2xzLCBhbmQgaW5jbHVkZSB0aGUgZW5hYmxlIGNvbmZpZ3VyYXRpb25zLiBUaGlzIGNvdmVycyBldmVyeXRoaW5nLiBMZXQncyBwcm9jZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTQ1OCwiT3V0cHV0VG9rZW5zIjoyNTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxMTo0Ny43NTg2MjQzNzVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzYyMzM1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfVlNcIixcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkXCIsXG4gICAgXCJpcF92c19iaW5kX2Rlc3RcIixcbiAgICBcImlwX3ZzX3VuYmluZF9kZXN0XCIsXG4gICAgXCJfX2lwX3ZzX3VwZGF0ZV9kZXN0XCIsXG4gICAgXCJpcF92c19lZGl0X2Rlc3RcIixcbiAgICBcImlwX3ZzX2FkZF9kZXN0XCIsXG4gICAgXCJpcF92c19ycl9zY2hlZHVsZVwiLFxuICAgIFwiaXBfdnNfd3JyX3NjaGVkdWxlXCIsXG4gICAgXCJpcF92c193bGNfc2NoZWR1bGVcIixcbiAgICBcImlwX3ZzX2xjX3NjaGVkdWxlXCIsXG4gICAgXCJpcF92c19mb19zY2hlZHVsZVwiLFxuICAgIFwiaXBfdnNfb3ZmX3NjaGVkdWxlXCIsXG4gICAgXCJpcF92c190d29zX3NjaGVkdWxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGRlc3RpbmF0aW9uIG92ZXJsb2FkIHRyYWNraW5nIGxvZ2ljIGFuZCBkZXN0aW5hdGlvbiBzdHJ1Y3R1cmUgbGF5b3V0IGluIHRoZSBJUFZTIChJUCBWaXJ0dWFsIFNlcnZlcikgc3Vic3lzdGVtLiBJdCB1cGRhdGVzIGNvbm5lY3Rpb24gYmluZGluZyBhbmQgdW5iaW5kaW5nIHRocmVzaG9sZHMsIGNvbnRyb2wgcGxhbmUgZGVzdGluYXRpb24gdXBkYXRlcywgYW5kIHNjaGVkdWxlciBvdmVybG9hZCBldmFsdWF0aW9uIGFjcm9zcyBJUFZTIGFsZ29yaXRobXMuIFRoZXNlIGFyZSByZWFjaGFibGUsIGV4ZWN1dGFibGUgbmV0d29yayBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgZm9yIHJhY2UgY29uZGl0aW9ucywgYXJpdGhtZXRpYyBvciBzdGF0ZSBoYW5kbGluZyBidWdzLCBhbmQgdGhyZXNob2xkIGVkZ2UgY2FzZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfVlNcIixcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkXCIsXG4gICAgXCJpcF92c19iaW5kX2Rlc3RcIixcbiAgICBcImlwX3ZzX3VuYmluZF9kZXN0XCIsXG4gICAgXCJfX2lwX3ZzX3VwZGF0ZV9kZXN0XCIsXG4gICAgXCJpcF92c19lZGl0X2Rlc3RcIixcbiAgICBcImlwX3ZzX2FkZF9kZXN0XCIsXG4gICAgXCJpcF92c19ycl9zY2hlZHVsZVwiLFxuICAgIFwiaXBfdnNfd3JyX3NjaGVkdWxlXCIsXG4gICAgXCJpcF92c193bGNfc2NoZWR1bGVcIixcbiAgICBcImlwX3ZzX2xjX3NjaGVkdWxlXCIsXG4gICAgXCJpcF92c19mb19zY2hlZHVsZVwiLFxuICAgIFwiaXBfdnNfb3ZmX3NjaGVkdWxlXCIsXG4gICAgXCJpcF92c190d29zX3NjaGVkdWxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGRlc3RpbmF0aW9uIG92ZXJsb2FkIHRyYWNraW5nIGxvZ2ljIGFuZCBkZXN0aW5hdGlvbiBzdHJ1Y3R1cmUgbGF5b3V0IGluIHRoZSBJUFZTIChJUCBWaXJ0dWFsIFNlcnZlcikgc3Vic3lzdGVtLiBJdCB1cGRhdGVzIGNvbm5lY3Rpb24gYmluZGluZyBhbmQgdW5iaW5kaW5nIHRocmVzaG9sZHMsIGNvbnRyb2wgcGxhbmUgZGVzdGluYXRpb24gdXBkYXRlcywgYW5kIHNjaGVkdWxlciBvdmVybG9hZCBldmFsdWF0aW9uIGFjcm9zcyBJUFZTIGFsZ29yaXRobXMuIFRoZXNlIGFyZSByZWFjaGFibGUsIGV4ZWN1dGFibGUgbmV0d29yayBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgZm9yIHJhY2UgY29uZGl0aW9ucywgYXJpdGhtZXRpYyBvciBzdGF0ZSBoYW5kbGluZyBidWdzLCBhbmQgdGhyZXNob2xkIGVkZ2UgY2FzZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjExOjQ3LjgzNjI1NDE5OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDEzMjMyMjEwNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxMTo0Ny44MzY3NzM5NzlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0MTMyMjY5NzAzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVvcmdhbml6ZXMgZmllbGRzIGluIGBzdHJ1Y3QgaXBfdnNfZGVzdGAgZm9yIGJldHRlciBjYWNoZWxpbmUgdXRpbGl6YXRpb24gYW5kIHJlZmFjdG9ycyB0aGUgZGVzdGluYXRpb24gb3ZlcmxvYWQgc3RhdHVzIHRyYWNraW5nIHRvIHVzZSBgbF90aHJlc2hvbGRfdmFsYCAvIGB1X3RocmVzaG9sZF92YWxgIGluc3RlYWQgb2YgYGRlc3QtXFx1MDAzZWZsYWdzYCB3aXRoIGBJUF9WU19ERVNUX0ZfT1ZFUkxPQURgLlxcblxcbkFsbCBgc3RydWN0IGlwX3ZzX2Rlc3RgIGluc3RhbmNlcyBhcmUgemVyby1hbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmooKWAgYW5kIHRoZWlyIHRocmVzaG9sZCBmaWVsZHMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIHVwb24gY3JlYXRpb24uIFRoZSBzdHJ1Y3R1cmUgaXRzZWxmIGlzIG5vdCBjb3BpZWQgdG8gdXNlcnNwYWNlIGFzIGEgcmF3IGJsb2I7IHVzZXJzcGFjZSBxdWVyaWVzIHNlcmlhbGl6ZSBpbmRpdmlkdWFsIGZpZWxkcyBvciB1c2UgemVyb2VkIGludGVybWVkaWF0ZSBzdHJ1Y3R1cmVzIChgbWVtc2V0YCBpbiBgX19pcF92c19nZXRfZGVzdF9lbnRyaWVzYCBhbmQgaW5kaXZpZHVhbCBOZXRsaW5rIGF0dHJpYnV0ZXMgaW4gYGlwX3ZzX2dlbmxfZmlsbF9kZXN0YCkuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIGJyYW5jaGVkIHVwb24uXFxuXFxuQmVjYXVzZSB0aGUgY2hhbmdlcyBpbnRyb2R1Y2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTAyOWMxODUzOWUyYmQ0MzkzYmI4NzM2ZGYwMDAzZTQyMmNiN2M5YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMjI6MTA6MTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcF92cy5oIGIvaW5jbHVkZS9uZXQvaXBfdnMuaFxuaW5kZXggMzJmZGU3MzFiY2ViNy4uOWE4M2JmZjMyNTY5ZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2lwX3ZzLmhcbisrKyBiL2luY2x1ZGUvbmV0L2lwX3ZzLmhcbkBAIC0zNiw5ICszNiw2IEBAXG4gI2RlZmluZSBJUF9WU19IRFJfSU5WRVJTRVx0MVxuICNkZWZpbmUgSVBfVlNfSERSX0lDTVBcdFx0MlxuIFxuLS8qIERlc3RpbmF0aW9uIFNlcnZlciBGbGFncyAqL1xuLSNkZWZpbmUgSVBfVlNfREVTVF9GX09WRVJMT0FEXHQweDAwMDJcdFx0Lyogc2VydmVyIGlzIG92ZXJsb2FkZWQgKi9cbi1cbiAvKiBEZXN0aW5hdGlvbiBTZXJ2ZXIgQ29uZmlnIEZsYWdzICovXG4gI2RlZmluZSBJUF9WU19ERVNUX0NGX0FWQUlMQUJMRVx0MHgwMDAxXHRcdC8qIHNlcnZlciBpcyBhdmFpbGFibGUgKi9cbiBcbkBAIC05NzMsMzIgKzk3MCw0MyBAQCBzdHJ1Y3QgaXBfdnNfZGVzdF9kc3Qge1xuICAqIGFuZCBzbyBvbi5cbiAgKi9cbiBzdHJ1Y3QgaXBfdnNfZGVzdCB7XG4rXHQvKiBDYWNoZWxpbmUgZm9yIGhhc2ggdGFibGUgbm9kZXMgLSByZWFkLW1vc3RseSAqL1xuK1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0bl9saXN0OyAgIC8qIGZvciB0aGUgZGVzdHMgaW4gdGhlIHNlcnZpY2UgKi9cbiBcdHN0cnVjdCBobGlzdF9ub2RlXHRkX2xpc3Q7ICAgLyogZm9yIHRhYmxlIHdpdGggYWxsIHRoZSBkZXN0cyAqL1xuIFxuLVx0dTE2XHRcdFx0YWY7XHRcdC8qIGFkZHJlc3MgZmFtaWx5ICovXG4tXHRfX2JlMTZcdFx0XHRwb3J0O1x0XHQvKiBwb3J0IG51bWJlciBvZiB0aGUgc2VydmVyICovXG4tXHR1bmlvbiBuZl9pbmV0X2FkZHJcdGFkZHI7XHRcdC8qIElQIGFkZHJlc3Mgb2YgdGhlIHNlcnZlciAqL1xuLVx0dm9sYXRpbGUgdW5zaWduZWQgaW50XHRmbGFncztcdFx0LyogZGVzdCBzdGF0dXMgZmxhZ3MgKi9cbi1cdGF0b21pY190XHRcdGNvbm5fZmxhZ3M7XHQvKiBmbGFncyB0byBjb3B5IHRvIGNvbm4gKi9cbiBcdGF0b21pY190XHRcdHdlaWdodDtcdFx0Lyogc2VydmVyIHdlaWdodCAqL1xuLVx0dW5zaWduZWQgbG9uZ1x0XHRjZmxhZ3M7XHRcdC8qIGNvbmZpZyBmbGFncyAqL1xuIFx0YXRvbWljX3RcdFx0bGFzdF93ZWlnaHQ7XHQvKiBzZXJ2ZXIgbGF0ZXN0IHdlaWdodCAqL1xuK1xuK1x0LyogY29ubmVjdGlvbiB0aHJlc2hvbGRzICovXG4rXHR1MzJcdFx0XHRsX3RocmVzaG9sZF92YWw7LyogdXNlZCBsb3dlciB0aHJlc2hvbGQgKi9cbitcdHUzMlx0XHRcdHVfdGhyZXNob2xkX3ZhbDsvKiB1c2VkIHVwcGVyIHRocmVzaG9sZCAqL1xuK1x0LyogMzIvNDggKi9cbitcdHUzMlx0XHRcdGxfdGhyZXNob2xkO1x0LyogbG93ZXIgdGhyZXNob2xkICovXG4rXHR1MzJcdFx0XHR1X3RocmVzaG9sZDtcdC8qIHVwcGVyIHRocmVzaG9sZCAqL1xuK1xuK1x0dW5zaWduZWQgbG9uZ1x0XHRjZmxhZ3M7XHRcdC8qIGNvbmZpZyBmbGFncyAqL1xuK1xuK1x0LyogNDQvNjQgKi9cbitcdGF0b21pY190XHRcdGNvbm5fZmxhZ3M7XHQvKiBmbGFncyB0byBjb3B5IHRvIGNvbm4gKi9cbitcbiBcdF9fdTE2XHRcdFx0dHVuX3R5cGU7XHQvKiB0dW5uZWwgdHlwZSAqL1xuIFx0X19iZTE2XHRcdFx0dHVuX3BvcnQ7XHQvKiB0dW5uZWwgcG9ydCAqL1xuIFx0X191MTZcdFx0XHR0dW5fZmxhZ3M7XHQvKiB0dW5uZWwgZmxhZ3MgKi9cbiBcbi1cdHJlZmNvdW50X3RcdFx0cmVmY250O1x0XHQvKiByZWZlcmVuY2UgY291bnRlciAqL1xuLVx0c3RydWN0IGlwX3ZzX3N0YXRzICAgICAgc3RhdHM7ICAgICAgICAgIC8qIHN0YXRpc3RpY3MgKi9cbi1cdHVuc2lnbmVkIGxvbmdcdFx0aWRsZV9zdGFydDtcdC8qIHN0YXJ0IHRpbWUsIGppZmZpZXMgKi9cbitcdHUxNlx0XHRcdGFmO1x0XHQvKiBhZGRyZXNzIGZhbWlseSAqL1xuK1x0X19iZTE2XHRcdFx0cG9ydDtcdFx0LyogcG9ydCBudW1iZXIgb2YgdGhlIHNlcnZlciAqL1xuK1x0LyogNjAvODAgKi9cbitcdHVuaW9uIG5mX2luZXRfYWRkclx0YWRkcjtcdFx0LyogSVAgYWRkcmVzcyBvZiB0aGUgc2VydmVyICovXG4gXG4tXHQvKiBjb25uZWN0aW9uIGNvdW50ZXJzIGFuZCB0aHJlc2hvbGRzICovXG4tXHRhdG9taWNfdFx0XHRhY3RpdmVjb25ucztcdC8qIGFjdGl2ZSBjb25uZWN0aW9ucyAqL1xuK1x0LyogY29ubmVjdGlvbiBjb3VudGVycyAqL1xuIFx0YXRvbWljX3RcdFx0dG90YWxjb25ucztcdC8qIHRvdGFsIGNvbm5lY3Rpb25zICovXG4rXHRhdG9taWNfdFx0XHRhY3RpdmVjb25ucztcdC8qIGFjdGl2ZSBjb25uZWN0aW9ucyAqL1xuIFx0YXRvbWljX3RcdFx0cGVyc2lzdGNvbm5zO1x0LyogcGVyc2lzdGVudCBjb25uZWN0aW9ucyAqL1xuLVx0X191MzJcdFx0XHR1X3RocmVzaG9sZDtcdC8qIHVwcGVyIHRocmVzaG9sZCAqL1xuLVx0X191MzJcdFx0XHRsX3RocmVzaG9sZDtcdC8qIGxvd2VyIHRocmVzaG9sZCAqL1xuLVx0X191MzJcdFx0XHRsX3RocmVzaG9sZF92YWw7LyogdXNlZCBsb3dlciB0aHJlc2hvbGQgKi9cbitcbitcdHJlZmNvdW50X3RcdFx0cmVmY250O1x0XHQvKiByZWZlcmVuY2UgY291bnRlciAqL1xuK1x0c3RydWN0IGlwX3ZzX3N0YXRzICAgICAgc3RhdHM7ICAgICAgICAgIC8qIHN0YXRpc3RpY3MgKi9cbitcdHVuc2lnbmVkIGxvbmdcdFx0aWRsZV9zdGFydDtcdC8qIHN0YXJ0IHRpbWUsIGppZmZpZXMgKi9cbiBcbiBcdC8qIGZvciBkZXN0aW5hdGlvbiBjYWNoZSAqL1xuIFx0c3BpbmxvY2tfdFx0XHRkc3RfbG9jaztcdC8qIGxvY2sgb2YgZHN0X2NhY2hlICovXG5AQCAtMTkxNSw3ICsxOTIzLDEzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c19kZXN0X3B1dF9hbmRfZnJlZShzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcbiBcdFx0a2ZyZWUoZGVzdCk7XG4gfVxuIFxuLXZvaWQgaXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QsIGludCBtb2RlKTtcbit2b2lkIGlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKHN0cnVjdCBpcF92c19kZXN0ICpkZXN0LCBib29sIG92ZXJsb2FkKTtcbitcbisvKiBDaGVjayBpZiBkZXN0IGlzIGluIG92ZXJsb2FkZWQgc3RhdGUgKi9cbitzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGNvbnN0IHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KVxuK3tcbitcdHJldHVybiBSRUFEX09OQ0UoZGVzdC1cdTAwM2VsX3RocmVzaG9sZF92YWwpO1xuK31cbiBcbiAvKiBJUFZTIHN5bmMgZGFlbW9uIGRhdGEgYW5kIGZ1bmN0aW9uIHByb3RvdHlwZXNcbiAgKiAoZnJvbSBpcF92c19zeW5jLmMpXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNcbmluZGV4IDZmYTNlMWRjNTM0YzMuLjUzNDhjMmY0OWI2NGUgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jXG5AQCAtMTE1MCw4ICsxMTUwLDggQEAgaXBfdnNfYmluZF9kZXN0KHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QpXG4gXHRcdGlmICghKGZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfSU5BQ1RJVkUpKVxuIFx0XHRcdGF0b21pY19pbmMoXHUwMDI2ZGVzdC1cdTAwM2VhY3RpdmVjb25ucyk7XG4gXHRcdHRjID0gYXRvbWljX2luY19yZXR1cm4oXHUwMDI2ZGVzdC1cdTAwM2V0b3RhbGNvbm5zKTtcbi1cdFx0aWYgKHRjID09IFJFQURfT05DRShkZXN0LVx1MDAzZXVfdGhyZXNob2xkKSlcbi1cdFx0XHRpcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChkZXN0LCAxKTtcbitcdFx0aWYgKHRjIFx1MDAzZT0gUkVBRF9PTkNFKGRlc3QtXHUwMDNldV90aHJlc2hvbGRfdmFsKSlcbitcdFx0XHRpcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChkZXN0LCB0cnVlKTtcbiBcdH0gZWxzZSB7XG4gXHRcdC8qIEl0IGlzIGEgcGVyc2lzdGVudCBjb25uZWN0aW9uL3RlbXBsYXRlLCBzbyBpbmNyZWFzZVxuIFx0XHQgICB0aGUgcGVyc2lzdGVudCBjb25uZWN0aW9uIGNvdW50ZXIgKi9cbkBAIC0xMjQzLDggKzEyNDMsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaXBfdnNfdW5iaW5kX2Rlc3Qoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxuIFx0XHRpZiAoIShjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX0lOQUNUSVZFKSlcbiBcdFx0XHRhdG9taWNfZGVjKFx1MDAyNmRlc3QtXHUwMDNlYWN0aXZlY29ubnMpO1xuIFx0XHR0YyA9IGF0b21pY19mZXRjaF9kZWMoXHUwMDI2ZGVzdC1cdTAwM2V0b3RhbGNvbm5zKTtcbi1cdFx0aWYgKHRjID09IFJFQURfT05DRShkZXN0LVx1MDAzZWxfdGhyZXNob2xkX3ZhbCkpXG4tXHRcdFx0aXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoZGVzdCwgLTEpO1xuK1x0XHRpZiAodGMgXHUwMDNjPSBSRUFEX09OQ0UoZGVzdC1cdTAwM2VsX3RocmVzaG9sZF92YWwpKVxuK1x0XHRcdGlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKGRlc3QsIGZhbHNlKTtcbiBcdH0gZWxzZSB7XG4gXHRcdC8qIEl0IGlzIGEgcGVyc2lzdGVudCBjb25uZWN0aW9uL3RlbXBsYXRlLCBzbyBkZWNyZWFzZVxuIFx0XHQgICB0aGUgcGVyc2lzdGVudCBjb25uZWN0aW9uIGNvdW50ZXIgKi9cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmNcbmluZGV4IDRjMWM3Mzk0NDZiNzYuLjMwMDM1NDdkY2FiZTUgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuY1xuQEAgLTEzMDksMzIgKzEzMDksMzIgQEAgdm9pZCBpcF92c19zdGF0c19mcmVlKHN0cnVjdCBpcF92c19zdGF0cyAqc3RhdHMpXG4gICogLSBjb25ucyByZWFjaCB1X3RocmVzaG9sZCBhbmQgZXhjZWVkIGl0OiBzZXQgdGhlIGZsYWdcbiAgKiAtIGNvbm5zIGdvIGJlbG93IGxfdGhyZXNob2xkIChvciA3NSUgb2YgdV90aHJlc2hvbGQpOiBjbGVhciB0aGUgZmxhZ1xuICAqL1xuLXN0YXRpYyB2b2lkIF9faXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QsIGludCBtb2RlKVxuK3N0YXRpYyB2b2lkIF9faXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QsIGJvb2wgb3ZlcmxvYWQpXG4ge1xuIFx0aW50IGNvbm5zO1xuIFx0dTMyIGwsIHU7XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmRlc3QtXHUwMDNlZHN0X2xvY2spO1xuIFx0dSA9IFJFQURfT05DRShkZXN0LVx1MDAzZXVfdGhyZXNob2xkKTtcbi1cdGlmICghdSlcbi1cdFx0Z290byB1bnNldDtcbi1cdGwgPSBSRUFEX09OQ0UoZGVzdC1cdTAwM2VsX3RocmVzaG9sZF92YWwpO1xuLVx0Y29ubnMgPSBhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZXRvdGFsY29ubnMpO1xuLVx0aWYgKGNvbm5zIFx1MDAzZT0gKG1vZGUgXHUwMDNlIDAgPyBsIDogdSkpIHtcbi1cdFx0ZGVzdC1cdTAwM2VmbGFncyB8PSBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQ7XG4tXHRcdHJldHVybjtcbitcdGlmICh1KSB7XG4rXHRcdC8qIExvdyB0aHJlc2hvbGQgZGVmYXVsdHMgdG8gNzUlIG9mIHVwcGVyIHRocmVzaG9sZCAqL1xuK1x0XHRsID0gUkVBRF9PTkNFKGRlc3QtXHUwMDNlbF90aHJlc2hvbGQpID8gOiAodSAtICh1IFx1MDAzZVx1MDAzZSAyKSk7XG4rXHRcdGNvbm5zID0gYXRvbWljX3JlYWQoXHUwMDI2ZGVzdC1cdTAwM2V0b3RhbGNvbm5zKTtcbitcdFx0aWYgKGNvbm5zIFx1MDAzZT0gKG92ZXJsb2FkID8gbCA6IHUpKSB7XG4rXHRcdFx0V1JJVEVfT05DRShkZXN0LVx1MDAzZXVfdGhyZXNob2xkX3ZhbCwgSU5UX01BWCk7XG4rXHRcdFx0V1JJVEVfT05DRShkZXN0LVx1MDAzZWxfdGhyZXNob2xkX3ZhbCwgbCk7XG4rXHRcdFx0cmV0dXJuO1xuK1x0XHR9XG4gXHR9XG4tXHRpZiAoY29ubnMgXHUwMDNlPSAobW9kZSBcdTAwM2MgMCA/IHUgOiBsKSlcbi1cdFx0cmV0dXJuO1xuIFxuLXVuc2V0OlxuLVx0ZGVzdC1cdTAwM2VmbGFncyBcdTAwMjY9IH5JUF9WU19ERVNUX0ZfT1ZFUkxPQUQ7XG4rXHRXUklURV9PTkNFKGRlc3QtXHUwMDNldV90aHJlc2hvbGRfdmFsLCB1ID8gOiBJTlRfTUFYKTtcbitcdFdSSVRFX09OQ0UoZGVzdC1cdTAwM2VsX3RocmVzaG9sZF92YWwsIDApO1xuIH1cbiBcbi12b2lkIGlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKHN0cnVjdCBpcF92c19kZXN0ICpkZXN0LCBpbnQgbW9kZSlcbit2b2lkIGlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKHN0cnVjdCBpcF92c19kZXN0ICpkZXN0LCBib29sIG92ZXJsb2FkKVxuIHtcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZkZXN0LVx1MDAzZWRzdF9sb2NrKTtcbi1cdF9faXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoZGVzdCwgbW9kZSk7XG4rXHRfX2lwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKGRlc3QsIG92ZXJsb2FkKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmRlc3QtXHUwMDNlZHN0X2xvY2spO1xuIH1cbiBcbkBAIC0xNDA2LDE1ICsxNDA2LDEzIEBAIF9faXBfdnNfdXBkYXRlX2Rlc3Qoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2Yywgc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QsXG4gXG4gXHRpZiAoUkVBRF9PTkNFKGRlc3QtXHUwMDNldV90aHJlc2hvbGQpICE9IHVkZXN0LVx1MDAzZXVfdGhyZXNob2xkIHx8XG4gXHQgICAgUkVBRF9PTkNFKGRlc3QtXHUwMDNlbF90aHJlc2hvbGQpICE9IHVkZXN0LVx1MDAzZWxfdGhyZXNob2xkKSB7XG4rXHRcdGJvb2wgb3ZlcmxvYWQ7XG4rXG4gXHRcdHNwaW5fbG9ja19iaChcdTAwMjZkZXN0LVx1MDAzZWRzdF9sb2NrKTtcbiBcdFx0V1JJVEVfT05DRShkZXN0LVx1MDAzZXVfdGhyZXNob2xkLCB1ZGVzdC1cdTAwM2V1X3RocmVzaG9sZCk7XG4gXHRcdFdSSVRFX09OQ0UoZGVzdC1cdTAwM2VsX3RocmVzaG9sZCwgdWRlc3QtXHUwMDNlbF90aHJlc2hvbGQpO1xuLVx0XHQvKiBMb3cgdGhyZXNob2xkIGRlZmF1bHRzIHRvIDc1JSBvZiB1cHBlciB0aHJlc2hvbGQgKi9cbi1cdFx0V1JJVEVfT05DRShkZXN0LVx1MDAzZWxfdGhyZXNob2xkX3ZhbCxcbi1cdFx0XHQgICB1ZGVzdC1cdTAwM2VsX3RocmVzaG9sZCA/IDpcbi1cdFx0XHQgICAodWRlc3QtXHUwMDNldV90aHJlc2hvbGQgLVxuLVx0XHRcdCAgICAodWRlc3QtXHUwMDNldV90aHJlc2hvbGQgXHUwMDNlXHUwMDNlIDIpKSk7XG4tXHRcdF9faXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoZGVzdCwgMCk7XG4rXHRcdG92ZXJsb2FkID0gaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpO1xuK1x0XHRfX2lwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKGRlc3QsIG92ZXJsb2FkKTtcbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2ZGVzdC1cdTAwM2Vkc3RfbG9jayk7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2RoLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZGguY1xuaW5kZXggNDNhYmVkN2EyNmE2YS4uOTVlNTI5NTBhZGJiNyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19kaC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZGguY1xuQEAgLTE5NSwxNiArMTk1LDYgQEAgc3RhdGljIGludCBpcF92c19kaF9kZXN0X2NoYW5nZWQoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YyxcbiB9XG4gXG4gXG4tLypcbi0gKiAgICAgIElmIHRoZSBkZXN0IGZsYWdzIGlzIHNldCB3aXRoIElQX1ZTX0RFU1RfRl9PVkVSTE9BRCxcbi0gKiAgICAgIGNvbnNpZGVyIHRoYXQgdGhlIHNlcnZlciBpcyBvdmVybG9hZGVkIGhlcmUuXG4tICovXG4tc3RhdGljIGlubGluZSBpbnQgaXNfb3ZlcmxvYWRlZChzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcbi17XG4tXHRyZXR1cm4gZGVzdC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEO1xuLX1cbi1cbi1cbiAvKlxuICAqICAgICAgRGVzdGluYXRpb24gaGFzaGluZyBzY2hlZHVsaW5nXG4gICovXG5AQCAtMjE5LDEwICsyMDksOCBAQCBpcF92c19kaF9zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFxuIFx0cyA9IChzdHJ1Y3QgaXBfdnNfZGhfc3RhdGUgKikgc3ZjLVx1MDAzZXNjaGVkX2RhdGE7XG4gXHRkZXN0ID0gaXBfdnNfZGhfZ2V0KHN2Yy1cdTAwM2VhZiwgcywgXHUwMDI2aXBoLVx1MDAzZWRhZGRyKTtcbi1cdGlmICghZGVzdCB8fFxuLVx0ICAgICEoZGVzdC1cdTAwM2VjZmxhZ3MgXHUwMDI2IElQX1ZTX0RFU1RfQ0ZfQVZBSUxBQkxFKVxuLVx0ICAgIHx8IGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNld2VpZ2h0KSBcdTAwM2M9IDBcbi1cdCAgICB8fCBpc19vdmVybG9hZGVkKGRlc3QpKSB7XG4rXHRpZiAoIWRlc3QgfHwgYXRvbWljX3JlYWQoXHUwMDI2ZGVzdC1cdTAwM2V3ZWlnaHQpIFx1MDAzYz0gMCB8fFxuK1x0ICAgIGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSkge1xuIFx0XHRpcF92c19zY2hlZHVsZXJfZXJyKHN2YywgXCJubyBkZXN0aW5hdGlvbiBhdmFpbGFibGVcIik7XG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mby5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2ZvLmNcbmluZGV4IGQ2NTdiNDdjNjUxMWYuLmUwN2ZhMzNmNmQ1MjcgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZm8uY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2ZvLmNcbkBAIC0yOSw3ICsyOSw3IEBAIGlwX3ZzX2ZvX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHQgKiBGaW5kIHZpcnR1YWwgc2VydmVyIHdpdGggaGlnaGVzdCB3ZWlnaHQgYW5kIHNlbmQgaXQgdHJhZmZpY1xuIFx0ICovXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkZXN0LCBcdTAwMjZzdmMtXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcbi1cdFx0aWYgKCEoZGVzdC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKSBcdTAwMjZcdTAwMjZcbitcdFx0aWYgKCFpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZXdlaWdodCkgXHUwMDNlIGh3KSB7XG4gXHRcdFx0aHdlaWdodCA9IGRlc3Q7XG4gXHRcdFx0aHcgPSBhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZXdlaWdodCk7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGMuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjLmNcbmluZGV4IDY5M2JjYzgyY2NiNzcuLmJmZjEwOWMxYzk1OWIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsYy5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsYy5jXG5AQCAtNDE0LDcgKzQxNCw3IEBAIF9faXBfdnNfbGJsY19zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjKVxuIFx0ICogbmV3IGNvbm5lY3Rpb24uXG4gXHQgKi9cbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsIFx1MDAyNnN2Yy1cdTAwM2VkZXN0aW5hdGlvbnMsIG5fbGlzdCkge1xuLVx0XHRpZiAoZGVzdC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKVxuK1x0XHRpZiAoaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2ZGVzdC1cdTAwM2V3ZWlnaHQpIFx1MDAzZSAwKSB7XG4gXHRcdFx0bGVhc3QgPSBkZXN0O1xuQEAgLTQyOSw3ICs0MjksNyBAQCBfX2lwX3ZzX2xibGNfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YylcbiBcdCAqL1xuICAgbmV4dHN0YWdlOlxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yY3UoZGVzdCwgXHUwMDI2c3ZjLVx1MDAzZWRlc3RpbmF0aW9ucywgbl9saXN0KSB7XG4tXHRcdGlmIChkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpXG4rXHRcdGlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGRvaCA9IGlwX3ZzX2Rlc3RfY29ubl9vdmVyaGVhZChkZXN0KTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsY3IuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjci5jXG5pbmRleCBmNTNmMDVjZWVhMzZmLi5jMjg1M2UwN2U3ODcyIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGNyLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjci5jXG5AQCAtMTY2LDcgKzE2Niw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGlwX3ZzX2Rlc3QgKmlwX3ZzX2Rlc3Rfc2V0X21pbihzdHJ1Y3QgaXBfdnNfZGVzdF9zZXQgKnNldClcbiBcdC8qIHNlbGVjdCB0aGUgZmlyc3QgZGVzdGluYXRpb24gc2VydmVyLCB3aG9zZSB3ZWlnaHQgXHUwMDNlIDAgKi9cbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGUsIFx1MDAyNnNldC1cdTAwM2VsaXN0LCBsaXN0KSB7XG4gXHRcdGxlYXN0ID0gZS1cdTAwM2VkZXN0O1xuLVx0XHRpZiAobGVhc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRClcbitcdFx0aWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChsZWFzdCkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmICgoYXRvbWljX3JlYWQoXHUwMDI2bGVhc3QtXHUwMDNld2VpZ2h0KSBcdTAwM2UgMCkgXHUwMDI2XHUwMDI2XG5AQCAtMTgxLDcgKzE4MSw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGlwX3ZzX2Rlc3QgKmlwX3ZzX2Rlc3Rfc2V0X21pbihzdHJ1Y3QgaXBfdnNfZGVzdF9zZXQgKnNldClcbiAgIG5leHRzdGFnZTpcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmN1KGUsIFx1MDAyNnNldC1cdTAwM2VsaXN0LCBsaXN0KSB7XG4gXHRcdGRlc3QgPSBlLVx1MDAzZWRlc3Q7XG4tXHRcdGlmIChkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpXG4rXHRcdGlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGRvaCA9IGlwX3ZzX2Rlc3RfY29ubl9vdmVyaGVhZChkZXN0KTtcbkBAIC01NzcsNyArNTc3LDcgQEAgX19pcF92c19sYmxjcl9zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjKVxuIFx0ICogbmV3IGNvbm5lY3Rpb24uXG4gXHQgKi9cbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsIFx1MDAyNnN2Yy1cdTAwM2VkZXN0aW5hdGlvbnMsIG5fbGlzdCkge1xuLVx0XHRpZiAoZGVzdC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKVxuK1x0XHRpZiAoaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2ZGVzdC1cdTAwM2V3ZWlnaHQpIFx1MDAzZSAwKSB7XG5AQCAtNTkzLDcgKzU5Myw3IEBAIF9faXBfdnNfbGJsY3Jfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YylcbiBcdCAqL1xuICAgbmV4dHN0YWdlOlxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yY3UoZGVzdCwgXHUwMDI2c3ZjLVx1MDAzZWRlc3RpbmF0aW9ucywgbl9saXN0KSB7XG4tXHRcdGlmIChkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpXG4rXHRcdGlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGRvaCA9IGlwX3ZzX2Rlc3RfY29ubl9vdmVyaGVhZChkZXN0KTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGMuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYy5jXG5pbmRleCAxOGI5NzZhN2M0ZDIwLi45MDAyZjQ5MWJmZjY4IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xjLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYy5jXG5AQCAtMzgsNyArMzgsNyBAQCBpcF92c19sY19zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0ICovXG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkZXN0LCBcdTAwMjZzdmMtXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcbi1cdFx0aWYgKChkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpIHx8XG4rXHRcdGlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkgfHxcbiBcdFx0ICAgIGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNld2VpZ2h0KSA9PSAwKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRkb2ggPSBpcF92c19kZXN0X2Nvbm5fb3ZlcmhlYWQoZGVzdCk7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX21oLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbWguY1xuaW5kZXggMDIwODYzMDQ3NTYyZC4uZDcwYjIzYWVjNWZlYyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19taC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbWguY1xuQEAgLTgwLDcgKzgwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGdlbmVyYXRlX2hhc2hfc2VjcmV0KGhzaXBoYXNoX2tleV90ICpoYXNoMSxcbiBzdGF0aWMgaW5saW5lIGJvb2wgaXNfdW5hdmFpbGFibGUoc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QpXG4ge1xuIFx0cmV0dXJuIGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNld2VpZ2h0KSBcdTAwM2M9IDAgfHxcbi1cdCAgICAgICBkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQ7XG4rXHQgICAgICAgaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpO1xuIH1cbiBcbiAvKiBSZXR1cm5zIGhhc2ggdmFsdWUgZm9yIElQVlMgTUggZW50cnkgKi9cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbnEuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19ucS5jXG5pbmRleCBhZGExNThjNjEwY2UxLi43Y2MyODkwMjA4NmU3IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX25xLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19ucS5jXG5AQCAtNzIsNyArNzIsNyBAQCBpcF92c19ucV9zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZGVzdCwgXHUwMDI2c3ZjLVx1MDAzZWRlc3RpbmF0aW9ucywgbl9saXN0KSB7XG4gXG4tXHRcdGlmIChkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQgfHxcbitcdFx0aWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSB8fFxuIFx0XHQgICAgIWF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNld2VpZ2h0KSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfb3ZmLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfb3ZmLmNcbmluZGV4IGM1YzY3ZGY4MGEwYjMuLmVhYTNhN2FlNmVmYTYgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfb3ZmLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19vdmYuY1xuQEAgLTMzLDcgKzMzLDcgQEAgaXBfdnNfb3ZmX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHQqL1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZGVzdCwgXHUwMDI2c3ZjLVx1MDAzZWRlc3RpbmF0aW9ucywgbl9saXN0KSB7XG4gXHRcdHcgPSBhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZXdlaWdodCk7XG4tXHRcdGlmICgoZGVzdC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKSB8fFxuK1x0XHRpZiAoaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpIHx8XG4gXHRcdCAgICBhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZWFjdGl2ZWNvbm5zKSBcdTAwM2UgdyB8fFxuIFx0XHQgICAgdyA9PSAwKVxuIFx0XHRcdGNvbnRpbnVlO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19yci5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3JyLmNcbmluZGV4IDQxMjVlZTU2MWNkYzMuLmJkMTdjZGQwOTJmNWYgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcnIuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3JyLmNcbkBAIC02Niw3ICs2Niw3IEBAIGlwX3ZzX3JyX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmN1KGRlc3QsXG4gXHRcdFx0XHRcdFx0IFx1MDAyNnN2Yy1cdTAwM2VkZXN0aW5hdGlvbnMsXG4gXHRcdFx0XHRcdFx0IG5fbGlzdCkge1xuLVx0XHRcdGlmICghKGRlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRCkgXHUwMDI2XHUwMDI2XG4rXHRcdFx0aWYgKCFpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgIGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNld2VpZ2h0KSBcdTAwM2UgMClcbiBcdFx0XHRcdC8qIEhJVCAqL1xuIFx0XHRcdFx0Z290byBvdXQ7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NlZC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NlZC5jXG5pbmRleCAyNDVhMzIzYzg0Y2QzLi43OTI1ZjRkMjhmY2U5IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NlZC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2VkLmNcbkBAIC03NSw3ICs3NSw3IEBAIGlwX3ZzX3NlZF9zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0ICovXG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkZXN0LCBcdTAwMjZzdmMtXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcbi1cdFx0aWYgKCEoZGVzdC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKSBcdTAwMjZcdTAwMjZcbitcdFx0aWYgKCFpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZXdlaWdodCkgXHUwMDNlIDApIHtcbiBcdFx0XHRsZWFzdCA9IGRlc3Q7XG4gXHRcdFx0bG9oID0gaXBfdnNfc2VkX2Rlc3Rfb3ZlcmhlYWQobGVhc3QpO1xuQEAgLTkwLDcgKzkwLDcgQEAgaXBfdnNfc2VkX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHQgKi9cbiAgIG5leHRzdGFnZTpcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmN1KGRlc3QsIFx1MDAyNnN2Yy1cdTAwM2VkZXN0aW5hdGlvbnMsIG5fbGlzdCkge1xuLVx0XHRpZiAoZGVzdC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKVxuK1x0XHRpZiAoaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRkb2ggPSBpcF92c19zZWRfZGVzdF9vdmVyaGVhZChkZXN0KTtcbiBcdFx0aWYgKChfX3M2NClsb2ggKiBhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZXdlaWdodCkgXHUwMDNlXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NoLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2guY1xuaW5kZXggY2Q2NzA2NmUzYjI2MS4uYzI0ZGQ1Y2I3ZTQ3OCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zaC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2guY1xuQEAgLTczLDcgKzczLDcgQEAgc3RydWN0IGlwX3ZzX3NoX3N0YXRlIHtcbiBzdGF0aWMgaW5saW5lIGJvb2wgaXNfdW5hdmFpbGFibGUoc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QpXG4ge1xuIFx0cmV0dXJuIGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNld2VpZ2h0KSBcdTAwM2M9IDAgfHxcbi1cdCAgICAgICBkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQ7XG4rXHQgICAgICAgaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpO1xuIH1cbiBcbiAvKlxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c190d29zLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfdHdvcy5jXG5pbmRleCBkYmI3ZjVmZDQ2ODhhLi44NjE4NjEyMmExZjAxIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3R3b3MuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3R3b3MuY1xuQEAgLTUyLDcgKzUyLDcgQEAgc3RhdGljIHN0cnVjdCBpcF92c19kZXN0ICppcF92c190d29zX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsXG4gXG4gXHQvKiBHZW5lcmF0ZSBhIHJhbmRvbSB3ZWlnaHQgYmV0d2VlbiBbMCxzdW0gb2YgYWxsIHdlaWdodHMpICovXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkZXN0LCBcdTAwMjZzdmMtXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcbi1cdFx0aWYgKCEoZGVzdC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKSkge1xuK1x0XHRpZiAoIWlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSkge1xuIFx0XHRcdHdlaWdodCA9IGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNld2VpZ2h0KTtcbiBcdFx0XHRpZiAod2VpZ2h0IFx1MDAzZSAwKSB7XG4gXHRcdFx0XHR0b3RhbF93ZWlnaHQgKz0gd2VpZ2h0O1xuQEAgLTc1LDcgKzc1LDcgQEAgc3RhdGljIHN0cnVjdCBpcF92c19kZXN0ICppcF92c190d29zX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsXG4gXG4gXHQvKiBQaWNrIHR3byB3ZWlnaHRlZCBzZXJ2ZXJzICovXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkZXN0LCBcdTAwMjZzdmMtXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcbi1cdFx0aWYgKGRlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRClcbitcdFx0aWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0d2VpZ2h0ID0gYXRvbWljX3JlYWQoXHUwMDI2ZGVzdC1cdTAwM2V3ZWlnaHQpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c193bGMuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c193bGMuY1xuaW5kZXggOWRhNDQ1Y2EwOWExNC4uMDhlOWUyMmY3MmJmOCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c193bGMuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3dsYy5jXG5AQCAtNDcsNyArNDcsNyBAQCBpcF92c193bGNfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdCAqL1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZGVzdCwgXHUwMDI2c3ZjLVx1MDAzZWRlc3RpbmF0aW9ucywgbl9saXN0KSB7XG4tXHRcdGlmICghKGRlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRCkgXHUwMDI2XHUwMDI2XG4rXHRcdGlmICghaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgYXRvbWljX3JlYWQoXHUwMDI2ZGVzdC1cdTAwM2V3ZWlnaHQpIFx1MDAzZSAwKSB7XG4gXHRcdFx0bGVhc3QgPSBkZXN0O1xuIFx0XHRcdGxvaCA9IGlwX3ZzX2Rlc3RfY29ubl9vdmVyaGVhZChsZWFzdCk7XG5AQCAtNjIsNyArNjIsNyBAQCBpcF92c193bGNfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdCAqL1xuICAgbmV4dHN0YWdlOlxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yY3UoZGVzdCwgXHUwMDI2c3ZjLVx1MDAzZWRlc3RpbmF0aW9ucywgbl9saXN0KSB7XG4tXHRcdGlmIChkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpXG4rXHRcdGlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGRvaCA9IGlwX3ZzX2Rlc3RfY29ubl9vdmVyaGVhZChkZXN0KTtcbiBcdFx0aWYgKChfX3M2NClsb2ggKiBhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZXdlaWdodCkgXHUwMDNlXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3dyci5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3dyci5jXG5pbmRleCAyZGNmZjEwNDBkYTUyLi5mYWQ2OWJhZTVhMjJiIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3dyci5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd3JyLmNcbkBAIC0xNzYsNyArMTc2LDcgQEAgaXBfdnNfd3JyX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmN1KGRlc3QsXG4gXHRcdFx0XHRcdFx0IFx1MDAyNnN2Yy1cdTAwM2VkZXN0aW5hdGlvbnMsXG4gXHRcdFx0XHRcdFx0IG5fbGlzdCkge1xuLVx0XHRcdGlmICghKGRlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRCkgXHUwMDI2XHUwMDI2XG4rXHRcdFx0aWYgKCFpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgIGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNld2VpZ2h0KSBcdTAwM2U9IG1hcmstXHUwMDNlY3cpXG4gXHRcdFx0XHRnb3RvIGZvdW5kO1xuIFx0XHRcdGlmIChkZXN0ID09IHN0b3ApXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxMTo0Ny44MzY3NzQ5NzlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODYxNDUzMTY5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQVlMgUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGFzc2VzcyB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSwgc3BlY2lmaWNhbGx5IHdpdGggYW4gZXllIHRvd2FyZHMgd2hldGhlciBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyB3YXJyYW50ZWQuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGBzdHJ1Y3QgaXBfdnNfZGVzdGAgYW5kIGhvdyBpdHMgZmllbGRzIGFyZSBoYW5kbGVkLCBlc3BlY2lhbGx5IGFmdGVyIHRoZXNlIGNoYW5nZXMuXG5cbkZpcnN0LCB0aGUgY29yZSBjaGFuZ2VzLiBUaGUgYCNkZWZpbmUgSVBfVlNfREVTVF9GX09WRVJMT0FEYCBpcyBnb25lLCB3aGljaCBzdWdnZXN0cyBhIHNoaWZ0IGF3YXkgZnJvbSBiaXRmaWVsZHMuIFRoZSBgc3RydWN0IGlwX3ZzX2Rlc3RgIGl0c2VsZiBoYXMgYmVlbiByZW9yZ2FuaXplZCwgcmVtb3ZpbmcgdGhlIGB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgZmxhZ3NgIGFuZCByZW9yZGVyaW5nIGZvciBjYWNoZWxpbmUgYWxpZ25tZW50IGFuZCBwYWNraW5nLiBUaGF0J3MgYSBzdGFuZGFyZCBvcHRpbWl6YXRpb24sIGJ1dCB0aGUgYWRkaXRpb24gb2YgYHUzMiB1X3RocmVzaG9sZF92YWxgIGFuZCB0aGUgaW5saW5lIGhlbHBlciBgaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKClgIGFyZSBrZXkuIFRoZSBvdmVybG9hZCBsb2dpYyBzZWVtcyB0byBiZSBub3cgYmFzZWQgZW50aXJlbHkgb24gdGhlc2UgdGhyZXNob2xkIHZhbHVlcyAoYGxfdGhyZXNob2xkX3ZhbGAgYW5kIGB1X3RocmVzaG9sZF92YWxgKS4gVGhlIGBpcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZGAgc2lnbmF0dXJlIGNoYW5nZWQgdG9vLiBUaGlzIGlzIGFsbCBnb29kLCBjbGVhbiBjb2RlLCBidXQgaXQgbmVlZHMgdG8gYmUgdW5kZXJzdG9vZC5cblxuTG9va2luZyBhdCB0aGUgY29kZSB1dGlsaXppbmcgdGhlIHN0cnVjdHVyZSwgc3BlY2lmaWNhbGx5IGBpcF92c19jb25uLmNgLCB3ZSBzZWUgdGhlIG92ZXJsb2FkIGxvZ2ljIGluIGBpcF92c19iaW5kX2Rlc3RgIGFuZCBgaXBfdnNfdW5iaW5kX2Rlc3RgLiBUaGUgY29tcGFyaXNvbnMgYWdhaW5zdCBgUkVBRF9PTkNFKGRlc3QtXHUwMDNldV90aHJlc2hvbGRfdmFsKWAgYW5kIGBSRUFEX09OQ0UoZGVzdC1cdTAwM2VsX3RocmVzaG9sZF92YWwpYCBhbmQgc3Vic2VxdWVudCBjYWxscyB0byBgaXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWRgIGFyZSBjbGVhciBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIG5ldyBvdmVybG9hZCBtZWNoYW5pc20uIFRoZSBkZWZpbml0aW9uIG9mIHRoZSB0aHJlc2hvbGRzIGFyZSBoYW5kbGVkIGluIGBpcF92c19jdGwuY2AsIGFuZCB0aGUgbmV3IGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBkZXRlcm1pbmUgb3ZlcmxvYWQgYnkgcmVhZGluZyB0aGUgcmVzcGVjdGl2ZSB0aHJlc2hvbGRzLlxuXG5UaGUgY3J1Y2lhbCBuZXh0IHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCBob3cgYHN0cnVjdCBpcF92c19kZXN0YCBpcyBhbGxvY2F0ZWQsIGluaXRpYWxpemVkLCBhbmQsIG1vc3QgaW1wb3J0YW50bHksIGlmIGFueSBvZiBpdHMgY29udGVudHMgYXJlIGV2ZXIgY29waWVkIHRvIHVzZXIgc3BhY2UuIElmIHdlIGFyZSBwYXNzaW5nIHRoaXMgc3RydWN0dXJlIGludG8gdXNlci1zcGFjZSwgYSBzZWN1cml0eSBidWcgaXMgaW50cm9kdWNlZCBpZiB0aGVyZSBpcyBhbnkgbWVtb3J5IGxlYWsgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyBpcyB3aGVyZSBgZ3JlcHBlcmAgd2lsbCBjb21lIGluIGhhbmR5LiBJJ2xsIHNlYXJjaCBmb3IgYWxsb2NhdGlvbnMgb2YgYGlwX3ZzX2Rlc3RgIGFuZCBhbnkgaW5zdGFuY2VzIHdoZXJlIGl0cyBkYXRhIGlzIGV4cG9zZWQgdmlhIGBnZXRzb2Nrb3B0YCwgbmV0bGluaywgb3IgYW55IG90aGVyIG1lYW5zIG9mIGNvbW11bmljYXRpbmcgaW5mb3JtYXRpb24gdG8gdXNlciBzcGFjZS4gTXkgYXNzdW1wdGlvbiBpcyB0aGF0IHRoZSBkYXRhIHdpbGwgYmUgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBzbyB0aGF0IGlzIHRoZSBrZXkuIFRoZW4gSSBuZWVkIHRvIGludmVzdGlnYXRlIGlmIHRoZXJlIGlzIGFueSBpbml0aWFsaXphdGlvbi5cblxuTXkgc3VzcGljaW9uIGlzIHRoaXMgd2lsbCBiZSBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLCBkZXBlbmRpbmcgb24gaG93IHRoaXMgc3RydWN0IGlzIGhhbmRsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzNTIsIk91dHB1dFRva2VucyI6NjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxMTo1Ni40NTEzMDkzMTdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NDIyMTg0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJremFsbG9jLippcF92c19kZXN0fGlwX3ZzX2Rlc3RfbmV3fGlwX3ZzX2dlbmxfZHVtcF9kZXN0fGlwX3ZzX2dlbmxfZ2V0X2Rlc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0xNDQzPWlwX3ZzX25ld19kZXN0KHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIHN0cnVjdCBpcF92c19kZXN0X3VzZXJfa2VybiAqdWRlc3QpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMTQ2Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MTQ2ODpcXHRkZXN0ID0ga3phbGxvY19vYmooc3RydWN0IGlwX3ZzX2Rlc3QpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xNDY5LVxcdGlmIChkZXN0ID09IE5VTEwpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9NDMwNT1zdGF0aWMgaW50IGlwX3ZzX2dlbmxfZmlsbF9kZXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQzNTMtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjQzNTQ6c3RhdGljIGludCBpcF92c19nZW5sX2R1bXBfZGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDM1NS1cXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDM3NS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDM3NjpzdGF0aWMgaW50IGlwX3ZzX2dlbmxfZHVtcF9kZXN0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00Mzc3LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDQwMS1cXHRcXHRcXHRjb250aW51ZTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDQwMjpcXHRcXHRpZiAoaXBfdnNfZ2VubF9kdW1wX2Rlc3Qoc2tiLCBkZXN0LCBjYikgXFx1MDAzYyAwKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ0MDMtXFx0XFx0XFx0aWR4LS07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9NDkxND1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIGlwX3ZzX2dlbmxfb3BzW10gPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDk2MS1cXHRcXHQuZmxhZ3NcXHQ9IEdFTkxfQURNSU5fUEVSTSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDk2MjpcXHRcXHQuZHVtcGl0XFx0PSBpcF92c19nZW5sX2R1bXBfZGVzdHMsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ5NjMtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6MTE6NTYuOTE1NTM2MDk0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzNzc4NzU5MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoZSBtYXR0ZXI6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBgaXBfdnNfY3RsLmNgIEtlcm5lbCBDb2RlKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgd2F5IHRoZXNlIGRlc3RpbmF0aW9uIGFuZCBzb2NrZXQgb3B0aW9uIGZ1bmN0aW9uYWxpdGllcyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIElQIFZpcnR1YWwgU2VydmVyIChJUFZTKSBjb2RlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBpcF92c19jdGwuY2AuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHBvdGVudGlhbCBhcmVhcyB3aGVyZSBkYXRhIG1pZ2h0IGJlIGluY29ycmVjdGx5IGNvcGllZCBvciBoYW5kbGVkLlxuXG5NeSBpbml0aWFsIGZvY3VzIHdpbGwgYmUgb24gdGhlIGBpcF92c19uZXdfZGVzdGAgYW5kIGBpcF92c19nZW5sX2ZpbGxfZGVzdGAgZnVuY3Rpb25zLiBJJ2xsIG5lZWQgdG8gbWV0aWN1bG91c2x5IGV4YW1pbmUgaG93IGRhdGEgaXMgZmV0Y2hlZCBvciBwbGFjZWQgaW4gdGhlcmUsIGJlY2F1c2UgaW5jb3JyZWN0IGNvcHlpbmcgaW4gdGhvc2UgYXJlYXMgY291bGQgbWFuaWZlc3QgaW4gc3RyYW5nZSB3YXlzLCBhbmQgdGhvc2UgZnVuY3Rpb25zIGxvb2sgbGlrZSBsaWtlbHkgcGxhY2VzLiBIb3dldmVyLCBJJ20gbm90IGdvaW5nIHRvIHN0b3AgdGhlcmUuIEkgYWxzbyBuZWVkIHRvIGJyb2FkZW4gdGhlIHNjb3BlIGFuZCBiZSBzdXJlIEkgY292ZXIgYW55IG90aGVyIGdldHNvY2tvcHQgY29weWluZyBjb2RlIHdpdGhpbiBgaXBfdnNfY3RsLmNgIHRoYXQgY291bGQgYWxzbyBsZWFkIHRvIGlzc3Vlcy4gSXQncyBiZXN0IHRvIGJlIHRob3JvdWdoIGF0IHRoaXMgc3RhZ2UuIEknbGwgcmV2aWV3IHRob3NlIHNlY3Rpb25zIHRvIHNlZSBpZiB0aGV5J3JlIHJlbGV2YW50LCB0b28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTc5LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6MTI6MDEuMjkzNDE0NDM2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5MjE1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ2MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQ2MDpcXHRcXHR9IGVsc2VcXG4xNDYxOlxcdCNlbmRpZlxcbjE0NjI6XFx0XFx0e1xcbjE0NjM6XFx0XFx0XFx0YXR5cGUgPSBpbmV0X2FkZHJfdHlwZShzdmMtXFx1MDAzZWlwdnMtXFx1MDAzZW5ldCwgdWRlc3QtXFx1MDAzZWFkZHIuaXApO1xcbjE0NjQ6XFx0XFx0XFx0aWYgKGF0eXBlICE9IFJUTl9MT0NBTCBcXHUwMDI2XFx1MDAyNiBhdHlwZSAhPSBSVE5fVU5JQ0FTVClcXG4xNDY1OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE0NjY6XFx0XFx0fVxcbjE0Njc6XFx0XFxuMTQ2ODpcXHRcXHRkZXN0ID0ga3phbGxvY19vYmooc3RydWN0IGlwX3ZzX2Rlc3QpO1xcbjE0Njk6XFx0XFx0aWYgKGRlc3QgPT0gTlVMTClcXG4xNDcwOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjE0NzE6XFx0XFxuMTQ3MjpcXHRcXHRyZXQgPSBpcF92c19zdGF0c19pbml0X2FsbG9jKFxcdTAwMjZkZXN0LVxcdTAwM2VzdGF0cyk7XFxuMTQ3MzpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xNDc0OlxcdFxcdFxcdGdvdG8gZXJyX2FsbG9jO1xcbjE0NzU6XFx0XFxuMTQ3NjpcXHRcXHRyZXQgPSBpcF92c19zdGFydF9lc3RpbWF0b3Ioc3ZjLVxcdTAwM2VpcHZzLCBcXHUwMDI2ZGVzdC1cXHUwMDNlc3RhdHMpO1xcbjE0Nzc6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTQ3ODpcXHRcXHRcXHRnb3RvIGVycl9zdGF0cztcXG4xNDc5OlxcdFxcbjE0ODA6XFx0XFx0ZGVzdC1cXHUwMDNlYWYgPSB1ZGVzdC1cXHUwMDNlYWY7XFxuMTQ4MTpcXHRcXHRkZXN0LVxcdTAwM2Vwcm90b2NvbCA9IHN2Yy1cXHUwMDNlcHJvdG9jb2w7XFxuMTQ4MjpcXHRcXHRkZXN0LVxcdTAwM2V2YWRkciA9IHN2Yy1cXHUwMDNlYWRkcjtcXG4xNDgzOlxcdFxcdGRlc3QtXFx1MDAzZXZwb3J0ID0gc3ZjLVxcdTAwM2Vwb3J0O1xcbjE0ODQ6XFx0XFx0ZGVzdC1cXHUwMDNldmZ3bWFyayA9IHN2Yy1cXHUwMDNlZndtYXJrO1xcbjE0ODU6XFx0XFx0aXBfdnNfYWRkcl9jb3B5KHVkZXN0LVxcdTAwM2VhZiwgXFx1MDAyNmRlc3QtXFx1MDAzZWFkZHIsIFxcdTAwMjZ1ZGVzdC1cXHUwMDNlYWRkcik7XFxuMTQ4NjpcXHRcXHRkZXN0LVxcdTAwM2Vwb3J0ID0gdWRlc3QtXFx1MDAzZXBvcnQ7XFxuMTQ4NzpcXHRcXG4xNDg4OlxcdFxcdGF0b21pY19zZXQoXFx1MDAyNmRlc3QtXFx1MDAzZWFjdGl2ZWNvbm5zLCAwKTtcXG4xNDg5OlxcdFxcdGF0b21pY19zZXQoXFx1MDAyNmRlc3QtXFx1MDAzZXRvdGFsY29ubnMsIDApO1xcbjE0OTA6XFx0XFx0YXRvbWljX3NldChcXHUwMDI2ZGVzdC1cXHUwMDNlcGVyc2lzdGNvbm5zLCAwKTtcXG4xNDkxOlxcdFxcdHJlZmNvdW50X3NldChcXHUwMDI2ZGVzdC1cXHUwMDNlcmVmY250LCAxKTtcXG4xNDkyOlxcdFxcbjE0OTM6XFx0XFx0SU5JVF9ITElTVF9OT0RFKFxcdTAwMjZkZXN0LVxcdTAwM2VkX2xpc3QpO1xcbjE0OTQ6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmRlc3QtXFx1MDAzZWRzdF9sb2NrKTtcXG4xNDk1OlxcdFxcdF9faXBfdnNfdXBkYXRlX2Rlc3Qoc3ZjLCBkZXN0LCB1ZGVzdCwgMSk7XFxuMTQ5NjpcXHRcXG4xNDk3OlxcdFxcdHJldHVybiAwO1xcbjE0OTg6XFx0XFxuMTQ5OTpcXHRlcnJfc3RhdHM6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjEyOjAxLjI5NDMxMDA2N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTA3NDYzMjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBJUFZTIERlc3RpbmF0aW9uIEhhbmRsaW5nKipcblxuQWxyaWdodCwgZ2l2ZW4gdGhlIGNvbnRleHQsIEkgdGhpbmsgaXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgaG93IElQVlMgbWFuYWdlcyBkZXN0aW5hdGlvbiBlbnRyaWVzLiBJJ20gZ29pbmcgdG8gc2hpZnQgbXkgZm9jdXMgdG8gdGhvc2UgY29yZSBmdW5jdGlvbnMg4oCTIGBpcF92c19nZW5sX2ZpbGxfZGVzdGAgYW5kIGBpcF92c19jb3B5X2Rlc3RfZW50cnlgLiBJIHdhbnQgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCBhbmQgaG93IHRoZXkncmUgYmVpbmcgcG9wdWxhdGVkIGFuZCBtb2RpZmllZC5cblxuVGhlIGBnZXRzb2Nrb3B0YCBoYW5kbGVycyBhcmUgYWxzbyByZWxldmFudCBhbmQgbmVlZCBhIGNsb3NlciBsb29rIGJlY2F1c2UgdGhleSByZXByZXNlbnQgZXh0ZXJuYWwgYWNjZXNzIHRvIHRoZSBkZXN0aW5hdGlvbiBkYXRhLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGV5IGludGVyYWN0IHdpdGggYGlwX3ZzX2dlbmxfZmlsbF9kZXN0YCBhbmQgYGlwX3ZzX2NvcHlfZGVzdF9lbnRyeWAsIGVuc3VyaW5nIGNvbnNpc3RlbmN5IGFuZCB0aGF0IG5vIHVuZXhwZWN0ZWQgaW5mb3JtYXRpb24gbGVha3Mgb2NjdXIgdGhyb3VnaCB0aGVzZSBoYW5kbGVycy4gSSBuZWVkIHRvIGlkZW50aWZ5IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgY29uY3VycmVuY3kgaXNzdWVzIGluIG1hbmlwdWxhdGluZyB0aGVzZSBkZXN0aW5hdGlvbiBlbnRyaWVzLiBQZXJoYXBzIHRoZXJlIGFyZSBkYXRhIGFjY2VzcyBvciBsb2NraW5nIHN1YnRsZXRpZXMgaW4gdGhlIGBnZXRzb2Nrb3B0YCBoYW5kbGVyIHRoYXQgYXJlIGNhdXNpbmcgYSBwcm9ibGVtLiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIGRhdGEgZmxvdyBhbmQgbG9vayBmb3IgcG90ZW50aWFsIHdlYWtuZXNzZXMgb3IgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjExNywiT3V0cHV0VG9rZW5zIjo1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6MTI6MDQuMjAxNzc1ODU1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODg3MTk3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF92c19kZXN0X2VudHJ5fGlwX3ZzX2dlbmxfZmlsbF9kZXN0fGlwX3ZzX2dldF9kZXN0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTM2ODA9c3RhdGljIGlubGluZSBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MzY4MTpfX2lwX3ZzX2dldF9kZXN0X2VudHJpZXMoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGNvbnN0IHN0cnVjdCBpcF92c19nZXRfZGVzdHMgKmdldCxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MzY4MjpcXHRcXHRcXHQgc3RydWN0IGlwX3ZzX2dldF9kZXN0cyBfX3VzZXIgKnVwdHIpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTM2ODMte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTM2OTgtXFx0XFx0c3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3Q7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjM2OTk6XFx0XFx0c3RydWN0IGlwX3ZzX2Rlc3RfZW50cnkgZW50cnk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTM3MDAtXFx0XFx0c3RydWN0IGlwX3ZzX2tzdGF0cyBrc3RhdHM7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9Mzc1Nz1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBnZXRfYXJnbGVuW0NNRElEKElQX1ZTX1NPX0dFVF9NQVgpICsgMV0gPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzc2MS1cXHRbQ01ESUQoSVBfVlNfU09fR0VUX1NFUlZJQ0UpXSAgPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3NlcnZpY2VfZW50cnkpLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzozNzYyOlxcdFtDTURJRChJUF9WU19TT19HRVRfREVTVFMpXSAgICA9IHNpemVvZihzdHJ1Y3QgaXBfdnNfZ2V0X2Rlc3RzKSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzc2My1cXHRbQ01ESUQoSVBfVlNfU09fR0VUX1RJTUVPVVQpXSAgPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3RpbWVvdXRfdXNlciksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9Mzc2Nz11bmlvbiBpcF92c19nZXRfYXJnbGVuIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0zNzcxLVxcdHN0cnVjdCBpcF92c19zZXJ2aWNlX2VudHJ5XFx0ZmllbGRfSVBfVlNfU09fR0VUX1NFUlZJQ0U7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjM3NzI6XFx0c3RydWN0IGlwX3ZzX2dldF9kZXN0c1xcdFxcdGZpZWxkX0lQX1ZTX1NPX0dFVF9ERVNUUztcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzc3My1cXHRzdHJ1Y3QgaXBfdnNfdGltZW91dF91c2VyXFx0ZmllbGRfSVBfVlNfU09fR0VUX1RJTUVPVVQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9Mzc4MD1kb19pcF92c19nZXRfY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdm9pZCBfX3VzZXIgKnVzZXIsIGludCAqbGVuKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTM5MTQtXFx0e1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzozOTE1OlxcdFxcdHN0cnVjdCBpcF92c19nZXRfZGVzdHMgKmdldDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzkxNi1cXHRcXHRzaXplX3Qgc2l6ZTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzkxNy1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MzkxODpcXHRcXHRnZXQgPSAoc3RydWN0IGlwX3ZzX2dldF9kZXN0cyAqKWFyZztcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzkxOS1cXHRcXHRzaXplID0gc3RydWN0X3NpemUoZ2V0LCBlbnRyeXRhYmxlLCBnZXQtXFx1MDAzZW51bV9kZXN0cyk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9NDI5ND1zdGF0aWMgc3RydWN0IGlwX3ZzX3NlcnZpY2UgKmlwX3ZzX2dlbmxfZmluZF9zZXJ2aWNlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQzMDQtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjQzMDU6c3RhdGljIGludCBpcF92c19nZW5sX2ZpbGxfZGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDMwNi17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9NDM1ND1zdGF0aWMgaW50IGlwX3ZzX2dlbmxfZHVtcF9kZXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19kZXN0ICpkZXN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQzNjQtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjQzNjU6XFx0aWYgKGlwX3ZzX2dlbmxfZmlsbF9kZXN0KHNrYiwgZGVzdCkgXFx1MDAzYyAwKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00MzY2LVxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxMjowNC4yNTA2NTI2MDFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE4NjM3MzEwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIElQVlMgQ29udHJvbCBQbGFuZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCB1bmRlcnN0YW5kIGhvdyB0aGVzZSBJUFZTIGRlc3RpbmF0aW9ucyBhcmUgaGFuZGxlZCBhdCB0aGUgY29udHJvbCBwbGFuZSBsZXZlbC4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgYGlwX3ZzX2N0bC5jYCBmaWxlIGFuZCBzcGVjaWZpY2FsbHkgZm9jdXMgb24gdGhlIGZ1bmN0aW9ucyBgaXBfdnNfZ2VubF9maWxsX2Rlc3RgIGFuZCBgX19pcF92c19nZXRfZGVzdF9lbnRyaWVzYC4gVGhlc2UgbmFtZXMgYXJlIHByZXR0eSBkZXNjcmlwdGl2ZSwgc28gSSdtIGV4cGVjdGluZyBgaXBfdnNfZ2VubF9maWxsX2Rlc3RgIHRvIGJlIHJlc3BvbnNpYmxlIGZvciBwb3B1bGF0aW5nIHRoZSBkZXN0aW5hdGlvbiBpbmZvcm1hdGlvbiwgcHJvYmFibHkgdXNpbmcgR2VuZXJpYyBOZXRsaW5rLCBhbmQgYF9faXBfdnNfZ2V0X2Rlc3RfZW50cmllc2Agc2hvdWxkIGJlIHRoZSBsb3dlci1sZXZlbCBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5IHJldHJpZXZlcyB0aGlzIGRlc3RpbmF0aW9uIGRhdGEuIEknbSBpbnRlcmVzdGVkIGluIGhvdyB0aGVzZSB3b3JrIHRvZ2V0aGVyIHRvIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBmb3IgdGhlIHVzZXIgc3BhY2UgY29udHJvbCB1dGlsaXR5IHRvIG1hbmFnZSB0aGUgbG9hZCBiYWxhbmNpbmcgZGVzdGluYXRpb25zLiBMZXQncyBzZWUgaG93IHRoZXkgaW50ZXJhY3QgYW5kIHdoYXQncyBnb2luZyBvbiB1bmRlciB0aGUgaG9vZC4gSSB3YW50IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBvcHRpbWl6YXRpb24gdGVjaG5pcXVlcywgb3IgcG9zc2libGUgYXJlYXMgb2YgaW1wcm92ZW1lbnQgaGVyZS4gVGhpcyBzaG91bGQgcHJvdmlkZSBzb21lIHNvbGlkIGluc2lnaHQgaW50byBob3cgSVBWUyBjb25maWd1cmVzIGFuZCBzdG9yZXMgZGVzdGluYXRpb24gZW50cmllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2MjgsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxMjowNi40MzcwMjg2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzY5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzY5MDpcXHRcXHRcXHRzdmMgPSBfX2lwX3ZzX3N2Y19md21fZmluZChpcHZzLCBBRl9JTkVULCBnZXQtXFx1MDAzZWZ3bWFyayk7XFxuMzY5MTpcXHRcXHRlbHNlXFxuMzY5MjpcXHRcXHRcXHRzdmMgPSBfX2lwX3ZzX3NlcnZpY2VfZmluZChpcHZzLCBBRl9JTkVULCBnZXQtXFx1MDAzZXByb3RvY29sLCBcXHUwMDI2YWRkcixcXG4zNjkzOlxcdFxcdFxcdFxcdFxcdFxcdCAgIGdldC1cXHUwMDNlcG9ydCk7XFxuMzY5NDpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4zNjk1OlxcdFxcbjM2OTY6XFx0XFx0aWYgKHN2Yykge1xcbjM2OTc6XFx0XFx0XFx0aW50IGNvdW50ID0gMDtcXG4zNjk4OlxcdFxcdFxcdHN0cnVjdCBpcF92c19kZXN0ICpkZXN0O1xcbjM2OTk6XFx0XFx0XFx0c3RydWN0IGlwX3ZzX2Rlc3RfZW50cnkgZW50cnk7XFxuMzcwMDpcXHRcXHRcXHRzdHJ1Y3QgaXBfdnNfa3N0YXRzIGtzdGF0cztcXG4zNzAxOlxcdFxcbjM3MDI6XFx0XFx0XFx0bWVtc2V0KFxcdTAwMjZlbnRyeSwgMCwgc2l6ZW9mKGVudHJ5KSk7XFxuMzcwMzpcXHRcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRlc3QsIFxcdTAwMjZzdmMtXFx1MDAzZWRlc3RpbmF0aW9ucywgbl9saXN0KSB7XFxuMzcwNDpcXHRcXHRcXHRcXHRpZiAoY291bnQgXFx1MDAzZT0gZ2V0LVxcdTAwM2VudW1fZGVzdHMpXFxuMzcwNTpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4zNzA2OlxcdFxcbjM3MDc6XFx0XFx0XFx0XFx0LyogQ2Fubm90IGV4cG9zZSBoZXRlcm9nZW5lb3VzIG1lbWJlcnMgdmlhIHNvY2tvcHRcXG4zNzA4OlxcdFxcdFxcdFxcdCAqIGludGVyZmFjZVxcbjM3MDk6XFx0XFx0XFx0XFx0ICovXFxuMzcxMDpcXHRcXHRcXHRcXHRpZiAoZGVzdC1cXHUwMDNlYWYgIT0gc3ZjLVxcdTAwM2VhZilcXG4zNzExOlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjM3MTI6XFx0XFxuMzcxMzpcXHRcXHRcXHRcXHRlbnRyeS5hZGRyID0gZGVzdC1cXHUwMDNlYWRkci5pcDtcXG4zNzE0OlxcdFxcdFxcdFxcdGVudHJ5LnBvcnQgPSBkZXN0LVxcdTAwM2Vwb3J0O1xcbjM3MTU6XFx0XFx0XFx0XFx0ZW50cnkuY29ubl9mbGFncyA9IGF0b21pY19yZWFkKFxcdTAwMjZkZXN0LVxcdTAwM2Vjb25uX2ZsYWdzKTtcXG4zNzE2OlxcdFxcdFxcdFxcdGVudHJ5LndlaWdodCA9IGF0b21pY19yZWFkKFxcdTAwMjZkZXN0LVxcdTAwM2V3ZWlnaHQpO1xcbjM3MTc6XFx0XFx0XFx0XFx0ZW50cnkudV90aHJlc2hvbGQgPSBSRUFEX09OQ0UoZGVzdC1cXHUwMDNldV90aHJlc2hvbGQpO1xcbjM3MTg6XFx0XFx0XFx0XFx0ZW50cnkubF90aHJlc2hvbGQgPSBSRUFEX09OQ0UoZGVzdC1cXHUwMDNlbF90aHJlc2hvbGQpO1xcbjM3MTk6XFx0XFx0XFx0XFx0ZW50cnkuYWN0aXZlY29ubnMgPSBhdG9taWNfcmVhZChcXHUwMDI2ZGVzdC1cXHUwMDNlYWN0aXZlY29ubnMpO1xcbjM3MjA6XFx0XFx0XFx0XFx0ZW50cnkuaW5hY3Rjb25ucyA9IGlwX3ZzX2Rlc3RfaW5hY3Rjb25ucyhkZXN0KTtcXG4zNzIxOlxcdFxcdFxcdFxcdGVudHJ5LnBlcnNpc3Rjb25ucyA9IGF0b21pY19yZWFkKFxcdTAwMjZkZXN0LVxcdTAwM2VwZXJzaXN0Y29ubnMpO1xcbjM3MjI6XFx0XFx0XFx0XFx0aXBfdnNfY29weV9zdGF0cyhcXHUwMDI2a3N0YXRzLCBcXHUwMDI2ZGVzdC1cXHUwMDNlc3RhdHMpO1xcbjM3MjM6XFx0XFx0XFx0XFx0aXBfdnNfZXhwb3J0X3N0YXRzX3VzZXIoXFx1MDAyNmVudHJ5LnN0YXRzLCBcXHUwMDI2a3N0YXRzKTtcXG4zNzI0OlxcdFxcdFxcdFxcdGlmIChjb3B5X3RvX3VzZXIoXFx1MDAyNnVwdHItXFx1MDAzZWVudHJ5dGFibGVbY291bnRdLFxcbjM3MjU6XFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZlbnRyeSwgc2l6ZW9mKGVudHJ5KSkpIHtcXG4zNzI2OlxcdFxcdFxcdFxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuMzcyNzpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4zNzI4OlxcdFxcdFxcdFxcdH1cXG4zNzI5OlxcdFxcdFxcdFxcdGNvdW50Kys7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjEyOjA2LjQzNzIyMDkyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU4NzEyNjQ2NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBpcF92c19nZW5sX2ZpbGxfZGVzdGAqKlxuXG5SaWdodCwgbGV0J3MgY2lyY2xlIGJhY2sgYW5kIHRha2UgYSBsb29rIGF0IGBpcF92c19nZW5sX2ZpbGxfZGVzdGAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgZGVzdGluYXRpb24gZmlsbGluZyBsb2dpYyB3aXRoaW4gdGhlIGdlbmVyaWMgbmV0bGluayBpbnRlcmZhY2UgaXMgZnVuY3Rpb25pbmcgYXMgZXhwZWN0ZWQuIEl0J3MgYSBjcml0aWNhbCBwaWVjZSBmb3IgcHJvcGVyIGZvcndhcmRpbmcgd2l0aGluIHRoZSBJUFZTIHNldHVwLCBzbyBhIGNvbXByZWhlbnNpdmUgcmV2aWV3IGlzIGluIG9yZGVyLiBTcGVjaWZpY2FsbHksIEknbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIGRhdGEgaW50ZWdyaXR5LCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcywgb3IgYW55IHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzLiBNYWtpbmcgc3VyZSB0aGlzIGZ1bmN0aW9uIGlzIHNvbGlkIGlzIGtleSBmb3Igb3ZlcmFsbCBzdGFiaWxpdHkgYW5kIGVmZmljaWVudCBsb2FkIGJhbGFuY2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2MTgsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjEyOjEyLjMwODQ4ODAyOVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODY1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQzMDUsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQzMDU6XFx0c3RhdGljIGludCBpcF92c19nZW5sX2ZpbGxfZGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcXG40MzA2OlxcdHtcXG40MzA3OlxcdFxcdHN0cnVjdCBubGF0dHIgKm5sX2Rlc3Q7XFxuNDMwODpcXHRcXHRzdHJ1Y3QgaXBfdnNfa3N0YXRzIGtzdGF0cztcXG40MzA5OlxcdFxcbjQzMTA6XFx0XFx0bmxfZGVzdCA9IG5sYV9uZXN0X3N0YXJ0X25vZmxhZyhza2IsIElQVlNfQ01EX0FUVFJfREVTVCk7XFxuNDMxMTpcXHRcXHRpZiAoIW5sX2Rlc3QpXFxuNDMxMjpcXHRcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbjQzMTM6XFx0XFxuNDMxNDpcXHRcXHRpZiAobmxhX3B1dChza2IsIElQVlNfREVTVF9BVFRSX0FERFIsIHNpemVvZihkZXN0LVxcdTAwM2VhZGRyKSwgXFx1MDAyNmRlc3QtXFx1MDAzZWFkZHIpIHx8XFxuNDMxNTpcXHRcXHQgICAgbmxhX3B1dF9iZTE2KHNrYiwgSVBWU19ERVNUX0FUVFJfUE9SVCwgZGVzdC1cXHUwMDNlcG9ydCkgfHxcXG40MzE2OlxcdFxcdCAgICBubGFfcHV0X3UzMihza2IsIElQVlNfREVTVF9BVFRSX0ZXRF9NRVRIT0QsXFxuNDMxNzpcXHRcXHRcXHRcXHQoYXRvbWljX3JlYWQoXFx1MDAyNmRlc3QtXFx1MDAzZWNvbm5fZmxhZ3MpIFxcdTAwMjZcXG40MzE4OlxcdFxcdFxcdFxcdCBJUF9WU19DT05OX0ZfRldEX01BU0spKSB8fFxcbjQzMTk6XFx0XFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSVBWU19ERVNUX0FUVFJfV0VJR0hULFxcbjQzMjA6XFx0XFx0XFx0XFx0YXRvbWljX3JlYWQoXFx1MDAyNmRlc3QtXFx1MDAzZXdlaWdodCkpIHx8XFxuNDMyMTpcXHRcXHQgICAgbmxhX3B1dF91OChza2IsIElQVlNfREVTVF9BVFRSX1RVTl9UWVBFLFxcbjQzMjI6XFx0XFx0XFx0ICAgICAgIGRlc3QtXFx1MDAzZXR1bl90eXBlKSB8fFxcbjQzMjM6XFx0XFx0ICAgIG5sYV9wdXRfYmUxNihza2IsIElQVlNfREVTVF9BVFRSX1RVTl9QT1JULFxcbjQzMjQ6XFx0XFx0XFx0XFx0IGRlc3QtXFx1MDAzZXR1bl9wb3J0KSB8fFxcbjQzMjU6XFx0XFx0ICAgIG5sYV9wdXRfdTE2KHNrYiwgSVBWU19ERVNUX0FUVFJfVFVOX0ZMQUdTLFxcbjQzMjY6XFx0XFx0XFx0XFx0ZGVzdC1cXHUwMDNldHVuX2ZsYWdzKSB8fFxcbjQzMjc6XFx0XFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSVBWU19ERVNUX0FUVFJfVV9USFJFU0gsXFxuNDMyODpcXHRcXHRcXHRcXHRSRUFEX09OQ0UoZGVzdC1cXHUwMDNldV90aHJlc2hvbGQpKSB8fFxcbjQzMjk6XFx0XFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSVBWU19ERVNUX0FUVFJfTF9USFJFU0gsXFxuNDMzMDpcXHRcXHRcXHRcXHRSRUFEX09OQ0UoZGVzdC1cXHUwMDNlbF90aHJlc2hvbGQpKSB8fFxcbjQzMzE6XFx0XFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSVBWU19ERVNUX0FUVFJfQUNUSVZFX0NPTk5TLFxcbjQzMzI6XFx0XFx0XFx0XFx0YXRvbWljX3JlYWQoXFx1MDAyNmRlc3QtXFx1MDAzZWFjdGl2ZWNvbm5zKSkgfHxcXG40MzMzOlxcdFxcdCAgICBubGFfcHV0X3UzMihza2IsIElQVlNfREVTVF9BVFRSX0lOQUNUX0NPTk5TLFxcbjQzMzQ6XFx0XFx0XFx0XFx0aXBfdnNfZGVzdF9pbmFjdGNvbm5zKGRlc3QpKSB8fFxcbjQzMzU6XFx0XFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSVBWU19ERVNUX0FUVFJfUEVSU0lTVF9DT05OUyxcXG40MzM2OlxcdFxcdFxcdFxcdGF0b21pY19yZWFkKFxcdTAwMjZkZXN0LVxcdTAwM2VwZXJzaXN0Y29ubnMpKSB8fFxcbjQzMzc6XFx0XFx0ICAgIG5sYV9wdXRfdTE2KHNrYiwgSVBWU19ERVNUX0FUVFJfQUREUl9GQU1JTFksIGRlc3QtXFx1MDAzZWFmKSlcXG40MzM4OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjQzMzk6XFx0XFx0aXBfdnNfY29weV9zdGF0cyhcXHUwMDI2a3N0YXRzLCBcXHUwMDI2ZGVzdC1cXHUwMDNlc3RhdHMpO1xcbjQzNDA6XFx0XFx0aWYgKGlwX3ZzX2dlbmxfZmlsbF9zdGF0cyhza2IsIElQVlNfREVTVF9BVFRSX1NUQVRTLCBcXHUwMDI2a3N0YXRzKSlcXG40MzQxOlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjQzNDI6XFx0XFx0aWYgKGlwX3ZzX2dlbmxfZmlsbF9zdGF0czY0KHNrYiwgSVBWU19ERVNUX0FUVFJfU1RBVFM2NCwgXFx1MDAyNmtzdGF0cykpXFxuNDM0MzpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG40MzQ0OlxcdFxcbjQzNDU6XFx0XFx0bmxhX25lc3RfZW5kKHNrYiwgbmxfZGVzdCk7XFxuNDM0NjpcXHRcXG40MzQ3OlxcdFxcdHJldHVybiAwO1xcbjQzNDg6XFx0XFxuNDM0OTpcXHRubGFfcHV0X2ZhaWx1cmU6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjEyOjEyLjMwODY3NjEzOVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2ODMyOTI5OTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSVBWUyBEZXN0aW5hdGlvbiBPdmVybG9hZCBUcmFja2luZyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCAqZXhhY3RseSogd2hhdCdzIGNoYW5naW5nLiBJdCBsb29rcyBsaWtlIGl0J3MgYW4gb3B0aW1pemF0aW9uIGFuZCByZWZhY3RvcmluZyBvZiBob3cgSVBWUyB0cmFja3MgZGVzdGluYXRpb24gb3ZlcmxvYWQuIFByZXZpb3VzbHksIHRoZSBgSVBfVlNfREVTVF9GX09WRVJMT0FEYCBmbGFnIGluIGBkZXN0LVx1MDAzZWZsYWdzYCB3YXMgdGhlIGdvLXRvIGluZGljYXRvci4gVGhlIHBhdGNoIHJlbW92ZXMgdGhpcyBmbGFnLCBhbmQgaXMgZ29pbmcgdG8gdXRpbGl6ZSBgZGVzdC1cdTAwM2VsX3RocmVzaG9sZF92YWxgIGRpcmVjdGx5LiBDbGV2ZXIsIHVzaW5nIGEgbm9uLXplcm8gdmFsdWUgZm9yIGBsX3RocmVzaG9sZF92YWxgIGFzIHRoZSBvdmVybG9hZCBpbmRpY2F0b3IsIHdoaWNoIHNlZW1zIGxpa2UgYSBnb29kIGNob2ljZSB0byBvcHRpbWl6ZSB0aGUgY2FjaGUgbGluZXMuXG5cbkkgaW1tZWRpYXRlbHkgd2FudCB0byB2ZXJpZnkgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gU2luY2UgYGRlc3RgIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmpgLCB3aGljaCBjYWxscyBga3phbGxvY2AsIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBmaWVsZHMgb3IgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzLiBHaXZlbiBteSBleHBlcmllbmNlLCBJ4oCZbSB0aGlua2luZyB0aGVyZSBpcyBhIGNoYW5jZSB0aGVyZSBhcmUgc2lkZSBlZmZlY3RzLiBJIHJlY2FsbCBga3phbGxvY2AgemVyby1pbml0aWFsaXplcyB0aGUgYWxsb2NhdGVkIG1lbW9yeS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHRydWUgZm9yIGBzdHJ1Y3QgaXBfdnNfZGVzdGAuXG5cblNvLCB0aGUgbmV4dCBzdGVwIGlzIHRvIG1ha2Ugc3VyZSBgc3RydWN0IGlwX3ZzX2Rlc3RgIGlzIG5ldmVyIGNvcGllZCBkaXJlY3RseSB0byB1c2Vyc3BhY2UuIEdvb2QsIGZyb20gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVsZXZhbnQgY29kZSwgYF9faXBfdnNfZ2V0X2Rlc3RfZW50cmllc2AgYW5kIGdlbmVyaWMgbmV0bGluaywgb25seSBpbmRpdmlkdWFsIGZpZWxkcyBhcmUgY29waWVkLCBhbmQgdGhvc2UgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBUaGF0J3MgYSBodWdlIHJlbGllZi4gTm8gbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBleHBvc2VkLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCBvciBicmFuY2hlZCB1cG9uLiBUaGUgcGF0Y2gncyBjaG9pY2UgdG8gemVyby1pbml0aWFsaXplIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgYGRlc3RgIGlzIHNvdW5kIGFuZCBpdCdzIGFsc28gZ29vZCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZXhwbGljaXRseSBzZXQgb3IgdXBkYXRlZCBhZnRlciBhbGxvY2F0aW9uLlxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIHRoZSBzY2hlZHVsZXIgaW50ZXJhY3Rpb25zLiBJIHNlZSB0aGF0IHRoZSBjb2RlIHNpbXBseSByZXBsYWNlcyBgKGRlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRClgIGNoZWNrcyB3aXRoIGBpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdClgLiBUaGF0IHNob3VsZCBiZSBhIHN0cmFpZ2h0Zm9yd2FyZCBzdWJzdGl0dXRpb24gYXMgbG9uZyBhcyB0aGUgc2VtYW50aWNzIGFyZSBpZGVudGljYWwuIEkgd2FudCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGUgYGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZGAgZnVuY3Rpb24gY29ycmVjdGx5IHJlZmxlY3RzIHRoZSBvdmVybG9hZCBzdGF0ZSBiYXNlZCBvbiB0aGUgbmV3IGBsX3RocmVzaG9sZF92YWxgIGFwcHJvYWNoLiBJdCdzIHVzaW5nIGBcdTAwM2M9YCBhbmQgYFx1MDAzZT1gIHdpdGggYGxfdGhyZXNob2xkX3ZhbGAgYW5kIGB1X3RocmVzaG9sZF92YWxgIGluIGBpcF92c19jb25uLmNgLCB3aGljaCBtYWtlcyBzZW5zZS5cblxuRmluYWxseSwgSSBuZWVkIHRvIHBlcmZvcm0gYSBjb21wcmVoZW5zaXZlIHN3ZWVwIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGNoYW5nZSBpcyBjb250YWluZWQuIEknbGwgc2VhcmNoIHRoZSBjb2RlIGZvciBhbnkgdXNlcyBvZiBgbF90aHJlc2hvbGRfdmFsYCBvciBgdV90aHJlc2hvbGRfdmFsYCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHBsYWNlcyB3aGVyZSB0aGlzIGNvdWxkIGNhdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGludHJvZHVjZSB1bmV4cGVjdGVkIGJlaGF2aW9yLiBJJ2xsIG5lZWQgdG8gZG8gYSBmdWxsIGdyZXAgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4MTMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxMjoxOS4xNDE2MDg0NTRaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4Njg1NTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIihsX3RocmVzaG9sZF92YWx8dV90aHJlc2hvbGRfdmFsKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz0xMDg5PWlwX3ZzX2JpbmRfZGVzdChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMTUyLVxcdFxcdHRjID0gYXRvbWljX2luY19yZXR1cm4oXFx1MDAyNmRlc3QtXFx1MDAzZXRvdGFsY29ubnMpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTE1MzpcXHRcXHRpZiAodGMgXFx1MDAzZT0gUkVBRF9PTkNFKGRlc3QtXFx1MDAzZXVfdGhyZXNob2xkX3ZhbCkpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMTU0LVxcdFxcdFxcdGlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKGRlc3QsIHRydWUpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz0xMjIwPXN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c191bmJpbmRfZGVzdChzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEyNDUtXFx0XFx0dGMgPSBhdG9taWNfZmV0Y2hfZGVjKFxcdTAwMjZkZXN0LVxcdTAwM2V0b3RhbGNvbm5zKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjEyNDY6XFx0XFx0aWYgKHRjIFxcdTAwM2M9IFJFQURfT05DRShkZXN0LVxcdTAwM2VsX3RocmVzaG9sZF92YWwpKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTI0Ny1cXHRcXHRcXHRpcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChkZXN0LCBmYWxzZSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MTMxMj1zdGF0aWMgdm9pZCBfX2lwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKHN0cnVjdCBpcF92c19kZXN0ICpkZXN0LCBib29sIG92ZXJsb2FkKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTEzMjMtXFx0XFx0aWYgKGNvbm5zIFxcdTAwM2U9IChvdmVybG9hZCA/IGwgOiB1KSkge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoxMzI0OlxcdFxcdFxcdFdSSVRFX09OQ0UoZGVzdC1cXHUwMDNldV90aHJlc2hvbGRfdmFsLCBJTlRfTUFYKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MTMyNTpcXHRcXHRcXHRXUklURV9PTkNFKGRlc3QtXFx1MDAzZWxfdGhyZXNob2xkX3ZhbCwgbCk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTEzMjYtXFx0XFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTEzMjktXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjEzMzA6XFx0V1JJVEVfT05DRShkZXN0LVxcdTAwM2V1X3RocmVzaG9sZF92YWwsIHUgPyA6IElOVF9NQVgpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoxMzMxOlxcdFdSSVRFX09OQ0UoZGVzdC1cXHUwMDNlbF90aHJlc2hvbGRfdmFsLCAwKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMTMzMi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjEyOjE5LjE5MDI5ODdaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAwMDY0NTIyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGlzIGNvZGUgY2hhbmdlLiBGaXJzdCwgSSBuZWVkIHRvIGxvb2sgYXQgdGhlIGBmbGFnc2AgZmllbGQgd2l0aGluIHRoZSBgaXBfdnNfZGVzdGAgc3RydWN0dXJlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyAqbmV3KiBhYm91dCBpdCB3aXRoIHRoaXMgcGF0Y2guIFdhcyB0aGVyZSBhbnl0aGluZyBzZXQgaW4gYGRlc3QtXHUwMDNlZmxhZ3NgIHByZXZpb3VzbHk/IEknbSBnb2luZyB0byBjb25zdWx0IHRoZSBkZWZpbml0aW9uIG9mIGBJUF9WU19ERVNUX0ZfYCB0byBjb25maXJtIHdoYXQgd2FzIGFscmVhZHkgdGhlcmUuIFRoaXMgaXMgYWxsIGFib3V0IGVuc3VyaW5nIEkgdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiB0aGVzZSBmbGFnIGNoYW5nZXMgb24gZXhpc3RpbmcgYmVoYXZpb3IgYW5kIHdoYXQgbWlnaHQgaGF2ZSBiZWVuIGFkZGVkLiBJIG5lZWQgdG8gYmUgcHJlY2lzZSwgb3IgSSdsbCBpbnRyb2R1Y2UgYSBzdWJ0bGUgYnVnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzcyOCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjEyOjIxLjE5MDk0NjQ0NFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ1NzgwMTMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklQX1ZTX0RFU1RfRl9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxMjoyMS4yMzU1MzE4MTVaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjY4MzQwOTMzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBJUF9WU19ERVNUX0ZfYCBGbGFnIFVzYWdlKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBgSVBfVlNfREVTVF9GX2AgZmxhZyBraWNraW5nIGFyb3VuZCwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCB3aGVyZSBpdCdzIGFjdHVhbGx5IHVzZWQgd2l0aGluIHRoZSBrZXJuZWwncyBJUFZTIGltcGxlbWVudGF0aW9uLiBNeSBmaXJzdCBtb3ZlIGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgc291cmNlIGNvZGUuIEknbSBnb2luZyB0byBzdGFydCB3aXRoIHRoZSBtb3N0IGxpa2VseSBwbGFjZSwgd2hpY2ggaXMgdGhlIGBpbmNsdWRlL25ldC9pcF92cy5oYCBoZWFkZXIgZmlsZS4gVGhhdCdzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciBkZWZpbmluZyBhbmQsIGhvcGVmdWxseSwgZG9jdW1lbnRpbmcgd2hhdCB0aGUgZmxhZyBldmVuICptZWFucyouXG5cbkhvd2V2ZXIsIEknbSBub3QgZ29pbmcgdG8gc3RvcCB0aGVyZS4gSSBrbm93IGhvdyBlYXNpbHkgdGhpbmdzIGNhbiBiZSBidXJpZWQgb3IgZGVmaW5lZCBpbiBtdWx0aXBsZSBwbGFjZXMuIFNvLCBhZnRlciBhIHF1aWNrIHBlZWsgaW4gYGlwX3ZzLmhgLCBJJ2xsIHVzZSBncmVwIG9yIGEgc2ltaWxhciB0b29sIHRvIHNjb3VyIHRoZSBlbnRpcmUga2VybmVsIHRyZWUuIEknbSBsb29raW5nIGZvciAqYW55KiBpbnN0YW5jZSBvZiBgSVBfVlNfREVTVF9GX2AsIHRvIGdldCB0aGUgY29tcGxldGUgcGljdHVyZS4gSSB3YW50IHRvIHNlZSBob3cgaXQncyBiZWluZyBzZXQsIGNoZWNrZWQsIGFuZCBtb2RpZmllZC4gQ29udGV4dCBpcyBrZXkgaGVyZTsgdGhlIGhlYWRlciBmaWxlIGxpa2VseSBvbmx5IHByb3ZpZGVzIHRoZSBzdGF0aWMgZGVmaW5pdGlvbiBhbmQgbWF5YmUgc29tZSBiYXNpYyBkb2N1bWVudGF0aW9uLiBUaGUgcmVhbCBtZWF0IG9mIHRoZSBzdG9yeSBsaWVzIGluIHRoZSBwcmFjdGljYWwgaW1wbGVtZW50YXRpb24uIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIGhhcyB0byBzYXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTU4LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6MTI6MjMuOTE4OTQzMjEzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQ3NTY2NjI4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJJUF9WU19ERVNUX0ZfXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxMjoyNS40NjY1MTg4NVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjkyOTMwNjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFwiSVBfVlNfREVTVF9GX09WRVJMT0FEXCIgRmxhZyoqXG5cbk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYElQX1ZTX0RFU1RfRl9PVkVSTE9BRGAgd2FzIGluZGVlZCB0aGUgb25seSBmbGFnIGluIHF1ZXN0aW9uIGhlcmUuIExldCdzIHJ1biB0aHJvdWdoIHRoZSBjaGVja2xpc3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLlxuXG5GaXJzdCwgdGhlIHBvc3NpYmlsaXR5IG9mIGtlcm5lbCBzdHJ1Y3R1cmVzIGJlaW5nIHNlbnQgZGlyZWN0bHkgdG8gdXNlcnNwYWNlIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMuIEJ1dCwgdGhlIGNvZGUgZXhwbGljaXRseSAqZG9lc24ndCogZG8gdGhhdC4gVGhlIGBzdHJ1Y3QgaXBfdnNfZGVzdGAgaXNuJ3QgZGlyZWN0bHkgZXhwb3NlZDsgZ2V0dGVycyBjb3B5IHNlbGVjdGVkLCBpbml0aWFsaXplZCBmaWVsZHMgaW50byB6ZXJvZWQgYnVmZmVycy4gVGhleSB1c2UgYG1lbXNldChcdTAwMjZlbnRyeSwgMCwgLi4uKWAgYW5kIGluZGl2aWR1YWwgTmV0bGluayBhdHRyaWJ1dGVzLCBzbyB0aGF0J3MgY292ZXJlZC5cblxuTmV4dCwgY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgbWlnaHQgcmVseSBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gSG1tLCBsb29raW5nIGF0IGl0LCBhbGwgZmllbGRzIG9mIGBkZXN0YCBhcmUgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iaigpYCwgd2hpY2gsIGFzIEkgcmVjYWxsLCB6ZXJvZXMgdGhlIGFsbG9jYXRlZCBtZW1vcnkuIFRoZXkncmUgYWxzbyBpbml0aWFsaXplZCB3aXRoaW4gYGlwX3ZzX25ld19kZXN0YCBvciBgX19pcF92c191cGRhdGVfZGVzdGAuIFRoYXQgcmVtb3ZlcyB0aGlzIGNvbmNlcm4gdG9vLlxuXG5UaGVuIHRoZXJlJ3MgdGhlIGNoYW5jZSBvZiBhbGxvY2F0aW9ucyBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIHdoZXJlIGxhdGVyIGNvZGUgcGF0aHMgbWlnaHQgYWNjZXNzIHVuaW5pdGlhbGl6ZWQgZGF0YS4gSG93ZXZlciwgdGhlcmUgYXJlbid0IGFueSB1bmluaXRpYWxpemVkIGZpZWxkcy4gVGhhdCdzIGEgZ29vZCB0aGluZy5cblxuRmluYWxseSwgYm91bmRzIGNoZWNrcyBvciBsb2dpYyB0aGF0IG1pZ2h0IGFsbG93IHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuIFRoaXMgZG9lc24ndCBzZWVtIGFwcGxpY2FibGUgaGVyZS5cblxuQWxyaWdodCwgYWZ0ZXIgcmV2aWV3aW5nIGFsbCB0aGUgY3JpdGVyaWEsIGl0J3MgY2xlYXIgdGhhdCB0aGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlICphbnkqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBEZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpc24ndCByZXF1aXJlZC4gV2UgY2FuIGNvbmZpZGVudGx5IG1vdmUgZm9yd2FyZC4gSSdsbCBwcmVwYXJlIHRoZSBjYWxsIHRvIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MzExLCJPdXRwdXRUb2tlbnMiOjIyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxMjoyOS4xNTk0NTI1NjdaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlb3JnYW5pemVzIGZpZWxkcyBpbiBgc3RydWN0IGlwX3ZzX2Rlc3RgIGZvciBiZXR0ZXIgY2FjaGVsaW5lIHV0aWxpemF0aW9uIGFuZCByZWZhY3RvcnMgdGhlIGRlc3RpbmF0aW9uIG92ZXJsb2FkIHN0YXR1cyB0cmFja2luZyB0byB1c2UgYGxfdGhyZXNob2xkX3ZhbGAgLyBgdV90aHJlc2hvbGRfdmFsYCBpbnN0ZWFkIG9mIGBkZXN0LVxcdTAwM2VmbGFnc2Agd2l0aCBgSVBfVlNfREVTVF9GX09WRVJMT0FEYC5cXG5cXG5BbGwgYHN0cnVjdCBpcF92c19kZXN0YCBpbnN0YW5jZXMgYXJlIHplcm8tYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqKClgIGFuZCB0aGVpciB0aHJlc2hvbGQgZmllbGRzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB1cG9uIGNyZWF0aW9uLiBUaGUgc3RydWN0dXJlIGl0c2VsZiBpcyBub3QgY29waWVkIHRvIHVzZXJzcGFjZSBhcyBhIHJhdyBibG9iOyB1c2Vyc3BhY2UgcXVlcmllcyBzZXJpYWxpemUgaW5kaXZpZHVhbCBmaWVsZHMgb3IgdXNlIHplcm9lZCBpbnRlcm1lZGlhdGUgc3RydWN0dXJlcyAoYG1lbXNldGAgaW4gYF9faXBfdnNfZ2V0X2Rlc3RfZW50cmllc2AgYW5kIGluZGl2aWR1YWwgTmV0bGluayBhdHRyaWJ1dGVzIGluIGBpcF92c19nZW5sX2ZpbGxfZGVzdGApLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hlZCB1cG9uLlxcblxcbkJlY2F1c2UgdGhlIGNoYW5nZXMgaW50cm9kdWNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlb3JnYW5pemVzIGZpZWxkcyBpbiBgc3RydWN0IGlwX3ZzX2Rlc3RgIGZvciBiZXR0ZXIgY2FjaGVsaW5lIHV0aWxpemF0aW9uIGFuZCByZWZhY3RvcnMgdGhlIGRlc3RpbmF0aW9uIG92ZXJsb2FkIHN0YXR1cyB0cmFja2luZyB0byB1c2UgYGxfdGhyZXNob2xkX3ZhbGAgLyBgdV90aHJlc2hvbGRfdmFsYCBpbnN0ZWFkIG9mIGBkZXN0LVxcdTAwM2VmbGFnc2Agd2l0aCBgSVBfVlNfREVTVF9GX09WRVJMT0FEYC5cXG5cXG5BbGwgYHN0cnVjdCBpcF92c19kZXN0YCBpbnN0YW5jZXMgYXJlIHplcm8tYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqKClgIGFuZCB0aGVpciB0aHJlc2hvbGQgZmllbGRzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB1cG9uIGNyZWF0aW9uLiBUaGUgc3RydWN0dXJlIGl0c2VsZiBpcyBub3QgY29waWVkIHRvIHVzZXJzcGFjZSBhcyBhIHJhdyBibG9iOyB1c2Vyc3BhY2UgcXVlcmllcyBzZXJpYWxpemUgaW5kaXZpZHVhbCBmaWVsZHMgb3IgdXNlIHplcm9lZCBpbnRlcm1lZGlhdGUgc3RydWN0dXJlcyAoYG1lbXNldGAgaW4gYF9faXBfdnNfZ2V0X2Rlc3RfZW50cmllc2AgYW5kIGluZGl2aWR1YWwgTmV0bGluayBhdHRyaWJ1dGVzIGluIGBpcF92c19nZW5sX2ZpbGxfZGVzdGApLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hlZCB1cG9uLlxcblxcbkJlY2F1c2UgdGhlIGNoYW5nZXMgaW50cm9kdWNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowf5zd8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 22:08:45 +0000 UTC FinishedAt: 2026-09-07 22:12:30 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS", "NETFILTER", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS", "NETFILTER", "INET" ], "series_id": "0410e528-7572-4d57-92bb-02a0d226795d" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_vs_dest_update_overload", "ip_vs_bind_dest", "ip_vs_unbind_dest", "__ip_vs_update_dest", "ip_vs_edit_dest", "ip_vs_add_dest", "ip_vs_rr_schedule", "ip_vs_wrr_schedule", "ip_vs_wlc_schedule", "ip_vs_lc_schedule", "ip_vs_fo_schedule", "ip_vs_ovf_schedule", "ip_vs_twos_schedule" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-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+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQmIzM0OywKICAgICYjMzQ7aXBfdnNfYmluZF9kZXN0JiMzNDssCiAgICAmIzM0O2lwX3ZzX3VuYmluZF9kZXN0JiMzNDssCiAgICAmIzM0O19faXBfdnNfdXBkYXRlX2Rlc3QmIzM0OywKICAgICYjMzQ7aXBfdnNfZWRpdF9kZXN0JiMzNDssCiAgICAmIzM0O2lwX3ZzX2FkZF9kZXN0JiMzNDssCiAgICAmIzM0O2lwX3ZzX3JyX3NjaGVkdWxlJiMzNDssCiAgICAmIzM0O2lwX3ZzX3dycl9zY2hlZHVsZSYjMzQ7LAogICAgJiMzNDtpcF92c193bGNfc2NoZWR1bGUmIzM0OywKICAgICYjMzQ7aXBfdnNfbGNfc2NoZWR1bGUmIzM0OywKICAgICYjMzQ7aXBfdnNfZm9fc2NoZWR1bGUmIzM0OywKICAgICYjMzQ7aXBfdnNfb3ZmX3NjaGVkdWxlJiMzNDssCiAgICAmIzM0O2lwX3ZzX3R3b3Nfc2NoZWR1bGUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW9yZ2FuaXplcyBmaWVsZHMgaW4gYHN0cnVjdCBpcF92c19kZXN0YCBmb3IgYmV0dGVyIGNhY2hlbGluZSB1dGlsaXphdGlvbiBhbmQgcmVmYWN0b3JzIHRoZSBkZXN0aW5hdGlvbiBvdmVybG9hZCBzdGF0dXMgdHJhY2tpbmcgdG8gdXNlIGBsX3RocmVzaG9sZF92YWxgIC8gYHVfdGhyZXNob2xkX3ZhbGAgaW5zdGVhZCBvZiBgZGVzdC1cdTAwM2VmbGFnc2Agd2l0aCBgSVBfVlNfREVTVF9GX09WRVJMT0FEYC5cblxuQWxsIGBzdHJ1Y3QgaXBfdnNfZGVzdGAgaW5zdGFuY2VzIGFyZSB6ZXJvLWFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iaigpYCBhbmQgdGhlaXIgdGhyZXNob2xkIGZpZWxkcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdXBvbiBjcmVhdGlvbi4gVGhlIHN0cnVjdHVyZSBpdHNlbGYgaXMgbm90IGNvcGllZCB0byB1c2Vyc3BhY2UgYXMgYSByYXcgYmxvYjsgdXNlcnNwYWNlIHF1ZXJpZXMgc2VyaWFsaXplIGluZGl2aWR1YWwgZmllbGRzIG9yIHVzZSB6ZXJvZWQgaW50ZXJtZWRpYXRlIHN0cnVjdHVyZXMgKGBtZW1zZXRgIGluIGBfX2lwX3ZzX2dldF9kZXN0X2VudHJpZXNgIGFuZCBpbmRpdmlkdWFsIE5ldGxpbmsgYXR0cmlidXRlcyBpbiBgaXBfdnNfZ2VubF9maWxsX2Rlc3RgKS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgYnJhbmNoZWQgdXBvbi5cblxuQmVjYXVzZSB0aGUgY2hhbmdlcyBpbnRyb2R1Y2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBkZXN0aW5hdGlvbiBvdmVybG9hZCB0cmFja2luZyBsb2dpYyBhbmQgZGVzdGluYXRpb24gc3RydWN0dXJlIGxheW91dCBpbiB0aGUgSVBWUyAoSVAgVmlydHVhbCBTZXJ2ZXIpIHN1YnN5c3RlbS4gSXQgdXBkYXRlcyBjb25uZWN0aW9uIGJpbmRpbmcgYW5kIHVuYmluZGluZyB0aHJlc2hvbGRzLCBjb250cm9sIHBsYW5lIGRlc3RpbmF0aW9uIHVwZGF0ZXMsIGFuZCBzY2hlZHVsZXIgb3ZlcmxvYWQgZXZhbHVhdGlvbiBhY3Jvc3MgSVBWUyBhbGdvcml0aG1zLiBUaGVzZSBhcmUgcmVhY2hhYmxlLCBleGVjdXRhYmxlIG5ldHdvcmsgcGF0aHMgdGhhdCBzaG91bGQgYmUgZnV6emVkIGZvciByYWNlIGNvbmRpdGlvbnMsIGFyaXRobWV0aWMgb3Igc3RhdGUgaGFuZGxpbmcgYnVncywgYW5kIHRocmVzaG9sZCBlZGdlIGNhc2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjEwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTAyOWMxODUzOWUyYmQ0MzkzYmI4NzM2ZGYwMDAzZTQyMmNiN2M5YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMjI6MTA6MTYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBfdnMuaCBiL2luY2x1ZGUvbmV0L2lwX3ZzLmhcbmluZGV4IDMyZmRlNzMxYmNlYjcuLjlhODNiZmYzMjU2OWQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9pcF92cy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcF92cy5oXG5AQCAtMzYsOSAmIzQzOzM2LDYgQEBcbiAjZGVmaW5lIElQX1ZTX0hEUl9JTlZFUlNFXHQxXG4gI2RlZmluZSBJUF9WU19IRFJfSUNNUFx0XHQyXG4gXG4tLyogRGVzdGluYXRpb24gU2VydmVyIEZsYWdzICovXG4tI2RlZmluZSBJUF9WU19ERVNUX0ZfT1ZFUkxPQURcdDB4MDAwMlx0XHQvKiBzZXJ2ZXIgaXMgb3ZlcmxvYWRlZCAqL1xuLVxuIC8qIERlc3RpbmF0aW9uIFNlcnZlciBDb25maWcgRmxhZ3MgKi9cbiAjZGVmaW5lIElQX1ZTX0RFU1RfQ0ZfQVZBSUxBQkxFXHQweDAwMDFcdFx0Lyogc2VydmVyIGlzIGF2YWlsYWJsZSAqL1xuIFxuQEAgLTk3MywzMiAmIzQzOzk3MCw0MyBAQCBzdHJ1Y3QgaXBfdnNfZGVzdF9kc3Qge1xuICAqIGFuZCBzbyBvbi5cbiAgKi9cbiBzdHJ1Y3QgaXBfdnNfZGVzdCB7XG4mIzQzO1x0LyogQ2FjaGVsaW5lIGZvciBoYXNoIHRhYmxlIG5vZGVzIC0gcmVhZC1tb3N0bHkgKi9cbiYjNDM7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRuX2xpc3Q7ICAgLyogZm9yIHRoZSBkZXN0cyBpbiB0aGUgc2VydmljZSAqL1xuIFx0c3RydWN0IGhsaXN0X25vZGVcdGRfbGlzdDsgICAvKiBmb3IgdGFibGUgd2l0aCBhbGwgdGhlIGRlc3RzICovXG4gXG4tXHR1MTZcdFx0XHRhZjtcdFx0LyogYWRkcmVzcyBmYW1pbHkgKi9cbi1cdF9fYmUxNlx0XHRcdHBvcnQ7XHRcdC8qIHBvcnQgbnVtYmVyIG9mIHRoZSBzZXJ2ZXIgKi9cbi1cdHVuaW9uIG5mX2luZXRfYWRkclx0YWRkcjtcdFx0LyogSVAgYWRkcmVzcyBvZiB0aGUgc2VydmVyICovXG4tXHR2b2xhdGlsZSB1bnNpZ25lZCBpbnRcdGZsYWdzO1x0XHQvKiBkZXN0IHN0YXR1cyBmbGFncyAqL1xuLVx0YXRvbWljX3RcdFx0Y29ubl9mbGFncztcdC8qIGZsYWdzIHRvIGNvcHkgdG8gY29ubiAqL1xuIFx0YXRvbWljX3RcdFx0d2VpZ2h0O1x0XHQvKiBzZXJ2ZXIgd2VpZ2h0ICovXG4tXHR1bnNpZ25lZCBsb25nXHRcdGNmbGFncztcdFx0LyogY29uZmlnIGZsYWdzICovXG4gXHRhdG9taWNfdFx0XHRsYXN0X3dlaWdodDtcdC8qIHNlcnZlciBsYXRlc3Qgd2VpZ2h0ICovXG4mIzQzO1xuJiM0MztcdC8qIGNvbm5lY3Rpb24gdGhyZXNob2xkcyAqL1xuJiM0MztcdHUzMlx0XHRcdGxfdGhyZXNob2xkX3ZhbDsvKiB1c2VkIGxvd2VyIHRocmVzaG9sZCAqL1xuJiM0MztcdHUzMlx0XHRcdHVfdGhyZXNob2xkX3ZhbDsvKiB1c2VkIHVwcGVyIHRocmVzaG9sZCAqL1xuJiM0MztcdC8qIDMyLzQ4ICovXG4mIzQzO1x0dTMyXHRcdFx0bF90aHJlc2hvbGQ7XHQvKiBsb3dlciB0aHJlc2hvbGQgKi9cbiYjNDM7XHR1MzJcdFx0XHR1X3RocmVzaG9sZDtcdC8qIHVwcGVyIHRocmVzaG9sZCAqL1xuJiM0MztcbiYjNDM7XHR1bnNpZ25lZCBsb25nXHRcdGNmbGFncztcdFx0LyogY29uZmlnIGZsYWdzICovXG4mIzQzO1xuJiM0MztcdC8qIDQ0LzY0ICovXG4mIzQzO1x0YXRvbWljX3RcdFx0Y29ubl9mbGFncztcdC8qIGZsYWdzIHRvIGNvcHkgdG8gY29ubiAqL1xuJiM0MztcbiBcdF9fdTE2XHRcdFx0dHVuX3R5cGU7XHQvKiB0dW5uZWwgdHlwZSAqL1xuIFx0X19iZTE2XHRcdFx0dHVuX3BvcnQ7XHQvKiB0dW5uZWwgcG9ydCAqL1xuIFx0X191MTZcdFx0XHR0dW5fZmxhZ3M7XHQvKiB0dW5uZWwgZmxhZ3MgKi9cbiBcbi1cdHJlZmNvdW50X3RcdFx0cmVmY250O1x0XHQvKiByZWZlcmVuY2UgY291bnRlciAqL1xuLVx0c3RydWN0IGlwX3ZzX3N0YXRzICAgICAgc3RhdHM7ICAgICAgICAgIC8qIHN0YXRpc3RpY3MgKi9cbi1cdHVuc2lnbmVkIGxvbmdcdFx0aWRsZV9zdGFydDtcdC8qIHN0YXJ0IHRpbWUsIGppZmZpZXMgKi9cbiYjNDM7XHR1MTZcdFx0XHRhZjtcdFx0LyogYWRkcmVzcyBmYW1pbHkgKi9cbiYjNDM7XHRfX2JlMTZcdFx0XHRwb3J0O1x0XHQvKiBwb3J0IG51bWJlciBvZiB0aGUgc2VydmVyICovXG4mIzQzO1x0LyogNjAvODAgKi9cbiYjNDM7XHR1bmlvbiBuZl9pbmV0X2FkZHJcdGFkZHI7XHRcdC8qIElQIGFkZHJlc3Mgb2YgdGhlIHNlcnZlciAqL1xuIFxuLVx0LyogY29ubmVjdGlvbiBjb3VudGVycyBhbmQgdGhyZXNob2xkcyAqL1xuLVx0YXRvbWljX3RcdFx0YWN0aXZlY29ubnM7XHQvKiBhY3RpdmUgY29ubmVjdGlvbnMgKi9cbiYjNDM7XHQvKiBjb25uZWN0aW9uIGNvdW50ZXJzICovXG4gXHRhdG9taWNfdFx0XHR0b3RhbGNvbm5zO1x0LyogdG90YWwgY29ubmVjdGlvbnMgKi9cbiYjNDM7XHRhdG9taWNfdFx0XHRhY3RpdmVjb25ucztcdC8qIGFjdGl2ZSBjb25uZWN0aW9ucyAqL1xuIFx0YXRvbWljX3RcdFx0cGVyc2lzdGNvbm5zO1x0LyogcGVyc2lzdGVudCBjb25uZWN0aW9ucyAqL1xuLVx0X191MzJcdFx0XHR1X3RocmVzaG9sZDtcdC8qIHVwcGVyIHRocmVzaG9sZCAqL1xuLVx0X191MzJcdFx0XHRsX3RocmVzaG9sZDtcdC8qIGxvd2VyIHRocmVzaG9sZCAqL1xuLVx0X191MzJcdFx0XHRsX3RocmVzaG9sZF92YWw7LyogdXNlZCBsb3dlciB0aHJlc2hvbGQgKi9cbiYjNDM7XG4mIzQzO1x0cmVmY291bnRfdFx0XHRyZWZjbnQ7XHRcdC8qIHJlZmVyZW5jZSBjb3VudGVyICovXG4mIzQzO1x0c3RydWN0IGlwX3ZzX3N0YXRzICAgICAgc3RhdHM7ICAgICAgICAgIC8qIHN0YXRpc3RpY3MgKi9cbiYjNDM7XHR1bnNpZ25lZCBsb25nXHRcdGlkbGVfc3RhcnQ7XHQvKiBzdGFydCB0aW1lLCBqaWZmaWVzICovXG4gXG4gXHQvKiBmb3IgZGVzdGluYXRpb24gY2FjaGUgKi9cbiBcdHNwaW5sb2NrX3RcdFx0ZHN0X2xvY2s7XHQvKiBsb2NrIG9mIGRzdF9jYWNoZSAqL1xuQEAgLTE5MTUsNyAmIzQzOzE5MjMsMTMgQEAgc3RhdGljIGlubGluZSB2b2lkIGlwX3ZzX2Rlc3RfcHV0X2FuZF9mcmVlKHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KVxuIFx0XHRrZnJlZShkZXN0KTtcbiB9XG4gXG4tdm9pZCBpcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCwgaW50IG1vZGUpO1xuJiM0Mzt2b2lkIGlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKHN0cnVjdCBpcF92c19kZXN0ICpkZXN0LCBib29sIG92ZXJsb2FkKTtcbiYjNDM7XG4mIzQzOy8qIENoZWNrIGlmIGRlc3QgaXMgaW4gb3ZlcmxvYWRlZCBzdGF0ZSAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGNvbnN0IHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIFJFQURfT05DRShkZXN0LVx1MDAzZWxfdGhyZXNob2xkX3ZhbCk7XG4mIzQzO31cbiBcbiAvKiBJUFZTIHN5bmMgZGFlbW9uIGRhdGEgYW5kIGZ1bmN0aW9uIHByb3RvdHlwZXNcbiAgKiAoZnJvbSBpcF92c19zeW5jLmMpXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNcbmluZGV4IDZmYTNlMWRjNTM0YzMuLjUzNDhjMmY0OWI2NGUgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jXG5AQCAtMTE1MCw4ICYjNDM7MTE1MCw4IEBAIGlwX3ZzX2JpbmRfZGVzdChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KVxuIFx0XHRpZiAoIShmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX0lOQUNUSVZFKSlcbiBcdFx0XHRhdG9taWNfaW5jKFx1MDAyNmRlc3QtXHUwMDNlYWN0aXZlY29ubnMpO1xuIFx0XHR0YyA9IGF0b21pY19pbmNfcmV0dXJuKFx1MDAyNmRlc3QtXHUwMDNldG90YWxjb25ucyk7XG4tXHRcdGlmICh0YyA9PSBSRUFEX09OQ0UoZGVzdC1cdTAwM2V1X3RocmVzaG9sZCkpXG4tXHRcdFx0aXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoZGVzdCwgMSk7XG4mIzQzO1x0XHRpZiAodGMgXHUwMDNlPSBSRUFEX09OQ0UoZGVzdC1cdTAwM2V1X3RocmVzaG9sZF92YWwpKVxuJiM0MztcdFx0XHRpcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChkZXN0LCB0cnVlKTtcbiBcdH0gZWxzZSB7XG4gXHRcdC8qIEl0IGlzIGEgcGVyc2lzdGVudCBjb25uZWN0aW9uL3RlbXBsYXRlLCBzbyBpbmNyZWFzZVxuIFx0XHQgICB0aGUgcGVyc2lzdGVudCBjb25uZWN0aW9uIGNvdW50ZXIgKi9cbkBAIC0xMjQzLDggJiM0MzsxMjQzLDggQEAgc3RhdGljIGlubGluZSB2b2lkIGlwX3ZzX3VuYmluZF9kZXN0KHN0cnVjdCBpcF92c19jb25uICpjcClcbiBcdFx0aWYgKCEoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9JTkFDVElWRSkpXG4gXHRcdFx0YXRvbWljX2RlYyhcdTAwMjZkZXN0LVx1MDAzZWFjdGl2ZWNvbm5zKTtcbiBcdFx0dGMgPSBhdG9taWNfZmV0Y2hfZGVjKFx1MDAyNmRlc3QtXHUwMDNldG90YWxjb25ucyk7XG4tXHRcdGlmICh0YyA9PSBSRUFEX09OQ0UoZGVzdC1cdTAwM2VsX3RocmVzaG9sZF92YWwpKVxuLVx0XHRcdGlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKGRlc3QsIC0xKTtcbiYjNDM7XHRcdGlmICh0YyBcdTAwM2M9IFJFQURfT05DRShkZXN0LVx1MDAzZWxfdGhyZXNob2xkX3ZhbCkpXG4mIzQzO1x0XHRcdGlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKGRlc3QsIGZhbHNlKTtcbiBcdH0gZWxzZSB7XG4gXHRcdC8qIEl0IGlzIGEgcGVyc2lzdGVudCBjb25uZWN0aW9uL3RlbXBsYXRlLCBzbyBkZWNyZWFzZVxuIFx0XHQgICB0aGUgcGVyc2lzdGVudCBjb25uZWN0aW9uIGNvdW50ZXIgKi9cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmNcbmluZGV4IDRjMWM3Mzk0NDZiNzYuLjMwMDM1NDdkY2FiZTUgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuY1xuQEAgLTEzMDksMzIgJiM0MzsxMzA5LDMyIEBAIHZvaWQgaXBfdnNfc3RhdHNfZnJlZShzdHJ1Y3QgaXBfdnNfc3RhdHMgKnN0YXRzKVxuICAqIC0gY29ubnMgcmVhY2ggdV90aHJlc2hvbGQgYW5kIGV4Y2VlZCBpdDogc2V0IHRoZSBmbGFnXG4gICogLSBjb25ucyBnbyBiZWxvdyBsX3RocmVzaG9sZCAob3IgNzUlIG9mIHVfdGhyZXNob2xkKTogY2xlYXIgdGhlIGZsYWdcbiAgKi9cbi1zdGF0aWMgdm9pZCBfX2lwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKHN0cnVjdCBpcF92c19kZXN0ICpkZXN0LCBpbnQgbW9kZSlcbiYjNDM7c3RhdGljIHZvaWQgX19pcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCwgYm9vbCBvdmVybG9hZClcbiB7XG4gXHRpbnQgY29ubnM7XG4gXHR1MzIgbCwgdTtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2ZGVzdC1cdTAwM2Vkc3RfbG9jayk7XG4gXHR1ID0gUkVBRF9PTkNFKGRlc3QtXHUwMDNldV90aHJlc2hvbGQpO1xuLVx0aWYgKCF1KVxuLVx0XHRnb3RvIHVuc2V0O1xuLVx0bCA9IFJFQURfT05DRShkZXN0LVx1MDAzZWxfdGhyZXNob2xkX3ZhbCk7XG4tXHRjb25ucyA9IGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNldG90YWxjb25ucyk7XG4tXHRpZiAoY29ubnMgXHUwMDNlPSAobW9kZSBcdTAwM2UgMCA/IGwgOiB1KSkge1xuLVx0XHRkZXN0LVx1MDAzZWZsYWdzIHw9IElQX1ZTX0RFU1RfRl9PVkVSTE9BRDtcbi1cdFx0cmV0dXJuO1xuJiM0MztcdGlmICh1KSB7XG4mIzQzO1x0XHQvKiBMb3cgdGhyZXNob2xkIGRlZmF1bHRzIHRvIDc1JSBvZiB1cHBlciB0aHJlc2hvbGQgKi9cbiYjNDM7XHRcdGwgPSBSRUFEX09OQ0UoZGVzdC1cdTAwM2VsX3RocmVzaG9sZCkgPyA6ICh1IC0gKHUgXHUwMDNlXHUwMDNlIDIpKTtcbiYjNDM7XHRcdGNvbm5zID0gYXRvbWljX3JlYWQoXHUwMDI2ZGVzdC1cdTAwM2V0b3RhbGNvbm5zKTtcbiYjNDM7XHRcdGlmIChjb25ucyBcdTAwM2U9IChvdmVybG9hZCA/IGwgOiB1KSkge1xuJiM0MztcdFx0XHRXUklURV9PTkNFKGRlc3QtXHUwMDNldV90aHJlc2hvbGRfdmFsLCBJTlRfTUFYKTtcbiYjNDM7XHRcdFx0V1JJVEVfT05DRShkZXN0LVx1MDAzZWxfdGhyZXNob2xkX3ZhbCwgbCk7XG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XHRcdH1cbiBcdH1cbi1cdGlmIChjb25ucyBcdTAwM2U9IChtb2RlIFx1MDAzYyAwID8gdSA6IGwpKVxuLVx0XHRyZXR1cm47XG4gXG4tdW5zZXQ6XG4tXHRkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNj0gfklQX1ZTX0RFU1RfRl9PVkVSTE9BRDtcbiYjNDM7XHRXUklURV9PTkNFKGRlc3QtXHUwMDNldV90aHJlc2hvbGRfdmFsLCB1ID8gOiBJTlRfTUFYKTtcbiYjNDM7XHRXUklURV9PTkNFKGRlc3QtXHUwMDNlbF90aHJlc2hvbGRfdmFsLCAwKTtcbiB9XG4gXG4tdm9pZCBpcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCwgaW50IG1vZGUpXG4mIzQzO3ZvaWQgaXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QsIGJvb2wgb3ZlcmxvYWQpXG4ge1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmRlc3QtXHUwMDNlZHN0X2xvY2spO1xuLVx0X19pcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChkZXN0LCBtb2RlKTtcbiYjNDM7XHRfX2lwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKGRlc3QsIG92ZXJsb2FkKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmRlc3QtXHUwMDNlZHN0X2xvY2spO1xuIH1cbiBcbkBAIC0xNDA2LDE1ICYjNDM7MTQwNiwxMyBAQCBfX2lwX3ZzX3VwZGF0ZV9kZXN0KHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIHN0cnVjdCBpcF92c19kZXN0ICpkZXN0LFxuIFxuIFx0aWYgKFJFQURfT05DRShkZXN0LVx1MDAzZXVfdGhyZXNob2xkKSAhPSB1ZGVzdC1cdTAwM2V1X3RocmVzaG9sZCB8fFxuIFx0ICAgIFJFQURfT05DRShkZXN0LVx1MDAzZWxfdGhyZXNob2xkKSAhPSB1ZGVzdC1cdTAwM2VsX3RocmVzaG9sZCkge1xuJiM0MztcdFx0Ym9vbCBvdmVybG9hZDtcbiYjNDM7XG4gXHRcdHNwaW5fbG9ja19iaChcdTAwMjZkZXN0LVx1MDAzZWRzdF9sb2NrKTtcbiBcdFx0V1JJVEVfT05DRShkZXN0LVx1MDAzZXVfdGhyZXNob2xkLCB1ZGVzdC1cdTAwM2V1X3RocmVzaG9sZCk7XG4gXHRcdFdSSVRFX09OQ0UoZGVzdC1cdTAwM2VsX3RocmVzaG9sZCwgdWRlc3QtXHUwMDNlbF90aHJlc2hvbGQpO1xuLVx0XHQvKiBMb3cgdGhyZXNob2xkIGRlZmF1bHRzIHRvIDc1JSBvZiB1cHBlciB0aHJlc2hvbGQgKi9cbi1cdFx0V1JJVEVfT05DRShkZXN0LVx1MDAzZWxfdGhyZXNob2xkX3ZhbCxcbi1cdFx0XHQgICB1ZGVzdC1cdTAwM2VsX3RocmVzaG9sZCA/IDpcbi1cdFx0XHQgICAodWRlc3QtXHUwMDNldV90aHJlc2hvbGQgLVxuLVx0XHRcdCAgICAodWRlc3QtXHUwMDNldV90aHJlc2hvbGQgXHUwMDNlXHUwMDNlIDIpKSk7XG4tXHRcdF9faXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoZGVzdCwgMCk7XG4mIzQzO1x0XHRvdmVybG9hZCA9IGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KTtcbiYjNDM7XHRcdF9faXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoZGVzdCwgb3ZlcmxvYWQpO1xuIFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZkZXN0LVx1MDAzZWRzdF9sb2NrKTtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZGguYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19kaC5jXG5pbmRleCA0M2FiZWQ3YTI2YTZhLi45NWU1Mjk1MGFkYmI3IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2RoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19kaC5jXG5AQCAtMTk1LDE2ICYjNDM7MTk1LDYgQEAgc3RhdGljIGludCBpcF92c19kaF9kZXN0X2NoYW5nZWQoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YyxcbiB9XG4gXG4gXG4tLypcbi0gKiAgICAgIElmIHRoZSBkZXN0IGZsYWdzIGlzIHNldCB3aXRoIElQX1ZTX0RFU1RfRl9PVkVSTE9BRCxcbi0gKiAgICAgIGNvbnNpZGVyIHRoYXQgdGhlIHNlcnZlciBpcyBvdmVybG9hZGVkIGhlcmUuXG4tICovXG4tc3RhdGljIGlubGluZSBpbnQgaXNfb3ZlcmxvYWRlZChzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcbi17XG4tXHRyZXR1cm4gZGVzdC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEO1xuLX1cbi1cbi1cbiAvKlxuICAqICAgICAgRGVzdGluYXRpb24gaGFzaGluZyBzY2hlZHVsaW5nXG4gICovXG5AQCAtMjE5LDEwICYjNDM7MjA5LDggQEAgaXBfdnNfZGhfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBcdHMgPSAoc3RydWN0IGlwX3ZzX2RoX3N0YXRlICopIHN2Yy1cdTAwM2VzY2hlZF9kYXRhO1xuIFx0ZGVzdCA9IGlwX3ZzX2RoX2dldChzdmMtXHUwMDNlYWYsIHMsIFx1MDAyNmlwaC1cdTAwM2VkYWRkcik7XG4tXHRpZiAoIWRlc3QgfHxcbi1cdCAgICAhKGRlc3QtXHUwMDNlY2ZsYWdzIFx1MDAyNiBJUF9WU19ERVNUX0NGX0FWQUlMQUJMRSlcbi1cdCAgICB8fCBhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZXdlaWdodCkgXHUwMDNjPSAwXG4tXHQgICAgfHwgaXNfb3ZlcmxvYWRlZChkZXN0KSkge1xuJiM0MztcdGlmICghZGVzdCB8fCBhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZXdlaWdodCkgXHUwMDNjPSAwIHx8XG4mIzQzO1x0ICAgIGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSkge1xuIFx0XHRpcF92c19zY2hlZHVsZXJfZXJyKHN2YywgXCYjMzQ7bm8gZGVzdGluYXRpb24gYXZhaWxhYmxlXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2ZvLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZm8uY1xuaW5kZXggZDY1N2I0N2M2NTExZi4uZTA3ZmEzM2Y2ZDUyNyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZm8uY1xuQEAgLTI5LDcgJiM0MzsyOSw3IEBAIGlwX3ZzX2ZvX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHQgKiBGaW5kIHZpcnR1YWwgc2VydmVyIHdpdGggaGlnaGVzdCB3ZWlnaHQgYW5kIHNlbmQgaXQgdHJhZmZpY1xuIFx0ICovXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkZXN0LCBcdTAwMjZzdmMtXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcbi1cdFx0aWYgKCEoZGVzdC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdGlmICghaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgYXRvbWljX3JlYWQoXHUwMDI2ZGVzdC1cdTAwM2V3ZWlnaHQpIFx1MDAzZSBodykge1xuIFx0XHRcdGh3ZWlnaHQgPSBkZXN0O1xuIFx0XHRcdGh3ID0gYXRvbWljX3JlYWQoXHUwMDI2ZGVzdC1cdTAwM2V3ZWlnaHQpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsYy5jXG5pbmRleCA2OTNiY2M4MmNjYjc3Li5iZmYxMDljMWM5NTliIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGMuY1xuQEAgLTQxNCw3ICYjNDM7NDE0LDcgQEAgX19pcF92c19sYmxjX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMpXG4gXHQgKiBuZXcgY29ubmVjdGlvbi5cbiBcdCAqL1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZGVzdCwgXHUwMDI2c3ZjLVx1MDAzZWRlc3RpbmF0aW9ucywgbl9saXN0KSB7XG4tXHRcdGlmIChkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpXG4mIzQzO1x0XHRpZiAoaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2ZGVzdC1cdTAwM2V3ZWlnaHQpIFx1MDAzZSAwKSB7XG4gXHRcdFx0bGVhc3QgPSBkZXN0O1xuQEAgLTQyOSw3ICYjNDM7NDI5LDcgQEAgX19pcF92c19sYmxjX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMpXG4gXHQgKi9cbiAgIG5leHRzdGFnZTpcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmN1KGRlc3QsIFx1MDAyNnN2Yy1cdTAwM2VkZXN0aW5hdGlvbnMsIG5fbGlzdCkge1xuLVx0XHRpZiAoZGVzdC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKVxuJiM0MztcdFx0aWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0ZG9oID0gaXBfdnNfZGVzdF9jb25uX292ZXJoZWFkKGRlc3QpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjci5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGNyLmNcbmluZGV4IGY1M2YwNWNlZWEzNmYuLmMyODUzZTA3ZTc4NzIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsY3IuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGNyLmNcbkBAIC0xNjYsNyAmIzQzOzE2Niw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGlwX3ZzX2Rlc3QgKmlwX3ZzX2Rlc3Rfc2V0X21pbihzdHJ1Y3QgaXBfdnNfZGVzdF9zZXQgKnNldClcbiBcdC8qIHNlbGVjdCB0aGUgZmlyc3QgZGVzdGluYXRpb24gc2VydmVyLCB3aG9zZSB3ZWlnaHQgXHUwMDNlIDAgKi9cbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGUsIFx1MDAyNnNldC1cdTAwM2VsaXN0LCBsaXN0KSB7XG4gXHRcdGxlYXN0ID0gZS1cdTAwM2VkZXN0O1xuLVx0XHRpZiAobGVhc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRClcbiYjNDM7XHRcdGlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQobGVhc3QpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAoKGF0b21pY19yZWFkKFx1MDAyNmxlYXN0LVx1MDAzZXdlaWdodCkgXHUwMDNlIDApIFx1MDAyNlx1MDAyNlxuQEAgLTE4MSw3ICYjNDM7MTgxLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaXBfdnNfZGVzdCAqaXBfdnNfZGVzdF9zZXRfbWluKHN0cnVjdCBpcF92c19kZXN0X3NldCAqc2V0KVxuICAgbmV4dHN0YWdlOlxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yY3UoZSwgXHUwMDI2c2V0LVx1MDAzZWxpc3QsIGxpc3QpIHtcbiBcdFx0ZGVzdCA9IGUtXHUwMDNlZGVzdDtcbi1cdFx0aWYgKGRlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRClcbiYjNDM7XHRcdGlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGRvaCA9IGlwX3ZzX2Rlc3RfY29ubl9vdmVyaGVhZChkZXN0KTtcbkBAIC01NzcsNyAmIzQzOzU3Nyw3IEBAIF9faXBfdnNfbGJsY3Jfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YylcbiBcdCAqIG5ldyBjb25uZWN0aW9uLlxuIFx0ICovXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkZXN0LCBcdTAwMjZzdmMtXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcbi1cdFx0aWYgKGRlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRClcbiYjNDM7XHRcdGlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZXdlaWdodCkgXHUwMDNlIDApIHtcbkBAIC01OTMsNyAmIzQzOzU5Myw3IEBAIF9faXBfdnNfbGJsY3Jfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YylcbiBcdCAqL1xuICAgbmV4dHN0YWdlOlxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yY3UoZGVzdCwgXHUwMDI2c3ZjLVx1MDAzZWRlc3RpbmF0aW9ucywgbl9saXN0KSB7XG4tXHRcdGlmIChkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpXG4mIzQzO1x0XHRpZiAoaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRkb2ggPSBpcF92c19kZXN0X2Nvbm5fb3ZlcmhlYWQoZGVzdCk7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xjLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGMuY1xuaW5kZXggMThiOTc2YTdjNGQyMC4uOTAwMmY0OTFiZmY2OCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGMuY1xuQEAgLTM4LDcgJiM0MzszOCw3IEBAIGlwX3ZzX2xjX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHQgKi9cbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsIFx1MDAyNnN2Yy1cdTAwM2VkZXN0aW5hdGlvbnMsIG5fbGlzdCkge1xuLVx0XHRpZiAoKGRlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRCkgfHxcbiYjNDM7XHRcdGlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkgfHxcbiBcdFx0ICAgIGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNld2VpZ2h0KSA9PSAwKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRkb2ggPSBpcF92c19kZXN0X2Nvbm5fb3ZlcmhlYWQoZGVzdCk7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX21oLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbWguY1xuaW5kZXggMDIwODYzMDQ3NTYyZC4uZDcwYjIzYWVjNWZlYyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19taC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbWguY1xuQEAgLTgwLDcgJiM0Mzs4MCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZW5lcmF0ZV9oYXNoX3NlY3JldChoc2lwaGFzaF9rZXlfdCAqaGFzaDEsXG4gc3RhdGljIGlubGluZSBib29sIGlzX3VuYXZhaWxhYmxlKHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KVxuIHtcbiBcdHJldHVybiBhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZXdlaWdodCkgXHUwMDNjPSAwIHx8XG4tXHQgICAgICAgZGVzdC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEO1xuJiM0MztcdCAgICAgICBpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCk7XG4gfVxuIFxuIC8qIFJldHVybnMgaGFzaCB2YWx1ZSBmb3IgSVBWUyBNSCBlbnRyeSAqL1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19ucS5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX25xLmNcbmluZGV4IGFkYTE1OGM2MTBjZTEuLjdjYzI4OTAyMDg2ZTcgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbnEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX25xLmNcbkBAIC03Miw3ICYjNDM7NzIsNyBAQCBpcF92c19ucV9zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZGVzdCwgXHUwMDI2c3ZjLVx1MDAzZWRlc3RpbmF0aW9ucywgbl9saXN0KSB7XG4gXG4tXHRcdGlmIChkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQgfHxcbiYjNDM7XHRcdGlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkgfHxcbiBcdFx0ICAgICFhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZXdlaWdodCkpXG4gXHRcdFx0Y29udGludWU7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX292Zi5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX292Zi5jXG5pbmRleCBjNWM2N2RmODBhMGIzLi5lYWEzYTdhZTZlZmE2IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX292Zi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfb3ZmLmNcbkBAIC0zMyw3ICYjNDM7MzMsNyBAQCBpcF92c19vdmZfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdCovXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkZXN0LCBcdTAwMjZzdmMtXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcbiBcdFx0dyA9IGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNld2VpZ2h0KTtcbi1cdFx0aWYgKChkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpIHx8XG4mIzQzO1x0XHRpZiAoaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpIHx8XG4gXHRcdCAgICBhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZWFjdGl2ZWNvbm5zKSBcdTAwM2UgdyB8fFxuIFx0XHQgICAgdyA9PSAwKVxuIFx0XHRcdGNvbnRpbnVlO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19yci5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3JyLmNcbmluZGV4IDQxMjVlZTU2MWNkYzMuLmJkMTdjZGQwOTJmNWYgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcnIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3JyLmNcbkBAIC02Niw3ICYjNDM7NjYsNyBAQCBpcF92c19ycl9zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShkZXN0LFxuIFx0XHRcdFx0XHRcdCBcdTAwMjZzdmMtXHUwMDNlZGVzdGluYXRpb25zLFxuIFx0XHRcdFx0XHRcdCBuX2xpc3QpIHtcbi1cdFx0XHRpZiAoIShkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHRpZiAoIWlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICAgYXRvbWljX3JlYWQoXHUwMDI2ZGVzdC1cdTAwM2V3ZWlnaHQpIFx1MDAzZSAwKVxuIFx0XHRcdFx0LyogSElUICovXG4gXHRcdFx0XHRnb3RvIG91dDtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2VkLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2VkLmNcbmluZGV4IDI0NWEzMjNjODRjZDMuLjc5MjVmNGQyOGZjZTkgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2VkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zZWQuY1xuQEAgLTc1LDcgJiM0Mzs3NSw3IEBAIGlwX3ZzX3NlZF9zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0ICovXG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkZXN0LCBcdTAwMjZzdmMtXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcbi1cdFx0aWYgKCEoZGVzdC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdGlmICghaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgYXRvbWljX3JlYWQoXHUwMDI2ZGVzdC1cdTAwM2V3ZWlnaHQpIFx1MDAzZSAwKSB7XG4gXHRcdFx0bGVhc3QgPSBkZXN0O1xuIFx0XHRcdGxvaCA9IGlwX3ZzX3NlZF9kZXN0X292ZXJoZWFkKGxlYXN0KTtcbkBAIC05MCw3ICYjNDM7OTAsNyBAQCBpcF92c19zZWRfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdCAqL1xuICAgbmV4dHN0YWdlOlxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yY3UoZGVzdCwgXHUwMDI2c3ZjLVx1MDAzZWRlc3RpbmF0aW9ucywgbl9saXN0KSB7XG4tXHRcdGlmIChkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpXG4mIzQzO1x0XHRpZiAoaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRkb2ggPSBpcF92c19zZWRfZGVzdF9vdmVyaGVhZChkZXN0KTtcbiBcdFx0aWYgKChfX3M2NClsb2ggKiBhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZXdlaWdodCkgXHUwMDNlXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NoLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2guY1xuaW5kZXggY2Q2NzA2NmUzYjI2MS4uYzI0ZGQ1Y2I3ZTQ3OCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zaC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2guY1xuQEAgLTczLDcgJiM0Mzs3Myw3IEBAIHN0cnVjdCBpcF92c19zaF9zdGF0ZSB7XG4gc3RhdGljIGlubGluZSBib29sIGlzX3VuYXZhaWxhYmxlKHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KVxuIHtcbiBcdHJldHVybiBhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZXdlaWdodCkgXHUwMDNjPSAwIHx8XG4tXHQgICAgICAgZGVzdC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEO1xuJiM0MztcdCAgICAgICBpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCk7XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3R3b3MuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c190d29zLmNcbmluZGV4IGRiYjdmNWZkNDY4OGEuLjg2MTg2MTIyYTFmMDEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfdHdvcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfdHdvcy5jXG5AQCAtNTIsNyAmIzQzOzUyLDcgQEAgc3RhdGljIHN0cnVjdCBpcF92c19kZXN0ICppcF92c190d29zX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsXG4gXG4gXHQvKiBHZW5lcmF0ZSBhIHJhbmRvbSB3ZWlnaHQgYmV0d2VlbiBbMCxzdW0gb2YgYWxsIHdlaWdodHMpICovXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkZXN0LCBcdTAwMjZzdmMtXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcbi1cdFx0aWYgKCEoZGVzdC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKSkge1xuJiM0MztcdFx0aWYgKCFpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkpIHtcbiBcdFx0XHR3ZWlnaHQgPSBhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZXdlaWdodCk7XG4gXHRcdFx0aWYgKHdlaWdodCBcdTAwM2UgMCkge1xuIFx0XHRcdFx0dG90YWxfd2VpZ2h0ICYjNDM7PSB3ZWlnaHQ7XG5AQCAtNzUsNyAmIzQzOzc1LDcgQEAgc3RhdGljIHN0cnVjdCBpcF92c19kZXN0ICppcF92c190d29zX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsXG4gXG4gXHQvKiBQaWNrIHR3byB3ZWlnaHRlZCBzZXJ2ZXJzICovXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkZXN0LCBcdTAwMjZzdmMtXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcbi1cdFx0aWYgKGRlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRClcbiYjNDM7XHRcdGlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdHdlaWdodCA9IGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNld2VpZ2h0KTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd2xjLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd2xjLmNcbmluZGV4IDlkYTQ0NWNhMDlhMTQuLjA4ZTllMjJmNzJiZjggMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd2xjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c193bGMuY1xuQEAgLTQ3LDcgJiM0Mzs0Nyw3IEBAIGlwX3ZzX3dsY19zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0ICovXG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkZXN0LCBcdTAwMjZzdmMtXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcbi1cdFx0aWYgKCEoZGVzdC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdGlmICghaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgYXRvbWljX3JlYWQoXHUwMDI2ZGVzdC1cdTAwM2V3ZWlnaHQpIFx1MDAzZSAwKSB7XG4gXHRcdFx0bGVhc3QgPSBkZXN0O1xuIFx0XHRcdGxvaCA9IGlwX3ZzX2Rlc3RfY29ubl9vdmVyaGVhZChsZWFzdCk7XG5AQCAtNjIsNyAmIzQzOzYyLDcgQEAgaXBfdnNfd2xjX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHQgKi9cbiAgIG5leHRzdGFnZTpcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmN1KGRlc3QsIFx1MDAyNnN2Yy1cdTAwM2VkZXN0aW5hdGlvbnMsIG5fbGlzdCkge1xuLVx0XHRpZiAoZGVzdC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKVxuJiM0MztcdFx0aWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSlcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0ZG9oID0gaXBfdnNfZGVzdF9jb25uX292ZXJoZWFkKGRlc3QpO1xuIFx0XHRpZiAoKF9fczY0KWxvaCAqIGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNld2VpZ2h0KSBcdTAwM2VcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd3JyLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd3JyLmNcbmluZGV4IDJkY2ZmMTA0MGRhNTIuLmZhZDY5YmFlNWEyMmIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd3JyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c193cnIuY1xuQEAgLTE3Niw3ICYjNDM7MTc2LDcgQEAgaXBfdnNfd3JyX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmN1KGRlc3QsXG4gXHRcdFx0XHRcdFx0IFx1MDAyNnN2Yy1cdTAwM2VkZXN0aW5hdGlvbnMsXG4gXHRcdFx0XHRcdFx0IG5fbGlzdCkge1xuLVx0XHRcdGlmICghKGRlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdGlmICghaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICBhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZXdlaWdodCkgXHUwMDNlPSBtYXJrLVx1MDAzZWN3KVxuIFx0XHRcdFx0Z290byBmb3VuZDtcbiBcdFx0XHRpZiAoZGVzdCA9PSBzdG9wKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjEwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQmIzM0OywKICAgICYjMzQ7aXBfdnNfYmluZF9kZXN0JiMzNDssCiAgICAmIzM0O2lwX3ZzX3VuYmluZF9kZXN0JiMzNDssCiAgICAmIzM0O19faXBfdnNfdXBkYXRlX2Rlc3QmIzM0OywKICAgICYjMzQ7aXBfdnNfZWRpdF9kZXN0JiMzNDssCiAgICAmIzM0O2lwX3ZzX2FkZF9kZXN0JiMzNDssCiAgICAmIzM0O2lwX3ZzX3JyX3NjaGVkdWxlJiMzNDssCiAgICAmIzM0O2lwX3ZzX3dycl9zY2hlZHVsZSYjMzQ7LAogICAgJiMzNDtpcF92c193bGNfc2NoZWR1bGUmIzM0OywKICAgICYjMzQ7aXBfdnNfbGNfc2NoZWR1bGUmIzM0OywKICAgICYjMzQ7aXBfdnNfZm9fc2NoZWR1bGUmIzM0OywKICAgICYjMzQ7aXBfdnNfb3ZmX3NjaGVkdWxlJiMzNDssCiAgICAmIzM0O2lwX3ZzX3R3b3Nfc2NoZWR1bGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGRlc3RpbmF0aW9uIG92ZXJsb2FkIHRyYWNraW5nIGxvZ2ljIGFuZCBkZXN0aW5hdGlvbiBzdHJ1Y3R1cmUgbGF5b3V0IGluIHRoZSBJUFZTIChJUCBWaXJ0dWFsIFNlcnZlcikgc3Vic3lzdGVtLiBJdCB1cGRhdGVzIGNvbm5lY3Rpb24gYmluZGluZyBhbmQgdW5iaW5kaW5nIHRocmVzaG9sZHMsIGNvbnRyb2wgcGxhbmUgZGVzdGluYXRpb24gdXBkYXRlcywgYW5kIHNjaGVkdWxlciBvdmVybG9hZCBldmFsdWF0aW9uIGFjcm9zcyBJUFZTIGFsZ29yaXRobXMuIFRoZXNlIGFyZSByZWFjaGFibGUsIGV4ZWN1dGFibGUgbmV0d29yayBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgZm9yIHJhY2UgY29uZGl0aW9ucywgYXJpdGhtZXRpYyBvciBzdGF0ZSBoYW5kbGluZyBidWdzLCBhbmQgdGhyZXNob2xkIGVkZ2UgY2FzZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhMDI5YzE4NTM5ZTJiZDQzOTNiYjg3MzZkZjAwMDNlNDIyY2I3YzliCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAyMjoxMDoxNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX3ZzLmggYi9pbmNsdWRlL25ldC9pcF92cy5oCmluZGV4IDMyZmRlNzMxYmNlYjcuLjlhODNiZmYzMjU2OWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwX3ZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvaXBfdnMuaApAQCAtMzYsOSAmIzQzOzM2LDYgQEAKICNkZWZpbmUgSVBfVlNfSERSX0lOVkVSU0UJMQogI2RlZmluZSBJUF9WU19IRFJfSUNNUAkJMgogCi0vKiBEZXN0aW5hdGlvbiBTZXJ2ZXIgRmxhZ3MgKi8KLSNkZWZpbmUgSVBfVlNfREVTVF9GX09WRVJMT0FECTB4MDAwMgkJLyogc2VydmVyIGlzIG92ZXJsb2FkZWQgKi8KLQogLyogRGVzdGluYXRpb24gU2VydmVyIENvbmZpZyBGbGFncyAqLwogI2RlZmluZSBJUF9WU19ERVNUX0NGX0FWQUlMQUJMRQkweDAwMDEJCS8qIHNlcnZlciBpcyBhdmFpbGFibGUgKi8KIApAQCAtOTczLDMyICYjNDM7OTcwLDQzIEBAIHN0cnVjdCBpcF92c19kZXN0X2RzdCB7CiAgKiBhbmQgc28gb24uCiAgKi8KIHN0cnVjdCBpcF92c19kZXN0IHsKJiM0MzsJLyogQ2FjaGVsaW5lIGZvciBoYXNoIHRhYmxlIG5vZGVzIC0gcmVhZC1tb3N0bHkgKi8KJiM0MzsKIAlzdHJ1Y3QgbGlzdF9oZWFkCW5fbGlzdDsgICAvKiBmb3IgdGhlIGRlc3RzIGluIHRoZSBzZXJ2aWNlICovCiAJc3RydWN0IGhsaXN0X25vZGUJZF9saXN0OyAgIC8qIGZvciB0YWJsZSB3aXRoIGFsbCB0aGUgZGVzdHMgKi8KIAotCXUxNgkJCWFmOwkJLyogYWRkcmVzcyBmYW1pbHkgKi8KLQlfX2JlMTYJCQlwb3J0OwkJLyogcG9ydCBudW1iZXIgb2YgdGhlIHNlcnZlciAqLwotCXVuaW9uIG5mX2luZXRfYWRkcglhZGRyOwkJLyogSVAgYWRkcmVzcyBvZiB0aGUgc2VydmVyICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgaW50CWZsYWdzOwkJLyogZGVzdCBzdGF0dXMgZmxhZ3MgKi8KLQlhdG9taWNfdAkJY29ubl9mbGFnczsJLyogZmxhZ3MgdG8gY29weSB0byBjb25uICovCiAJYXRvbWljX3QJCXdlaWdodDsJCS8qIHNlcnZlciB3ZWlnaHQgKi8KLQl1bnNpZ25lZCBsb25nCQljZmxhZ3M7CQkvKiBjb25maWcgZmxhZ3MgKi8KIAlhdG9taWNfdAkJbGFzdF93ZWlnaHQ7CS8qIHNlcnZlciBsYXRlc3Qgd2VpZ2h0ICovCiYjNDM7CiYjNDM7CS8qIGNvbm5lY3Rpb24gdGhyZXNob2xkcyAqLwomIzQzOwl1MzIJCQlsX3RocmVzaG9sZF92YWw7LyogdXNlZCBsb3dlciB0aHJlc2hvbGQgKi8KJiM0MzsJdTMyCQkJdV90aHJlc2hvbGRfdmFsOy8qIHVzZWQgdXBwZXIgdGhyZXNob2xkICovCiYjNDM7CS8qIDMyLzQ4ICovCiYjNDM7CXUzMgkJCWxfdGhyZXNob2xkOwkvKiBsb3dlciB0aHJlc2hvbGQgKi8KJiM0MzsJdTMyCQkJdV90aHJlc2hvbGQ7CS8qIHVwcGVyIHRocmVzaG9sZCAqLwomIzQzOwomIzQzOwl1bnNpZ25lZCBsb25nCQljZmxhZ3M7CQkvKiBjb25maWcgZmxhZ3MgKi8KJiM0MzsKJiM0MzsJLyogNDQvNjQgKi8KJiM0MzsJYXRvbWljX3QJCWNvbm5fZmxhZ3M7CS8qIGZsYWdzIHRvIGNvcHkgdG8gY29ubiAqLwomIzQzOwogCV9fdTE2CQkJdHVuX3R5cGU7CS8qIHR1bm5lbCB0eXBlICovCiAJX19iZTE2CQkJdHVuX3BvcnQ7CS8qIHR1bm5lbCBwb3J0ICovCiAJX191MTYJCQl0dW5fZmxhZ3M7CS8qIHR1bm5lbCBmbGFncyAqLwogCi0JcmVmY291bnRfdAkJcmVmY250OwkJLyogcmVmZXJlbmNlIGNvdW50ZXIgKi8KLQlzdHJ1Y3QgaXBfdnNfc3RhdHMgICAgICBzdGF0czsgICAgICAgICAgLyogc3RhdGlzdGljcyAqLwotCXVuc2lnbmVkIGxvbmcJCWlkbGVfc3RhcnQ7CS8qIHN0YXJ0IHRpbWUsIGppZmZpZXMgKi8KJiM0MzsJdTE2CQkJYWY7CQkvKiBhZGRyZXNzIGZhbWlseSAqLwomIzQzOwlfX2JlMTYJCQlwb3J0OwkJLyogcG9ydCBudW1iZXIgb2YgdGhlIHNlcnZlciAqLwomIzQzOwkvKiA2MC84MCAqLwomIzQzOwl1bmlvbiBuZl9pbmV0X2FkZHIJYWRkcjsJCS8qIElQIGFkZHJlc3Mgb2YgdGhlIHNlcnZlciAqLwogCi0JLyogY29ubmVjdGlvbiBjb3VudGVycyBhbmQgdGhyZXNob2xkcyAqLwotCWF0b21pY190CQlhY3RpdmVjb25uczsJLyogYWN0aXZlIGNvbm5lY3Rpb25zICovCiYjNDM7CS8qIGNvbm5lY3Rpb24gY291bnRlcnMgKi8KIAlhdG9taWNfdAkJdG90YWxjb25uczsJLyogdG90YWwgY29ubmVjdGlvbnMgKi8KJiM0MzsJYXRvbWljX3QJCWFjdGl2ZWNvbm5zOwkvKiBhY3RpdmUgY29ubmVjdGlvbnMgKi8KIAlhdG9taWNfdAkJcGVyc2lzdGNvbm5zOwkvKiBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zICovCi0JX191MzIJCQl1X3RocmVzaG9sZDsJLyogdXBwZXIgdGhyZXNob2xkICovCi0JX191MzIJCQlsX3RocmVzaG9sZDsJLyogbG93ZXIgdGhyZXNob2xkICovCi0JX191MzIJCQlsX3RocmVzaG9sZF92YWw7LyogdXNlZCBsb3dlciB0aHJlc2hvbGQgKi8KJiM0MzsKJiM0MzsJcmVmY291bnRfdAkJcmVmY250OwkJLyogcmVmZXJlbmNlIGNvdW50ZXIgKi8KJiM0MzsJc3RydWN0IGlwX3ZzX3N0YXRzICAgICAgc3RhdHM7ICAgICAgICAgIC8qIHN0YXRpc3RpY3MgKi8KJiM0MzsJdW5zaWduZWQgbG9uZwkJaWRsZV9zdGFydDsJLyogc3RhcnQgdGltZSwgamlmZmllcyAqLwogCiAJLyogZm9yIGRlc3RpbmF0aW9uIGNhY2hlICovCiAJc3BpbmxvY2tfdAkJZHN0X2xvY2s7CS8qIGxvY2sgb2YgZHN0X2NhY2hlICovCkBAIC0xOTE1LDcgJiM0MzsxOTIzLDEzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c19kZXN0X3B1dF9hbmRfZnJlZShzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCkKIAkJa2ZyZWUoZGVzdCk7CiB9CiAKLXZvaWQgaXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QsIGludCBtb2RlKTsKJiM0Mzt2b2lkIGlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKHN0cnVjdCBpcF92c19kZXN0ICpkZXN0LCBib29sIG92ZXJsb2FkKTsKJiM0MzsKJiM0MzsvKiBDaGVjayBpZiBkZXN0IGlzIGluIG92ZXJsb2FkZWQgc3RhdGUgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGNvbnN0IHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KQomIzQzO3sKJiM0MzsJcmV0dXJuIFJFQURfT05DRShkZXN0LSZndDtsX3RocmVzaG9sZF92YWwpOwomIzQzO30KIAogLyogSVBWUyBzeW5jIGRhZW1vbiBkYXRhIGFuZCBmdW5jdGlvbiBwcm90b3R5cGVzCiAgKiAoZnJvbSBpcF92c19zeW5jLmMpCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYwppbmRleCA2ZmEzZTFkYzUzNGMzLi41MzQ4YzJmNDliNjRlIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMKQEAgLTExNTAsOCAmIzQzOzExNTAsOCBAQCBpcF92c19iaW5kX2Rlc3Qoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCkKIAkJaWYgKCEoZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX0lOQUNUSVZFKSkKIAkJCWF0b21pY19pbmMoJmFtcDtkZXN0LSZndDthY3RpdmVjb25ucyk7CiAJCXRjID0gYXRvbWljX2luY19yZXR1cm4oJmFtcDtkZXN0LSZndDt0b3RhbGNvbm5zKTsKLQkJaWYgKHRjID09IFJFQURfT05DRShkZXN0LSZndDt1X3RocmVzaG9sZCkpCi0JCQlpcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChkZXN0LCAxKTsKJiM0MzsJCWlmICh0YyAmZ3Q7PSBSRUFEX09OQ0UoZGVzdC0mZ3Q7dV90aHJlc2hvbGRfdmFsKSkKJiM0MzsJCQlpcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChkZXN0LCB0cnVlKTsKIAl9IGVsc2UgewogCQkvKiBJdCBpcyBhIHBlcnNpc3RlbnQgY29ubmVjdGlvbi90ZW1wbGF0ZSwgc28gaW5jcmVhc2UKIAkJICAgdGhlIHBlcnNpc3RlbnQgY29ubmVjdGlvbiBjb3VudGVyICovCkBAIC0xMjQzLDggJiM0MzsxMjQzLDggQEAgc3RhdGljIGlubGluZSB2b2lkIGlwX3ZzX3VuYmluZF9kZXN0KHN0cnVjdCBpcF92c19jb25uICpjcCkKIAkJaWYgKCEoY3AtJmd0O2ZsYWdzICZhbXA7IElQX1ZTX0NPTk5fRl9JTkFDVElWRSkpCiAJCQlhdG9taWNfZGVjKCZhbXA7ZGVzdC0mZ3Q7YWN0aXZlY29ubnMpOwogCQl0YyA9IGF0b21pY19mZXRjaF9kZWMoJmFtcDtkZXN0LSZndDt0b3RhbGNvbm5zKTsKLQkJaWYgKHRjID09IFJFQURfT05DRShkZXN0LSZndDtsX3RocmVzaG9sZF92YWwpKQotCQkJaXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoZGVzdCwgLTEpOwomIzQzOwkJaWYgKHRjICZsdDs9IFJFQURfT05DRShkZXN0LSZndDtsX3RocmVzaG9sZF92YWwpKQomIzQzOwkJCWlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKGRlc3QsIGZhbHNlKTsKIAl9IGVsc2UgewogCQkvKiBJdCBpcyBhIHBlcnNpc3RlbnQgY29ubmVjdGlvbi90ZW1wbGF0ZSwgc28gZGVjcmVhc2UKIAkJICAgdGhlIHBlcnNpc3RlbnQgY29ubmVjdGlvbiBjb3VudGVyICovCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMKaW5kZXggNGMxYzczOTQ0NmI3Ni4uMzAwMzU0N2RjYWJlNSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYwpAQCAtMTMwOSwzMiAmIzQzOzEzMDksMzIgQEAgdm9pZCBpcF92c19zdGF0c19mcmVlKHN0cnVjdCBpcF92c19zdGF0cyAqc3RhdHMpCiAgKiAtIGNvbm5zIHJlYWNoIHVfdGhyZXNob2xkIGFuZCBleGNlZWQgaXQ6IHNldCB0aGUgZmxhZwogICogLSBjb25ucyBnbyBiZWxvdyBsX3RocmVzaG9sZCAob3IgNzUlIG9mIHVfdGhyZXNob2xkKTogY2xlYXIgdGhlIGZsYWcKICAqLwotc3RhdGljIHZvaWQgX19pcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCwgaW50IG1vZGUpCiYjNDM7c3RhdGljIHZvaWQgX19pcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCwgYm9vbCBvdmVybG9hZCkKIHsKIAlpbnQgY29ubnM7CiAJdTMyIGwsIHU7CiAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7ZGVzdC0mZ3Q7ZHN0X2xvY2spOwogCXUgPSBSRUFEX09OQ0UoZGVzdC0mZ3Q7dV90aHJlc2hvbGQpOwotCWlmICghdSkKLQkJZ290byB1bnNldDsKLQlsID0gUkVBRF9PTkNFKGRlc3QtJmd0O2xfdGhyZXNob2xkX3ZhbCk7Ci0JY29ubnMgPSBhdG9taWNfcmVhZCgmYW1wO2Rlc3QtJmd0O3RvdGFsY29ubnMpOwotCWlmIChjb25ucyAmZ3Q7PSAobW9kZSAmZ3Q7IDAgPyBsIDogdSkpIHsKLQkJZGVzdC0mZ3Q7ZmxhZ3MgfD0gSVBfVlNfREVTVF9GX09WRVJMT0FEOwotCQlyZXR1cm47CiYjNDM7CWlmICh1KSB7CiYjNDM7CQkvKiBMb3cgdGhyZXNob2xkIGRlZmF1bHRzIHRvIDc1JSBvZiB1cHBlciB0aHJlc2hvbGQgKi8KJiM0MzsJCWwgPSBSRUFEX09OQ0UoZGVzdC0mZ3Q7bF90aHJlc2hvbGQpID8gOiAodSAtICh1ICZndDsmZ3Q7IDIpKTsKJiM0MzsJCWNvbm5zID0gYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt0b3RhbGNvbm5zKTsKJiM0MzsJCWlmIChjb25ucyAmZ3Q7PSAob3ZlcmxvYWQgPyBsIDogdSkpIHsKJiM0MzsJCQlXUklURV9PTkNFKGRlc3QtJmd0O3VfdGhyZXNob2xkX3ZhbCwgSU5UX01BWCk7CiYjNDM7CQkJV1JJVEVfT05DRShkZXN0LSZndDtsX3RocmVzaG9sZF92YWwsIGwpOwomIzQzOwkJCXJldHVybjsKJiM0MzsJCX0KIAl9Ci0JaWYgKGNvbm5zICZndDs9IChtb2RlICZsdDsgMCA/IHUgOiBsKSkKLQkJcmV0dXJuOwogCi11bnNldDoKLQlkZXN0LSZndDtmbGFncyAmYW1wOz0gfklQX1ZTX0RFU1RfRl9PVkVSTE9BRDsKJiM0MzsJV1JJVEVfT05DRShkZXN0LSZndDt1X3RocmVzaG9sZF92YWwsIHUgPyA6IElOVF9NQVgpOwomIzQzOwlXUklURV9PTkNFKGRlc3QtJmd0O2xfdGhyZXNob2xkX3ZhbCwgMCk7CiB9CiAKLXZvaWQgaXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QsIGludCBtb2RlKQomIzQzO3ZvaWQgaXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QsIGJvb2wgb3ZlcmxvYWQpCiB7CiAJc3Bpbl9sb2NrX2JoKCZhbXA7ZGVzdC0mZ3Q7ZHN0X2xvY2spOwotCV9faXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoZGVzdCwgbW9kZSk7CiYjNDM7CV9faXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoZGVzdCwgb3ZlcmxvYWQpOwogCXNwaW5fdW5sb2NrX2JoKCZhbXA7ZGVzdC0mZ3Q7ZHN0X2xvY2spOwogfQogCkBAIC0xNDA2LDE1ICYjNDM7MTQwNiwxMyBAQCBfX2lwX3ZzX3VwZGF0ZV9kZXN0KHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIHN0cnVjdCBpcF92c19kZXN0ICpkZXN0LAogCiAJaWYgKFJFQURfT05DRShkZXN0LSZndDt1X3RocmVzaG9sZCkgIT0gdWRlc3QtJmd0O3VfdGhyZXNob2xkIHx8CiAJICAgIFJFQURfT05DRShkZXN0LSZndDtsX3RocmVzaG9sZCkgIT0gdWRlc3QtJmd0O2xfdGhyZXNob2xkKSB7CiYjNDM7CQlib29sIG92ZXJsb2FkOwomIzQzOwogCQlzcGluX2xvY2tfYmgoJmFtcDtkZXN0LSZndDtkc3RfbG9jayk7CiAJCVdSSVRFX09OQ0UoZGVzdC0mZ3Q7dV90aHJlc2hvbGQsIHVkZXN0LSZndDt1X3RocmVzaG9sZCk7CiAJCVdSSVRFX09OQ0UoZGVzdC0mZ3Q7bF90aHJlc2hvbGQsIHVkZXN0LSZndDtsX3RocmVzaG9sZCk7Ci0JCS8qIExvdyB0aHJlc2hvbGQgZGVmYXVsdHMgdG8gNzUlIG9mIHVwcGVyIHRocmVzaG9sZCAqLwotCQlXUklURV9PTkNFKGRlc3QtJmd0O2xfdGhyZXNob2xkX3ZhbCwKLQkJCSAgIHVkZXN0LSZndDtsX3RocmVzaG9sZCA/IDoKLQkJCSAgICh1ZGVzdC0mZ3Q7dV90aHJlc2hvbGQgLQotCQkJICAgICh1ZGVzdC0mZ3Q7dV90aHJlc2hvbGQgJmd0OyZndDsgMikpKTsKLQkJX19pcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChkZXN0LCAwKTsKJiM0MzsJCW92ZXJsb2FkID0gaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpOwomIzQzOwkJX19pcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChkZXN0LCBvdmVybG9hZCk7CiAJCXNwaW5fdW5sb2NrX2JoKCZhbXA7ZGVzdC0mZ3Q7ZHN0X2xvY2spOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2RoLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZGguYwppbmRleCA0M2FiZWQ3YTI2YTZhLi45NWU1Mjk1MGFkYmI3IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZGguYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZGguYwpAQCAtMTk1LDE2ICYjNDM7MTk1LDYgQEAgc3RhdGljIGludCBpcF92c19kaF9kZXN0X2NoYW5nZWQoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywKIH0KIAogCi0vKgotICogICAgICBJZiB0aGUgZGVzdCBmbGFncyBpcyBzZXQgd2l0aCBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQsCi0gKiAgICAgIGNvbnNpZGVyIHRoYXQgdGhlIHNlcnZlciBpcyBvdmVybG9hZGVkIGhlcmUuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGlzX292ZXJsb2FkZWQoc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QpCi17Ci0JcmV0dXJuIGRlc3QtJmd0O2ZsYWdzICZhbXA7IElQX1ZTX0RFU1RfRl9PVkVSTE9BRDsKLX0KLQotCiAvKgogICogICAgICBEZXN0aW5hdGlvbiBoYXNoaW5nIHNjaGVkdWxpbmcKICAqLwpAQCAtMjE5LDEwICYjNDM7MjA5LDggQEAgaXBfdnNfZGhfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAogCXMgPSAoc3RydWN0IGlwX3ZzX2RoX3N0YXRlICopIHN2Yy0mZ3Q7c2NoZWRfZGF0YTsKIAlkZXN0ID0gaXBfdnNfZGhfZ2V0KHN2Yy0mZ3Q7YWYsIHMsICZhbXA7aXBoLSZndDtkYWRkcik7Ci0JaWYgKCFkZXN0IHx8Ci0JICAgICEoZGVzdC0mZ3Q7Y2ZsYWdzICZhbXA7IElQX1ZTX0RFU1RfQ0ZfQVZBSUxBQkxFKQotCSAgICB8fCBhdG9taWNfcmVhZCgmYW1wO2Rlc3QtJmd0O3dlaWdodCkgJmx0Oz0gMAotCSAgICB8fCBpc19vdmVybG9hZGVkKGRlc3QpKSB7CiYjNDM7CWlmICghZGVzdCB8fCBhdG9taWNfcmVhZCgmYW1wO2Rlc3QtJmd0O3dlaWdodCkgJmx0Oz0gMCB8fAomIzQzOwkgICAgaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpKSB7CiAJCWlwX3ZzX3NjaGVkdWxlcl9lcnIoc3ZjLCAmIzM0O25vIGRlc3RpbmF0aW9uIGF2YWlsYWJsZSYjMzQ7KTsKIAkJcmV0dXJuIE5VTEw7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2ZvLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZm8uYwppbmRleCBkNjU3YjQ3YzY1MTFmLi5lMDdmYTMzZjZkNTI3IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZm8uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZm8uYwpAQCAtMjksNyAmIzQzOzI5LDcgQEAgaXBfdnNfZm9fc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkgKiBGaW5kIHZpcnR1YWwgc2VydmVyIHdpdGggaGlnaGVzdCB3ZWlnaHQgYW5kIHNlbmQgaXQgdHJhZmZpYwogCSAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsICZhbXA7c3ZjLSZndDtkZXN0aW5hdGlvbnMsIG5fbGlzdCkgewotCQlpZiAoIShkZXN0LSZndDtmbGFncyAmYW1wOyBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpICZhbXA7JmFtcDsKJiM0MzsJCWlmICghaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpICZhbXA7JmFtcDsKIAkJICAgIGF0b21pY19yZWFkKCZhbXA7ZGVzdC0mZ3Q7d2VpZ2h0KSAmZ3Q7IGh3KSB7CiAJCQlod2VpZ2h0ID0gZGVzdDsKIAkJCWh3ID0gYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt3ZWlnaHQpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGMuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjLmMKaW5kZXggNjkzYmNjODJjY2I3Ny4uYmZmMTA5YzFjOTU5YiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsYy5jCkBAIC00MTQsNyAmIzQzOzQxNCw3IEBAIF9faXBfdnNfbGJsY19zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjKQogCSAqIG5ldyBjb25uZWN0aW9uLgogCSAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsICZhbXA7c3ZjLSZndDtkZXN0aW5hdGlvbnMsIG5fbGlzdCkgewotCQlpZiAoZGVzdC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfREVTVF9GX09WRVJMT0FEKQomIzQzOwkJaWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt3ZWlnaHQpICZndDsgMCkgewogCQkJbGVhc3QgPSBkZXN0OwpAQCAtNDI5LDcgJiM0Mzs0MjksNyBAQCBfX2lwX3ZzX2xibGNfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YykKIAkgKi8KICAgbmV4dHN0YWdlOgogCWxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmN1KGRlc3QsICZhbXA7c3ZjLSZndDtkZXN0aW5hdGlvbnMsIG5fbGlzdCkgewotCQlpZiAoZGVzdC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfREVTVF9GX09WRVJMT0FEKQomIzQzOwkJaWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSkKIAkJCWNvbnRpbnVlOwogCiAJCWRvaCA9IGlwX3ZzX2Rlc3RfY29ubl9vdmVyaGVhZChkZXN0KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjci5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGNyLmMKaW5kZXggZjUzZjA1Y2VlYTM2Zi4uYzI4NTNlMDdlNzg3MiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGNyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGNyLmMKQEAgLTE2Niw3ICYjNDM7MTY2LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaXBfdnNfZGVzdCAqaXBfdnNfZGVzdF9zZXRfbWluKHN0cnVjdCBpcF92c19kZXN0X3NldCAqc2V0KQogCS8qIHNlbGVjdCB0aGUgZmlyc3QgZGVzdGluYXRpb24gc2VydmVyLCB3aG9zZSB3ZWlnaHQgJmd0OyAwICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZSwgJmFtcDtzZXQtJmd0O2xpc3QsIGxpc3QpIHsKIAkJbGVhc3QgPSBlLSZndDtkZXN0OwotCQlpZiAobGVhc3QtJmd0O2ZsYWdzICZhbXA7IElQX1ZTX0RFU1RfRl9PVkVSTE9BRCkKJiM0MzsJCWlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQobGVhc3QpKQogCQkJY29udGludWU7CiAKIAkJaWYgKChhdG9taWNfcmVhZCgmYW1wO2xlYXN0LSZndDt3ZWlnaHQpICZndDsgMCkgJmFtcDsmYW1wOwpAQCAtMTgxLDcgJiM0MzsxODEsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpcF92c19kZXN0ICppcF92c19kZXN0X3NldF9taW4oc3RydWN0IGlwX3ZzX2Rlc3Rfc2V0ICpzZXQpCiAgIG5leHRzdGFnZToKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShlLCAmYW1wO3NldC0mZ3Q7bGlzdCwgbGlzdCkgewogCQlkZXN0ID0gZS0mZ3Q7ZGVzdDsKLQkJaWYgKGRlc3QtJmd0O2ZsYWdzICZhbXA7IElQX1ZTX0RFU1RfRl9PVkVSTE9BRCkKJiM0MzsJCWlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkpCiAJCQljb250aW51ZTsKIAogCQlkb2ggPSBpcF92c19kZXN0X2Nvbm5fb3ZlcmhlYWQoZGVzdCk7CkBAIC01NzcsNyAmIzQzOzU3Nyw3IEBAIF9faXBfdnNfbGJsY3Jfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YykKIAkgKiBuZXcgY29ubmVjdGlvbi4KIAkgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkZXN0LCAmYW1wO3N2Yy0mZ3Q7ZGVzdGluYXRpb25zLCBuX2xpc3QpIHsKLQkJaWYgKGRlc3QtJmd0O2ZsYWdzICZhbXA7IElQX1ZTX0RFU1RfRl9PVkVSTE9BRCkKJiM0MzsJCWlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkpCiAJCQljb250aW51ZTsKIAogCQlpZiAoYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt3ZWlnaHQpICZndDsgMCkgewpAQCAtNTkzLDcgJiM0Mzs1OTMsNyBAQCBfX2lwX3ZzX2xibGNyX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMpCiAJICovCiAgIG5leHRzdGFnZToKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShkZXN0LCAmYW1wO3N2Yy0mZ3Q7ZGVzdGluYXRpb25zLCBuX2xpc3QpIHsKLQkJaWYgKGRlc3QtJmd0O2ZsYWdzICZhbXA7IElQX1ZTX0RFU1RfRl9PVkVSTE9BRCkKJiM0MzsJCWlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkpCiAJCQljb250aW51ZTsKIAogCQlkb2ggPSBpcF92c19kZXN0X2Nvbm5fb3ZlcmhlYWQoZGVzdCk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGMuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYy5jCmluZGV4IDE4Yjk3NmE3YzRkMjAuLjkwMDJmNDkxYmZmNjggMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYy5jCkBAIC0zOCw3ICYjNDM7MzgsNyBAQCBpcF92c19sY19zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCSAqLwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZGVzdCwgJmFtcDtzdmMtJmd0O2Rlc3RpbmF0aW9ucywgbl9saXN0KSB7Ci0JCWlmICgoZGVzdC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfREVTVF9GX09WRVJMT0FEKSB8fAomIzQzOwkJaWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSB8fAogCQkgICAgYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt3ZWlnaHQpID09IDApCiAJCQljb250aW51ZTsKIAkJZG9oID0gaXBfdnNfZGVzdF9jb25uX292ZXJoZWFkKGRlc3QpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX21oLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbWguYwppbmRleCAwMjA4NjMwNDc1NjJkLi5kNzBiMjNhZWM1ZmVjIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbWguYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbWguYwpAQCAtODAsNyAmIzQzOzgwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGdlbmVyYXRlX2hhc2hfc2VjcmV0KGhzaXBoYXNoX2tleV90ICpoYXNoMSwKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc191bmF2YWlsYWJsZShzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCkKIHsKIAlyZXR1cm4gYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt3ZWlnaHQpICZsdDs9IDAgfHwKLQkgICAgICAgZGVzdC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfREVTVF9GX09WRVJMT0FEOwomIzQzOwkgICAgICAgaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpOwogfQogCiAvKiBSZXR1cm5zIGhhc2ggdmFsdWUgZm9yIElQVlMgTUggZW50cnkgKi8KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19ucS5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX25xLmMKaW5kZXggYWRhMTU4YzYxMGNlMS4uN2NjMjg5MDIwODZlNyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX25xLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX25xLmMKQEAgLTcyLDcgJiM0Mzs3Miw3IEBAIGlwX3ZzX25xX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkZXN0LCAmYW1wO3N2Yy0mZ3Q7ZGVzdGluYXRpb25zLCBuX2xpc3QpIHsKIAotCQlpZiAoZGVzdC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfREVTVF9GX09WRVJMT0FEIHx8CiYjNDM7CQlpZiAoaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpIHx8CiAJCSAgICAhYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt3ZWlnaHQpKQogCQkJY29udGludWU7CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19vdmYuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19vdmYuYwppbmRleCBjNWM2N2RmODBhMGIzLi5lYWEzYTdhZTZlZmE2IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfb3ZmLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX292Zi5jCkBAIC0zMyw3ICYjNDM7MzMsNyBAQCBpcF92c19vdmZfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsICZhbXA7c3ZjLSZndDtkZXN0aW5hdGlvbnMsIG5fbGlzdCkgewogCQl3ID0gYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt3ZWlnaHQpOwotCQlpZiAoKGRlc3QtJmd0O2ZsYWdzICZhbXA7IElQX1ZTX0RFU1RfRl9PVkVSTE9BRCkgfHwKJiM0MzsJCWlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkgfHwKIAkJICAgIGF0b21pY19yZWFkKCZhbXA7ZGVzdC0mZ3Q7YWN0aXZlY29ubnMpICZndDsgdyB8fAogCQkgICAgdyA9PSAwKQogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcnIuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19yci5jCmluZGV4IDQxMjVlZTU2MWNkYzMuLmJkMTdjZGQwOTJmNWYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19yci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19yci5jCkBAIC02Niw3ICYjNDM7NjYsNyBAQCBpcF92c19ycl9zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShkZXN0LAogCQkJCQkJICZhbXA7c3ZjLSZndDtkZXN0aW5hdGlvbnMsCiAJCQkJCQkgbl9saXN0KSB7Ci0JCQlpZiAoIShkZXN0LSZndDtmbGFncyAmYW1wOyBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpICZhbXA7JmFtcDsKJiM0MzsJCQlpZiAoIWlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSAmYW1wOyZhbXA7CiAJCQkgICAgYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt3ZWlnaHQpICZndDsgMCkKIAkJCQkvKiBISVQgKi8KIAkJCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zZWQuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zZWQuYwppbmRleCAyNDVhMzIzYzg0Y2QzLi43OTI1ZjRkMjhmY2U5IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2VkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NlZC5jCkBAIC03NSw3ICYjNDM7NzUsNyBAQCBpcF92c19zZWRfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkgKi8KIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsICZhbXA7c3ZjLSZndDtkZXN0aW5hdGlvbnMsIG5fbGlzdCkgewotCQlpZiAoIShkZXN0LSZndDtmbGFncyAmYW1wOyBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpICZhbXA7JmFtcDsKJiM0MzsJCWlmICghaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpICZhbXA7JmFtcDsKIAkJICAgIGF0b21pY19yZWFkKCZhbXA7ZGVzdC0mZ3Q7d2VpZ2h0KSAmZ3Q7IDApIHsKIAkJCWxlYXN0ID0gZGVzdDsKIAkJCWxvaCA9IGlwX3ZzX3NlZF9kZXN0X292ZXJoZWFkKGxlYXN0KTsKQEAgLTkwLDcgJiM0Mzs5MCw3IEBAIGlwX3ZzX3NlZF9zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCSAqLwogICBuZXh0c3RhZ2U6CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yY3UoZGVzdCwgJmFtcDtzdmMtJmd0O2Rlc3RpbmF0aW9ucywgbl9saXN0KSB7Ci0JCWlmIChkZXN0LSZndDtmbGFncyAmYW1wOyBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpCiYjNDM7CQlpZiAoaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpKQogCQkJY29udGludWU7CiAJCWRvaCA9IGlwX3ZzX3NlZF9kZXN0X292ZXJoZWFkKGRlc3QpOwogCQlpZiAoKF9fczY0KWxvaCAqIGF0b21pY19yZWFkKCZhbXA7ZGVzdC0mZ3Q7d2VpZ2h0KSAmZ3Q7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2guYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zaC5jCmluZGV4IGNkNjcwNjZlM2IyNjEuLmMyNGRkNWNiN2U0NzggMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zaC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zaC5jCkBAIC03Myw3ICYjNDM7NzMsNyBAQCBzdHJ1Y3QgaXBfdnNfc2hfc3RhdGUgewogc3RhdGljIGlubGluZSBib29sIGlzX3VuYXZhaWxhYmxlKHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KQogewogCXJldHVybiBhdG9taWNfcmVhZCgmYW1wO2Rlc3QtJmd0O3dlaWdodCkgJmx0Oz0gMCB8fAotCSAgICAgICBkZXN0LSZndDtmbGFncyAmYW1wOyBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQ7CiYjNDM7CSAgICAgICBpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfdHdvcy5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3R3b3MuYwppbmRleCBkYmI3ZjVmZDQ2ODhhLi44NjE4NjEyMmExZjAxIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfdHdvcy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c190d29zLmMKQEAgLTUyLDcgJiM0Mzs1Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgaXBfdnNfZGVzdCAqaXBfdnNfdHdvc19zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLAogCiAJLyogR2VuZXJhdGUgYSByYW5kb20gd2VpZ2h0IGJldHdlZW4gWzAsc3VtIG9mIGFsbCB3ZWlnaHRzKSAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsICZhbXA7c3ZjLSZndDtkZXN0aW5hdGlvbnMsIG5fbGlzdCkgewotCQlpZiAoIShkZXN0LSZndDtmbGFncyAmYW1wOyBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpKSB7CiYjNDM7CQlpZiAoIWlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSkgewogCQkJd2VpZ2h0ID0gYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt3ZWlnaHQpOwogCQkJaWYgKHdlaWdodCAmZ3Q7IDApIHsKIAkJCQl0b3RhbF93ZWlnaHQgJiM0Mzs9IHdlaWdodDsKQEAgLTc1LDcgJiM0Mzs3NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgaXBfdnNfZGVzdCAqaXBfdnNfdHdvc19zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLAogCiAJLyogUGljayB0d28gd2VpZ2h0ZWQgc2VydmVycyAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsICZhbXA7c3ZjLSZndDtkZXN0aW5hdGlvbnMsIG5fbGlzdCkgewotCQlpZiAoZGVzdC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfREVTVF9GX09WRVJMT0FEKQomIzQzOwkJaWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSkKIAkJCWNvbnRpbnVlOwogCiAJCXdlaWdodCA9IGF0b21pY19yZWFkKCZhbXA7ZGVzdC0mZ3Q7d2VpZ2h0KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c193bGMuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c193bGMuYwppbmRleCA5ZGE0NDVjYTA5YTE0Li4wOGU5ZTIyZjcyYmY4IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd2xjLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3dsYy5jCkBAIC00Nyw3ICYjNDM7NDcsNyBAQCBpcF92c193bGNfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkgKi8KIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsICZhbXA7c3ZjLSZndDtkZXN0aW5hdGlvbnMsIG5fbGlzdCkgewotCQlpZiAoIShkZXN0LSZndDtmbGFncyAmYW1wOyBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpICZhbXA7JmFtcDsKJiM0MzsJCWlmICghaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpICZhbXA7JmFtcDsKIAkJICAgIGF0b21pY19yZWFkKCZhbXA7ZGVzdC0mZ3Q7d2VpZ2h0KSAmZ3Q7IDApIHsKIAkJCWxlYXN0ID0gZGVzdDsKIAkJCWxvaCA9IGlwX3ZzX2Rlc3RfY29ubl9vdmVyaGVhZChsZWFzdCk7CkBAIC02Miw3ICYjNDM7NjIsNyBAQCBpcF92c193bGNfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkgKi8KICAgbmV4dHN0YWdlOgogCWxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmN1KGRlc3QsICZhbXA7c3ZjLSZndDtkZXN0aW5hdGlvbnMsIG5fbGlzdCkgewotCQlpZiAoZGVzdC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfREVTVF9GX09WRVJMT0FEKQomIzQzOwkJaWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSkKIAkJCWNvbnRpbnVlOwogCQlkb2ggPSBpcF92c19kZXN0X2Nvbm5fb3ZlcmhlYWQoZGVzdCk7CiAJCWlmICgoX19zNjQpbG9oICogYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt3ZWlnaHQpICZndDsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c193cnIuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c193cnIuYwppbmRleCAyZGNmZjEwNDBkYTUyLi5mYWQ2OWJhZTVhMjJiIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd3JyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3dyci5jCkBAIC0xNzYsNyAmIzQzOzE3Niw3IEBAIGlwX3ZzX3dycl9zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShkZXN0LAogCQkJCQkJICZhbXA7c3ZjLSZndDtkZXN0aW5hdGlvbnMsCiAJCQkJCQkgbl9saXN0KSB7Ci0JCQlpZiAoIShkZXN0LSZndDtmbGFncyAmYW1wOyBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpICZhbXA7JmFtcDsKJiM0MzsJCQlpZiAoIWlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSAmYW1wOyZhbXA7CiAJCQkgICAgYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt3ZWlnaHQpICZndDs9IG1hcmstJmd0O2N3KQogCQkJCWdvdG8gZm91bmQ7CiAJCQlpZiAoZGVzdCA9PSBzdG9wKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE0MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDgzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQVlMgT3ZlcmxvYWQgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGZvciB0aGUgSVBWUyBzdWJzeXN0ZW0uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBtZXRob2RpY2FsbHkgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSB3YW50IHRvIGdldCBhIGdvb2QgaGFuZGxlIG9uIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy4KClRoZSBwYXRjaCB0YXJnZXRzIHNldmVyYWwgYXJlYXMuIFRoZSBtb3N0IHNpZ25pZmljYW50IGNoYW5nZXMgc2VlbSB0byBiZSBpbiBgaW5jbHVkZS9uZXQvaXBfdnMuaGAuIEl0JiMzOTtzIHJlbW92aW5nIGBJUF9WU19ERVNUX0ZfT1ZFUkxPQURgLCB3aGljaCBpcyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4gVGhpcyBzdWdnZXN0cyBhIHNoaWZ0IGluIGhvdyBvdmVybG9hZCBzdGF0dXMgaXMgbWFuYWdlZC4gVGhlIHJlb3JnYW5pemF0aW9uIG9mIGBzdHJ1Y3QgaXBfdnNfZGVzdGAgdG8gaW5jbHVkZSBgdV90aHJlc2hvbGRfdmFsYCBhbmQgZm9jdXMgb24gY2FjaGVsaW5lIGFsaWdubWVudCBpcyBhbm90aGVyIHBvaW50IHRvIGNvbnNpZGVyLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGhvdyB0aGF0IGltcGFjdHMgZXhpc3RpbmcgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBwb3RlbnRpYWwgbG9jayBjb250ZW50aW9uLiBBbHNvLCBhIG5ldyBpbmxpbmUgaGVscGVyIGZ1bmN0aW9uIGBpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoKWAgaXMgZGVmaW5lZC4KClRoZSBjaGFuZ2VzIGluIGBpcF92c19jb25uLmNgIGFyZSBjcnVjaWFsLiBUaGUgY29uZGl0aW9uYWxzIGluIGBpcF92c19iaW5kX2Rlc3RgIGFuZCBgaXBfdnNfdW5iaW5kX2Rlc3RgIHRoYXQgbm93IGNvbXBhcmUgdGhlIHRyYWZmaWMgY291bnQgdG8gYHVfdGhyZXNob2xkX3ZhbGAgYXJlIGEgY3JpdGljYWwgc2hpZnQuIEVzc2VudGlhbGx5IGl0IGNoYW5nZXMgdGhlIG92ZXJsb2FyZCBjYWxjdWxhdGlvbi4gVGhlIHVzZSBvZiBgUkVBRF9PTkNFYCBoZXJlIGlzIGdvb2QgdG8gc2VlIGFzIGl0IHN1Z2dlc3RzIG1lbW9yeSBiYXJyaWVycyBhcmUgYmVpbmcgY29uc2lkZXJlZC4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgdV90aHJlc2hvbGRfdmFsYCBpcyBwb3B1bGF0ZWQgYW5kIGhvdyB0aGUgYGlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkYCBmdW5jdGlvbiBpcyBiZWluZyB1c2VkIHRvIGFmZmVjdCB0aGlzIHRocmVzaG9sZC4KClRoZSB1cGRhdGVzIHRvIGBpcF92c19jdGwuY2Agd2l0aCB0aGUgYWx0ZXJlZCBpbXBsZW1lbnRhdGlvbnMgb2YgIGBfX2lwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkYCBhbmQgYGlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkYCByZXF1aXJlIGNsb3NlIGluc3BlY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gc2VlIHByZWNpc2VseSBob3cgdGhpcyBpbXBhY3RzIHRoZSBjb250cm9sIHBhdGggYW5kIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLgoKRmluYWxseSwgdGhlIGZhY3QgdGhhdCBhIHdob2xlIHNsZXcgb2Ygc2NoZWR1bGVyIG1vZHVsZXMg4oCTIGBkaGAsIGBmb2AsIGBsYmxjYCwgYGxibGNyYCwgYGxjYCwgYG1oYCwgYG5xYCwgYG92ZmAsIGBycmAsIGBzZWRgLCBgc2hgLCBgdHdvc2AsIGB3bGNgLCBhbmQgYHdycmAg4oCTIGFyZSBiZWluZyB0b3VjaGVkIGluZGljYXRlcyBhIHBlcnZhc2l2ZSBjaGFuZ2UgaW4gb3ZlcmxvYWQgaGFuZGxpbmcgYWNyb3NzIHZhcmlvdXMgc2NoZWR1bGluZyBhbGdvcml0aG1zLiBUaGlzIGlzIHNpZ25pZmljYW50LiBJdCYjMzk7cyBsaWtlbHkgdGhhdCB0aGUgb3ZlcmxvYWQgc3RhdGUgZGlyZWN0bHkgaW1wYWN0cyBzY2hlZHVsaW5nIGRlY2lzaW9ucywgYW5kIHRoZXJlZm9yZSB0aGUgZWZmZWN0IG9mIG92ZXJsb2FkIHN0YXR1cyBvbiBhbGwgdGhlIHNjaGVkdWxpbmcgYWxnb3JpdGhtcyBuZWVkcyB0byBiZSBjYXJlZnVsbHkgZXZhbHVhdGVkLAoKQmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gdGhlIGNvZGUsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBLY29uZmlnIGZvciBJUFZTIHRvIGVzdGFibGlzaCB0aGUgZXhhY3QgY29uZmlndXJhdGlvbiBzeW1ib2xzIGluIHBsYXksIGFzIHRoaXMgd2lsbCBoZWxwIG1lIGVzdGFibGlzaCB0aGUgY29udGV4dCBmb3IgdGhpcyBwYXRjaC4gSSBleHBlY3QgdGhpcyB3aWxsIGFsc28gZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZXNlIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX1ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy00LSNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjU6bWVudWNvbmZpZyBJUF9WU1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNi1cdHRyaXN0YXRlIFwmIzM0O0lQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0yODY9Y29tbWVudCAmIzM5O0lQVlMgU0ggc2NoZWR1bGVyJiMzOTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4Ny1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI4ODpjb25maWcgSVBfVlNfU0hfVEFCX0JJVFNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4OS1cdGludCBcJiMzNDtJUFZTIHNvdXJjZSBoYXNoaW5nIHRhYmxlIHNpemUgKHRoZSBOdGggcG93ZXIgb2YgMilcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMDE9Y29tbWVudCAmIzM5O0lQVlMgTUggc2NoZWR1bGVyJiMzOTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwMi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMwMzpjb25maWcgSVBfVlNfTUhfVEFCX0lOREVYXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDQtXHRpbnQgXCYjMzQ7SVBWUyBtYWdsZXYgaGFzaGluZyB0YWJsZSBpbmRleCBvZiBzaXplICh0aGUgcHJpbWUgbnVtYmVycylcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTgyNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBJUFZTIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCBhIHJlZnJlc2hlciBvbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gSVBWUyBhbmQgdGhlIGF2YWlsYWJsZSBzY2hlZHVsaW5nIGFsZ29yaXRobXMuIEkmIzM5O2xsIGhlYWQgc3RyYWlnaHQgZm9yIHRoZSBzb3VyY2Ug4oCTIGBuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgZGVjaXNpb25zIGFyZSBtYWRlLCByaWdodD8gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcmVsZXZhbnQgc3ltYm9scywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IG5ldyBhZGRpdGlvbnMgc2luY2UgdGhlIGxhc3QgdGltZSBJIGR1ZyBpbnRvIHRoaXMuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgYW55IHN1YnRsZSBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIHRvIHRoZSBzY2hlZHVsZXIgb3B0aW9ucywgbWF5YmUgbmV3IGFsZ29yaXRobXMgb3IgZGVwZW5kZW5jaWVzIEkmIzM5O3ZlIG1pc3NlZC4gVGhpcyBLY29uZmlnIGZpbGUgd2lsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGN1cnJlbnQgZmVhdHVyZSBzZXQgYW5kIGJ1aWxkIG9wdGlvbnMgYXZhaWxhYmxlIGZvciBjb25maWd1cmluZyBJUFZTIGluIGEgcnVubmluZyBzeXN0ZW0sIG9yIGEgYnVpbGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIElQIFZpcnR1YWwgU2VydmVyIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0bWVudWNvbmZpZyBJUF9WU1xuICAgNjpcdFx0dHJpc3RhdGUgXCYjMzQ7SVAgdmlydHVhbCBzZXJ2ZXIgc3VwcG9ydFwmIzM0O1xuICAgNzpcdFx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBORVRGSUxURVJcbiAgIDg6XHRcdGRlcGVuZHMgb24gKE5GX0NPTk5UUkFDSyB8fCBORl9DT05OVFJBQ0s9bilcbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgSVAgVmlydHVhbCBTZXJ2ZXIgc3VwcG9ydCB3aWxsIGxldCB5b3UgYnVpbGQgYSBoaWdoLXBlcmZvcm1hbmNlXG4gIDExOlx0XHQgIHZpcnR1YWwgc2VydmVyIGJhc2VkIG9uIGNsdXN0ZXIgb2YgdHdvIG9yIG1vcmUgcmVhbCBzZXJ2ZXJzLiBUaGlzXG4gIDEyOlx0XHQgIG9wdGlvbiBtdXN0IGJlIGVuYWJsZWQgZm9yIGF0IGxlYXN0IG9uZSBvZiB0aGUgY2x1c3RlcmVkIGNvbXB1dGVyc1xuICAxMzpcdFx0ICB0aGF0IHdpbGwgdGFrZSBjYXJlIG9mIGludGVyY2VwdGluZyBpbmNvbWluZyBjb25uZWN0aW9ucyB0byBhXG4gIDE0Olx0XHQgIHNpbmdsZSBJUCBhZGRyZXNzIGFuZCBzY2hlZHVsaW5nIHRoZW0gdG8gcmVhbCBzZXJ2ZXJzLlxuICAxNTpcdFxuICAxNjpcdFx0ICBUaHJlZSByZXF1ZXN0IGRpc3BhdGNoaW5nIHRlY2huaXF1ZXMgYXJlIGltcGxlbWVudGVkLCB0aGV5IGFyZVxuICAxNzpcdFx0ICB2aXJ0dWFsIHNlcnZlciB2aWEgTkFULCB2aXJ0dWFsIHNlcnZlciB2aWEgdHVubmVsaW5nIGFuZCB2aXJ0dWFsXG4gIDE4Olx0XHQgIHNlcnZlciB2aWEgZGlyZWN0IHJvdXRpbmcuIFRoZSBzZXZlcmFsIHNjaGVkdWxpbmcgYWxnb3JpdGhtcyBjYW5cbiAgMTk6XHRcdCAgYmUgdXNlZCB0byBjaG9vc2Ugd2hpY2ggc2VydmVyIHRoZSBjb25uZWN0aW9uIGlzIGRpcmVjdGVkIHRvLFxuICAyMDpcdFx0ICB0aHVzIGxvYWQgYmFsYW5jaW5nIGNhbiBiZSBhY2hpZXZlZCBhbW9uZyB0aGUgc2VydmVycy4gIEZvciBtb3JlXG4gIDIxOlx0XHQgIGluZm9ybWF0aW9uIGFuZCBpdHMgYWRtaW5pc3RyYXRpb24gcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHRoZVxuICAyMjpcdFx0ICBmb2xsb3dpbmcgVVJMOiBcdTAwM2NodHRwOi8vd3d3LmxpbnV4dmlydHVhbHNlcnZlci5vcmcvXHUwMDNlLlxuICAyMzpcdFxuICAyNDpcdFx0ICBJZiB5b3Ugd2FudCB0byBjb21waWxlIGl0IGluIGtlcm5lbCwgc2F5IFkuIFRvIGNvbXBpbGUgaXQgYXMgYVxuICAyNTpcdFx0ICBtb2R1bGUsIGNob29zZSBNIGhlcmUuIElmIHVuc3VyZSwgc2F5IE4uXG4gIDI2Olx0XG4gIDI3Olx0aWYgSVBfVlNcbiAgMjg6XHRcbiAgMjk6XHRjb25maWdcdElQX1ZTX0lQVjZcbiAgMzA6XHRcdGJvb2wgXCYjMzQ7SVB2NiBzdXBwb3J0IGZvciBJUFZTXCYjMzQ7XG4gIDMxOlx0XHRkZXBlbmRzIG9uIElQVjYgPSB5IHx8IElQX1ZTID0gSVBWNlxuICAzMjpcdFx0c2VsZWN0IE5GX0RFRlJBR19JUFY2XG4gIDMzOlx0XHRoZWxwXG4gIDM0Olx0XHQgIEFkZCBJUHY2IHN1cHBvcnQgdG8gSVBWUy5cbiAgMzU6XHRcbiAgMzY6XHRcdCAgU2F5IFkgaWYgdW5zdXJlLlxuICAzNzpcdFxuICAzODpcdGNvbmZpZ1x0SVBfVlNfREVCVUdcbiAgMzk6XHRcdGJvb2wgXCYjMzQ7SVAgdmlydHVhbCBzZXJ2ZXIgZGVidWdnaW5nXCYjMzQ7XG4gIDQwOlx0XHRoZWxwXG4gIDQxOlx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gZ2V0IGFkZGl0aW9uYWwgbWVzc2FnZXMgdXNlZnVsIGluXG4gIDQyOlx0XHQgIGRlYnVnZ2luZyB0aGUgSVAgdmlydHVhbCBzZXJ2ZXIgY29kZS4gWW91IGNhbiBjaGFuZ2UgdGhlIGRlYnVnXG4gIDQzOlx0XHQgIGxldmVsIGluIC9wcm9jL3N5cy9uZXQvaXB2NC92cy9kZWJ1Z19sZXZlbFxuICA0NDpcdFxuICA0NTpcdGNvbmZpZ1x0SVBfVlNfVEFCX0JJVFNcbiAgNDY6XHRcdGludCBcJiMzNDtJUFZTIGNvbm5lY3Rpb24gdGFibGUgc2l6ZSAodGhlIE50aCBwb3dlciBvZiAyKVwmIzM0O1xuICA0NzpcdFx0cmFuZ2UgOCAyMCBpZiAhNjRCSVRcbiAgNDg6XHRcdHJhbmdlIDggMjcgaWYgNjRCSVRcbiAgNDk6XHRcdGRlZmF1bHQgMTJcbiAgNTA6XHRcdGhlbHBcbiAgNTE6XHRcdCAgVGhlIElQVlMgY29ubmVjdGlvbiBoYXNoIHRhYmxlIHVzZXMgdGhlIGNoYWluaW5nIHNjaGVtZSB0byBoYW5kbGVcbiAgNTI6XHRcdCAgaGFzaCBjb2xsaXNpb25zLiBVc2luZyBhIGJpZyBJUFZTIGNvbm5lY3Rpb24gaGFzaCB0YWJsZSB3aWxsIGdyZWF0bHlcbiAgNTM6XHRcdCAgcmVkdWNlIGNvbmZsaWN0cyB3aGVuIHRoZXJlIGFyZSBodW5kcmVkcyBvZiB0aG91c2FuZHMgb2YgY29ubmVjdGlvbnNcbiAgNTQ6XHRcdCAgaW4gdGhlIGhhc2ggdGFibGUuXG4gIDU1Olx0XG4gIDU2Olx0XHQgIE5vdGUgdGhlIHRhYmxlIHNpemUgbXVzdCBiZSBwb3dlciBvZiAyLiBUaGUgdGFibGUgc2l6ZSB3aWxsIGJlIHRoZVxuICA1NzpcdFx0ICB2YWx1ZSBvZiAyIHRvIHRoZSB5b3VyIGlucHV0IG51bWJlciBwb3dlci4gVGhlIG51bWJlciB0byBjaG9vc2UgaXNcbiAgNTg6XHRcdCAgZnJvbSA4IHRvIDI3IGZvciA2NEJJVCgyMCBvdGhlcndpc2UpLCB0aGUgZGVmYXVsdCBudW1iZXIgaXMgMTIsXG4gIDU5Olx0XHQgIHdoaWNoIG1lYW5zIHRoZSB0YWJsZSBzaXplIGlzIDQwOTYuIERvbiYjMzk7dCBpbnB1dCB0aGUgbnVtYmVyIHRvb1xuICA2MDpcdFx0ICBzbWFsbCwgb3RoZXJ3aXNlIHlvdSB3aWxsIGxvc2UgcGVyZm9ybWFuY2Ugb24gaXQuIFlvdSBjYW4gYWRhcHQgdGhlXG4gIDYxOlx0XHQgIHRhYmxlIHNpemUgeW91cnNlbGYsIGFjY29yZGluZyB0byB5b3VyIHZpcnR1YWwgc2VydmVyIGFwcGxpY2F0aW9uLlxuICA2MjpcdFx0ICBJdCBpcyBnb29kIHRvIHNldCB0aGUgdGFibGUgc2l6ZSBub3QgZmFyIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mXG4gIDYzOlx0XHQgIGNvbm5lY3Rpb25zIHBlciBzZWNvbmQgbXVsdGlwbHlpbmcgYXZlcmFnZSBsYXN0aW5nIHRpbWUgb2ZcbiAgNjQ6XHRcdCAgY29ubmVjdGlvbiBpbiB0aGUgdGFibGUuICBGb3IgZXhhbXBsZSwgeW91ciB2aXJ0dWFsIHNlcnZlciBnZXRzIDIwMFxuICA2NTpcdFx0ICBjb25uZWN0aW9ucyBwZXIgc2Vjb25kLCB0aGUgY29ubmVjdGlvbiBsYXN0cyBmb3IgMjAwIHNlY29uZHMgaW5cbiAgNjY6XHRcdCAgYXZlcmFnZSBpbiB0aGUgY29ubmVjdGlvbiB0YWJsZSwgdGhlIHRhYmxlIHNpemUgc2hvdWxkIGJlIG5vdCBmYXJcbiAgNjc6XHRcdCAgbGVzcyB0aGFuIDIwMHgyMDAsIGl0IGlzIGdvb2QgdG8gc2V0IHRoZSB0YWJsZSBzaXplIDMyNzY4ICgyKioxNSkuXG4gIDY4Olx0XG4gIDY5Olx0XHQgIEFub3RoZXIgbm90ZSB0aGF0IGVhY2ggY29ubmVjdGlvbiBvY2N1cGllcyAxMjggYnl0ZXMgZWZmZWN0aXZlbHkgYW5kXG4gIDcwOlx0XHQgIGVhY2ggaGFzaCBlbnRyeSB1c2VzIDggYnl0ZXMsIHNvIHlvdSBjYW4gZXN0aW1hdGUgaG93IG11Y2ggbWVtb3J5IGlzXG4gIDcxOlx0XHQgIG5lZWRlZCBmb3IgeW91ciBib3guXG4gIDcyOlx0XG4gIDczOlx0XHQgIFlvdSBjYW4gb3ZlcndyaXRlIHRoaXMgbnVtYmVyIHNldHRpbmcgY29ubl90YWJfYml0cyBtb2R1bGUgcGFyYW1ldGVyXG4gIDc0Olx0XHQgIG9yIGJ5IGFwcGVuZGluZyBpcF92cy5jb25uX3RhYl9iaXRzPT8gdG8gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgaWZcbiAgNzU6XHRcdCAgSVAgVlMgd2FzIGNvbXBpbGVkIGJ1aWx0LWluLlxuICA3NjpcdFxuICA3NzpcdGNvbW1lbnQgXCYjMzQ7SVBWUyB0cmFuc3BvcnQgcHJvdG9jb2wgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFwmIzM0O1xuICA3ODpcdFxuICA3OTpcdGNvbmZpZ1x0SVBfVlNfUFJPVE9fVENQXG4gIDgwOlx0XHRib29sIFwmIzM0O1RDUCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzMTMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyB0aGUgSVBWUyBTY2hlZHVsZXIgQ29uZmlndXJhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgYmFjayBpbnRvIHRoZSBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgIGZpbGUuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gZ2V0dGluZyBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgc2NoZWR1bGVyIGNvbmZpZ3VyYXRpb25zLiBJIGtub3cgdGhlIGJhc2ljcywgYnV0IEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGNydWNpYWwgcmVnYXJkaW5nIHRoZSBhdmFpbGFibGUgc2NoZWR1bGluZyBhbGdvcml0aG1zIGFuZCB0aGVpciBhc3NvY2lhdGVkIG9wdGlvbnMgd2l0aGluIHRoZSBJUFZTIGZyYW1ld29yay4gSSB3YW50IHRvIGVuc3VyZSBJIGhhdmUgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGFueSBwb3RlbnRpYWwgY2F2ZWF0cyBhc3NvY2lhdGVkIHdpdGggc3BlY2lmaWMgc2NoZWR1bGVyIHNlbGVjdGlvbnMuIFRpbWUgdG8gc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODE6XHRcdGhlbHBcbiAgODI6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBsb2FkIGJhbGFuY2luZyBUQ1AgdHJhbnNwb3J0XG4gIDgzOlx0XHQgIHByb3RvY29sLiBTYXkgWSBpZiB1bnN1cmUuXG4gIDg0Olx0XG4gIDg1Olx0Y29uZmlnXHRJUF9WU19QUk9UT19VRFBcbiAgODY6XHRcdGJvb2wgXCYjMzQ7VURQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcJiMzNDtcbiAgODc6XHRcdGhlbHBcbiAgODg6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBsb2FkIGJhbGFuY2luZyBVRFAgdHJhbnNwb3J0XG4gIDg5Olx0XHQgIHByb3RvY29sLiBTYXkgWSBpZiB1bnN1cmUuXG4gIDkwOlx0XG4gIDkxOlx0Y29uZmlnXHRJUF9WU19QUk9UT19BSF9FU1BcbiAgOTI6XHRcdGRlZl9ib29sIElQX1ZTX1BST1RPX0VTUCB8fCBJUF9WU19QUk9UT19BSFxuICA5MzpcdFxuICA5NDpcdGNvbmZpZ1x0SVBfVlNfUFJPVE9fRVNQXG4gIDk1Olx0XHRib29sIFwmIzM0O0VTUCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XCYjMzQ7XG4gIDk2Olx0XHRoZWxwXG4gIDk3Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgbG9hZCBiYWxhbmNpbmcgRVNQIChFbmNhcHN1bGF0aW9uXG4gIDk4Olx0XHQgIFNlY3VyaXR5IFBheWxvYWQpIHRyYW5zcG9ydCBwcm90b2NvbC4gU2F5IFkgaWYgdW5zdXJlLlxuICA5OTpcdFxuIDEwMDpcdGNvbmZpZ1x0SVBfVlNfUFJPVE9fQUhcbiAxMDE6XHRcdGJvb2wgXCYjMzQ7QUggbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFwmIzM0O1xuIDEwMjpcdFx0aGVscFxuIDEwMzpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGxvYWQgYmFsYW5jaW5nIEFIIChBdXRoZW50aWNhdGlvblxuIDEwNDpcdFx0ICBIZWFkZXIpIHRyYW5zcG9ydCBwcm90b2NvbC4gU2F5IFkgaWYgdW5zdXJlLlxuIDEwNTpcdFxuIDEwNjpcdGNvbmZpZyAgSVBfVlNfUFJPVE9fU0NUUFxuIDEwNzpcdFx0Ym9vbCBcJiMzNDtTQ1RQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcJiMzNDtcbiAxMDg6XHRcdHNlbGVjdCBORVRfQ1JDMzJDXG4gMTA5Olx0XHRoZWxwXG4gMTEwOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgbG9hZCBiYWxhbmNpbmcgU0NUUCB0cmFuc3BvcnRcbiAxMTE6XHRcdCAgcHJvdG9jb2wuIFNheSBZIGlmIHVuc3VyZS5cbiAxMTI6XHRcbiAxMTM6XHRjb21tZW50IFwmIzM0O0lQVlMgc2NoZWR1bGVyXCYjMzQ7XG4gMTE0Olx0XG4gMTE1Olx0Y29uZmlnXHRJUF9WU19SUlxuIDExNjpcdFx0dHJpc3RhdGUgXCYjMzQ7cm91bmQtcm9iaW4gc2NoZWR1bGluZ1wmIzM0O1xuIDExNzpcdFx0aGVscFxuIDExODpcdFx0ICBUaGUgcm9iaW4tcm9iaW4gc2NoZWR1bGluZyBhbGdvcml0aG0gc2ltcGx5IGRpcmVjdHMgbmV0d29ya1xuIDExOTpcdFx0ICBjb25uZWN0aW9ucyB0byBkaWZmZXJlbnQgcmVhbCBzZXJ2ZXJzIGluIGEgcm91bmQtcm9iaW4gbWFubmVyLlxuIDEyMDpcdFxuIDEyMTpcdFx0ICBJZiB5b3Ugd2FudCB0byBjb21waWxlIGl0IGluIGtlcm5lbCwgc2F5IFkuIFRvIGNvbXBpbGUgaXQgYXMgYVxuIDEyMjpcdFx0ICBtb2R1bGUsIGNob29zZSBNIGhlcmUuIElmIHVuc3VyZSwgc2F5IE4uXG4gMTIzOlx0IFxuIDEyNDpcdGNvbmZpZ1x0SVBfVlNfV1JSXG4gMTI1Olx0XHR0cmlzdGF0ZSBcJiMzNDt3ZWlnaHRlZCByb3VuZC1yb2JpbiBzY2hlZHVsaW5nXCYjMzQ7XG4gMTI2Olx0XHRoZWxwXG4gMTI3Olx0XHQgIFRoZSB3ZWlnaHRlZCByb2Jpbi1yb2JpbiBzY2hlZHVsaW5nIGFsZ29yaXRobSBkaXJlY3RzIG5ldHdvcmtcbiAxMjg6XHRcdCAgY29ubmVjdGlvbnMgdG8gZGlmZmVyZW50IHJlYWwgc2VydmVycyBiYXNlZCBvbiBzZXJ2ZXIgd2VpZ2h0c1xuIDEyOTpcdFx0ICBpbiBhIHJvdW5kLXJvYmluIG1hbm5lci4gU2VydmVycyB3aXRoIGhpZ2hlciB3ZWlnaHRzIHJlY2VpdmVcbiAxMzA6XHRcdCAgbmV3IGNvbm5lY3Rpb25zIGZpcnN0IHRoYW4gdGhvc2Ugd2l0aCBsZXNzIHdlaWdodHMsIGFuZCBzZXJ2ZXJzXG4gMTMxOlx0XHQgIHdpdGggaGlnaGVyIHdlaWdodHMgZ2V0IG1vcmUgY29ubmVjdGlvbnMgdGhhbiB0aG9zZSB3aXRoIGxlc3NcbiAxMzI6XHRcdCAgd2VpZ2h0cyBhbmQgc2VydmVycyB3aXRoIGVxdWFsIHdlaWdodHMgZ2V0IGVxdWFsIGNvbm5lY3Rpb25zLlxuIDEzMzpcdFxuIDEzNDpcdFx0ICBJZiB5b3Ugd2FudCB0byBjb21waWxlIGl0IGluIGtlcm5lbCwgc2F5IFkuIFRvIGNvbXBpbGUgaXQgYXMgYVxuIDEzNTpcdFx0ICBtb2R1bGUsIGNob29zZSBNIGhlcmUuIElmIHVuc3VyZSwgc2F5IE4uXG4gMTM2Olx0XG4gMTM3Olx0Y29uZmlnXHRJUF9WU19MQ1xuIDEzODpcdFx0dHJpc3RhdGUgXCYjMzQ7bGVhc3QtY29ubmVjdGlvbiBzY2hlZHVsaW5nXCYjMzQ7XG4gMTM5Olx0XHRoZWxwXG4gMTQwOlx0XHQgIFRoZSBsZWFzdC1jb25uZWN0aW9uIHNjaGVkdWxpbmcgYWxnb3JpdGhtIGRpcmVjdHMgbmV0d29ya1xuIDE0MTpcdFx0ICBjb25uZWN0aW9ucyB0byB0aGUgc2VydmVyIHdpdGggdGhlIGxlYXN0IG51bWJlciBvZiBhY3RpdmUgXG4gMTQyOlx0XHQgIGNvbm5lY3Rpb25zLlxuIDE0MzpcdFxuIDE0NDpcdFx0ICBJZiB5b3Ugd2FudCB0byBjb21waWxlIGl0IGluIGtlcm5lbCwgc2F5IFkuIFRvIGNvbXBpbGUgaXQgYXMgYVxuIDE0NTpcdFx0ICBtb2R1bGUsIGNob29zZSBNIGhlcmUuIElmIHVuc3VyZSwgc2F5IE4uXG4gMTQ2Olx0XG4gMTQ3Olx0Y29uZmlnXHRJUF9WU19XTENcbiAxNDg6XHRcdHRyaXN0YXRlIFwmIzM0O3dlaWdodGVkIGxlYXN0LWNvbm5lY3Rpb24gc2NoZWR1bGluZ1wmIzM0O1xuIDE0OTpcdFx0aGVscFxuIDE1MDpcdFx0ICBUaGUgd2VpZ2h0ZWQgbGVhc3QtY29ubmVjdGlvbiBzY2hlZHVsaW5nIGFsZ29yaXRobSBkaXJlY3RzIG5ldHdvcmtcbiAxNTE6XHRcdCAgY29ubmVjdGlvbnMgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSBsZWFzdCBhY3RpdmUgY29ubmVjdGlvbnNcbiAxNTI6XHRcdCAgbm9ybWFsaXplZCBieSB0aGUgc2VydmVyIHdlaWdodC5cbiAxNTM6XHRcbiAxNTQ6XHRcdCAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBpbiBrZXJuZWwsIHNheSBZLiBUbyBjb21waWxlIGl0IGFzIGFcbiAxNTU6XHRcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBJZiB1bnN1cmUsIHNheSBOLlxuIDE1NjpcdFxuIDE1NzpcdGNvbmZpZyAgSVBfVlNfRk9cbiAxNTg6XHRcdFx0dHJpc3RhdGUgXCYjMzQ7d2VpZ2h0ZWQgZmFpbG92ZXIgc2NoZWR1bGluZ1wmIzM0O1xuIDE1OTpcdFx0aGVscFxuIDE2MDpcdFx0ICBUaGUgd2VpZ2h0ZWQgZmFpbG92ZXIgc2NoZWR1bGluZyBhbGdvcml0aG0gZGlyZWN0cyBuZXR3b3JrXG4gMTYxOlx0XHQgIGNvbm5lY3Rpb25zIHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgaGlnaGVzdCB3ZWlnaHQgdGhhdCBpc1xuIDE2MjpcdFx0ICBjdXJyZW50bHkgYXZhaWxhYmxlLlxuIDE2MzpcdFxuIDE2NDpcdFx0ICBJZiB5b3Ugd2FudCB0byBjb21waWxlIGl0IGluIGtlcm5lbCwgc2F5IFkuIFRvIGNvbXBpbGUgaXQgYXMgYVxuIDE2NTpcdFx0ICBtb2R1bGUsIGNob29zZSBNIGhlcmUuIElmIHVuc3VyZSwgc2F5IE4uXG4gMTY2Olx0XG4gMTY3Olx0Y29uZmlnICBJUF9WU19PVkZcbiAxNjg6XHRcdHRyaXN0YXRlIFwmIzM0O3dlaWdodGVkIG92ZXJmbG93IHNjaGVkdWxpbmdcJiMzNDtcbiAxNjk6XHRcdGhlbHBcbiAxNzA6XHRcdCAgVGhlIHdlaWdodGVkIG92ZXJmbG93IHNjaGVkdWxpbmcgYWxnb3JpdGhtIGRpcmVjdHMgbmV0d29ya1xuIDE3MTpcdFx0ICBjb25uZWN0aW9ucyB0byB0aGUgc2VydmVyIHdpdGggdGhlIGhpZ2hlc3Qgd2VpZ2h0IHRoYXQgaXNcbiAxNzI6XHRcdCAgY3VycmVudGx5IGF2YWlsYWJsZSBhbmQgb3ZlcmZsb3dzIHRvIHRoZSBuZXh0IHdoZW4gYWN0aXZlXG4gMTczOlx0XHQgIGNvbm5lY3Rpb25zIGV4Y2VlZCB0aGUgbm9kZSYjMzk7cyB3ZWlnaHQuXG4gMTc0Olx0XG4gMTc1Olx0XHQgIElmIHlvdSB3YW50IHRvIGNvbXBpbGUgaXQgaW4ga2VybmVsLCBzYXkgWS4gVG8gY29tcGlsZSBpdCBhcyBhXG4gMTc2Olx0XHQgIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gSWYgdW5zdXJlLCBzYXkgTi5cbiAxNzc6XHRcbiAxNzg6XHRjb25maWdcdElQX1ZTX0xCTENcbiAxNzk6XHRcdHRyaXN0YXRlIFwmIzM0O2xvY2FsaXR5LWJhc2VkIGxlYXN0LWNvbm5lY3Rpb24gc2NoZWR1bGluZ1wmIzM0O1xuIDE4MDpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0OTQxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBJUFZTIERlc3RpbmF0aW9uIE92ZXJsb2FkIFRocmVzaG9sZCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJUFZTIGlzIGRlZmluaXRlbHkgYSBrZXkgY29tcG9uZW50IGhlcmUsIHBhcnQgb2YgbmV0ZmlsdGVyLCBhbmQgYWNjZXNzaWJsZSB0aHJvdWdoIG5ldGxpbmsgaW50ZXJmYWNlcywgc29ja29wdCwgZXRjLiwgd2hpY2ggaXMgYSBnb29kIHNpZ24sIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgaXRzIGludGVncmF0aW9uIGluIFFFTVUvdmlydCBlbnZpcm9ubWVudHMuIFRoZSBjcml0aWNhbCBxdWVzdGlvbjogSXMgdGhpcyB0aGluZyByZWFjaGFibGUgdGhyb3VnaCBzeXprYWxsZXI/IFllcCwgc3l6a2FsbGVyIHN1cHBvcnRzIElQVlMgbmV0bGluayBhbmQgbmV0ZmlsdGVyIG9wZXJhdGlvbnMuIEV4Y2VsbGVudC4KCk5vdywgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgY29kZSB0aGF0JiMzOTtzIHBvdGVudGlhbGx5IG1vZGlmeWluZyB0aGUgSVBWUyBkZXN0aW5hdGlvbiBvdmVybG9hZCB0aHJlc2hvbGQgbG9naWMgYW5kIHRoZSB1bmRlcmx5aW5nIHN0cnVjdHVyZSBsYXlvdXQuIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgZXhhY3QgbG9jYXRpb25zOgotICAgYGlwX3ZzX2JpbmRfZGVzdGAgYW5kIGBpcF92c191bmJpbmRfZGVzdGAgd2l0aGluIGBuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jYC4KLSAgIGBpcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZGAsIGBfX2lwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkYCwgYW5kIGBfX2lwX3ZzX3VwZGF0ZV9kZXN0YCB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuY2AuCi0gICBBbmQgdGhlIHNjaGVkdWxlciBmdW5jdGlvbnMgaW4gdGhlIHZhcmlvdXMgc2NoZWR1bGVyIGZpbGVzIGludm9sdmVkLgoKVGltZSB0byBzZWUgaWYgdGhpcyBpcyAmIzM0O1dvcnRoRnV6emluZyYjMzQ7LiBDb25zaWRlcmluZyB0aGF0IGl0IHRvdWNoZXMgZXhlY3V0YWJsZSBuZXR3b3JraW5nLCBuZXRmaWx0ZXIsIGFuZCBJUFZTIGNvZGUgdGhhdCYjMzk7cyByZWFjaGFibGUsIHRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nICYjMzQ7eWVzJiMzNDsuIFNvLCB0aGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBzZXQgdG8gYHRydWVgLgoKTm93IGZvciBgRm9jdXNTeW1ib2xzYC4gSSBuZWVkIHRvIGJlIHByZWNpc2UsIHplcm9pbmcgaW4gb24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IGFyZSBiZWluZyBtb2RpZmllZCBvciBkaXJlY3RseSBjYWxsIHRoZSBtb2RpZmllZCBsb2dpYywgYW5kIHRoYXQgYXJlIG5vdCB1YmlxdWl0b3VzLiBMZXQmIzM5O3Mgc2VlLi4uCgpJbiBgaXBfdnNfY29ubi5jYCwgd2UgaGF2ZToKLSBgaXBfdnNfYmluZF9kZXN0YAotIGBpcF92c191bmJpbmRfZGVzdGAKCkFuZCB0aGVuIGluIGBpcF92c19jdGwuY2A6Ci0gYGlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkYCAoVGhpcyBpcyBleHBvcnRlZCBhbmQgbm9uLXN0YXRpYywgc28gcHJvbWlzaW5nISkKLSBgX19pcF92c191cGRhdGVfZGVzdGAgKG9yIGFueSBvZiBpdHMgY2FsbGVycywgYGlwX3ZzX2VkaXRfZGVzdGAgb3IgYGlwX3ZzX2FkZF9kZXN0YC4pCgpMZXQmIzM5O3MgZGl2ZSBpbnRvIGBpcF92c19jdGwuY2AgYXJvdW5kIGBfX2lwX3ZzX3VwZGF0ZV9kZXN0YC4gVGhhdCBzZWVtcyBsaWtlIHRoZSByaWdodCBhcmVhIHRvIGNvbmNlbnRyYXRlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2lwX3ZzX3VwZGF0ZV9kZXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MTM0ND1zdGF0aWMgdm9pZFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjEzNDU6X19pcF92c191cGRhdGVfZGVzdChzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xMzQ2LVx0XHQgICAgc3RydWN0IGlwX3ZzX2Rlc3RfdXNlcl9rZXJuICp1ZGVzdCwgaW50IGFkZClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MTQ0Mz1pcF92c19uZXdfZGVzdChzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBzdHJ1Y3QgaXBfdnNfZGVzdF91c2VyX2tlcm4gKnVkZXN0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xNDk0LVx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2ZGVzdC1cdTAwM2Vkc3RfbG9jayk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MTQ5NTpcdF9faXBfdnNfdXBkYXRlX2Rlc3Qoc3ZjLCBkZXN0LCB1ZGVzdCwgMSk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMTQ5Ni1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MTUxMj1pcF92c19hZGRfZGVzdChzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBzdHJ1Y3QgaXBfdnNfZGVzdF91c2VyX2tlcm4gKnVkZXN0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xNTcyLVx0XHRlbHNlXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MTU3MzpcdFx0XHRfX2lwX3ZzX3VwZGF0ZV9kZXN0KHN2YywgZGVzdCwgdWRlc3QsIDEpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTE1NzQtXHR9IGVsc2Uge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0xNTg5PWlwX3ZzX2VkaXRfZGVzdChzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBzdHJ1Y3QgaXBfdnNfZGVzdF91c2VyX2tlcm4gKnVkZXN0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xNjI3LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjE2Mjg6XHRfX2lwX3ZzX3VwZGF0ZV9kZXN0KHN2YywgZGVzdCwgdWRlc3QsIDApO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTE2MjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDMxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIElQVlMgU2NoZWR1bGVyIE1vZGlmaWNhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSB3aGljaCBzY2hlZHVsZXJzIGhhdmUgYmVlbiB0b3VjaGVkLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZXNlIHR3ZWx2ZTogYGlwX3ZzX2RoX3NjaGVkdWxlYCwgYGlwX3ZzX2ZvX3NjaGVkdWxlYCwgYF9faXBfdnNfbGJsY19zY2hlZHVsZWAsIGBfX2lwX3ZzX2xibGNyX3NjaGVkdWxlYCwgYGlwX3ZzX2xjX3NjaGVkdWxlYCwgYGlwX3ZzX25xX3NjaGVkdWxlYCwgYGlwX3ZzX292Zl9zY2hlZHVsZWAsIGBpcF92c19ycl9zY2hlZHVsZWAsIGBpcF92c19zZWRfc2NoZWR1bGVgLCBgaXBfdnNfdHdvc19zY2hlZHVsZWAsIGBpcF92c193bGNfc2NoZWR1bGVgLCBhbmQgYGlwX3ZzX3dycl9zY2hlZHVsZWAuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgc3VwcG9ydGluZyBmdW5jdGlvbnMgYXMgd2VsbDogYGlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkYCwgYGlwX3ZzX2JpbmRfZGVzdGAsIGBpcF92c191bmJpbmRfZGVzdGAsIGBpcF92c19lZGl0X2Rlc3RgLCBhbmQgYGlwX3ZzX2FkZF9kZXN0YC4KCk5vdywgYmVmb3JlIEkgcHJvY2VlZCB3aXRoIGFueSBmdXJ0aGVyIGludmVzdGlnYXRpb24sIEkgbmVlZCB0byBjaGVjayB3aGF0IGNvbmZpZ3VyYXRpb25zLCBpZiBhbnksIGFyZSBuZWVkZWQuIEEgcXVpY2sgbG9vayBhdCB0aGUgYEtjb25maWdgIGZvciB0aGUgSVBWUyBjb3JlIHRlbGxzIG1lIHRoYXQgaXQgZGVwZW5kcyBvbiBgSU5FVGAgYW5kIGBORVRGSUxURVJgIGFuZCBlaXRoZXIgYE5GX0NPTk5UUkFDS2Agb3IgYE5GX0NPTk5UUkFDSz1uYC4gVGhhdCBtYWtlcyBzZW5zZS4gSSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGVzZSBkZXBlbmRlbmNpZXMgYXJlIHByb3Blcmx5IGhhbmRsZWQuCgpBbmQgb2YgY291cnNlLCB0aGUgc2NoZWR1bGVycyB0aGVtc2VsdmVzIGFyZSBlbmFibGVkIGJ5IGNvbmZpZ3MgYXMgd2VsbCwgbmFtZWx5OiBgSVBfVlNfUlJgLCBgSVBfVlNfV1JSYCwgYElQX1ZTX0xDYCwgYElQX1ZTX1dMQ2AsIGBJUF9WU19GT2AsIGBJUF9WU19PVkZgLCBgSVBfVlNfTEJMQ2AsIGBJUF9WU19MQkxDUmAsIGBJUF9WU19ESGAsIGBJUF9WU19TSGAsIGBJUF9WU19TRURgLCBgSVBfVlNfTlFgLCBgSVBfVlNfVFdPU2AsIGFuZCBgSVBfVlNfTUhgLiBJIHNob3VsZCBhbHNvIHJlLWNvbmZpcm0gdGhhdCBgTkVURklMVEVSYCBhbmQgYElORVRgIGFyZSBjb25maWd1cmVkIGNvcnJlY3RseSBhbmQgdGhhdCB0aGVyZSBhcmUgbm8gY29uZmxpY3RzLgoKVG8gbWFrZSBzdXJlIEkmIzM5O20gcHJlY2lzZSwgSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIHRoZSBgS2NvbmZpZ2AgZmlsZXMgbW9yZSBjbG9zZWx5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gYWNjb3VudGluZyBmb3IgZXZlcnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX1ZTXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTI4Nj1jb21tZW50ICYjMzk7SVBWUyBTSCBzY2hlZHVsZXImIzM5O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg3LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6Mjg4OmNvbmZpZyBJUF9WU19TSF9UQUJfQklUU1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg5LVx0aW50IFwmIzM0O0lQVlMgc291cmNlIGhhc2hpbmcgdGFibGUgc2l6ZSAodGhlIE50aCBwb3dlciBvZiAyKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMwMT1jb21tZW50ICYjMzk7SVBWUyBNSCBzY2hlZHVsZXImIzM5O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzAyLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzAzOmNvbmZpZyBJUF9WU19NSF9UQUJfSU5ERVhcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwNC1cdGludCBcJiMzNDtJUFZTIG1hZ2xldiBoYXNoaW5nIHRhYmxlIGluZGV4IG9mIHNpemUgKHRoZSBwcmltZSBudW1iZXJzKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzU1OAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIHRoZSBJUFZTIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBJUFZTIEtjb25maWcgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBzZWN0aW9uIGZyb20gbGluZXMgMTgwIHRvIDMyMCBpbiBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgLiBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG9uIHdoYXQgb3B0aW9ucyBhcmUgZGVmaW5lZCB3aXRoaW4gdGhhdCBhcmVhLiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgYXQgdGhpcyB0byBlaXRoZXIgdW5kZXJzdGFuZCBhIHNwZWNpZmljIGZlYXR1cmUmIzM5O3MgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLCBkZWJ1ZyBhIGJ1aWxkIGlzc3VlLCBvciBwZXJoYXBzIGV2ZW4gYW5hbHl6ZSB0aGUgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBnb3Zlcm5zIHdoaWNoIG1vZHVsZXMgb3IgZmVhdHVyZXMgZ2V0IGVuYWJsZWQuIE15IGdvYWwgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQgdGhlIHVzZXIgaGFzIHRoZSBhYmlsaXR5IHRvIGVuYWJsZSBvciBkaXNhYmxlIGFuZCB0byB3aGljaCBvdGhlciBzZXR0aW5ncyB0aGVzZSBmZWF0dXJlcyBhcmUgZGVwZW5kZW50LiBLbm93aW5nIHRoaXMgaXMgY3JpdGljYWwsIHNpbmNlIGEgbWlzY29uZmlndXJhdGlvbiBvciBtaXN1bmRlcnN0YW5kaW5nIGNhbiBsZWFkIHRvIG9wZXJhdGlvbmFsIGluc3RhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTgwOlx0XHRoZWxwXG4gMTgxOlx0XHQgIFRoZSBsb2NhbGl0eS1iYXNlZCBsZWFzdC1jb25uZWN0aW9uIHNjaGVkdWxpbmcgYWxnb3JpdGhtIGlzIGZvclxuIDE4MjpcdFx0ICBkZXN0aW5hdGlvbiBJUCBsb2FkIGJhbGFuY2luZy4gSXQgaXMgdXN1YWxseSB1c2VkIGluIGNhY2hlIGNsdXN0ZXIuXG4gMTgzOlx0XHQgIFRoaXMgYWxnb3JpdGhtIHVzdWFsbHkgZGlyZWN0cyBwYWNrZXQgZGVzdGluZWQgZm9yIGFuIElQIGFkZHJlc3MgdG9cbiAxODQ6XHRcdCAgaXRzIHNlcnZlciBpZiB0aGUgc2VydmVyIGlzIGFsaXZlIGFuZCB1bmRlciBsb2FkLiBJZiB0aGUgc2VydmVyIGlzXG4gMTg1Olx0XHQgIG92ZXJsb2FkZWQgKGl0cyBhY3RpdmUgY29ubmVjdGlvbiBudW1iZXJzIGlzIGxhcmdlciB0aGFuIGl0cyB3ZWlnaHQpXG4gMTg2Olx0XHQgIGFuZCB0aGVyZSBpcyBhIHNlcnZlciBpbiBpdHMgaGFsZiBsb2FkLCB0aGVuIGFsbG9jYXRlIHRoZSB3ZWlnaHRlZFxuIDE4NzpcdFx0ICBsZWFzdC1jb25uZWN0aW9uIHNlcnZlciB0byB0aGlzIElQIGFkZHJlc3MuXG4gMTg4Olx0XG4gMTg5Olx0XHQgIElmIHlvdSB3YW50IHRvIGNvbXBpbGUgaXQgaW4ga2VybmVsLCBzYXkgWS4gVG8gY29tcGlsZSBpdCBhcyBhXG4gMTkwOlx0XHQgIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gSWYgdW5zdXJlLCBzYXkgTi5cbiAxOTE6XHRcbiAxOTI6XHRjb25maWcgIElQX1ZTX0xCTENSXG4gMTkzOlx0XHR0cmlzdGF0ZSBcJiMzNDtsb2NhbGl0eS1iYXNlZCBsZWFzdC1jb25uZWN0aW9uIHdpdGggcmVwbGljYXRpb24gc2NoZWR1bGluZ1wmIzM0O1xuIDE5NDpcdFx0aGVscFxuIDE5NTpcdFx0ICBUaGUgbG9jYWxpdHktYmFzZWQgbGVhc3QtY29ubmVjdGlvbiB3aXRoIHJlcGxpY2F0aW9uIHNjaGVkdWxpbmdcbiAxOTY6XHRcdCAgYWxnb3JpdGhtIGlzIGFsc28gZm9yIGRlc3RpbmF0aW9uIElQIGxvYWQgYmFsYW5jaW5nLiBJdCBpcyBcbiAxOTc6XHRcdCAgdXN1YWxseSB1c2VkIGluIGNhY2hlIGNsdXN0ZXIuIEl0IGRpZmZlcnMgZnJvbSB0aGUgTEJMQyBzY2hlZHVsaW5nXG4gMTk4Olx0XHQgIGFzIGZvbGxvd3M6IHRoZSBsb2FkIGJhbGFuY2VyIG1haW50YWlucyBtYXBwaW5ncyBmcm9tIGEgdGFyZ2V0XG4gMTk5Olx0XHQgIHRvIGEgc2V0IG9mIHNlcnZlciBub2RlcyB0aGF0IGNhbiBzZXJ2ZSB0aGUgdGFyZ2V0LiBSZXF1ZXN0cyBmb3JcbiAyMDA6XHRcdCAgYSB0YXJnZXQgYXJlIGFzc2lnbmVkIHRvIHRoZSBsZWFzdC1jb25uZWN0aW9uIG5vZGUgaW4gdGhlIHRhcmdldCYjMzk7c1xuIDIwMTpcdFx0ICBzZXJ2ZXIgc2V0LiBJZiBhbGwgdGhlIG5vZGUgaW4gdGhlIHNlcnZlciBzZXQgYXJlIG92ZXIgbG9hZGVkLFxuIDIwMjpcdFx0ICBpdCBwaWNrcyB1cCBhIGxlYXN0LWNvbm5lY3Rpb24gbm9kZSBpbiB0aGUgY2x1c3RlciBhbmQgYWRkcyBpdFxuIDIwMzpcdFx0ICBpbiB0aGUgc2V2ZXIgc2V0IGZvciB0aGUgdGFyZ2V0LiBJZiB0aGUgc2VydmVyIHNldCBoYXMgbm90IGJlZW5cbiAyMDQ6XHRcdCAgbW9kaWZpZWQgZm9yIHRoZSBzcGVjaWZpZWQgdGltZSwgdGhlIG1vc3QgbG9hZGVkIG5vZGUgaXMgcmVtb3ZlZFxuIDIwNTpcdFx0ICBmcm9tIHRoZSBzZXJ2ZXIgc2V0LCBpbiBvcmRlciB0byBhdm9pZCBoaWdoIGRlZ3JlZSBvZiByZXBsaWNhdGlvbi5cbiAyMDY6XHRcbiAyMDc6XHRcdCAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBpbiBrZXJuZWwsIHNheSBZLiBUbyBjb21waWxlIGl0IGFzIGFcbiAyMDg6XHRcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBJZiB1bnN1cmUsIHNheSBOLlxuIDIwOTpcdFxuIDIxMDpcdGNvbmZpZ1x0SVBfVlNfREhcbiAyMTE6XHRcdHRyaXN0YXRlIFwmIzM0O2Rlc3RpbmF0aW9uIGhhc2hpbmcgc2NoZWR1bGluZ1wmIzM0O1xuIDIxMjpcdFx0aGVscFxuIDIxMzpcdFx0ICBUaGUgZGVzdGluYXRpb24gaGFzaGluZyBzY2hlZHVsaW5nIGFsZ29yaXRobSBhc3NpZ25zIG5ldHdvcmtcbiAyMTQ6XHRcdCAgY29ubmVjdGlvbnMgdG8gdGhlIHNlcnZlcnMgdGhyb3VnaCBsb29raW5nIHVwIGEgc3RhdGljYWxseSBhc3NpZ25lZFxuIDIxNTpcdFx0ICBoYXNoIHRhYmxlIGJ5IHRoZWlyIGRlc3RpbmF0aW9uIElQIGFkZHJlc3Nlcy5cbiAyMTY6XHRcbiAyMTc6XHRcdCAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBpbiBrZXJuZWwsIHNheSBZLiBUbyBjb21waWxlIGl0IGFzIGFcbiAyMTg6XHRcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBJZiB1bnN1cmUsIHNheSBOLlxuIDIxOTpcdFxuIDIyMDpcdGNvbmZpZ1x0SVBfVlNfU0hcbiAyMjE6XHRcdHRyaXN0YXRlIFwmIzM0O3NvdXJjZSBoYXNoaW5nIHNjaGVkdWxpbmdcJiMzNDtcbiAyMjI6XHRcdGhlbHBcbiAyMjM6XHRcdCAgVGhlIHNvdXJjZSBoYXNoaW5nIHNjaGVkdWxpbmcgYWxnb3JpdGhtIGFzc2lnbnMgbmV0d29ya1xuIDIyNDpcdFx0ICBjb25uZWN0aW9ucyB0byB0aGUgc2VydmVycyB0aHJvdWdoIGxvb2tpbmcgdXAgYSBzdGF0aWNhbGx5IGFzc2lnbmVkXG4gMjI1Olx0XHQgIGhhc2ggdGFibGUgYnkgdGhlaXIgc291cmNlIElQIGFkZHJlc3Nlcy5cbiAyMjY6XHRcbiAyMjc6XHRcdCAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBpbiBrZXJuZWwsIHNheSBZLiBUbyBjb21waWxlIGl0IGFzIGFcbiAyMjg6XHRcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBJZiB1bnN1cmUsIHNheSBOLlxuIDIyOTpcdFxuIDIzMDpcdGNvbmZpZ1x0SVBfVlNfTUhcbiAyMzE6XHRcdHRyaXN0YXRlIFwmIzM0O21hZ2xldiBoYXNoaW5nIHNjaGVkdWxpbmdcJiMzNDtcbiAyMzI6XHRcdGhlbHBcbiAyMzM6XHRcdCAgVGhlIG1hZ2xldiBjb25zaXN0ZW50IGhhc2hpbmcgc2NoZWR1bGluZyBhbGdvcml0aG0gcHJvdmlkZXMgdGhlXG4gMjM0Olx0XHQgIEdvb2dsZSYjMzk7cyBNYWdsZXYgaGFzaGluZyBhbGdvcml0aG0gYXMgYSBJUFZTIHNjaGVkdWxlci4gSXQgYXNzaWduc1xuIDIzNTpcdFx0ICBuZXR3b3JrIGNvbm5lY3Rpb25zIHRvIHRoZSBzZXJ2ZXJzIHRocm91Z2ggbG9va2luZyB1cCBhIHN0YXRpY2FsbHlcbiAyMzY6XHRcdCAgYXNzaWduZWQgc3BlY2lhbCBoYXNoIHRhYmxlIGNhbGxlZCB0aGUgbG9va3VwIHRhYmxlLiBNYWdsZXYgaGFzaGluZ1xuIDIzNzpcdFx0ICBpcyB0byBhc3NpZ24gYSBwcmVmZXJlbmNlIGxpc3Qgb2YgYWxsIHRoZSBsb29rdXAgdGFibGUgcG9zaXRpb25zXG4gMjM4Olx0XHQgIHRvIGVhY2ggZGVzdGluYXRpb24uXG4gMjM5Olx0XG4gMjQwOlx0XHQgIFRocm91Z2ggdGhpcyBvcGVyYXRpb24sIFRoZSBtYWdsZXYgaGFzaGluZyBnaXZlcyBhbiBhbG1vc3QgZXF1YWxcbiAyNDE6XHRcdCAgc2hhcmUgb2YgdGhlIGxvb2t1cCB0YWJsZSB0byBlYWNoIG9mIHRoZSBkZXN0aW5hdGlvbnMgYW5kIHByb3ZpZGVzXG4gMjQyOlx0XHQgIG1pbmltYWwgZGlzcnVwdGlvbiBieSB1c2luZyB0aGUgbG9va3VwIHRhYmxlLiBXaGVuIHRoZSBzZXQgb2ZcbiAyNDM6XHRcdCAgZGVzdGluYXRpb25zIGNoYW5nZXMsIGEgY29ubmVjdGlvbiB3aWxsIGxpa2VseSBiZSBzZW50IHRvIHRoZSBzYW1lXG4gMjQ0Olx0XHQgIGRlc3RpbmF0aW9uIGFzIGl0IHdhcyBiZWZvcmUuXG4gMjQ1Olx0XG4gMjQ2Olx0XHQgIElmIHlvdSB3YW50IHRvIGNvbXBpbGUgaXQgaW4ga2VybmVsLCBzYXkgWS4gVG8gY29tcGlsZSBpdCBhcyBhXG4gMjQ3Olx0XHQgIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gSWYgdW5zdXJlLCBzYXkgTi5cbiAyNDg6XHRcbiAyNDk6XHRjb25maWdcdElQX1ZTX1NFRFxuIDI1MDpcdFx0dHJpc3RhdGUgXCYjMzQ7c2hvcnRlc3QgZXhwZWN0ZWQgZGVsYXkgc2NoZWR1bGluZ1wmIzM0O1xuIDI1MTpcdFx0aGVscFxuIDI1MjpcdFx0ICBUaGUgc2hvcnRlc3QgZXhwZWN0ZWQgZGVsYXkgc2NoZWR1bGluZyBhbGdvcml0aG0gYXNzaWducyBuZXR3b3JrXG4gMjUzOlx0XHQgIGNvbm5lY3Rpb25zIHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgc2hvcnRlc3QgZXhwZWN0ZWQgZGVsYXkuIFRoZSBcbiAyNTQ6XHRcdCAgZXhwZWN0ZWQgZGVsYXkgdGhhdCB0aGUgam9iIHdpbGwgZXhwZXJpZW5jZSBpcyAoQ2kgJiM0MzsgMSkgLyBVaSBpZiBcbiAyNTU6XHRcdCAgc2VudCB0byB0aGUgaXRoIHNlcnZlciwgaW4gd2hpY2ggQ2kgaXMgdGhlIG51bWJlciBvZiBjb25uZWN0aW9uc1xuIDI1NjpcdFx0ICBvbiB0aGUgaXRoIHNlcnZlciBhbmQgVWkgaXMgdGhlIGZpeGVkIHNlcnZpY2UgcmF0ZSAod2VpZ2h0KVxuIDI1NzpcdFx0ICBvZiB0aGUgaXRoIHNlcnZlci5cbiAyNTg6XHRcbiAyNTk6XHRcdCAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBpbiBrZXJuZWwsIHNheSBZLiBUbyBjb21waWxlIGl0IGFzIGFcbiAyNjA6XHRcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBJZiB1bnN1cmUsIHNheSBOLlxuIDI2MTpcdFxuIDI2MjpcdGNvbmZpZ1x0SVBfVlNfTlFcbiAyNjM6XHRcdHRyaXN0YXRlIFwmIzM0O25ldmVyIHF1ZXVlIHNjaGVkdWxpbmdcJiMzNDtcbiAyNjQ6XHRcdGhlbHBcbiAyNjU6XHRcdCAgVGhlIG5ldmVyIHF1ZXVlIHNjaGVkdWxpbmcgYWxnb3JpdGhtIGFkb3B0cyBhIHR3by1zcGVlZCBtb2RlbC5cbiAyNjY6XHRcdCAgV2hlbiB0aGVyZSBpcyBhbiBpZGxlIHNlcnZlciBhdmFpbGFibGUsIHRoZSBqb2Igd2lsbCBiZSBzZW50IHRvXG4gMjY3Olx0XHQgIHRoZSBpZGxlIHNlcnZlciwgaW5zdGVhZCBvZiB3YWl0aW5nIGZvciBhIGZhc3Qgb25lLiBXaGVuIHRoZXJlXG4gMjY4Olx0XHQgIGlzIG5vIGlkbGUgc2VydmVyIGF2YWlsYWJsZSwgdGhlIGpvYiB3aWxsIGJlIHNlbnQgdG8gdGhlIHNlcnZlclxuIDI2OTpcdFx0ICB0aGF0IG1pbmltaXplIGl0cyBleHBlY3RlZCBkZWxheSAoVGhlIFNob3J0ZXN0IEV4cGVjdGVkIERlbGF5XG4gMjcwOlx0XHQgIHNjaGVkdWxpbmcgYWxnb3JpdGhtKS5cbiAyNzE6XHRcbiAyNzI6XHRcdCAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBpbiBrZXJuZWwsIHNheSBZLiBUbyBjb21waWxlIGl0IGFzIGFcbiAyNzM6XHRcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBJZiB1bnN1cmUsIHNheSBOLlxuIDI3NDpcdFxuIDI3NTpcdGNvbmZpZ1x0SVBfVlNfVFdPU1xuIDI3NjpcdFx0dHJpc3RhdGUgXCYjMzQ7d2VpZ2h0ZWQgcmFuZG9tIHR3b3MgY2hvaWNlIGxlYXN0LWNvbm5lY3Rpb24gc2NoZWR1bGluZ1wmIzM0O1xuIDI3NzpcdFx0aGVscFxuIDI3ODpcdFx0ICBUaGUgd2VpZ2h0ZWQgcmFuZG9tIHR3b3MgY2hvaWNlIGxlYXN0LWNvbm5lY3Rpb24gc2NoZWR1bGluZ1xuIDI3OTpcdFx0ICBhbGdvcml0aG0gcGlja3MgdHdvIHJhbmRvbSByZWFsIHNlcnZlcnMgYW5kIGRpcmVjdHMgbmV0d29ya1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQ1OAoJCQkJCQkJb3V0cHV0OiAyNTYKCQkJCQkJCXRob3VnaHRzOiA3MjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSVBWUyBPdmVybG9hZCBIYW5kbGluZyBQYXRjaCBSZXZpZXcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBtZXRpY3Vsb3VzbHkgZXhhbWluZSB0aGUgY2hhbmdlcyB0byB0aGUgSVBWUyBjb3JlLiBJdCBhcHBlYXJzIHdlJiMzOTtyZSBhZGRyZXNzaW5nIHRoZSBvdmVybG9hZCBtZWNoYW5pc20sIGFuZCB0aGUgcmVtb3ZhbCBvZiBgSVBfVlNfREVTVF9GX09WRVJMT0FEYCBmcm9tIHRoZSBgZmxhZ3NgIGZpZWxkIGluIGBpbmNsdWRlL25ldC9pcF92cy5oYCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl0IGltcGxpZXMgYSBzaGlmdCBpbiBob3cgb3ZlcmxvYWQgc3RhdGUgaXMgbWFuYWdlZCDigJMgbGlrZWx5LCB3ZSYjMzk7cmUgbW92aW5nIHRvd2FyZHMgYSBtb3JlIGV4cGxpY2l0IHRocmVzaG9sZC1iYXNlZCBhcHByb2FjaCwgY29uZmlybWVkIGJ5IHRoZSBgUkVBRF9PTkNFKGRlc3QtJmd0O2xfdGhyZXNob2xkX3ZhbClgIGNoZWNrIGFuZCB0aGUgYWRkaXRpb24vcmVvcmRlcmluZyBvZiBgdV90aHJlc2hvbGRfdmFsYCBhbmQgYGxfdGhyZXNob2xkX3ZhbGAgaW4gYHN0cnVjdCBpcF92c19kZXN0YC4gVGhhdCBzdHJ1Y3QgcmVvcmdhbml6YXRpb24gZGVzZXJ2ZXMgYSBjbG9zZXIgbG9vayB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgYWxpZ25tZW50IGlzc3VlcyB0aGF0IGNvdWxkIGNyb3AgdXAsIGV2ZW4gd2l0aCBgUkVBRF9PTkNFYCBpbiBwbGF5LgoKTmV4dCwgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgc2lkZSBpbiBgaXBfdnNfY29ubi5jYCBpcyBrZXkuIGBpcF92c19iaW5kX2Rlc3RgIGFuZCBgaXBfdnNfdW5iaW5kX2Rlc3RgIG5vdyBleHBsaWNpdGx5IGNhbGwgYGlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkYCBiYXNlZCBvbiBjb21wYXJpc29ucyB3aXRoIHRoZSBuZXcgdGhyZXNob2xkIHZhbHVlcywgYHVfdGhyZXNob2xkX3ZhbGAgYW5kIGBsX3RocmVzaG9sZF92YWxgLCByZXNwZWN0aXZlbHkuIFRoaXMgaXMgdGhlIGhlYXJ0IG9mIHRoZSBsb2dpYywgYW5kIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGhvdyB0aGVzZSB0aHJlc2hvbGRzIGFyZSBiZWluZyBzZXQgYW5kIHVzZWQgdG8gdG9nZ2xlIHRoZSBvdmVybG9hZCBzdGF0ZSwgYW5kIGlmIHRoZXJlIGFyZSBlZGdlIGNhc2VzIGluIHRoZSBjb25uZWN0aW9ucyBsaWZlIGN5Y2xlLgoKVGhlIGNvbnRyb2wgcGxhbmUgY2hhbmdlcyBpbiBgaXBfdnNfY3RsLmNgIHdpdGggdGhlIG5ldyB1cGRhdGUgZnVuY3Rpb25zIGFyZSBnb2luZyB0byBiZSBpbXBvcnRhbnQgdG9vIOKAkyBzcGVjaWZpY2FsbHkgYF9faXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWRgLCBgaXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWRgLCBhbmQgYF9faXBfdnNfdXBkYXRlX2Rlc3RgLiBJIG5lZWQgdG8gdHJhY2sgaG93IHRoZXkgYXJlIHRyaWdnZXJlZCwgdG8gdmVyaWZ5IHRoZXkgZml0IHdpdGggdGhlIHRocmVzaG9sZCBjaGFuZ2VzIGFuZCB0aGUgc2NoZWR1bGVyIGxvZ2ljLgoKRmluYWxseSwgdGhlIHNjaGVkdWxlciBpbnRlZ3JhdGlvbiBpcyBjcnVjaWFsLiBJIHNlZSBjaGFuZ2VzIGluIG1hbnkgb2YgdGhlIHNjaGVkdWxlcnMsIHNwZWNpZmljYWxseTogYGlwX3ZzX2RoX3NjaGVkdWxlYCwgYGlwX3ZzX2ZvX3NjaGVkdWxlYCwgYF9faXBfdnNfbGJsY19zY2hlZHVsZWAsIGBfX2lwX3ZzX2xibGNyX3NjaGVkdWxlYCwgYGlwX3ZzX2xjX3NjaGVkdWxlYCwgYGlzX3VuYXZhaWxhYmxlYCBpbiBtaCBhbmQgc2gsIGBpcF92c19ucV9zY2hlZHVsZWAsIGBpcF92c19vdmZfc2NoZWR1bGVgLCBgaXBfdnNfcnJfc2NoZWR1bGVgLCBgaXBfdnNfc2VkX3NjaGVkdWxlYCwgYGlwX3ZzX3R3b3Nfc2NoZWR1bGVgLCBgaXBfdnNfd2xjX3NjaGVkdWxlYCwgYGlwX3ZzX3dycl9zY2hlZHVsZWAuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBvdmVybG9hZCBzdGF0ZSBhZmZlY3RzIHRoZSBzY2hlZHVsaW5nIGRlY2lzaW9ucy4gRm9yIGluc3RhbmNlLCBpcyBgaXNfdW5hdmFpbGFibGVgIGJlaW5nIHVzZWQgaW4gdGhlIG92ZXJsb2FkIHBhdGg/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBlYWNoIHNjaGVkdWxlciBpcyBiZWhhdmluZyBjb3JyZWN0bHkgYW5kIHRoYXQgbm8gdW5leHBlY3RlZCBiZWhhdmlvciwgc3VjaCBhcyB1bm5lY2Vzc2FyeSBiYWNrLW9mZiwgaXMgaW50cm9kdWNlZC4KCkdpdmVuIHRoZSBzdHJ1Y3R1cmFsIGNoYW5nZXMgYW5kIGxvZ2ljIHNoaWZ0LCBJIG5lZWQgdG8gc3BlY2lmeSB0aGVzZSBGb2N1c1N5bWJvbHMgdG8gYmUgdGFyZ2V0ZWQgZm9yIGZ1enppbmc6IGBpcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZGAsIGBpcF92c19iaW5kX2Rlc3RgLCBgaXBfdnNfdW5iaW5kX2Rlc3RgLCBgX19pcF92c191cGRhdGVfZGVzdGAsIGBpcF92c19hZGRfZGVzdGAsIGBpcF92c19lZGl0X2Rlc3RgLCBgaXBfdnNfZGhfc2NoZWR1bGVgLCBgaXBfdnNfZm9fc2NoZWR1bGVgLCBgaXBfdnNfbGNfc2NoZWR1bGVgLCBgaXBfdnNfb3ZmX3NjaGVkdWxlYCwgYGlwX3ZzX3JyX3NjaGVkdWxlYCwgYGlwX3ZzX3NlZF9zY2hlZHVsZWAsIGBpcF92c190d29zX3NjaGVkdWxlYCwgYGlwX3ZzX3dsY19zY2hlZHVsZWAsIGFuZCBgaXBfdnNfd3JyX3NjaGVkdWxlYC4KClRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBhcHBlYXIgdG8gYmUgdGhlIHN0YW5kYXJkIElQVlMgc3RhY2s6IGBJUF9WU2AsIGBORVRGSUxURVJgLCBhbmQgYElORVRgLiBOb3RoaW5nIHVuZXhwZWN0ZWQgdGhlcmUuCgpVbHRpbWF0ZWx5LCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoZXNlIGNoYW5nZXMgd2FycmFudCB0aG9yb3VnaCBmdXp6aW5nLiBUaGUgcGF0Y2ggc2lnbmlmaWNhbnRseSBhbHRlcnMgZGF0YSBzdHJ1Y3R1cmUgbGF5b3V0IGFuZCB0aGUgdGhyZXNob2xkL292ZXJsb2FkIHN0YXRlIGxvZ2ljLCBpbXBhY3RpbmcgSVBWUyBjb25uZWN0aW9uIHRyYWNraW5nLCBjb250cm9sIHBsYW5lIGRlc3RpbmF0aW9uIHVwZGF0aW5nLCBhbmQgc2NoZWR1bGluZyBhbGdvcml0aG1zLiBUaGVyZWZvcmUsIHRoZSByZWFzb25pbmcgZm9yIGBzZXQtcmVzdWx0c2Agd2lsbCBjbGVhcmx5IGV4cGxhaW4gdGhpcyBmYWN0LCBzcGVjaWZ5IHRoZSBmb2N1cyBzeW1ib2xzLCBhbmQgaW5jbHVkZSB0aGUgZW5hYmxlIGNvbmZpZ3VyYXRpb25zLiBUaGlzIGNvdmVycyBldmVyeXRoaW5nLiBMZXQmIzM5O3MgcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQmIzM0OywKICAgICYjMzQ7aXBfdnNfYmluZF9kZXN0JiMzNDssCiAgICAmIzM0O2lwX3ZzX3VuYmluZF9kZXN0JiMzNDssCiAgICAmIzM0O19faXBfdnNfdXBkYXRlX2Rlc3QmIzM0OywKICAgICYjMzQ7aXBfdnNfZWRpdF9kZXN0JiMzNDssCiAgICAmIzM0O2lwX3ZzX2FkZF9kZXN0JiMzNDssCiAgICAmIzM0O2lwX3ZzX3JyX3NjaGVkdWxlJiMzNDssCiAgICAmIzM0O2lwX3ZzX3dycl9zY2hlZHVsZSYjMzQ7LAogICAgJiMzNDtpcF92c193bGNfc2NoZWR1bGUmIzM0OywKICAgICYjMzQ7aXBfdnNfbGNfc2NoZWR1bGUmIzM0OywKICAgICYjMzQ7aXBfdnNfZm9fc2NoZWR1bGUmIzM0OywKICAgICYjMzQ7aXBfdnNfb3ZmX3NjaGVkdWxlJiMzNDssCiAgICAmIzM0O2lwX3ZzX3R3b3Nfc2NoZWR1bGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGRlc3RpbmF0aW9uIG92ZXJsb2FkIHRyYWNraW5nIGxvZ2ljIGFuZCBkZXN0aW5hdGlvbiBzdHJ1Y3R1cmUgbGF5b3V0IGluIHRoZSBJUFZTIChJUCBWaXJ0dWFsIFNlcnZlcikgc3Vic3lzdGVtLiBJdCB1cGRhdGVzIGNvbm5lY3Rpb24gYmluZGluZyBhbmQgdW5iaW5kaW5nIHRocmVzaG9sZHMsIGNvbnRyb2wgcGxhbmUgZGVzdGluYXRpb24gdXBkYXRlcywgYW5kIHNjaGVkdWxlciBvdmVybG9hZCBldmFsdWF0aW9uIGFjcm9zcyBJUFZTIGFsZ29yaXRobXMuIFRoZXNlIGFyZSByZWFjaGFibGUsIGV4ZWN1dGFibGUgbmV0d29yayBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgZm9yIHJhY2UgY29uZGl0aW9ucywgYXJpdGhtZXRpYyBvciBzdGF0ZSBoYW5kbGluZyBidWdzLCBhbmQgdGhyZXNob2xkIGVkZ2UgY2FzZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQmIzM0OywKICAgICYjMzQ7aXBfdnNfYmluZF9kZXN0JiMzNDssCiAgICAmIzM0O2lwX3ZzX3VuYmluZF9kZXN0JiMzNDssCiAgICAmIzM0O19faXBfdnNfdXBkYXRlX2Rlc3QmIzM0OywKICAgICYjMzQ7aXBfdnNfZWRpdF9kZXN0JiMzNDssCiAgICAmIzM0O2lwX3ZzX2FkZF9kZXN0JiMzNDssCiAgICAmIzM0O2lwX3ZzX3JyX3NjaGVkdWxlJiMzNDssCiAgICAmIzM0O2lwX3ZzX3dycl9zY2hlZHVsZSYjMzQ7LAogICAgJiMzNDtpcF92c193bGNfc2NoZWR1bGUmIzM0OywKICAgICYjMzQ7aXBfdnNfbGNfc2NoZWR1bGUmIzM0OywKICAgICYjMzQ7aXBfdnNfZm9fc2NoZWR1bGUmIzM0OywKICAgICYjMzQ7aXBfdnNfb3ZmX3NjaGVkdWxlJiMzNDssCiAgICAmIzM0O2lwX3ZzX3R3b3Nfc2NoZWR1bGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGRlc3RpbmF0aW9uIG92ZXJsb2FkIHRyYWNraW5nIGxvZ2ljIGFuZCBkZXN0aW5hdGlvbiBzdHJ1Y3R1cmUgbGF5b3V0IGluIHRoZSBJUFZTIChJUCBWaXJ0dWFsIFNlcnZlcikgc3Vic3lzdGVtLiBJdCB1cGRhdGVzIGNvbm5lY3Rpb24gYmluZGluZyBhbmQgdW5iaW5kaW5nIHRocmVzaG9sZHMsIGNvbnRyb2wgcGxhbmUgZGVzdGluYXRpb24gdXBkYXRlcywgYW5kIHNjaGVkdWxlciBvdmVybG9hZCBldmFsdWF0aW9uIGFjcm9zcyBJUFZTIGFsZ29yaXRobXMuIFRoZXNlIGFyZSByZWFjaGFibGUsIGV4ZWN1dGFibGUgbmV0d29yayBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgZm9yIHJhY2UgY29uZGl0aW9ucywgYXJpdGhtZXRpYyBvciBzdGF0ZSBoYW5kbGluZyBidWdzLCBhbmQgdGhyZXNob2xkIGVkZ2UgY2FzZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjExPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW9yZ2FuaXplcyBmaWVsZHMgaW4gYHN0cnVjdCBpcF92c19kZXN0YCBmb3IgYmV0dGVyIGNhY2hlbGluZSB1dGlsaXphdGlvbiBhbmQgcmVmYWN0b3JzIHRoZSBkZXN0aW5hdGlvbiBvdmVybG9hZCBzdGF0dXMgdHJhY2tpbmcgdG8gdXNlIGBsX3RocmVzaG9sZF92YWxgIC8gYHVfdGhyZXNob2xkX3ZhbGAgaW5zdGVhZCBvZiBgZGVzdC1cdTAwM2VmbGFnc2Agd2l0aCBgSVBfVlNfREVTVF9GX09WRVJMT0FEYC5cblxuQWxsIGBzdHJ1Y3QgaXBfdnNfZGVzdGAgaW5zdGFuY2VzIGFyZSB6ZXJvLWFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iaigpYCBhbmQgdGhlaXIgdGhyZXNob2xkIGZpZWxkcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdXBvbiBjcmVhdGlvbi4gVGhlIHN0cnVjdHVyZSBpdHNlbGYgaXMgbm90IGNvcGllZCB0byB1c2Vyc3BhY2UgYXMgYSByYXcgYmxvYjsgdXNlcnNwYWNlIHF1ZXJpZXMgc2VyaWFsaXplIGluZGl2aWR1YWwgZmllbGRzIG9yIHVzZSB6ZXJvZWQgaW50ZXJtZWRpYXRlIHN0cnVjdHVyZXMgKGBtZW1zZXRgIGluIGBfX2lwX3ZzX2dldF9kZXN0X2VudHJpZXNgIGFuZCBpbmRpdmlkdWFsIE5ldGxpbmsgYXR0cmlidXRlcyBpbiBgaXBfdnNfZ2VubF9maWxsX2Rlc3RgKS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgYnJhbmNoZWQgdXBvbi5cblxuQmVjYXVzZSB0aGUgY2hhbmdlcyBpbnRyb2R1Y2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhMDI5YzE4NTM5ZTJiZDQzOTNiYjg3MzZkZjAwMDNlNDIyY2I3YzliCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAyMjoxMDoxNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX3ZzLmggYi9pbmNsdWRlL25ldC9pcF92cy5oCmluZGV4IDMyZmRlNzMxYmNlYjcuLjlhODNiZmYzMjU2OWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwX3ZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvaXBfdnMuaApAQCAtMzYsOSAmIzQzOzM2LDYgQEAKICNkZWZpbmUgSVBfVlNfSERSX0lOVkVSU0UJMQogI2RlZmluZSBJUF9WU19IRFJfSUNNUAkJMgogCi0vKiBEZXN0aW5hdGlvbiBTZXJ2ZXIgRmxhZ3MgKi8KLSNkZWZpbmUgSVBfVlNfREVTVF9GX09WRVJMT0FECTB4MDAwMgkJLyogc2VydmVyIGlzIG92ZXJsb2FkZWQgKi8KLQogLyogRGVzdGluYXRpb24gU2VydmVyIENvbmZpZyBGbGFncyAqLwogI2RlZmluZSBJUF9WU19ERVNUX0NGX0FWQUlMQUJMRQkweDAwMDEJCS8qIHNlcnZlciBpcyBhdmFpbGFibGUgKi8KIApAQCAtOTczLDMyICYjNDM7OTcwLDQzIEBAIHN0cnVjdCBpcF92c19kZXN0X2RzdCB7CiAgKiBhbmQgc28gb24uCiAgKi8KIHN0cnVjdCBpcF92c19kZXN0IHsKJiM0MzsJLyogQ2FjaGVsaW5lIGZvciBoYXNoIHRhYmxlIG5vZGVzIC0gcmVhZC1tb3N0bHkgKi8KJiM0MzsKIAlzdHJ1Y3QgbGlzdF9oZWFkCW5fbGlzdDsgICAvKiBmb3IgdGhlIGRlc3RzIGluIHRoZSBzZXJ2aWNlICovCiAJc3RydWN0IGhsaXN0X25vZGUJZF9saXN0OyAgIC8qIGZvciB0YWJsZSB3aXRoIGFsbCB0aGUgZGVzdHMgKi8KIAotCXUxNgkJCWFmOwkJLyogYWRkcmVzcyBmYW1pbHkgKi8KLQlfX2JlMTYJCQlwb3J0OwkJLyogcG9ydCBudW1iZXIgb2YgdGhlIHNlcnZlciAqLwotCXVuaW9uIG5mX2luZXRfYWRkcglhZGRyOwkJLyogSVAgYWRkcmVzcyBvZiB0aGUgc2VydmVyICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgaW50CWZsYWdzOwkJLyogZGVzdCBzdGF0dXMgZmxhZ3MgKi8KLQlhdG9taWNfdAkJY29ubl9mbGFnczsJLyogZmxhZ3MgdG8gY29weSB0byBjb25uICovCiAJYXRvbWljX3QJCXdlaWdodDsJCS8qIHNlcnZlciB3ZWlnaHQgKi8KLQl1bnNpZ25lZCBsb25nCQljZmxhZ3M7CQkvKiBjb25maWcgZmxhZ3MgKi8KIAlhdG9taWNfdAkJbGFzdF93ZWlnaHQ7CS8qIHNlcnZlciBsYXRlc3Qgd2VpZ2h0ICovCiYjNDM7CiYjNDM7CS8qIGNvbm5lY3Rpb24gdGhyZXNob2xkcyAqLwomIzQzOwl1MzIJCQlsX3RocmVzaG9sZF92YWw7LyogdXNlZCBsb3dlciB0aHJlc2hvbGQgKi8KJiM0MzsJdTMyCQkJdV90aHJlc2hvbGRfdmFsOy8qIHVzZWQgdXBwZXIgdGhyZXNob2xkICovCiYjNDM7CS8qIDMyLzQ4ICovCiYjNDM7CXUzMgkJCWxfdGhyZXNob2xkOwkvKiBsb3dlciB0aHJlc2hvbGQgKi8KJiM0MzsJdTMyCQkJdV90aHJlc2hvbGQ7CS8qIHVwcGVyIHRocmVzaG9sZCAqLwomIzQzOwomIzQzOwl1bnNpZ25lZCBsb25nCQljZmxhZ3M7CQkvKiBjb25maWcgZmxhZ3MgKi8KJiM0MzsKJiM0MzsJLyogNDQvNjQgKi8KJiM0MzsJYXRvbWljX3QJCWNvbm5fZmxhZ3M7CS8qIGZsYWdzIHRvIGNvcHkgdG8gY29ubiAqLwomIzQzOwogCV9fdTE2CQkJdHVuX3R5cGU7CS8qIHR1bm5lbCB0eXBlICovCiAJX19iZTE2CQkJdHVuX3BvcnQ7CS8qIHR1bm5lbCBwb3J0ICovCiAJX191MTYJCQl0dW5fZmxhZ3M7CS8qIHR1bm5lbCBmbGFncyAqLwogCi0JcmVmY291bnRfdAkJcmVmY250OwkJLyogcmVmZXJlbmNlIGNvdW50ZXIgKi8KLQlzdHJ1Y3QgaXBfdnNfc3RhdHMgICAgICBzdGF0czsgICAgICAgICAgLyogc3RhdGlzdGljcyAqLwotCXVuc2lnbmVkIGxvbmcJCWlkbGVfc3RhcnQ7CS8qIHN0YXJ0IHRpbWUsIGppZmZpZXMgKi8KJiM0MzsJdTE2CQkJYWY7CQkvKiBhZGRyZXNzIGZhbWlseSAqLwomIzQzOwlfX2JlMTYJCQlwb3J0OwkJLyogcG9ydCBudW1iZXIgb2YgdGhlIHNlcnZlciAqLwomIzQzOwkvKiA2MC84MCAqLwomIzQzOwl1bmlvbiBuZl9pbmV0X2FkZHIJYWRkcjsJCS8qIElQIGFkZHJlc3Mgb2YgdGhlIHNlcnZlciAqLwogCi0JLyogY29ubmVjdGlvbiBjb3VudGVycyBhbmQgdGhyZXNob2xkcyAqLwotCWF0b21pY190CQlhY3RpdmVjb25uczsJLyogYWN0aXZlIGNvbm5lY3Rpb25zICovCiYjNDM7CS8qIGNvbm5lY3Rpb24gY291bnRlcnMgKi8KIAlhdG9taWNfdAkJdG90YWxjb25uczsJLyogdG90YWwgY29ubmVjdGlvbnMgKi8KJiM0MzsJYXRvbWljX3QJCWFjdGl2ZWNvbm5zOwkvKiBhY3RpdmUgY29ubmVjdGlvbnMgKi8KIAlhdG9taWNfdAkJcGVyc2lzdGNvbm5zOwkvKiBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zICovCi0JX191MzIJCQl1X3RocmVzaG9sZDsJLyogdXBwZXIgdGhyZXNob2xkICovCi0JX191MzIJCQlsX3RocmVzaG9sZDsJLyogbG93ZXIgdGhyZXNob2xkICovCi0JX191MzIJCQlsX3RocmVzaG9sZF92YWw7LyogdXNlZCBsb3dlciB0aHJlc2hvbGQgKi8KJiM0MzsKJiM0MzsJcmVmY291bnRfdAkJcmVmY250OwkJLyogcmVmZXJlbmNlIGNvdW50ZXIgKi8KJiM0MzsJc3RydWN0IGlwX3ZzX3N0YXRzICAgICAgc3RhdHM7ICAgICAgICAgIC8qIHN0YXRpc3RpY3MgKi8KJiM0MzsJdW5zaWduZWQgbG9uZwkJaWRsZV9zdGFydDsJLyogc3RhcnQgdGltZSwgamlmZmllcyAqLwogCiAJLyogZm9yIGRlc3RpbmF0aW9uIGNhY2hlICovCiAJc3BpbmxvY2tfdAkJZHN0X2xvY2s7CS8qIGxvY2sgb2YgZHN0X2NhY2hlICovCkBAIC0xOTE1LDcgJiM0MzsxOTIzLDEzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c19kZXN0X3B1dF9hbmRfZnJlZShzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCkKIAkJa2ZyZWUoZGVzdCk7CiB9CiAKLXZvaWQgaXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QsIGludCBtb2RlKTsKJiM0Mzt2b2lkIGlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKHN0cnVjdCBpcF92c19kZXN0ICpkZXN0LCBib29sIG92ZXJsb2FkKTsKJiM0MzsKJiM0MzsvKiBDaGVjayBpZiBkZXN0IGlzIGluIG92ZXJsb2FkZWQgc3RhdGUgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGNvbnN0IHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KQomIzQzO3sKJiM0MzsJcmV0dXJuIFJFQURfT05DRShkZXN0LSZndDtsX3RocmVzaG9sZF92YWwpOwomIzQzO30KIAogLyogSVBWUyBzeW5jIGRhZW1vbiBkYXRhIGFuZCBmdW5jdGlvbiBwcm90b3R5cGVzCiAgKiAoZnJvbSBpcF92c19zeW5jLmMpCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYwppbmRleCA2ZmEzZTFkYzUzNGMzLi41MzQ4YzJmNDliNjRlIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMKQEAgLTExNTAsOCAmIzQzOzExNTAsOCBAQCBpcF92c19iaW5kX2Rlc3Qoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCkKIAkJaWYgKCEoZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX0lOQUNUSVZFKSkKIAkJCWF0b21pY19pbmMoJmFtcDtkZXN0LSZndDthY3RpdmVjb25ucyk7CiAJCXRjID0gYXRvbWljX2luY19yZXR1cm4oJmFtcDtkZXN0LSZndDt0b3RhbGNvbm5zKTsKLQkJaWYgKHRjID09IFJFQURfT05DRShkZXN0LSZndDt1X3RocmVzaG9sZCkpCi0JCQlpcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChkZXN0LCAxKTsKJiM0MzsJCWlmICh0YyAmZ3Q7PSBSRUFEX09OQ0UoZGVzdC0mZ3Q7dV90aHJlc2hvbGRfdmFsKSkKJiM0MzsJCQlpcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChkZXN0LCB0cnVlKTsKIAl9IGVsc2UgewogCQkvKiBJdCBpcyBhIHBlcnNpc3RlbnQgY29ubmVjdGlvbi90ZW1wbGF0ZSwgc28gaW5jcmVhc2UKIAkJICAgdGhlIHBlcnNpc3RlbnQgY29ubmVjdGlvbiBjb3VudGVyICovCkBAIC0xMjQzLDggJiM0MzsxMjQzLDggQEAgc3RhdGljIGlubGluZSB2b2lkIGlwX3ZzX3VuYmluZF9kZXN0KHN0cnVjdCBpcF92c19jb25uICpjcCkKIAkJaWYgKCEoY3AtJmd0O2ZsYWdzICZhbXA7IElQX1ZTX0NPTk5fRl9JTkFDVElWRSkpCiAJCQlhdG9taWNfZGVjKCZhbXA7ZGVzdC0mZ3Q7YWN0aXZlY29ubnMpOwogCQl0YyA9IGF0b21pY19mZXRjaF9kZWMoJmFtcDtkZXN0LSZndDt0b3RhbGNvbm5zKTsKLQkJaWYgKHRjID09IFJFQURfT05DRShkZXN0LSZndDtsX3RocmVzaG9sZF92YWwpKQotCQkJaXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoZGVzdCwgLTEpOwomIzQzOwkJaWYgKHRjICZsdDs9IFJFQURfT05DRShkZXN0LSZndDtsX3RocmVzaG9sZF92YWwpKQomIzQzOwkJCWlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKGRlc3QsIGZhbHNlKTsKIAl9IGVsc2UgewogCQkvKiBJdCBpcyBhIHBlcnNpc3RlbnQgY29ubmVjdGlvbi90ZW1wbGF0ZSwgc28gZGVjcmVhc2UKIAkJICAgdGhlIHBlcnNpc3RlbnQgY29ubmVjdGlvbiBjb3VudGVyICovCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMKaW5kZXggNGMxYzczOTQ0NmI3Ni4uMzAwMzU0N2RjYWJlNSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYwpAQCAtMTMwOSwzMiAmIzQzOzEzMDksMzIgQEAgdm9pZCBpcF92c19zdGF0c19mcmVlKHN0cnVjdCBpcF92c19zdGF0cyAqc3RhdHMpCiAgKiAtIGNvbm5zIHJlYWNoIHVfdGhyZXNob2xkIGFuZCBleGNlZWQgaXQ6IHNldCB0aGUgZmxhZwogICogLSBjb25ucyBnbyBiZWxvdyBsX3RocmVzaG9sZCAob3IgNzUlIG9mIHVfdGhyZXNob2xkKTogY2xlYXIgdGhlIGZsYWcKICAqLwotc3RhdGljIHZvaWQgX19pcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCwgaW50IG1vZGUpCiYjNDM7c3RhdGljIHZvaWQgX19pcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCwgYm9vbCBvdmVybG9hZCkKIHsKIAlpbnQgY29ubnM7CiAJdTMyIGwsIHU7CiAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7ZGVzdC0mZ3Q7ZHN0X2xvY2spOwogCXUgPSBSRUFEX09OQ0UoZGVzdC0mZ3Q7dV90aHJlc2hvbGQpOwotCWlmICghdSkKLQkJZ290byB1bnNldDsKLQlsID0gUkVBRF9PTkNFKGRlc3QtJmd0O2xfdGhyZXNob2xkX3ZhbCk7Ci0JY29ubnMgPSBhdG9taWNfcmVhZCgmYW1wO2Rlc3QtJmd0O3RvdGFsY29ubnMpOwotCWlmIChjb25ucyAmZ3Q7PSAobW9kZSAmZ3Q7IDAgPyBsIDogdSkpIHsKLQkJZGVzdC0mZ3Q7ZmxhZ3MgfD0gSVBfVlNfREVTVF9GX09WRVJMT0FEOwotCQlyZXR1cm47CiYjNDM7CWlmICh1KSB7CiYjNDM7CQkvKiBMb3cgdGhyZXNob2xkIGRlZmF1bHRzIHRvIDc1JSBvZiB1cHBlciB0aHJlc2hvbGQgKi8KJiM0MzsJCWwgPSBSRUFEX09OQ0UoZGVzdC0mZ3Q7bF90aHJlc2hvbGQpID8gOiAodSAtICh1ICZndDsmZ3Q7IDIpKTsKJiM0MzsJCWNvbm5zID0gYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt0b3RhbGNvbm5zKTsKJiM0MzsJCWlmIChjb25ucyAmZ3Q7PSAob3ZlcmxvYWQgPyBsIDogdSkpIHsKJiM0MzsJCQlXUklURV9PTkNFKGRlc3QtJmd0O3VfdGhyZXNob2xkX3ZhbCwgSU5UX01BWCk7CiYjNDM7CQkJV1JJVEVfT05DRShkZXN0LSZndDtsX3RocmVzaG9sZF92YWwsIGwpOwomIzQzOwkJCXJldHVybjsKJiM0MzsJCX0KIAl9Ci0JaWYgKGNvbm5zICZndDs9IChtb2RlICZsdDsgMCA/IHUgOiBsKSkKLQkJcmV0dXJuOwogCi11bnNldDoKLQlkZXN0LSZndDtmbGFncyAmYW1wOz0gfklQX1ZTX0RFU1RfRl9PVkVSTE9BRDsKJiM0MzsJV1JJVEVfT05DRShkZXN0LSZndDt1X3RocmVzaG9sZF92YWwsIHUgPyA6IElOVF9NQVgpOwomIzQzOwlXUklURV9PTkNFKGRlc3QtJmd0O2xfdGhyZXNob2xkX3ZhbCwgMCk7CiB9CiAKLXZvaWQgaXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QsIGludCBtb2RlKQomIzQzO3ZvaWQgaXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QsIGJvb2wgb3ZlcmxvYWQpCiB7CiAJc3Bpbl9sb2NrX2JoKCZhbXA7ZGVzdC0mZ3Q7ZHN0X2xvY2spOwotCV9faXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoZGVzdCwgbW9kZSk7CiYjNDM7CV9faXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoZGVzdCwgb3ZlcmxvYWQpOwogCXNwaW5fdW5sb2NrX2JoKCZhbXA7ZGVzdC0mZ3Q7ZHN0X2xvY2spOwogfQogCkBAIC0xNDA2LDE1ICYjNDM7MTQwNiwxMyBAQCBfX2lwX3ZzX3VwZGF0ZV9kZXN0KHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIHN0cnVjdCBpcF92c19kZXN0ICpkZXN0LAogCiAJaWYgKFJFQURfT05DRShkZXN0LSZndDt1X3RocmVzaG9sZCkgIT0gdWRlc3QtJmd0O3VfdGhyZXNob2xkIHx8CiAJICAgIFJFQURfT05DRShkZXN0LSZndDtsX3RocmVzaG9sZCkgIT0gdWRlc3QtJmd0O2xfdGhyZXNob2xkKSB7CiYjNDM7CQlib29sIG92ZXJsb2FkOwomIzQzOwogCQlzcGluX2xvY2tfYmgoJmFtcDtkZXN0LSZndDtkc3RfbG9jayk7CiAJCVdSSVRFX09OQ0UoZGVzdC0mZ3Q7dV90aHJlc2hvbGQsIHVkZXN0LSZndDt1X3RocmVzaG9sZCk7CiAJCVdSSVRFX09OQ0UoZGVzdC0mZ3Q7bF90aHJlc2hvbGQsIHVkZXN0LSZndDtsX3RocmVzaG9sZCk7Ci0JCS8qIExvdyB0aHJlc2hvbGQgZGVmYXVsdHMgdG8gNzUlIG9mIHVwcGVyIHRocmVzaG9sZCAqLwotCQlXUklURV9PTkNFKGRlc3QtJmd0O2xfdGhyZXNob2xkX3ZhbCwKLQkJCSAgIHVkZXN0LSZndDtsX3RocmVzaG9sZCA/IDoKLQkJCSAgICh1ZGVzdC0mZ3Q7dV90aHJlc2hvbGQgLQotCQkJICAgICh1ZGVzdC0mZ3Q7dV90aHJlc2hvbGQgJmd0OyZndDsgMikpKTsKLQkJX19pcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChkZXN0LCAwKTsKJiM0MzsJCW92ZXJsb2FkID0gaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpOwomIzQzOwkJX19pcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChkZXN0LCBvdmVybG9hZCk7CiAJCXNwaW5fdW5sb2NrX2JoKCZhbXA7ZGVzdC0mZ3Q7ZHN0X2xvY2spOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2RoLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZGguYwppbmRleCA0M2FiZWQ3YTI2YTZhLi45NWU1Mjk1MGFkYmI3IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZGguYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZGguYwpAQCAtMTk1LDE2ICYjNDM7MTk1LDYgQEAgc3RhdGljIGludCBpcF92c19kaF9kZXN0X2NoYW5nZWQoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywKIH0KIAogCi0vKgotICogICAgICBJZiB0aGUgZGVzdCBmbGFncyBpcyBzZXQgd2l0aCBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQsCi0gKiAgICAgIGNvbnNpZGVyIHRoYXQgdGhlIHNlcnZlciBpcyBvdmVybG9hZGVkIGhlcmUuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGlzX292ZXJsb2FkZWQoc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QpCi17Ci0JcmV0dXJuIGRlc3QtJmd0O2ZsYWdzICZhbXA7IElQX1ZTX0RFU1RfRl9PVkVSTE9BRDsKLX0KLQotCiAvKgogICogICAgICBEZXN0aW5hdGlvbiBoYXNoaW5nIHNjaGVkdWxpbmcKICAqLwpAQCAtMjE5LDEwICYjNDM7MjA5LDggQEAgaXBfdnNfZGhfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAogCXMgPSAoc3RydWN0IGlwX3ZzX2RoX3N0YXRlICopIHN2Yy0mZ3Q7c2NoZWRfZGF0YTsKIAlkZXN0ID0gaXBfdnNfZGhfZ2V0KHN2Yy0mZ3Q7YWYsIHMsICZhbXA7aXBoLSZndDtkYWRkcik7Ci0JaWYgKCFkZXN0IHx8Ci0JICAgICEoZGVzdC0mZ3Q7Y2ZsYWdzICZhbXA7IElQX1ZTX0RFU1RfQ0ZfQVZBSUxBQkxFKQotCSAgICB8fCBhdG9taWNfcmVhZCgmYW1wO2Rlc3QtJmd0O3dlaWdodCkgJmx0Oz0gMAotCSAgICB8fCBpc19vdmVybG9hZGVkKGRlc3QpKSB7CiYjNDM7CWlmICghZGVzdCB8fCBhdG9taWNfcmVhZCgmYW1wO2Rlc3QtJmd0O3dlaWdodCkgJmx0Oz0gMCB8fAomIzQzOwkgICAgaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpKSB7CiAJCWlwX3ZzX3NjaGVkdWxlcl9lcnIoc3ZjLCAmIzM0O25vIGRlc3RpbmF0aW9uIGF2YWlsYWJsZSYjMzQ7KTsKIAkJcmV0dXJuIE5VTEw7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2ZvLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZm8uYwppbmRleCBkNjU3YjQ3YzY1MTFmLi5lMDdmYTMzZjZkNTI3IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZm8uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZm8uYwpAQCAtMjksNyAmIzQzOzI5LDcgQEAgaXBfdnNfZm9fc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkgKiBGaW5kIHZpcnR1YWwgc2VydmVyIHdpdGggaGlnaGVzdCB3ZWlnaHQgYW5kIHNlbmQgaXQgdHJhZmZpYwogCSAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsICZhbXA7c3ZjLSZndDtkZXN0aW5hdGlvbnMsIG5fbGlzdCkgewotCQlpZiAoIShkZXN0LSZndDtmbGFncyAmYW1wOyBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpICZhbXA7JmFtcDsKJiM0MzsJCWlmICghaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpICZhbXA7JmFtcDsKIAkJICAgIGF0b21pY19yZWFkKCZhbXA7ZGVzdC0mZ3Q7d2VpZ2h0KSAmZ3Q7IGh3KSB7CiAJCQlod2VpZ2h0ID0gZGVzdDsKIAkJCWh3ID0gYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt3ZWlnaHQpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGMuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjLmMKaW5kZXggNjkzYmNjODJjY2I3Ny4uYmZmMTA5YzFjOTU5YiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsYy5jCkBAIC00MTQsNyAmIzQzOzQxNCw3IEBAIF9faXBfdnNfbGJsY19zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjKQogCSAqIG5ldyBjb25uZWN0aW9uLgogCSAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsICZhbXA7c3ZjLSZndDtkZXN0aW5hdGlvbnMsIG5fbGlzdCkgewotCQlpZiAoZGVzdC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfREVTVF9GX09WRVJMT0FEKQomIzQzOwkJaWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt3ZWlnaHQpICZndDsgMCkgewogCQkJbGVhc3QgPSBkZXN0OwpAQCAtNDI5LDcgJiM0Mzs0MjksNyBAQCBfX2lwX3ZzX2xibGNfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YykKIAkgKi8KICAgbmV4dHN0YWdlOgogCWxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmN1KGRlc3QsICZhbXA7c3ZjLSZndDtkZXN0aW5hdGlvbnMsIG5fbGlzdCkgewotCQlpZiAoZGVzdC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfREVTVF9GX09WRVJMT0FEKQomIzQzOwkJaWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSkKIAkJCWNvbnRpbnVlOwogCiAJCWRvaCA9IGlwX3ZzX2Rlc3RfY29ubl9vdmVyaGVhZChkZXN0KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjci5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGNyLmMKaW5kZXggZjUzZjA1Y2VlYTM2Zi4uYzI4NTNlMDdlNzg3MiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGNyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGNyLmMKQEAgLTE2Niw3ICYjNDM7MTY2LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaXBfdnNfZGVzdCAqaXBfdnNfZGVzdF9zZXRfbWluKHN0cnVjdCBpcF92c19kZXN0X3NldCAqc2V0KQogCS8qIHNlbGVjdCB0aGUgZmlyc3QgZGVzdGluYXRpb24gc2VydmVyLCB3aG9zZSB3ZWlnaHQgJmd0OyAwICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZSwgJmFtcDtzZXQtJmd0O2xpc3QsIGxpc3QpIHsKIAkJbGVhc3QgPSBlLSZndDtkZXN0OwotCQlpZiAobGVhc3QtJmd0O2ZsYWdzICZhbXA7IElQX1ZTX0RFU1RfRl9PVkVSTE9BRCkKJiM0MzsJCWlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQobGVhc3QpKQogCQkJY29udGludWU7CiAKIAkJaWYgKChhdG9taWNfcmVhZCgmYW1wO2xlYXN0LSZndDt3ZWlnaHQpICZndDsgMCkgJmFtcDsmYW1wOwpAQCAtMTgxLDcgJiM0MzsxODEsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpcF92c19kZXN0ICppcF92c19kZXN0X3NldF9taW4oc3RydWN0IGlwX3ZzX2Rlc3Rfc2V0ICpzZXQpCiAgIG5leHRzdGFnZToKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShlLCAmYW1wO3NldC0mZ3Q7bGlzdCwgbGlzdCkgewogCQlkZXN0ID0gZS0mZ3Q7ZGVzdDsKLQkJaWYgKGRlc3QtJmd0O2ZsYWdzICZhbXA7IElQX1ZTX0RFU1RfRl9PVkVSTE9BRCkKJiM0MzsJCWlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkpCiAJCQljb250aW51ZTsKIAogCQlkb2ggPSBpcF92c19kZXN0X2Nvbm5fb3ZlcmhlYWQoZGVzdCk7CkBAIC01NzcsNyAmIzQzOzU3Nyw3IEBAIF9faXBfdnNfbGJsY3Jfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YykKIAkgKiBuZXcgY29ubmVjdGlvbi4KIAkgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkZXN0LCAmYW1wO3N2Yy0mZ3Q7ZGVzdGluYXRpb25zLCBuX2xpc3QpIHsKLQkJaWYgKGRlc3QtJmd0O2ZsYWdzICZhbXA7IElQX1ZTX0RFU1RfRl9PVkVSTE9BRCkKJiM0MzsJCWlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkpCiAJCQljb250aW51ZTsKIAogCQlpZiAoYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt3ZWlnaHQpICZndDsgMCkgewpAQCAtNTkzLDcgJiM0Mzs1OTMsNyBAQCBfX2lwX3ZzX2xibGNyX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMpCiAJICovCiAgIG5leHRzdGFnZToKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShkZXN0LCAmYW1wO3N2Yy0mZ3Q7ZGVzdGluYXRpb25zLCBuX2xpc3QpIHsKLQkJaWYgKGRlc3QtJmd0O2ZsYWdzICZhbXA7IElQX1ZTX0RFU1RfRl9PVkVSTE9BRCkKJiM0MzsJCWlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkpCiAJCQljb250aW51ZTsKIAogCQlkb2ggPSBpcF92c19kZXN0X2Nvbm5fb3ZlcmhlYWQoZGVzdCk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGMuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYy5jCmluZGV4IDE4Yjk3NmE3YzRkMjAuLjkwMDJmNDkxYmZmNjggMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYy5jCkBAIC0zOCw3ICYjNDM7MzgsNyBAQCBpcF92c19sY19zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCSAqLwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZGVzdCwgJmFtcDtzdmMtJmd0O2Rlc3RpbmF0aW9ucywgbl9saXN0KSB7Ci0JCWlmICgoZGVzdC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfREVTVF9GX09WRVJMT0FEKSB8fAomIzQzOwkJaWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSB8fAogCQkgICAgYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt3ZWlnaHQpID09IDApCiAJCQljb250aW51ZTsKIAkJZG9oID0gaXBfdnNfZGVzdF9jb25uX292ZXJoZWFkKGRlc3QpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX21oLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbWguYwppbmRleCAwMjA4NjMwNDc1NjJkLi5kNzBiMjNhZWM1ZmVjIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbWguYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbWguYwpAQCAtODAsNyAmIzQzOzgwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGdlbmVyYXRlX2hhc2hfc2VjcmV0KGhzaXBoYXNoX2tleV90ICpoYXNoMSwKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc191bmF2YWlsYWJsZShzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCkKIHsKIAlyZXR1cm4gYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt3ZWlnaHQpICZsdDs9IDAgfHwKLQkgICAgICAgZGVzdC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfREVTVF9GX09WRVJMT0FEOwomIzQzOwkgICAgICAgaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpOwogfQogCiAvKiBSZXR1cm5zIGhhc2ggdmFsdWUgZm9yIElQVlMgTUggZW50cnkgKi8KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19ucS5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX25xLmMKaW5kZXggYWRhMTU4YzYxMGNlMS4uN2NjMjg5MDIwODZlNyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX25xLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX25xLmMKQEAgLTcyLDcgJiM0Mzs3Miw3IEBAIGlwX3ZzX25xX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkZXN0LCAmYW1wO3N2Yy0mZ3Q7ZGVzdGluYXRpb25zLCBuX2xpc3QpIHsKIAotCQlpZiAoZGVzdC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfREVTVF9GX09WRVJMT0FEIHx8CiYjNDM7CQlpZiAoaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpIHx8CiAJCSAgICAhYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt3ZWlnaHQpKQogCQkJY29udGludWU7CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19vdmYuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19vdmYuYwppbmRleCBjNWM2N2RmODBhMGIzLi5lYWEzYTdhZTZlZmE2IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfb3ZmLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX292Zi5jCkBAIC0zMyw3ICYjNDM7MzMsNyBAQCBpcF92c19vdmZfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsICZhbXA7c3ZjLSZndDtkZXN0aW5hdGlvbnMsIG5fbGlzdCkgewogCQl3ID0gYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt3ZWlnaHQpOwotCQlpZiAoKGRlc3QtJmd0O2ZsYWdzICZhbXA7IElQX1ZTX0RFU1RfRl9PVkVSTE9BRCkgfHwKJiM0MzsJCWlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkgfHwKIAkJICAgIGF0b21pY19yZWFkKCZhbXA7ZGVzdC0mZ3Q7YWN0aXZlY29ubnMpICZndDsgdyB8fAogCQkgICAgdyA9PSAwKQogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcnIuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19yci5jCmluZGV4IDQxMjVlZTU2MWNkYzMuLmJkMTdjZGQwOTJmNWYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19yci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19yci5jCkBAIC02Niw3ICYjNDM7NjYsNyBAQCBpcF92c19ycl9zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShkZXN0LAogCQkJCQkJICZhbXA7c3ZjLSZndDtkZXN0aW5hdGlvbnMsCiAJCQkJCQkgbl9saXN0KSB7Ci0JCQlpZiAoIShkZXN0LSZndDtmbGFncyAmYW1wOyBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpICZhbXA7JmFtcDsKJiM0MzsJCQlpZiAoIWlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSAmYW1wOyZhbXA7CiAJCQkgICAgYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt3ZWlnaHQpICZndDsgMCkKIAkJCQkvKiBISVQgKi8KIAkJCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zZWQuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zZWQuYwppbmRleCAyNDVhMzIzYzg0Y2QzLi43OTI1ZjRkMjhmY2U5IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2VkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NlZC5jCkBAIC03NSw3ICYjNDM7NzUsNyBAQCBpcF92c19zZWRfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkgKi8KIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsICZhbXA7c3ZjLSZndDtkZXN0aW5hdGlvbnMsIG5fbGlzdCkgewotCQlpZiAoIShkZXN0LSZndDtmbGFncyAmYW1wOyBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpICZhbXA7JmFtcDsKJiM0MzsJCWlmICghaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpICZhbXA7JmFtcDsKIAkJICAgIGF0b21pY19yZWFkKCZhbXA7ZGVzdC0mZ3Q7d2VpZ2h0KSAmZ3Q7IDApIHsKIAkJCWxlYXN0ID0gZGVzdDsKIAkJCWxvaCA9IGlwX3ZzX3NlZF9kZXN0X292ZXJoZWFkKGxlYXN0KTsKQEAgLTkwLDcgJiM0Mzs5MCw3IEBAIGlwX3ZzX3NlZF9zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCSAqLwogICBuZXh0c3RhZ2U6CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yY3UoZGVzdCwgJmFtcDtzdmMtJmd0O2Rlc3RpbmF0aW9ucywgbl9saXN0KSB7Ci0JCWlmIChkZXN0LSZndDtmbGFncyAmYW1wOyBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpCiYjNDM7CQlpZiAoaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpKQogCQkJY29udGludWU7CiAJCWRvaCA9IGlwX3ZzX3NlZF9kZXN0X292ZXJoZWFkKGRlc3QpOwogCQlpZiAoKF9fczY0KWxvaCAqIGF0b21pY19yZWFkKCZhbXA7ZGVzdC0mZ3Q7d2VpZ2h0KSAmZ3Q7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2guYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zaC5jCmluZGV4IGNkNjcwNjZlM2IyNjEuLmMyNGRkNWNiN2U0NzggMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zaC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zaC5jCkBAIC03Myw3ICYjNDM7NzMsNyBAQCBzdHJ1Y3QgaXBfdnNfc2hfc3RhdGUgewogc3RhdGljIGlubGluZSBib29sIGlzX3VuYXZhaWxhYmxlKHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KQogewogCXJldHVybiBhdG9taWNfcmVhZCgmYW1wO2Rlc3QtJmd0O3dlaWdodCkgJmx0Oz0gMCB8fAotCSAgICAgICBkZXN0LSZndDtmbGFncyAmYW1wOyBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQ7CiYjNDM7CSAgICAgICBpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfdHdvcy5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3R3b3MuYwppbmRleCBkYmI3ZjVmZDQ2ODhhLi44NjE4NjEyMmExZjAxIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfdHdvcy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c190d29zLmMKQEAgLTUyLDcgJiM0Mzs1Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgaXBfdnNfZGVzdCAqaXBfdnNfdHdvc19zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLAogCiAJLyogR2VuZXJhdGUgYSByYW5kb20gd2VpZ2h0IGJldHdlZW4gWzAsc3VtIG9mIGFsbCB3ZWlnaHRzKSAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsICZhbXA7c3ZjLSZndDtkZXN0aW5hdGlvbnMsIG5fbGlzdCkgewotCQlpZiAoIShkZXN0LSZndDtmbGFncyAmYW1wOyBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpKSB7CiYjNDM7CQlpZiAoIWlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSkgewogCQkJd2VpZ2h0ID0gYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt3ZWlnaHQpOwogCQkJaWYgKHdlaWdodCAmZ3Q7IDApIHsKIAkJCQl0b3RhbF93ZWlnaHQgJiM0Mzs9IHdlaWdodDsKQEAgLTc1LDcgJiM0Mzs3NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgaXBfdnNfZGVzdCAqaXBfdnNfdHdvc19zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLAogCiAJLyogUGljayB0d28gd2VpZ2h0ZWQgc2VydmVycyAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsICZhbXA7c3ZjLSZndDtkZXN0aW5hdGlvbnMsIG5fbGlzdCkgewotCQlpZiAoZGVzdC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfREVTVF9GX09WRVJMT0FEKQomIzQzOwkJaWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSkKIAkJCWNvbnRpbnVlOwogCiAJCXdlaWdodCA9IGF0b21pY19yZWFkKCZhbXA7ZGVzdC0mZ3Q7d2VpZ2h0KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c193bGMuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c193bGMuYwppbmRleCA5ZGE0NDVjYTA5YTE0Li4wOGU5ZTIyZjcyYmY4IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd2xjLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3dsYy5jCkBAIC00Nyw3ICYjNDM7NDcsNyBAQCBpcF92c193bGNfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkgKi8KIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsICZhbXA7c3ZjLSZndDtkZXN0aW5hdGlvbnMsIG5fbGlzdCkgewotCQlpZiAoIShkZXN0LSZndDtmbGFncyAmYW1wOyBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpICZhbXA7JmFtcDsKJiM0MzsJCWlmICghaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpICZhbXA7JmFtcDsKIAkJICAgIGF0b21pY19yZWFkKCZhbXA7ZGVzdC0mZ3Q7d2VpZ2h0KSAmZ3Q7IDApIHsKIAkJCWxlYXN0ID0gZGVzdDsKIAkJCWxvaCA9IGlwX3ZzX2Rlc3RfY29ubl9vdmVyaGVhZChsZWFzdCk7CkBAIC02Miw3ICYjNDM7NjIsNyBAQCBpcF92c193bGNfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkgKi8KICAgbmV4dHN0YWdlOgogCWxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmN1KGRlc3QsICZhbXA7c3ZjLSZndDtkZXN0aW5hdGlvbnMsIG5fbGlzdCkgewotCQlpZiAoZGVzdC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfREVTVF9GX09WRVJMT0FEKQomIzQzOwkJaWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSkKIAkJCWNvbnRpbnVlOwogCQlkb2ggPSBpcF92c19kZXN0X2Nvbm5fb3ZlcmhlYWQoZGVzdCk7CiAJCWlmICgoX19zNjQpbG9oICogYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt3ZWlnaHQpICZndDsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c193cnIuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c193cnIuYwppbmRleCAyZGNmZjEwNDBkYTUyLi5mYWQ2OWJhZTVhMjJiIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd3JyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3dyci5jCkBAIC0xNzYsNyAmIzQzOzE3Niw3IEBAIGlwX3ZzX3dycl9zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShkZXN0LAogCQkJCQkJICZhbXA7c3ZjLSZndDtkZXN0aW5hdGlvbnMsCiAJCQkJCQkgbl9saXN0KSB7Ci0JCQlpZiAoIShkZXN0LSZndDtmbGFncyAmYW1wOyBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpICZhbXA7JmFtcDsKJiM0MzsJCQlpZiAoIWlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSAmYW1wOyZhbXA7CiAJCQkgICAgYXRvbWljX3JlYWQoJmFtcDtkZXN0LSZndDt3ZWlnaHQpICZndDs9IG1hcmstJmd0O2N3KQogCQkJCWdvdG8gZm91bmQ7CiAJCQlpZiAoZGVzdCA9PSBzdG9wKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM1MgoJCQkJCQkJb3V0cHV0OiA2NQoJCQkJCQkJdGhvdWdodHM6IDU1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQVlMgUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgYXNzZXNzIHRoZSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlLCBzcGVjaWZpY2FsbHkgd2l0aCBhbiBleWUgdG93YXJkcyB3aGV0aGVyIGEgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIHdhcnJhbnRlZC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgYHN0cnVjdCBpcF92c19kZXN0YCBhbmQgaG93IGl0cyBmaWVsZHMgYXJlIGhhbmRsZWQsIGVzcGVjaWFsbHkgYWZ0ZXIgdGhlc2UgY2hhbmdlcy4KCkZpcnN0LCB0aGUgY29yZSBjaGFuZ2VzLiBUaGUgYCNkZWZpbmUgSVBfVlNfREVTVF9GX09WRVJMT0FEYCBpcyBnb25lLCB3aGljaCBzdWdnZXN0cyBhIHNoaWZ0IGF3YXkgZnJvbSBiaXRmaWVsZHMuIFRoZSBgc3RydWN0IGlwX3ZzX2Rlc3RgIGl0c2VsZiBoYXMgYmVlbiByZW9yZ2FuaXplZCwgcmVtb3ZpbmcgdGhlIGB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgZmxhZ3NgIGFuZCByZW9yZGVyaW5nIGZvciBjYWNoZWxpbmUgYWxpZ25tZW50IGFuZCBwYWNraW5nLiBUaGF0JiMzOTtzIGEgc3RhbmRhcmQgb3B0aW1pemF0aW9uLCBidXQgdGhlIGFkZGl0aW9uIG9mIGB1MzIgdV90aHJlc2hvbGRfdmFsYCBhbmQgdGhlIGlubGluZSBoZWxwZXIgYGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZCgpYCBhcmUga2V5LiBUaGUgb3ZlcmxvYWQgbG9naWMgc2VlbXMgdG8gYmUgbm93IGJhc2VkIGVudGlyZWx5IG9uIHRoZXNlIHRocmVzaG9sZCB2YWx1ZXMgKGBsX3RocmVzaG9sZF92YWxgIGFuZCBgdV90aHJlc2hvbGRfdmFsYCkuIFRoZSBgaXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWRgIHNpZ25hdHVyZSBjaGFuZ2VkIHRvby4gVGhpcyBpcyBhbGwgZ29vZCwgY2xlYW4gY29kZSwgYnV0IGl0IG5lZWRzIHRvIGJlIHVuZGVyc3Rvb2QuCgpMb29raW5nIGF0IHRoZSBjb2RlIHV0aWxpemluZyB0aGUgc3RydWN0dXJlLCBzcGVjaWZpY2FsbHkgYGlwX3ZzX2Nvbm4uY2AsIHdlIHNlZSB0aGUgb3ZlcmxvYWQgbG9naWMgaW4gYGlwX3ZzX2JpbmRfZGVzdGAgYW5kIGBpcF92c191bmJpbmRfZGVzdGAuIFRoZSBjb21wYXJpc29ucyBhZ2FpbnN0IGBSRUFEX09OQ0UoZGVzdC0mZ3Q7dV90aHJlc2hvbGRfdmFsKWAgYW5kIGBSRUFEX09OQ0UoZGVzdC0mZ3Q7bF90aHJlc2hvbGRfdmFsKWAgYW5kIHN1YnNlcXVlbnQgY2FsbHMgdG8gYGlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkYCBhcmUgY2xlYXIgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBuZXcgb3ZlcmxvYWQgbWVjaGFuaXNtLiBUaGUgZGVmaW5pdGlvbiBvZiB0aGUgdGhyZXNob2xkcyBhcmUgaGFuZGxlZCBpbiBgaXBfdnNfY3RsLmNgLCBhbmQgdGhlIG5ldyBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIG92ZXJsb2FkIGJ5IHJlYWRpbmcgdGhlIHJlc3BlY3RpdmUgdGhyZXNob2xkcy4KClRoZSBjcnVjaWFsIG5leHQgc3RlcCBpcyB0byB1bmRlcnN0YW5kIGhvdyBgc3RydWN0IGlwX3ZzX2Rlc3RgIGlzIGFsbG9jYXRlZCwgaW5pdGlhbGl6ZWQsIGFuZCwgbW9zdCBpbXBvcnRhbnRseSwgaWYgYW55IG9mIGl0cyBjb250ZW50cyBhcmUgZXZlciBjb3BpZWQgdG8gdXNlciBzcGFjZS4gSWYgd2UgYXJlIHBhc3NpbmcgdGhpcyBzdHJ1Y3R1cmUgaW50byB1c2VyLXNwYWNlLCBhIHNlY3VyaXR5IGJ1ZyBpcyBpbnRyb2R1Y2VkIGlmIHRoZXJlIGlzIGFueSBtZW1vcnkgbGVhayBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGlzIGlzIHdoZXJlIGBncmVwcGVyYCB3aWxsIGNvbWUgaW4gaGFuZHkuIEkmIzM5O2xsIHNlYXJjaCBmb3IgYWxsb2NhdGlvbnMgb2YgYGlwX3ZzX2Rlc3RgIGFuZCBhbnkgaW5zdGFuY2VzIHdoZXJlIGl0cyBkYXRhIGlzIGV4cG9zZWQgdmlhIGBnZXRzb2Nrb3B0YCwgbmV0bGluaywgb3IgYW55IG90aGVyIG1lYW5zIG9mIGNvbW11bmljYXRpbmcgaW5mb3JtYXRpb24gdG8gdXNlciBzcGFjZS4gTXkgYXNzdW1wdGlvbiBpcyB0aGF0IHRoZSBkYXRhIHdpbGwgYmUgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBzbyB0aGF0IGlzIHRoZSBrZXkuIFRoZW4gSSBuZWVkIHRvIGludmVzdGlnYXRlIGlmIHRoZXJlIGlzIGFueSBpbml0aWFsaXphdGlvbi4KCk15IHN1c3BpY2lvbiBpcyB0aGlzIHdpbGwgYmUgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZywgZGVwZW5kaW5nIG9uIGhvdyB0aGlzIHN0cnVjdCBpcyBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtremFsbG9jLippcF92c19kZXN0fGlwX3ZzX2Rlc3RfbmV3fGlwX3ZzX2dlbmxfZHVtcF9kZXN0fGlwX3ZzX2dlbmxfZ2V0X2Rlc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTE0NDM9aXBfdnNfbmV3X2Rlc3Qoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2Yywgc3RydWN0IGlwX3ZzX2Rlc3RfdXNlcl9rZXJuICp1ZGVzdClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMTQ2Ny1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoxNDY4Olx0ZGVzdCA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBpcF92c19kZXN0KTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xNDY5LVx0aWYgKGRlc3QgPT0gTlVMTClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9NDMwNT1zdGF0aWMgaW50IGlwX3ZzX2dlbmxfZmlsbF9kZXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00MzUzLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjQzNTQ6c3RhdGljIGludCBpcF92c19nZW5sX2R1bXBfZGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00MzU1LVx0XHRcdFx0c3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00Mzc1LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjQzNzY6c3RhdGljIGludCBpcF92c19nZW5sX2R1bXBfZGVzdHMoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00Mzc3LVx0XHRcdFx0IHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDQwMS1cdFx0XHRjb250aW51ZTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzo0NDAyOlx0XHRpZiAoaXBfdnNfZ2VubF9kdW1wX2Rlc3Qoc2tiLCBkZXN0LCBjYikgXHUwMDNjIDApIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00NDAzLVx0XHRcdGlkeC0tO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz00OTE0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgaXBfdnNfZ2VubF9vcHNbXSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDk2MS1cdFx0LmZsYWdzXHQ9IEdFTkxfQURNSU5fUEVSTSxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzo0OTYyOlx0XHQuZHVtcGl0XHQ9IGlwX3ZzX2dlbmxfZHVtcF9kZXN0cyxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00OTYzLVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExNzkKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyOgoKKipEaWdnaW5nIGludG8gdGhlIGBpcF92c19jdGwuY2AgS2VybmVsIENvZGUqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHdheSB0aGVzZSBkZXN0aW5hdGlvbiBhbmQgc29ja2V0IG9wdGlvbiBmdW5jdGlvbmFsaXRpZXMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBJUCBWaXJ0dWFsIFNlcnZlciAoSVBWUykgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBgaXBfdnNfY3RsLmNgLiBJIG5lZWQgdG8gemVybyBpbiBvbiBwb3RlbnRpYWwgYXJlYXMgd2hlcmUgZGF0YSBtaWdodCBiZSBpbmNvcnJlY3RseSBjb3BpZWQgb3IgaGFuZGxlZC4KCk15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiB0aGUgYGlwX3ZzX25ld19kZXN0YCBhbmQgYGlwX3ZzX2dlbmxfZmlsbF9kZXN0YCBmdW5jdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gbWV0aWN1bG91c2x5IGV4YW1pbmUgaG93IGRhdGEgaXMgZmV0Y2hlZCBvciBwbGFjZWQgaW4gdGhlcmUsIGJlY2F1c2UgaW5jb3JyZWN0IGNvcHlpbmcgaW4gdGhvc2UgYXJlYXMgY291bGQgbWFuaWZlc3QgaW4gc3RyYW5nZSB3YXlzLCBhbmQgdGhvc2UgZnVuY3Rpb25zIGxvb2sgbGlrZSBsaWtlbHkgcGxhY2VzLiBIb3dldmVyLCBJJiMzOTttIG5vdCBnb2luZyB0byBzdG9wIHRoZXJlLiBJIGFsc28gbmVlZCB0byBicm9hZGVuIHRoZSBzY29wZSBhbmQgYmUgc3VyZSBJIGNvdmVyIGFueSBvdGhlciBnZXRzb2Nrb3B0IGNvcHlpbmcgY29kZSB3aXRoaW4gYGlwX3ZzX2N0bC5jYCB0aGF0IGNvdWxkIGFsc28gbGVhZCB0byBpc3N1ZXMuIEl0JiMzOTtzIGJlc3QgdG8gYmUgdGhvcm91Z2ggYXQgdGhpcyBzdGFnZS4gSSYjMzk7bGwgcmV2aWV3IHRob3NlIHNlY3Rpb25zIHRvIHNlZSBpZiB0aGV5JiMzOTtyZSByZWxldmFudCwgdG9vLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQ2MDpcdFx0fSBlbHNlXG4xNDYxOlx0I2VuZGlmXG4xNDYyOlx0XHR7XG4xNDYzOlx0XHRcdGF0eXBlID0gaW5ldF9hZGRyX3R5cGUoc3ZjLVx1MDAzZWlwdnMtXHUwMDNlbmV0LCB1ZGVzdC1cdTAwM2VhZGRyLmlwKTtcbjE0NjQ6XHRcdFx0aWYgKGF0eXBlICE9IFJUTl9MT0NBTCBcdTAwMjZcdTAwMjYgYXR5cGUgIT0gUlROX1VOSUNBU1QpXG4xNDY1Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNDY2Olx0XHR9XG4xNDY3Olx0XG4xNDY4Olx0XHRkZXN0ID0ga3phbGxvY19vYmooc3RydWN0IGlwX3ZzX2Rlc3QpO1xuMTQ2OTpcdFx0aWYgKGRlc3QgPT0gTlVMTClcbjE0NzA6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xNDcxOlx0XG4xNDcyOlx0XHRyZXQgPSBpcF92c19zdGF0c19pbml0X2FsbG9jKFx1MDAyNmRlc3QtXHUwMDNlc3RhdHMpO1xuMTQ3MzpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjE0NzQ6XHRcdFx0Z290byBlcnJfYWxsb2M7XG4xNDc1Olx0XG4xNDc2Olx0XHRyZXQgPSBpcF92c19zdGFydF9lc3RpbWF0b3Ioc3ZjLVx1MDAzZWlwdnMsIFx1MDAyNmRlc3QtXHUwMDNlc3RhdHMpO1xuMTQ3NzpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjE0Nzg6XHRcdFx0Z290byBlcnJfc3RhdHM7XG4xNDc5Olx0XG4xNDgwOlx0XHRkZXN0LVx1MDAzZWFmID0gdWRlc3QtXHUwMDNlYWY7XG4xNDgxOlx0XHRkZXN0LVx1MDAzZXByb3RvY29sID0gc3ZjLVx1MDAzZXByb3RvY29sO1xuMTQ4MjpcdFx0ZGVzdC1cdTAwM2V2YWRkciA9IHN2Yy1cdTAwM2VhZGRyO1xuMTQ4MzpcdFx0ZGVzdC1cdTAwM2V2cG9ydCA9IHN2Yy1cdTAwM2Vwb3J0O1xuMTQ4NDpcdFx0ZGVzdC1cdTAwM2V2ZndtYXJrID0gc3ZjLVx1MDAzZWZ3bWFyaztcbjE0ODU6XHRcdGlwX3ZzX2FkZHJfY29weSh1ZGVzdC1cdTAwM2VhZiwgXHUwMDI2ZGVzdC1cdTAwM2VhZGRyLCBcdTAwMjZ1ZGVzdC1cdTAwM2VhZGRyKTtcbjE0ODY6XHRcdGRlc3QtXHUwMDNlcG9ydCA9IHVkZXN0LVx1MDAzZXBvcnQ7XG4xNDg3Olx0XG4xNDg4Olx0XHRhdG9taWNfc2V0KFx1MDAyNmRlc3QtXHUwMDNlYWN0aXZlY29ubnMsIDApO1xuMTQ4OTpcdFx0YXRvbWljX3NldChcdTAwMjZkZXN0LVx1MDAzZXRvdGFsY29ubnMsIDApO1xuMTQ5MDpcdFx0YXRvbWljX3NldChcdTAwMjZkZXN0LVx1MDAzZXBlcnNpc3Rjb25ucywgMCk7XG4xNDkxOlx0XHRyZWZjb3VudF9zZXQoXHUwMDI2ZGVzdC1cdTAwM2VyZWZjbnQsIDEpO1xuMTQ5MjpcdFxuMTQ5MzpcdFx0SU5JVF9ITElTVF9OT0RFKFx1MDAyNmRlc3QtXHUwMDNlZF9saXN0KTtcbjE0OTQ6XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNmRlc3QtXHUwMDNlZHN0X2xvY2spO1xuMTQ5NTpcdFx0X19pcF92c191cGRhdGVfZGVzdChzdmMsIGRlc3QsIHVkZXN0LCAxKTtcbjE0OTY6XHRcbjE0OTc6XHRcdHJldHVybiAwO1xuMTQ5ODpcdFxuMTQ5OTpcdGVycl9zdGF0czpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxMTcKCQkJCQkJCW91dHB1dDogNTQKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBEZWVwZXIgaW50byBJUFZTIERlc3RpbmF0aW9uIEhhbmRsaW5nKioKCkFscmlnaHQsIGdpdmVuIHRoZSBjb250ZXh0LCBJIHRoaW5rIGl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhlIG5pdHR5LWdyaXR0eSBvZiBob3cgSVBWUyBtYW5hZ2VzIGRlc3RpbmF0aW9uIGVudHJpZXMuIEkmIzM5O20gZ29pbmcgdG8gc2hpZnQgbXkgZm9jdXMgdG8gdGhvc2UgY29yZSBmdW5jdGlvbnMg4oCTIGBpcF92c19nZW5sX2ZpbGxfZGVzdGAgYW5kIGBpcF92c19jb3B5X2Rlc3RfZW50cnlgLiBJIHdhbnQgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCBhbmQgaG93IHRoZXkmIzM5O3JlIGJlaW5nIHBvcHVsYXRlZCBhbmQgbW9kaWZpZWQuCgpUaGUgYGdldHNvY2tvcHRgIGhhbmRsZXJzIGFyZSBhbHNvIHJlbGV2YW50IGFuZCBuZWVkIGEgY2xvc2VyIGxvb2sgYmVjYXVzZSB0aGV5IHJlcHJlc2VudCBleHRlcm5hbCBhY2Nlc3MgdG8gdGhlIGRlc3RpbmF0aW9uIGRhdGEuIEkgbmVlZCB0byBzZWUgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCBgaXBfdnNfZ2VubF9maWxsX2Rlc3RgIGFuZCBgaXBfdnNfY29weV9kZXN0X2VudHJ5YCwgZW5zdXJpbmcgY29uc2lzdGVuY3kgYW5kIHRoYXQgbm8gdW5leHBlY3RlZCBpbmZvcm1hdGlvbiBsZWFrcyBvY2N1ciB0aHJvdWdoIHRoZXNlIGhhbmRsZXJzLiBJIG5lZWQgdG8gaWRlbnRpZnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBjb25jdXJyZW5jeSBpc3N1ZXMgaW4gbWFuaXB1bGF0aW5nIHRoZXNlIGRlc3RpbmF0aW9uIGVudHJpZXMuIFBlcmhhcHMgdGhlcmUgYXJlIGRhdGEgYWNjZXNzIG9yIGxvY2tpbmcgc3VidGxldGllcyBpbiB0aGUgYGdldHNvY2tvcHRgIGhhbmRsZXIgdGhhdCBhcmUgY2F1c2luZyBhIHByb2JsZW0uIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGRhdGEgZmxvdyBhbmQgbG9vayBmb3IgcG90ZW50aWFsIHdlYWtuZXNzZXMgb3IgdnVsbmVyYWJpbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF92c19kZXN0X2VudHJ5fGlwX3ZzX2dlbmxfZmlsbF9kZXN0fGlwX3ZzX2dldF9kZXN0cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MzY4MD1zdGF0aWMgaW5saW5lIGludFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjM2ODE6X19pcF92c19nZXRfZGVzdF9lbnRyaWVzKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBjb25zdCBzdHJ1Y3QgaXBfdnNfZ2V0X2Rlc3RzICpnZXQsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MzY4MjpcdFx0XHQgc3RydWN0IGlwX3ZzX2dldF9kZXN0cyBfX3VzZXIgKnVwdHIpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzY4My17XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTM2OTgtXHRcdHN0cnVjdCBpcF92c19kZXN0ICpkZXN0O1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjM2OTk6XHRcdHN0cnVjdCBpcF92c19kZXN0X2VudHJ5IGVudHJ5O1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTM3MDAtXHRcdHN0cnVjdCBpcF92c19rc3RhdHMga3N0YXRzO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0zNzU3PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGdldF9hcmdsZW5bQ01ESUQoSVBfVlNfU09fR0VUX01BWCkgJiM0MzsgMV0gPSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTM3NjEtXHRbQ01ESUQoSVBfVlNfU09fR0VUX1NFUlZJQ0UpXSAgPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3NlcnZpY2VfZW50cnkpLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjM3NjI6XHRbQ01ESUQoSVBfVlNfU09fR0VUX0RFU1RTKV0gICAgPSBzaXplb2Yoc3RydWN0IGlwX3ZzX2dldF9kZXN0cyksXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzc2My1cdFtDTURJRChJUF9WU19TT19HRVRfVElNRU9VVCldICA9IHNpemVvZihzdHJ1Y3QgaXBfdnNfdGltZW91dF91c2VyKSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9Mzc2Nz11bmlvbiBpcF92c19nZXRfYXJnbGVuIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzc3MS1cdHN0cnVjdCBpcF92c19zZXJ2aWNlX2VudHJ5XHRmaWVsZF9JUF9WU19TT19HRVRfU0VSVklDRTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzozNzcyOlx0c3RydWN0IGlwX3ZzX2dldF9kZXN0c1x0XHRmaWVsZF9JUF9WU19TT19HRVRfREVTVFM7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzc3My1cdHN0cnVjdCBpcF92c190aW1lb3V0X3VzZXJcdGZpZWxkX0lQX1ZTX1NPX0dFVF9USU1FT1VUO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0zNzgwPWRvX2lwX3ZzX2dldF9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB2b2lkIF9fdXNlciAqdXNlciwgaW50ICpsZW4pXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTM5MTQtXHR7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MzkxNTpcdFx0c3RydWN0IGlwX3ZzX2dldF9kZXN0cyAqZ2V0O1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTM5MTYtXHRcdHNpemVfdCBzaXplO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTM5MTctXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MzkxODpcdFx0Z2V0ID0gKHN0cnVjdCBpcF92c19nZXRfZGVzdHMgKilhcmc7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzkxOS1cdFx0c2l6ZSA9IHN0cnVjdF9zaXplKGdldCwgZW50cnl0YWJsZSwgZ2V0LVx1MDAzZW51bV9kZXN0cyk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTQyOTQ9c3RhdGljIHN0cnVjdCBpcF92c19zZXJ2aWNlICppcF92c19nZW5sX2ZpbmRfc2VydmljZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDMwNC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzo0MzA1OnN0YXRpYyBpbnQgaXBfdnNfZ2VubF9maWxsX2Rlc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDMwNi17XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTQzNTQ9c3RhdGljIGludCBpcF92c19nZW5sX2R1bXBfZGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDM2NC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzo0MzY1Olx0aWYgKGlwX3ZzX2dlbmxfZmlsbF9kZXN0KHNrYiwgZGVzdCkgXHUwMDNjIDApXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDM2Ni1cdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjI4CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIElQVlMgQ29udHJvbCBQbGFuZSoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgdW5kZXJzdGFuZCBob3cgdGhlc2UgSVBWUyBkZXN0aW5hdGlvbnMgYXJlIGhhbmRsZWQgYXQgdGhlIGNvbnRyb2wgcGxhbmUgbGV2ZWwuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgaXBfdnNfY3RsLmNgIGZpbGUgYW5kIHNwZWNpZmljYWxseSBmb2N1cyBvbiB0aGUgZnVuY3Rpb25zIGBpcF92c19nZW5sX2ZpbGxfZGVzdGAgYW5kIGBfX2lwX3ZzX2dldF9kZXN0X2VudHJpZXNgLiBUaGVzZSBuYW1lcyBhcmUgcHJldHR5IGRlc2NyaXB0aXZlLCBzbyBJJiMzOTttIGV4cGVjdGluZyBgaXBfdnNfZ2VubF9maWxsX2Rlc3RgIHRvIGJlIHJlc3BvbnNpYmxlIGZvciBwb3B1bGF0aW5nIHRoZSBkZXN0aW5hdGlvbiBpbmZvcm1hdGlvbiwgcHJvYmFibHkgdXNpbmcgR2VuZXJpYyBOZXRsaW5rLCBhbmQgYF9faXBfdnNfZ2V0X2Rlc3RfZW50cmllc2Agc2hvdWxkIGJlIHRoZSBsb3dlci1sZXZlbCBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5IHJldHJpZXZlcyB0aGlzIGRlc3RpbmF0aW9uIGRhdGEuIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBob3cgdGhlc2Ugd29yayB0b2dldGhlciB0byBwcm92aWRlIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gZm9yIHRoZSB1c2VyIHNwYWNlIGNvbnRyb2wgdXRpbGl0eSB0byBtYW5hZ2UgdGhlIGxvYWQgYmFsYW5jaW5nIGRlc3RpbmF0aW9ucy4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSBpbnRlcmFjdCBhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiB1bmRlciB0aGUgaG9vZC4gSSB3YW50IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBvcHRpbWl6YXRpb24gdGVjaG5pcXVlcywgb3IgcG9zc2libGUgYXJlYXMgb2YgaW1wcm92ZW1lbnQgaGVyZS4gVGhpcyBzaG91bGQgcHJvdmlkZSBzb21lIHNvbGlkIGluc2lnaHQgaW50byBob3cgSVBWUyBjb25maWd1cmVzIGFuZCBzdG9yZXMgZGVzdGluYXRpb24gZW50cmllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNjkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM2OTA6XHRcdFx0c3ZjID0gX19pcF92c19zdmNfZndtX2ZpbmQoaXB2cywgQUZfSU5FVCwgZ2V0LVx1MDAzZWZ3bWFyayk7XG4zNjkxOlx0XHRlbHNlXG4zNjkyOlx0XHRcdHN2YyA9IF9faXBfdnNfc2VydmljZV9maW5kKGlwdnMsIEFGX0lORVQsIGdldC1cdTAwM2Vwcm90b2NvbCwgXHUwMDI2YWRkcixcbjM2OTM6XHRcdFx0XHRcdFx0ICAgZ2V0LVx1MDAzZXBvcnQpO1xuMzY5NDpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4zNjk1Olx0XG4zNjk2Olx0XHRpZiAoc3ZjKSB7XG4zNjk3Olx0XHRcdGludCBjb3VudCA9IDA7XG4zNjk4Olx0XHRcdHN0cnVjdCBpcF92c19kZXN0ICpkZXN0O1xuMzY5OTpcdFx0XHRzdHJ1Y3QgaXBfdnNfZGVzdF9lbnRyeSBlbnRyeTtcbjM3MDA6XHRcdFx0c3RydWN0IGlwX3ZzX2tzdGF0cyBrc3RhdHM7XG4zNzAxOlx0XG4zNzAyOlx0XHRcdG1lbXNldChcdTAwMjZlbnRyeSwgMCwgc2l6ZW9mKGVudHJ5KSk7XG4zNzAzOlx0XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoZGVzdCwgXHUwMDI2c3ZjLVx1MDAzZWRlc3RpbmF0aW9ucywgbl9saXN0KSB7XG4zNzA0Olx0XHRcdFx0aWYgKGNvdW50IFx1MDAzZT0gZ2V0LVx1MDAzZW51bV9kZXN0cylcbjM3MDU6XHRcdFx0XHRcdGJyZWFrO1xuMzcwNjpcdFxuMzcwNzpcdFx0XHRcdC8qIENhbm5vdCBleHBvc2UgaGV0ZXJvZ2VuZW91cyBtZW1iZXJzIHZpYSBzb2Nrb3B0XG4zNzA4Olx0XHRcdFx0ICogaW50ZXJmYWNlXG4zNzA5Olx0XHRcdFx0ICovXG4zNzEwOlx0XHRcdFx0aWYgKGRlc3QtXHUwMDNlYWYgIT0gc3ZjLVx1MDAzZWFmKVxuMzcxMTpcdFx0XHRcdFx0Y29udGludWU7XG4zNzEyOlx0XG4zNzEzOlx0XHRcdFx0ZW50cnkuYWRkciA9IGRlc3QtXHUwMDNlYWRkci5pcDtcbjM3MTQ6XHRcdFx0XHRlbnRyeS5wb3J0ID0gZGVzdC1cdTAwM2Vwb3J0O1xuMzcxNTpcdFx0XHRcdGVudHJ5LmNvbm5fZmxhZ3MgPSBhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZWNvbm5fZmxhZ3MpO1xuMzcxNjpcdFx0XHRcdGVudHJ5LndlaWdodCA9IGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNld2VpZ2h0KTtcbjM3MTc6XHRcdFx0XHRlbnRyeS51X3RocmVzaG9sZCA9IFJFQURfT05DRShkZXN0LVx1MDAzZXVfdGhyZXNob2xkKTtcbjM3MTg6XHRcdFx0XHRlbnRyeS5sX3RocmVzaG9sZCA9IFJFQURfT05DRShkZXN0LVx1MDAzZWxfdGhyZXNob2xkKTtcbjM3MTk6XHRcdFx0XHRlbnRyeS5hY3RpdmVjb25ucyA9IGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNlYWN0aXZlY29ubnMpO1xuMzcyMDpcdFx0XHRcdGVudHJ5LmluYWN0Y29ubnMgPSBpcF92c19kZXN0X2luYWN0Y29ubnMoZGVzdCk7XG4zNzIxOlx0XHRcdFx0ZW50cnkucGVyc2lzdGNvbm5zID0gYXRvbWljX3JlYWQoXHUwMDI2ZGVzdC1cdTAwM2VwZXJzaXN0Y29ubnMpO1xuMzcyMjpcdFx0XHRcdGlwX3ZzX2NvcHlfc3RhdHMoXHUwMDI2a3N0YXRzLCBcdTAwMjZkZXN0LVx1MDAzZXN0YXRzKTtcbjM3MjM6XHRcdFx0XHRpcF92c19leHBvcnRfc3RhdHNfdXNlcihcdTAwMjZlbnRyeS5zdGF0cywgXHUwMDI2a3N0YXRzKTtcbjM3MjQ6XHRcdFx0XHRpZiAoY29weV90b191c2VyKFx1MDAyNnVwdHItXHUwMDNlZW50cnl0YWJsZVtjb3VudF0sXG4zNzI1Olx0XHRcdFx0XHRcdCBcdTAwMjZlbnRyeSwgc2l6ZW9mKGVudHJ5KSkpIHtcbjM3MjY6XHRcdFx0XHRcdHJldCA9IC1FRkFVTFQ7XG4zNzI3Olx0XHRcdFx0XHRicmVhaztcbjM3Mjg6XHRcdFx0XHR9XG4zNzI5Olx0XHRcdFx0Y291bnQmIzQzOyYjNDM7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDYxOAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBpcF92c19nZW5sX2ZpbGxfZGVzdGAqKgoKUmlnaHQsIGxldCYjMzk7cyBjaXJjbGUgYmFjayBhbmQgdGFrZSBhIGxvb2sgYXQgYGlwX3ZzX2dlbmxfZmlsbF9kZXN0YC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBkZXN0aW5hdGlvbiBmaWxsaW5nIGxvZ2ljIHdpdGhpbiB0aGUgZ2VuZXJpYyBuZXRsaW5rIGludGVyZmFjZSBpcyBmdW5jdGlvbmluZyBhcyBleHBlY3RlZC4gSXQmIzM5O3MgYSBjcml0aWNhbCBwaWVjZSBmb3IgcHJvcGVyIGZvcndhcmRpbmcgd2l0aGluIHRoZSBJUFZTIHNldHVwLCBzbyBhIGNvbXByZWhlbnNpdmUgcmV2aWV3IGlzIGluIG9yZGVyLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byBkYXRhIGludGVncml0eSwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIG9yIGFueSB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cy4gTWFraW5nIHN1cmUgdGhpcyBmdW5jdGlvbiBpcyBzb2xpZCBpcyBrZXkgZm9yIG92ZXJhbGwgc3RhYmlsaXR5IGFuZCBlZmZpY2llbnQgbG9hZCBiYWxhbmNpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDMwNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MzA1Olx0c3RhdGljIGludCBpcF92c19nZW5sX2ZpbGxfZGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcbjQzMDY6XHR7XG40MzA3Olx0XHRzdHJ1Y3QgbmxhdHRyICpubF9kZXN0O1xuNDMwODpcdFx0c3RydWN0IGlwX3ZzX2tzdGF0cyBrc3RhdHM7XG40MzA5Olx0XG40MzEwOlx0XHRubF9kZXN0ID0gbmxhX25lc3Rfc3RhcnRfbm9mbGFnKHNrYiwgSVBWU19DTURfQVRUUl9ERVNUKTtcbjQzMTE6XHRcdGlmICghbmxfZGVzdClcbjQzMTI6XHRcdFx0cmV0dXJuIC1FTVNHU0laRTtcbjQzMTM6XHRcbjQzMTQ6XHRcdGlmIChubGFfcHV0KHNrYiwgSVBWU19ERVNUX0FUVFJfQUREUiwgc2l6ZW9mKGRlc3QtXHUwMDNlYWRkciksIFx1MDAyNmRlc3QtXHUwMDNlYWRkcikgfHxcbjQzMTU6XHRcdCAgICBubGFfcHV0X2JlMTYoc2tiLCBJUFZTX0RFU1RfQVRUUl9QT1JULCBkZXN0LVx1MDAzZXBvcnQpIHx8XG40MzE2Olx0XHQgICAgbmxhX3B1dF91MzIoc2tiLCBJUFZTX0RFU1RfQVRUUl9GV0RfTUVUSE9ELFxuNDMxNzpcdFx0XHRcdChhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZWNvbm5fZmxhZ3MpIFx1MDAyNlxuNDMxODpcdFx0XHRcdCBJUF9WU19DT05OX0ZfRldEX01BU0spKSB8fFxuNDMxOTpcdFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSVBWU19ERVNUX0FUVFJfV0VJR0hULFxuNDMyMDpcdFx0XHRcdGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNld2VpZ2h0KSkgfHxcbjQzMjE6XHRcdCAgICBubGFfcHV0X3U4KHNrYiwgSVBWU19ERVNUX0FUVFJfVFVOX1RZUEUsXG40MzIyOlx0XHRcdCAgICAgICBkZXN0LVx1MDAzZXR1bl90eXBlKSB8fFxuNDMyMzpcdFx0ICAgIG5sYV9wdXRfYmUxNihza2IsIElQVlNfREVTVF9BVFRSX1RVTl9QT1JULFxuNDMyNDpcdFx0XHRcdCBkZXN0LVx1MDAzZXR1bl9wb3J0KSB8fFxuNDMyNTpcdFx0ICAgIG5sYV9wdXRfdTE2KHNrYiwgSVBWU19ERVNUX0FUVFJfVFVOX0ZMQUdTLFxuNDMyNjpcdFx0XHRcdGRlc3QtXHUwMDNldHVuX2ZsYWdzKSB8fFxuNDMyNzpcdFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSVBWU19ERVNUX0FUVFJfVV9USFJFU0gsXG40MzI4Olx0XHRcdFx0UkVBRF9PTkNFKGRlc3QtXHUwMDNldV90aHJlc2hvbGQpKSB8fFxuNDMyOTpcdFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSVBWU19ERVNUX0FUVFJfTF9USFJFU0gsXG40MzMwOlx0XHRcdFx0UkVBRF9PTkNFKGRlc3QtXHUwMDNlbF90aHJlc2hvbGQpKSB8fFxuNDMzMTpcdFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSVBWU19ERVNUX0FUVFJfQUNUSVZFX0NPTk5TLFxuNDMzMjpcdFx0XHRcdGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNlYWN0aXZlY29ubnMpKSB8fFxuNDMzMzpcdFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSVBWU19ERVNUX0FUVFJfSU5BQ1RfQ09OTlMsXG40MzM0Olx0XHRcdFx0aXBfdnNfZGVzdF9pbmFjdGNvbm5zKGRlc3QpKSB8fFxuNDMzNTpcdFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSVBWU19ERVNUX0FUVFJfUEVSU0lTVF9DT05OUyxcbjQzMzY6XHRcdFx0XHRhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZXBlcnNpc3Rjb25ucykpIHx8XG40MzM3Olx0XHQgICAgbmxhX3B1dF91MTYoc2tiLCBJUFZTX0RFU1RfQVRUUl9BRERSX0ZBTUlMWSwgZGVzdC1cdTAwM2VhZikpXG40MzM4Olx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuNDMzOTpcdFx0aXBfdnNfY29weV9zdGF0cyhcdTAwMjZrc3RhdHMsIFx1MDAyNmRlc3QtXHUwMDNlc3RhdHMpO1xuNDM0MDpcdFx0aWYgKGlwX3ZzX2dlbmxfZmlsbF9zdGF0cyhza2IsIElQVlNfREVTVF9BVFRSX1NUQVRTLCBcdTAwMjZrc3RhdHMpKVxuNDM0MTpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjQzNDI6XHRcdGlmIChpcF92c19nZW5sX2ZpbGxfc3RhdHM2NChza2IsIElQVlNfREVTVF9BVFRSX1NUQVRTNjQsIFx1MDAyNmtzdGF0cykpXG40MzQzOlx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuNDM0NDpcdFxuNDM0NTpcdFx0bmxhX25lc3RfZW5kKHNrYiwgbmxfZGVzdCk7XG40MzQ2Olx0XG40MzQ3Olx0XHRyZXR1cm4gMDtcbjQzNDg6XHRcbjQzNDk6XHRubGFfcHV0X2ZhaWx1cmU6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODEzCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNjI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSVBWUyBEZXN0aW5hdGlvbiBPdmVybG9hZCBUcmFja2luZyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kICpleGFjdGx5KiB3aGF0JiMzOTtzIGNoYW5naW5nLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGFuIG9wdGltaXphdGlvbiBhbmQgcmVmYWN0b3Jpbmcgb2YgaG93IElQVlMgdHJhY2tzIGRlc3RpbmF0aW9uIG92ZXJsb2FkLiBQcmV2aW91c2x5LCB0aGUgYElQX1ZTX0RFU1RfRl9PVkVSTE9BRGAgZmxhZyBpbiBgZGVzdC0mZ3Q7ZmxhZ3NgIHdhcyB0aGUgZ28tdG8gaW5kaWNhdG9yLiBUaGUgcGF0Y2ggcmVtb3ZlcyB0aGlzIGZsYWcsIGFuZCBpcyBnb2luZyB0byB1dGlsaXplIGBkZXN0LSZndDtsX3RocmVzaG9sZF92YWxgIGRpcmVjdGx5LiBDbGV2ZXIsIHVzaW5nIGEgbm9uLXplcm8gdmFsdWUgZm9yIGBsX3RocmVzaG9sZF92YWxgIGFzIHRoZSBvdmVybG9hZCBpbmRpY2F0b3IsIHdoaWNoIHNlZW1zIGxpa2UgYSBnb29kIGNob2ljZSB0byBvcHRpbWl6ZSB0aGUgY2FjaGUgbGluZXMuCgpJIGltbWVkaWF0ZWx5IHdhbnQgdG8gdmVyaWZ5IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIFNpbmNlIGBkZXN0YCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgd2hpY2ggY2FsbHMgYGt6YWxsb2NgLCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEnigJltIHRoaW5raW5nIHRoZXJlIGlzIGEgY2hhbmNlIHRoZXJlIGFyZSBzaWRlIGVmZmVjdHMuIEkgcmVjYWxsIGBremFsbG9jYCB6ZXJvLWluaXRpYWxpemVzIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgdHJ1ZSBmb3IgYHN0cnVjdCBpcF92c19kZXN0YC4KClNvLCB0aGUgbmV4dCBzdGVwIGlzIHRvIG1ha2Ugc3VyZSBgc3RydWN0IGlwX3ZzX2Rlc3RgIGlzIG5ldmVyIGNvcGllZCBkaXJlY3RseSB0byB1c2Vyc3BhY2UuIEdvb2QsIGZyb20gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVsZXZhbnQgY29kZSwgYF9faXBfdnNfZ2V0X2Rlc3RfZW50cmllc2AgYW5kIGdlbmVyaWMgbmV0bGluaywgb25seSBpbmRpdmlkdWFsIGZpZWxkcyBhcmUgY29waWVkLCBhbmQgdGhvc2UgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBUaGF0JiMzOTtzIGEgaHVnZSByZWxpZWYuIE5vIG5ldyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgYmVpbmcgZXhwb3NlZCwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgYnJhbmNoZWQgdXBvbi4gVGhlIHBhdGNoJiMzOTtzIGNob2ljZSB0byB6ZXJvLWluaXRpYWxpemUgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZvciBgZGVzdGAgaXMgc291bmQgYW5kIGl0JiMzOTtzIGFsc28gZ29vZCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZXhwbGljaXRseSBzZXQgb3IgdXBkYXRlZCBhZnRlciBhbGxvY2F0aW9uLgoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIHNjaGVkdWxlciBpbnRlcmFjdGlvbnMuIEkgc2VlIHRoYXQgdGhlIGNvZGUgc2ltcGx5IHJlcGxhY2VzIGAoZGVzdC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfREVTVF9GX09WRVJMT0FEKWAgY2hlY2tzIHdpdGggYGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KWAuIFRoYXQgc2hvdWxkIGJlIGEgc3RyYWlnaHRmb3J3YXJkIHN1YnN0aXR1dGlvbiBhcyBsb25nIGFzIHRoZSBzZW1hbnRpY3MgYXJlIGlkZW50aWNhbC4gSSB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZSBgaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkYCBmdW5jdGlvbiBjb3JyZWN0bHkgcmVmbGVjdHMgdGhlIG92ZXJsb2FkIHN0YXRlIGJhc2VkIG9uIHRoZSBuZXcgYGxfdGhyZXNob2xkX3ZhbGAgYXBwcm9hY2guIEl0JiMzOTtzIHVzaW5nIGAmbHQ7PWAgYW5kIGAmZ3Q7PWAgd2l0aCBgbF90aHJlc2hvbGRfdmFsYCBhbmQgYHVfdGhyZXNob2xkX3ZhbGAgaW4gYGlwX3ZzX2Nvbm4uY2AsIHdoaWNoIG1ha2VzIHNlbnNlLgoKRmluYWxseSwgSSBuZWVkIHRvIHBlcmZvcm0gYSBjb21wcmVoZW5zaXZlIHN3ZWVwIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGNoYW5nZSBpcyBjb250YWluZWQuIEkmIzM5O2xsIHNlYXJjaCB0aGUgY29kZSBmb3IgYW55IHVzZXMgb2YgYGxfdGhyZXNob2xkX3ZhbGAgb3IgYHVfdGhyZXNob2xkX3ZhbGAgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBwbGFjZXMgd2hlcmUgdGhpcyBjb3VsZCBjYXVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbnRyb2R1Y2UgdW5leHBlY3RlZCBiZWhhdmlvci4gSSYjMzk7bGwgbmVlZCB0byBkbyBhIGZ1bGwgZ3JlcCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7KGxfdGhyZXNob2xkX3ZhbHx1X3RocmVzaG9sZF92YWwpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9MTA4OT1pcF92c19iaW5kX2Rlc3Qoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTExNTItXHRcdHRjID0gYXRvbWljX2luY19yZXR1cm4oXHUwMDI2ZGVzdC1cdTAwM2V0b3RhbGNvbm5zKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTE1MzpcdFx0aWYgKHRjIFx1MDAzZT0gUkVBRF9PTkNFKGRlc3QtXHUwMDNldV90aHJlc2hvbGRfdmFsKSlcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTE1NC1cdFx0XHRpcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChkZXN0LCB0cnVlKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTEyMjA9c3RhdGljIGlubGluZSB2b2lkIGlwX3ZzX3VuYmluZF9kZXN0KHN0cnVjdCBpcF92c19jb25uICpjcClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEyNDUtXHRcdHRjID0gYXRvbWljX2ZldGNoX2RlYyhcdTAwMjZkZXN0LVx1MDAzZXRvdGFsY29ubnMpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMjQ2Olx0XHRpZiAodGMgXHUwMDNjPSBSRUFEX09OQ0UoZGVzdC1cdTAwM2VsX3RocmVzaG9sZF92YWwpKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMjQ3LVx0XHRcdGlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKGRlc3QsIGZhbHNlKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MTMxMj1zdGF0aWMgdm9pZCBfX2lwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKHN0cnVjdCBpcF92c19kZXN0ICpkZXN0LCBib29sIG92ZXJsb2FkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xMzIzLVx0XHRpZiAoY29ubnMgXHUwMDNlPSAob3ZlcmxvYWQgPyBsIDogdSkpIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoxMzI0Olx0XHRcdFdSSVRFX09OQ0UoZGVzdC1cdTAwM2V1X3RocmVzaG9sZF92YWwsIElOVF9NQVgpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjEzMjU6XHRcdFx0V1JJVEVfT05DRShkZXN0LVx1MDAzZWxfdGhyZXNob2xkX3ZhbCwgbCk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMTMyNi1cdFx0XHRyZXR1cm47XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTEzMjktXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MTMzMDpcdFdSSVRFX09OQ0UoZGVzdC1cdTAwM2V1X3RocmVzaG9sZF92YWwsIHUgPyA6IElOVF9NQVgpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjEzMzE6XHRXUklURV9PTkNFKGRlc3QtXHUwMDNlbF90aHJlc2hvbGRfdmFsLCAwKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xMzMyLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc3MjgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhpcyBjb2RlIGNoYW5nZS4gRmlyc3QsIEkgbmVlZCB0byBsb29rIGF0IHRoZSBgZmxhZ3NgIGZpZWxkIHdpdGhpbiB0aGUgYGlwX3ZzX2Rlc3RgIHN0cnVjdHVyZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzICpuZXcqIGFib3V0IGl0IHdpdGggdGhpcyBwYXRjaC4gV2FzIHRoZXJlIGFueXRoaW5nIHNldCBpbiBgZGVzdC0mZ3Q7ZmxhZ3NgIHByZXZpb3VzbHk/IEkmIzM5O20gZ29pbmcgdG8gY29uc3VsdCB0aGUgZGVmaW5pdGlvbiBvZiBgSVBfVlNfREVTVF9GX2AgdG8gY29uZmlybSB3aGF0IHdhcyBhbHJlYWR5IHRoZXJlLiBUaGlzIGlzIGFsbCBhYm91dCBlbnN1cmluZyBJIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhlc2UgZmxhZyBjaGFuZ2VzIG9uIGV4aXN0aW5nIGJlaGF2aW9yIGFuZCB3aGF0IG1pZ2h0IGhhdmUgYmVlbiBhZGRlZC4gSSBuZWVkIHRvIGJlIHByZWNpc2UsIG9yIEkmIzM5O2xsIGludHJvZHVjZSBhIHN1YnRsZSBidWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SVBfVlNfREVTVF9GXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTU4CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBJUF9WU19ERVNUX0ZfYCBGbGFnIFVzYWdlKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIGBJUF9WU19ERVNUX0ZfYCBmbGFnIGtpY2tpbmcgYXJvdW5kLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgYW5kIHdoZXJlIGl0JiMzOTtzIGFjdHVhbGx5IHVzZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgSVBWUyBpbXBsZW1lbnRhdGlvbi4gTXkgZmlyc3QgbW92ZSBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIHNvdXJjZSBjb2RlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggdGhlIG1vc3QgbGlrZWx5IHBsYWNlLCB3aGljaCBpcyB0aGUgYGluY2x1ZGUvbmV0L2lwX3ZzLmhgIGhlYWRlciBmaWxlLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciBkZWZpbmluZyBhbmQsIGhvcGVmdWxseSwgZG9jdW1lbnRpbmcgd2hhdCB0aGUgZmxhZyBldmVuICptZWFucyouCgpIb3dldmVyLCBJJiMzOTttIG5vdCBnb2luZyB0byBzdG9wIHRoZXJlLiBJIGtub3cgaG93IGVhc2lseSB0aGluZ3MgY2FuIGJlIGJ1cmllZCBvciBkZWZpbmVkIGluIG11bHRpcGxlIHBsYWNlcy4gU28sIGFmdGVyIGEgcXVpY2sgcGVlayBpbiBgaXBfdnMuaGAsIEkmIzM5O2xsIHVzZSBncmVwIG9yIGEgc2ltaWxhciB0b29sIHRvIHNjb3VyIHRoZSBlbnRpcmUga2VybmVsIHRyZWUuIEkmIzM5O20gbG9va2luZyBmb3IgKmFueSogaW5zdGFuY2Ugb2YgYElQX1ZTX0RFU1RfRl9gLCB0byBnZXQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuIEkgd2FudCB0byBzZWUgaG93IGl0JiMzOTtzIGJlaW5nIHNldCwgY2hlY2tlZCwgYW5kIG1vZGlmaWVkLiBDb250ZXh0IGlzIGtleSBoZXJlOyB0aGUgaGVhZGVyIGZpbGUgbGlrZWx5IG9ubHkgcHJvdmlkZXMgdGhlIHN0YXRpYyBkZWZpbml0aW9uIGFuZCBtYXliZSBzb21lIGJhc2ljIGRvY3VtZW50YXRpb24uIFRoZSByZWFsIG1lYXQgb2YgdGhlIHN0b3J5IGxpZXMgaW4gdGhlIHByYWN0aWNhbCBpbXBsZW1lbnRhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIGhhcyB0byBzYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SVBfVlNfREVTVF9GXyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MzExCgkJCQkJCQlvdXRwdXQ6IDIyOQoJCQkJCQkJdGhvdWdodHM6IDI0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSAmIzM0O0lQX1ZTX0RFU1RfRl9PVkVSTE9BRCYjMzQ7IEZsYWcqKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSBgSVBfVlNfREVTVF9GX09WRVJMT0FEYCB3YXMgaW5kZWVkIHRoZSBvbmx5IGZsYWcgaW4gcXVlc3Rpb24gaGVyZS4gTGV0JiMzOTtzIHJ1biB0aHJvdWdoIHRoZSBjaGVja2xpc3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLgoKRmlyc3QsIHRoZSBwb3NzaWJpbGl0eSBvZiBrZXJuZWwgc3RydWN0dXJlcyBiZWluZyBzZW50IGRpcmVjdGx5IHRvIHVzZXJzcGFjZSB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBCdXQsIHRoZSBjb2RlIGV4cGxpY2l0bHkgKmRvZXNuJiMzOTt0KiBkbyB0aGF0LiBUaGUgYHN0cnVjdCBpcF92c19kZXN0YCBpc24mIzM5O3QgZGlyZWN0bHkgZXhwb3NlZDsgZ2V0dGVycyBjb3B5IHNlbGVjdGVkLCBpbml0aWFsaXplZCBmaWVsZHMgaW50byB6ZXJvZWQgYnVmZmVycy4gVGhleSB1c2UgYG1lbXNldCgmYW1wO2VudHJ5LCAwLCAuLi4pYCBhbmQgaW5kaXZpZHVhbCBOZXRsaW5rIGF0dHJpYnV0ZXMsIHNvIHRoYXQmIzM5O3MgY292ZXJlZC4KCk5leHQsIGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IG1pZ2h0IHJlbHkgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEhtbSwgbG9va2luZyBhdCBpdCwgYWxsIGZpZWxkcyBvZiBgZGVzdGAgYXJlIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmooKWAsIHdoaWNoLCBhcyBJIHJlY2FsbCwgemVyb2VzIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LiBUaGV5JiMzOTtyZSBhbHNvIGluaXRpYWxpemVkIHdpdGhpbiBgaXBfdnNfbmV3X2Rlc3RgIG9yIGBfX2lwX3ZzX3VwZGF0ZV9kZXN0YC4gVGhhdCByZW1vdmVzIHRoaXMgY29uY2VybiB0b28uCgpUaGVuIHRoZXJlJiMzOTtzIHRoZSBjaGFuY2Ugb2YgYWxsb2NhdGlvbnMgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiB3aGVyZSBsYXRlciBjb2RlIHBhdGhzIG1pZ2h0IGFjY2VzcyB1bmluaXRpYWxpemVkIGRhdGEuIEhvd2V2ZXIsIHRoZXJlIGFyZW4mIzM5O3QgYW55IHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBUaGF0JiMzOTtzIGEgZ29vZCB0aGluZy4KCkZpbmFsbHksIGJvdW5kcyBjaGVja3Mgb3IgbG9naWMgdGhhdCBtaWdodCBhbGxvdyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzLiBUaGlzIGRvZXNuJiMzOTt0IHNlZW0gYXBwbGljYWJsZSBoZXJlLgoKQWxyaWdodCwgYWZ0ZXIgcmV2aWV3aW5nIGFsbCB0aGUgY3JpdGVyaWEsIGl0JiMzOTtzIGNsZWFyIHRoYXQgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgKmFueSogdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIERlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzbiYjMzk7dCByZXF1aXJlZC4gV2UgY2FuIGNvbmZpZGVudGx5IG1vdmUgZm9yd2FyZC4gSSYjMzk7bGwgcHJlcGFyZSB0aGUgY2FsbCB0byBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW9yZ2FuaXplcyBmaWVsZHMgaW4gYHN0cnVjdCBpcF92c19kZXN0YCBmb3IgYmV0dGVyIGNhY2hlbGluZSB1dGlsaXphdGlvbiBhbmQgcmVmYWN0b3JzIHRoZSBkZXN0aW5hdGlvbiBvdmVybG9hZCBzdGF0dXMgdHJhY2tpbmcgdG8gdXNlIGBsX3RocmVzaG9sZF92YWxgIC8gYHVfdGhyZXNob2xkX3ZhbGAgaW5zdGVhZCBvZiBgZGVzdC1cdTAwM2VmbGFnc2Agd2l0aCBgSVBfVlNfREVTVF9GX09WRVJMT0FEYC5cblxuQWxsIGBzdHJ1Y3QgaXBfdnNfZGVzdGAgaW5zdGFuY2VzIGFyZSB6ZXJvLWFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iaigpYCBhbmQgdGhlaXIgdGhyZXNob2xkIGZpZWxkcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdXBvbiBjcmVhdGlvbi4gVGhlIHN0cnVjdHVyZSBpdHNlbGYgaXMgbm90IGNvcGllZCB0byB1c2Vyc3BhY2UgYXMgYSByYXcgYmxvYjsgdXNlcnNwYWNlIHF1ZXJpZXMgc2VyaWFsaXplIGluZGl2aWR1YWwgZmllbGRzIG9yIHVzZSB6ZXJvZWQgaW50ZXJtZWRpYXRlIHN0cnVjdHVyZXMgKGBtZW1zZXRgIGluIGBfX2lwX3ZzX2dldF9kZXN0X2VudHJpZXNgIGFuZCBpbmRpdmlkdWFsIE5ldGxpbmsgYXR0cmlidXRlcyBpbiBgaXBfdnNfZ2VubF9maWxsX2Rlc3RgKS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgYnJhbmNoZWQgdXBvbi5cblxuQmVjYXVzZSB0aGUgY2hhbmdlcyBpbnRyb2R1Y2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW9yZ2FuaXplcyBmaWVsZHMgaW4gYHN0cnVjdCBpcF92c19kZXN0YCBmb3IgYmV0dGVyIGNhY2hlbGluZSB1dGlsaXphdGlvbiBhbmQgcmVmYWN0b3JzIHRoZSBkZXN0aW5hdGlvbiBvdmVybG9hZCBzdGF0dXMgdHJhY2tpbmcgdG8gdXNlIGBsX3RocmVzaG9sZF92YWxgIC8gYHVfdGhyZXNob2xkX3ZhbGAgaW5zdGVhZCBvZiBgZGVzdC1cdTAwM2VmbGFnc2Agd2l0aCBgSVBfVlNfREVTVF9GX09WRVJMT0FEYC5cblxuQWxsIGBzdHJ1Y3QgaXBfdnNfZGVzdGAgaW5zdGFuY2VzIGFyZSB6ZXJvLWFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iaigpYCBhbmQgdGhlaXIgdGhyZXNob2xkIGZpZWxkcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdXBvbiBjcmVhdGlvbi4gVGhlIHN0cnVjdHVyZSBpdHNlbGYgaXMgbm90IGNvcGllZCB0byB1c2Vyc3BhY2UgYXMgYSByYXcgYmxvYjsgdXNlcnNwYWNlIHF1ZXJpZXMgc2VyaWFsaXplIGluZGl2aWR1YWwgZmllbGRzIG9yIHVzZSB6ZXJvZWQgaW50ZXJtZWRpYXRlIHN0cnVjdHVyZXMgKGBtZW1zZXRgIGluIGBfX2lwX3ZzX2dldF9kZXN0X2VudHJpZXNgIGFuZCBpbmRpdmlkdWFsIE5ldGxpbmsgYXR0cmlidXRlcyBpbiBgaXBfdnNfZ2VubF9maWxsX2Rlc3RgKS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgYnJhbmNoZWQgdXBvbi5cblxuQmVjYXVzZSB0aGUgY2hhbmdlcyBpbnRyb2R1Y2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjEwOjE3LjU1MDQ1MzA4NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTYwOTAzMTkxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9WU1wiLFxuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWRcIixcbiAgICBcImlwX3ZzX2JpbmRfZGVzdFwiLFxuICAgIFwiaXBfdnNfdW5iaW5kX2Rlc3RcIixcbiAgICBcIl9faXBfdnNfdXBkYXRlX2Rlc3RcIixcbiAgICBcImlwX3ZzX2VkaXRfZGVzdFwiLFxuICAgIFwiaXBfdnNfYWRkX2Rlc3RcIixcbiAgICBcImlwX3ZzX3JyX3NjaGVkdWxlXCIsXG4gICAgXCJpcF92c193cnJfc2NoZWR1bGVcIixcbiAgICBcImlwX3ZzX3dsY19zY2hlZHVsZVwiLFxuICAgIFwiaXBfdnNfbGNfc2NoZWR1bGVcIixcbiAgICBcImlwX3ZzX2ZvX3NjaGVkdWxlXCIsXG4gICAgXCJpcF92c19vdmZfc2NoZWR1bGVcIixcbiAgICBcImlwX3ZzX3R3b3Nfc2NoZWR1bGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlb3JnYW5pemVzIGZpZWxkcyBpbiBgc3RydWN0IGlwX3ZzX2Rlc3RgIGZvciBiZXR0ZXIgY2FjaGVsaW5lIHV0aWxpemF0aW9uIGFuZCByZWZhY3RvcnMgdGhlIGRlc3RpbmF0aW9uIG92ZXJsb2FkIHN0YXR1cyB0cmFja2luZyB0byB1c2UgYGxfdGhyZXNob2xkX3ZhbGAgLyBgdV90aHJlc2hvbGRfdmFsYCBpbnN0ZWFkIG9mIGBkZXN0LVxcdTAwM2VmbGFnc2Agd2l0aCBgSVBfVlNfREVTVF9GX09WRVJMT0FEYC5cXG5cXG5BbGwgYHN0cnVjdCBpcF92c19kZXN0YCBpbnN0YW5jZXMgYXJlIHplcm8tYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqKClgIGFuZCB0aGVpciB0aHJlc2hvbGQgZmllbGRzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB1cG9uIGNyZWF0aW9uLiBUaGUgc3RydWN0dXJlIGl0c2VsZiBpcyBub3QgY29waWVkIHRvIHVzZXJzcGFjZSBhcyBhIHJhdyBibG9iOyB1c2Vyc3BhY2UgcXVlcmllcyBzZXJpYWxpemUgaW5kaXZpZHVhbCBmaWVsZHMgb3IgdXNlIHplcm9lZCBpbnRlcm1lZGlhdGUgc3RydWN0dXJlcyAoYG1lbXNldGAgaW4gYF9faXBfdnNfZ2V0X2Rlc3RfZW50cmllc2AgYW5kIGluZGl2aWR1YWwgTmV0bGluayBhdHRyaWJ1dGVzIGluIGBpcF92c19nZW5sX2ZpbGxfZGVzdGApLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hlZCB1cG9uLlxcblxcbkJlY2F1c2UgdGhlIGNoYW5nZXMgaW50cm9kdWNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBkZXN0aW5hdGlvbiBvdmVybG9hZCB0cmFja2luZyBsb2dpYyBhbmQgZGVzdGluYXRpb24gc3RydWN0dXJlIGxheW91dCBpbiB0aGUgSVBWUyAoSVAgVmlydHVhbCBTZXJ2ZXIpIHN1YnN5c3RlbS4gSXQgdXBkYXRlcyBjb25uZWN0aW9uIGJpbmRpbmcgYW5kIHVuYmluZGluZyB0aHJlc2hvbGRzLCBjb250cm9sIHBsYW5lIGRlc3RpbmF0aW9uIHVwZGF0ZXMsIGFuZCBzY2hlZHVsZXIgb3ZlcmxvYWQgZXZhbHVhdGlvbiBhY3Jvc3MgSVBWUyBhbGdvcml0aG1zLiBUaGVzZSBhcmUgcmVhY2hhYmxlLCBleGVjdXRhYmxlIG5ldHdvcmsgcGF0aHMgdGhhdCBzaG91bGQgYmUgZnV6emVkIGZvciByYWNlIGNvbmRpdGlvbnMsIGFyaXRobWV0aWMgb3Igc3RhdGUgaGFuZGxpbmcgYnVncywgYW5kIHRocmVzaG9sZCBlZGdlIGNhc2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxMDoxNy41NTA0NTgzODZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1NTcxNTk2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGEwMjljMTg1MzllMmJkNDM5M2JiODczNmRmMDAwM2U0MjJjYjdjOWJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgNyAyMjoxMDoxNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcF92cy5oIGIvaW5jbHVkZS9uZXQvaXBfdnMuaFxcbmluZGV4IDMyZmRlNzMxYmNlYjcuLjlhODNiZmYzMjU2OWQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvaXBfdnMuaFxcbisrKyBiL2luY2x1ZGUvbmV0L2lwX3ZzLmhcXG5AQCAtMzYsOSArMzYsNiBAQFxcbiAjZGVmaW5lIElQX1ZTX0hEUl9JTlZFUlNFXFx0MVxcbiAjZGVmaW5lIElQX1ZTX0hEUl9JQ01QXFx0XFx0MlxcbiBcXG4tLyogRGVzdGluYXRpb24gU2VydmVyIEZsYWdzICovXFxuLSNkZWZpbmUgSVBfVlNfREVTVF9GX09WRVJMT0FEXFx0MHgwMDAyXFx0XFx0Lyogc2VydmVyIGlzIG92ZXJsb2FkZWQgKi9cXG4tXFxuIC8qIERlc3RpbmF0aW9uIFNlcnZlciBDb25maWcgRmxhZ3MgKi9cXG4gI2RlZmluZSBJUF9WU19ERVNUX0NGX0FWQUlMQUJMRVxcdDB4MDAwMVxcdFxcdC8qIHNlcnZlciBpcyBhdmFpbGFibGUgKi9cXG4gXFxuQEAgLTk3MywzMiArOTcwLDQzIEBAIHN0cnVjdCBpcF92c19kZXN0X2RzdCB7XFxuICAqIGFuZCBzbyBvbi5cXG4gICovXFxuIHN0cnVjdCBpcF92c19kZXN0IHtcXG4rXFx0LyogQ2FjaGVsaW5lIGZvciBoYXNoIHRhYmxlIG5vZGVzIC0gcmVhZC1tb3N0bHkgKi9cXG4rXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRuX2xpc3Q7ICAgLyogZm9yIHRoZSBkZXN0cyBpbiB0aGUgc2VydmljZSAqL1xcbiBcXHRzdHJ1Y3QgaGxpc3Rfbm9kZVxcdGRfbGlzdDsgICAvKiBmb3IgdGFibGUgd2l0aCBhbGwgdGhlIGRlc3RzICovXFxuIFxcbi1cXHR1MTZcXHRcXHRcXHRhZjtcXHRcXHQvKiBhZGRyZXNzIGZhbWlseSAqL1xcbi1cXHRfX2JlMTZcXHRcXHRcXHRwb3J0O1xcdFxcdC8qIHBvcnQgbnVtYmVyIG9mIHRoZSBzZXJ2ZXIgKi9cXG4tXFx0dW5pb24gbmZfaW5ldF9hZGRyXFx0YWRkcjtcXHRcXHQvKiBJUCBhZGRyZXNzIG9mIHRoZSBzZXJ2ZXIgKi9cXG4tXFx0dm9sYXRpbGUgdW5zaWduZWQgaW50XFx0ZmxhZ3M7XFx0XFx0LyogZGVzdCBzdGF0dXMgZmxhZ3MgKi9cXG4tXFx0YXRvbWljX3RcXHRcXHRjb25uX2ZsYWdzO1xcdC8qIGZsYWdzIHRvIGNvcHkgdG8gY29ubiAqL1xcbiBcXHRhdG9taWNfdFxcdFxcdHdlaWdodDtcXHRcXHQvKiBzZXJ2ZXIgd2VpZ2h0ICovXFxuLVxcdHVuc2lnbmVkIGxvbmdcXHRcXHRjZmxhZ3M7XFx0XFx0LyogY29uZmlnIGZsYWdzICovXFxuIFxcdGF0b21pY190XFx0XFx0bGFzdF93ZWlnaHQ7XFx0Lyogc2VydmVyIGxhdGVzdCB3ZWlnaHQgKi9cXG4rXFxuK1xcdC8qIGNvbm5lY3Rpb24gdGhyZXNob2xkcyAqL1xcbitcXHR1MzJcXHRcXHRcXHRsX3RocmVzaG9sZF92YWw7LyogdXNlZCBsb3dlciB0aHJlc2hvbGQgKi9cXG4rXFx0dTMyXFx0XFx0XFx0dV90aHJlc2hvbGRfdmFsOy8qIHVzZWQgdXBwZXIgdGhyZXNob2xkICovXFxuK1xcdC8qIDMyLzQ4ICovXFxuK1xcdHUzMlxcdFxcdFxcdGxfdGhyZXNob2xkO1xcdC8qIGxvd2VyIHRocmVzaG9sZCAqL1xcbitcXHR1MzJcXHRcXHRcXHR1X3RocmVzaG9sZDtcXHQvKiB1cHBlciB0aHJlc2hvbGQgKi9cXG4rXFxuK1xcdHVuc2lnbmVkIGxvbmdcXHRcXHRjZmxhZ3M7XFx0XFx0LyogY29uZmlnIGZsYWdzICovXFxuK1xcbitcXHQvKiA0NC82NCAqL1xcbitcXHRhdG9taWNfdFxcdFxcdGNvbm5fZmxhZ3M7XFx0LyogZmxhZ3MgdG8gY29weSB0byBjb25uICovXFxuK1xcbiBcXHRfX3UxNlxcdFxcdFxcdHR1bl90eXBlO1xcdC8qIHR1bm5lbCB0eXBlICovXFxuIFxcdF9fYmUxNlxcdFxcdFxcdHR1bl9wb3J0O1xcdC8qIHR1bm5lbCBwb3J0ICovXFxuIFxcdF9fdTE2XFx0XFx0XFx0dHVuX2ZsYWdzO1xcdC8qIHR1bm5lbCBmbGFncyAqL1xcbiBcXG4tXFx0cmVmY291bnRfdFxcdFxcdHJlZmNudDtcXHRcXHQvKiByZWZlcmVuY2UgY291bnRlciAqL1xcbi1cXHRzdHJ1Y3QgaXBfdnNfc3RhdHMgICAgICBzdGF0czsgICAgICAgICAgLyogc3RhdGlzdGljcyAqL1xcbi1cXHR1bnNpZ25lZCBsb25nXFx0XFx0aWRsZV9zdGFydDtcXHQvKiBzdGFydCB0aW1lLCBqaWZmaWVzICovXFxuK1xcdHUxNlxcdFxcdFxcdGFmO1xcdFxcdC8qIGFkZHJlc3MgZmFtaWx5ICovXFxuK1xcdF9fYmUxNlxcdFxcdFxcdHBvcnQ7XFx0XFx0LyogcG9ydCBudW1iZXIgb2YgdGhlIHNlcnZlciAqL1xcbitcXHQvKiA2MC84MCAqL1xcbitcXHR1bmlvbiBuZl9pbmV0X2FkZHJcXHRhZGRyO1xcdFxcdC8qIElQIGFkZHJlc3Mgb2YgdGhlIHNlcnZlciAqL1xcbiBcXG4tXFx0LyogY29ubmVjdGlvbiBjb3VudGVycyBhbmQgdGhyZXNob2xkcyAqL1xcbi1cXHRhdG9taWNfdFxcdFxcdGFjdGl2ZWNvbm5zO1xcdC8qIGFjdGl2ZSBjb25uZWN0aW9ucyAqL1xcbitcXHQvKiBjb25uZWN0aW9uIGNvdW50ZXJzICovXFxuIFxcdGF0b21pY190XFx0XFx0dG90YWxjb25ucztcXHQvKiB0b3RhbCBjb25uZWN0aW9ucyAqL1xcbitcXHRhdG9taWNfdFxcdFxcdGFjdGl2ZWNvbm5zO1xcdC8qIGFjdGl2ZSBjb25uZWN0aW9ucyAqL1xcbiBcXHRhdG9taWNfdFxcdFxcdHBlcnNpc3Rjb25ucztcXHQvKiBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zICovXFxuLVxcdF9fdTMyXFx0XFx0XFx0dV90aHJlc2hvbGQ7XFx0LyogdXBwZXIgdGhyZXNob2xkICovXFxuLVxcdF9fdTMyXFx0XFx0XFx0bF90aHJlc2hvbGQ7XFx0LyogbG93ZXIgdGhyZXNob2xkICovXFxuLVxcdF9fdTMyXFx0XFx0XFx0bF90aHJlc2hvbGRfdmFsOy8qIHVzZWQgbG93ZXIgdGhyZXNob2xkICovXFxuK1xcbitcXHRyZWZjb3VudF90XFx0XFx0cmVmY250O1xcdFxcdC8qIHJlZmVyZW5jZSBjb3VudGVyICovXFxuK1xcdHN0cnVjdCBpcF92c19zdGF0cyAgICAgIHN0YXRzOyAgICAgICAgICAvKiBzdGF0aXN0aWNzICovXFxuK1xcdHVuc2lnbmVkIGxvbmdcXHRcXHRpZGxlX3N0YXJ0O1xcdC8qIHN0YXJ0IHRpbWUsIGppZmZpZXMgKi9cXG4gXFxuIFxcdC8qIGZvciBkZXN0aW5hdGlvbiBjYWNoZSAqL1xcbiBcXHRzcGlubG9ja190XFx0XFx0ZHN0X2xvY2s7XFx0LyogbG9jayBvZiBkc3RfY2FjaGUgKi9cXG5AQCAtMTkxNSw3ICsxOTIzLDEzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c19kZXN0X3B1dF9hbmRfZnJlZShzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcXG4gXFx0XFx0a2ZyZWUoZGVzdCk7XFxuIH1cXG4gXFxuLXZvaWQgaXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QsIGludCBtb2RlKTtcXG4rdm9pZCBpcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCwgYm9vbCBvdmVybG9hZCk7XFxuK1xcbisvKiBDaGVjayBpZiBkZXN0IGlzIGluIG92ZXJsb2FkZWQgc3RhdGUgKi9cXG4rc3RhdGljIGlubGluZSBib29sIGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChjb25zdCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcXG4re1xcbitcXHRyZXR1cm4gUkVBRF9PTkNFKGRlc3QtXFx1MDAzZWxfdGhyZXNob2xkX3ZhbCk7XFxuK31cXG4gXFxuIC8qIElQVlMgc3luYyBkYWVtb24gZGF0YSBhbmQgZnVuY3Rpb24gcHJvdG90eXBlc1xcbiAgKiAoZnJvbSBpcF92c19zeW5jLmMpXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jXFxuaW5kZXggNmZhM2UxZGM1MzRjMy4uNTM0OGMyZjQ5YjY0ZSAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uY1xcbkBAIC0xMTUwLDggKzExNTAsOCBAQCBpcF92c19iaW5kX2Rlc3Qoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcXG4gXFx0XFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfSU5BQ1RJVkUpKVxcbiBcXHRcXHRcXHRhdG9taWNfaW5jKFxcdTAwMjZkZXN0LVxcdTAwM2VhY3RpdmVjb25ucyk7XFxuIFxcdFxcdHRjID0gYXRvbWljX2luY19yZXR1cm4oXFx1MDAyNmRlc3QtXFx1MDAzZXRvdGFsY29ubnMpO1xcbi1cXHRcXHRpZiAodGMgPT0gUkVBRF9PTkNFKGRlc3QtXFx1MDAzZXVfdGhyZXNob2xkKSlcXG4tXFx0XFx0XFx0aXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoZGVzdCwgMSk7XFxuK1xcdFxcdGlmICh0YyBcXHUwMDNlPSBSRUFEX09OQ0UoZGVzdC1cXHUwMDNldV90aHJlc2hvbGRfdmFsKSlcXG4rXFx0XFx0XFx0aXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoZGVzdCwgdHJ1ZSk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdC8qIEl0IGlzIGEgcGVyc2lzdGVudCBjb25uZWN0aW9uL3RlbXBsYXRlLCBzbyBpbmNyZWFzZVxcbiBcXHRcXHQgICB0aGUgcGVyc2lzdGVudCBjb25uZWN0aW9uIGNvdW50ZXIgKi9cXG5AQCAtMTI0Myw4ICsxMjQzLDggQEAgc3RhdGljIGlubGluZSB2b2lkIGlwX3ZzX3VuYmluZF9kZXN0KHN0cnVjdCBpcF92c19jb25uICpjcClcXG4gXFx0XFx0aWYgKCEoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX0lOQUNUSVZFKSlcXG4gXFx0XFx0XFx0YXRvbWljX2RlYyhcXHUwMDI2ZGVzdC1cXHUwMDNlYWN0aXZlY29ubnMpO1xcbiBcXHRcXHR0YyA9IGF0b21pY19mZXRjaF9kZWMoXFx1MDAyNmRlc3QtXFx1MDAzZXRvdGFsY29ubnMpO1xcbi1cXHRcXHRpZiAodGMgPT0gUkVBRF9PTkNFKGRlc3QtXFx1MDAzZWxfdGhyZXNob2xkX3ZhbCkpXFxuLVxcdFxcdFxcdGlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKGRlc3QsIC0xKTtcXG4rXFx0XFx0aWYgKHRjIFxcdTAwM2M9IFJFQURfT05DRShkZXN0LVxcdTAwM2VsX3RocmVzaG9sZF92YWwpKVxcbitcXHRcXHRcXHRpcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChkZXN0LCBmYWxzZSk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdC8qIEl0IGlzIGEgcGVyc2lzdGVudCBjb25uZWN0aW9uL3RlbXBsYXRlLCBzbyBkZWNyZWFzZVxcbiBcXHRcXHQgICB0aGUgcGVyc2lzdGVudCBjb25uZWN0aW9uIGNvdW50ZXIgKi9cXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jXFxuaW5kZXggNGMxYzczOTQ0NmI3Ni4uMzAwMzU0N2RjYWJlNSAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmNcXG5AQCAtMTMwOSwzMiArMTMwOSwzMiBAQCB2b2lkIGlwX3ZzX3N0YXRzX2ZyZWUoc3RydWN0IGlwX3ZzX3N0YXRzICpzdGF0cylcXG4gICogLSBjb25ucyByZWFjaCB1X3RocmVzaG9sZCBhbmQgZXhjZWVkIGl0OiBzZXQgdGhlIGZsYWdcXG4gICogLSBjb25ucyBnbyBiZWxvdyBsX3RocmVzaG9sZCAob3IgNzUlIG9mIHVfdGhyZXNob2xkKTogY2xlYXIgdGhlIGZsYWdcXG4gICovXFxuLXN0YXRpYyB2b2lkIF9faXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QsIGludCBtb2RlKVxcbitzdGF0aWMgdm9pZCBfX2lwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKHN0cnVjdCBpcF92c19kZXN0ICpkZXN0LCBib29sIG92ZXJsb2FkKVxcbiB7XFxuIFxcdGludCBjb25ucztcXG4gXFx0dTMyIGwsIHU7XFxuIFxcbiBcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZkZXN0LVxcdTAwM2Vkc3RfbG9jayk7XFxuIFxcdHUgPSBSRUFEX09OQ0UoZGVzdC1cXHUwMDNldV90aHJlc2hvbGQpO1xcbi1cXHRpZiAoIXUpXFxuLVxcdFxcdGdvdG8gdW5zZXQ7XFxuLVxcdGwgPSBSRUFEX09OQ0UoZGVzdC1cXHUwMDNlbF90aHJlc2hvbGRfdmFsKTtcXG4tXFx0Y29ubnMgPSBhdG9taWNfcmVhZChcXHUwMDI2ZGVzdC1cXHUwMDNldG90YWxjb25ucyk7XFxuLVxcdGlmIChjb25ucyBcXHUwMDNlPSAobW9kZSBcXHUwMDNlIDAgPyBsIDogdSkpIHtcXG4tXFx0XFx0ZGVzdC1cXHUwMDNlZmxhZ3MgfD0gSVBfVlNfREVTVF9GX09WRVJMT0FEO1xcbi1cXHRcXHRyZXR1cm47XFxuK1xcdGlmICh1KSB7XFxuK1xcdFxcdC8qIExvdyB0aHJlc2hvbGQgZGVmYXVsdHMgdG8gNzUlIG9mIHVwcGVyIHRocmVzaG9sZCAqL1xcbitcXHRcXHRsID0gUkVBRF9PTkNFKGRlc3QtXFx1MDAzZWxfdGhyZXNob2xkKSA/IDogKHUgLSAodSBcXHUwMDNlXFx1MDAzZSAyKSk7XFxuK1xcdFxcdGNvbm5zID0gYXRvbWljX3JlYWQoXFx1MDAyNmRlc3QtXFx1MDAzZXRvdGFsY29ubnMpO1xcbitcXHRcXHRpZiAoY29ubnMgXFx1MDAzZT0gKG92ZXJsb2FkID8gbCA6IHUpKSB7XFxuK1xcdFxcdFxcdFdSSVRFX09OQ0UoZGVzdC1cXHUwMDNldV90aHJlc2hvbGRfdmFsLCBJTlRfTUFYKTtcXG4rXFx0XFx0XFx0V1JJVEVfT05DRShkZXN0LVxcdTAwM2VsX3RocmVzaG9sZF92YWwsIGwpO1xcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdH1cXG4gXFx0fVxcbi1cXHRpZiAoY29ubnMgXFx1MDAzZT0gKG1vZGUgXFx1MDAzYyAwID8gdSA6IGwpKVxcbi1cXHRcXHRyZXR1cm47XFxuIFxcbi11bnNldDpcXG4tXFx0ZGVzdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfklQX1ZTX0RFU1RfRl9PVkVSTE9BRDtcXG4rXFx0V1JJVEVfT05DRShkZXN0LVxcdTAwM2V1X3RocmVzaG9sZF92YWwsIHUgPyA6IElOVF9NQVgpO1xcbitcXHRXUklURV9PTkNFKGRlc3QtXFx1MDAzZWxfdGhyZXNob2xkX3ZhbCwgMCk7XFxuIH1cXG4gXFxuLXZvaWQgaXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QsIGludCBtb2RlKVxcbit2b2lkIGlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKHN0cnVjdCBpcF92c19kZXN0ICpkZXN0LCBib29sIG92ZXJsb2FkKVxcbiB7XFxuIFxcdHNwaW5fbG9ja19iaChcXHUwMDI2ZGVzdC1cXHUwMDNlZHN0X2xvY2spO1xcbi1cXHRfX2lwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKGRlc3QsIG1vZGUpO1xcbitcXHRfX2lwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKGRlc3QsIG92ZXJsb2FkKTtcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmRlc3QtXFx1MDAzZWRzdF9sb2NrKTtcXG4gfVxcbiBcXG5AQCAtMTQwNiwxNSArMTQwNiwxMyBAQCBfX2lwX3ZzX3VwZGF0ZV9kZXN0KHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIHN0cnVjdCBpcF92c19kZXN0ICpkZXN0LFxcbiBcXG4gXFx0aWYgKFJFQURfT05DRShkZXN0LVxcdTAwM2V1X3RocmVzaG9sZCkgIT0gdWRlc3QtXFx1MDAzZXVfdGhyZXNob2xkIHx8XFxuIFxcdCAgICBSRUFEX09OQ0UoZGVzdC1cXHUwMDNlbF90aHJlc2hvbGQpICE9IHVkZXN0LVxcdTAwM2VsX3RocmVzaG9sZCkge1xcbitcXHRcXHRib29sIG92ZXJsb2FkO1xcbitcXG4gXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZkZXN0LVxcdTAwM2Vkc3RfbG9jayk7XFxuIFxcdFxcdFdSSVRFX09OQ0UoZGVzdC1cXHUwMDNldV90aHJlc2hvbGQsIHVkZXN0LVxcdTAwM2V1X3RocmVzaG9sZCk7XFxuIFxcdFxcdFdSSVRFX09OQ0UoZGVzdC1cXHUwMDNlbF90aHJlc2hvbGQsIHVkZXN0LVxcdTAwM2VsX3RocmVzaG9sZCk7XFxuLVxcdFxcdC8qIExvdyB0aHJlc2hvbGQgZGVmYXVsdHMgdG8gNzUlIG9mIHVwcGVyIHRocmVzaG9sZCAqL1xcbi1cXHRcXHRXUklURV9PTkNFKGRlc3QtXFx1MDAzZWxfdGhyZXNob2xkX3ZhbCxcXG4tXFx0XFx0XFx0ICAgdWRlc3QtXFx1MDAzZWxfdGhyZXNob2xkID8gOlxcbi1cXHRcXHRcXHQgICAodWRlc3QtXFx1MDAzZXVfdGhyZXNob2xkIC1cXG4tXFx0XFx0XFx0ICAgICh1ZGVzdC1cXHUwMDNldV90aHJlc2hvbGQgXFx1MDAzZVxcdTAwM2UgMikpKTtcXG4tXFx0XFx0X19pcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChkZXN0LCAwKTtcXG4rXFx0XFx0b3ZlcmxvYWQgPSBpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCk7XFxuK1xcdFxcdF9faXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoZGVzdCwgb3ZlcmxvYWQpO1xcbiBcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2ZGVzdC1cXHUwMDNlZHN0X2xvY2spO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZGguYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19kaC5jXFxuaW5kZXggNDNhYmVkN2EyNmE2YS4uOTVlNTI5NTBhZGJiNyAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZGguY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19kaC5jXFxuQEAgLTE5NSwxNiArMTk1LDYgQEAgc3RhdGljIGludCBpcF92c19kaF9kZXN0X2NoYW5nZWQoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YyxcXG4gfVxcbiBcXG4gXFxuLS8qXFxuLSAqICAgICAgSWYgdGhlIGRlc3QgZmxhZ3MgaXMgc2V0IHdpdGggSVBfVlNfREVTVF9GX09WRVJMT0FELFxcbi0gKiAgICAgIGNvbnNpZGVyIHRoYXQgdGhlIHNlcnZlciBpcyBvdmVybG9hZGVkIGhlcmUuXFxuLSAqL1xcbi1zdGF0aWMgaW5saW5lIGludCBpc19vdmVybG9hZGVkKHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KVxcbi17XFxuLVxcdHJldHVybiBkZXN0LVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRDtcXG4tfVxcbi1cXG4tXFxuIC8qXFxuICAqICAgICAgRGVzdGluYXRpb24gaGFzaGluZyBzY2hlZHVsaW5nXFxuICAqL1xcbkBAIC0yMTksMTAgKzIwOSw4IEBAIGlwX3ZzX2RoX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcbiBcXHRzID0gKHN0cnVjdCBpcF92c19kaF9zdGF0ZSAqKSBzdmMtXFx1MDAzZXNjaGVkX2RhdGE7XFxuIFxcdGRlc3QgPSBpcF92c19kaF9nZXQoc3ZjLVxcdTAwM2VhZiwgcywgXFx1MDAyNmlwaC1cXHUwMDNlZGFkZHIpO1xcbi1cXHRpZiAoIWRlc3QgfHxcXG4tXFx0ICAgICEoZGVzdC1cXHUwMDNlY2ZsYWdzIFxcdTAwMjYgSVBfVlNfREVTVF9DRl9BVkFJTEFCTEUpXFxuLVxcdCAgICB8fCBhdG9taWNfcmVhZChcXHUwMDI2ZGVzdC1cXHUwMDNld2VpZ2h0KSBcXHUwMDNjPSAwXFxuLVxcdCAgICB8fCBpc19vdmVybG9hZGVkKGRlc3QpKSB7XFxuK1xcdGlmICghZGVzdCB8fCBhdG9taWNfcmVhZChcXHUwMDI2ZGVzdC1cXHUwMDNld2VpZ2h0KSBcXHUwMDNjPSAwIHx8XFxuK1xcdCAgICBpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkpIHtcXG4gXFx0XFx0aXBfdnNfc2NoZWR1bGVyX2VycihzdmMsIFxcXCJubyBkZXN0aW5hdGlvbiBhdmFpbGFibGVcXFwiKTtcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2ZvLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZm8uY1xcbmluZGV4IGQ2NTdiNDdjNjUxMWYuLmUwN2ZhMzNmNmQ1MjcgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2ZvLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZm8uY1xcbkBAIC0yOSw3ICsyOSw3IEBAIGlwX3ZzX2ZvX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdCAqIEZpbmQgdmlydHVhbCBzZXJ2ZXIgd2l0aCBoaWdoZXN0IHdlaWdodCBhbmQgc2VuZCBpdCB0cmFmZmljXFxuIFxcdCAqL1xcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkZXN0LCBcXHUwMDI2c3ZjLVxcdTAwM2VkZXN0aW5hdGlvbnMsIG5fbGlzdCkge1xcbi1cXHRcXHRpZiAoIShkZXN0LVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0aWYgKCFpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIGF0b21pY19yZWFkKFxcdTAwMjZkZXN0LVxcdTAwM2V3ZWlnaHQpIFxcdTAwM2UgaHcpIHtcXG4gXFx0XFx0XFx0aHdlaWdodCA9IGRlc3Q7XFxuIFxcdFxcdFxcdGh3ID0gYXRvbWljX3JlYWQoXFx1MDAyNmRlc3QtXFx1MDAzZXdlaWdodCk7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsYy5jXFxuaW5kZXggNjkzYmNjODJjY2I3Ny4uYmZmMTA5YzFjOTU5YiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsYy5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGMuY1xcbkBAIC00MTQsNyArNDE0LDcgQEAgX19pcF92c19sYmxjX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMpXFxuIFxcdCAqIG5ldyBjb25uZWN0aW9uLlxcbiBcXHQgKi9cXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZGVzdCwgXFx1MDAyNnN2Yy1cXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcXG4tXFx0XFx0aWYgKGRlc3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKVxcbitcXHRcXHRpZiAoaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0aWYgKGF0b21pY19yZWFkKFxcdTAwMjZkZXN0LVxcdTAwM2V3ZWlnaHQpIFxcdTAwM2UgMCkge1xcbiBcXHRcXHRcXHRsZWFzdCA9IGRlc3Q7XFxuQEAgLTQyOSw3ICs0MjksNyBAQCBfX2lwX3ZzX2xibGNfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YylcXG4gXFx0ICovXFxuICAgbmV4dHN0YWdlOlxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShkZXN0LCBcXHUwMDI2c3ZjLVxcdTAwM2VkZXN0aW5hdGlvbnMsIG5fbGlzdCkge1xcbi1cXHRcXHRpZiAoZGVzdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpXFxuK1xcdFxcdGlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0ZG9oID0gaXBfdnNfZGVzdF9jb25uX292ZXJoZWFkKGRlc3QpO1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsY3IuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjci5jXFxuaW5kZXggZjUzZjA1Y2VlYTM2Zi4uYzI4NTNlMDdlNzg3MiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsY3IuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjci5jXFxuQEAgLTE2Niw3ICsxNjYsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpcF92c19kZXN0ICppcF92c19kZXN0X3NldF9taW4oc3RydWN0IGlwX3ZzX2Rlc3Rfc2V0ICpzZXQpXFxuIFxcdC8qIHNlbGVjdCB0aGUgZmlyc3QgZGVzdGluYXRpb24gc2VydmVyLCB3aG9zZSB3ZWlnaHQgXFx1MDAzZSAwICovXFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGUsIFxcdTAwMjZzZXQtXFx1MDAzZWxpc3QsIGxpc3QpIHtcXG4gXFx0XFx0bGVhc3QgPSBlLVxcdTAwM2VkZXN0O1xcbi1cXHRcXHRpZiAobGVhc3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKVxcbitcXHRcXHRpZiAoaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGxlYXN0KSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbiBcXHRcXHRpZiAoKGF0b21pY19yZWFkKFxcdTAwMjZsZWFzdC1cXHUwMDNld2VpZ2h0KSBcXHUwMDNlIDApIFxcdTAwMjZcXHUwMDI2XFxuQEAgLTE4MSw3ICsxODEsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpcF92c19kZXN0ICppcF92c19kZXN0X3NldF9taW4oc3RydWN0IGlwX3ZzX2Rlc3Rfc2V0ICpzZXQpXFxuICAgbmV4dHN0YWdlOlxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShlLCBcXHUwMDI2c2V0LVxcdTAwM2VsaXN0LCBsaXN0KSB7XFxuIFxcdFxcdGRlc3QgPSBlLVxcdTAwM2VkZXN0O1xcbi1cXHRcXHRpZiAoZGVzdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpXFxuK1xcdFxcdGlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0ZG9oID0gaXBfdnNfZGVzdF9jb25uX292ZXJoZWFkKGRlc3QpO1xcbkBAIC01NzcsNyArNTc3LDcgQEAgX19pcF92c19sYmxjcl9zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjKVxcbiBcXHQgKiBuZXcgY29ubmVjdGlvbi5cXG4gXFx0ICovXFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsIFxcdTAwMjZzdmMtXFx1MDAzZWRlc3RpbmF0aW9ucywgbl9saXN0KSB7XFxuLVxcdFxcdGlmIChkZXN0LVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRClcXG4rXFx0XFx0aWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbiBcXHRcXHRpZiAoYXRvbWljX3JlYWQoXFx1MDAyNmRlc3QtXFx1MDAzZXdlaWdodCkgXFx1MDAzZSAwKSB7XFxuQEAgLTU5Myw3ICs1OTMsNyBAQCBfX2lwX3ZzX2xibGNyX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMpXFxuIFxcdCAqL1xcbiAgIG5leHRzdGFnZTpcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yY3UoZGVzdCwgXFx1MDAyNnN2Yy1cXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcXG4tXFx0XFx0aWYgKGRlc3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKVxcbitcXHRcXHRpZiAoaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdGRvaCA9IGlwX3ZzX2Rlc3RfY29ubl9vdmVyaGVhZChkZXN0KTtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xjLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGMuY1xcbmluZGV4IDE4Yjk3NmE3YzRkMjAuLjkwMDJmNDkxYmZmNjggMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xjLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGMuY1xcbkBAIC0zOCw3ICszOCw3IEBAIGlwX3ZzX2xjX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdCAqL1xcbiBcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZGVzdCwgXFx1MDAyNnN2Yy1cXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcXG4tXFx0XFx0aWYgKChkZXN0LVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRCkgfHxcXG4rXFx0XFx0aWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSB8fFxcbiBcXHRcXHQgICAgYXRvbWljX3JlYWQoXFx1MDAyNmRlc3QtXFx1MDAzZXdlaWdodCkgPT0gMClcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdGRvaCA9IGlwX3ZzX2Rlc3RfY29ubl9vdmVyaGVhZChkZXN0KTtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX21oLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbWguY1xcbmluZGV4IDAyMDg2MzA0NzU2MmQuLmQ3MGIyM2FlYzVmZWMgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX21oLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbWguY1xcbkBAIC04MCw3ICs4MCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZW5lcmF0ZV9oYXNoX3NlY3JldChoc2lwaGFzaF9rZXlfdCAqaGFzaDEsXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBpc191bmF2YWlsYWJsZShzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcXG4ge1xcbiBcXHRyZXR1cm4gYXRvbWljX3JlYWQoXFx1MDAyNmRlc3QtXFx1MDAzZXdlaWdodCkgXFx1MDAzYz0gMCB8fFxcbi1cXHQgICAgICAgZGVzdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQ7XFxuK1xcdCAgICAgICBpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCk7XFxuIH1cXG4gXFxuIC8qIFJldHVybnMgaGFzaCB2YWx1ZSBmb3IgSVBWUyBNSCBlbnRyeSAqL1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbnEuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19ucS5jXFxuaW5kZXggYWRhMTU4YzYxMGNlMS4uN2NjMjg5MDIwODZlNyAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbnEuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19ucS5jXFxuQEAgLTcyLDcgKzcyLDcgQEAgaXBfdnNfbnFfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsIFxcdTAwMjZzdmMtXFx1MDAzZWRlc3RpbmF0aW9ucywgbl9saXN0KSB7XFxuIFxcbi1cXHRcXHRpZiAoZGVzdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQgfHxcXG4rXFx0XFx0aWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSB8fFxcbiBcXHRcXHQgICAgIWF0b21pY19yZWFkKFxcdTAwMjZkZXN0LVxcdTAwM2V3ZWlnaHQpKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19vdmYuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19vdmYuY1xcbmluZGV4IGM1YzY3ZGY4MGEwYjMuLmVhYTNhN2FlNmVmYTYgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX292Zi5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX292Zi5jXFxuQEAgLTMzLDcgKzMzLDcgQEAgaXBfdnNfb3ZmX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdCovXFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsIFxcdTAwMjZzdmMtXFx1MDAzZWRlc3RpbmF0aW9ucywgbl9saXN0KSB7XFxuIFxcdFxcdHcgPSBhdG9taWNfcmVhZChcXHUwMDI2ZGVzdC1cXHUwMDNld2VpZ2h0KTtcXG4tXFx0XFx0aWYgKChkZXN0LVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRCkgfHxcXG4rXFx0XFx0aWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSB8fFxcbiBcXHRcXHQgICAgYXRvbWljX3JlYWQoXFx1MDAyNmRlc3QtXFx1MDAzZWFjdGl2ZWNvbm5zKSBcXHUwMDNlIHcgfHxcXG4gXFx0XFx0ICAgIHcgPT0gMClcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19yci5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3JyLmNcXG5pbmRleCA0MTI1ZWU1NjFjZGMzLi5iZDE3Y2RkMDkyZjVmIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19yci5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3JyLmNcXG5AQCAtNjYsNyArNjYsNyBAQCBpcF92c19ycl9zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShkZXN0LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnN2Yy1cXHUwMDNlZGVzdGluYXRpb25zLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgbl9saXN0KSB7XFxuLVxcdFxcdFxcdGlmICghKGRlc3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRpZiAoIWlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHQgICAgYXRvbWljX3JlYWQoXFx1MDAyNmRlc3QtXFx1MDAzZXdlaWdodCkgXFx1MDAzZSAwKVxcbiBcXHRcXHRcXHRcXHQvKiBISVQgKi9cXG4gXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zZWQuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zZWQuY1xcbmluZGV4IDI0NWEzMjNjODRjZDMuLjc5MjVmNGQyOGZjZTkgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NlZC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NlZC5jXFxuQEAgLTc1LDcgKzc1LDcgQEAgaXBfdnNfc2VkX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdCAqL1xcbiBcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZGVzdCwgXFx1MDAyNnN2Yy1cXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcXG4tXFx0XFx0aWYgKCEoZGVzdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdGlmICghaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICBhdG9taWNfcmVhZChcXHUwMDI2ZGVzdC1cXHUwMDNld2VpZ2h0KSBcXHUwMDNlIDApIHtcXG4gXFx0XFx0XFx0bGVhc3QgPSBkZXN0O1xcbiBcXHRcXHRcXHRsb2ggPSBpcF92c19zZWRfZGVzdF9vdmVyaGVhZChsZWFzdCk7XFxuQEAgLTkwLDcgKzkwLDcgQEAgaXBfdnNfc2VkX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdCAqL1xcbiAgIG5leHRzdGFnZTpcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yY3UoZGVzdCwgXFx1MDAyNnN2Yy1cXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcXG4tXFx0XFx0aWYgKGRlc3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKVxcbitcXHRcXHRpZiAoaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0ZG9oID0gaXBfdnNfc2VkX2Rlc3Rfb3ZlcmhlYWQoZGVzdCk7XFxuIFxcdFxcdGlmICgoX19zNjQpbG9oICogYXRvbWljX3JlYWQoXFx1MDAyNmRlc3QtXFx1MDAzZXdlaWdodCkgXFx1MDAzZVxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2guYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zaC5jXFxuaW5kZXggY2Q2NzA2NmUzYjI2MS4uYzI0ZGQ1Y2I3ZTQ3OCAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2guY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zaC5jXFxuQEAgLTczLDcgKzczLDcgQEAgc3RydWN0IGlwX3ZzX3NoX3N0YXRlIHtcXG4gc3RhdGljIGlubGluZSBib29sIGlzX3VuYXZhaWxhYmxlKHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KVxcbiB7XFxuIFxcdHJldHVybiBhdG9taWNfcmVhZChcXHUwMDI2ZGVzdC1cXHUwMDNld2VpZ2h0KSBcXHUwMDNjPSAwIHx8XFxuLVxcdCAgICAgICBkZXN0LVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRDtcXG4rXFx0ICAgICAgIGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KTtcXG4gfVxcbiBcXG4gLypcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3R3b3MuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c190d29zLmNcXG5pbmRleCBkYmI3ZjVmZDQ2ODhhLi44NjE4NjEyMmExZjAxIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c190d29zLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfdHdvcy5jXFxuQEAgLTUyLDcgKzUyLDcgQEAgc3RhdGljIHN0cnVjdCBpcF92c19kZXN0ICppcF92c190d29zX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsXFxuIFxcbiBcXHQvKiBHZW5lcmF0ZSBhIHJhbmRvbSB3ZWlnaHQgYmV0d2VlbiBbMCxzdW0gb2YgYWxsIHdlaWdodHMpICovXFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsIFxcdTAwMjZzdmMtXFx1MDAzZWRlc3RpbmF0aW9ucywgbl9saXN0KSB7XFxuLVxcdFxcdGlmICghKGRlc3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKSkge1xcbitcXHRcXHRpZiAoIWlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSkge1xcbiBcXHRcXHRcXHR3ZWlnaHQgPSBhdG9taWNfcmVhZChcXHUwMDI2ZGVzdC1cXHUwMDNld2VpZ2h0KTtcXG4gXFx0XFx0XFx0aWYgKHdlaWdodCBcXHUwMDNlIDApIHtcXG4gXFx0XFx0XFx0XFx0dG90YWxfd2VpZ2h0ICs9IHdlaWdodDtcXG5AQCAtNzUsNyArNzUsNyBAQCBzdGF0aWMgc3RydWN0IGlwX3ZzX2Rlc3QgKmlwX3ZzX3R3b3Nfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YyxcXG4gXFxuIFxcdC8qIFBpY2sgdHdvIHdlaWdodGVkIHNlcnZlcnMgKi9cXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZGVzdCwgXFx1MDAyNnN2Yy1cXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcXG4tXFx0XFx0aWYgKGRlc3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKVxcbitcXHRcXHRpZiAoaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdHdlaWdodCA9IGF0b21pY19yZWFkKFxcdTAwMjZkZXN0LVxcdTAwM2V3ZWlnaHQpO1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd2xjLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd2xjLmNcXG5pbmRleCA5ZGE0NDVjYTA5YTE0Li4wOGU5ZTIyZjcyYmY4IDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c193bGMuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c193bGMuY1xcbkBAIC00Nyw3ICs0Nyw3IEBAIGlwX3ZzX3dsY19zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHQgKi9cXG4gXFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsIFxcdTAwMjZzdmMtXFx1MDAzZWRlc3RpbmF0aW9ucywgbl9saXN0KSB7XFxuLVxcdFxcdGlmICghKGRlc3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRpZiAoIWlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgYXRvbWljX3JlYWQoXFx1MDAyNmRlc3QtXFx1MDAzZXdlaWdodCkgXFx1MDAzZSAwKSB7XFxuIFxcdFxcdFxcdGxlYXN0ID0gZGVzdDtcXG4gXFx0XFx0XFx0bG9oID0gaXBfdnNfZGVzdF9jb25uX292ZXJoZWFkKGxlYXN0KTtcXG5AQCAtNjIsNyArNjIsNyBAQCBpcF92c193bGNfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0ICovXFxuICAgbmV4dHN0YWdlOlxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShkZXN0LCBcXHUwMDI2c3ZjLVxcdTAwM2VkZXN0aW5hdGlvbnMsIG5fbGlzdCkge1xcbi1cXHRcXHRpZiAoZGVzdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpXFxuK1xcdFxcdGlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRkb2ggPSBpcF92c19kZXN0X2Nvbm5fb3ZlcmhlYWQoZGVzdCk7XFxuIFxcdFxcdGlmICgoX19zNjQpbG9oICogYXRvbWljX3JlYWQoXFx1MDAyNmRlc3QtXFx1MDAzZXdlaWdodCkgXFx1MDAzZVxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd3JyLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd3JyLmNcXG5pbmRleCAyZGNmZjEwNDBkYTUyLi5mYWQ2OWJhZTVhMjJiIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c193cnIuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c193cnIuY1xcbkBAIC0xNzYsNyArMTc2LDcgQEAgaXBfdnNfd3JyX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmN1KGRlc3QsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2c3ZjLVxcdTAwM2VkZXN0aW5hdGlvbnMsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCBuX2xpc3QpIHtcXG4tXFx0XFx0XFx0aWYgKCEoZGVzdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdGlmICghaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdCAgICBhdG9taWNfcmVhZChcXHUwMDI2ZGVzdC1cXHUwMDNld2VpZ2h0KSBcXHUwMDNlPSBtYXJrLVxcdTAwM2VjdylcXG4gXFx0XFx0XFx0XFx0Z290byBmb3VuZDtcXG4gXFx0XFx0XFx0aWYgKGRlc3QgPT0gc3RvcClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6MTA6MTguMjA2ODY1Mzg1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo4OTYyOTM4NTIxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9WU1wiLFxuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWRcIixcbiAgICBcImlwX3ZzX2JpbmRfZGVzdFwiLFxuICAgIFwiaXBfdnNfdW5iaW5kX2Rlc3RcIixcbiAgICBcIl9faXBfdnNfdXBkYXRlX2Rlc3RcIixcbiAgICBcImlwX3ZzX2VkaXRfZGVzdFwiLFxuICAgIFwiaXBfdnNfYWRkX2Rlc3RcIixcbiAgICBcImlwX3ZzX3JyX3NjaGVkdWxlXCIsXG4gICAgXCJpcF92c193cnJfc2NoZWR1bGVcIixcbiAgICBcImlwX3ZzX3dsY19zY2hlZHVsZVwiLFxuICAgIFwiaXBfdnNfbGNfc2NoZWR1bGVcIixcbiAgICBcImlwX3ZzX2ZvX3NjaGVkdWxlXCIsXG4gICAgXCJpcF92c19vdmZfc2NoZWR1bGVcIixcbiAgICBcImlwX3ZzX3R3b3Nfc2NoZWR1bGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZGVzdGluYXRpb24gb3ZlcmxvYWQgdHJhY2tpbmcgbG9naWMgYW5kIGRlc3RpbmF0aW9uIHN0cnVjdHVyZSBsYXlvdXQgaW4gdGhlIElQVlMgKElQIFZpcnR1YWwgU2VydmVyKSBzdWJzeXN0ZW0uIEl0IHVwZGF0ZXMgY29ubmVjdGlvbiBiaW5kaW5nIGFuZCB1bmJpbmRpbmcgdGhyZXNob2xkcywgY29udHJvbCBwbGFuZSBkZXN0aW5hdGlvbiB1cGRhdGVzLCBhbmQgc2NoZWR1bGVyIG92ZXJsb2FkIGV2YWx1YXRpb24gYWNyb3NzIElQVlMgYWxnb3JpdGhtcy4gVGhlc2UgYXJlIHJlYWNoYWJsZSwgZXhlY3V0YWJsZSBuZXR3b3JrIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZCBmb3IgcmFjZSBjb25kaXRpb25zLCBhcml0aG1ldGljIG9yIHN0YXRlIGhhbmRsaW5nIGJ1Z3MsIGFuZCB0aHJlc2hvbGQgZWRnZSBjYXNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhMDI5YzE4NTM5ZTJiZDQzOTNiYjg3MzZkZjAwMDNlNDIyY2I3YzliXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAyMjoxMDoxNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX3ZzLmggYi9pbmNsdWRlL25ldC9pcF92cy5oXG5pbmRleCAzMmZkZTczMWJjZWI3Li45YTgzYmZmMzI1NjlkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXBfdnMuaFxuKysrIGIvaW5jbHVkZS9uZXQvaXBfdnMuaFxuQEAgLTM2LDkgKzM2LDYgQEBcbiAjZGVmaW5lIElQX1ZTX0hEUl9JTlZFUlNFXHQxXG4gI2RlZmluZSBJUF9WU19IRFJfSUNNUFx0XHQyXG4gXG4tLyogRGVzdGluYXRpb24gU2VydmVyIEZsYWdzICovXG4tI2RlZmluZSBJUF9WU19ERVNUX0ZfT1ZFUkxPQURcdDB4MDAwMlx0XHQvKiBzZXJ2ZXIgaXMgb3ZlcmxvYWRlZCAqL1xuLVxuIC8qIERlc3RpbmF0aW9uIFNlcnZlciBDb25maWcgRmxhZ3MgKi9cbiAjZGVmaW5lIElQX1ZTX0RFU1RfQ0ZfQVZBSUxBQkxFXHQweDAwMDFcdFx0Lyogc2VydmVyIGlzIGF2YWlsYWJsZSAqL1xuIFxuQEAgLTk3MywzMiArOTcwLDQzIEBAIHN0cnVjdCBpcF92c19kZXN0X2RzdCB7XG4gICogYW5kIHNvIG9uLlxuICAqL1xuIHN0cnVjdCBpcF92c19kZXN0IHtcbitcdC8qIENhY2hlbGluZSBmb3IgaGFzaCB0YWJsZSBub2RlcyAtIHJlYWQtbW9zdGx5ICovXG4rXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRuX2xpc3Q7ICAgLyogZm9yIHRoZSBkZXN0cyBpbiB0aGUgc2VydmljZSAqL1xuIFx0c3RydWN0IGhsaXN0X25vZGVcdGRfbGlzdDsgICAvKiBmb3IgdGFibGUgd2l0aCBhbGwgdGhlIGRlc3RzICovXG4gXG4tXHR1MTZcdFx0XHRhZjtcdFx0LyogYWRkcmVzcyBmYW1pbHkgKi9cbi1cdF9fYmUxNlx0XHRcdHBvcnQ7XHRcdC8qIHBvcnQgbnVtYmVyIG9mIHRoZSBzZXJ2ZXIgKi9cbi1cdHVuaW9uIG5mX2luZXRfYWRkclx0YWRkcjtcdFx0LyogSVAgYWRkcmVzcyBvZiB0aGUgc2VydmVyICovXG4tXHR2b2xhdGlsZSB1bnNpZ25lZCBpbnRcdGZsYWdzO1x0XHQvKiBkZXN0IHN0YXR1cyBmbGFncyAqL1xuLVx0YXRvbWljX3RcdFx0Y29ubl9mbGFncztcdC8qIGZsYWdzIHRvIGNvcHkgdG8gY29ubiAqL1xuIFx0YXRvbWljX3RcdFx0d2VpZ2h0O1x0XHQvKiBzZXJ2ZXIgd2VpZ2h0ICovXG4tXHR1bnNpZ25lZCBsb25nXHRcdGNmbGFncztcdFx0LyogY29uZmlnIGZsYWdzICovXG4gXHRhdG9taWNfdFx0XHRsYXN0X3dlaWdodDtcdC8qIHNlcnZlciBsYXRlc3Qgd2VpZ2h0ICovXG4rXG4rXHQvKiBjb25uZWN0aW9uIHRocmVzaG9sZHMgKi9cbitcdHUzMlx0XHRcdGxfdGhyZXNob2xkX3ZhbDsvKiB1c2VkIGxvd2VyIHRocmVzaG9sZCAqL1xuK1x0dTMyXHRcdFx0dV90aHJlc2hvbGRfdmFsOy8qIHVzZWQgdXBwZXIgdGhyZXNob2xkICovXG4rXHQvKiAzMi80OCAqL1xuK1x0dTMyXHRcdFx0bF90aHJlc2hvbGQ7XHQvKiBsb3dlciB0aHJlc2hvbGQgKi9cbitcdHUzMlx0XHRcdHVfdGhyZXNob2xkO1x0LyogdXBwZXIgdGhyZXNob2xkICovXG4rXG4rXHR1bnNpZ25lZCBsb25nXHRcdGNmbGFncztcdFx0LyogY29uZmlnIGZsYWdzICovXG4rXG4rXHQvKiA0NC82NCAqL1xuK1x0YXRvbWljX3RcdFx0Y29ubl9mbGFncztcdC8qIGZsYWdzIHRvIGNvcHkgdG8gY29ubiAqL1xuK1xuIFx0X191MTZcdFx0XHR0dW5fdHlwZTtcdC8qIHR1bm5lbCB0eXBlICovXG4gXHRfX2JlMTZcdFx0XHR0dW5fcG9ydDtcdC8qIHR1bm5lbCBwb3J0ICovXG4gXHRfX3UxNlx0XHRcdHR1bl9mbGFncztcdC8qIHR1bm5lbCBmbGFncyAqL1xuIFxuLVx0cmVmY291bnRfdFx0XHRyZWZjbnQ7XHRcdC8qIHJlZmVyZW5jZSBjb3VudGVyICovXG4tXHRzdHJ1Y3QgaXBfdnNfc3RhdHMgICAgICBzdGF0czsgICAgICAgICAgLyogc3RhdGlzdGljcyAqL1xuLVx0dW5zaWduZWQgbG9uZ1x0XHRpZGxlX3N0YXJ0O1x0Lyogc3RhcnQgdGltZSwgamlmZmllcyAqL1xuK1x0dTE2XHRcdFx0YWY7XHRcdC8qIGFkZHJlc3MgZmFtaWx5ICovXG4rXHRfX2JlMTZcdFx0XHRwb3J0O1x0XHQvKiBwb3J0IG51bWJlciBvZiB0aGUgc2VydmVyICovXG4rXHQvKiA2MC84MCAqL1xuK1x0dW5pb24gbmZfaW5ldF9hZGRyXHRhZGRyO1x0XHQvKiBJUCBhZGRyZXNzIG9mIHRoZSBzZXJ2ZXIgKi9cbiBcbi1cdC8qIGNvbm5lY3Rpb24gY291bnRlcnMgYW5kIHRocmVzaG9sZHMgKi9cbi1cdGF0b21pY190XHRcdGFjdGl2ZWNvbm5zO1x0LyogYWN0aXZlIGNvbm5lY3Rpb25zICovXG4rXHQvKiBjb25uZWN0aW9uIGNvdW50ZXJzICovXG4gXHRhdG9taWNfdFx0XHR0b3RhbGNvbm5zO1x0LyogdG90YWwgY29ubmVjdGlvbnMgKi9cbitcdGF0b21pY190XHRcdGFjdGl2ZWNvbm5zO1x0LyogYWN0aXZlIGNvbm5lY3Rpb25zICovXG4gXHRhdG9taWNfdFx0XHRwZXJzaXN0Y29ubnM7XHQvKiBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zICovXG4tXHRfX3UzMlx0XHRcdHVfdGhyZXNob2xkO1x0LyogdXBwZXIgdGhyZXNob2xkICovXG4tXHRfX3UzMlx0XHRcdGxfdGhyZXNob2xkO1x0LyogbG93ZXIgdGhyZXNob2xkICovXG4tXHRfX3UzMlx0XHRcdGxfdGhyZXNob2xkX3ZhbDsvKiB1c2VkIGxvd2VyIHRocmVzaG9sZCAqL1xuK1xuK1x0cmVmY291bnRfdFx0XHRyZWZjbnQ7XHRcdC8qIHJlZmVyZW5jZSBjb3VudGVyICovXG4rXHRzdHJ1Y3QgaXBfdnNfc3RhdHMgICAgICBzdGF0czsgICAgICAgICAgLyogc3RhdGlzdGljcyAqL1xuK1x0dW5zaWduZWQgbG9uZ1x0XHRpZGxlX3N0YXJ0O1x0Lyogc3RhcnQgdGltZSwgamlmZmllcyAqL1xuIFxuIFx0LyogZm9yIGRlc3RpbmF0aW9uIGNhY2hlICovXG4gXHRzcGlubG9ja190XHRcdGRzdF9sb2NrO1x0LyogbG9jayBvZiBkc3RfY2FjaGUgKi9cbkBAIC0xOTE1LDcgKzE5MjMsMTMgQEAgc3RhdGljIGlubGluZSB2b2lkIGlwX3ZzX2Rlc3RfcHV0X2FuZF9mcmVlKHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KVxuIFx0XHRrZnJlZShkZXN0KTtcbiB9XG4gXG4tdm9pZCBpcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCwgaW50IG1vZGUpO1xuK3ZvaWQgaXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QsIGJvb2wgb3ZlcmxvYWQpO1xuK1xuKy8qIENoZWNrIGlmIGRlc3QgaXMgaW4gb3ZlcmxvYWRlZCBzdGF0ZSAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoY29uc3Qgc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QpXG4re1xuK1x0cmV0dXJuIFJFQURfT05DRShkZXN0LVx1MDAzZWxfdGhyZXNob2xkX3ZhbCk7XG4rfVxuIFxuIC8qIElQVlMgc3luYyBkYWVtb24gZGF0YSBhbmQgZnVuY3Rpb24gcHJvdG90eXBlc1xuICAqIChmcm9tIGlwX3ZzX3N5bmMuYylcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uY1xuaW5kZXggNmZhM2UxZGM1MzRjMy4uNTM0OGMyZjQ5YjY0ZSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNcbkBAIC0xMTUwLDggKzExNTAsOCBAQCBpcF92c19iaW5kX2Rlc3Qoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcbiBcdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9JTkFDVElWRSkpXG4gXHRcdFx0YXRvbWljX2luYyhcdTAwMjZkZXN0LVx1MDAzZWFjdGl2ZWNvbm5zKTtcbiBcdFx0dGMgPSBhdG9taWNfaW5jX3JldHVybihcdTAwMjZkZXN0LVx1MDAzZXRvdGFsY29ubnMpO1xuLVx0XHRpZiAodGMgPT0gUkVBRF9PTkNFKGRlc3QtXHUwMDNldV90aHJlc2hvbGQpKVxuLVx0XHRcdGlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKGRlc3QsIDEpO1xuK1x0XHRpZiAodGMgXHUwMDNlPSBSRUFEX09OQ0UoZGVzdC1cdTAwM2V1X3RocmVzaG9sZF92YWwpKVxuK1x0XHRcdGlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKGRlc3QsIHRydWUpO1xuIFx0fSBlbHNlIHtcbiBcdFx0LyogSXQgaXMgYSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24vdGVtcGxhdGUsIHNvIGluY3JlYXNlXG4gXHRcdCAgIHRoZSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24gY291bnRlciAqL1xuQEAgLTEyNDMsOCArMTI0Myw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c191bmJpbmRfZGVzdChzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXG4gXHRcdGlmICghKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfSU5BQ1RJVkUpKVxuIFx0XHRcdGF0b21pY19kZWMoXHUwMDI2ZGVzdC1cdTAwM2VhY3RpdmVjb25ucyk7XG4gXHRcdHRjID0gYXRvbWljX2ZldGNoX2RlYyhcdTAwMjZkZXN0LVx1MDAzZXRvdGFsY29ubnMpO1xuLVx0XHRpZiAodGMgPT0gUkVBRF9PTkNFKGRlc3QtXHUwMDNlbF90aHJlc2hvbGRfdmFsKSlcbi1cdFx0XHRpcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChkZXN0LCAtMSk7XG4rXHRcdGlmICh0YyBcdTAwM2M9IFJFQURfT05DRShkZXN0LVx1MDAzZWxfdGhyZXNob2xkX3ZhbCkpXG4rXHRcdFx0aXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoZGVzdCwgZmFsc2UpO1xuIFx0fSBlbHNlIHtcbiBcdFx0LyogSXQgaXMgYSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24vdGVtcGxhdGUsIHNvIGRlY3JlYXNlXG4gXHRcdCAgIHRoZSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24gY291bnRlciAqL1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuY1xuaW5kZXggNGMxYzczOTQ0NmI3Ni4uMzAwMzU0N2RjYWJlNSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jXG5AQCAtMTMwOSwzMiArMTMwOSwzMiBAQCB2b2lkIGlwX3ZzX3N0YXRzX2ZyZWUoc3RydWN0IGlwX3ZzX3N0YXRzICpzdGF0cylcbiAgKiAtIGNvbm5zIHJlYWNoIHVfdGhyZXNob2xkIGFuZCBleGNlZWQgaXQ6IHNldCB0aGUgZmxhZ1xuICAqIC0gY29ubnMgZ28gYmVsb3cgbF90aHJlc2hvbGQgKG9yIDc1JSBvZiB1X3RocmVzaG9sZCk6IGNsZWFyIHRoZSBmbGFnXG4gICovXG4tc3RhdGljIHZvaWQgX19pcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCwgaW50IG1vZGUpXG4rc3RhdGljIHZvaWQgX19pcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCwgYm9vbCBvdmVybG9hZClcbiB7XG4gXHRpbnQgY29ubnM7XG4gXHR1MzIgbCwgdTtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2ZGVzdC1cdTAwM2Vkc3RfbG9jayk7XG4gXHR1ID0gUkVBRF9PTkNFKGRlc3QtXHUwMDNldV90aHJlc2hvbGQpO1xuLVx0aWYgKCF1KVxuLVx0XHRnb3RvIHVuc2V0O1xuLVx0bCA9IFJFQURfT05DRShkZXN0LVx1MDAzZWxfdGhyZXNob2xkX3ZhbCk7XG4tXHRjb25ucyA9IGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNldG90YWxjb25ucyk7XG4tXHRpZiAoY29ubnMgXHUwMDNlPSAobW9kZSBcdTAwM2UgMCA/IGwgOiB1KSkge1xuLVx0XHRkZXN0LVx1MDAzZWZsYWdzIHw9IElQX1ZTX0RFU1RfRl9PVkVSTE9BRDtcbi1cdFx0cmV0dXJuO1xuK1x0aWYgKHUpIHtcbitcdFx0LyogTG93IHRocmVzaG9sZCBkZWZhdWx0cyB0byA3NSUgb2YgdXBwZXIgdGhyZXNob2xkICovXG4rXHRcdGwgPSBSRUFEX09OQ0UoZGVzdC1cdTAwM2VsX3RocmVzaG9sZCkgPyA6ICh1IC0gKHUgXHUwMDNlXHUwMDNlIDIpKTtcbitcdFx0Y29ubnMgPSBhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZXRvdGFsY29ubnMpO1xuK1x0XHRpZiAoY29ubnMgXHUwMDNlPSAob3ZlcmxvYWQgPyBsIDogdSkpIHtcbitcdFx0XHRXUklURV9PTkNFKGRlc3QtXHUwMDNldV90aHJlc2hvbGRfdmFsLCBJTlRfTUFYKTtcbitcdFx0XHRXUklURV9PTkNFKGRlc3QtXHUwMDNlbF90aHJlc2hvbGRfdmFsLCBsKTtcbitcdFx0XHRyZXR1cm47XG4rXHRcdH1cbiBcdH1cbi1cdGlmIChjb25ucyBcdTAwM2U9IChtb2RlIFx1MDAzYyAwID8gdSA6IGwpKVxuLVx0XHRyZXR1cm47XG4gXG4tdW5zZXQ6XG4tXHRkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNj0gfklQX1ZTX0RFU1RfRl9PVkVSTE9BRDtcbitcdFdSSVRFX09OQ0UoZGVzdC1cdTAwM2V1X3RocmVzaG9sZF92YWwsIHUgPyA6IElOVF9NQVgpO1xuK1x0V1JJVEVfT05DRShkZXN0LVx1MDAzZWxfdGhyZXNob2xkX3ZhbCwgMCk7XG4gfVxuIFxuLXZvaWQgaXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QsIGludCBtb2RlKVxuK3ZvaWQgaXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QsIGJvb2wgb3ZlcmxvYWQpXG4ge1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmRlc3QtXHUwMDNlZHN0X2xvY2spO1xuLVx0X19pcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChkZXN0LCBtb2RlKTtcbitcdF9faXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoZGVzdCwgb3ZlcmxvYWQpO1xuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2ZGVzdC1cdTAwM2Vkc3RfbG9jayk7XG4gfVxuIFxuQEAgLTE0MDYsMTUgKzE0MDYsMTMgQEAgX19pcF92c191cGRhdGVfZGVzdChzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCxcbiBcbiBcdGlmIChSRUFEX09OQ0UoZGVzdC1cdTAwM2V1X3RocmVzaG9sZCkgIT0gdWRlc3QtXHUwMDNldV90aHJlc2hvbGQgfHxcbiBcdCAgICBSRUFEX09OQ0UoZGVzdC1cdTAwM2VsX3RocmVzaG9sZCkgIT0gdWRlc3QtXHUwMDNlbF90aHJlc2hvbGQpIHtcbitcdFx0Ym9vbCBvdmVybG9hZDtcbitcbiBcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmRlc3QtXHUwMDNlZHN0X2xvY2spO1xuIFx0XHRXUklURV9PTkNFKGRlc3QtXHUwMDNldV90aHJlc2hvbGQsIHVkZXN0LVx1MDAzZXVfdGhyZXNob2xkKTtcbiBcdFx0V1JJVEVfT05DRShkZXN0LVx1MDAzZWxfdGhyZXNob2xkLCB1ZGVzdC1cdTAwM2VsX3RocmVzaG9sZCk7XG4tXHRcdC8qIExvdyB0aHJlc2hvbGQgZGVmYXVsdHMgdG8gNzUlIG9mIHVwcGVyIHRocmVzaG9sZCAqL1xuLVx0XHRXUklURV9PTkNFKGRlc3QtXHUwMDNlbF90aHJlc2hvbGRfdmFsLFxuLVx0XHRcdCAgIHVkZXN0LVx1MDAzZWxfdGhyZXNob2xkID8gOlxuLVx0XHRcdCAgICh1ZGVzdC1cdTAwM2V1X3RocmVzaG9sZCAtXG4tXHRcdFx0ICAgICh1ZGVzdC1cdTAwM2V1X3RocmVzaG9sZCBcdTAwM2VcdTAwM2UgMikpKTtcbi1cdFx0X19pcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChkZXN0LCAwKTtcbitcdFx0b3ZlcmxvYWQgPSBpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCk7XG4rXHRcdF9faXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoZGVzdCwgb3ZlcmxvYWQpO1xuIFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZkZXN0LVx1MDAzZWRzdF9sb2NrKTtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZGguYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19kaC5jXG5pbmRleCA0M2FiZWQ3YTI2YTZhLi45NWU1Mjk1MGFkYmI3IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2RoLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19kaC5jXG5AQCAtMTk1LDE2ICsxOTUsNiBAQCBzdGF0aWMgaW50IGlwX3ZzX2RoX2Rlc3RfY2hhbmdlZChzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLFxuIH1cbiBcbiBcbi0vKlxuLSAqICAgICAgSWYgdGhlIGRlc3QgZmxhZ3MgaXMgc2V0IHdpdGggSVBfVlNfREVTVF9GX09WRVJMT0FELFxuLSAqICAgICAgY29uc2lkZXIgdGhhdCB0aGUgc2VydmVyIGlzIG92ZXJsb2FkZWQgaGVyZS5cbi0gKi9cbi1zdGF0aWMgaW5saW5lIGludCBpc19vdmVybG9hZGVkKHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KVxuLXtcbi1cdHJldHVybiBkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQ7XG4tfVxuLVxuLVxuIC8qXG4gICogICAgICBEZXN0aW5hdGlvbiBoYXNoaW5nIHNjaGVkdWxpbmdcbiAgKi9cbkBAIC0yMTksMTAgKzIwOSw4IEBAIGlwX3ZzX2RoX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXG4gXHRzID0gKHN0cnVjdCBpcF92c19kaF9zdGF0ZSAqKSBzdmMtXHUwMDNlc2NoZWRfZGF0YTtcbiBcdGRlc3QgPSBpcF92c19kaF9nZXQoc3ZjLVx1MDAzZWFmLCBzLCBcdTAwMjZpcGgtXHUwMDNlZGFkZHIpO1xuLVx0aWYgKCFkZXN0IHx8XG4tXHQgICAgIShkZXN0LVx1MDAzZWNmbGFncyBcdTAwMjYgSVBfVlNfREVTVF9DRl9BVkFJTEFCTEUpXG4tXHQgICAgfHwgYXRvbWljX3JlYWQoXHUwMDI2ZGVzdC1cdTAwM2V3ZWlnaHQpIFx1MDAzYz0gMFxuLVx0ICAgIHx8IGlzX292ZXJsb2FkZWQoZGVzdCkpIHtcbitcdGlmICghZGVzdCB8fCBhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZXdlaWdodCkgXHUwMDNjPSAwIHx8XG4rXHQgICAgaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpKSB7XG4gXHRcdGlwX3ZzX3NjaGVkdWxlcl9lcnIoc3ZjLCBcIm5vIGRlc3RpbmF0aW9uIGF2YWlsYWJsZVwiKTtcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2ZvLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZm8uY1xuaW5kZXggZDY1N2I0N2M2NTExZi4uZTA3ZmEzM2Y2ZDUyNyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mby5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZm8uY1xuQEAgLTI5LDcgKzI5LDcgQEAgaXBfdnNfZm9fc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdCAqIEZpbmQgdmlydHVhbCBzZXJ2ZXIgd2l0aCBoaWdoZXN0IHdlaWdodCBhbmQgc2VuZCBpdCB0cmFmZmljXG4gXHQgKi9cbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsIFx1MDAyNnN2Yy1cdTAwM2VkZXN0aW5hdGlvbnMsIG5fbGlzdCkge1xuLVx0XHRpZiAoIShkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpIFx1MDAyNlx1MDAyNlxuK1x0XHRpZiAoIWlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNld2VpZ2h0KSBcdTAwM2UgaHcpIHtcbiBcdFx0XHRod2VpZ2h0ID0gZGVzdDtcbiBcdFx0XHRodyA9IGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNld2VpZ2h0KTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsYy5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGMuY1xuaW5kZXggNjkzYmNjODJjY2I3Ny4uYmZmMTA5YzFjOTU5YiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjLmNcbkBAIC00MTQsNyArNDE0LDcgQEAgX19pcF92c19sYmxjX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMpXG4gXHQgKiBuZXcgY29ubmVjdGlvbi5cbiBcdCAqL1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZGVzdCwgXHUwMDI2c3ZjLVx1MDAzZWRlc3RpbmF0aW9ucywgbl9saXN0KSB7XG4tXHRcdGlmIChkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpXG4rXHRcdGlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGlmIChhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZXdlaWdodCkgXHUwMDNlIDApIHtcbiBcdFx0XHRsZWFzdCA9IGRlc3Q7XG5AQCAtNDI5LDcgKzQyOSw3IEBAIF9faXBfdnNfbGJsY19zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjKVxuIFx0ICovXG4gICBuZXh0c3RhZ2U6XG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShkZXN0LCBcdTAwMjZzdmMtXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcbi1cdFx0aWYgKGRlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRClcbitcdFx0aWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0ZG9oID0gaXBfdnNfZGVzdF9jb25uX292ZXJoZWFkKGRlc3QpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjci5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGNyLmNcbmluZGV4IGY1M2YwNWNlZWEzNmYuLmMyODUzZTA3ZTc4NzIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsY3IuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGNyLmNcbkBAIC0xNjYsNyArMTY2LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaXBfdnNfZGVzdCAqaXBfdnNfZGVzdF9zZXRfbWluKHN0cnVjdCBpcF92c19kZXN0X3NldCAqc2V0KVxuIFx0Lyogc2VsZWN0IHRoZSBmaXJzdCBkZXN0aW5hdGlvbiBzZXJ2ZXIsIHdob3NlIHdlaWdodCBcdTAwM2UgMCAqL1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZSwgXHUwMDI2c2V0LVx1MDAzZWxpc3QsIGxpc3QpIHtcbiBcdFx0bGVhc3QgPSBlLVx1MDAzZWRlc3Q7XG4tXHRcdGlmIChsZWFzdC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKVxuK1x0XHRpZiAoaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGxlYXN0KSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKChhdG9taWNfcmVhZChcdTAwMjZsZWFzdC1cdTAwM2V3ZWlnaHQpIFx1MDAzZSAwKSBcdTAwMjZcdTAwMjZcbkBAIC0xODEsNyArMTgxLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaXBfdnNfZGVzdCAqaXBfdnNfZGVzdF9zZXRfbWluKHN0cnVjdCBpcF92c19kZXN0X3NldCAqc2V0KVxuICAgbmV4dHN0YWdlOlxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yY3UoZSwgXHUwMDI2c2V0LVx1MDAzZWxpc3QsIGxpc3QpIHtcbiBcdFx0ZGVzdCA9IGUtXHUwMDNlZGVzdDtcbi1cdFx0aWYgKGRlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRClcbitcdFx0aWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0ZG9oID0gaXBfdnNfZGVzdF9jb25uX292ZXJoZWFkKGRlc3QpO1xuQEAgLTU3Nyw3ICs1NzcsNyBAQCBfX2lwX3ZzX2xibGNyX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMpXG4gXHQgKiBuZXcgY29ubmVjdGlvbi5cbiBcdCAqL1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZGVzdCwgXHUwMDI2c3ZjLVx1MDAzZWRlc3RpbmF0aW9ucywgbl9saXN0KSB7XG4tXHRcdGlmIChkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpXG4rXHRcdGlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZXdlaWdodCkgXHUwMDNlIDApIHtcbkBAIC01OTMsNyArNTkzLDcgQEAgX19pcF92c19sYmxjcl9zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjKVxuIFx0ICovXG4gICBuZXh0c3RhZ2U6XG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShkZXN0LCBcdTAwMjZzdmMtXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcbi1cdFx0aWYgKGRlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRClcbitcdFx0aWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0ZG9oID0gaXBfdnNfZGVzdF9jb25uX292ZXJoZWFkKGRlc3QpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYy5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xjLmNcbmluZGV4IDE4Yjk3NmE3YzRkMjAuLjkwMDJmNDkxYmZmNjggMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGMuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xjLmNcbkBAIC0zOCw3ICszOCw3IEBAIGlwX3ZzX2xjX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHQgKi9cbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsIFx1MDAyNnN2Yy1cdTAwM2VkZXN0aW5hdGlvbnMsIG5fbGlzdCkge1xuLVx0XHRpZiAoKGRlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRCkgfHxcbitcdFx0aWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSB8fFxuIFx0XHQgICAgYXRvbWljX3JlYWQoXHUwMDI2ZGVzdC1cdTAwM2V3ZWlnaHQpID09IDApXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGRvaCA9IGlwX3ZzX2Rlc3RfY29ubl9vdmVyaGVhZChkZXN0KTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbWguYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19taC5jXG5pbmRleCAwMjA4NjMwNDc1NjJkLi5kNzBiMjNhZWM1ZmVjIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX21oLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19taC5jXG5AQCAtODAsNyArODAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZ2VuZXJhdGVfaGFzaF9zZWNyZXQoaHNpcGhhc2hfa2V5X3QgKmhhc2gxLFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBpc191bmF2YWlsYWJsZShzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcbiB7XG4gXHRyZXR1cm4gYXRvbWljX3JlYWQoXHUwMDI2ZGVzdC1cdTAwM2V3ZWlnaHQpIFx1MDAzYz0gMCB8fFxuLVx0ICAgICAgIGRlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRDtcbitcdCAgICAgICBpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCk7XG4gfVxuIFxuIC8qIFJldHVybnMgaGFzaCB2YWx1ZSBmb3IgSVBWUyBNSCBlbnRyeSAqL1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19ucS5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX25xLmNcbmluZGV4IGFkYTE1OGM2MTBjZTEuLjdjYzI4OTAyMDg2ZTcgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbnEuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX25xLmNcbkBAIC03Miw3ICs3Miw3IEBAIGlwX3ZzX25xX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkZXN0LCBcdTAwMjZzdmMtXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcbiBcbi1cdFx0aWYgKGRlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRCB8fFxuK1x0XHRpZiAoaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpIHx8XG4gXHRcdCAgICAhYXRvbWljX3JlYWQoXHUwMDI2ZGVzdC1cdTAwM2V3ZWlnaHQpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19vdmYuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19vdmYuY1xuaW5kZXggYzVjNjdkZjgwYTBiMy4uZWFhM2E3YWU2ZWZhNiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19vdmYuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX292Zi5jXG5AQCAtMzMsNyArMzMsNyBAQCBpcF92c19vdmZfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdCovXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkZXN0LCBcdTAwMjZzdmMtXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcbiBcdFx0dyA9IGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNld2VpZ2h0KTtcbi1cdFx0aWYgKChkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpIHx8XG4rXHRcdGlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkgfHxcbiBcdFx0ICAgIGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNlYWN0aXZlY29ubnMpIFx1MDAzZSB3IHx8XG4gXHRcdCAgICB3ID09IDApXG4gXHRcdFx0Y29udGludWU7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3JyLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcnIuY1xuaW5kZXggNDEyNWVlNTYxY2RjMy4uYmQxN2NkZDA5MmY1ZiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19yci5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcnIuY1xuQEAgLTY2LDcgKzY2LDcgQEAgaXBfdnNfcnJfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yY3UoZGVzdCxcbiBcdFx0XHRcdFx0XHQgXHUwMDI2c3ZjLVx1MDAzZWRlc3RpbmF0aW9ucyxcbiBcdFx0XHRcdFx0XHQgbl9saXN0KSB7XG4tXHRcdFx0aWYgKCEoZGVzdC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKSBcdTAwMjZcdTAwMjZcbitcdFx0XHRpZiAoIWlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICAgYXRvbWljX3JlYWQoXHUwMDI2ZGVzdC1cdTAwM2V3ZWlnaHQpIFx1MDAzZSAwKVxuIFx0XHRcdFx0LyogSElUICovXG4gXHRcdFx0XHRnb3RvIG91dDtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2VkLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2VkLmNcbmluZGV4IDI0NWEzMjNjODRjZDMuLjc5MjVmNGQyOGZjZTkgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2VkLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zZWQuY1xuQEAgLTc1LDcgKzc1LDcgQEAgaXBfdnNfc2VkX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHQgKi9cbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsIFx1MDAyNnN2Yy1cdTAwM2VkZXN0aW5hdGlvbnMsIG5fbGlzdCkge1xuLVx0XHRpZiAoIShkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpIFx1MDAyNlx1MDAyNlxuK1x0XHRpZiAoIWlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNld2VpZ2h0KSBcdTAwM2UgMCkge1xuIFx0XHRcdGxlYXN0ID0gZGVzdDtcbiBcdFx0XHRsb2ggPSBpcF92c19zZWRfZGVzdF9vdmVyaGVhZChsZWFzdCk7XG5AQCAtOTAsNyArOTAsNyBAQCBpcF92c19zZWRfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdCAqL1xuICAgbmV4dHN0YWdlOlxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yY3UoZGVzdCwgXHUwMDI2c3ZjLVx1MDAzZWRlc3RpbmF0aW9ucywgbl9saXN0KSB7XG4tXHRcdGlmIChkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpXG4rXHRcdGlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGRvaCA9IGlwX3ZzX3NlZF9kZXN0X292ZXJoZWFkKGRlc3QpO1xuIFx0XHRpZiAoKF9fczY0KWxvaCAqIGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNld2VpZ2h0KSBcdTAwM2VcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2guYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zaC5jXG5pbmRleCBjZDY3MDY2ZTNiMjYxLi5jMjRkZDVjYjdlNDc4IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NoLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zaC5jXG5AQCAtNzMsNyArNzMsNyBAQCBzdHJ1Y3QgaXBfdnNfc2hfc3RhdGUge1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBpc191bmF2YWlsYWJsZShzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcbiB7XG4gXHRyZXR1cm4gYXRvbWljX3JlYWQoXHUwMDI2ZGVzdC1cdTAwM2V3ZWlnaHQpIFx1MDAzYz0gMCB8fFxuLVx0ICAgICAgIGRlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRDtcbitcdCAgICAgICBpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCk7XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3R3b3MuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c190d29zLmNcbmluZGV4IGRiYjdmNWZkNDY4OGEuLjg2MTg2MTIyYTFmMDEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfdHdvcy5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfdHdvcy5jXG5AQCAtNTIsNyArNTIsNyBAQCBzdGF0aWMgc3RydWN0IGlwX3ZzX2Rlc3QgKmlwX3ZzX3R3b3Nfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YyxcbiBcbiBcdC8qIEdlbmVyYXRlIGEgcmFuZG9tIHdlaWdodCBiZXR3ZWVuIFswLHN1bSBvZiBhbGwgd2VpZ2h0cykgKi9cbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsIFx1MDAyNnN2Yy1cdTAwM2VkZXN0aW5hdGlvbnMsIG5fbGlzdCkge1xuLVx0XHRpZiAoIShkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpKSB7XG4rXHRcdGlmICghaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpKSB7XG4gXHRcdFx0d2VpZ2h0ID0gYXRvbWljX3JlYWQoXHUwMDI2ZGVzdC1cdTAwM2V3ZWlnaHQpO1xuIFx0XHRcdGlmICh3ZWlnaHQgXHUwMDNlIDApIHtcbiBcdFx0XHRcdHRvdGFsX3dlaWdodCArPSB3ZWlnaHQ7XG5AQCAtNzUsNyArNzUsNyBAQCBzdGF0aWMgc3RydWN0IGlwX3ZzX2Rlc3QgKmlwX3ZzX3R3b3Nfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YyxcbiBcbiBcdC8qIFBpY2sgdHdvIHdlaWdodGVkIHNlcnZlcnMgKi9cbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsIFx1MDAyNnN2Yy1cdTAwM2VkZXN0aW5hdGlvbnMsIG5fbGlzdCkge1xuLVx0XHRpZiAoZGVzdC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKVxuK1x0XHRpZiAoaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHR3ZWlnaHQgPSBhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZXdlaWdodCk7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3dsYy5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3dsYy5jXG5pbmRleCA5ZGE0NDVjYTA5YTE0Li4wOGU5ZTIyZjcyYmY4IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3dsYy5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd2xjLmNcbkBAIC00Nyw3ICs0Nyw3IEBAIGlwX3ZzX3dsY19zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0ICovXG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkZXN0LCBcdTAwMjZzdmMtXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcbi1cdFx0aWYgKCEoZGVzdC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKSBcdTAwMjZcdTAwMjZcbitcdFx0aWYgKCFpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZXdlaWdodCkgXHUwMDNlIDApIHtcbiBcdFx0XHRsZWFzdCA9IGRlc3Q7XG4gXHRcdFx0bG9oID0gaXBfdnNfZGVzdF9jb25uX292ZXJoZWFkKGxlYXN0KTtcbkBAIC02Miw3ICs2Miw3IEBAIGlwX3ZzX3dsY19zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0ICovXG4gICBuZXh0c3RhZ2U6XG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShkZXN0LCBcdTAwMjZzdmMtXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcbi1cdFx0aWYgKGRlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRClcbitcdFx0aWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSlcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0ZG9oID0gaXBfdnNfZGVzdF9jb25uX292ZXJoZWFkKGRlc3QpO1xuIFx0XHRpZiAoKF9fczY0KWxvaCAqIGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNld2VpZ2h0KSBcdTAwM2VcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd3JyLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd3JyLmNcbmluZGV4IDJkY2ZmMTA0MGRhNTIuLmZhZDY5YmFlNWEyMmIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd3JyLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c193cnIuY1xuQEAgLTE3Niw3ICsxNzYsNyBAQCBpcF92c193cnJfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yY3UoZGVzdCxcbiBcdFx0XHRcdFx0XHQgXHUwMDI2c3ZjLVx1MDAzZWRlc3RpbmF0aW9ucyxcbiBcdFx0XHRcdFx0XHQgbl9saXN0KSB7XG4tXHRcdFx0aWYgKCEoZGVzdC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKSBcdTAwMjZcdTAwMjZcbitcdFx0XHRpZiAoIWlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICAgYXRvbWljX3JlYWQoXHUwMDI2ZGVzdC1cdTAwM2V3ZWlnaHQpIFx1MDAzZT0gbWFyay1cdTAwM2VjdylcbiBcdFx0XHRcdGdvdG8gZm91bmQ7XG4gXHRcdFx0aWYgKGRlc3QgPT0gc3RvcClcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjEwOjE4LjIwNjg2NjgzNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUyOTcxNTUyOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJUFZTIE92ZXJsb2FkIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggZm9yIHRoZSBJUFZTIHN1YnN5c3RlbS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1ldGhvZGljYWxseSBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHdhbnQgdG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLlxuXG5UaGUgcGF0Y2ggdGFyZ2V0cyBzZXZlcmFsIGFyZWFzLiBUaGUgbW9zdCBzaWduaWZpY2FudCBjaGFuZ2VzIHNlZW0gdG8gYmUgaW4gYGluY2x1ZGUvbmV0L2lwX3ZzLmhgLiBJdCdzIHJlbW92aW5nIGBJUF9WU19ERVNUX0ZfT1ZFUkxPQURgLCB3aGljaCBpcyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4gVGhpcyBzdWdnZXN0cyBhIHNoaWZ0IGluIGhvdyBvdmVybG9hZCBzdGF0dXMgaXMgbWFuYWdlZC4gVGhlIHJlb3JnYW5pemF0aW9uIG9mIGBzdHJ1Y3QgaXBfdnNfZGVzdGAgdG8gaW5jbHVkZSBgdV90aHJlc2hvbGRfdmFsYCBhbmQgZm9jdXMgb24gY2FjaGVsaW5lIGFsaWdubWVudCBpcyBhbm90aGVyIHBvaW50IHRvIGNvbnNpZGVyLiBJJ2xsIG5lZWQgdG8gY2hlY2sgaG93IHRoYXQgaW1wYWN0cyBleGlzdGluZyBkYXRhIHN0cnVjdHVyZXMgYW5kIHBvdGVudGlhbCBsb2NrIGNvbnRlbnRpb24uIEFsc28sIGEgbmV3IGlubGluZSBoZWxwZXIgZnVuY3Rpb24gYGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZCgpYCBpcyBkZWZpbmVkLlxuXG5UaGUgY2hhbmdlcyBpbiBgaXBfdnNfY29ubi5jYCBhcmUgY3J1Y2lhbC4gVGhlIGNvbmRpdGlvbmFscyBpbiBgaXBfdnNfYmluZF9kZXN0YCBhbmQgYGlwX3ZzX3VuYmluZF9kZXN0YCB0aGF0IG5vdyBjb21wYXJlIHRoZSB0cmFmZmljIGNvdW50IHRvIGB1X3RocmVzaG9sZF92YWxgIGFyZSBhIGNyaXRpY2FsIHNoaWZ0LiBFc3NlbnRpYWxseSBpdCBjaGFuZ2VzIHRoZSBvdmVybG9hcmQgY2FsY3VsYXRpb24uIFRoZSB1c2Ugb2YgYFJFQURfT05DRWAgaGVyZSBpcyBnb29kIHRvIHNlZSBhcyBpdCBzdWdnZXN0cyBtZW1vcnkgYmFycmllcnMgYXJlIGJlaW5nIGNvbnNpZGVyZWQuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgdV90aHJlc2hvbGRfdmFsYCBpcyBwb3B1bGF0ZWQgYW5kIGhvdyB0aGUgYGlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkYCBmdW5jdGlvbiBpcyBiZWluZyB1c2VkIHRvIGFmZmVjdCB0aGlzIHRocmVzaG9sZC5cblxuVGhlIHVwZGF0ZXMgdG8gYGlwX3ZzX2N0bC5jYCB3aXRoIHRoZSBhbHRlcmVkIGltcGxlbWVudGF0aW9ucyBvZiAgYF9faXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWRgIGFuZCBgaXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWRgIHJlcXVpcmUgY2xvc2UgaW5zcGVjdGlvbi4gSSdsbCBuZWVkIHRvIHNlZSBwcmVjaXNlbHkgaG93IHRoaXMgaW1wYWN0cyB0aGUgY29udHJvbCBwYXRoIGFuZCBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy5cblxuRmluYWxseSwgdGhlIGZhY3QgdGhhdCBhIHdob2xlIHNsZXcgb2Ygc2NoZWR1bGVyIG1vZHVsZXMg4oCTIGBkaGAsIGBmb2AsIGBsYmxjYCwgYGxibGNyYCwgYGxjYCwgYG1oYCwgYG5xYCwgYG92ZmAsIGBycmAsIGBzZWRgLCBgc2hgLCBgdHdvc2AsIGB3bGNgLCBhbmQgYHdycmAg4oCTIGFyZSBiZWluZyB0b3VjaGVkIGluZGljYXRlcyBhIHBlcnZhc2l2ZSBjaGFuZ2UgaW4gb3ZlcmxvYWQgaGFuZGxpbmcgYWNyb3NzIHZhcmlvdXMgc2NoZWR1bGluZyBhbGdvcml0aG1zLiBUaGlzIGlzIHNpZ25pZmljYW50LiBJdCdzIGxpa2VseSB0aGF0IHRoZSBvdmVybG9hZCBzdGF0ZSBkaXJlY3RseSBpbXBhY3RzIHNjaGVkdWxpbmcgZGVjaXNpb25zLCBhbmQgdGhlcmVmb3JlIHRoZSBlZmZlY3Qgb2Ygb3ZlcmxvYWQgc3RhdHVzIG9uIGFsbCB0aGUgc2NoZWR1bGluZyBhbGdvcml0aG1zIG5lZWRzIHRvIGJlIGNhcmVmdWxseSBldmFsdWF0ZWQsXG5cbkJlZm9yZSBJIGdldCB0b28gZGVlcCBpbnRvIHRoZSBjb2RlLCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgS2NvbmZpZyBmb3IgSVBWUyB0byBlc3RhYmxpc2ggdGhlIGV4YWN0IGNvbmZpZ3VyYXRpb24gc3ltYm9scyBpbiBwbGF5LCBhcyB0aGlzIHdpbGwgaGVscCBtZSBlc3RhYmxpc2ggdGhlIGNvbnRleHQgZm9yIHRoaXMgcGF0Y2guIEkgZXhwZWN0IHRoaXMgd2lsbCBhbHNvIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGVzZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE0MCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjEwOjIzLjUwNDAyNTI1M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDU1NDcyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBfVlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy00LSNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo1Om1lbnVjb25maWcgSVBfVlNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy02LVxcdHRyaXN0YXRlIFxcXCJJUCB2aXJ0dWFsIHNlcnZlciBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Mjg2PWNvbW1lbnQgJ0lQVlMgU0ggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyODg6Y29uZmlnIElQX1ZTX1NIX1RBQl9CSVRTXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg5LVxcdGludCBcXFwiSVBWUyBzb3VyY2UgaGFzaGluZyB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzAxPWNvbW1lbnQgJ0lQVlMgTUggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwMi1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMDM6Y29uZmlnIElQX1ZTX01IX1RBQl9JTkRFWFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwNC1cXHRpbnQgXFxcIklQVlMgbWFnbGV2IGhhc2hpbmcgdGFibGUgaW5kZXggb2Ygc2l6ZSAodGhlIHByaW1lIG51bWJlcnMpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxMDoyMy41NTg1ODcyNDRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTkzOTAxMjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgSVBWUyBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCBhIHJlZnJlc2hlciBvbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gSVBWUyBhbmQgdGhlIGF2YWlsYWJsZSBzY2hlZHVsaW5nIGFsZ29yaXRobXMuIEknbGwgaGVhZCBzdHJhaWdodCBmb3IgdGhlIHNvdXJjZSDigJMgYG5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBkZWNpc2lvbnMgYXJlIG1hZGUsIHJpZ2h0PyBJJ20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHJlbGV2YW50IHN5bWJvbHMsIGRlcGVuZGVuY2llcywgYW5kIGFueSBuZXcgYWRkaXRpb25zIHNpbmNlIHRoZSBsYXN0IHRpbWUgSSBkdWcgaW50byB0aGlzLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgYW55IHN1YnRsZSBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIHRvIHRoZSBzY2hlZHVsZXIgb3B0aW9ucywgbWF5YmUgbmV3IGFsZ29yaXRobXMgb3IgZGVwZW5kZW5jaWVzIEkndmUgbWlzc2VkLiBUaGlzIEtjb25maWcgZmlsZSB3aWxsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY3VycmVudCBmZWF0dXJlIHNldCBhbmQgYnVpbGQgb3B0aW9ucyBhdmFpbGFibGUgZm9yIGNvbmZpZ3VyaW5nIElQVlMgaW4gYSBydW5uaW5nIHN5c3RlbSwgb3IgYSBidWlsZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4MjYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxMDoyNS41NTI0OTEzMzJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBJUCBWaXJ0dWFsIFNlcnZlciBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRtZW51Y29uZmlnIElQX1ZTXFxuICAgNjpcXHRcXHR0cmlzdGF0ZSBcXFwiSVAgdmlydHVhbCBzZXJ2ZXIgc3VwcG9ydFxcXCJcXG4gICA3OlxcdFxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBORVRGSUxURVJcXG4gICA4OlxcdFxcdGRlcGVuZHMgb24gKE5GX0NPTk5UUkFDSyB8fCBORl9DT05OVFJBQ0s9bilcXG4gICA5OlxcdFxcdGhlbHBcXG4gIDEwOlxcdFxcdCAgSVAgVmlydHVhbCBTZXJ2ZXIgc3VwcG9ydCB3aWxsIGxldCB5b3UgYnVpbGQgYSBoaWdoLXBlcmZvcm1hbmNlXFxuICAxMTpcXHRcXHQgIHZpcnR1YWwgc2VydmVyIGJhc2VkIG9uIGNsdXN0ZXIgb2YgdHdvIG9yIG1vcmUgcmVhbCBzZXJ2ZXJzLiBUaGlzXFxuICAxMjpcXHRcXHQgIG9wdGlvbiBtdXN0IGJlIGVuYWJsZWQgZm9yIGF0IGxlYXN0IG9uZSBvZiB0aGUgY2x1c3RlcmVkIGNvbXB1dGVyc1xcbiAgMTM6XFx0XFx0ICB0aGF0IHdpbGwgdGFrZSBjYXJlIG9mIGludGVyY2VwdGluZyBpbmNvbWluZyBjb25uZWN0aW9ucyB0byBhXFxuICAxNDpcXHRcXHQgIHNpbmdsZSBJUCBhZGRyZXNzIGFuZCBzY2hlZHVsaW5nIHRoZW0gdG8gcmVhbCBzZXJ2ZXJzLlxcbiAgMTU6XFx0XFxuICAxNjpcXHRcXHQgIFRocmVlIHJlcXVlc3QgZGlzcGF0Y2hpbmcgdGVjaG5pcXVlcyBhcmUgaW1wbGVtZW50ZWQsIHRoZXkgYXJlXFxuICAxNzpcXHRcXHQgIHZpcnR1YWwgc2VydmVyIHZpYSBOQVQsIHZpcnR1YWwgc2VydmVyIHZpYSB0dW5uZWxpbmcgYW5kIHZpcnR1YWxcXG4gIDE4OlxcdFxcdCAgc2VydmVyIHZpYSBkaXJlY3Qgcm91dGluZy4gVGhlIHNldmVyYWwgc2NoZWR1bGluZyBhbGdvcml0aG1zIGNhblxcbiAgMTk6XFx0XFx0ICBiZSB1c2VkIHRvIGNob29zZSB3aGljaCBzZXJ2ZXIgdGhlIGNvbm5lY3Rpb24gaXMgZGlyZWN0ZWQgdG8sXFxuICAyMDpcXHRcXHQgIHRodXMgbG9hZCBiYWxhbmNpbmcgY2FuIGJlIGFjaGlldmVkIGFtb25nIHRoZSBzZXJ2ZXJzLiAgRm9yIG1vcmVcXG4gIDIxOlxcdFxcdCAgaW5mb3JtYXRpb24gYW5kIGl0cyBhZG1pbmlzdHJhdGlvbiBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgdGhlXFxuICAyMjpcXHRcXHQgIGZvbGxvd2luZyBVUkw6IFxcdTAwM2NodHRwOi8vd3d3LmxpbnV4dmlydHVhbHNlcnZlci5vcmcvXFx1MDAzZS5cXG4gIDIzOlxcdFxcbiAgMjQ6XFx0XFx0ICBJZiB5b3Ugd2FudCB0byBjb21waWxlIGl0IGluIGtlcm5lbCwgc2F5IFkuIFRvIGNvbXBpbGUgaXQgYXMgYVxcbiAgMjU6XFx0XFx0ICBtb2R1bGUsIGNob29zZSBNIGhlcmUuIElmIHVuc3VyZSwgc2F5IE4uXFxuICAyNjpcXHRcXG4gIDI3OlxcdGlmIElQX1ZTXFxuICAyODpcXHRcXG4gIDI5OlxcdGNvbmZpZ1xcdElQX1ZTX0lQVjZcXG4gIDMwOlxcdFxcdGJvb2wgXFxcIklQdjYgc3VwcG9ydCBmb3IgSVBWU1xcXCJcXG4gIDMxOlxcdFxcdGRlcGVuZHMgb24gSVBWNiA9IHkgfHwgSVBfVlMgPSBJUFY2XFxuICAzMjpcXHRcXHRzZWxlY3QgTkZfREVGUkFHX0lQVjZcXG4gIDMzOlxcdFxcdGhlbHBcXG4gIDM0OlxcdFxcdCAgQWRkIElQdjYgc3VwcG9ydCB0byBJUFZTLlxcbiAgMzU6XFx0XFxuICAzNjpcXHRcXHQgIFNheSBZIGlmIHVuc3VyZS5cXG4gIDM3OlxcdFxcbiAgMzg6XFx0Y29uZmlnXFx0SVBfVlNfREVCVUdcXG4gIDM5OlxcdFxcdGJvb2wgXFxcIklQIHZpcnR1YWwgc2VydmVyIGRlYnVnZ2luZ1xcXCJcXG4gIDQwOlxcdFxcdGhlbHBcXG4gIDQxOlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBnZXQgYWRkaXRpb25hbCBtZXNzYWdlcyB1c2VmdWwgaW5cXG4gIDQyOlxcdFxcdCAgZGVidWdnaW5nIHRoZSBJUCB2aXJ0dWFsIHNlcnZlciBjb2RlLiBZb3UgY2FuIGNoYW5nZSB0aGUgZGVidWdcXG4gIDQzOlxcdFxcdCAgbGV2ZWwgaW4gL3Byb2Mvc3lzL25ldC9pcHY0L3ZzL2RlYnVnX2xldmVsXFxuICA0NDpcXHRcXG4gIDQ1OlxcdGNvbmZpZ1xcdElQX1ZTX1RBQl9CSVRTXFxuICA0NjpcXHRcXHRpbnQgXFxcIklQVlMgY29ubmVjdGlvbiB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXFxcIlxcbiAgNDc6XFx0XFx0cmFuZ2UgOCAyMCBpZiAhNjRCSVRcXG4gIDQ4OlxcdFxcdHJhbmdlIDggMjcgaWYgNjRCSVRcXG4gIDQ5OlxcdFxcdGRlZmF1bHQgMTJcXG4gIDUwOlxcdFxcdGhlbHBcXG4gIDUxOlxcdFxcdCAgVGhlIElQVlMgY29ubmVjdGlvbiBoYXNoIHRhYmxlIHVzZXMgdGhlIGNoYWluaW5nIHNjaGVtZSB0byBoYW5kbGVcXG4gIDUyOlxcdFxcdCAgaGFzaCBjb2xsaXNpb25zLiBVc2luZyBhIGJpZyBJUFZTIGNvbm5lY3Rpb24gaGFzaCB0YWJsZSB3aWxsIGdyZWF0bHlcXG4gIDUzOlxcdFxcdCAgcmVkdWNlIGNvbmZsaWN0cyB3aGVuIHRoZXJlIGFyZSBodW5kcmVkcyBvZiB0aG91c2FuZHMgb2YgY29ubmVjdGlvbnNcXG4gIDU0OlxcdFxcdCAgaW4gdGhlIGhhc2ggdGFibGUuXFxuICA1NTpcXHRcXG4gIDU2OlxcdFxcdCAgTm90ZSB0aGUgdGFibGUgc2l6ZSBtdXN0IGJlIHBvd2VyIG9mIDIuIFRoZSB0YWJsZSBzaXplIHdpbGwgYmUgdGhlXFxuICA1NzpcXHRcXHQgIHZhbHVlIG9mIDIgdG8gdGhlIHlvdXIgaW5wdXQgbnVtYmVyIHBvd2VyLiBUaGUgbnVtYmVyIHRvIGNob29zZSBpc1xcbiAgNTg6XFx0XFx0ICBmcm9tIDggdG8gMjcgZm9yIDY0QklUKDIwIG90aGVyd2lzZSksIHRoZSBkZWZhdWx0IG51bWJlciBpcyAxMixcXG4gIDU5OlxcdFxcdCAgd2hpY2ggbWVhbnMgdGhlIHRhYmxlIHNpemUgaXMgNDA5Ni4gRG9uJ3QgaW5wdXQgdGhlIG51bWJlciB0b29cXG4gIDYwOlxcdFxcdCAgc21hbGwsIG90aGVyd2lzZSB5b3Ugd2lsbCBsb3NlIHBlcmZvcm1hbmNlIG9uIGl0LiBZb3UgY2FuIGFkYXB0IHRoZVxcbiAgNjE6XFx0XFx0ICB0YWJsZSBzaXplIHlvdXJzZWxmLCBhY2NvcmRpbmcgdG8geW91ciB2aXJ0dWFsIHNlcnZlciBhcHBsaWNhdGlvbi5cXG4gIDYyOlxcdFxcdCAgSXQgaXMgZ29vZCB0byBzZXQgdGhlIHRhYmxlIHNpemUgbm90IGZhciBsZXNzIHRoYW4gdGhlIG51bWJlciBvZlxcbiAgNjM6XFx0XFx0ICBjb25uZWN0aW9ucyBwZXIgc2Vjb25kIG11bHRpcGx5aW5nIGF2ZXJhZ2UgbGFzdGluZyB0aW1lIG9mXFxuICA2NDpcXHRcXHQgIGNvbm5lY3Rpb24gaW4gdGhlIHRhYmxlLiAgRm9yIGV4YW1wbGUsIHlvdXIgdmlydHVhbCBzZXJ2ZXIgZ2V0cyAyMDBcXG4gIDY1OlxcdFxcdCAgY29ubmVjdGlvbnMgcGVyIHNlY29uZCwgdGhlIGNvbm5lY3Rpb24gbGFzdHMgZm9yIDIwMCBzZWNvbmRzIGluXFxuICA2NjpcXHRcXHQgIGF2ZXJhZ2UgaW4gdGhlIGNvbm5lY3Rpb24gdGFibGUsIHRoZSB0YWJsZSBzaXplIHNob3VsZCBiZSBub3QgZmFyXFxuICA2NzpcXHRcXHQgIGxlc3MgdGhhbiAyMDB4MjAwLCBpdCBpcyBnb29kIHRvIHNldCB0aGUgdGFibGUgc2l6ZSAzMjc2OCAoMioqMTUpLlxcbiAgNjg6XFx0XFxuICA2OTpcXHRcXHQgIEFub3RoZXIgbm90ZSB0aGF0IGVhY2ggY29ubmVjdGlvbiBvY2N1cGllcyAxMjggYnl0ZXMgZWZmZWN0aXZlbHkgYW5kXFxuICA3MDpcXHRcXHQgIGVhY2ggaGFzaCBlbnRyeSB1c2VzIDggYnl0ZXMsIHNvIHlvdSBjYW4gZXN0aW1hdGUgaG93IG11Y2ggbWVtb3J5IGlzXFxuICA3MTpcXHRcXHQgIG5lZWRlZCBmb3IgeW91ciBib3guXFxuICA3MjpcXHRcXG4gIDczOlxcdFxcdCAgWW91IGNhbiBvdmVyd3JpdGUgdGhpcyBudW1iZXIgc2V0dGluZyBjb25uX3RhYl9iaXRzIG1vZHVsZSBwYXJhbWV0ZXJcXG4gIDc0OlxcdFxcdCAgb3IgYnkgYXBwZW5kaW5nIGlwX3ZzLmNvbm5fdGFiX2JpdHM9PyB0byB0aGUga2VybmVsIGNvbW1hbmQgbGluZSBpZlxcbiAgNzU6XFx0XFx0ICBJUCBWUyB3YXMgY29tcGlsZWQgYnVpbHQtaW4uXFxuICA3NjpcXHRcXG4gIDc3OlxcdGNvbW1lbnQgXFxcIklQVlMgdHJhbnNwb3J0IHByb3RvY29sIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcXFwiXFxuICA3ODpcXHRcXG4gIDc5OlxcdGNvbmZpZ1xcdElQX1ZTX1BST1RPX1RDUFxcbiAgODA6XFx0XFx0Ym9vbCBcXFwiVENQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjEwOjI1LjU1MjU3OTA5MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NTIxMTgzNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIHRoZSBJUFZTIFNjaGVkdWxlciBDb25maWd1cmF0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgYmFjayBpbnRvIHRoZSBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgIGZpbGUuIEknbSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiBnZXR0aW5nIGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBzY2hlZHVsZXIgY29uZmlndXJhdGlvbnMuIEkga25vdyB0aGUgYmFzaWNzLCBidXQgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBjcnVjaWFsIHJlZ2FyZGluZyB0aGUgYXZhaWxhYmxlIHNjaGVkdWxpbmcgYWxnb3JpdGhtcyBhbmQgdGhlaXIgYXNzb2NpYXRlZCBvcHRpb25zIHdpdGhpbiB0aGUgSVBWUyBmcmFtZXdvcmsuIEkgd2FudCB0byBlbnN1cmUgSSBoYXZlIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgcG90ZW50aWFsIGNhdmVhdHMgYXNzb2NpYXRlZCB3aXRoIHNwZWNpZmljIHNjaGVkdWxlciBzZWxlY3Rpb25zLiBUaW1lIHRvIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzMTMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjEwOjI3LjQwNDY5OTQ5NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTY3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgODE6XFx0XFx0aGVscFxcbiAgODI6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGxvYWQgYmFsYW5jaW5nIFRDUCB0cmFuc3BvcnRcXG4gIDgzOlxcdFxcdCAgcHJvdG9jb2wuIFNheSBZIGlmIHVuc3VyZS5cXG4gIDg0OlxcdFxcbiAgODU6XFx0Y29uZmlnXFx0SVBfVlNfUFJPVE9fVURQXFxuICA4NjpcXHRcXHRib29sIFxcXCJVRFAgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFxcXCJcXG4gIDg3OlxcdFxcdGhlbHBcXG4gIDg4OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBsb2FkIGJhbGFuY2luZyBVRFAgdHJhbnNwb3J0XFxuICA4OTpcXHRcXHQgIHByb3RvY29sLiBTYXkgWSBpZiB1bnN1cmUuXFxuICA5MDpcXHRcXG4gIDkxOlxcdGNvbmZpZ1xcdElQX1ZTX1BST1RPX0FIX0VTUFxcbiAgOTI6XFx0XFx0ZGVmX2Jvb2wgSVBfVlNfUFJPVE9fRVNQIHx8IElQX1ZTX1BST1RPX0FIXFxuICA5MzpcXHRcXG4gIDk0OlxcdGNvbmZpZ1xcdElQX1ZTX1BST1RPX0VTUFxcbiAgOTU6XFx0XFx0Ym9vbCBcXFwiRVNQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcXFwiXFxuICA5NjpcXHRcXHRoZWxwXFxuICA5NzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgbG9hZCBiYWxhbmNpbmcgRVNQIChFbmNhcHN1bGF0aW9uXFxuICA5ODpcXHRcXHQgIFNlY3VyaXR5IFBheWxvYWQpIHRyYW5zcG9ydCBwcm90b2NvbC4gU2F5IFkgaWYgdW5zdXJlLlxcbiAgOTk6XFx0XFxuIDEwMDpcXHRjb25maWdcXHRJUF9WU19QUk9UT19BSFxcbiAxMDE6XFx0XFx0Ym9vbCBcXFwiQUggbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFxcXCJcXG4gMTAyOlxcdFxcdGhlbHBcXG4gMTAzOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBsb2FkIGJhbGFuY2luZyBBSCAoQXV0aGVudGljYXRpb25cXG4gMTA0OlxcdFxcdCAgSGVhZGVyKSB0cmFuc3BvcnQgcHJvdG9jb2wuIFNheSBZIGlmIHVuc3VyZS5cXG4gMTA1OlxcdFxcbiAxMDY6XFx0Y29uZmlnICBJUF9WU19QUk9UT19TQ1RQXFxuIDEwNzpcXHRcXHRib29sIFxcXCJTQ1RQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcXFwiXFxuIDEwODpcXHRcXHRzZWxlY3QgTkVUX0NSQzMyQ1xcbiAxMDk6XFx0XFx0aGVscFxcbiAxMTA6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGxvYWQgYmFsYW5jaW5nIFNDVFAgdHJhbnNwb3J0XFxuIDExMTpcXHRcXHQgIHByb3RvY29sLiBTYXkgWSBpZiB1bnN1cmUuXFxuIDExMjpcXHRcXG4gMTEzOlxcdGNvbW1lbnQgXFxcIklQVlMgc2NoZWR1bGVyXFxcIlxcbiAxMTQ6XFx0XFxuIDExNTpcXHRjb25maWdcXHRJUF9WU19SUlxcbiAxMTY6XFx0XFx0dHJpc3RhdGUgXFxcInJvdW5kLXJvYmluIHNjaGVkdWxpbmdcXFwiXFxuIDExNzpcXHRcXHRoZWxwXFxuIDExODpcXHRcXHQgIFRoZSByb2Jpbi1yb2JpbiBzY2hlZHVsaW5nIGFsZ29yaXRobSBzaW1wbHkgZGlyZWN0cyBuZXR3b3JrXFxuIDExOTpcXHRcXHQgIGNvbm5lY3Rpb25zIHRvIGRpZmZlcmVudCByZWFsIHNlcnZlcnMgaW4gYSByb3VuZC1yb2JpbiBtYW5uZXIuXFxuIDEyMDpcXHRcXG4gMTIxOlxcdFxcdCAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBpbiBrZXJuZWwsIHNheSBZLiBUbyBjb21waWxlIGl0IGFzIGFcXG4gMTIyOlxcdFxcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBJZiB1bnN1cmUsIHNheSBOLlxcbiAxMjM6XFx0IFxcbiAxMjQ6XFx0Y29uZmlnXFx0SVBfVlNfV1JSXFxuIDEyNTpcXHRcXHR0cmlzdGF0ZSBcXFwid2VpZ2h0ZWQgcm91bmQtcm9iaW4gc2NoZWR1bGluZ1xcXCJcXG4gMTI2OlxcdFxcdGhlbHBcXG4gMTI3OlxcdFxcdCAgVGhlIHdlaWdodGVkIHJvYmluLXJvYmluIHNjaGVkdWxpbmcgYWxnb3JpdGhtIGRpcmVjdHMgbmV0d29ya1xcbiAxMjg6XFx0XFx0ICBjb25uZWN0aW9ucyB0byBkaWZmZXJlbnQgcmVhbCBzZXJ2ZXJzIGJhc2VkIG9uIHNlcnZlciB3ZWlnaHRzXFxuIDEyOTpcXHRcXHQgIGluIGEgcm91bmQtcm9iaW4gbWFubmVyLiBTZXJ2ZXJzIHdpdGggaGlnaGVyIHdlaWdodHMgcmVjZWl2ZVxcbiAxMzA6XFx0XFx0ICBuZXcgY29ubmVjdGlvbnMgZmlyc3QgdGhhbiB0aG9zZSB3aXRoIGxlc3Mgd2VpZ2h0cywgYW5kIHNlcnZlcnNcXG4gMTMxOlxcdFxcdCAgd2l0aCBoaWdoZXIgd2VpZ2h0cyBnZXQgbW9yZSBjb25uZWN0aW9ucyB0aGFuIHRob3NlIHdpdGggbGVzc1xcbiAxMzI6XFx0XFx0ICB3ZWlnaHRzIGFuZCBzZXJ2ZXJzIHdpdGggZXF1YWwgd2VpZ2h0cyBnZXQgZXF1YWwgY29ubmVjdGlvbnMuXFxuIDEzMzpcXHRcXG4gMTM0OlxcdFxcdCAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBpbiBrZXJuZWwsIHNheSBZLiBUbyBjb21waWxlIGl0IGFzIGFcXG4gMTM1OlxcdFxcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBJZiB1bnN1cmUsIHNheSBOLlxcbiAxMzY6XFx0XFxuIDEzNzpcXHRjb25maWdcXHRJUF9WU19MQ1xcbiAxMzg6XFx0XFx0dHJpc3RhdGUgXFxcImxlYXN0LWNvbm5lY3Rpb24gc2NoZWR1bGluZ1xcXCJcXG4gMTM5OlxcdFxcdGhlbHBcXG4gMTQwOlxcdFxcdCAgVGhlIGxlYXN0LWNvbm5lY3Rpb24gc2NoZWR1bGluZyBhbGdvcml0aG0gZGlyZWN0cyBuZXR3b3JrXFxuIDE0MTpcXHRcXHQgIGNvbm5lY3Rpb25zIHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgbGVhc3QgbnVtYmVyIG9mIGFjdGl2ZSBcXG4gMTQyOlxcdFxcdCAgY29ubmVjdGlvbnMuXFxuIDE0MzpcXHRcXG4gMTQ0OlxcdFxcdCAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBpbiBrZXJuZWwsIHNheSBZLiBUbyBjb21waWxlIGl0IGFzIGFcXG4gMTQ1OlxcdFxcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBJZiB1bnN1cmUsIHNheSBOLlxcbiAxNDY6XFx0XFxuIDE0NzpcXHRjb25maWdcXHRJUF9WU19XTENcXG4gMTQ4OlxcdFxcdHRyaXN0YXRlIFxcXCJ3ZWlnaHRlZCBsZWFzdC1jb25uZWN0aW9uIHNjaGVkdWxpbmdcXFwiXFxuIDE0OTpcXHRcXHRoZWxwXFxuIDE1MDpcXHRcXHQgIFRoZSB3ZWlnaHRlZCBsZWFzdC1jb25uZWN0aW9uIHNjaGVkdWxpbmcgYWxnb3JpdGhtIGRpcmVjdHMgbmV0d29ya1xcbiAxNTE6XFx0XFx0ICBjb25uZWN0aW9ucyB0byB0aGUgc2VydmVyIHdpdGggdGhlIGxlYXN0IGFjdGl2ZSBjb25uZWN0aW9uc1xcbiAxNTI6XFx0XFx0ICBub3JtYWxpemVkIGJ5IHRoZSBzZXJ2ZXIgd2VpZ2h0LlxcbiAxNTM6XFx0XFxuIDE1NDpcXHRcXHQgIElmIHlvdSB3YW50IHRvIGNvbXBpbGUgaXQgaW4ga2VybmVsLCBzYXkgWS4gVG8gY29tcGlsZSBpdCBhcyBhXFxuIDE1NTpcXHRcXHQgIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gSWYgdW5zdXJlLCBzYXkgTi5cXG4gMTU2OlxcdFxcbiAxNTc6XFx0Y29uZmlnICBJUF9WU19GT1xcbiAxNTg6XFx0XFx0XFx0dHJpc3RhdGUgXFxcIndlaWdodGVkIGZhaWxvdmVyIHNjaGVkdWxpbmdcXFwiXFxuIDE1OTpcXHRcXHRoZWxwXFxuIDE2MDpcXHRcXHQgIFRoZSB3ZWlnaHRlZCBmYWlsb3ZlciBzY2hlZHVsaW5nIGFsZ29yaXRobSBkaXJlY3RzIG5ldHdvcmtcXG4gMTYxOlxcdFxcdCAgY29ubmVjdGlvbnMgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSBoaWdoZXN0IHdlaWdodCB0aGF0IGlzXFxuIDE2MjpcXHRcXHQgIGN1cnJlbnRseSBhdmFpbGFibGUuXFxuIDE2MzpcXHRcXG4gMTY0OlxcdFxcdCAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBpbiBrZXJuZWwsIHNheSBZLiBUbyBjb21waWxlIGl0IGFzIGFcXG4gMTY1OlxcdFxcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBJZiB1bnN1cmUsIHNheSBOLlxcbiAxNjY6XFx0XFxuIDE2NzpcXHRjb25maWcgIElQX1ZTX09WRlxcbiAxNjg6XFx0XFx0dHJpc3RhdGUgXFxcIndlaWdodGVkIG92ZXJmbG93IHNjaGVkdWxpbmdcXFwiXFxuIDE2OTpcXHRcXHRoZWxwXFxuIDE3MDpcXHRcXHQgIFRoZSB3ZWlnaHRlZCBvdmVyZmxvdyBzY2hlZHVsaW5nIGFsZ29yaXRobSBkaXJlY3RzIG5ldHdvcmtcXG4gMTcxOlxcdFxcdCAgY29ubmVjdGlvbnMgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSBoaWdoZXN0IHdlaWdodCB0aGF0IGlzXFxuIDE3MjpcXHRcXHQgIGN1cnJlbnRseSBhdmFpbGFibGUgYW5kIG92ZXJmbG93cyB0byB0aGUgbmV4dCB3aGVuIGFjdGl2ZVxcbiAxNzM6XFx0XFx0ICBjb25uZWN0aW9ucyBleGNlZWQgdGhlIG5vZGUncyB3ZWlnaHQuXFxuIDE3NDpcXHRcXG4gMTc1OlxcdFxcdCAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBpbiBrZXJuZWwsIHNheSBZLiBUbyBjb21waWxlIGl0IGFzIGFcXG4gMTc2OlxcdFxcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBJZiB1bnN1cmUsIHNheSBOLlxcbiAxNzc6XFx0XFxuIDE3ODpcXHRjb25maWdcXHRJUF9WU19MQkxDXFxuIDE3OTpcXHRcXHR0cmlzdGF0ZSBcXFwibG9jYWxpdHktYmFzZWQgbGVhc3QtY29ubmVjdGlvbiBzY2hlZHVsaW5nXFxcIlxcbiAxODA6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxMDoyNy40MDQ4MDcwMDZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MzI1OTQ2MTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBJUFZTIERlc3RpbmF0aW9uIE92ZXJsb2FkIFRocmVzaG9sZCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSVBWUyBpcyBkZWZpbml0ZWx5IGEga2V5IGNvbXBvbmVudCBoZXJlLCBwYXJ0IG9mIG5ldGZpbHRlciwgYW5kIGFjY2Vzc2libGUgdGhyb3VnaCBuZXRsaW5rIGludGVyZmFjZXMsIHNvY2tvcHQsIGV0Yy4sIHdoaWNoIGlzIGEgZ29vZCBzaWduLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIGl0cyBpbnRlZ3JhdGlvbiBpbiBRRU1VL3ZpcnQgZW52aXJvbm1lbnRzLiBUaGUgY3JpdGljYWwgcXVlc3Rpb246IElzIHRoaXMgdGhpbmcgcmVhY2hhYmxlIHRocm91Z2ggc3l6a2FsbGVyPyBZZXAsIHN5emthbGxlciBzdXBwb3J0cyBJUFZTIG5ldGxpbmsgYW5kIG5ldGZpbHRlciBvcGVyYXRpb25zLiBFeGNlbGxlbnQuXG5cbk5vdywgd2UncmUgdGFsa2luZyBhYm91dCBjb2RlIHRoYXQncyBwb3RlbnRpYWxseSBtb2RpZnlpbmcgdGhlIElQVlMgZGVzdGluYXRpb24gb3ZlcmxvYWQgdGhyZXNob2xkIGxvZ2ljIGFuZCB0aGUgdW5kZXJseWluZyBzdHJ1Y3R1cmUgbGF5b3V0LiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGxvY2F0aW9uczpcbi0gICBgaXBfdnNfYmluZF9kZXN0YCBhbmQgYGlwX3ZzX3VuYmluZF9kZXN0YCB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNgLlxuLSAgIGBpcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZGAsIGBfX2lwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkYCwgYW5kIGBfX2lwX3ZzX3VwZGF0ZV9kZXN0YCB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuY2AuXG4tICAgQW5kIHRoZSBzY2hlZHVsZXIgZnVuY3Rpb25zIGluIHRoZSB2YXJpb3VzIHNjaGVkdWxlciBmaWxlcyBpbnZvbHZlZC5cblxuVGltZSB0byBzZWUgaWYgdGhpcyBpcyBcIldvcnRoRnV6emluZ1wiLiBDb25zaWRlcmluZyB0aGF0IGl0IHRvdWNoZXMgZXhlY3V0YWJsZSBuZXR3b3JraW5nLCBuZXRmaWx0ZXIsIGFuZCBJUFZTIGNvZGUgdGhhdCdzIHJlYWNoYWJsZSwgdGhlIGFuc3dlciBpcyBhIHJlc291bmRpbmcgXCJ5ZXNcIi4gU28sIHRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIGlzIHNldCB0byBgdHJ1ZWAuXG5cbk5vdyBmb3IgYEZvY3VzU3ltYm9sc2AuIEkgbmVlZCB0byBiZSBwcmVjaXNlLCB6ZXJvaW5nIGluIG9uIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCBhcmUgYmVpbmcgbW9kaWZpZWQgb3IgZGlyZWN0bHkgY2FsbCB0aGUgbW9kaWZpZWQgbG9naWMsIGFuZCB0aGF0IGFyZSBub3QgdWJpcXVpdG91cy4gTGV0J3Mgc2VlLi4uXG5cbkluIGBpcF92c19jb25uLmNgLCB3ZSBoYXZlOlxuLSBgaXBfdnNfYmluZF9kZXN0YFxuLSBgaXBfdnNfdW5iaW5kX2Rlc3RgXG5cbkFuZCB0aGVuIGluIGBpcF92c19jdGwuY2A6XG4tIGBpcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZGAgKFRoaXMgaXMgZXhwb3J0ZWQgYW5kIG5vbi1zdGF0aWMsIHNvIHByb21pc2luZyEpXG4tIGBfX2lwX3ZzX3VwZGF0ZV9kZXN0YCAob3IgYW55IG9mIGl0cyBjYWxsZXJzLCBgaXBfdnNfZWRpdF9kZXN0YCBvciBgaXBfdnNfYWRkX2Rlc3RgLilcblxuTGV0J3MgZGl2ZSBpbnRvIGBpcF92c19jdGwuY2AgYXJvdW5kIGBfX2lwX3ZzX3VwZGF0ZV9kZXN0YC4gVGhhdCBzZWVtcyBsaWtlIHRoZSByaWdodCBhcmVhIHRvIGNvbmNlbnRyYXRlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDk0MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjEwOjMyLjczMDc1NTUyMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYzMjQ2NTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19pcF92c191cGRhdGVfZGVzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0xMzQ0PXN0YXRpYyB2b2lkXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjEzNDU6X19pcF92c191cGRhdGVfZGVzdChzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMTM0Ni1cXHRcXHQgICAgc3RydWN0IGlwX3ZzX2Rlc3RfdXNlcl9rZXJuICp1ZGVzdCwgaW50IGFkZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0xNDQzPWlwX3ZzX25ld19kZXN0KHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIHN0cnVjdCBpcF92c19kZXN0X3VzZXJfa2VybiAqdWRlc3QpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMTQ5NC1cXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2ZGVzdC1cXHUwMDNlZHN0X2xvY2spO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoxNDk1OlxcdF9faXBfdnNfdXBkYXRlX2Rlc3Qoc3ZjLCBkZXN0LCB1ZGVzdCwgMSk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTE0OTYtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MTUxMj1pcF92c19hZGRfZGVzdChzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBzdHJ1Y3QgaXBfdnNfZGVzdF91c2VyX2tlcm4gKnVkZXN0KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTE1NzItXFx0XFx0ZWxzZVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoxNTczOlxcdFxcdFxcdF9faXBfdnNfdXBkYXRlX2Rlc3Qoc3ZjLCBkZXN0LCB1ZGVzdCwgMSk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTE1NzQtXFx0fSBlbHNlIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0xNTg5PWlwX3ZzX2VkaXRfZGVzdChzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBzdHJ1Y3QgaXBfdnNfZGVzdF91c2VyX2tlcm4gKnVkZXN0KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTE2MjctXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjE2Mjg6XFx0X19pcF92c191cGRhdGVfZGVzdChzdmMsIGRlc3QsIHVkZXN0LCAwKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMTYyOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6MTA6MzIuNzg3MDg0NTI1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU4MDQzMTU5NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgSVBWUyBTY2hlZHVsZXIgTW9kaWZpY2F0aW9ucyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSB3aGljaCBzY2hlZHVsZXJzIGhhdmUgYmVlbiB0b3VjaGVkLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZXNlIHR3ZWx2ZTogYGlwX3ZzX2RoX3NjaGVkdWxlYCwgYGlwX3ZzX2ZvX3NjaGVkdWxlYCwgYF9faXBfdnNfbGJsY19zY2hlZHVsZWAsIGBfX2lwX3ZzX2xibGNyX3NjaGVkdWxlYCwgYGlwX3ZzX2xjX3NjaGVkdWxlYCwgYGlwX3ZzX25xX3NjaGVkdWxlYCwgYGlwX3ZzX292Zl9zY2hlZHVsZWAsIGBpcF92c19ycl9zY2hlZHVsZWAsIGBpcF92c19zZWRfc2NoZWR1bGVgLCBgaXBfdnNfdHdvc19zY2hlZHVsZWAsIGBpcF92c193bGNfc2NoZWR1bGVgLCBhbmQgYGlwX3ZzX3dycl9zY2hlZHVsZWAuIEknbGwgbmVlZCB0byBsb29rIGF0IHRoZSBzdXBwb3J0aW5nIGZ1bmN0aW9ucyBhcyB3ZWxsOiBgaXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWRgLCBgaXBfdnNfYmluZF9kZXN0YCwgYGlwX3ZzX3VuYmluZF9kZXN0YCwgYGlwX3ZzX2VkaXRfZGVzdGAsIGFuZCBgaXBfdnNfYWRkX2Rlc3RgLlxuXG5Ob3csIGJlZm9yZSBJIHByb2NlZWQgd2l0aCBhbnkgZnVydGhlciBpbnZlc3RpZ2F0aW9uLCBJIG5lZWQgdG8gY2hlY2sgd2hhdCBjb25maWd1cmF0aW9ucywgaWYgYW55LCBhcmUgbmVlZGVkLiBBIHF1aWNrIGxvb2sgYXQgdGhlIGBLY29uZmlnYCBmb3IgdGhlIElQVlMgY29yZSB0ZWxscyBtZSB0aGF0IGl0IGRlcGVuZHMgb24gYElORVRgIGFuZCBgTkVURklMVEVSYCBhbmQgZWl0aGVyIGBORl9DT05OVFJBQ0tgIG9yIGBORl9DT05OVFJBQ0s9bmAuIFRoYXQgbWFrZXMgc2Vuc2UuIEkgaGF2ZSB0byBtYWtlIHN1cmUgdGhlc2UgZGVwZW5kZW5jaWVzIGFyZSBwcm9wZXJseSBoYW5kbGVkLlxuXG5BbmQgb2YgY291cnNlLCB0aGUgc2NoZWR1bGVycyB0aGVtc2VsdmVzIGFyZSBlbmFibGVkIGJ5IGNvbmZpZ3MgYXMgd2VsbCwgbmFtZWx5OiBgSVBfVlNfUlJgLCBgSVBfVlNfV1JSYCwgYElQX1ZTX0xDYCwgYElQX1ZTX1dMQ2AsIGBJUF9WU19GT2AsIGBJUF9WU19PVkZgLCBgSVBfVlNfTEJMQ2AsIGBJUF9WU19MQkxDUmAsIGBJUF9WU19ESGAsIGBJUF9WU19TSGAsIGBJUF9WU19TRURgLCBgSVBfVlNfTlFgLCBgSVBfVlNfVFdPU2AsIGFuZCBgSVBfVlNfTUhgLiBJIHNob3VsZCBhbHNvIHJlLWNvbmZpcm0gdGhhdCBgTkVURklMVEVSYCBhbmQgYElORVRgIGFyZSBjb25maWd1cmVkIGNvcnJlY3RseSBhbmQgdGhhdCB0aGVyZSBhcmUgbm8gY29uZmxpY3RzLlxuXG5UbyBtYWtlIHN1cmUgSSdtIHByZWNpc2UsIEknbGwgbmVlZCB0byBleGFtaW5lIHRoZSBgS2NvbmZpZ2AgZmlsZXMgbW9yZSBjbG9zZWx5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gYWNjb3VudGluZyBmb3IgZXZlcnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0MzEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6MTA6MzguNTkxNDA0NThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MjIwNDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUF9WU19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Mjg2PWNvbW1lbnQgJ0lQVlMgU0ggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyODg6Y29uZmlnIElQX1ZTX1NIX1RBQl9CSVRTXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg5LVxcdGludCBcXFwiSVBWUyBzb3VyY2UgaGFzaGluZyB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzAxPWNvbW1lbnQgJ0lQVlMgTUggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwMi1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMDM6Y29uZmlnIElQX1ZTX01IX1RBQl9JTkRFWFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwNC1cXHRpbnQgXFxcIklQVlMgbWFnbGV2IGhhc2hpbmcgdGFibGUgaW5kZXggb2Ygc2l6ZSAodGhlIHByaW1lIG51bWJlcnMpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxMDozOC42MzY2Mjk5MTNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjIyNTgwOTQxNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIHRoZSBJUFZTIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgSVBWUyBLY29uZmlnIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgc2VjdGlvbiBmcm9tIGxpbmVzIDE4MCB0byAzMjAgaW4gYG5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnYC4gSSdtIGdvaW5nIHRvIGZvY3VzIG9uIHdoYXQgb3B0aW9ucyBhcmUgZGVmaW5lZCB3aXRoaW4gdGhhdCBhcmVhLiBJJ20gcHJvYmFibHkgbG9va2luZyBhdCB0aGlzIHRvIGVpdGhlciB1bmRlcnN0YW5kIGEgc3BlY2lmaWMgZmVhdHVyZSdzIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycywgZGVidWcgYSBidWlsZCBpc3N1ZSwgb3IgcGVyaGFwcyBldmVuIGFuYWx5emUgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZ292ZXJucyB3aGljaCBtb2R1bGVzIG9yIGZlYXR1cmVzIGdldCBlbmFibGVkLiBNeSBnb2FsIGlzIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0IHRoZSB1c2VyIGhhcyB0aGUgYWJpbGl0eSB0byBlbmFibGUgb3IgZGlzYWJsZSBhbmQgdG8gd2hpY2ggb3RoZXIgc2V0dGluZ3MgdGhlc2UgZmVhdHVyZXMgYXJlIGRlcGVuZGVudC4gS25vd2luZyB0aGlzIGlzIGNyaXRpY2FsLCBzaW5jZSBhIG1pc2NvbmZpZ3VyYXRpb24gb3IgbWlzdW5kZXJzdGFuZGluZyBjYW4gbGVhZCB0byBvcGVyYXRpb25hbCBpbnN0YWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc1NTgsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxMTo0MC44OTQ3MjczNTFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTYxNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTgwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE4MDpcXHRcXHRoZWxwXFxuIDE4MTpcXHRcXHQgIFRoZSBsb2NhbGl0eS1iYXNlZCBsZWFzdC1jb25uZWN0aW9uIHNjaGVkdWxpbmcgYWxnb3JpdGhtIGlzIGZvclxcbiAxODI6XFx0XFx0ICBkZXN0aW5hdGlvbiBJUCBsb2FkIGJhbGFuY2luZy4gSXQgaXMgdXN1YWxseSB1c2VkIGluIGNhY2hlIGNsdXN0ZXIuXFxuIDE4MzpcXHRcXHQgIFRoaXMgYWxnb3JpdGhtIHVzdWFsbHkgZGlyZWN0cyBwYWNrZXQgZGVzdGluZWQgZm9yIGFuIElQIGFkZHJlc3MgdG9cXG4gMTg0OlxcdFxcdCAgaXRzIHNlcnZlciBpZiB0aGUgc2VydmVyIGlzIGFsaXZlIGFuZCB1bmRlciBsb2FkLiBJZiB0aGUgc2VydmVyIGlzXFxuIDE4NTpcXHRcXHQgIG92ZXJsb2FkZWQgKGl0cyBhY3RpdmUgY29ubmVjdGlvbiBudW1iZXJzIGlzIGxhcmdlciB0aGFuIGl0cyB3ZWlnaHQpXFxuIDE4NjpcXHRcXHQgIGFuZCB0aGVyZSBpcyBhIHNlcnZlciBpbiBpdHMgaGFsZiBsb2FkLCB0aGVuIGFsbG9jYXRlIHRoZSB3ZWlnaHRlZFxcbiAxODc6XFx0XFx0ICBsZWFzdC1jb25uZWN0aW9uIHNlcnZlciB0byB0aGlzIElQIGFkZHJlc3MuXFxuIDE4ODpcXHRcXG4gMTg5OlxcdFxcdCAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBpbiBrZXJuZWwsIHNheSBZLiBUbyBjb21waWxlIGl0IGFzIGFcXG4gMTkwOlxcdFxcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBJZiB1bnN1cmUsIHNheSBOLlxcbiAxOTE6XFx0XFxuIDE5MjpcXHRjb25maWcgIElQX1ZTX0xCTENSXFxuIDE5MzpcXHRcXHR0cmlzdGF0ZSBcXFwibG9jYWxpdHktYmFzZWQgbGVhc3QtY29ubmVjdGlvbiB3aXRoIHJlcGxpY2F0aW9uIHNjaGVkdWxpbmdcXFwiXFxuIDE5NDpcXHRcXHRoZWxwXFxuIDE5NTpcXHRcXHQgIFRoZSBsb2NhbGl0eS1iYXNlZCBsZWFzdC1jb25uZWN0aW9uIHdpdGggcmVwbGljYXRpb24gc2NoZWR1bGluZ1xcbiAxOTY6XFx0XFx0ICBhbGdvcml0aG0gaXMgYWxzbyBmb3IgZGVzdGluYXRpb24gSVAgbG9hZCBiYWxhbmNpbmcuIEl0IGlzIFxcbiAxOTc6XFx0XFx0ICB1c3VhbGx5IHVzZWQgaW4gY2FjaGUgY2x1c3Rlci4gSXQgZGlmZmVycyBmcm9tIHRoZSBMQkxDIHNjaGVkdWxpbmdcXG4gMTk4OlxcdFxcdCAgYXMgZm9sbG93czogdGhlIGxvYWQgYmFsYW5jZXIgbWFpbnRhaW5zIG1hcHBpbmdzIGZyb20gYSB0YXJnZXRcXG4gMTk5OlxcdFxcdCAgdG8gYSBzZXQgb2Ygc2VydmVyIG5vZGVzIHRoYXQgY2FuIHNlcnZlIHRoZSB0YXJnZXQuIFJlcXVlc3RzIGZvclxcbiAyMDA6XFx0XFx0ICBhIHRhcmdldCBhcmUgYXNzaWduZWQgdG8gdGhlIGxlYXN0LWNvbm5lY3Rpb24gbm9kZSBpbiB0aGUgdGFyZ2V0J3NcXG4gMjAxOlxcdFxcdCAgc2VydmVyIHNldC4gSWYgYWxsIHRoZSBub2RlIGluIHRoZSBzZXJ2ZXIgc2V0IGFyZSBvdmVyIGxvYWRlZCxcXG4gMjAyOlxcdFxcdCAgaXQgcGlja3MgdXAgYSBsZWFzdC1jb25uZWN0aW9uIG5vZGUgaW4gdGhlIGNsdXN0ZXIgYW5kIGFkZHMgaXRcXG4gMjAzOlxcdFxcdCAgaW4gdGhlIHNldmVyIHNldCBmb3IgdGhlIHRhcmdldC4gSWYgdGhlIHNlcnZlciBzZXQgaGFzIG5vdCBiZWVuXFxuIDIwNDpcXHRcXHQgIG1vZGlmaWVkIGZvciB0aGUgc3BlY2lmaWVkIHRpbWUsIHRoZSBtb3N0IGxvYWRlZCBub2RlIGlzIHJlbW92ZWRcXG4gMjA1OlxcdFxcdCAgZnJvbSB0aGUgc2VydmVyIHNldCwgaW4gb3JkZXIgdG8gYXZvaWQgaGlnaCBkZWdyZWUgb2YgcmVwbGljYXRpb24uXFxuIDIwNjpcXHRcXG4gMjA3OlxcdFxcdCAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBpbiBrZXJuZWwsIHNheSBZLiBUbyBjb21waWxlIGl0IGFzIGFcXG4gMjA4OlxcdFxcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBJZiB1bnN1cmUsIHNheSBOLlxcbiAyMDk6XFx0XFxuIDIxMDpcXHRjb25maWdcXHRJUF9WU19ESFxcbiAyMTE6XFx0XFx0dHJpc3RhdGUgXFxcImRlc3RpbmF0aW9uIGhhc2hpbmcgc2NoZWR1bGluZ1xcXCJcXG4gMjEyOlxcdFxcdGhlbHBcXG4gMjEzOlxcdFxcdCAgVGhlIGRlc3RpbmF0aW9uIGhhc2hpbmcgc2NoZWR1bGluZyBhbGdvcml0aG0gYXNzaWducyBuZXR3b3JrXFxuIDIxNDpcXHRcXHQgIGNvbm5lY3Rpb25zIHRvIHRoZSBzZXJ2ZXJzIHRocm91Z2ggbG9va2luZyB1cCBhIHN0YXRpY2FsbHkgYXNzaWduZWRcXG4gMjE1OlxcdFxcdCAgaGFzaCB0YWJsZSBieSB0aGVpciBkZXN0aW5hdGlvbiBJUCBhZGRyZXNzZXMuXFxuIDIxNjpcXHRcXG4gMjE3OlxcdFxcdCAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBpbiBrZXJuZWwsIHNheSBZLiBUbyBjb21waWxlIGl0IGFzIGFcXG4gMjE4OlxcdFxcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBJZiB1bnN1cmUsIHNheSBOLlxcbiAyMTk6XFx0XFxuIDIyMDpcXHRjb25maWdcXHRJUF9WU19TSFxcbiAyMjE6XFx0XFx0dHJpc3RhdGUgXFxcInNvdXJjZSBoYXNoaW5nIHNjaGVkdWxpbmdcXFwiXFxuIDIyMjpcXHRcXHRoZWxwXFxuIDIyMzpcXHRcXHQgIFRoZSBzb3VyY2UgaGFzaGluZyBzY2hlZHVsaW5nIGFsZ29yaXRobSBhc3NpZ25zIG5ldHdvcmtcXG4gMjI0OlxcdFxcdCAgY29ubmVjdGlvbnMgdG8gdGhlIHNlcnZlcnMgdGhyb3VnaCBsb29raW5nIHVwIGEgc3RhdGljYWxseSBhc3NpZ25lZFxcbiAyMjU6XFx0XFx0ICBoYXNoIHRhYmxlIGJ5IHRoZWlyIHNvdXJjZSBJUCBhZGRyZXNzZXMuXFxuIDIyNjpcXHRcXG4gMjI3OlxcdFxcdCAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBpbiBrZXJuZWwsIHNheSBZLiBUbyBjb21waWxlIGl0IGFzIGFcXG4gMjI4OlxcdFxcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBJZiB1bnN1cmUsIHNheSBOLlxcbiAyMjk6XFx0XFxuIDIzMDpcXHRjb25maWdcXHRJUF9WU19NSFxcbiAyMzE6XFx0XFx0dHJpc3RhdGUgXFxcIm1hZ2xldiBoYXNoaW5nIHNjaGVkdWxpbmdcXFwiXFxuIDIzMjpcXHRcXHRoZWxwXFxuIDIzMzpcXHRcXHQgIFRoZSBtYWdsZXYgY29uc2lzdGVudCBoYXNoaW5nIHNjaGVkdWxpbmcgYWxnb3JpdGhtIHByb3ZpZGVzIHRoZVxcbiAyMzQ6XFx0XFx0ICBHb29nbGUncyBNYWdsZXYgaGFzaGluZyBhbGdvcml0aG0gYXMgYSBJUFZTIHNjaGVkdWxlci4gSXQgYXNzaWduc1xcbiAyMzU6XFx0XFx0ICBuZXR3b3JrIGNvbm5lY3Rpb25zIHRvIHRoZSBzZXJ2ZXJzIHRocm91Z2ggbG9va2luZyB1cCBhIHN0YXRpY2FsbHlcXG4gMjM2OlxcdFxcdCAgYXNzaWduZWQgc3BlY2lhbCBoYXNoIHRhYmxlIGNhbGxlZCB0aGUgbG9va3VwIHRhYmxlLiBNYWdsZXYgaGFzaGluZ1xcbiAyMzc6XFx0XFx0ICBpcyB0byBhc3NpZ24gYSBwcmVmZXJlbmNlIGxpc3Qgb2YgYWxsIHRoZSBsb29rdXAgdGFibGUgcG9zaXRpb25zXFxuIDIzODpcXHRcXHQgIHRvIGVhY2ggZGVzdGluYXRpb24uXFxuIDIzOTpcXHRcXG4gMjQwOlxcdFxcdCAgVGhyb3VnaCB0aGlzIG9wZXJhdGlvbiwgVGhlIG1hZ2xldiBoYXNoaW5nIGdpdmVzIGFuIGFsbW9zdCBlcXVhbFxcbiAyNDE6XFx0XFx0ICBzaGFyZSBvZiB0aGUgbG9va3VwIHRhYmxlIHRvIGVhY2ggb2YgdGhlIGRlc3RpbmF0aW9ucyBhbmQgcHJvdmlkZXNcXG4gMjQyOlxcdFxcdCAgbWluaW1hbCBkaXNydXB0aW9uIGJ5IHVzaW5nIHRoZSBsb29rdXAgdGFibGUuIFdoZW4gdGhlIHNldCBvZlxcbiAyNDM6XFx0XFx0ICBkZXN0aW5hdGlvbnMgY2hhbmdlcywgYSBjb25uZWN0aW9uIHdpbGwgbGlrZWx5IGJlIHNlbnQgdG8gdGhlIHNhbWVcXG4gMjQ0OlxcdFxcdCAgZGVzdGluYXRpb24gYXMgaXQgd2FzIGJlZm9yZS5cXG4gMjQ1OlxcdFxcbiAyNDY6XFx0XFx0ICBJZiB5b3Ugd2FudCB0byBjb21waWxlIGl0IGluIGtlcm5lbCwgc2F5IFkuIFRvIGNvbXBpbGUgaXQgYXMgYVxcbiAyNDc6XFx0XFx0ICBtb2R1bGUsIGNob29zZSBNIGhlcmUuIElmIHVuc3VyZSwgc2F5IE4uXFxuIDI0ODpcXHRcXG4gMjQ5OlxcdGNvbmZpZ1xcdElQX1ZTX1NFRFxcbiAyNTA6XFx0XFx0dHJpc3RhdGUgXFxcInNob3J0ZXN0IGV4cGVjdGVkIGRlbGF5IHNjaGVkdWxpbmdcXFwiXFxuIDI1MTpcXHRcXHRoZWxwXFxuIDI1MjpcXHRcXHQgIFRoZSBzaG9ydGVzdCBleHBlY3RlZCBkZWxheSBzY2hlZHVsaW5nIGFsZ29yaXRobSBhc3NpZ25zIG5ldHdvcmtcXG4gMjUzOlxcdFxcdCAgY29ubmVjdGlvbnMgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSBzaG9ydGVzdCBleHBlY3RlZCBkZWxheS4gVGhlIFxcbiAyNTQ6XFx0XFx0ICBleHBlY3RlZCBkZWxheSB0aGF0IHRoZSBqb2Igd2lsbCBleHBlcmllbmNlIGlzIChDaSArIDEpIC8gVWkgaWYgXFxuIDI1NTpcXHRcXHQgIHNlbnQgdG8gdGhlIGl0aCBzZXJ2ZXIsIGluIHdoaWNoIENpIGlzIHRoZSBudW1iZXIgb2YgY29ubmVjdGlvbnNcXG4gMjU2OlxcdFxcdCAgb24gdGhlIGl0aCBzZXJ2ZXIgYW5kIFVpIGlzIHRoZSBmaXhlZCBzZXJ2aWNlIHJhdGUgKHdlaWdodClcXG4gMjU3OlxcdFxcdCAgb2YgdGhlIGl0aCBzZXJ2ZXIuXFxuIDI1ODpcXHRcXG4gMjU5OlxcdFxcdCAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBpbiBrZXJuZWwsIHNheSBZLiBUbyBjb21waWxlIGl0IGFzIGFcXG4gMjYwOlxcdFxcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBJZiB1bnN1cmUsIHNheSBOLlxcbiAyNjE6XFx0XFxuIDI2MjpcXHRjb25maWdcXHRJUF9WU19OUVxcbiAyNjM6XFx0XFx0dHJpc3RhdGUgXFxcIm5ldmVyIHF1ZXVlIHNjaGVkdWxpbmdcXFwiXFxuIDI2NDpcXHRcXHRoZWxwXFxuIDI2NTpcXHRcXHQgIFRoZSBuZXZlciBxdWV1ZSBzY2hlZHVsaW5nIGFsZ29yaXRobSBhZG9wdHMgYSB0d28tc3BlZWQgbW9kZWwuXFxuIDI2NjpcXHRcXHQgIFdoZW4gdGhlcmUgaXMgYW4gaWRsZSBzZXJ2ZXIgYXZhaWxhYmxlLCB0aGUgam9iIHdpbGwgYmUgc2VudCB0b1xcbiAyNjc6XFx0XFx0ICB0aGUgaWRsZSBzZXJ2ZXIsIGluc3RlYWQgb2Ygd2FpdGluZyBmb3IgYSBmYXN0IG9uZS4gV2hlbiB0aGVyZVxcbiAyNjg6XFx0XFx0ICBpcyBubyBpZGxlIHNlcnZlciBhdmFpbGFibGUsIHRoZSBqb2Igd2lsbCBiZSBzZW50IHRvIHRoZSBzZXJ2ZXJcXG4gMjY5OlxcdFxcdCAgdGhhdCBtaW5pbWl6ZSBpdHMgZXhwZWN0ZWQgZGVsYXkgKFRoZSBTaG9ydGVzdCBFeHBlY3RlZCBEZWxheVxcbiAyNzA6XFx0XFx0ICBzY2hlZHVsaW5nIGFsZ29yaXRobSkuXFxuIDI3MTpcXHRcXG4gMjcyOlxcdFxcdCAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBpbiBrZXJuZWwsIHNheSBZLiBUbyBjb21waWxlIGl0IGFzIGFcXG4gMjczOlxcdFxcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBJZiB1bnN1cmUsIHNheSBOLlxcbiAyNzQ6XFx0XFxuIDI3NTpcXHRjb25maWdcXHRJUF9WU19UV09TXFxuIDI3NjpcXHRcXHR0cmlzdGF0ZSBcXFwid2VpZ2h0ZWQgcmFuZG9tIHR3b3MgY2hvaWNlIGxlYXN0LWNvbm5lY3Rpb24gc2NoZWR1bGluZ1xcXCJcXG4gMjc3OlxcdFxcdGhlbHBcXG4gMjc4OlxcdFxcdCAgVGhlIHdlaWdodGVkIHJhbmRvbSB0d29zIGNob2ljZSBsZWFzdC1jb25uZWN0aW9uIHNjaGVkdWxpbmdcXG4gMjc5OlxcdFxcdCAgYWxnb3JpdGhtIHBpY2tzIHR3byByYW5kb20gcmVhbCBzZXJ2ZXJzIGFuZCBkaXJlY3RzIG5ldHdvcmtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6MTE6NDAuODk0ODI1MTQyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY4NjM3OTU5NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSVBWUyBPdmVybG9hZCBIYW5kbGluZyBQYXRjaCBSZXZpZXcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gbWV0aWN1bG91c2x5IGV4YW1pbmUgdGhlIGNoYW5nZXMgdG8gdGhlIElQVlMgY29yZS4gSXQgYXBwZWFycyB3ZSdyZSBhZGRyZXNzaW5nIHRoZSBvdmVybG9hZCBtZWNoYW5pc20sIGFuZCB0aGUgcmVtb3ZhbCBvZiBgSVBfVlNfREVTVF9GX09WRVJMT0FEYCBmcm9tIHRoZSBgZmxhZ3NgIGZpZWxkIGluIGBpbmNsdWRlL25ldC9pcF92cy5oYCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl0IGltcGxpZXMgYSBzaGlmdCBpbiBob3cgb3ZlcmxvYWQgc3RhdGUgaXMgbWFuYWdlZCDigJMgbGlrZWx5LCB3ZSdyZSBtb3ZpbmcgdG93YXJkcyBhIG1vcmUgZXhwbGljaXQgdGhyZXNob2xkLWJhc2VkIGFwcHJvYWNoLCBjb25maXJtZWQgYnkgdGhlIGBSRUFEX09OQ0UoZGVzdC1cdTAwM2VsX3RocmVzaG9sZF92YWwpYCBjaGVjayBhbmQgdGhlIGFkZGl0aW9uL3Jlb3JkZXJpbmcgb2YgYHVfdGhyZXNob2xkX3ZhbGAgYW5kIGBsX3RocmVzaG9sZF92YWxgIGluIGBzdHJ1Y3QgaXBfdnNfZGVzdGAuIFRoYXQgc3RydWN0IHJlb3JnYW5pemF0aW9uIGRlc2VydmVzIGEgY2xvc2VyIGxvb2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGFsaWdubWVudCBpc3N1ZXMgdGhhdCBjb3VsZCBjcm9wIHVwLCBldmVuIHdpdGggYFJFQURfT05DRWAgaW4gcGxheS5cblxuTmV4dCwgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgc2lkZSBpbiBgaXBfdnNfY29ubi5jYCBpcyBrZXkuIGBpcF92c19iaW5kX2Rlc3RgIGFuZCBgaXBfdnNfdW5iaW5kX2Rlc3RgIG5vdyBleHBsaWNpdGx5IGNhbGwgYGlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkYCBiYXNlZCBvbiBjb21wYXJpc29ucyB3aXRoIHRoZSBuZXcgdGhyZXNob2xkIHZhbHVlcywgYHVfdGhyZXNob2xkX3ZhbGAgYW5kIGBsX3RocmVzaG9sZF92YWxgLCByZXNwZWN0aXZlbHkuIFRoaXMgaXMgdGhlIGhlYXJ0IG9mIHRoZSBsb2dpYywgYW5kIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGhvdyB0aGVzZSB0aHJlc2hvbGRzIGFyZSBiZWluZyBzZXQgYW5kIHVzZWQgdG8gdG9nZ2xlIHRoZSBvdmVybG9hZCBzdGF0ZSwgYW5kIGlmIHRoZXJlIGFyZSBlZGdlIGNhc2VzIGluIHRoZSBjb25uZWN0aW9ucyBsaWZlIGN5Y2xlLlxuXG5UaGUgY29udHJvbCBwbGFuZSBjaGFuZ2VzIGluIGBpcF92c19jdGwuY2Agd2l0aCB0aGUgbmV3IHVwZGF0ZSBmdW5jdGlvbnMgYXJlIGdvaW5nIHRvIGJlIGltcG9ydGFudCB0b28g4oCTIHNwZWNpZmljYWxseSBgX19pcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZGAsIGBpcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZGAsIGFuZCBgX19pcF92c191cGRhdGVfZGVzdGAuIEkgbmVlZCB0byB0cmFjayBob3cgdGhleSBhcmUgdHJpZ2dlcmVkLCB0byB2ZXJpZnkgdGhleSBmaXQgd2l0aCB0aGUgdGhyZXNob2xkIGNoYW5nZXMgYW5kIHRoZSBzY2hlZHVsZXIgbG9naWMuXG5cbkZpbmFsbHksIHRoZSBzY2hlZHVsZXIgaW50ZWdyYXRpb24gaXMgY3J1Y2lhbC4gSSBzZWUgY2hhbmdlcyBpbiBtYW55IG9mIHRoZSBzY2hlZHVsZXJzLCBzcGVjaWZpY2FsbHk6IGBpcF92c19kaF9zY2hlZHVsZWAsIGBpcF92c19mb19zY2hlZHVsZWAsIGBfX2lwX3ZzX2xibGNfc2NoZWR1bGVgLCBgX19pcF92c19sYmxjcl9zY2hlZHVsZWAsIGBpcF92c19sY19zY2hlZHVsZWAsIGBpc191bmF2YWlsYWJsZWAgaW4gbWggYW5kIHNoLCBgaXBfdnNfbnFfc2NoZWR1bGVgLCBgaXBfdnNfb3ZmX3NjaGVkdWxlYCwgYGlwX3ZzX3JyX3NjaGVkdWxlYCwgYGlwX3ZzX3NlZF9zY2hlZHVsZWAsIGBpcF92c190d29zX3NjaGVkdWxlYCwgYGlwX3ZzX3dsY19zY2hlZHVsZWAsIGBpcF92c193cnJfc2NoZWR1bGVgLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgb3ZlcmxvYWQgc3RhdGUgYWZmZWN0cyB0aGUgc2NoZWR1bGluZyBkZWNpc2lvbnMuIEZvciBpbnN0YW5jZSwgaXMgYGlzX3VuYXZhaWxhYmxlYCBiZWluZyB1c2VkIGluIHRoZSBvdmVybG9hZCBwYXRoPyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgZWFjaCBzY2hlZHVsZXIgaXMgYmVoYXZpbmcgY29ycmVjdGx5IGFuZCB0aGF0IG5vIHVuZXhwZWN0ZWQgYmVoYXZpb3IsIHN1Y2ggYXMgdW5uZWNlc3NhcnkgYmFjay1vZmYsIGlzIGludHJvZHVjZWQuXG5cbkdpdmVuIHRoZSBzdHJ1Y3R1cmFsIGNoYW5nZXMgYW5kIGxvZ2ljIHNoaWZ0LCBJIG5lZWQgdG8gc3BlY2lmeSB0aGVzZSBGb2N1c1N5bWJvbHMgdG8gYmUgdGFyZ2V0ZWQgZm9yIGZ1enppbmc6IGBpcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZGAsIGBpcF92c19iaW5kX2Rlc3RgLCBgaXBfdnNfdW5iaW5kX2Rlc3RgLCBgX19pcF92c191cGRhdGVfZGVzdGAsIGBpcF92c19hZGRfZGVzdGAsIGBpcF92c19lZGl0X2Rlc3RgLCBgaXBfdnNfZGhfc2NoZWR1bGVgLCBgaXBfdnNfZm9fc2NoZWR1bGVgLCBgaXBfdnNfbGNfc2NoZWR1bGVgLCBgaXBfdnNfb3ZmX3NjaGVkdWxlYCwgYGlwX3ZzX3JyX3NjaGVkdWxlYCwgYGlwX3ZzX3NlZF9zY2hlZHVsZWAsIGBpcF92c190d29zX3NjaGVkdWxlYCwgYGlwX3ZzX3dsY19zY2hlZHVsZWAsIGFuZCBgaXBfdnNfd3JyX3NjaGVkdWxlYC5cblxuVGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGFwcGVhciB0byBiZSB0aGUgc3RhbmRhcmQgSVBWUyBzdGFjazogYElQX1ZTYCwgYE5FVEZJTFRFUmAsIGFuZCBgSU5FVGAuIE5vdGhpbmcgdW5leHBlY3RlZCB0aGVyZS5cblxuVWx0aW1hdGVseSwgSSdtIGNvbmZpZGVudCB0aGF0IHRoZXNlIGNoYW5nZXMgd2FycmFudCB0aG9yb3VnaCBmdXp6aW5nLiBUaGUgcGF0Y2ggc2lnbmlmaWNhbnRseSBhbHRlcnMgZGF0YSBzdHJ1Y3R1cmUgbGF5b3V0IGFuZCB0aGUgdGhyZXNob2xkL292ZXJsb2FkIHN0YXRlIGxvZ2ljLCBpbXBhY3RpbmcgSVBWUyBjb25uZWN0aW9uIHRyYWNraW5nLCBjb250cm9sIHBsYW5lIGRlc3RpbmF0aW9uIHVwZGF0aW5nLCBhbmQgc2NoZWR1bGluZyBhbGdvcml0aG1zLiBUaGVyZWZvcmUsIHRoZSByZWFzb25pbmcgZm9yIGBzZXQtcmVzdWx0c2Agd2lsbCBjbGVhcmx5IGV4cGxhaW4gdGhpcyBmYWN0LCBzcGVjaWZ5IHRoZSBmb2N1cyBzeW1ib2xzLCBhbmQgaW5jbHVkZSB0aGUgZW5hYmxlIGNvbmZpZ3VyYXRpb25zLiBUaGlzIGNvdmVycyBldmVyeXRoaW5nLiBMZXQncyBwcm9jZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTQ1OCwiT3V0cHV0VG9rZW5zIjoyNTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxMTo0Ny43NTg2MjQzNzVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzYyMzM1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfVlNcIixcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkXCIsXG4gICAgXCJpcF92c19iaW5kX2Rlc3RcIixcbiAgICBcImlwX3ZzX3VuYmluZF9kZXN0XCIsXG4gICAgXCJfX2lwX3ZzX3VwZGF0ZV9kZXN0XCIsXG4gICAgXCJpcF92c19lZGl0X2Rlc3RcIixcbiAgICBcImlwX3ZzX2FkZF9kZXN0XCIsXG4gICAgXCJpcF92c19ycl9zY2hlZHVsZVwiLFxuICAgIFwiaXBfdnNfd3JyX3NjaGVkdWxlXCIsXG4gICAgXCJpcF92c193bGNfc2NoZWR1bGVcIixcbiAgICBcImlwX3ZzX2xjX3NjaGVkdWxlXCIsXG4gICAgXCJpcF92c19mb19zY2hlZHVsZVwiLFxuICAgIFwiaXBfdnNfb3ZmX3NjaGVkdWxlXCIsXG4gICAgXCJpcF92c190d29zX3NjaGVkdWxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGRlc3RpbmF0aW9uIG92ZXJsb2FkIHRyYWNraW5nIGxvZ2ljIGFuZCBkZXN0aW5hdGlvbiBzdHJ1Y3R1cmUgbGF5b3V0IGluIHRoZSBJUFZTIChJUCBWaXJ0dWFsIFNlcnZlcikgc3Vic3lzdGVtLiBJdCB1cGRhdGVzIGNvbm5lY3Rpb24gYmluZGluZyBhbmQgdW5iaW5kaW5nIHRocmVzaG9sZHMsIGNvbnRyb2wgcGxhbmUgZGVzdGluYXRpb24gdXBkYXRlcywgYW5kIHNjaGVkdWxlciBvdmVybG9hZCBldmFsdWF0aW9uIGFjcm9zcyBJUFZTIGFsZ29yaXRobXMuIFRoZXNlIGFyZSByZWFjaGFibGUsIGV4ZWN1dGFibGUgbmV0d29yayBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgZm9yIHJhY2UgY29uZGl0aW9ucywgYXJpdGhtZXRpYyBvciBzdGF0ZSBoYW5kbGluZyBidWdzLCBhbmQgdGhyZXNob2xkIGVkZ2UgY2FzZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfVlNcIixcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkXCIsXG4gICAgXCJpcF92c19iaW5kX2Rlc3RcIixcbiAgICBcImlwX3ZzX3VuYmluZF9kZXN0XCIsXG4gICAgXCJfX2lwX3ZzX3VwZGF0ZV9kZXN0XCIsXG4gICAgXCJpcF92c19lZGl0X2Rlc3RcIixcbiAgICBcImlwX3ZzX2FkZF9kZXN0XCIsXG4gICAgXCJpcF92c19ycl9zY2hlZHVsZVwiLFxuICAgIFwiaXBfdnNfd3JyX3NjaGVkdWxlXCIsXG4gICAgXCJpcF92c193bGNfc2NoZWR1bGVcIixcbiAgICBcImlwX3ZzX2xjX3NjaGVkdWxlXCIsXG4gICAgXCJpcF92c19mb19zY2hlZHVsZVwiLFxuICAgIFwiaXBfdnNfb3ZmX3NjaGVkdWxlXCIsXG4gICAgXCJpcF92c190d29zX3NjaGVkdWxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGRlc3RpbmF0aW9uIG92ZXJsb2FkIHRyYWNraW5nIGxvZ2ljIGFuZCBkZXN0aW5hdGlvbiBzdHJ1Y3R1cmUgbGF5b3V0IGluIHRoZSBJUFZTIChJUCBWaXJ0dWFsIFNlcnZlcikgc3Vic3lzdGVtLiBJdCB1cGRhdGVzIGNvbm5lY3Rpb24gYmluZGluZyBhbmQgdW5iaW5kaW5nIHRocmVzaG9sZHMsIGNvbnRyb2wgcGxhbmUgZGVzdGluYXRpb24gdXBkYXRlcywgYW5kIHNjaGVkdWxlciBvdmVybG9hZCBldmFsdWF0aW9uIGFjcm9zcyBJUFZTIGFsZ29yaXRobXMuIFRoZXNlIGFyZSByZWFjaGFibGUsIGV4ZWN1dGFibGUgbmV0d29yayBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgZm9yIHJhY2UgY29uZGl0aW9ucywgYXJpdGhtZXRpYyBvciBzdGF0ZSBoYW5kbGluZyBidWdzLCBhbmQgdGhyZXNob2xkIGVkZ2UgY2FzZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjExOjQ3LjgzNjI1NDE5OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDEzMjMyMjEwNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxMTo0Ny44MzY3NzM5NzlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0MTMyMjY5NzAzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVvcmdhbml6ZXMgZmllbGRzIGluIGBzdHJ1Y3QgaXBfdnNfZGVzdGAgZm9yIGJldHRlciBjYWNoZWxpbmUgdXRpbGl6YXRpb24gYW5kIHJlZmFjdG9ycyB0aGUgZGVzdGluYXRpb24gb3ZlcmxvYWQgc3RhdHVzIHRyYWNraW5nIHRvIHVzZSBgbF90aHJlc2hvbGRfdmFsYCAvIGB1X3RocmVzaG9sZF92YWxgIGluc3RlYWQgb2YgYGRlc3QtXFx1MDAzZWZsYWdzYCB3aXRoIGBJUF9WU19ERVNUX0ZfT1ZFUkxPQURgLlxcblxcbkFsbCBgc3RydWN0IGlwX3ZzX2Rlc3RgIGluc3RhbmNlcyBhcmUgemVyby1hbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmooKWAgYW5kIHRoZWlyIHRocmVzaG9sZCBmaWVsZHMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIHVwb24gY3JlYXRpb24uIFRoZSBzdHJ1Y3R1cmUgaXRzZWxmIGlzIG5vdCBjb3BpZWQgdG8gdXNlcnNwYWNlIGFzIGEgcmF3IGJsb2I7IHVzZXJzcGFjZSBxdWVyaWVzIHNlcmlhbGl6ZSBpbmRpdmlkdWFsIGZpZWxkcyBvciB1c2UgemVyb2VkIGludGVybWVkaWF0ZSBzdHJ1Y3R1cmVzIChgbWVtc2V0YCBpbiBgX19pcF92c19nZXRfZGVzdF9lbnRyaWVzYCBhbmQgaW5kaXZpZHVhbCBOZXRsaW5rIGF0dHJpYnV0ZXMgaW4gYGlwX3ZzX2dlbmxfZmlsbF9kZXN0YCkuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIGJyYW5jaGVkIHVwb24uXFxuXFxuQmVjYXVzZSB0aGUgY2hhbmdlcyBpbnRyb2R1Y2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTAyOWMxODUzOWUyYmQ0MzkzYmI4NzM2ZGYwMDAzZTQyMmNiN2M5YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMjI6MTA6MTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcF92cy5oIGIvaW5jbHVkZS9uZXQvaXBfdnMuaFxuaW5kZXggMzJmZGU3MzFiY2ViNy4uOWE4M2JmZjMyNTY5ZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2lwX3ZzLmhcbisrKyBiL2luY2x1ZGUvbmV0L2lwX3ZzLmhcbkBAIC0zNiw5ICszNiw2IEBAXG4gI2RlZmluZSBJUF9WU19IRFJfSU5WRVJTRVx0MVxuICNkZWZpbmUgSVBfVlNfSERSX0lDTVBcdFx0MlxuIFxuLS8qIERlc3RpbmF0aW9uIFNlcnZlciBGbGFncyAqL1xuLSNkZWZpbmUgSVBfVlNfREVTVF9GX09WRVJMT0FEXHQweDAwMDJcdFx0Lyogc2VydmVyIGlzIG92ZXJsb2FkZWQgKi9cbi1cbiAvKiBEZXN0aW5hdGlvbiBTZXJ2ZXIgQ29uZmlnIEZsYWdzICovXG4gI2RlZmluZSBJUF9WU19ERVNUX0NGX0FWQUlMQUJMRVx0MHgwMDAxXHRcdC8qIHNlcnZlciBpcyBhdmFpbGFibGUgKi9cbiBcbkBAIC05NzMsMzIgKzk3MCw0MyBAQCBzdHJ1Y3QgaXBfdnNfZGVzdF9kc3Qge1xuICAqIGFuZCBzbyBvbi5cbiAgKi9cbiBzdHJ1Y3QgaXBfdnNfZGVzdCB7XG4rXHQvKiBDYWNoZWxpbmUgZm9yIGhhc2ggdGFibGUgbm9kZXMgLSByZWFkLW1vc3RseSAqL1xuK1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0bl9saXN0OyAgIC8qIGZvciB0aGUgZGVzdHMgaW4gdGhlIHNlcnZpY2UgKi9cbiBcdHN0cnVjdCBobGlzdF9ub2RlXHRkX2xpc3Q7ICAgLyogZm9yIHRhYmxlIHdpdGggYWxsIHRoZSBkZXN0cyAqL1xuIFxuLVx0dTE2XHRcdFx0YWY7XHRcdC8qIGFkZHJlc3MgZmFtaWx5ICovXG4tXHRfX2JlMTZcdFx0XHRwb3J0O1x0XHQvKiBwb3J0IG51bWJlciBvZiB0aGUgc2VydmVyICovXG4tXHR1bmlvbiBuZl9pbmV0X2FkZHJcdGFkZHI7XHRcdC8qIElQIGFkZHJlc3Mgb2YgdGhlIHNlcnZlciAqL1xuLVx0dm9sYXRpbGUgdW5zaWduZWQgaW50XHRmbGFncztcdFx0LyogZGVzdCBzdGF0dXMgZmxhZ3MgKi9cbi1cdGF0b21pY190XHRcdGNvbm5fZmxhZ3M7XHQvKiBmbGFncyB0byBjb3B5IHRvIGNvbm4gKi9cbiBcdGF0b21pY190XHRcdHdlaWdodDtcdFx0Lyogc2VydmVyIHdlaWdodCAqL1xuLVx0dW5zaWduZWQgbG9uZ1x0XHRjZmxhZ3M7XHRcdC8qIGNvbmZpZyBmbGFncyAqL1xuIFx0YXRvbWljX3RcdFx0bGFzdF93ZWlnaHQ7XHQvKiBzZXJ2ZXIgbGF0ZXN0IHdlaWdodCAqL1xuK1xuK1x0LyogY29ubmVjdGlvbiB0aHJlc2hvbGRzICovXG4rXHR1MzJcdFx0XHRsX3RocmVzaG9sZF92YWw7LyogdXNlZCBsb3dlciB0aHJlc2hvbGQgKi9cbitcdHUzMlx0XHRcdHVfdGhyZXNob2xkX3ZhbDsvKiB1c2VkIHVwcGVyIHRocmVzaG9sZCAqL1xuK1x0LyogMzIvNDggKi9cbitcdHUzMlx0XHRcdGxfdGhyZXNob2xkO1x0LyogbG93ZXIgdGhyZXNob2xkICovXG4rXHR1MzJcdFx0XHR1X3RocmVzaG9sZDtcdC8qIHVwcGVyIHRocmVzaG9sZCAqL1xuK1xuK1x0dW5zaWduZWQgbG9uZ1x0XHRjZmxhZ3M7XHRcdC8qIGNvbmZpZyBmbGFncyAqL1xuK1xuK1x0LyogNDQvNjQgKi9cbitcdGF0b21pY190XHRcdGNvbm5fZmxhZ3M7XHQvKiBmbGFncyB0byBjb3B5IHRvIGNvbm4gKi9cbitcbiBcdF9fdTE2XHRcdFx0dHVuX3R5cGU7XHQvKiB0dW5uZWwgdHlwZSAqL1xuIFx0X19iZTE2XHRcdFx0dHVuX3BvcnQ7XHQvKiB0dW5uZWwgcG9ydCAqL1xuIFx0X191MTZcdFx0XHR0dW5fZmxhZ3M7XHQvKiB0dW5uZWwgZmxhZ3MgKi9cbiBcbi1cdHJlZmNvdW50X3RcdFx0cmVmY250O1x0XHQvKiByZWZlcmVuY2UgY291bnRlciAqL1xuLVx0c3RydWN0IGlwX3ZzX3N0YXRzICAgICAgc3RhdHM7ICAgICAgICAgIC8qIHN0YXRpc3RpY3MgKi9cbi1cdHVuc2lnbmVkIGxvbmdcdFx0aWRsZV9zdGFydDtcdC8qIHN0YXJ0IHRpbWUsIGppZmZpZXMgKi9cbitcdHUxNlx0XHRcdGFmO1x0XHQvKiBhZGRyZXNzIGZhbWlseSAqL1xuK1x0X19iZTE2XHRcdFx0cG9ydDtcdFx0LyogcG9ydCBudW1iZXIgb2YgdGhlIHNlcnZlciAqL1xuK1x0LyogNjAvODAgKi9cbitcdHVuaW9uIG5mX2luZXRfYWRkclx0YWRkcjtcdFx0LyogSVAgYWRkcmVzcyBvZiB0aGUgc2VydmVyICovXG4gXG4tXHQvKiBjb25uZWN0aW9uIGNvdW50ZXJzIGFuZCB0aHJlc2hvbGRzICovXG4tXHRhdG9taWNfdFx0XHRhY3RpdmVjb25ucztcdC8qIGFjdGl2ZSBjb25uZWN0aW9ucyAqL1xuK1x0LyogY29ubmVjdGlvbiBjb3VudGVycyAqL1xuIFx0YXRvbWljX3RcdFx0dG90YWxjb25ucztcdC8qIHRvdGFsIGNvbm5lY3Rpb25zICovXG4rXHRhdG9taWNfdFx0XHRhY3RpdmVjb25ucztcdC8qIGFjdGl2ZSBjb25uZWN0aW9ucyAqL1xuIFx0YXRvbWljX3RcdFx0cGVyc2lzdGNvbm5zO1x0LyogcGVyc2lzdGVudCBjb25uZWN0aW9ucyAqL1xuLVx0X191MzJcdFx0XHR1X3RocmVzaG9sZDtcdC8qIHVwcGVyIHRocmVzaG9sZCAqL1xuLVx0X191MzJcdFx0XHRsX3RocmVzaG9sZDtcdC8qIGxvd2VyIHRocmVzaG9sZCAqL1xuLVx0X191MzJcdFx0XHRsX3RocmVzaG9sZF92YWw7LyogdXNlZCBsb3dlciB0aHJlc2hvbGQgKi9cbitcbitcdHJlZmNvdW50X3RcdFx0cmVmY250O1x0XHQvKiByZWZlcmVuY2UgY291bnRlciAqL1xuK1x0c3RydWN0IGlwX3ZzX3N0YXRzICAgICAgc3RhdHM7ICAgICAgICAgIC8qIHN0YXRpc3RpY3MgKi9cbitcdHVuc2lnbmVkIGxvbmdcdFx0aWRsZV9zdGFydDtcdC8qIHN0YXJ0IHRpbWUsIGppZmZpZXMgKi9cbiBcbiBcdC8qIGZvciBkZXN0aW5hdGlvbiBjYWNoZSAqL1xuIFx0c3BpbmxvY2tfdFx0XHRkc3RfbG9jaztcdC8qIGxvY2sgb2YgZHN0X2NhY2hlICovXG5AQCAtMTkxNSw3ICsxOTIzLDEzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c19kZXN0X3B1dF9hbmRfZnJlZShzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcbiBcdFx0a2ZyZWUoZGVzdCk7XG4gfVxuIFxuLXZvaWQgaXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QsIGludCBtb2RlKTtcbit2b2lkIGlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKHN0cnVjdCBpcF92c19kZXN0ICpkZXN0LCBib29sIG92ZXJsb2FkKTtcbitcbisvKiBDaGVjayBpZiBkZXN0IGlzIGluIG92ZXJsb2FkZWQgc3RhdGUgKi9cbitzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGNvbnN0IHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KVxuK3tcbitcdHJldHVybiBSRUFEX09OQ0UoZGVzdC1cdTAwM2VsX3RocmVzaG9sZF92YWwpO1xuK31cbiBcbiAvKiBJUFZTIHN5bmMgZGFlbW9uIGRhdGEgYW5kIGZ1bmN0aW9uIHByb3RvdHlwZXNcbiAgKiAoZnJvbSBpcF92c19zeW5jLmMpXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNcbmluZGV4IDZmYTNlMWRjNTM0YzMuLjUzNDhjMmY0OWI2NGUgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jXG5AQCAtMTE1MCw4ICsxMTUwLDggQEAgaXBfdnNfYmluZF9kZXN0KHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QpXG4gXHRcdGlmICghKGZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfSU5BQ1RJVkUpKVxuIFx0XHRcdGF0b21pY19pbmMoXHUwMDI2ZGVzdC1cdTAwM2VhY3RpdmVjb25ucyk7XG4gXHRcdHRjID0gYXRvbWljX2luY19yZXR1cm4oXHUwMDI2ZGVzdC1cdTAwM2V0b3RhbGNvbm5zKTtcbi1cdFx0aWYgKHRjID09IFJFQURfT05DRShkZXN0LVx1MDAzZXVfdGhyZXNob2xkKSlcbi1cdFx0XHRpcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChkZXN0LCAxKTtcbitcdFx0aWYgKHRjIFx1MDAzZT0gUkVBRF9PTkNFKGRlc3QtXHUwMDNldV90aHJlc2hvbGRfdmFsKSlcbitcdFx0XHRpcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChkZXN0LCB0cnVlKTtcbiBcdH0gZWxzZSB7XG4gXHRcdC8qIEl0IGlzIGEgcGVyc2lzdGVudCBjb25uZWN0aW9uL3RlbXBsYXRlLCBzbyBpbmNyZWFzZVxuIFx0XHQgICB0aGUgcGVyc2lzdGVudCBjb25uZWN0aW9uIGNvdW50ZXIgKi9cbkBAIC0xMjQzLDggKzEyNDMsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaXBfdnNfdW5iaW5kX2Rlc3Qoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxuIFx0XHRpZiAoIShjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX0lOQUNUSVZFKSlcbiBcdFx0XHRhdG9taWNfZGVjKFx1MDAyNmRlc3QtXHUwMDNlYWN0aXZlY29ubnMpO1xuIFx0XHR0YyA9IGF0b21pY19mZXRjaF9kZWMoXHUwMDI2ZGVzdC1cdTAwM2V0b3RhbGNvbm5zKTtcbi1cdFx0aWYgKHRjID09IFJFQURfT05DRShkZXN0LVx1MDAzZWxfdGhyZXNob2xkX3ZhbCkpXG4tXHRcdFx0aXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoZGVzdCwgLTEpO1xuK1x0XHRpZiAodGMgXHUwMDNjPSBSRUFEX09OQ0UoZGVzdC1cdTAwM2VsX3RocmVzaG9sZF92YWwpKVxuK1x0XHRcdGlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKGRlc3QsIGZhbHNlKTtcbiBcdH0gZWxzZSB7XG4gXHRcdC8qIEl0IGlzIGEgcGVyc2lzdGVudCBjb25uZWN0aW9uL3RlbXBsYXRlLCBzbyBkZWNyZWFzZVxuIFx0XHQgICB0aGUgcGVyc2lzdGVudCBjb25uZWN0aW9uIGNvdW50ZXIgKi9cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmNcbmluZGV4IDRjMWM3Mzk0NDZiNzYuLjMwMDM1NDdkY2FiZTUgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuY1xuQEAgLTEzMDksMzIgKzEzMDksMzIgQEAgdm9pZCBpcF92c19zdGF0c19mcmVlKHN0cnVjdCBpcF92c19zdGF0cyAqc3RhdHMpXG4gICogLSBjb25ucyByZWFjaCB1X3RocmVzaG9sZCBhbmQgZXhjZWVkIGl0OiBzZXQgdGhlIGZsYWdcbiAgKiAtIGNvbm5zIGdvIGJlbG93IGxfdGhyZXNob2xkIChvciA3NSUgb2YgdV90aHJlc2hvbGQpOiBjbGVhciB0aGUgZmxhZ1xuICAqL1xuLXN0YXRpYyB2b2lkIF9faXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QsIGludCBtb2RlKVxuK3N0YXRpYyB2b2lkIF9faXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QsIGJvb2wgb3ZlcmxvYWQpXG4ge1xuIFx0aW50IGNvbm5zO1xuIFx0dTMyIGwsIHU7XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmRlc3QtXHUwMDNlZHN0X2xvY2spO1xuIFx0dSA9IFJFQURfT05DRShkZXN0LVx1MDAzZXVfdGhyZXNob2xkKTtcbi1cdGlmICghdSlcbi1cdFx0Z290byB1bnNldDtcbi1cdGwgPSBSRUFEX09OQ0UoZGVzdC1cdTAwM2VsX3RocmVzaG9sZF92YWwpO1xuLVx0Y29ubnMgPSBhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZXRvdGFsY29ubnMpO1xuLVx0aWYgKGNvbm5zIFx1MDAzZT0gKG1vZGUgXHUwMDNlIDAgPyBsIDogdSkpIHtcbi1cdFx0ZGVzdC1cdTAwM2VmbGFncyB8PSBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQ7XG4tXHRcdHJldHVybjtcbitcdGlmICh1KSB7XG4rXHRcdC8qIExvdyB0aHJlc2hvbGQgZGVmYXVsdHMgdG8gNzUlIG9mIHVwcGVyIHRocmVzaG9sZCAqL1xuK1x0XHRsID0gUkVBRF9PTkNFKGRlc3QtXHUwMDNlbF90aHJlc2hvbGQpID8gOiAodSAtICh1IFx1MDAzZVx1MDAzZSAyKSk7XG4rXHRcdGNvbm5zID0gYXRvbWljX3JlYWQoXHUwMDI2ZGVzdC1cdTAwM2V0b3RhbGNvbm5zKTtcbitcdFx0aWYgKGNvbm5zIFx1MDAzZT0gKG92ZXJsb2FkID8gbCA6IHUpKSB7XG4rXHRcdFx0V1JJVEVfT05DRShkZXN0LVx1MDAzZXVfdGhyZXNob2xkX3ZhbCwgSU5UX01BWCk7XG4rXHRcdFx0V1JJVEVfT05DRShkZXN0LVx1MDAzZWxfdGhyZXNob2xkX3ZhbCwgbCk7XG4rXHRcdFx0cmV0dXJuO1xuK1x0XHR9XG4gXHR9XG4tXHRpZiAoY29ubnMgXHUwMDNlPSAobW9kZSBcdTAwM2MgMCA/IHUgOiBsKSlcbi1cdFx0cmV0dXJuO1xuIFxuLXVuc2V0OlxuLVx0ZGVzdC1cdTAwM2VmbGFncyBcdTAwMjY9IH5JUF9WU19ERVNUX0ZfT1ZFUkxPQUQ7XG4rXHRXUklURV9PTkNFKGRlc3QtXHUwMDNldV90aHJlc2hvbGRfdmFsLCB1ID8gOiBJTlRfTUFYKTtcbitcdFdSSVRFX09OQ0UoZGVzdC1cdTAwM2VsX3RocmVzaG9sZF92YWwsIDApO1xuIH1cbiBcbi12b2lkIGlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKHN0cnVjdCBpcF92c19kZXN0ICpkZXN0LCBpbnQgbW9kZSlcbit2b2lkIGlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKHN0cnVjdCBpcF92c19kZXN0ICpkZXN0LCBib29sIG92ZXJsb2FkKVxuIHtcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZkZXN0LVx1MDAzZWRzdF9sb2NrKTtcbi1cdF9faXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoZGVzdCwgbW9kZSk7XG4rXHRfX2lwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKGRlc3QsIG92ZXJsb2FkKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmRlc3QtXHUwMDNlZHN0X2xvY2spO1xuIH1cbiBcbkBAIC0xNDA2LDE1ICsxNDA2LDEzIEBAIF9faXBfdnNfdXBkYXRlX2Rlc3Qoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2Yywgc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QsXG4gXG4gXHRpZiAoUkVBRF9PTkNFKGRlc3QtXHUwMDNldV90aHJlc2hvbGQpICE9IHVkZXN0LVx1MDAzZXVfdGhyZXNob2xkIHx8XG4gXHQgICAgUkVBRF9PTkNFKGRlc3QtXHUwMDNlbF90aHJlc2hvbGQpICE9IHVkZXN0LVx1MDAzZWxfdGhyZXNob2xkKSB7XG4rXHRcdGJvb2wgb3ZlcmxvYWQ7XG4rXG4gXHRcdHNwaW5fbG9ja19iaChcdTAwMjZkZXN0LVx1MDAzZWRzdF9sb2NrKTtcbiBcdFx0V1JJVEVfT05DRShkZXN0LVx1MDAzZXVfdGhyZXNob2xkLCB1ZGVzdC1cdTAwM2V1X3RocmVzaG9sZCk7XG4gXHRcdFdSSVRFX09OQ0UoZGVzdC1cdTAwM2VsX3RocmVzaG9sZCwgdWRlc3QtXHUwMDNlbF90aHJlc2hvbGQpO1xuLVx0XHQvKiBMb3cgdGhyZXNob2xkIGRlZmF1bHRzIHRvIDc1JSBvZiB1cHBlciB0aHJlc2hvbGQgKi9cbi1cdFx0V1JJVEVfT05DRShkZXN0LVx1MDAzZWxfdGhyZXNob2xkX3ZhbCxcbi1cdFx0XHQgICB1ZGVzdC1cdTAwM2VsX3RocmVzaG9sZCA/IDpcbi1cdFx0XHQgICAodWRlc3QtXHUwMDNldV90aHJlc2hvbGQgLVxuLVx0XHRcdCAgICAodWRlc3QtXHUwMDNldV90aHJlc2hvbGQgXHUwMDNlXHUwMDNlIDIpKSk7XG4tXHRcdF9faXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWQoZGVzdCwgMCk7XG4rXHRcdG92ZXJsb2FkID0gaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpO1xuK1x0XHRfX2lwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKGRlc3QsIG92ZXJsb2FkKTtcbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2ZGVzdC1cdTAwM2Vkc3RfbG9jayk7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2RoLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZGguY1xuaW5kZXggNDNhYmVkN2EyNmE2YS4uOTVlNTI5NTBhZGJiNyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19kaC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZGguY1xuQEAgLTE5NSwxNiArMTk1LDYgQEAgc3RhdGljIGludCBpcF92c19kaF9kZXN0X2NoYW5nZWQoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YyxcbiB9XG4gXG4gXG4tLypcbi0gKiAgICAgIElmIHRoZSBkZXN0IGZsYWdzIGlzIHNldCB3aXRoIElQX1ZTX0RFU1RfRl9PVkVSTE9BRCxcbi0gKiAgICAgIGNvbnNpZGVyIHRoYXQgdGhlIHNlcnZlciBpcyBvdmVybG9hZGVkIGhlcmUuXG4tICovXG4tc3RhdGljIGlubGluZSBpbnQgaXNfb3ZlcmxvYWRlZChzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcbi17XG4tXHRyZXR1cm4gZGVzdC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEO1xuLX1cbi1cbi1cbiAvKlxuICAqICAgICAgRGVzdGluYXRpb24gaGFzaGluZyBzY2hlZHVsaW5nXG4gICovXG5AQCAtMjE5LDEwICsyMDksOCBAQCBpcF92c19kaF9zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFxuIFx0cyA9IChzdHJ1Y3QgaXBfdnNfZGhfc3RhdGUgKikgc3ZjLVx1MDAzZXNjaGVkX2RhdGE7XG4gXHRkZXN0ID0gaXBfdnNfZGhfZ2V0KHN2Yy1cdTAwM2VhZiwgcywgXHUwMDI2aXBoLVx1MDAzZWRhZGRyKTtcbi1cdGlmICghZGVzdCB8fFxuLVx0ICAgICEoZGVzdC1cdTAwM2VjZmxhZ3MgXHUwMDI2IElQX1ZTX0RFU1RfQ0ZfQVZBSUxBQkxFKVxuLVx0ICAgIHx8IGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNld2VpZ2h0KSBcdTAwM2M9IDBcbi1cdCAgICB8fCBpc19vdmVybG9hZGVkKGRlc3QpKSB7XG4rXHRpZiAoIWRlc3QgfHwgYXRvbWljX3JlYWQoXHUwMDI2ZGVzdC1cdTAwM2V3ZWlnaHQpIFx1MDAzYz0gMCB8fFxuK1x0ICAgIGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSkge1xuIFx0XHRpcF92c19zY2hlZHVsZXJfZXJyKHN2YywgXCJubyBkZXN0aW5hdGlvbiBhdmFpbGFibGVcIik7XG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mby5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2ZvLmNcbmluZGV4IGQ2NTdiNDdjNjUxMWYuLmUwN2ZhMzNmNmQ1MjcgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZm8uY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2ZvLmNcbkBAIC0yOSw3ICsyOSw3IEBAIGlwX3ZzX2ZvX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHQgKiBGaW5kIHZpcnR1YWwgc2VydmVyIHdpdGggaGlnaGVzdCB3ZWlnaHQgYW5kIHNlbmQgaXQgdHJhZmZpY1xuIFx0ICovXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkZXN0LCBcdTAwMjZzdmMtXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcbi1cdFx0aWYgKCEoZGVzdC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKSBcdTAwMjZcdTAwMjZcbitcdFx0aWYgKCFpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZXdlaWdodCkgXHUwMDNlIGh3KSB7XG4gXHRcdFx0aHdlaWdodCA9IGRlc3Q7XG4gXHRcdFx0aHcgPSBhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZXdlaWdodCk7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGMuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjLmNcbmluZGV4IDY5M2JjYzgyY2NiNzcuLmJmZjEwOWMxYzk1OWIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsYy5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsYy5jXG5AQCAtNDE0LDcgKzQxNCw3IEBAIF9faXBfdnNfbGJsY19zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjKVxuIFx0ICogbmV3IGNvbm5lY3Rpb24uXG4gXHQgKi9cbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsIFx1MDAyNnN2Yy1cdTAwM2VkZXN0aW5hdGlvbnMsIG5fbGlzdCkge1xuLVx0XHRpZiAoZGVzdC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKVxuK1x0XHRpZiAoaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2ZGVzdC1cdTAwM2V3ZWlnaHQpIFx1MDAzZSAwKSB7XG4gXHRcdFx0bGVhc3QgPSBkZXN0O1xuQEAgLTQyOSw3ICs0MjksNyBAQCBfX2lwX3ZzX2xibGNfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YylcbiBcdCAqL1xuICAgbmV4dHN0YWdlOlxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yY3UoZGVzdCwgXHUwMDI2c3ZjLVx1MDAzZWRlc3RpbmF0aW9ucywgbl9saXN0KSB7XG4tXHRcdGlmIChkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpXG4rXHRcdGlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGRvaCA9IGlwX3ZzX2Rlc3RfY29ubl9vdmVyaGVhZChkZXN0KTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsY3IuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjci5jXG5pbmRleCBmNTNmMDVjZWVhMzZmLi5jMjg1M2UwN2U3ODcyIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGNyLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjci5jXG5AQCAtMTY2LDcgKzE2Niw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGlwX3ZzX2Rlc3QgKmlwX3ZzX2Rlc3Rfc2V0X21pbihzdHJ1Y3QgaXBfdnNfZGVzdF9zZXQgKnNldClcbiBcdC8qIHNlbGVjdCB0aGUgZmlyc3QgZGVzdGluYXRpb24gc2VydmVyLCB3aG9zZSB3ZWlnaHQgXHUwMDNlIDAgKi9cbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGUsIFx1MDAyNnNldC1cdTAwM2VsaXN0LCBsaXN0KSB7XG4gXHRcdGxlYXN0ID0gZS1cdTAwM2VkZXN0O1xuLVx0XHRpZiAobGVhc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRClcbitcdFx0aWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChsZWFzdCkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmICgoYXRvbWljX3JlYWQoXHUwMDI2bGVhc3QtXHUwMDNld2VpZ2h0KSBcdTAwM2UgMCkgXHUwMDI2XHUwMDI2XG5AQCAtMTgxLDcgKzE4MSw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGlwX3ZzX2Rlc3QgKmlwX3ZzX2Rlc3Rfc2V0X21pbihzdHJ1Y3QgaXBfdnNfZGVzdF9zZXQgKnNldClcbiAgIG5leHRzdGFnZTpcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmN1KGUsIFx1MDAyNnNldC1cdTAwM2VsaXN0LCBsaXN0KSB7XG4gXHRcdGRlc3QgPSBlLVx1MDAzZWRlc3Q7XG4tXHRcdGlmIChkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpXG4rXHRcdGlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGRvaCA9IGlwX3ZzX2Rlc3RfY29ubl9vdmVyaGVhZChkZXN0KTtcbkBAIC01NzcsNyArNTc3LDcgQEAgX19pcF92c19sYmxjcl9zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjKVxuIFx0ICogbmV3IGNvbm5lY3Rpb24uXG4gXHQgKi9cbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlc3QsIFx1MDAyNnN2Yy1cdTAwM2VkZXN0aW5hdGlvbnMsIG5fbGlzdCkge1xuLVx0XHRpZiAoZGVzdC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKVxuK1x0XHRpZiAoaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2ZGVzdC1cdTAwM2V3ZWlnaHQpIFx1MDAzZSAwKSB7XG5AQCAtNTkzLDcgKzU5Myw3IEBAIF9faXBfdnNfbGJsY3Jfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YylcbiBcdCAqL1xuICAgbmV4dHN0YWdlOlxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yY3UoZGVzdCwgXHUwMDI2c3ZjLVx1MDAzZWRlc3RpbmF0aW9ucywgbl9saXN0KSB7XG4tXHRcdGlmIChkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpXG4rXHRcdGlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGRvaCA9IGlwX3ZzX2Rlc3RfY29ubl9vdmVyaGVhZChkZXN0KTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGMuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYy5jXG5pbmRleCAxOGI5NzZhN2M0ZDIwLi45MDAyZjQ5MWJmZjY4IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xjLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYy5jXG5AQCAtMzgsNyArMzgsNyBAQCBpcF92c19sY19zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0ICovXG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkZXN0LCBcdTAwMjZzdmMtXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcbi1cdFx0aWYgKChkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpIHx8XG4rXHRcdGlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkgfHxcbiBcdFx0ICAgIGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNld2VpZ2h0KSA9PSAwKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRkb2ggPSBpcF92c19kZXN0X2Nvbm5fb3ZlcmhlYWQoZGVzdCk7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX21oLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbWguY1xuaW5kZXggMDIwODYzMDQ3NTYyZC4uZDcwYjIzYWVjNWZlYyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19taC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbWguY1xuQEAgLTgwLDcgKzgwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGdlbmVyYXRlX2hhc2hfc2VjcmV0KGhzaXBoYXNoX2tleV90ICpoYXNoMSxcbiBzdGF0aWMgaW5saW5lIGJvb2wgaXNfdW5hdmFpbGFibGUoc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QpXG4ge1xuIFx0cmV0dXJuIGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNld2VpZ2h0KSBcdTAwM2M9IDAgfHxcbi1cdCAgICAgICBkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQ7XG4rXHQgICAgICAgaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpO1xuIH1cbiBcbiAvKiBSZXR1cm5zIGhhc2ggdmFsdWUgZm9yIElQVlMgTUggZW50cnkgKi9cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbnEuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19ucS5jXG5pbmRleCBhZGExNThjNjEwY2UxLi43Y2MyODkwMjA4NmU3IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX25xLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19ucS5jXG5AQCAtNzIsNyArNzIsNyBAQCBpcF92c19ucV9zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZGVzdCwgXHUwMDI2c3ZjLVx1MDAzZWRlc3RpbmF0aW9ucywgbl9saXN0KSB7XG4gXG4tXHRcdGlmIChkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQgfHxcbitcdFx0aWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSB8fFxuIFx0XHQgICAgIWF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNld2VpZ2h0KSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfb3ZmLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfb3ZmLmNcbmluZGV4IGM1YzY3ZGY4MGEwYjMuLmVhYTNhN2FlNmVmYTYgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfb3ZmLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19vdmYuY1xuQEAgLTMzLDcgKzMzLDcgQEAgaXBfdnNfb3ZmX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHQqL1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZGVzdCwgXHUwMDI2c3ZjLVx1MDAzZWRlc3RpbmF0aW9ucywgbl9saXN0KSB7XG4gXHRcdHcgPSBhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZXdlaWdodCk7XG4tXHRcdGlmICgoZGVzdC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKSB8fFxuK1x0XHRpZiAoaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpIHx8XG4gXHRcdCAgICBhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZWFjdGl2ZWNvbm5zKSBcdTAwM2UgdyB8fFxuIFx0XHQgICAgdyA9PSAwKVxuIFx0XHRcdGNvbnRpbnVlO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19yci5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3JyLmNcbmluZGV4IDQxMjVlZTU2MWNkYzMuLmJkMTdjZGQwOTJmNWYgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcnIuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3JyLmNcbkBAIC02Niw3ICs2Niw3IEBAIGlwX3ZzX3JyX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmN1KGRlc3QsXG4gXHRcdFx0XHRcdFx0IFx1MDAyNnN2Yy1cdTAwM2VkZXN0aW5hdGlvbnMsXG4gXHRcdFx0XHRcdFx0IG5fbGlzdCkge1xuLVx0XHRcdGlmICghKGRlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRCkgXHUwMDI2XHUwMDI2XG4rXHRcdFx0aWYgKCFpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgIGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNld2VpZ2h0KSBcdTAwM2UgMClcbiBcdFx0XHRcdC8qIEhJVCAqL1xuIFx0XHRcdFx0Z290byBvdXQ7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NlZC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NlZC5jXG5pbmRleCAyNDVhMzIzYzg0Y2QzLi43OTI1ZjRkMjhmY2U5IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NlZC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2VkLmNcbkBAIC03NSw3ICs3NSw3IEBAIGlwX3ZzX3NlZF9zY2hlZHVsZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0ICovXG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkZXN0LCBcdTAwMjZzdmMtXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcbi1cdFx0aWYgKCEoZGVzdC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKSBcdTAwMjZcdTAwMjZcbitcdFx0aWYgKCFpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZXdlaWdodCkgXHUwMDNlIDApIHtcbiBcdFx0XHRsZWFzdCA9IGRlc3Q7XG4gXHRcdFx0bG9oID0gaXBfdnNfc2VkX2Rlc3Rfb3ZlcmhlYWQobGVhc3QpO1xuQEAgLTkwLDcgKzkwLDcgQEAgaXBfdnNfc2VkX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHQgKi9cbiAgIG5leHRzdGFnZTpcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmN1KGRlc3QsIFx1MDAyNnN2Yy1cdTAwM2VkZXN0aW5hdGlvbnMsIG5fbGlzdCkge1xuLVx0XHRpZiAoZGVzdC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKVxuK1x0XHRpZiAoaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRkb2ggPSBpcF92c19zZWRfZGVzdF9vdmVyaGVhZChkZXN0KTtcbiBcdFx0aWYgKChfX3M2NClsb2ggKiBhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZXdlaWdodCkgXHUwMDNlXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NoLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2guY1xuaW5kZXggY2Q2NzA2NmUzYjI2MS4uYzI0ZGQ1Y2I3ZTQ3OCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zaC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2guY1xuQEAgLTczLDcgKzczLDcgQEAgc3RydWN0IGlwX3ZzX3NoX3N0YXRlIHtcbiBzdGF0aWMgaW5saW5lIGJvb2wgaXNfdW5hdmFpbGFibGUoc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QpXG4ge1xuIFx0cmV0dXJuIGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNld2VpZ2h0KSBcdTAwM2M9IDAgfHxcbi1cdCAgICAgICBkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQ7XG4rXHQgICAgICAgaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpO1xuIH1cbiBcbiAvKlxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c190d29zLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfdHdvcy5jXG5pbmRleCBkYmI3ZjVmZDQ2ODhhLi44NjE4NjEyMmExZjAxIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3R3b3MuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3R3b3MuY1xuQEAgLTUyLDcgKzUyLDcgQEAgc3RhdGljIHN0cnVjdCBpcF92c19kZXN0ICppcF92c190d29zX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsXG4gXG4gXHQvKiBHZW5lcmF0ZSBhIHJhbmRvbSB3ZWlnaHQgYmV0d2VlbiBbMCxzdW0gb2YgYWxsIHdlaWdodHMpICovXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkZXN0LCBcdTAwMjZzdmMtXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcbi1cdFx0aWYgKCEoZGVzdC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfREVTVF9GX09WRVJMT0FEKSkge1xuK1x0XHRpZiAoIWlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSkge1xuIFx0XHRcdHdlaWdodCA9IGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNld2VpZ2h0KTtcbiBcdFx0XHRpZiAod2VpZ2h0IFx1MDAzZSAwKSB7XG4gXHRcdFx0XHR0b3RhbF93ZWlnaHQgKz0gd2VpZ2h0O1xuQEAgLTc1LDcgKzc1LDcgQEAgc3RhdGljIHN0cnVjdCBpcF92c19kZXN0ICppcF92c190d29zX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsXG4gXG4gXHQvKiBQaWNrIHR3byB3ZWlnaHRlZCBzZXJ2ZXJzICovXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkZXN0LCBcdTAwMjZzdmMtXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcbi1cdFx0aWYgKGRlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRClcbitcdFx0aWYgKGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZChkZXN0KSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0d2VpZ2h0ID0gYXRvbWljX3JlYWQoXHUwMDI2ZGVzdC1cdTAwM2V3ZWlnaHQpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c193bGMuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c193bGMuY1xuaW5kZXggOWRhNDQ1Y2EwOWExNC4uMDhlOWUyMmY3MmJmOCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c193bGMuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3dsYy5jXG5AQCAtNDcsNyArNDcsNyBAQCBpcF92c193bGNfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdCAqL1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZGVzdCwgXHUwMDI2c3ZjLVx1MDAzZWRlc3RpbmF0aW9ucywgbl9saXN0KSB7XG4tXHRcdGlmICghKGRlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRCkgXHUwMDI2XHUwMDI2XG4rXHRcdGlmICghaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKGRlc3QpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgYXRvbWljX3JlYWQoXHUwMDI2ZGVzdC1cdTAwM2V3ZWlnaHQpIFx1MDAzZSAwKSB7XG4gXHRcdFx0bGVhc3QgPSBkZXN0O1xuIFx0XHRcdGxvaCA9IGlwX3ZzX2Rlc3RfY29ubl9vdmVyaGVhZChsZWFzdCk7XG5AQCAtNjIsNyArNjIsNyBAQCBpcF92c193bGNfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdCAqL1xuICAgbmV4dHN0YWdlOlxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yY3UoZGVzdCwgXHUwMDI2c3ZjLVx1MDAzZWRlc3RpbmF0aW9ucywgbl9saXN0KSB7XG4tXHRcdGlmIChkZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpXG4rXHRcdGlmIChpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGRvaCA9IGlwX3ZzX2Rlc3RfY29ubl9vdmVyaGVhZChkZXN0KTtcbiBcdFx0aWYgKChfX3M2NClsb2ggKiBhdG9taWNfcmVhZChcdTAwMjZkZXN0LVx1MDAzZXdlaWdodCkgXHUwMDNlXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3dyci5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3dyci5jXG5pbmRleCAyZGNmZjEwNDBkYTUyLi5mYWQ2OWJhZTVhMjJiIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3dyci5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd3JyLmNcbkBAIC0xNzYsNyArMTc2LDcgQEAgaXBfdnNfd3JyX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmN1KGRlc3QsXG4gXHRcdFx0XHRcdFx0IFx1MDAyNnN2Yy1cdTAwM2VkZXN0aW5hdGlvbnMsXG4gXHRcdFx0XHRcdFx0IG5fbGlzdCkge1xuLVx0XHRcdGlmICghKGRlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRCkgXHUwMDI2XHUwMDI2XG4rXHRcdFx0aWYgKCFpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdCkgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgIGF0b21pY19yZWFkKFx1MDAyNmRlc3QtXHUwMDNld2VpZ2h0KSBcdTAwM2U9IG1hcmstXHUwMDNlY3cpXG4gXHRcdFx0XHRnb3RvIGZvdW5kO1xuIFx0XHRcdGlmIChkZXN0ID09IHN0b3ApXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxMTo0Ny44MzY3NzQ5NzlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODYxNDUzMTY5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQVlMgUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGFzc2VzcyB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSwgc3BlY2lmaWNhbGx5IHdpdGggYW4gZXllIHRvd2FyZHMgd2hldGhlciBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyB3YXJyYW50ZWQuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGBzdHJ1Y3QgaXBfdnNfZGVzdGAgYW5kIGhvdyBpdHMgZmllbGRzIGFyZSBoYW5kbGVkLCBlc3BlY2lhbGx5IGFmdGVyIHRoZXNlIGNoYW5nZXMuXG5cbkZpcnN0LCB0aGUgY29yZSBjaGFuZ2VzLiBUaGUgYCNkZWZpbmUgSVBfVlNfREVTVF9GX09WRVJMT0FEYCBpcyBnb25lLCB3aGljaCBzdWdnZXN0cyBhIHNoaWZ0IGF3YXkgZnJvbSBiaXRmaWVsZHMuIFRoZSBgc3RydWN0IGlwX3ZzX2Rlc3RgIGl0c2VsZiBoYXMgYmVlbiByZW9yZ2FuaXplZCwgcmVtb3ZpbmcgdGhlIGB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgZmxhZ3NgIGFuZCByZW9yZGVyaW5nIGZvciBjYWNoZWxpbmUgYWxpZ25tZW50IGFuZCBwYWNraW5nLiBUaGF0J3MgYSBzdGFuZGFyZCBvcHRpbWl6YXRpb24sIGJ1dCB0aGUgYWRkaXRpb24gb2YgYHUzMiB1X3RocmVzaG9sZF92YWxgIGFuZCB0aGUgaW5saW5lIGhlbHBlciBgaXBfdnNfZGVzdF9pc19vdmVybG9hZGVkKClgIGFyZSBrZXkuIFRoZSBvdmVybG9hZCBsb2dpYyBzZWVtcyB0byBiZSBub3cgYmFzZWQgZW50aXJlbHkgb24gdGhlc2UgdGhyZXNob2xkIHZhbHVlcyAoYGxfdGhyZXNob2xkX3ZhbGAgYW5kIGB1X3RocmVzaG9sZF92YWxgKS4gVGhlIGBpcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZGAgc2lnbmF0dXJlIGNoYW5nZWQgdG9vLiBUaGlzIGlzIGFsbCBnb29kLCBjbGVhbiBjb2RlLCBidXQgaXQgbmVlZHMgdG8gYmUgdW5kZXJzdG9vZC5cblxuTG9va2luZyBhdCB0aGUgY29kZSB1dGlsaXppbmcgdGhlIHN0cnVjdHVyZSwgc3BlY2lmaWNhbGx5IGBpcF92c19jb25uLmNgLCB3ZSBzZWUgdGhlIG92ZXJsb2FkIGxvZ2ljIGluIGBpcF92c19iaW5kX2Rlc3RgIGFuZCBgaXBfdnNfdW5iaW5kX2Rlc3RgLiBUaGUgY29tcGFyaXNvbnMgYWdhaW5zdCBgUkVBRF9PTkNFKGRlc3QtXHUwMDNldV90aHJlc2hvbGRfdmFsKWAgYW5kIGBSRUFEX09OQ0UoZGVzdC1cdTAwM2VsX3RocmVzaG9sZF92YWwpYCBhbmQgc3Vic2VxdWVudCBjYWxscyB0byBgaXBfdnNfZGVzdF91cGRhdGVfb3ZlcmxvYWRgIGFyZSBjbGVhciBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIG5ldyBvdmVybG9hZCBtZWNoYW5pc20uIFRoZSBkZWZpbml0aW9uIG9mIHRoZSB0aHJlc2hvbGRzIGFyZSBoYW5kbGVkIGluIGBpcF92c19jdGwuY2AsIGFuZCB0aGUgbmV3IGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBkZXRlcm1pbmUgb3ZlcmxvYWQgYnkgcmVhZGluZyB0aGUgcmVzcGVjdGl2ZSB0aHJlc2hvbGRzLlxuXG5UaGUgY3J1Y2lhbCBuZXh0IHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCBob3cgYHN0cnVjdCBpcF92c19kZXN0YCBpcyBhbGxvY2F0ZWQsIGluaXRpYWxpemVkLCBhbmQsIG1vc3QgaW1wb3J0YW50bHksIGlmIGFueSBvZiBpdHMgY29udGVudHMgYXJlIGV2ZXIgY29waWVkIHRvIHVzZXIgc3BhY2UuIElmIHdlIGFyZSBwYXNzaW5nIHRoaXMgc3RydWN0dXJlIGludG8gdXNlci1zcGFjZSwgYSBzZWN1cml0eSBidWcgaXMgaW50cm9kdWNlZCBpZiB0aGVyZSBpcyBhbnkgbWVtb3J5IGxlYWsgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyBpcyB3aGVyZSBgZ3JlcHBlcmAgd2lsbCBjb21lIGluIGhhbmR5LiBJJ2xsIHNlYXJjaCBmb3IgYWxsb2NhdGlvbnMgb2YgYGlwX3ZzX2Rlc3RgIGFuZCBhbnkgaW5zdGFuY2VzIHdoZXJlIGl0cyBkYXRhIGlzIGV4cG9zZWQgdmlhIGBnZXRzb2Nrb3B0YCwgbmV0bGluaywgb3IgYW55IG90aGVyIG1lYW5zIG9mIGNvbW11bmljYXRpbmcgaW5mb3JtYXRpb24gdG8gdXNlciBzcGFjZS4gTXkgYXNzdW1wdGlvbiBpcyB0aGF0IHRoZSBkYXRhIHdpbGwgYmUgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBzbyB0aGF0IGlzIHRoZSBrZXkuIFRoZW4gSSBuZWVkIHRvIGludmVzdGlnYXRlIGlmIHRoZXJlIGlzIGFueSBpbml0aWFsaXphdGlvbi5cblxuTXkgc3VzcGljaW9uIGlzIHRoaXMgd2lsbCBiZSBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLCBkZXBlbmRpbmcgb24gaG93IHRoaXMgc3RydWN0IGlzIGhhbmRsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzNTIsIk91dHB1dFRva2VucyI6NjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxMTo1Ni40NTEzMDkzMTdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NDIyMTg0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJremFsbG9jLippcF92c19kZXN0fGlwX3ZzX2Rlc3RfbmV3fGlwX3ZzX2dlbmxfZHVtcF9kZXN0fGlwX3ZzX2dlbmxfZ2V0X2Rlc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0xNDQzPWlwX3ZzX25ld19kZXN0KHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIHN0cnVjdCBpcF92c19kZXN0X3VzZXJfa2VybiAqdWRlc3QpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMTQ2Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MTQ2ODpcXHRkZXN0ID0ga3phbGxvY19vYmooc3RydWN0IGlwX3ZzX2Rlc3QpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xNDY5LVxcdGlmIChkZXN0ID09IE5VTEwpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9NDMwNT1zdGF0aWMgaW50IGlwX3ZzX2dlbmxfZmlsbF9kZXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQzNTMtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjQzNTQ6c3RhdGljIGludCBpcF92c19nZW5sX2R1bXBfZGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDM1NS1cXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDM3NS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDM3NjpzdGF0aWMgaW50IGlwX3ZzX2dlbmxfZHVtcF9kZXN0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00Mzc3LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDQwMS1cXHRcXHRcXHRjb250aW51ZTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDQwMjpcXHRcXHRpZiAoaXBfdnNfZ2VubF9kdW1wX2Rlc3Qoc2tiLCBkZXN0LCBjYikgXFx1MDAzYyAwKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ0MDMtXFx0XFx0XFx0aWR4LS07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9NDkxND1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIGlwX3ZzX2dlbmxfb3BzW10gPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDk2MS1cXHRcXHQuZmxhZ3NcXHQ9IEdFTkxfQURNSU5fUEVSTSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDk2MjpcXHRcXHQuZHVtcGl0XFx0PSBpcF92c19nZW5sX2R1bXBfZGVzdHMsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ5NjMtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6MTE6NTYuOTE1NTM2MDk0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzNzc4NzU5MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoZSBtYXR0ZXI6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBgaXBfdnNfY3RsLmNgIEtlcm5lbCBDb2RlKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgd2F5IHRoZXNlIGRlc3RpbmF0aW9uIGFuZCBzb2NrZXQgb3B0aW9uIGZ1bmN0aW9uYWxpdGllcyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIElQIFZpcnR1YWwgU2VydmVyIChJUFZTKSBjb2RlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBpcF92c19jdGwuY2AuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHBvdGVudGlhbCBhcmVhcyB3aGVyZSBkYXRhIG1pZ2h0IGJlIGluY29ycmVjdGx5IGNvcGllZCBvciBoYW5kbGVkLlxuXG5NeSBpbml0aWFsIGZvY3VzIHdpbGwgYmUgb24gdGhlIGBpcF92c19uZXdfZGVzdGAgYW5kIGBpcF92c19nZW5sX2ZpbGxfZGVzdGAgZnVuY3Rpb25zLiBJJ2xsIG5lZWQgdG8gbWV0aWN1bG91c2x5IGV4YW1pbmUgaG93IGRhdGEgaXMgZmV0Y2hlZCBvciBwbGFjZWQgaW4gdGhlcmUsIGJlY2F1c2UgaW5jb3JyZWN0IGNvcHlpbmcgaW4gdGhvc2UgYXJlYXMgY291bGQgbWFuaWZlc3QgaW4gc3RyYW5nZSB3YXlzLCBhbmQgdGhvc2UgZnVuY3Rpb25zIGxvb2sgbGlrZSBsaWtlbHkgcGxhY2VzLiBIb3dldmVyLCBJJ20gbm90IGdvaW5nIHRvIHN0b3AgdGhlcmUuIEkgYWxzbyBuZWVkIHRvIGJyb2FkZW4gdGhlIHNjb3BlIGFuZCBiZSBzdXJlIEkgY292ZXIgYW55IG90aGVyIGdldHNvY2tvcHQgY29weWluZyBjb2RlIHdpdGhpbiBgaXBfdnNfY3RsLmNgIHRoYXQgY291bGQgYWxzbyBsZWFkIHRvIGlzc3Vlcy4gSXQncyBiZXN0IHRvIGJlIHRob3JvdWdoIGF0IHRoaXMgc3RhZ2UuIEknbGwgcmV2aWV3IHRob3NlIHNlY3Rpb25zIHRvIHNlZSBpZiB0aGV5J3JlIHJlbGV2YW50LCB0b28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTc5LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6MTI6MDEuMjkzNDE0NDM2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5MjE1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ2MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQ2MDpcXHRcXHR9IGVsc2VcXG4xNDYxOlxcdCNlbmRpZlxcbjE0NjI6XFx0XFx0e1xcbjE0NjM6XFx0XFx0XFx0YXR5cGUgPSBpbmV0X2FkZHJfdHlwZShzdmMtXFx1MDAzZWlwdnMtXFx1MDAzZW5ldCwgdWRlc3QtXFx1MDAzZWFkZHIuaXApO1xcbjE0NjQ6XFx0XFx0XFx0aWYgKGF0eXBlICE9IFJUTl9MT0NBTCBcXHUwMDI2XFx1MDAyNiBhdHlwZSAhPSBSVE5fVU5JQ0FTVClcXG4xNDY1OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE0NjY6XFx0XFx0fVxcbjE0Njc6XFx0XFxuMTQ2ODpcXHRcXHRkZXN0ID0ga3phbGxvY19vYmooc3RydWN0IGlwX3ZzX2Rlc3QpO1xcbjE0Njk6XFx0XFx0aWYgKGRlc3QgPT0gTlVMTClcXG4xNDcwOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjE0NzE6XFx0XFxuMTQ3MjpcXHRcXHRyZXQgPSBpcF92c19zdGF0c19pbml0X2FsbG9jKFxcdTAwMjZkZXN0LVxcdTAwM2VzdGF0cyk7XFxuMTQ3MzpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xNDc0OlxcdFxcdFxcdGdvdG8gZXJyX2FsbG9jO1xcbjE0NzU6XFx0XFxuMTQ3NjpcXHRcXHRyZXQgPSBpcF92c19zdGFydF9lc3RpbWF0b3Ioc3ZjLVxcdTAwM2VpcHZzLCBcXHUwMDI2ZGVzdC1cXHUwMDNlc3RhdHMpO1xcbjE0Nzc6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTQ3ODpcXHRcXHRcXHRnb3RvIGVycl9zdGF0cztcXG4xNDc5OlxcdFxcbjE0ODA6XFx0XFx0ZGVzdC1cXHUwMDNlYWYgPSB1ZGVzdC1cXHUwMDNlYWY7XFxuMTQ4MTpcXHRcXHRkZXN0LVxcdTAwM2Vwcm90b2NvbCA9IHN2Yy1cXHUwMDNlcHJvdG9jb2w7XFxuMTQ4MjpcXHRcXHRkZXN0LVxcdTAwM2V2YWRkciA9IHN2Yy1cXHUwMDNlYWRkcjtcXG4xNDgzOlxcdFxcdGRlc3QtXFx1MDAzZXZwb3J0ID0gc3ZjLVxcdTAwM2Vwb3J0O1xcbjE0ODQ6XFx0XFx0ZGVzdC1cXHUwMDNldmZ3bWFyayA9IHN2Yy1cXHUwMDNlZndtYXJrO1xcbjE0ODU6XFx0XFx0aXBfdnNfYWRkcl9jb3B5KHVkZXN0LVxcdTAwM2VhZiwgXFx1MDAyNmRlc3QtXFx1MDAzZWFkZHIsIFxcdTAwMjZ1ZGVzdC1cXHUwMDNlYWRkcik7XFxuMTQ4NjpcXHRcXHRkZXN0LVxcdTAwM2Vwb3J0ID0gdWRlc3QtXFx1MDAzZXBvcnQ7XFxuMTQ4NzpcXHRcXG4xNDg4OlxcdFxcdGF0b21pY19zZXQoXFx1MDAyNmRlc3QtXFx1MDAzZWFjdGl2ZWNvbm5zLCAwKTtcXG4xNDg5OlxcdFxcdGF0b21pY19zZXQoXFx1MDAyNmRlc3QtXFx1MDAzZXRvdGFsY29ubnMsIDApO1xcbjE0OTA6XFx0XFx0YXRvbWljX3NldChcXHUwMDI2ZGVzdC1cXHUwMDNlcGVyc2lzdGNvbm5zLCAwKTtcXG4xNDkxOlxcdFxcdHJlZmNvdW50X3NldChcXHUwMDI2ZGVzdC1cXHUwMDNlcmVmY250LCAxKTtcXG4xNDkyOlxcdFxcbjE0OTM6XFx0XFx0SU5JVF9ITElTVF9OT0RFKFxcdTAwMjZkZXN0LVxcdTAwM2VkX2xpc3QpO1xcbjE0OTQ6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmRlc3QtXFx1MDAzZWRzdF9sb2NrKTtcXG4xNDk1OlxcdFxcdF9faXBfdnNfdXBkYXRlX2Rlc3Qoc3ZjLCBkZXN0LCB1ZGVzdCwgMSk7XFxuMTQ5NjpcXHRcXG4xNDk3OlxcdFxcdHJldHVybiAwO1xcbjE0OTg6XFx0XFxuMTQ5OTpcXHRlcnJfc3RhdHM6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjEyOjAxLjI5NDMxMDA2N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTA3NDYzMjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBJUFZTIERlc3RpbmF0aW9uIEhhbmRsaW5nKipcblxuQWxyaWdodCwgZ2l2ZW4gdGhlIGNvbnRleHQsIEkgdGhpbmsgaXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgaG93IElQVlMgbWFuYWdlcyBkZXN0aW5hdGlvbiBlbnRyaWVzLiBJJ20gZ29pbmcgdG8gc2hpZnQgbXkgZm9jdXMgdG8gdGhvc2UgY29yZSBmdW5jdGlvbnMg4oCTIGBpcF92c19nZW5sX2ZpbGxfZGVzdGAgYW5kIGBpcF92c19jb3B5X2Rlc3RfZW50cnlgLiBJIHdhbnQgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCBhbmQgaG93IHRoZXkncmUgYmVpbmcgcG9wdWxhdGVkIGFuZCBtb2RpZmllZC5cblxuVGhlIGBnZXRzb2Nrb3B0YCBoYW5kbGVycyBhcmUgYWxzbyByZWxldmFudCBhbmQgbmVlZCBhIGNsb3NlciBsb29rIGJlY2F1c2UgdGhleSByZXByZXNlbnQgZXh0ZXJuYWwgYWNjZXNzIHRvIHRoZSBkZXN0aW5hdGlvbiBkYXRhLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGV5IGludGVyYWN0IHdpdGggYGlwX3ZzX2dlbmxfZmlsbF9kZXN0YCBhbmQgYGlwX3ZzX2NvcHlfZGVzdF9lbnRyeWAsIGVuc3VyaW5nIGNvbnNpc3RlbmN5IGFuZCB0aGF0IG5vIHVuZXhwZWN0ZWQgaW5mb3JtYXRpb24gbGVha3Mgb2NjdXIgdGhyb3VnaCB0aGVzZSBoYW5kbGVycy4gSSBuZWVkIHRvIGlkZW50aWZ5IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgY29uY3VycmVuY3kgaXNzdWVzIGluIG1hbmlwdWxhdGluZyB0aGVzZSBkZXN0aW5hdGlvbiBlbnRyaWVzLiBQZXJoYXBzIHRoZXJlIGFyZSBkYXRhIGFjY2VzcyBvciBsb2NraW5nIHN1YnRsZXRpZXMgaW4gdGhlIGBnZXRzb2Nrb3B0YCBoYW5kbGVyIHRoYXQgYXJlIGNhdXNpbmcgYSBwcm9ibGVtLiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIGRhdGEgZmxvdyBhbmQgbG9vayBmb3IgcG90ZW50aWFsIHdlYWtuZXNzZXMgb3IgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjExNywiT3V0cHV0VG9rZW5zIjo1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6MTI6MDQuMjAxNzc1ODU1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODg3MTk3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF92c19kZXN0X2VudHJ5fGlwX3ZzX2dlbmxfZmlsbF9kZXN0fGlwX3ZzX2dldF9kZXN0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTM2ODA9c3RhdGljIGlubGluZSBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MzY4MTpfX2lwX3ZzX2dldF9kZXN0X2VudHJpZXMoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGNvbnN0IHN0cnVjdCBpcF92c19nZXRfZGVzdHMgKmdldCxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MzY4MjpcXHRcXHRcXHQgc3RydWN0IGlwX3ZzX2dldF9kZXN0cyBfX3VzZXIgKnVwdHIpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTM2ODMte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTM2OTgtXFx0XFx0c3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3Q7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjM2OTk6XFx0XFx0c3RydWN0IGlwX3ZzX2Rlc3RfZW50cnkgZW50cnk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTM3MDAtXFx0XFx0c3RydWN0IGlwX3ZzX2tzdGF0cyBrc3RhdHM7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9Mzc1Nz1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBnZXRfYXJnbGVuW0NNRElEKElQX1ZTX1NPX0dFVF9NQVgpICsgMV0gPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzc2MS1cXHRbQ01ESUQoSVBfVlNfU09fR0VUX1NFUlZJQ0UpXSAgPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3NlcnZpY2VfZW50cnkpLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzozNzYyOlxcdFtDTURJRChJUF9WU19TT19HRVRfREVTVFMpXSAgICA9IHNpemVvZihzdHJ1Y3QgaXBfdnNfZ2V0X2Rlc3RzKSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzc2My1cXHRbQ01ESUQoSVBfVlNfU09fR0VUX1RJTUVPVVQpXSAgPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3RpbWVvdXRfdXNlciksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9Mzc2Nz11bmlvbiBpcF92c19nZXRfYXJnbGVuIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0zNzcxLVxcdHN0cnVjdCBpcF92c19zZXJ2aWNlX2VudHJ5XFx0ZmllbGRfSVBfVlNfU09fR0VUX1NFUlZJQ0U7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjM3NzI6XFx0c3RydWN0IGlwX3ZzX2dldF9kZXN0c1xcdFxcdGZpZWxkX0lQX1ZTX1NPX0dFVF9ERVNUUztcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzc3My1cXHRzdHJ1Y3QgaXBfdnNfdGltZW91dF91c2VyXFx0ZmllbGRfSVBfVlNfU09fR0VUX1RJTUVPVVQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9Mzc4MD1kb19pcF92c19nZXRfY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdm9pZCBfX3VzZXIgKnVzZXIsIGludCAqbGVuKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTM5MTQtXFx0e1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzozOTE1OlxcdFxcdHN0cnVjdCBpcF92c19nZXRfZGVzdHMgKmdldDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzkxNi1cXHRcXHRzaXplX3Qgc2l6ZTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzkxNy1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MzkxODpcXHRcXHRnZXQgPSAoc3RydWN0IGlwX3ZzX2dldF9kZXN0cyAqKWFyZztcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzkxOS1cXHRcXHRzaXplID0gc3RydWN0X3NpemUoZ2V0LCBlbnRyeXRhYmxlLCBnZXQtXFx1MDAzZW51bV9kZXN0cyk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9NDI5ND1zdGF0aWMgc3RydWN0IGlwX3ZzX3NlcnZpY2UgKmlwX3ZzX2dlbmxfZmluZF9zZXJ2aWNlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQzMDQtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjQzMDU6c3RhdGljIGludCBpcF92c19nZW5sX2ZpbGxfZGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDMwNi17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9NDM1ND1zdGF0aWMgaW50IGlwX3ZzX2dlbmxfZHVtcF9kZXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19kZXN0ICpkZXN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQzNjQtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjQzNjU6XFx0aWYgKGlwX3ZzX2dlbmxfZmlsbF9kZXN0KHNrYiwgZGVzdCkgXFx1MDAzYyAwKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00MzY2LVxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxMjowNC4yNTA2NTI2MDFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE4NjM3MzEwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIElQVlMgQ29udHJvbCBQbGFuZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCB1bmRlcnN0YW5kIGhvdyB0aGVzZSBJUFZTIGRlc3RpbmF0aW9ucyBhcmUgaGFuZGxlZCBhdCB0aGUgY29udHJvbCBwbGFuZSBsZXZlbC4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgYGlwX3ZzX2N0bC5jYCBmaWxlIGFuZCBzcGVjaWZpY2FsbHkgZm9jdXMgb24gdGhlIGZ1bmN0aW9ucyBgaXBfdnNfZ2VubF9maWxsX2Rlc3RgIGFuZCBgX19pcF92c19nZXRfZGVzdF9lbnRyaWVzYC4gVGhlc2UgbmFtZXMgYXJlIHByZXR0eSBkZXNjcmlwdGl2ZSwgc28gSSdtIGV4cGVjdGluZyBgaXBfdnNfZ2VubF9maWxsX2Rlc3RgIHRvIGJlIHJlc3BvbnNpYmxlIGZvciBwb3B1bGF0aW5nIHRoZSBkZXN0aW5hdGlvbiBpbmZvcm1hdGlvbiwgcHJvYmFibHkgdXNpbmcgR2VuZXJpYyBOZXRsaW5rLCBhbmQgYF9faXBfdnNfZ2V0X2Rlc3RfZW50cmllc2Agc2hvdWxkIGJlIHRoZSBsb3dlci1sZXZlbCBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5IHJldHJpZXZlcyB0aGlzIGRlc3RpbmF0aW9uIGRhdGEuIEknbSBpbnRlcmVzdGVkIGluIGhvdyB0aGVzZSB3b3JrIHRvZ2V0aGVyIHRvIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBmb3IgdGhlIHVzZXIgc3BhY2UgY29udHJvbCB1dGlsaXR5IHRvIG1hbmFnZSB0aGUgbG9hZCBiYWxhbmNpbmcgZGVzdGluYXRpb25zLiBMZXQncyBzZWUgaG93IHRoZXkgaW50ZXJhY3QgYW5kIHdoYXQncyBnb2luZyBvbiB1bmRlciB0aGUgaG9vZC4gSSB3YW50IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBvcHRpbWl6YXRpb24gdGVjaG5pcXVlcywgb3IgcG9zc2libGUgYXJlYXMgb2YgaW1wcm92ZW1lbnQgaGVyZS4gVGhpcyBzaG91bGQgcHJvdmlkZSBzb21lIHNvbGlkIGluc2lnaHQgaW50byBob3cgSVBWUyBjb25maWd1cmVzIGFuZCBzdG9yZXMgZGVzdGluYXRpb24gZW50cmllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2MjgsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxMjowNi40MzcwMjg2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzY5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzY5MDpcXHRcXHRcXHRzdmMgPSBfX2lwX3ZzX3N2Y19md21fZmluZChpcHZzLCBBRl9JTkVULCBnZXQtXFx1MDAzZWZ3bWFyayk7XFxuMzY5MTpcXHRcXHRlbHNlXFxuMzY5MjpcXHRcXHRcXHRzdmMgPSBfX2lwX3ZzX3NlcnZpY2VfZmluZChpcHZzLCBBRl9JTkVULCBnZXQtXFx1MDAzZXByb3RvY29sLCBcXHUwMDI2YWRkcixcXG4zNjkzOlxcdFxcdFxcdFxcdFxcdFxcdCAgIGdldC1cXHUwMDNlcG9ydCk7XFxuMzY5NDpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4zNjk1OlxcdFxcbjM2OTY6XFx0XFx0aWYgKHN2Yykge1xcbjM2OTc6XFx0XFx0XFx0aW50IGNvdW50ID0gMDtcXG4zNjk4OlxcdFxcdFxcdHN0cnVjdCBpcF92c19kZXN0ICpkZXN0O1xcbjM2OTk6XFx0XFx0XFx0c3RydWN0IGlwX3ZzX2Rlc3RfZW50cnkgZW50cnk7XFxuMzcwMDpcXHRcXHRcXHRzdHJ1Y3QgaXBfdnNfa3N0YXRzIGtzdGF0cztcXG4zNzAxOlxcdFxcbjM3MDI6XFx0XFx0XFx0bWVtc2V0KFxcdTAwMjZlbnRyeSwgMCwgc2l6ZW9mKGVudHJ5KSk7XFxuMzcwMzpcXHRcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRlc3QsIFxcdTAwMjZzdmMtXFx1MDAzZWRlc3RpbmF0aW9ucywgbl9saXN0KSB7XFxuMzcwNDpcXHRcXHRcXHRcXHRpZiAoY291bnQgXFx1MDAzZT0gZ2V0LVxcdTAwM2VudW1fZGVzdHMpXFxuMzcwNTpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4zNzA2OlxcdFxcbjM3MDc6XFx0XFx0XFx0XFx0LyogQ2Fubm90IGV4cG9zZSBoZXRlcm9nZW5lb3VzIG1lbWJlcnMgdmlhIHNvY2tvcHRcXG4zNzA4OlxcdFxcdFxcdFxcdCAqIGludGVyZmFjZVxcbjM3MDk6XFx0XFx0XFx0XFx0ICovXFxuMzcxMDpcXHRcXHRcXHRcXHRpZiAoZGVzdC1cXHUwMDNlYWYgIT0gc3ZjLVxcdTAwM2VhZilcXG4zNzExOlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjM3MTI6XFx0XFxuMzcxMzpcXHRcXHRcXHRcXHRlbnRyeS5hZGRyID0gZGVzdC1cXHUwMDNlYWRkci5pcDtcXG4zNzE0OlxcdFxcdFxcdFxcdGVudHJ5LnBvcnQgPSBkZXN0LVxcdTAwM2Vwb3J0O1xcbjM3MTU6XFx0XFx0XFx0XFx0ZW50cnkuY29ubl9mbGFncyA9IGF0b21pY19yZWFkKFxcdTAwMjZkZXN0LVxcdTAwM2Vjb25uX2ZsYWdzKTtcXG4zNzE2OlxcdFxcdFxcdFxcdGVudHJ5LndlaWdodCA9IGF0b21pY19yZWFkKFxcdTAwMjZkZXN0LVxcdTAwM2V3ZWlnaHQpO1xcbjM3MTc6XFx0XFx0XFx0XFx0ZW50cnkudV90aHJlc2hvbGQgPSBSRUFEX09OQ0UoZGVzdC1cXHUwMDNldV90aHJlc2hvbGQpO1xcbjM3MTg6XFx0XFx0XFx0XFx0ZW50cnkubF90aHJlc2hvbGQgPSBSRUFEX09OQ0UoZGVzdC1cXHUwMDNlbF90aHJlc2hvbGQpO1xcbjM3MTk6XFx0XFx0XFx0XFx0ZW50cnkuYWN0aXZlY29ubnMgPSBhdG9taWNfcmVhZChcXHUwMDI2ZGVzdC1cXHUwMDNlYWN0aXZlY29ubnMpO1xcbjM3MjA6XFx0XFx0XFx0XFx0ZW50cnkuaW5hY3Rjb25ucyA9IGlwX3ZzX2Rlc3RfaW5hY3Rjb25ucyhkZXN0KTtcXG4zNzIxOlxcdFxcdFxcdFxcdGVudHJ5LnBlcnNpc3Rjb25ucyA9IGF0b21pY19yZWFkKFxcdTAwMjZkZXN0LVxcdTAwM2VwZXJzaXN0Y29ubnMpO1xcbjM3MjI6XFx0XFx0XFx0XFx0aXBfdnNfY29weV9zdGF0cyhcXHUwMDI2a3N0YXRzLCBcXHUwMDI2ZGVzdC1cXHUwMDNlc3RhdHMpO1xcbjM3MjM6XFx0XFx0XFx0XFx0aXBfdnNfZXhwb3J0X3N0YXRzX3VzZXIoXFx1MDAyNmVudHJ5LnN0YXRzLCBcXHUwMDI2a3N0YXRzKTtcXG4zNzI0OlxcdFxcdFxcdFxcdGlmIChjb3B5X3RvX3VzZXIoXFx1MDAyNnVwdHItXFx1MDAzZWVudHJ5dGFibGVbY291bnRdLFxcbjM3MjU6XFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZlbnRyeSwgc2l6ZW9mKGVudHJ5KSkpIHtcXG4zNzI2OlxcdFxcdFxcdFxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuMzcyNzpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4zNzI4OlxcdFxcdFxcdFxcdH1cXG4zNzI5OlxcdFxcdFxcdFxcdGNvdW50Kys7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjEyOjA2LjQzNzIyMDkyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU4NzEyNjQ2NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBpcF92c19nZW5sX2ZpbGxfZGVzdGAqKlxuXG5SaWdodCwgbGV0J3MgY2lyY2xlIGJhY2sgYW5kIHRha2UgYSBsb29rIGF0IGBpcF92c19nZW5sX2ZpbGxfZGVzdGAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgZGVzdGluYXRpb24gZmlsbGluZyBsb2dpYyB3aXRoaW4gdGhlIGdlbmVyaWMgbmV0bGluayBpbnRlcmZhY2UgaXMgZnVuY3Rpb25pbmcgYXMgZXhwZWN0ZWQuIEl0J3MgYSBjcml0aWNhbCBwaWVjZSBmb3IgcHJvcGVyIGZvcndhcmRpbmcgd2l0aGluIHRoZSBJUFZTIHNldHVwLCBzbyBhIGNvbXByZWhlbnNpdmUgcmV2aWV3IGlzIGluIG9yZGVyLiBTcGVjaWZpY2FsbHksIEknbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIGRhdGEgaW50ZWdyaXR5LCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcywgb3IgYW55IHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzLiBNYWtpbmcgc3VyZSB0aGlzIGZ1bmN0aW9uIGlzIHNvbGlkIGlzIGtleSBmb3Igb3ZlcmFsbCBzdGFiaWxpdHkgYW5kIGVmZmljaWVudCBsb2FkIGJhbGFuY2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2MTgsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjEyOjEyLjMwODQ4ODAyOVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODY1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQzMDUsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQzMDU6XFx0c3RhdGljIGludCBpcF92c19nZW5sX2ZpbGxfZGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcXG40MzA2OlxcdHtcXG40MzA3OlxcdFxcdHN0cnVjdCBubGF0dHIgKm5sX2Rlc3Q7XFxuNDMwODpcXHRcXHRzdHJ1Y3QgaXBfdnNfa3N0YXRzIGtzdGF0cztcXG40MzA5OlxcdFxcbjQzMTA6XFx0XFx0bmxfZGVzdCA9IG5sYV9uZXN0X3N0YXJ0X25vZmxhZyhza2IsIElQVlNfQ01EX0FUVFJfREVTVCk7XFxuNDMxMTpcXHRcXHRpZiAoIW5sX2Rlc3QpXFxuNDMxMjpcXHRcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbjQzMTM6XFx0XFxuNDMxNDpcXHRcXHRpZiAobmxhX3B1dChza2IsIElQVlNfREVTVF9BVFRSX0FERFIsIHNpemVvZihkZXN0LVxcdTAwM2VhZGRyKSwgXFx1MDAyNmRlc3QtXFx1MDAzZWFkZHIpIHx8XFxuNDMxNTpcXHRcXHQgICAgbmxhX3B1dF9iZTE2KHNrYiwgSVBWU19ERVNUX0FUVFJfUE9SVCwgZGVzdC1cXHUwMDNlcG9ydCkgfHxcXG40MzE2OlxcdFxcdCAgICBubGFfcHV0X3UzMihza2IsIElQVlNfREVTVF9BVFRSX0ZXRF9NRVRIT0QsXFxuNDMxNzpcXHRcXHRcXHRcXHQoYXRvbWljX3JlYWQoXFx1MDAyNmRlc3QtXFx1MDAzZWNvbm5fZmxhZ3MpIFxcdTAwMjZcXG40MzE4OlxcdFxcdFxcdFxcdCBJUF9WU19DT05OX0ZfRldEX01BU0spKSB8fFxcbjQzMTk6XFx0XFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSVBWU19ERVNUX0FUVFJfV0VJR0hULFxcbjQzMjA6XFx0XFx0XFx0XFx0YXRvbWljX3JlYWQoXFx1MDAyNmRlc3QtXFx1MDAzZXdlaWdodCkpIHx8XFxuNDMyMTpcXHRcXHQgICAgbmxhX3B1dF91OChza2IsIElQVlNfREVTVF9BVFRSX1RVTl9UWVBFLFxcbjQzMjI6XFx0XFx0XFx0ICAgICAgIGRlc3QtXFx1MDAzZXR1bl90eXBlKSB8fFxcbjQzMjM6XFx0XFx0ICAgIG5sYV9wdXRfYmUxNihza2IsIElQVlNfREVTVF9BVFRSX1RVTl9QT1JULFxcbjQzMjQ6XFx0XFx0XFx0XFx0IGRlc3QtXFx1MDAzZXR1bl9wb3J0KSB8fFxcbjQzMjU6XFx0XFx0ICAgIG5sYV9wdXRfdTE2KHNrYiwgSVBWU19ERVNUX0FUVFJfVFVOX0ZMQUdTLFxcbjQzMjY6XFx0XFx0XFx0XFx0ZGVzdC1cXHUwMDNldHVuX2ZsYWdzKSB8fFxcbjQzMjc6XFx0XFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSVBWU19ERVNUX0FUVFJfVV9USFJFU0gsXFxuNDMyODpcXHRcXHRcXHRcXHRSRUFEX09OQ0UoZGVzdC1cXHUwMDNldV90aHJlc2hvbGQpKSB8fFxcbjQzMjk6XFx0XFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSVBWU19ERVNUX0FUVFJfTF9USFJFU0gsXFxuNDMzMDpcXHRcXHRcXHRcXHRSRUFEX09OQ0UoZGVzdC1cXHUwMDNlbF90aHJlc2hvbGQpKSB8fFxcbjQzMzE6XFx0XFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSVBWU19ERVNUX0FUVFJfQUNUSVZFX0NPTk5TLFxcbjQzMzI6XFx0XFx0XFx0XFx0YXRvbWljX3JlYWQoXFx1MDAyNmRlc3QtXFx1MDAzZWFjdGl2ZWNvbm5zKSkgfHxcXG40MzMzOlxcdFxcdCAgICBubGFfcHV0X3UzMihza2IsIElQVlNfREVTVF9BVFRSX0lOQUNUX0NPTk5TLFxcbjQzMzQ6XFx0XFx0XFx0XFx0aXBfdnNfZGVzdF9pbmFjdGNvbm5zKGRlc3QpKSB8fFxcbjQzMzU6XFx0XFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSVBWU19ERVNUX0FUVFJfUEVSU0lTVF9DT05OUyxcXG40MzM2OlxcdFxcdFxcdFxcdGF0b21pY19yZWFkKFxcdTAwMjZkZXN0LVxcdTAwM2VwZXJzaXN0Y29ubnMpKSB8fFxcbjQzMzc6XFx0XFx0ICAgIG5sYV9wdXRfdTE2KHNrYiwgSVBWU19ERVNUX0FUVFJfQUREUl9GQU1JTFksIGRlc3QtXFx1MDAzZWFmKSlcXG40MzM4OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjQzMzk6XFx0XFx0aXBfdnNfY29weV9zdGF0cyhcXHUwMDI2a3N0YXRzLCBcXHUwMDI2ZGVzdC1cXHUwMDNlc3RhdHMpO1xcbjQzNDA6XFx0XFx0aWYgKGlwX3ZzX2dlbmxfZmlsbF9zdGF0cyhza2IsIElQVlNfREVTVF9BVFRSX1NUQVRTLCBcXHUwMDI2a3N0YXRzKSlcXG40MzQxOlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjQzNDI6XFx0XFx0aWYgKGlwX3ZzX2dlbmxfZmlsbF9zdGF0czY0KHNrYiwgSVBWU19ERVNUX0FUVFJfU1RBVFM2NCwgXFx1MDAyNmtzdGF0cykpXFxuNDM0MzpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG40MzQ0OlxcdFxcbjQzNDU6XFx0XFx0bmxhX25lc3RfZW5kKHNrYiwgbmxfZGVzdCk7XFxuNDM0NjpcXHRcXG40MzQ3OlxcdFxcdHJldHVybiAwO1xcbjQzNDg6XFx0XFxuNDM0OTpcXHRubGFfcHV0X2ZhaWx1cmU6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjEyOjEyLjMwODY3NjEzOVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2ODMyOTI5OTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSVBWUyBEZXN0aW5hdGlvbiBPdmVybG9hZCBUcmFja2luZyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCAqZXhhY3RseSogd2hhdCdzIGNoYW5naW5nLiBJdCBsb29rcyBsaWtlIGl0J3MgYW4gb3B0aW1pemF0aW9uIGFuZCByZWZhY3RvcmluZyBvZiBob3cgSVBWUyB0cmFja3MgZGVzdGluYXRpb24gb3ZlcmxvYWQuIFByZXZpb3VzbHksIHRoZSBgSVBfVlNfREVTVF9GX09WRVJMT0FEYCBmbGFnIGluIGBkZXN0LVx1MDAzZWZsYWdzYCB3YXMgdGhlIGdvLXRvIGluZGljYXRvci4gVGhlIHBhdGNoIHJlbW92ZXMgdGhpcyBmbGFnLCBhbmQgaXMgZ29pbmcgdG8gdXRpbGl6ZSBgZGVzdC1cdTAwM2VsX3RocmVzaG9sZF92YWxgIGRpcmVjdGx5LiBDbGV2ZXIsIHVzaW5nIGEgbm9uLXplcm8gdmFsdWUgZm9yIGBsX3RocmVzaG9sZF92YWxgIGFzIHRoZSBvdmVybG9hZCBpbmRpY2F0b3IsIHdoaWNoIHNlZW1zIGxpa2UgYSBnb29kIGNob2ljZSB0byBvcHRpbWl6ZSB0aGUgY2FjaGUgbGluZXMuXG5cbkkgaW1tZWRpYXRlbHkgd2FudCB0byB2ZXJpZnkgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gU2luY2UgYGRlc3RgIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmpgLCB3aGljaCBjYWxscyBga3phbGxvY2AsIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBmaWVsZHMgb3IgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzLiBHaXZlbiBteSBleHBlcmllbmNlLCBJ4oCZbSB0aGlua2luZyB0aGVyZSBpcyBhIGNoYW5jZSB0aGVyZSBhcmUgc2lkZSBlZmZlY3RzLiBJIHJlY2FsbCBga3phbGxvY2AgemVyby1pbml0aWFsaXplcyB0aGUgYWxsb2NhdGVkIG1lbW9yeS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHRydWUgZm9yIGBzdHJ1Y3QgaXBfdnNfZGVzdGAuXG5cblNvLCB0aGUgbmV4dCBzdGVwIGlzIHRvIG1ha2Ugc3VyZSBgc3RydWN0IGlwX3ZzX2Rlc3RgIGlzIG5ldmVyIGNvcGllZCBkaXJlY3RseSB0byB1c2Vyc3BhY2UuIEdvb2QsIGZyb20gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVsZXZhbnQgY29kZSwgYF9faXBfdnNfZ2V0X2Rlc3RfZW50cmllc2AgYW5kIGdlbmVyaWMgbmV0bGluaywgb25seSBpbmRpdmlkdWFsIGZpZWxkcyBhcmUgY29waWVkLCBhbmQgdGhvc2UgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBUaGF0J3MgYSBodWdlIHJlbGllZi4gTm8gbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBleHBvc2VkLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCBvciBicmFuY2hlZCB1cG9uLiBUaGUgcGF0Y2gncyBjaG9pY2UgdG8gemVyby1pbml0aWFsaXplIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgYGRlc3RgIGlzIHNvdW5kIGFuZCBpdCdzIGFsc28gZ29vZCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZXhwbGljaXRseSBzZXQgb3IgdXBkYXRlZCBhZnRlciBhbGxvY2F0aW9uLlxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIHRoZSBzY2hlZHVsZXIgaW50ZXJhY3Rpb25zLiBJIHNlZSB0aGF0IHRoZSBjb2RlIHNpbXBseSByZXBsYWNlcyBgKGRlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0RFU1RfRl9PVkVSTE9BRClgIGNoZWNrcyB3aXRoIGBpcF92c19kZXN0X2lzX292ZXJsb2FkZWQoZGVzdClgLiBUaGF0IHNob3VsZCBiZSBhIHN0cmFpZ2h0Zm9yd2FyZCBzdWJzdGl0dXRpb24gYXMgbG9uZyBhcyB0aGUgc2VtYW50aWNzIGFyZSBpZGVudGljYWwuIEkgd2FudCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGUgYGlwX3ZzX2Rlc3RfaXNfb3ZlcmxvYWRlZGAgZnVuY3Rpb24gY29ycmVjdGx5IHJlZmxlY3RzIHRoZSBvdmVybG9hZCBzdGF0ZSBiYXNlZCBvbiB0aGUgbmV3IGBsX3RocmVzaG9sZF92YWxgIGFwcHJvYWNoLiBJdCdzIHVzaW5nIGBcdTAwM2M9YCBhbmQgYFx1MDAzZT1gIHdpdGggYGxfdGhyZXNob2xkX3ZhbGAgYW5kIGB1X3RocmVzaG9sZF92YWxgIGluIGBpcF92c19jb25uLmNgLCB3aGljaCBtYWtlcyBzZW5zZS5cblxuRmluYWxseSwgSSBuZWVkIHRvIHBlcmZvcm0gYSBjb21wcmVoZW5zaXZlIHN3ZWVwIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGNoYW5nZSBpcyBjb250YWluZWQuIEknbGwgc2VhcmNoIHRoZSBjb2RlIGZvciBhbnkgdXNlcyBvZiBgbF90aHJlc2hvbGRfdmFsYCBvciBgdV90aHJlc2hvbGRfdmFsYCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHBsYWNlcyB3aGVyZSB0aGlzIGNvdWxkIGNhdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGludHJvZHVjZSB1bmV4cGVjdGVkIGJlaGF2aW9yLiBJJ2xsIG5lZWQgdG8gZG8gYSBmdWxsIGdyZXAgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4MTMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxMjoxOS4xNDE2MDg0NTRaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4Njg1NTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIihsX3RocmVzaG9sZF92YWx8dV90aHJlc2hvbGRfdmFsKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz0xMDg5PWlwX3ZzX2JpbmRfZGVzdChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMTUyLVxcdFxcdHRjID0gYXRvbWljX2luY19yZXR1cm4oXFx1MDAyNmRlc3QtXFx1MDAzZXRvdGFsY29ubnMpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTE1MzpcXHRcXHRpZiAodGMgXFx1MDAzZT0gUkVBRF9PTkNFKGRlc3QtXFx1MDAzZXVfdGhyZXNob2xkX3ZhbCkpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMTU0LVxcdFxcdFxcdGlwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKGRlc3QsIHRydWUpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz0xMjIwPXN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c191bmJpbmRfZGVzdChzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEyNDUtXFx0XFx0dGMgPSBhdG9taWNfZmV0Y2hfZGVjKFxcdTAwMjZkZXN0LVxcdTAwM2V0b3RhbGNvbm5zKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjEyNDY6XFx0XFx0aWYgKHRjIFxcdTAwM2M9IFJFQURfT05DRShkZXN0LVxcdTAwM2VsX3RocmVzaG9sZF92YWwpKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTI0Ny1cXHRcXHRcXHRpcF92c19kZXN0X3VwZGF0ZV9vdmVybG9hZChkZXN0LCBmYWxzZSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MTMxMj1zdGF0aWMgdm9pZCBfX2lwX3ZzX2Rlc3RfdXBkYXRlX292ZXJsb2FkKHN0cnVjdCBpcF92c19kZXN0ICpkZXN0LCBib29sIG92ZXJsb2FkKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTEzMjMtXFx0XFx0aWYgKGNvbm5zIFxcdTAwM2U9IChvdmVybG9hZCA/IGwgOiB1KSkge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoxMzI0OlxcdFxcdFxcdFdSSVRFX09OQ0UoZGVzdC1cXHUwMDNldV90aHJlc2hvbGRfdmFsLCBJTlRfTUFYKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MTMyNTpcXHRcXHRcXHRXUklURV9PTkNFKGRlc3QtXFx1MDAzZWxfdGhyZXNob2xkX3ZhbCwgbCk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTEzMjYtXFx0XFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTEzMjktXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjEzMzA6XFx0V1JJVEVfT05DRShkZXN0LVxcdTAwM2V1X3RocmVzaG9sZF92YWwsIHUgPyA6IElOVF9NQVgpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoxMzMxOlxcdFdSSVRFX09OQ0UoZGVzdC1cXHUwMDNlbF90aHJlc2hvbGRfdmFsLCAwKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMTMzMi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjEyOjE5LjE5MDI5ODdaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAwMDY0NTIyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGlzIGNvZGUgY2hhbmdlLiBGaXJzdCwgSSBuZWVkIHRvIGxvb2sgYXQgdGhlIGBmbGFnc2AgZmllbGQgd2l0aGluIHRoZSBgaXBfdnNfZGVzdGAgc3RydWN0dXJlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyAqbmV3KiBhYm91dCBpdCB3aXRoIHRoaXMgcGF0Y2guIFdhcyB0aGVyZSBhbnl0aGluZyBzZXQgaW4gYGRlc3QtXHUwMDNlZmxhZ3NgIHByZXZpb3VzbHk/IEknbSBnb2luZyB0byBjb25zdWx0IHRoZSBkZWZpbml0aW9uIG9mIGBJUF9WU19ERVNUX0ZfYCB0byBjb25maXJtIHdoYXQgd2FzIGFscmVhZHkgdGhlcmUuIFRoaXMgaXMgYWxsIGFib3V0IGVuc3VyaW5nIEkgdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiB0aGVzZSBmbGFnIGNoYW5nZXMgb24gZXhpc3RpbmcgYmVoYXZpb3IgYW5kIHdoYXQgbWlnaHQgaGF2ZSBiZWVuIGFkZGVkLiBJIG5lZWQgdG8gYmUgcHJlY2lzZSwgb3IgSSdsbCBpbnRyb2R1Y2UgYSBzdWJ0bGUgYnVnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzcyOCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjEyOjIxLjE5MDk0NjQ0NFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ1NzgwMTMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklQX1ZTX0RFU1RfRl9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxMjoyMS4yMzU1MzE4MTVaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjY4MzQwOTMzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBJUF9WU19ERVNUX0ZfYCBGbGFnIFVzYWdlKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBgSVBfVlNfREVTVF9GX2AgZmxhZyBraWNraW5nIGFyb3VuZCwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCB3aGVyZSBpdCdzIGFjdHVhbGx5IHVzZWQgd2l0aGluIHRoZSBrZXJuZWwncyBJUFZTIGltcGxlbWVudGF0aW9uLiBNeSBmaXJzdCBtb3ZlIGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgc291cmNlIGNvZGUuIEknbSBnb2luZyB0byBzdGFydCB3aXRoIHRoZSBtb3N0IGxpa2VseSBwbGFjZSwgd2hpY2ggaXMgdGhlIGBpbmNsdWRlL25ldC9pcF92cy5oYCBoZWFkZXIgZmlsZS4gVGhhdCdzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciBkZWZpbmluZyBhbmQsIGhvcGVmdWxseSwgZG9jdW1lbnRpbmcgd2hhdCB0aGUgZmxhZyBldmVuICptZWFucyouXG5cbkhvd2V2ZXIsIEknbSBub3QgZ29pbmcgdG8gc3RvcCB0aGVyZS4gSSBrbm93IGhvdyBlYXNpbHkgdGhpbmdzIGNhbiBiZSBidXJpZWQgb3IgZGVmaW5lZCBpbiBtdWx0aXBsZSBwbGFjZXMuIFNvLCBhZnRlciBhIHF1aWNrIHBlZWsgaW4gYGlwX3ZzLmhgLCBJJ2xsIHVzZSBncmVwIG9yIGEgc2ltaWxhciB0b29sIHRvIHNjb3VyIHRoZSBlbnRpcmUga2VybmVsIHRyZWUuIEknbSBsb29raW5nIGZvciAqYW55KiBpbnN0YW5jZSBvZiBgSVBfVlNfREVTVF9GX2AsIHRvIGdldCB0aGUgY29tcGxldGUgcGljdHVyZS4gSSB3YW50IHRvIHNlZSBob3cgaXQncyBiZWluZyBzZXQsIGNoZWNrZWQsIGFuZCBtb2RpZmllZC4gQ29udGV4dCBpcyBrZXkgaGVyZTsgdGhlIGhlYWRlciBmaWxlIGxpa2VseSBvbmx5IHByb3ZpZGVzIHRoZSBzdGF0aWMgZGVmaW5pdGlvbiBhbmQgbWF5YmUgc29tZSBiYXNpYyBkb2N1bWVudGF0aW9uLiBUaGUgcmVhbCBtZWF0IG9mIHRoZSBzdG9yeSBsaWVzIGluIHRoZSBwcmFjdGljYWwgaW1wbGVtZW50YXRpb24uIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIGhhcyB0byBzYXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTU4LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6MTI6MjMuOTE4OTQzMjEzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQ3NTY2NjI4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJJUF9WU19ERVNUX0ZfXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxMjoyNS40NjY1MTg4NVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjkyOTMwNjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFwiSVBfVlNfREVTVF9GX09WRVJMT0FEXCIgRmxhZyoqXG5cbk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYElQX1ZTX0RFU1RfRl9PVkVSTE9BRGAgd2FzIGluZGVlZCB0aGUgb25seSBmbGFnIGluIHF1ZXN0aW9uIGhlcmUuIExldCdzIHJ1biB0aHJvdWdoIHRoZSBjaGVja2xpc3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLlxuXG5GaXJzdCwgdGhlIHBvc3NpYmlsaXR5IG9mIGtlcm5lbCBzdHJ1Y3R1cmVzIGJlaW5nIHNlbnQgZGlyZWN0bHkgdG8gdXNlcnNwYWNlIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMuIEJ1dCwgdGhlIGNvZGUgZXhwbGljaXRseSAqZG9lc24ndCogZG8gdGhhdC4gVGhlIGBzdHJ1Y3QgaXBfdnNfZGVzdGAgaXNuJ3QgZGlyZWN0bHkgZXhwb3NlZDsgZ2V0dGVycyBjb3B5IHNlbGVjdGVkLCBpbml0aWFsaXplZCBmaWVsZHMgaW50byB6ZXJvZWQgYnVmZmVycy4gVGhleSB1c2UgYG1lbXNldChcdTAwMjZlbnRyeSwgMCwgLi4uKWAgYW5kIGluZGl2aWR1YWwgTmV0bGluayBhdHRyaWJ1dGVzLCBzbyB0aGF0J3MgY292ZXJlZC5cblxuTmV4dCwgY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgbWlnaHQgcmVseSBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gSG1tLCBsb29raW5nIGF0IGl0LCBhbGwgZmllbGRzIG9mIGBkZXN0YCBhcmUgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iaigpYCwgd2hpY2gsIGFzIEkgcmVjYWxsLCB6ZXJvZXMgdGhlIGFsbG9jYXRlZCBtZW1vcnkuIFRoZXkncmUgYWxzbyBpbml0aWFsaXplZCB3aXRoaW4gYGlwX3ZzX25ld19kZXN0YCBvciBgX19pcF92c191cGRhdGVfZGVzdGAuIFRoYXQgcmVtb3ZlcyB0aGlzIGNvbmNlcm4gdG9vLlxuXG5UaGVuIHRoZXJlJ3MgdGhlIGNoYW5jZSBvZiBhbGxvY2F0aW9ucyBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIHdoZXJlIGxhdGVyIGNvZGUgcGF0aHMgbWlnaHQgYWNjZXNzIHVuaW5pdGlhbGl6ZWQgZGF0YS4gSG93ZXZlciwgdGhlcmUgYXJlbid0IGFueSB1bmluaXRpYWxpemVkIGZpZWxkcy4gVGhhdCdzIGEgZ29vZCB0aGluZy5cblxuRmluYWxseSwgYm91bmRzIGNoZWNrcyBvciBsb2dpYyB0aGF0IG1pZ2h0IGFsbG93IHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuIFRoaXMgZG9lc24ndCBzZWVtIGFwcGxpY2FibGUgaGVyZS5cblxuQWxyaWdodCwgYWZ0ZXIgcmV2aWV3aW5nIGFsbCB0aGUgY3JpdGVyaWEsIGl0J3MgY2xlYXIgdGhhdCB0aGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlICphbnkqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBEZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpc24ndCByZXF1aXJlZC4gV2UgY2FuIGNvbmZpZGVudGx5IG1vdmUgZm9yd2FyZC4gSSdsbCBwcmVwYXJlIHRoZSBjYWxsIHRvIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MzExLCJPdXRwdXRUb2tlbnMiOjIyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxMjoyOS4xNTk0NTI1NjdaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlb3JnYW5pemVzIGZpZWxkcyBpbiBgc3RydWN0IGlwX3ZzX2Rlc3RgIGZvciBiZXR0ZXIgY2FjaGVsaW5lIHV0aWxpemF0aW9uIGFuZCByZWZhY3RvcnMgdGhlIGRlc3RpbmF0aW9uIG92ZXJsb2FkIHN0YXR1cyB0cmFja2luZyB0byB1c2UgYGxfdGhyZXNob2xkX3ZhbGAgLyBgdV90aHJlc2hvbGRfdmFsYCBpbnN0ZWFkIG9mIGBkZXN0LVxcdTAwM2VmbGFnc2Agd2l0aCBgSVBfVlNfREVTVF9GX09WRVJMT0FEYC5cXG5cXG5BbGwgYHN0cnVjdCBpcF92c19kZXN0YCBpbnN0YW5jZXMgYXJlIHplcm8tYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqKClgIGFuZCB0aGVpciB0aHJlc2hvbGQgZmllbGRzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB1cG9uIGNyZWF0aW9uLiBUaGUgc3RydWN0dXJlIGl0c2VsZiBpcyBub3QgY29waWVkIHRvIHVzZXJzcGFjZSBhcyBhIHJhdyBibG9iOyB1c2Vyc3BhY2UgcXVlcmllcyBzZXJpYWxpemUgaW5kaXZpZHVhbCBmaWVsZHMgb3IgdXNlIHplcm9lZCBpbnRlcm1lZGlhdGUgc3RydWN0dXJlcyAoYG1lbXNldGAgaW4gYF9faXBfdnNfZ2V0X2Rlc3RfZW50cmllc2AgYW5kIGluZGl2aWR1YWwgTmV0bGluayBhdHRyaWJ1dGVzIGluIGBpcF92c19nZW5sX2ZpbGxfZGVzdGApLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hlZCB1cG9uLlxcblxcbkJlY2F1c2UgdGhlIGNoYW5nZXMgaW50cm9kdWNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlb3JnYW5pemVzIGZpZWxkcyBpbiBgc3RydWN0IGlwX3ZzX2Rlc3RgIGZvciBiZXR0ZXIgY2FjaGVsaW5lIHV0aWxpemF0aW9uIGFuZCByZWZhY3RvcnMgdGhlIGRlc3RpbmF0aW9uIG92ZXJsb2FkIHN0YXR1cyB0cmFja2luZyB0byB1c2UgYGxfdGhyZXNob2xkX3ZhbGAgLyBgdV90aHJlc2hvbGRfdmFsYCBpbnN0ZWFkIG9mIGBkZXN0LVxcdTAwM2VmbGFnc2Agd2l0aCBgSVBfVlNfREVTVF9GX09WRVJMT0FEYC5cXG5cXG5BbGwgYHN0cnVjdCBpcF92c19kZXN0YCBpbnN0YW5jZXMgYXJlIHplcm8tYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqKClgIGFuZCB0aGVpciB0aHJlc2hvbGQgZmllbGRzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB1cG9uIGNyZWF0aW9uLiBUaGUgc3RydWN0dXJlIGl0c2VsZiBpcyBub3QgY29waWVkIHRvIHVzZXJzcGFjZSBhcyBhIHJhdyBibG9iOyB1c2Vyc3BhY2UgcXVlcmllcyBzZXJpYWxpemUgaW5kaXZpZHVhbCBmaWVsZHMgb3IgdXNlIHplcm9lZCBpbnRlcm1lZGlhdGUgc3RydWN0dXJlcyAoYG1lbXNldGAgaW4gYF9faXBfdnNfZ2V0X2Rlc3RfZW50cmllc2AgYW5kIGluZGl2aWR1YWwgTmV0bGluayBhdHRyaWJ1dGVzIGluIGBpcF92c19nZW5sX2ZpbGxfZGVzdGApLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hlZCB1cG9uLlxcblxcbkJlY2F1c2UgdGhlIGNoYW5nZXMgaW50cm9kdWNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowf5zd8[1] Phase: Succeeded StartedAt: 2026-09-07 22:12:53 +0000 UTC FinishedAt: 2026-09-07 22:12:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5zd8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-07 22:12:53 +0000 UTC FinishedAt: 2026-09-07 22:12:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5zd8[2] Phase: Succeeded StartedAt: 2026-09-07 22:12:53 +0000 UTC FinishedAt: 2026-09-08 01:59:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5zd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_dest_update_overload","ip_vs_bind_dest","ip_vs_unbind_dest","__ip_vs_update_dest","ip_vs_edit_dest","ip_vs_add_dest","ip_vs_rr_schedule","ip_vs_wrr_schedule","ip_vs_wlc_schedule","ip_vs_lc_schedule","ip_vs_fo_schedule","ip_vs_ovf_schedule","ip_vs_twos_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"0410e528-7572-4d57-92bb-02a0d226795d","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-07 22:12:53 +0000 UTC FinishedAt: 2026-09-08 01:59:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_dest_update_overload","ip_vs_bind_dest","ip_vs_unbind_dest","__ip_vs_update_dest","ip_vs_edit_dest","ip_vs_add_dest","ip_vs_rr_schedule","ip_vs_wrr_schedule","ip_vs_wlc_schedule","ip_vs_lc_schedule","ip_vs_fo_schedule","ip_vs_ovf_schedule","ip_vs_twos_schedule"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"0410e528-7572-4d57-92bb-02a0d226795d","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowf5zd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_dest_update_overload","ip_vs_bind_dest","ip_vs_unbind_dest","__ip_vs_update_dest","ip_vs_edit_dest","ip_vs_add_dest","ip_vs_rr_schedule","ip_vs_wrr_schedule","ip_vs_wlc_schedule","ip_vs_lc_schedule","ip_vs_fo_schedule","ip_vs_ovf_schedule","ip_vs_twos_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"0410e528-7572-4d57-92bb-02a0d226795d","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-07 22:12:53 +0000 UTC FinishedAt: 2026-09-07 22:13:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5zd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_dest_update_overload","ip_vs_bind_dest","ip_vs_unbind_dest","__ip_vs_update_dest","ip_vs_edit_dest","ip_vs_add_dest","ip_vs_rr_schedule","ip_vs_wrr_schedule","ip_vs_wlc_schedule","ip_vs_lc_schedule","ip_vs_fo_schedule","ip_vs_ovf_schedule","ip_vs_twos_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"0410e528-7572-4d57-92bb-02a0d226795d","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-07 22:12:53 +0000 UTC FinishedAt: 2026-09-07 22:13:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflowf5zd8/series-workflowf5zd8-convert-artifact-1820444617/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf5zd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_dest_update_overload","ip_vs_bind_dest","ip_vs_unbind_dest","__ip_vs_update_dest","ip_vs_edit_dest","ip_vs_add_dest","ip_vs_rr_schedule","ip_vs_wrr_schedule","ip_vs_wlc_schedule","ip_vs_lc_schedule","ip_vs_fo_schedule","ip_vs_ovf_schedule","ip_vs_twos_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"0410e528-7572-4d57-92bb-02a0d226795d","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-07 22:13:04 +0000 UTC FinishedAt: 2026-09-07 22:33:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5zd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_dest_update_overload","ip_vs_bind_dest","ip_vs_unbind_dest","__ip_vs_update_dest","ip_vs_edit_dest","ip_vs_add_dest","ip_vs_rr_schedule","ip_vs_wrr_schedule","ip_vs_wlc_schedule","ip_vs_lc_schedule","ip_vs_fo_schedule","ip_vs_ovf_schedule","ip_vs_twos_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"0410e528-7572-4d57-92bb-02a0d226795d","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-07 22:13:04 +0000 UTC FinishedAt: 2026-09-07 22:33:04 +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:*8d5b4262-db15-4c8c-8455-e77702d3a589,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-workflowf5zd8/series-workflowf5zd8-convert-artifact-1820444617/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": "dfb55878-2b63-4430-af6a-20fa73b4fc05", "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-workflowf5zd8/series-workflowf5zd8-build-action-3414378151/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf5zd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_dest_update_overload","ip_vs_bind_dest","ip_vs_unbind_dest","__ip_vs_update_dest","ip_vs_edit_dest","ip_vs_add_dest","ip_vs_rr_schedule","ip_vs_wrr_schedule","ip_vs_wlc_schedule","ip_vs_lc_schedule","ip_vs_fo_schedule","ip_vs_ovf_schedule","ip_vs_twos_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"0410e528-7572-4d57-92bb-02a0d226795d","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-07 22:13:04 +0000 UTC FinishedAt: 2026-09-07 22:32:38 +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:*8d5b4262-db15-4c8c-8455-e77702d3a589,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-workflowf5zd8/series-workflowf5zd8-convert-artifact-1820444617/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": "dfb55878-2b63-4430-af6a-20fa73b4fc05", "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-workflowf5zd8/series-workflowf5zd8-build-action-3414378151/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf5zd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_dest_update_overload","ip_vs_bind_dest","ip_vs_unbind_dest","__ip_vs_update_dest","ip_vs_edit_dest","ip_vs_add_dest","ip_vs_rr_schedule","ip_vs_wrr_schedule","ip_vs_wlc_schedule","ip_vs_lc_schedule","ip_vs_fo_schedule","ip_vs_ovf_schedule","ip_vs_twos_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"0410e528-7572-4d57-92bb-02a0d226795d","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-07 22:33:04 +0000 UTC FinishedAt: 2026-09-07 22:33:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5zd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_dest_update_overload","ip_vs_bind_dest","ip_vs_unbind_dest","__ip_vs_update_dest","ip_vs_edit_dest","ip_vs_add_dest","ip_vs_rr_schedule","ip_vs_wrr_schedule","ip_vs_wlc_schedule","ip_vs_lc_schedule","ip_vs_fo_schedule","ip_vs_ovf_schedule","ip_vs_twos_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"0410e528-7572-4d57-92bb-02a0d226795d","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-07 22:33:04 +0000 UTC FinishedAt: 2026-09-07 22:33:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5zd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_dest_update_overload","ip_vs_bind_dest","ip_vs_unbind_dest","__ip_vs_update_dest","ip_vs_edit_dest","ip_vs_add_dest","ip_vs_rr_schedule","ip_vs_wrr_schedule","ip_vs_wlc_schedule","ip_vs_lc_schedule","ip_vs_fo_schedule","ip_vs_ovf_schedule","ip_vs_twos_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"0410e528-7572-4d57-92bb-02a0d226795d","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-07 22:33:04 +0000 UTC FinishedAt: 2026-09-07 22:33:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5zd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_dest_update_overload","ip_vs_bind_dest","ip_vs_unbind_dest","__ip_vs_update_dest","ip_vs_edit_dest","ip_vs_add_dest","ip_vs_rr_schedule","ip_vs_wrr_schedule","ip_vs_wlc_schedule","ip_vs_lc_schedule","ip_vs_fo_schedule","ip_vs_ovf_schedule","ip_vs_twos_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"0410e528-7572-4d57-92bb-02a0d226795d","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-07 22:33:04 +0000 UTC FinishedAt: 2026-09-07 22:33:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"0410e528-7572-4d57-92bb-02a0d226795d","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflowf5zd8/series-workflowf5zd8-convert-artifact-227282652/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf5zd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_dest_update_overload","ip_vs_bind_dest","ip_vs_unbind_dest","__ip_vs_update_dest","ip_vs_edit_dest","ip_vs_add_dest","ip_vs_rr_schedule","ip_vs_wrr_schedule","ip_vs_wlc_schedule","ip_vs_lc_schedule","ip_vs_fo_schedule","ip_vs_ovf_schedule","ip_vs_twos_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"0410e528-7572-4d57-92bb-02a0d226795d","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-07 22:33:33 +0000 UTC FinishedAt: 2026-09-07 22:35:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5zd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_dest_update_overload","ip_vs_bind_dest","ip_vs_unbind_dest","__ip_vs_update_dest","ip_vs_edit_dest","ip_vs_add_dest","ip_vs_rr_schedule","ip_vs_wrr_schedule","ip_vs_wlc_schedule","ip_vs_lc_schedule","ip_vs_fo_schedule","ip_vs_ovf_schedule","ip_vs_twos_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"0410e528-7572-4d57-92bb-02a0d226795d","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-07 22:33:33 +0000 UTC FinishedAt: 2026-09-07 22:35:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*dfb55878-2b63-4430-af6a-20fa73b4fc05,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-workflowf5zd8/series-workflowf5zd8-build-action-3414378151/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-workflowf5zd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_dest_update_overload","ip_vs_bind_dest","ip_vs_unbind_dest","__ip_vs_update_dest","ip_vs_edit_dest","ip_vs_add_dest","ip_vs_rr_schedule","ip_vs_wrr_schedule","ip_vs_wlc_schedule","ip_vs_lc_schedule","ip_vs_fo_schedule","ip_vs_ovf_schedule","ip_vs_twos_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"0410e528-7572-4d57-92bb-02a0d226795d","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-07 22:35:24 +0000 UTC FinishedAt: 2026-09-07 22:35:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5zd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_dest_update_overload","ip_vs_bind_dest","ip_vs_unbind_dest","__ip_vs_update_dest","ip_vs_edit_dest","ip_vs_add_dest","ip_vs_rr_schedule","ip_vs_wrr_schedule","ip_vs_wlc_schedule","ip_vs_lc_schedule","ip_vs_fo_schedule","ip_vs_ovf_schedule","ip_vs_twos_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"0410e528-7572-4d57-92bb-02a0d226795d","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-07 22:35:24 +0000 UTC FinishedAt: 2026-09-07 22:35:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5zd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_dest_update_overload","ip_vs_bind_dest","ip_vs_unbind_dest","__ip_vs_update_dest","ip_vs_edit_dest","ip_vs_add_dest","ip_vs_rr_schedule","ip_vs_wrr_schedule","ip_vs_wlc_schedule","ip_vs_lc_schedule","ip_vs_fo_schedule","ip_vs_ovf_schedule","ip_vs_twos_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"0410e528-7572-4d57-92bb-02a0d226795d","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-07 22:35:24 +0000 UTC FinishedAt: 2026-09-07 22:55:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5zd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_dest_update_overload","ip_vs_bind_dest","ip_vs_unbind_dest","__ip_vs_update_dest","ip_vs_edit_dest","ip_vs_add_dest","ip_vs_rr_schedule","ip_vs_wrr_schedule","ip_vs_wlc_schedule","ip_vs_lc_schedule","ip_vs_fo_schedule","ip_vs_ovf_schedule","ip_vs_twos_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"0410e528-7572-4d57-92bb-02a0d226795d","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-07 22:35:24 +0000 UTC FinishedAt: 2026-09-07 22:55:27 +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:*8d5b4262-db15-4c8c-8455-e77702d3a589,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-workflowf5zd8/series-workflowf5zd8-convert-artifact-227282652/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": "3d10bf61-b3f6-4cf4-8641-a5b78869c1be", "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-workflowf5zd8/series-workflowf5zd8-build-action-540201784/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf5zd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_dest_update_overload","ip_vs_bind_dest","ip_vs_unbind_dest","__ip_vs_update_dest","ip_vs_edit_dest","ip_vs_add_dest","ip_vs_rr_schedule","ip_vs_wrr_schedule","ip_vs_wlc_schedule","ip_vs_lc_schedule","ip_vs_fo_schedule","ip_vs_ovf_schedule","ip_vs_twos_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"0410e528-7572-4d57-92bb-02a0d226795d","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-07 22:35:24 +0000 UTC FinishedAt: 2026-09-07 22:55:02 +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:*8d5b4262-db15-4c8c-8455-e77702d3a589,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-workflowf5zd8/series-workflowf5zd8-convert-artifact-227282652/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": "3d10bf61-b3f6-4cf4-8641-a5b78869c1be", "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-workflowf5zd8/series-workflowf5zd8-build-action-540201784/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf5zd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_dest_update_overload","ip_vs_bind_dest","ip_vs_unbind_dest","__ip_vs_update_dest","ip_vs_edit_dest","ip_vs_add_dest","ip_vs_rr_schedule","ip_vs_wrr_schedule","ip_vs_wlc_schedule","ip_vs_lc_schedule","ip_vs_fo_schedule","ip_vs_ovf_schedule","ip_vs_twos_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"0410e528-7572-4d57-92bb-02a0d226795d","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-07 22:55:27 +0000 UTC FinishedAt: 2026-09-07 22:55:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5zd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_dest_update_overload","ip_vs_bind_dest","ip_vs_unbind_dest","__ip_vs_update_dest","ip_vs_edit_dest","ip_vs_add_dest","ip_vs_rr_schedule","ip_vs_wrr_schedule","ip_vs_wlc_schedule","ip_vs_lc_schedule","ip_vs_fo_schedule","ip_vs_ovf_schedule","ip_vs_twos_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"0410e528-7572-4d57-92bb-02a0d226795d","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-07 22:55:27 +0000 UTC FinishedAt: 2026-09-07 22:55:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5zd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_dest_update_overload","ip_vs_bind_dest","ip_vs_unbind_dest","__ip_vs_update_dest","ip_vs_edit_dest","ip_vs_add_dest","ip_vs_rr_schedule","ip_vs_wrr_schedule","ip_vs_wlc_schedule","ip_vs_lc_schedule","ip_vs_fo_schedule","ip_vs_ovf_schedule","ip_vs_twos_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"0410e528-7572-4d57-92bb-02a0d226795d","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-07 22:55:27 +0000 UTC FinishedAt: 2026-09-07 22:57:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5zd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_dest_update_overload","ip_vs_bind_dest","ip_vs_unbind_dest","__ip_vs_update_dest","ip_vs_edit_dest","ip_vs_add_dest","ip_vs_rr_schedule","ip_vs_wrr_schedule","ip_vs_wlc_schedule","ip_vs_lc_schedule","ip_vs_fo_schedule","ip_vs_ovf_schedule","ip_vs_twos_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"0410e528-7572-4d57-92bb-02a0d226795d","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-07 22:55:27 +0000 UTC FinishedAt: 2026-09-07 22:56:59 +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:*3d10bf61-b3f6-4cf4-8641-a5b78869c1be,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-workflowf5zd8/series-workflowf5zd8-build-action-540201784/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-workflowf5zd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_dest_update_overload","ip_vs_bind_dest","ip_vs_unbind_dest","__ip_vs_update_dest","ip_vs_edit_dest","ip_vs_add_dest","ip_vs_rr_schedule","ip_vs_wrr_schedule","ip_vs_wlc_schedule","ip_vs_lc_schedule","ip_vs_fo_schedule","ip_vs_ovf_schedule","ip_vs_twos_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"0410e528-7572-4d57-92bb-02a0d226795d","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-07 22:57:09 +0000 UTC FinishedAt: 2026-09-08 01:59:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5zd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_dest_update_overload","ip_vs_bind_dest","ip_vs_unbind_dest","__ip_vs_update_dest","ip_vs_edit_dest","ip_vs_add_dest","ip_vs_rr_schedule","ip_vs_wrr_schedule","ip_vs_wlc_schedule","ip_vs_lc_schedule","ip_vs_fo_schedule","ip_vs_ovf_schedule","ip_vs_twos_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"0410e528-7572-4d57-92bb-02a0d226795d","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-07 22:57:09 +0000 UTC FinishedAt: 2026-09-08 01:59:36 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_dest_update_overload","ip_vs_bind_dest","ip_vs_unbind_dest","__ip_vs_update_dest","ip_vs_edit_dest","ip_vs_add_dest","ip_vs_rr_schedule","ip_vs_wrr_schedule","ip_vs_wlc_schedule","ip_vs_lc_schedule","ip_vs_fo_schedule","ip_vs_ovf_schedule","ip_vs_twos_schedule"],"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:*dfb55878-2b63-4430-af6a-20fa73b4fc05,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3d10bf61-b3f6-4cf4-8641-a5b78869c1be,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-workflowf5zd8/series-workflowf5zd8-build-action-3414378151/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-workflowf5zd8/series-workflowf5zd8-build-action-540201784/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowf5zd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_dest_update_overload","ip_vs_bind_dest","ip_vs_unbind_dest","__ip_vs_update_dest","ip_vs_edit_dest","ip_vs_add_dest","ip_vs_rr_schedule","ip_vs_wrr_schedule","ip_vs_wlc_schedule","ip_vs_lc_schedule","ip_vs_fo_schedule","ip_vs_ovf_schedule","ip_vs_twos_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"0410e528-7572-4d57-92bb-02a0d226795d","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-07 22:57:09 +0000 UTC FinishedAt: 2026-09-07 22:57:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5zd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_dest_update_overload","ip_vs_bind_dest","ip_vs_unbind_dest","__ip_vs_update_dest","ip_vs_edit_dest","ip_vs_add_dest","ip_vs_rr_schedule","ip_vs_wrr_schedule","ip_vs_wlc_schedule","ip_vs_lc_schedule","ip_vs_fo_schedule","ip_vs_ovf_schedule","ip_vs_twos_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"0410e528-7572-4d57-92bb-02a0d226795d","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-07 22:57:09 +0000 UTC FinishedAt: 2026-09-07 22:57:15 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_dest_update_overload","ip_vs_bind_dest","ip_vs_unbind_dest","__ip_vs_update_dest","ip_vs_edit_dest","ip_vs_add_dest","ip_vs_rr_schedule","ip_vs_wrr_schedule","ip_vs_wlc_schedule","ip_vs_lc_schedule","ip_vs_fo_schedule","ip_vs_ovf_schedule","ip_vs_twos_schedule"],"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-workflowf5zd8/series-workflowf5zd8-convert-artifact-1381797541/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf5zd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_dest_update_overload","ip_vs_bind_dest","ip_vs_unbind_dest","__ip_vs_update_dest","ip_vs_edit_dest","ip_vs_add_dest","ip_vs_rr_schedule","ip_vs_wrr_schedule","ip_vs_wlc_schedule","ip_vs_lc_schedule","ip_vs_fo_schedule","ip_vs_ovf_schedule","ip_vs_twos_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"0410e528-7572-4d57-92bb-02a0d226795d","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-07 22:57:09 +0000 UTC FinishedAt: 2026-09-07 22:57:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5zd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_dest_update_overload","ip_vs_bind_dest","ip_vs_unbind_dest","__ip_vs_update_dest","ip_vs_edit_dest","ip_vs_add_dest","ip_vs_rr_schedule","ip_vs_wrr_schedule","ip_vs_wlc_schedule","ip_vs_lc_schedule","ip_vs_fo_schedule","ip_vs_ovf_schedule","ip_vs_twos_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"0410e528-7572-4d57-92bb-02a0d226795d","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-07 22:57:09 +0000 UTC FinishedAt: 2026-09-07 22:57:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5zd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_dest_update_overload","ip_vs_bind_dest","ip_vs_unbind_dest","__ip_vs_update_dest","ip_vs_edit_dest","ip_vs_add_dest","ip_vs_rr_schedule","ip_vs_wrr_schedule","ip_vs_wlc_schedule","ip_vs_lc_schedule","ip_vs_fo_schedule","ip_vs_ovf_schedule","ip_vs_twos_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"0410e528-7572-4d57-92bb-02a0d226795d","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-07 22:57:09 +0000 UTC FinishedAt: 2026-09-07 22:57:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5zd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_dest_update_overload","ip_vs_bind_dest","ip_vs_unbind_dest","__ip_vs_update_dest","ip_vs_edit_dest","ip_vs_add_dest","ip_vs_rr_schedule","ip_vs_wrr_schedule","ip_vs_wlc_schedule","ip_vs_lc_schedule","ip_vs_fo_schedule","ip_vs_ovf_schedule","ip_vs_twos_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"0410e528-7572-4d57-92bb-02a0d226795d","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-07 22:57:19 +0000 UTC FinishedAt: 2026-09-08 01:59:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5zd8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_dest_update_overload","ip_vs_bind_dest","ip_vs_unbind_dest","__ip_vs_update_dest","ip_vs_edit_dest","ip_vs_add_dest","ip_vs_rr_schedule","ip_vs_wrr_schedule","ip_vs_wlc_schedule","ip_vs_lc_schedule","ip_vs_fo_schedule","ip_vs_ovf_schedule","ip_vs_twos_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"0410e528-7572-4d57-92bb-02a0d226795d","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-07 22:57:19 +0000 UTC FinishedAt: 2026-09-08 01:59:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*dfb55878-2b63-4430-af6a-20fa73b4fc05,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3d10bf61-b3f6-4cf4-8641-a5b78869c1be,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-workflowf5zd8/series-workflowf5zd8-build-action-3414378151/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-workflowf5zd8/series-workflowf5zd8-build-action-540201784/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-workflowf5zd8/series-workflowf5zd8-convert-artifact-1381797541/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,}