Name: series-workflowrhfvj Phase: Succeeded StartedAt: 2026-06-20 02:54:46 +0000 UTC FinishedAt: 2026-06-20 06:57:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhfvj[0] Phase: Succeeded StartedAt: 2026-06-20 02:54:46 +0000 UTC FinishedAt: 2026-06-20 03:05:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhfvj[0].run-triage Phase: Succeeded StartedAt: 2026-06-20 02:54:46 +0000 UTC FinishedAt: 2026-06-20 03:05:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "a975094bf98ca97be9146f9d3b5681a6f9cf5ce3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_STREAM_PARSER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "a975094bf98ca97be9146f9d3b5681a6f9cf5ce3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_STREAM_PARSER" ], "series_id": "6573ff55-3f17-43a4-a437-fa954209aa7f" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "sock_map_prog_attach_check", "sock_map_prog_update", "sock_map_link_update_prog" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA2LzIwIDAzOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TVFJFQU1fUEFSU0VSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c29ja19tYXBfcHJvZ19hdHRhY2hfY2hlY2smIzM0OywKICAgICYjMzQ7c29ja19tYXBfcHJvZ191cGRhdGUmIzM0OywKICAgICYjMzQ7c29ja19tYXBfbGlua191cGRhdGVfcHJvZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY2hlY2sgdG8gcHJldmVudCBhdHRhY2hpbmcgQlBGIHN0cmVhbSBwYXJzZXIgcHJvZ3JhbXMgdGhhdCBtb2RpZnkgcGFja2V0IGRhdGEgdG8gc29ja21hcHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQlBGIHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMgYnBmX3Byb2dfYXR0YWNoIGFuZCBicGZfbGlua191cGRhdGUgc3lzY2FsbHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtb2RpZmllZCBhdHRhY2ggYW5kIHVwZGF0ZSBmdW5jdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDM6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxZGU3ZWQ3MWE1Yjc1MWEyZTJjNGVmOTY4ZDE1NDY2MWI2ZjliZTAwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdW4gMjAgMDM6MDQ6MDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29ja19tYXAuYyBiL25ldC9jb3JlL3NvY2tfbWFwLmNcbmluZGV4IDk5ZTM3ODk0OTJhMDllLi5jNjBiYTZkMjkyZjlhZSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NvY2tfbWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NvY2tfbWFwLmNcbkBAIC0xNTE1LDYgJiM0MzsxNTE1LDE3IEBAIHN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ19saW5rX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Byb2cgKioqcHByXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgc29ja19tYXBfcHJvZ19hdHRhY2hfY2hlY2soZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUsXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuJiM0Mzt7XG4mIzQzO1x0LyogQSBzdHJlYW0gcGFyc2VyIG11c3Qgbm90IG1vZGlmeSB0aGUgc2tiLCBvbmx5IG1lYXN1cmUgaXQuICovXG4mIzQzO1x0aWYgKHByb2cgXHUwMDI2XHUwMDI2IGF0dGFjaF90eXBlID09IEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgcHJvZy1cdTAwM2VhdXgtXHUwMDNlY2hhbmdlc19wa3RfZGF0YSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiAvKiBIYW5kbGUgdGhlIGZvbGxvd2luZyBmb3VyIGNhc2VzOlxuICAqIHByb2dfYXR0YWNoOiBwcm9nICE9IE5VTEwsIG9sZCA9PSBOVUxMLCBsaW5rID09IE5VTExcbiAgKiBwcm9nX2RldGFjaDogcHJvZyA9PSBOVUxMLCBvbGQgIT0gTlVMTCwgbGluayA9PSBOVUxMXG5AQCAtMTUzMyw2ICYjNDM7MTU0NCwxMCBAQCBzdGF0aWMgaW50IHNvY2tfbWFwX3Byb2dfdXBkYXRlKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4mIzQzO1x0cmV0ID0gc29ja19tYXBfcHJvZ19hdHRhY2hfY2hlY2sod2hpY2gsIHByb2cpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiBcdC8qIGZvciBwcm9nX2F0dGFjaC9wcm9nX2RldGFjaC9saW5rX2F0dGFjaCwgcmV0dXJuIGVycm9yIGlmIGEgYnBmX2xpbmtcbiBcdCAqIGV4aXN0cyBmb3IgdGhhdCBwcm9nLlxuIFx0ICovXG5AQCAtMTc3Niw2ICYjNDM7MTc5MSwxMSBAQCBzdGF0aWMgaW50IHNvY2tfbWFwX2xpbmtfdXBkYXRlX3Byb2coc3RydWN0IGJwZl9saW5rICpsaW5rLFxuIFx0XHRyZXQgPSAtRUlOVkFMO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gc29ja19tYXBfcHJvZ19hdHRhY2hfY2hlY2sobGluay1cdTAwM2VhdHRhY2hfdHlwZSwgcHJvZyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiBcdGlmICghc29ja21hcF9saW5rLVx1MDAzZW1hcCkge1xuIFx0XHRyZXQgPSAtRU5PTElOSztcbiBcdFx0Z290byBvdXQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuY1xuaW5kZXggNjIxYjNiNzE4ODhlZmUuLjFkNzIzMTcyOGVhZmQ5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jXG5AQCAtNDMxLDYgJiM0Mzs0MzEsMzUgQEAgc3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX3N0cnBfdmVyZGljdChpbnQgZmFtaWx5LCBpbnQgc290eXBlKVxuIFx0dGVzdF9zb2NrbWFwX3N0cnBfX2Rlc3Ryb3koc3RycCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXBfc3RycF9wYXJzZXJfcmVqZWN0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGVzdF9zb2NrbWFwX3N0cnAgKnN0cnAgPSBOVUxMO1xuJiM0MztcdGludCBwYXJzZXJfbW9kLCBwYXJzZXJfcm8sIGxpbms7XG4mIzQzO1x0aW50IGVyciwgbWFwO1xuJiM0MztcbiYjNDM7XHRzdHJwID0gdGVzdF9zb2NrbWFwX3N0cnBfX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc3RycCwgXCYjMzQ7dGVzdF9zb2NrbWFwX3N0cnBfX29wZW5fYW5kX2xvYWRcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRtYXAgPSBicGZfbWFwX19mZChzdHJwLVx1MDAzZW1hcHMuc29ja19tYXApO1xuJiM0MztcdHBhcnNlcl9tb2QgPSBicGZfcHJvZ3JhbV9fZmQoc3RycC1cdTAwM2Vwcm9ncy5wcm9nX3NrYl9wYXJzZXJfcmVzaXplKTtcbiYjNDM7XHRwYXJzZXJfcm8gPSBicGZfcHJvZ3JhbV9fZmQoc3RycC1cdTAwM2Vwcm9ncy5wcm9nX3NrYl9wYXJzZXIpO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBicGZfcHJvZ19hdHRhY2gocGFyc2VyX21vZCwgbWFwLCBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVIsIDApO1xuJiM0MztcdEFTU0VSVF9FUlIoZXJyLCBcJiMzNDticGZfcHJvZ19hdHRhY2ggcGFyc2VyX21vZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGxpbmsgPSBicGZfbGlua19jcmVhdGUocGFyc2VyX3JvLCBtYXAsIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiwgTlVMTCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UobGluaywgMCwgXCYjMzQ7YnBmX2xpbmtfY3JlYXRlIHBhcnNlcl9yb1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gYnBmX2xpbmtfdXBkYXRlKGxpbmssIHBhcnNlcl9tb2QsIE5VTEwpO1xuJiM0MztcdEFTU0VSVF9FUlIoZXJyLCBcJiMzNDticGZfbGlua191cGRhdGUgcGFyc2VyX21vZFwmIzM0Oyk7XG4mIzQzO291dDpcbiYjNDM7XHRpZiAobGluayBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShsaW5rKTtcbiYjNDM7XHR0ZXN0X3NvY2ttYXBfc3RycF9fZGVzdHJveShzdHJwKTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIHRlc3Rfc29ja21hcF9zdHJwKHZvaWQpXG4ge1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7c29ja21hcCBzdHJwIHRjcCBwYXNzXCYjMzQ7KSlcbkBAIC00NTEsNCAmIzQzOzQ4MCw2IEBAIHZvaWQgdGVzdF9zb2NrbWFwX3N0cnAodm9pZClcbiBcdFx0dGVzdF9zb2NrbWFwX3N0cnBfbXVsdGlwbGVfcGt0KEFGX0lORVQsIFNPQ0tfU1RSRUFNKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3NvY2ttYXAgc3RycCB0Y3AgZGlzcGF0Y2hcJiMzNDspKVxuIFx0XHR0ZXN0X3NvY2ttYXBfc3RycF9kaXNwYXRjaF9wa3QoQUZfSU5FVCwgU09DS19TVFJFQU0pO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3NvY2ttYXAgc3RycCBwYXJzZXIgcmVqZWN0IHBrdCBtb2RcJiMzNDspKVxuJiM0MztcdFx0dGVzdF9zb2NrbWFwX3N0cnBfcGFyc2VyX3JlamVjdCgpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja21hcF9wYXJzZV9wcm9nLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja21hcF9wYXJzZV9wcm9nLmNcbmluZGV4IGM5YWJmZTNhMTFhZmFhLi41NmU5YWViZjA1ZjI0YyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrbWFwX3BhcnNlX3Byb2cuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2ttYXBfcGFyc2VfcHJvZy5jXG5AQCAtNSwyOCAmIzQzOzUsNiBAQFxuIFNFQyhcJiMzNDtza19za2IxXCYjMzQ7KVxuIGludCBicGZfcHJvZzEoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuIHtcbi1cdHZvaWQgKmRhdGFfZW5kID0gKHZvaWQgKikobG9uZykgc2tiLVx1MDAzZWRhdGFfZW5kO1xuLVx0dm9pZCAqZGF0YSA9ICh2b2lkICopKGxvbmcpIHNrYi1cdTAwM2VkYXRhO1xuLVx0X191OCAqZCA9IGRhdGE7XG4tXHRpbnQgZXJyO1xuLVxuLVx0aWYgKGRhdGEgJiM0MzsgMTAgXHUwMDNlIGRhdGFfZW5kKSB7XG4tXHRcdGVyciA9IGJwZl9za2JfcHVsbF9kYXRhKHNrYiwgMTApO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdHJldHVybiBTS19EUk9QO1xuLVxuLVx0XHRkYXRhX2VuZCA9ICh2b2lkICopKGxvbmcpc2tiLVx1MDAzZWRhdGFfZW5kO1xuLVx0XHRkYXRhID0gKHZvaWQgKikobG9uZylza2ItXHUwMDNlZGF0YTtcbi1cdFx0aWYgKGRhdGEgJiM0MzsgMTAgXHUwMDNlIGRhdGFfZW5kKVxuLVx0XHRcdHJldHVybiBTS19EUk9QO1xuLVx0fVxuLVxuLVx0LyogVGhpcyB3cml0ZS9yZWFkIGlzIGEgYml0IHBvaW50bGVzcyBidXQgdGVzdHMgdGhlIHZlcmlmaWVyIGFuZFxuLVx0ICogc3RycGFyc2VyIGhhbmRsZXIgZm9yIHJlYWQvd3JpdGUgcGt0IGRhdGEgYW5kIGFjY2VzcyBpbnRvIHNrXG4tXHQgKiBmaWVsZHMuXG4tXHQgKi9cbi1cdGQgPSBkYXRhO1xuLVx0ZFs3XSA9IDE7XG4gXHRyZXR1cm4gc2tiLVx1MDAzZWxlbjtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX3N0cnAuY1xuaW5kZXggZGRlM2Q1YmVjNTE1NGEuLmZlODhmYTZkNDBiYzUwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfc3RycC5jXG5AQCAtNTAsNCAmIzQzOzUwLDExIEBAIGludCBwcm9nX3NrYl9wYXJzZXJfcGFydGlhbChzdHJ1Y3QgX19za19idWZmICpza2IpXG4gXHRyZXR1cm4gMTA7XG4gfVxuIFxuJiM0MztTRUMoXCYjMzQ7c2tfc2tiL3N0cmVhbV9wYXJzZXJcJiMzNDspXG4mIzQzO2ludCBwcm9nX3NrYl9wYXJzZXJfcmVzaXplKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdGJwZl9za2JfY2hhbmdlX3RhaWwoc2tiLCBza2ItXHUwMDNlbGVuLCAwKTtcbiYjNDM7XHRyZXR1cm4gc2tiLVx1MDAzZWxlbjtcbiYjNDM7fVxuJiM0MztcbiBjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAzOjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TVFJFQU1fUEFSU0VSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c29ja19tYXBfcHJvZ19hdHRhY2hfY2hlY2smIzM0OywKICAgICYjMzQ7c29ja19tYXBfcHJvZ191cGRhdGUmIzM0OywKICAgICYjMzQ7c29ja19tYXBfbGlua191cGRhdGVfcHJvZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY2hlY2sgdG8gcHJldmVudCBhdHRhY2hpbmcgQlBGIHN0cmVhbSBwYXJzZXIgcHJvZ3JhbXMgdGhhdCBtb2RpZnkgcGFja2V0IGRhdGEgdG8gc29ja21hcHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQlBGIHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMgYnBmX3Byb2dfYXR0YWNoIGFuZCBicGZfbGlua191cGRhdGUgc3lzY2FsbHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtb2RpZmllZCBhdHRhY2ggYW5kIHVwZGF0ZSBmdW5jdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDFkZTdlZDcxYTViNzUxYTJlMmM0ZWY5NjhkMTU0NjYxYjZmOWJlMDAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1biAyMCAwMzowNDowMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2tfbWFwLmMgYi9uZXQvY29yZS9zb2NrX21hcC5jCmluZGV4IDk5ZTM3ODk0OTJhMDllLi5jNjBiYTZkMjkyZjlhZSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc29ja19tYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9zb2NrX21hcC5jCkBAIC0xNTE1LDYgJiM0MzsxNTE1LDE3IEBAIHN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ19saW5rX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Byb2cgKioqcHByCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IHNvY2tfbWFwX3Byb2dfYXR0YWNoX2NoZWNrKGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpCiYjNDM7ewomIzQzOwkvKiBBIHN0cmVhbSBwYXJzZXIgbXVzdCBub3QgbW9kaWZ5IHRoZSBza2IsIG9ubHkgbWVhc3VyZSBpdC4gKi8KJiM0MzsJaWYgKHByb2cgJmFtcDsmYW1wOyBhdHRhY2hfdHlwZSA9PSBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVIgJmFtcDsmYW1wOwomIzQzOwkgICAgcHJvZy0mZ3Q7YXV4LSZndDtjaGFuZ2VzX3BrdF9kYXRhKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIC8qIEhhbmRsZSB0aGUgZm9sbG93aW5nIGZvdXIgY2FzZXM6CiAgKiBwcm9nX2F0dGFjaDogcHJvZyAhPSBOVUxMLCBvbGQgPT0gTlVMTCwgbGluayA9PSBOVUxMCiAgKiBwcm9nX2RldGFjaDogcHJvZyA9PSBOVUxMLCBvbGQgIT0gTlVMTCwgbGluayA9PSBOVUxMCkBAIC0xNTMzLDYgJiM0MzsxNTQ0LDEwIEBAIHN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ191cGRhdGUoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9wcm9nICpwcm9nLAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKJiM0MzsJcmV0ID0gc29ja19tYXBfcHJvZ19hdHRhY2hfY2hlY2sod2hpY2gsIHByb2cpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKIAkvKiBmb3IgcHJvZ19hdHRhY2gvcHJvZ19kZXRhY2gvbGlua19hdHRhY2gsIHJldHVybiBlcnJvciBpZiBhIGJwZl9saW5rCiAJICogZXhpc3RzIGZvciB0aGF0IHByb2cuCiAJICovCkBAIC0xNzc2LDYgJiM0MzsxNzkxLDExIEBAIHN0YXRpYyBpbnQgc29ja19tYXBfbGlua191cGRhdGVfcHJvZyhzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssCiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KJiM0MzsKJiM0MzsJcmV0ID0gc29ja19tYXBfcHJvZ19hdHRhY2hfY2hlY2sobGluay0mZ3Q7YXR0YWNoX3R5cGUsIHByb2cpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiAJaWYgKCFzb2NrbWFwX2xpbmstJmd0O21hcCkgewogCQlyZXQgPSAtRU5PTElOSzsKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jCmluZGV4IDYyMWIzYjcxODg4ZWZlLi4xZDcyMzE3MjhlYWZkOSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmMKQEAgLTQzMSw2ICYjNDM7NDMxLDM1IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF9zdHJwX3ZlcmRpY3QoaW50IGZhbWlseSwgaW50IHNvdHlwZSkKIAl0ZXN0X3NvY2ttYXBfc3RycF9fZGVzdHJveShzdHJwKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF9zdHJwX3BhcnNlcl9yZWplY3Qodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0ZXN0X3NvY2ttYXBfc3RycCAqc3RycCA9IE5VTEw7CiYjNDM7CWludCBwYXJzZXJfbW9kLCBwYXJzZXJfcm8sIGxpbms7CiYjNDM7CWludCBlcnIsIG1hcDsKJiM0MzsKJiM0MzsJc3RycCA9IHRlc3Rfc29ja21hcF9zdHJwX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihzdHJwLCAmIzM0O3Rlc3Rfc29ja21hcF9zdHJwX19vcGVuX2FuZF9sb2FkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwltYXAgPSBicGZfbWFwX19mZChzdHJwLSZndDttYXBzLnNvY2tfbWFwKTsKJiM0MzsJcGFyc2VyX21vZCA9IGJwZl9wcm9ncmFtX19mZChzdHJwLSZndDtwcm9ncy5wcm9nX3NrYl9wYXJzZXJfcmVzaXplKTsKJiM0MzsJcGFyc2VyX3JvID0gYnBmX3Byb2dyYW1fX2ZkKHN0cnAtJmd0O3Byb2dzLnByb2dfc2tiX3BhcnNlcik7CiYjNDM7CiYjNDM7CWVyciA9IGJwZl9wcm9nX2F0dGFjaChwYXJzZXJfbW9kLCBtYXAsIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiwgMCk7CiYjNDM7CUFTU0VSVF9FUlIoZXJyLCAmIzM0O2JwZl9wcm9nX2F0dGFjaCBwYXJzZXJfbW9kJiMzNDspOwomIzQzOwomIzQzOwlsaW5rID0gYnBmX2xpbmtfY3JlYXRlKHBhcnNlcl9ybywgbWFwLCBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVIsIE5VTEwpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShsaW5rLCAwLCAmIzM0O2JwZl9saW5rX2NyZWF0ZSBwYXJzZXJfcm8mIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJZXJyID0gYnBmX2xpbmtfdXBkYXRlKGxpbmssIHBhcnNlcl9tb2QsIE5VTEwpOwomIzQzOwlBU1NFUlRfRVJSKGVyciwgJiMzNDticGZfbGlua191cGRhdGUgcGFyc2VyX21vZCYjMzQ7KTsKJiM0MztvdXQ6CiYjNDM7CWlmIChsaW5rICZndDs9IDApCiYjNDM7CQljbG9zZShsaW5rKTsKJiM0MzsJdGVzdF9zb2NrbWFwX3N0cnBfX2Rlc3Ryb3koc3RycCk7CiYjNDM7fQomIzQzOwogdm9pZCB0ZXN0X3NvY2ttYXBfc3RycCh2b2lkKQogewogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7c29ja21hcCBzdHJwIHRjcCBwYXNzJiMzNDspKQpAQCAtNDUxLDQgJiM0Mzs0ODAsNiBAQCB2b2lkIHRlc3Rfc29ja21hcF9zdHJwKHZvaWQpCiAJCXRlc3Rfc29ja21hcF9zdHJwX211bHRpcGxlX3BrdChBRl9JTkVULCBTT0NLX1NUUkVBTSk7CiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtzb2NrbWFwIHN0cnAgdGNwIGRpc3BhdGNoJiMzNDspKQogCQl0ZXN0X3NvY2ttYXBfc3RycF9kaXNwYXRjaF9wa3QoQUZfSU5FVCwgU09DS19TVFJFQU0pOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3NvY2ttYXAgc3RycCBwYXJzZXIgcmVqZWN0IHBrdCBtb2QmIzM0OykpCiYjNDM7CQl0ZXN0X3NvY2ttYXBfc3RycF9wYXJzZXJfcmVqZWN0KCk7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja21hcF9wYXJzZV9wcm9nLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja21hcF9wYXJzZV9wcm9nLmMKaW5kZXggYzlhYmZlM2ExMWFmYWEuLjU2ZTlhZWJmMDVmMjRjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja21hcF9wYXJzZV9wcm9nLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2ttYXBfcGFyc2VfcHJvZy5jCkBAIC01LDI4ICYjNDM7NSw2IEBACiBTRUMoJiMzNDtza19za2IxJiMzNDspCiBpbnQgYnBmX3Byb2cxKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKIHsKLQl2b2lkICpkYXRhX2VuZCA9ICh2b2lkICopKGxvbmcpIHNrYi0mZ3Q7ZGF0YV9lbmQ7Ci0Jdm9pZCAqZGF0YSA9ICh2b2lkICopKGxvbmcpIHNrYi0mZ3Q7ZGF0YTsKLQlfX3U4ICpkID0gZGF0YTsKLQlpbnQgZXJyOwotCi0JaWYgKGRhdGEgJiM0MzsgMTAgJmd0OyBkYXRhX2VuZCkgewotCQllcnIgPSBicGZfc2tiX3B1bGxfZGF0YShza2IsIDEwKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBTS19EUk9QOwotCi0JCWRhdGFfZW5kID0gKHZvaWQgKikobG9uZylza2ItJmd0O2RhdGFfZW5kOwotCQlkYXRhID0gKHZvaWQgKikobG9uZylza2ItJmd0O2RhdGE7Ci0JCWlmIChkYXRhICYjNDM7IDEwICZndDsgZGF0YV9lbmQpCi0JCQlyZXR1cm4gU0tfRFJPUDsKLQl9Ci0KLQkvKiBUaGlzIHdyaXRlL3JlYWQgaXMgYSBiaXQgcG9pbnRsZXNzIGJ1dCB0ZXN0cyB0aGUgdmVyaWZpZXIgYW5kCi0JICogc3RycGFyc2VyIGhhbmRsZXIgZm9yIHJlYWQvd3JpdGUgcGt0IGRhdGEgYW5kIGFjY2VzcyBpbnRvIHNrCi0JICogZmllbGRzLgotCSAqLwotCWQgPSBkYXRhOwotCWRbN10gPSAxOwogCXJldHVybiBza2ItJmd0O2xlbjsKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX3N0cnAuYwppbmRleCBkZGUzZDViZWM1MTU0YS4uZmU4OGZhNmQ0MGJjNTAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfc3RycC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfc3RycC5jCkBAIC01MCw0ICYjNDM7NTAsMTEgQEAgaW50IHByb2dfc2tiX3BhcnNlcl9wYXJ0aWFsKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKIAlyZXR1cm4gMTA7CiB9CiAKJiM0MztTRUMoJiMzNDtza19za2Ivc3RyZWFtX3BhcnNlciYjMzQ7KQomIzQzO2ludCBwcm9nX3NrYl9wYXJzZXJfcmVzaXplKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CWJwZl9za2JfY2hhbmdlX3RhaWwoc2tiLCBza2ItJmd0O2xlbiwgMCk7CiYjNDM7CXJldHVybiBza2ItJmd0O2xlbjsKJiM0Mzt9CiYjNDM7CiBjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAzOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NDQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTb2NrbWFwIEJQRiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXTigJlzIG1ha2luZyBzb21lIGludGVyZXN0aW5nIGNoYW5nZXMgdG8gYG5ldC9jb3JlL3NvY2tfbWFwLmNgIGFuZCBzb21lIHJlbGF0ZWQgQlBGIHNlbGZ0ZXN0cy4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiBwb2ludCBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIHRoaXMgbmV3IGZ1bmN0aW9uLCBgc29ja19tYXBfcHJvZ19hdHRhY2hfY2hlY2tgLiBUaGUgcHVycG9zZSBvZiB0aGlzIGNoZWNrLCBmcm9tIHdoYXQgSSBjYW4gc2VlLCBpcyB0byBleGFtaW5lIEJQRiBwcm9ncmFtcyB0aGF0IGFyZSBiZWluZyBhdHRhY2hlZCB0byBhIHNvY2ttYXAgYXMgYSBzdHJlYW0gcGFyc2VyIHVzaW5nIGBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVJgLiBTcGVjaWZpY2FsbHksIGl0IGNoZWNrcyBpZiB0aGlzIEJQRiBwcm9ncmFtIGF0dGVtcHRzIHRvIG1vZGlmeSB0aGUgU0tCIGRhdGEgdXNpbmcgYHByb2ctJmd0O2F1eC0mZ3Q7Y2hhbmdlc19wa3RfZGF0YWAuIElmIGl0IGRvZXMsIHRoZSBuZXcgZnVuY3Rpb24gaXMgdGhyb3dpbmcgYSBgLUVJTlZBTGAgZXJyb3IuIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUga2VybmVs4oCZcyBCUEYgc3Vic3lzdGVtLgoKVGhlIHBhdGNoIHNlZW1zIHRvIGFsc28gYmUgdG91Y2hpbmcgYHNvY2tfbWFwX3Byb2dfdXBkYXRlYCBhbmQgYHNvY2tfbWFwX2xpbmtfdXBkYXRlX3Byb2dgLCBzbyBJIHNob3VsZCBrZWVwIGFuIGV5ZSBvbiB0aG9zZS4gVGhpcyBsb29rcyBsaWtlIGEgZGVsaWJlcmF0ZSBwcmV2ZW50YXRpdmUgbWVhc3VyZSwgc3BlY2lmaWNhbGx5IHByZXZlbnRpbmcgdGhlIGF0dGFjaG1lbnQgb2YgY2VydGFpbiBCUEYgcHJvZ3JhbXMgdG8gc29ja21hcHMuCgpOb3csIHRoZSBxdWVzdGlvbiBpcywgaG93IGVhc2lseSBjYW4gdGhpcyBiZSByZWFjaGVkPyBEZWZpbml0ZWx5IHJlYWNoYWJsZSwgdmlhIEJQRiBzeXNjYWxscyBsaWtlIGBicGZfcHJvZ19hdHRhY2hgIG9yIGBicGZfbGlua191cGRhdGVgLiBBbmQgc2luY2UgaXTigJlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGtlcm5lbCwgaXQgYWJzb2x1dGVseSBuZWVkcyBzb21lIGdvb2QgZnV6emluZy4KCk15IHByaW1hcnkgZm9jdXMgcG9pbnRzIGhlcmUgYXJlIGdvaW5nIHRvIGJlIHRob3NlIG1vZGlmaWVkIGZ1bmN0aW9uczogYHNvY2tfbWFwX3Byb2dfYXR0YWNoX2NoZWNrYCAodGhlIG5ldyBvbmUpLCBgc29ja19tYXBfcHJvZ191cGRhdGVgLCBhbmQgYHNvY2tfbWFwX2xpbmtfdXBkYXRlX3Byb2dgLiBJJiMzOTtsbCB3YW50IHRvIGdvIGRpZyBpbnRvIHRob3NlIGZ1bmN0aW9ucyBpbiBgbmV0L2NvcmUvc29ja19tYXAuY2AgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzIGluIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAzOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvY2tfbWFwX3Byb2dfdXBkYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29ja19tYXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrX21hcC5jPTMyPXN0YXRpYyBERUZJTkVfTVVURVgoc29ja21hcF9tdXRleCk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTMzLVxubmV0L2NvcmUvc29ja19tYXAuYzozNDpzdGF0aWMgaW50IHNvY2tfbWFwX3Byb2dfdXBkYXRlKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzUtXHRcdFx0XHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZCwgc3RydWN0IGJwZl9saW5rICpsaW5rLFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9Njg9aW50IHNvY2tfbWFwX2dldF9mcm9tX2ZkKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy04MC1cdG11dGV4X2xvY2soXHUwMDI2c29ja21hcF9tdXRleCk7XG5uZXQvY29yZS9zb2NrX21hcC5jOjgxOlx0cmV0ID0gc29ja19tYXBfcHJvZ191cGRhdGUobWFwLCBwcm9nLCBOVUxMLCBOVUxMLCBhdHRyLVx1MDAzZWF0dGFjaF90eXBlKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODItXHRtdXRleF91bmxvY2soXHUwMDI2c29ja21hcF9tdXRleCk7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz04Nj1pbnQgc29ja19tYXBfcHJvZ19kZXRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSlcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTEwOS1cdG11dGV4X2xvY2soXHUwMDI2c29ja21hcF9tdXRleCk7XG5uZXQvY29yZS9zb2NrX21hcC5jOjExMDpcdHJldCA9IHNvY2tfbWFwX3Byb2dfdXBkYXRlKG1hcCwgTlVMTCwgcHJvZywgTlVMTCwgYXR0ci1cdTAwM2VhdHRhY2hfdHlwZSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTExMS1cdG11dGV4X3VubG9jayhcdTAwMjZzb2NrbWFwX211dGV4KTtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTE1MTg9c3RhdGljIGludCBzb2NrX21hcF9wcm9nX2F0dGFjaF9jaGVjayhlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHRhY2hfdHlwZSxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE1MzQtICovXG5uZXQvY29yZS9zb2NrX21hcC5jOjE1MzU6c3RhdGljIGludCBzb2NrX21hcF9wcm9nX3VwZGF0ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG5uZXQvY29yZS9zb2NrX21hcC5jLTE1MzYtXHRcdFx0XHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZCwgc3RydWN0IGJwZl9saW5rICpsaW5rLFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTc0MD1zdGF0aWMgdm9pZCBzb2NrX21hcF9saW5rX3JlbGVhc2Uoc3RydWN0IGJwZl9saW5rICpsaW5rKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTc0Ny1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTc0ODpcdFdBUk5fT05fT05DRShzb2NrX21hcF9wcm9nX3VwZGF0ZShzb2NrbWFwX2xpbmstXHUwMDNlbWFwLCBOVUxMLCBsaW5rLVx1MDAzZXByb2csIGxpbmssXG5uZXQvY29yZS9zb2NrX21hcC5jLTE3NDktXHRcdFx0XHRcdCAgbGluay1cdTAwM2VhdHRhY2hfdHlwZSkpO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTg3Mz1pbnQgc29ja19tYXBfbGlua19jcmVhdGUoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE5MDktXHRtdXRleF9sb2NrKFx1MDAyNnNvY2ttYXBfbXV0ZXgpO1xubmV0L2NvcmUvc29ja19tYXAuYzoxOTEwOlx0cmV0ID0gc29ja19tYXBfcHJvZ191cGRhdGUobWFwLCBwcm9nLCBOVUxMLCBcdTAwMjZzb2NrbWFwX2xpbmstXHUwMDNlbGluaywgYXR0YWNoX3R5cGUpO1xubmV0L2NvcmUvc29ja19tYXAuYy0xOTExLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnNvY2ttYXBfbXV0ZXgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAzOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNDQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucywgcHV0dGluZyBteXNlbGYgaW4gdGhlIHJvbGUgb2YgdGhpbmtpbmcgdGhyb3VnaCB0aGlzOgoKKipSZWZpbmluZyB0aGUgRm9jdXM6IFNvY2sgTWFwcyBhbmQgUHJvZ3JhbSBVcGRhdGVzKioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBJJiMzOTttIHJldmlld2luZyB0aGUgcmVjZW50IGNoYW5nZXMsIGFuZCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHdoZXJlIHdlIGNhbiBiZXN0IGFwcGx5IG91ciBuZXcgYEZvY3VzU3ltYm9sc2AgYXBwcm9hY2guIExvb2tpbmcgYXQgdGhlc2Ugc29ja2V0IG1hcCB1cGRhdGVz4oCmIGhtbSwgYHNvY2tfbWFwX3Byb2dfdXBkYXRlYCBhbmQgYHNvY2tfbWFwX2xpbmtfdXBkYXRlX3Byb2dgIGltbWVkaWF0ZWx5IGp1bXAgb3V0IGFzIHN0cm9uZyBwb3NzaWJpbGl0aWVzLiBUaGV5IHNlZW0gbGlrZSBwcmltZSBjYW5kaWRhdGVzIGZvciBkZWVwZXIgYW5hbHlzaXMsIGdpdmVuIHRoZWlyIHJvbGUgaW4gY29ubmVjdGluZyBwcm9ncmFtcyB0byBzb2NrZXQgbWFwcy4KCk9rYXksIGxldCYjMzk7cyBzdGFydCB3aXRoIGBzb2NrX21hcF9saW5rX3VwZGF0ZV9wcm9nYC4gSSB3YW50IHRvIGRpZyBpbnRvIHRoYXQgb25lIGZpcnN0OyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdGhlcmUgYXQgYSBmaW5lciBsZXZlbC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAzOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvY2tfbWFwX2xpbmtfdXBkYXRlX3Byb2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrX21hcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmM9MTc2Mz1zdGF0aWMgdm9pZCBzb2NrX21hcF9saW5rX2RlYWxsb2Moc3RydWN0IGJwZl9saW5rICpsaW5rKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTc3MS0gKi9cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTc3MjpzdGF0aWMgaW50IHNvY2tfbWFwX2xpbmtfdXBkYXRlX3Byb2coc3RydWN0IGJwZl9saW5rICpsaW5rLFxubmV0L2NvcmUvc29ja19tYXAuYy0xNzczLVx0XHRcdFx0ICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz0xODY0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIHNvY2tfbWFwX2xpbmtfb3BzID0ge1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg2Ny1cdC5kZXRhY2ggPSBzb2NrX21hcF9saW5rX2RldGFjaCxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTg2ODpcdC51cGRhdGVfcHJvZyA9IHNvY2tfbWFwX2xpbmtfdXBkYXRlX3Byb2csXG5uZXQvY29yZS9zb2NrX21hcC5jLTE4NjktXHQuZmlsbF9saW5rX2luZm8gPSBzb2NrX21hcF9saW5rX2ZpbGxfaW5mbyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAwMzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjYzCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipIdW50aW5nIERvd24gVGhvc2UgS2NvbmZpZyBPcHRpb25zIGZvciBgc29ja19tYXAuY2AqKgoKQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byBwaW5wb2ludCB0aGUgS2NvbmZpZyBvcHRpb25zIHRoYXQgZ292ZXJuIHRoZSBiZWhhdmlvciwgb3IgcGVyaGFwcyBldmVuIHRoZSB2ZXJ5IGV4aXN0ZW5jZSwgb2YgYHNvY2tfbWFwLmNgLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBzeXN0ZW1hdGljIGFwcHJvYWNoLiBGaXJzdCwgSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBwZXJmb3JtIGEgYnJvYWQgc2VhcmNoIHVzaW5nIGBncmVwYCwgYGZpbmRgLCBvciBldmVuIGEgbW9yZSBzb3BoaXN0aWNhdGVkIHRvb2wgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlIHRyZWUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGRpcmVjdCByZWZlcmVuY2VzIHRvIHRoZSBmaWxlIG5hbWUgaXRzZWxmLCBsaWtlICYjMzQ7c29ja19tYXAuYyYjMzQ7LCBtYXliZSBldmVuICYjMzQ7Q09ORklHX1NPTUVUSElOR19TT0NLX01BUCYjMzQ7LiBJJiMzOTtsbCBiZSBtaW5kZnVsIG9mIGNhc2Ugc2Vuc2l0aXZpdHkgYW5kIHRyeSBhIGZldyB2YXJpYXRpb25zLCBqdXN0IHRvIGJlIHRob3JvdWdoLgoKTmV4dCwgSSYjMzk7bGwgY29uc2lkZXIgdGhhdCB0aGUgZmlsZSBtaWdodCBiZSBwYXJ0IG9mIGEgbGFyZ2VyIHN1YnN5c3RlbS4gUGVyaGFwcyBpdCYjMzk7cyB1bmRlciB0aGUgdW1icmVsbGEgb2YgbmV0d29ya2luZywgdGhlIEJQRiBpbmZyYXN0cnVjdHVyZSwgb3Igc29tZXRoaW5nIHJlbGF0ZWQgdG8gc29ja2V0IG9wZXJhdGlvbnMuIElmIG15IGluaXRpYWwgc2VhcmNoIGlzIHRvbyBicm9hZCwgSSYjMzk7bGwgbmFycm93IGl0IGRvd24gYmFzZWQgb24gbXkgcHJpb3Iga25vd2xlZGdlIGFuZCBjb250ZXh0LiBJJiMzOTtsbCBmb3JtdWxhdGUgYSBtb3JlIHRhcmdldGVkIHNlYXJjaC4gRm9yIGluc3RhbmNlLCBJIG1pZ2h0IGxvb2sgZm9yIEtjb25maWcgc3ltYm9scyB0aGF0IGRlYWwgd2l0aCBzb2NrZXQgbWFwcywgQlBGIHByb2dyYW0gc3VwcG9ydCwgb3Igc3BlY2lmaWMgbmV0d29ya2luZyBmZWF0dXJlcyB0aGF0IGNvdWxkIHVzZSB0aGlzIGNvbXBvbmVudC4KCkkmIzM5O2xsIGFsc28ga2VlcCBpbiBtaW5kIHRoYXQgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyBtaWdodCBub3QgZGlyZWN0bHkgbWVudGlvbiBgc29ja19tYXAuY2AsIGJ1dCByYXRoZXIgY29udHJvbCB0aGUgaW5jbHVzaW9uIG9mIGEgbGFyZ2VyIG1vZHVsZSBvciBmdW5jdGlvbmFsaXR5IHRoYXQgaW5kaXJlY3RseSBicmluZ3MgaXQgaW4uIFNvLCBJIG5lZWQgdG8gbG9vayBmb3IgaW5kaXJlY3QgZGVwZW5kZW5jaWVzLiBJIG1pZ2h0IGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGl0cyBwdXJwb3NlLiBUaGVuLCBieSBsb29raW5nIGF0IHRoZSBwdXJwb3NlIG9mIHRoZSBjb2RlLCBJIGNhbiBtYWtlIHNvbWUgaW5mZXJlbmNlcyB0byBzZWFyY2ggdGhlIGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgb3IgdGhlIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIGZvciBoaW50cyBhYm91dCByZWxldmFudCBLY29uZmlnIHN5bWJvbHMuCgpGaW5hbGx5LCBJJiMzOTtsbCBkb3VibGUtY2hlY2sgbXkgZmluZGluZ3MuIEkmIzM5O2xsIHJlYWQgYW55IGRvY3VtZW50YXRpb24gc3Vycm91bmRpbmcgdGhlIHBvc3NpYmxlIEtjb25maWcgc3ltYm9scyB0byB2ZXJpZnkgdGhlaXIgZXhhY3QgZnVuY3Rpb24gYW5kIGltcGFjdC4gSSYjMzk7bGwgdmVyaWZ5IHRoYXQgbXkgY29uY2x1c2lvbnMgYWxpZ24gd2l0aCB0aGUgYWN0dWFsIGJ1aWxkIHByb2Nlc3MgYW5kIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAwMzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2NrX21hcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL01ha2VmaWxlPTQ0PW9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICYjNDM7PSBza21zZy5vXG5uZXQvY29yZS9NYWtlZmlsZTo0NTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzb2NrX21hcC5vXG5uZXQvY29yZS9NYWtlZmlsZS00Ni1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfc2tfc3RvcmFnZS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIyOQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29uZmlndXJhdGlvbi4gVGhlIGtleSBmbGFnIEkgc2VlIGlzIGBDT05GSUdfQlBGX1NZU0NBTExgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGF0IGVsc2UgaXMgcG90ZW50aWFsbHkgcmVsZXZhbnQ/JiMzNDsgTGV0JiMzOTtzIHNlZS4uLiBpcyBgQ09ORklHX05FVF9TT0NLX01TR2AgYWxzbyBpbiBwbGF5IGhlcmU/IEkgbmVlZCB0byBjb25zaWRlciBhbGwgdGhlIHBpZWNlcy4KCkFoLCBJIHNlZS4uLiBgc29ja19tYXAub2AgZ2V0cyBjb21waWxlZCBpZiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlbmFibGVkLiBUaGF0IG1ha2VzIHNlbnNlLCBhIGtleSBidWlsZGluZyBibG9jay4gTm93LCBJIGhhdmUgdG8ga2VlcCB0aGlua2luZyB0aHJvdWdoIHRoaXMuIElzIGBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVJgIGRlcGVuZGVudCBvbiBhbnl0aGluZyBlbHNlIHdpdGhpbiB0aGlzIGNvbmZpZ3VyYXRpb24gZWNvc3lzdGVtPyBXaGF0IGFyZSBpdHMgb3RoZXIgZGVwZW5kZW5jaWVzIGFuZCBpbXBsaWNhdGlvbnM/IEkgbmVlZCB0byB0cmFjZSB0aGlzIGRlcGVuZGVuY3kgY2hhaW4gdG8gYmUgY2VydGFpbiBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDM6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYnBmL2xpYmJwZi9wcm9ncmFtX3R5cGVzLnJzdD0xOD1kZXNjcmliZWQgaW4gbW9yZSBkZXRhaWwgaW4gdGhlIGZvb3Rub3Rlcy5cbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9saWJicGYvcHJvZ3JhbV90eXBlcy5yc3QtMTc5LSYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0mIzQzO1xuRG9jdW1lbnRhdGlvbi9icGYvbGliYnBmL3Byb2dyYW1fdHlwZXMucnN0OjE4MDp8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYGBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVJgYCAgICAgICAgICAgfCBgYHNrX3NrYi9zdHJlYW1fcGFyc2VyYGAgICAgICAgICB8ICAgICAgICAgICB8XG5Eb2N1bWVudGF0aW9uL2JwZi9saWJicGYvcHJvZ3JhbV90eXBlcy5yc3QtMTgxLSYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0mIzQzO1xuLS1cbkRvY3VtZW50YXRpb24vYnBmL21hcF9zb2NrbWFwLnJzdD01Nz1UaGUgYXR0YWNoIHR5cGVzIGZvciB0aGUgbWFwIHByb2dyYW1zIGFyZTpcbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfc29ja21hcC5yc3QtNTktLSBgYG1zZ19wYXJzZXJgYCBwcm9ncmFtIC0gYGBCUEZfU0tfTVNHX1ZFUkRJQ1RgYC5cbkRvY3VtZW50YXRpb24vYnBmL21hcF9zb2NrbWFwLnJzdDo2MDotIGBgc3RyZWFtX3BhcnNlcmBgIHByb2dyYW0gLSBgYEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUmBgLlxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3NvY2ttYXAucnN0LTYxLS0gYGBzdHJlYW1fdmVyZGljdGBgIHByb2dyYW0gLSBgYEJQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1RgYC5cbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfc29ja21hcC5yc3Q9NDQ0PXZlcmRpY3QgcHJvZ3JhbSwgYXMgd2VsbCBhcyBhZGQgYSBzb2NrZXQgZW50cnkuXG4tLVxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3NvY2ttYXAucnN0LTQ1OC1cbkRvY3VtZW50YXRpb24vYnBmL21hcF9zb2NrbWFwLnJzdDo0NTk6XHRcdGVyciA9IGJwZl9wcm9nX2F0dGFjaChwYXJzZV9wcm9nX2ZkLCBtYXAsIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiwgMCk7XG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfc29ja21hcC5yc3QtNDYwLVx0XHRpZiAoZXJyKXtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTA5OT1lbnVtIGJwZl9hdHRhY2hfdHlwZSB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTExMDMtXHRCUEZfQ0dST1VQX1NPQ0tfT1BTLFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjExMDQ6XHRCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVIsXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTEwNS1cdEJQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1QsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NDQ1Mz1hdHRhY2hfdHlwZV90b19wcm9nX3R5cGUoZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDQ4Ny1cdFx0cmV0dXJuIEJQRl9QUk9HX1RZUEVfU0tfTVNHO1xua2VybmVsL2JwZi9zeXNjYWxsLmM6NDQ4ODpcdGNhc2UgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSOlxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDQ4OS1cdGNhc2UgQlBGX1NLX1NLQl9TVFJFQU1fVkVSRElDVDpcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz00NzczPXN0YXRpYyBpbnQgYnBmX3Byb2dfcXVlcnkoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDgxOC1cdFx0cmV0dXJuIG5ldG5zX2JwZl9wcm9nX3F1ZXJ5KGF0dHIsIHVhdHRyKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQ4MTk6XHRjYXNlIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUjpcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ4MjAtXHRjYXNlIEJQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1Q6XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz0xNDc1PXN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ19saW5rX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Byb2cgKioqcHByb2csXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNDkwLSNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTQ5MTpcdGNhc2UgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSOlxubmV0L2NvcmUvc29ja19tYXAuYy0xNDkyLVx0XHRjdXJfcHByb2cgPSBcdTAwMjZwcm9ncy1cdTAwM2VzdHJlYW1fcGFyc2VyO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTUxOD1zdGF0aWMgaW50IHNvY2tfbWFwX3Byb2dfYXR0YWNoX2NoZWNrKGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlLFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUyMS1cdC8qIEEgc3RyZWFtIHBhcnNlciBtdXN0IG5vdCBtb2RpZnkgdGhlIHNrYiwgb25seSBtZWFzdXJlIGl0LiAqL1xubmV0L2NvcmUvc29ja19tYXAuYzoxNTIyOlx0aWYgKHByb2cgXHUwMDI2XHUwMDI2IGF0dGFjaF90eXBlID09IEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiBcdTAwMjZcdTAwMjZcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUyMy1cdCAgICBwcm9nLVx1MDAzZWF1eC1cdTAwM2VjaGFuZ2VzX3BrdF9kYXRhKVxuLS1cbnRvb2xzL2JwZi9icGZ0b29sL3Byb2cuYz00Nz1zdGF0aWMgY29uc3QgYm9vbCBhdHRhY2hfdHlwZXNbXSA9IHtcbnRvb2xzL2JwZi9icGZ0b29sL3Byb2cuYzo0ODpcdFtCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVJdID0gdHJ1ZSxcbnRvb2xzL2JwZi9icGZ0b29sL3Byb2cuYy00OS1cdFtCUEZfU0tfU0tCX1NUUkVBTV9WRVJESUNUXSA9IHRydWUsXG4tLVxudG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jPTU5PXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYXR0YWNoX3R5cGVfc3RyaW5nc1tdID0ge1xudG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jOjYwOlx0W0JQRl9TS19TS0JfU1RSRUFNX1BBUlNFUl0gPSBcJiMzNDtzdHJlYW1fcGFyc2VyXCYjMzQ7LFxudG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jLTYxLVx0W0JQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1RdID0gXCYjMzQ7c3RyZWFtX3ZlcmRpY3RcJiMzNDssXG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTEwOTk9ZW51bSBicGZfYXR0YWNoX3R5cGUge1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMTAzLVx0QlBGX0NHUk9VUF9TT0NLX09QUyxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMTA0Olx0QlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSLFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTExMDUtXHRCUEZfU0tfU0tCX1NUUkVBTV9WRVJESUNULFxuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmM9Nzk9c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBhdHRhY2hfdHlwZV9uYW1lW10gPSB7XG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYy0xMDctXHRbQlBGX0NHUk9VUF9TRVRTT0NLT1BUXVx0XHQ9IFwmIzM0O2Nncm91cF9zZXRzb2Nrb3B0XCYjMzQ7LFxudG9vbHMvbGliL2JwZi9saWJicGYuYzoxMDg6XHRbQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSXVx0PSBcJiMzNDtza19za2Jfc3RyZWFtX3BhcnNlclwmIzM0OyxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMTA5LVx0W0JQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1RdXHQ9IFwmIzM0O3NrX3NrYl9zdHJlYW1fdmVyZGljdFwmIzM0Oyxcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTEwMDc2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3NlY19kZWYgc2VjdGlvbl9kZWZzW10gPSB7XG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYy0xMDE1Mi1cdFNFQ19ERUYoXCYjMzQ7c29ja29wc1wmIzM0OyxcdFx0U09DS19PUFMsIEJQRl9DR1JPVVBfU09DS19PUFMsIFNFQ19BVFRBQ0hBQkxFX09QVCksXG50b29scy9saWIvYnBmL2xpYmJwZi5jOjEwMTUzOlx0U0VDX0RFRihcJiMzNDtza19za2Ivc3RyZWFtX3BhcnNlclwmIzM0OyxcdFNLX1NLQiwgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSLCBTRUNfQVRUQUNIQUJMRV9PUFQpLFxudG9vbHMvbGliL2JwZi9saWJicGYuYy0xMDE1NC1cdFNFQ19ERUYoXCYjMzQ7c2tfc2tiL3N0cmVhbV92ZXJkaWN0XCYjMzQ7LFNLX1NLQiwgQlBGX1NLX1NLQl9TVFJFQU1fVkVSRElDVCwgU0VDX0FUVEFDSEFCTEVfT1BUKSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX3NvY2ttYXAuYz0yNDc9c3RhdGljIGludCBzZXR1cF9yeF9zb2NrbWFwKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9zb2NrbWFwLmMtMjU5LVx0XHRjdHguc2tlbC1cdTAwM2Vic3MtXHUwMDNlcGt0X3NpemUgPSBjdHguc3RycF9zaXplO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9zb2NrbWFwLmM6MjYwOlx0XHRlcnIgPSBicGZfcHJvZ19hdHRhY2gocGFyc2VyLCBtYXAsIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX3NvY2ttYXAuYy0yNjEtXHRcdGlmIChlcnIpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2VjdGlvbl9uYW1lcy5jPTIwPXN0YXRpYyBzdHJ1Y3Qgc2VjX25hbWVfdGVzdCB0ZXN0c1tdID0ge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlY3Rpb25fbmFtZXMuYy04MS1cdFx0XCYjMzQ7c2tfc2tiL3N0cmVhbV9wYXJzZXJcJiMzNDssXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZWN0aW9uX25hbWVzLmM6ODI6XHRcdHswLCBCUEZfUFJPR19UWVBFX1NLX1NLQiwgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSfSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlY3Rpb25fbmFtZXMuYzo4MzpcdFx0ezAsIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUn0sXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZWN0aW9uX25hbWVzLmMtODQtXHR9LFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuYz0xMTg3PXN0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF9jb3BpZWRfc2VxKGJvb2wgc3RycClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmMtMTIxMC1cdFx0cHJvZyA9IHNrZWwtXHUwMDNlcHJvZ3MucHJvZ19za2JfdmVyZGljdF9pbmdyZXNzX3N0cnA7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmM6MTIxMTpcdFx0ZXJyID0gYnBmX3Byb2dfYXR0YWNoKGJwZl9wcm9ncmFtX19mZChwcm9nKSwgbWFwLCBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVIsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jLTEyMTItXHRcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7YnBmX3Byb2dfYXR0YWNoIHBhcnNlclwmIzM0OykpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jPTEzNzY9dm9pZCB0ZXN0X3NvY2ttYXBfYmFzaWModm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmMtMTQwOC1cdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3NvY2ttYXAgc3RyZWFtX3BhcnNlciBwcm9ncyBxdWVyeVwmIzM0OykpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmM6MTQwOTpcdFx0dGVzdF9zb2NrbWFwX3Byb2dzX3F1ZXJ5KEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUik7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmMtMTQxMC1cdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3NvY2ttYXAgc3RyZWFtX3ZlcmRpY3QgcHJvZ3MgcXVlcnlcJiMzNDspKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfbGlzdGVuLmM9NzI0PXN0YXRpYyB2b2lkIHRlc3Rfc2tiX3JlZGlyX3RvX2Nvbm5lY3RlZChzdHJ1Y3QgdGVzdF9zb2NrbWFwX2xpc3RlbiAqc2tlbCxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2xpc3Rlbi5jLTczMy1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfbGlzdGVuLmM6NzM0Olx0ZXJyID0geGJwZl9wcm9nX2F0dGFjaChwYXJzZXIsIHNvY2tfbWFwLCBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVIsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9saXN0ZW4uYy03MzUtXHRpZiAoZXJyKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfbGlzdGVuLmMtNzQ1LWRldGFjaDpcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfbGlzdGVuLmM6NzQ2Olx0eGJwZl9wcm9nX2RldGFjaDIocGFyc2VyLCBzb2NrX21hcCwgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfbGlzdGVuLmMtNzQ3LX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2xpc3Rlbi5jPTg0ND1zdGF0aWMgdm9pZCB0ZXN0X3NrYl9yZWRpcl90b19saXN0ZW5pbmcoc3RydWN0IHRlc3Rfc29ja21hcF9saXN0ZW4gKnNrZWwsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9saXN0ZW4uYy04NTMtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2xpc3Rlbi5jOjg1NDpcdGVyciA9IHhicGZfcHJvZ19hdHRhY2gocGFyc2VyLCBzb2NrX21hcCwgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfbGlzdGVuLmMtODU1LVx0aWYgKGVycilcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2xpc3Rlbi5jLTg2NS1kZXRhY2g6XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2xpc3Rlbi5jOjg2NjpcdHhicGZfcHJvZ19kZXRhY2gyKHBhcnNlciwgc29ja19tYXAsIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUik7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2xpc3Rlbi5jLTg2Ny19XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9saXN0ZW4uYz05NDg9c3RhdGljIHZvaWQgdGVzdF9za2JfcmVkaXJfcGFydGlhbChzdHJ1Y3QgdGVzdF9zb2NrbWFwX2xpc3RlbiAqc2tlbCxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2xpc3Rlbi5jLTk1Ny1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfbGlzdGVuLmM6OTU4Olx0ZXJyID0geGJwZl9wcm9nX2F0dGFjaChwYXJzZXIsIHNvY2tfbWFwLCBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVIsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9saXN0ZW4uYy05NTktXHRpZiAoZXJyKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfbGlzdGVuLmMtOTY5LWRldGFjaDpcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfbGlzdGVuLmM6OTcwOlx0eGJwZl9wcm9nX2RldGFjaDIocGFyc2VyLCBzb2NrX21hcCwgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfbGlzdGVuLmMtOTcxLX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuYz00Nj1zdGF0aWMgc3RydWN0IHRlc3Rfc29ja21hcF9zdHJwICpzb2NrbWFwX3N0cnBfaW5pdChpbnQgKm91dF9tYXAsIGJvb2wgcGFzcyxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuYy02NS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jOjY2Olx0ZXJyID0gYnBmX3Byb2dfYXR0YWNoKHBhcnNlciwgKm91dF9tYXAsIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuYy02Ny1cdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7YnBmX3Byb2dfYXR0YWNoIHN0cmVhbSBwYXJzZXJcJiMzNDspKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jPTQzND1zdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXBfc3RycF9wYXJzZXJfcmVqZWN0KHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmMtNDQ3LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmM6NDQ4Olx0ZXJyID0gYnBmX3Byb2dfYXR0YWNoKHBhcnNlcl9tb2QsIG1hcCwgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jLTQ0OS1cdEFTU0VSVF9FUlIoZXJyLCBcJiMzNDticGZfcHJvZ19hdHRhY2ggcGFyc2VyX21vZFwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuYy00NTAtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuYzo0NTE6XHRsaW5rID0gYnBmX2xpbmtfY3JlYXRlKHBhcnNlcl9ybywgbWFwLCBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVIsIE5VTEwpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmMtNDUyLVx0aWYgKCFBU1NFUlRfR0UobGluaywgMCwgXCYjMzQ7YnBmX2xpbmtfY3JlYXRlIHBhcnNlcl9yb1wmIzM0OykpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jPTY2NT1zdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXAodW5zaWduZWQgaW50IHRhc2tzLCB2b2lkICpkYXRhKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYy03ODMtXHQvKiBUZXN0IGF0dGFjaGluZy9kZXRhY2hpbmcgYmFkIGZkcyAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jOjc4NDpcdGVyciA9IGJwZl9wcm9nX2F0dGFjaCgtMSwgZmQsIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmMtNzg1LVx0aWYgKCFlcnIpIHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmMtODA3LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jOjgwODpcdGVyciA9IGJwZl9wcm9nX2RldGFjaChmZCwgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYy04MDktXHRpZiAoIWVycikge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYy05MDItXHRlcnIgPSBicGZfcHJvZ19hdHRhY2gocGFyc2VfcHJvZywgbWFwX2ZkX2JyZWFrLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jOjkwMzpcdFx0XHQgICAgICBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVIsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jLTkwNC1cdGlmICghZXJyKSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jLTkwOS1cdGVyciA9IGJwZl9wcm9nX2F0dGFjaChwYXJzZV9wcm9nLCBtYXBfZmRfcngsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmM6OTEwOlx0XHQgICAgICBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVIsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jLTkxMS1cdGlmIChlcnIpIHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmMtMTA1MC1cdGVyciA9IGJwZl9wcm9nX2F0dGFjaChwYXJzZV9wcm9nLCBmZCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYzoxMDUxOlx0XHRcdCAgICAgIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmMtMTA1Mi1cdGlmIChlcnIpIHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmMtMTExNS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYzoxMTE2Olx0ZXJyID0gYnBmX3Byb2dfZGV0YWNoMihwYXJzZV9wcm9nLCBtYXBfZmRfcngsIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUik7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmMtMTExNy1cdGlmIChlcnIpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExNDcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIEJQRiBTdHJlYW0gUGFyc2VyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBzZWUgdGhpcyBgQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSYCBwb3BwaW5nIHVwIGluIGBuZXQvY29yZS9zb2NrX21hcC5jYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZzsgaXQgc3VnZ2VzdHMgc29tZSBpbnZvbHZlbWVudCB3aXRoIGVCUEYgYW5kIG5ldHdvcmsgc3RyZWFtcy4gTXkgZmlyc3QgbW92ZSBpcyB0byBmaWd1cmUgb3V0IHdoYXQgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBhY3R1YWxseSAqZG9lcyouIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgaW1wbGljYXRpb25zLiBHaXZlbiB0aGUgY29udGV4dCwgSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBuZXQvS2NvbmZpZ2Agb3IgYG5ldC9jb3JlL0tjb25maWdgIGZpbGVzIOKAkyBtb3N0IGxpa2VseSBvbmUgb2YgdGhvc2Ugd2lsbCBob2xkIHRoZSBhbnN3ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgY29uZmlnIHdpbGwgYWN0dWFsbHkgZG8gdG8gdGhlIGJ1aWxkIGFuZCB0aGUgcmVzdWx0aW5nIGtlcm5lbCYjMzk7cyBuZXR3b3JrIGZ1bmN0aW9uYWxpdHkuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDM6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlBGX1NUUkVBTV9QQVJTRVImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTM1ND1jb25maWcgQlFMXG4tLVxubmV0L0tjb25maWctMzYwLVxubmV0L0tjb25maWc6MzYxOmNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlxubmV0L0tjb25maWctMzYyLVx0Ym9vbCBcJiMzNDtlbmFibGUgQlBGIFNUUkVBTV9QQVJTRVJcJiMzNDtcbi0tXG5uZXQvY29yZS9za21zZy5jPTU0NT1zdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9za21zZy5jLTU3My1cbm5ldC9jb3JlL3NrbXNnLmM6NTc0OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilcbm5ldC9jb3JlL3NrbXNnLmMtNTc1LVx0cHNvY2stXHUwMDNlaW5ncmVzc19ieXRlcyAmIzQzOz0gbGVuO1xuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTA1Nz1zdGF0aWMgdm9pZCBza19wc29ja193cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMDczLVxubmV0L2NvcmUvc2ttc2cuYzoxMDc0OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilcbm5ldC9jb3JlL3NrbXNnLmMtMTA3NS1zdGF0aWMgdm9pZCBza19wc29ja19zdHJwX3JlYWQoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9za21zZy5jPTExOTM9c3RhdGljIHZvaWQgc2tfcHNvY2tfZG9uZV9zdHJwKHN0cnVjdCBza19wc29jayAqcHNvY2spXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMTk1LX1cbm5ldC9jb3JlL3NrbXNnLmM6MTE5NjojZW5kaWYgLyogQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSICovXG5uZXQvY29yZS9za21zZy5jLTExOTctXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz0xNDc1PXN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ19saW5rX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Byb2cgKioqcHByb2csXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNDg5LVx0XHRicmVhaztcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTQ5MDojaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIpXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0OTEtXHRjYXNlIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUjpcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmM9NjYyPXN0YXRpYyBpbnQgdGNwX2JwZl9hc3NlcnRfcHJvdG9fb3BzKHN0cnVjdCBwcm90byAqb3BzKVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy02NzEtXG5uZXQvaXB2NC90Y3BfYnBmLmM6NjcyOiNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilcbm5ldC9pcHY0L3RjcF9icGYuYy02NzMtaW50IHRjcF9icGZfc3RycF9yZWFkX3NvY2soc3RydWN0IHN0cnBhcnNlciAqc3RycCwgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTcwNS19XG5uZXQvaXB2NC90Y3BfYnBmLmM6NzA2OiNlbmRpZiAvKiBDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIgKi9cbm5ldC9pcHY0L3RjcF9icGYuYy03MDctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAzOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTIxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBCUEYgU3RyZWFtIFBhcnNlciBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGl0JiMzOTtzIHByZXR0eSBjbGVhciBJJiMzOTttIGdvaW5nIHRvIG5lZWQgdG8gZW5hYmxlIGBDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVJgIGZvciB0aGlzLCBhbmQgYWxzbyBgQ09ORklHX0JQRl9TWVNDQUxMYC4gTm8gc3VycHJpc2VzIHRoZXJlLiBCdXQgYmVmb3JlIEkgcHJvY2VlZCwgaXQmIzM5O3MgYWx3YXlzIGEgZ29vZCBwcmFjdGljZSB0byBkb3VibGUgY2hlY2sgZGVwZW5kZW5jaWVzLiBHb3R0YSBtYWtlIHN1cmUgYENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUmAgaXNuJiMzOTt0IHJlbHlpbmcgb24gc29tZSBvYnNjdXJlIG9yIHVuZXhwZWN0ZWQgb3RoZXIgb3B0aW9uIGJlaW5nIHNldC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgcHJlcmVxdWlzaXRlcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgYmVmb3JlIEkgbWFrZSB0aGVzZSBjaGFuZ2VzLiBCZXR0ZXIgdG8gYmUgdGhvcm91Z2ggdXBmcm9udCB0aGFuIHRvIGNoYXNlIGRvd24gYSB3ZWlyZCBidWlsZCBlcnJvciBsYXRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDM6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9MzU0PWNvbmZpZyBCUUxcbi0tXG5uZXQvS2NvbmZpZy0zNjAtXG5uZXQvS2NvbmZpZzozNjE6Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSXG5uZXQvS2NvbmZpZy0zNjItXHRib29sIFwmIzM0O2VuYWJsZSBCUEYgU1RSRUFNX1BBUlNFUlwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAwMzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQzNwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzZWN0aW9uIG9mIHRoZSBjb2RlIGJldHRlci4gTGV0IG1lIHNlZS4uLiBJJiMzOTttIHRoaW5raW5nIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIGxpa2VseSBpbiBgbmV0L0tjb25maWdgLCBhbmQsIGFoLCB5ZXMsIEkmIzM5O20gYWltaW5nIGZvciBhcm91bmQgbGluZSAzNjEuIFRoYXQgZmVlbHMgbGlrZSBhIGdvb2Qgc3BvdCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCByZXZlYWxzLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgYmFzZSBmb3IgbXkgZXhwbG9yYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAzOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM1NTpcdFx0Ym9vbFxuIDM1NjpcdFx0cHJvbXB0IFwmIzM0O0VuYWJsZSBCeXRlIFF1ZXVlIExpbWl0c1wmIzM0O1xuIDM1NzpcdFx0ZGVwZW5kcyBvbiBTWVNGU1xuIDM1ODpcdFx0c2VsZWN0IERRTFxuIDM1OTpcdFx0ZGVmYXVsdCB5XG4gMzYwOlx0XG4gMzYxOlx0Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSXG4gMzYyOlx0XHRib29sIFwmIzM0O2VuYWJsZSBCUEYgU1RSRUFNX1BBUlNFUlwmIzM0O1xuIDM2MzpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gMzY0Olx0XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXG4gMzY1Olx0XHRkZXBlbmRzIG9uIENHUk9VUF9CUEZcbiAzNjY6XHRcdHNlbGVjdCBTVFJFQU1fUEFSU0VSXG4gMzY3Olx0XHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG4gMzY4Olx0XHRoZWxwXG4gMzY5Olx0XHQgIEVuYWJsaW5nIHRoaXMgYWxsb3dzIGEgVENQIHN0cmVhbSBwYXJzZXIgdG8gYmUgdXNlZCB3aXRoXG4gMzcwOlx0XHQgIEJQRl9NQVBfVFlQRV9TT0NLTUFQLlxuIDM3MTpcdFxuIDM3MjpcdGNvbmZpZyBORVRfRkxPV19MSU1JVFxuIDM3MzpcdFx0Ym9vbCBcJiMzNDtOZXQgZmxvdyBsaW1pdFwmIzM0O1xuIDM3NDpcdFx0ZGVwZW5kcyBvbiBSUFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4NjcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0MzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIFN0cmVhbSBQYXJzZXIgUGF0Y2gqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgQlBGX1NUUkVBTV9QQVJTRVJgIHJlbGllcyBvbiBhIGZldyBvdGhlciBjb3JlIGZ1bmN0aW9uYWxpdGllczogYElORVRgLCBgQlBGX1NZU0NBTExgLCBhbmQgYENHUk9VUF9CUEZgLiBTaW5jZSBgQlBGX1NZU0NBTExgIGFuZCBgQ0dST1VQX0JQRmAgYXJlIGFscmVhZHkgaGFuZGxlZCBpbiBnZW5lcmljIGNvbmZpZ3VyYXRpb25zLCB0aGUga2V5IHRoaW5nIGhlcmUgaXMgdG8gbWFrZSBzdXJlIGBCUEZfU1RSRUFNX1BBUlNFUmAgaXRzZWxmIGdldHMgZXhwbGljaXRseSBpbmNsdWRlZCBpbiBgRW5hYmxlQ29uZmlnc2AuIEl0JiMzOTtzIHdvcnRoIGxpc3RpbmcgaXQgZXhwbGljaXRseS4KCk5vdywgZm9jdXNpbmcgb24gdGhlIGNvZGUgY2hhbmdlcywgaXQgYXBwZWFycyB0aGUgcGF0Y2ggaW50cm9kdWNlcyBgc29ja19tYXBfcHJvZ19hdHRhY2hfY2hlY2tgIGFuZCBjYWxscyBpdCBmcm9tIGBzb2NrX21hcF9wcm9nX3VwZGF0ZWAgYW5kIGBzb2NrX21hcF9saW5rX3VwZGF0ZV9wcm9nYC4gU28sIHRoZXNlIHRocmVlIGZ1bmN0aW9ucyBhcmUgZ29pbmcgdG8gYmUgdGhlIGNlbnRyYWwgcG9pbnRzIG9mIGludGVyZXN0IGZvciBhbmFseXNpcywgcGFydGljdWxhcmx5IGBzb2NrX21hcF9wcm9nX2F0dGFjaF9jaGVja2AsIGBzb2NrX21hcF9wcm9nX3VwZGF0ZWAsIGFuZCBgc29ja19tYXBfbGlua191cGRhdGVfcHJvZ2AuIEkgcXVpY2tseSBjb25maXJtZWQgdGhhdCBgc29ja19tYXBfcHJvZ19hdHRhY2hfY2hlY2tgIGlzLCBpbiBmYWN0LCBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgdXNlZnVsIHRvIGtub3cuCgpCZXlvbmQgdGhvc2UgY29yZSBjaGFuZ2VzLCBpdCYjMzk7cyBhbHNvIHdvcnRoIG5vdGluZyB0aGUgbW9kaWZpY2F0aW9ucyB0byB0aGUgc2VsZnRlc3RzLiBUaGUgcGF0Y2ggdXBkYXRlcyBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmNgLCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2ttYXBfcGFyc2VfcHJvZy5jYCwgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX3N0cnAuY2AuIFRoZXNlIHRlc3RzIGFyZSBpbXBvcnRhbnQgYmVjYXVzZSB0aGV5IGRlbW9uc3RyYXRlIHRoZSAqaW50ZW5kZWQgdXNhZ2UqIG9mIHRoaXMgZmVhdHVyZS4gU3BlY2lmaWNhbGx5LCBpdCBzaG93cyBob3cgYSBCUEYgcHJvZ3JhbSBvZiB0eXBlIGBCUEZfUFJPR19UWVBFX1NLX1NLQmAgd2l0aCBhbiBhdHRhY2ggdHlwZSBvZiBgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSYCBpcyBhdHRhY2hlZCB0byBhIHNvY2ttYXAuIFRoZSBrZXkgcGFydCBoZXJlIGlzIHRoYXQgdGhlIHBhdGNoIGFsc28gaW50cm9kdWNlcyBhIGNoZWNrIHRvIHByZXZlbnQgYXR0YWNoaW5nIGEgcHJvZ3JhbSB0aGF0IG1vZGlmaWVzIHRoZSBwYWNrZXQgZGF0YS4gVGhpcyBzZWVtcyB0byBiZSB0aGUgY3J1Y2lhbCBiaXQ6IGl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGVuZm9yY2luZyBhIGNvbnN0cmFpbnQgYmFzZWQgb24gYHByb2ctJmd0O2F1eC0mZ3Q7Y2hhbmdlc19wa3RfZGF0YWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgYGNoYW5nZXNfcGt0X2RhdGFgIGNoZWNrLiBUaGF0IHNob3VsZCBiZSBteSBuZXh0IGZvY3VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAwMzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGFuZ2VzX3BrdF9kYXRhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jZmcuYz00Mz1lbnVtIHtcbi0tXG5rZXJuZWwvYnBmL2NmZy5jLTUwLVxua2VybmVsL2JwZi9jZmcuYzo1MTpzdGF0aWMgdm9pZCBtYXJrX3N1YnByb2dfY2hhbmdlc19wa3RfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgb2ZmKVxua2VybmVsL2JwZi9jZmcuYy01Mi17XG4tLVxua2VybmVsL2JwZi9jZmcuYy01NS1cdHN1YnByb2cgPSBicGZfZmluZF9jb250YWluaW5nX3N1YnByb2coZW52LCBvZmYpO1xua2VybmVsL2JwZi9jZmcuYzo1NjpcdHN1YnByb2ctXHUwMDNlY2hhbmdlc19wa3RfZGF0YSA9IHRydWU7XG5rZXJuZWwvYnBmL2NmZy5jLTU3LX1cbi0tXG5rZXJuZWwvYnBmL2NmZy5jPTgxPXN0YXRpYyB2b2lkIG1lcmdlX2NhbGxlZV9lZmZlY3RzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCB0LCBpbnQgdylcbi0tXG5rZXJuZWwvYnBmL2NmZy5jLTg2LVx0Y2FsbGVlID0gYnBmX2ZpbmRfY29udGFpbmluZ19zdWJwcm9nKGVudiwgdyk7XG5rZXJuZWwvYnBmL2NmZy5jOjg3Olx0Y2FsbGVyLVx1MDAzZWNoYW5nZXNfcGt0X2RhdGEgfD0gY2FsbGVlLVx1MDAzZWNoYW5nZXNfcGt0X2RhdGE7XG5rZXJuZWwvYnBmL2NmZy5jLTg4LVx0Y2FsbGVyLVx1MDAzZW1pZ2h0X3NsZWVwIHw9IGNhbGxlZS1cdTAwM2VtaWdodF9zbGVlcDtcbi0tXG5rZXJuZWwvYnBmL2NmZy5jPTQyNj1zdGF0aWMgaW50IHZpc2l0X2luc24oaW50IHQsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi9jZmcuYy00ODUtXHRcdFx0XHRtYXJrX3N1YnByb2dfbWlnaHRfc2xlZXAoZW52LCB0KTtcbmtlcm5lbC9icGYvY2ZnLmM6NDg2Olx0XHRcdGlmIChicGZfaGVscGVyX2NoYW5nZXNfcGt0X2RhdGEoaW5zbi1cdTAwM2VpbW0pKVxua2VybmVsL2JwZi9jZmcuYzo0ODc6XHRcdFx0XHRtYXJrX3N1YnByb2dfY2hhbmdlc19wa3RfZGF0YShlbnYsIHQpO1xua2VybmVsL2JwZi9jZmcuYy00ODgtXHRcdFx0aWYgKGluc24tXHUwMDNlaW1tID09IEJQRl9GVU5DX3RhaWxfY2FsbCkge1xuLS1cbmtlcm5lbC9icGYvY2ZnLmMtNTE5LVx0XHRcdGlmIChyZXQgPT0gMCBcdTAwMjZcdTAwMjYgYnBmX2lzX2tmdW5jX3BrdF9jaGFuZ2luZyhcdTAwMjZtZXRhKSlcbmtlcm5lbC9icGYvY2ZnLmM6NTIwOlx0XHRcdFx0bWFya19zdWJwcm9nX2NoYW5nZXNfcGt0X2RhdGEoZW52LCB0KTtcbmtlcm5lbC9icGYvY2ZnLmMtNTIxLVx0XHRcdGlmIChyZXQgPT0gMCBcdTAwMjZcdTAwMjYgYnBmX2lzX3Rocm93X2tmdW5jKGluc24pKVxuLS1cbmtlcm5lbC9icGYvY2ZnLmM9NTYyPWludCBicGZfY2hlY2tfY2ZnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi9jZmcuYy02MzktXHRyZXQgPSAwOyAvKiBjZmcgbG9va3MgZ29vZCAqL1xua2VybmVsL2JwZi9jZmcuYzo2NDA6XHRlbnYtXHUwMDNlcHJvZy1cdTAwM2VhdXgtXHUwMDNlY2hhbmdlc19wa3RfZGF0YSA9IGVudi1cdTAwM2VzdWJwcm9nX2luZm9bMF0uY2hhbmdlc19wa3RfZGF0YTtcbmtlcm5lbC9icGYvY2ZnLmMtNjQxLVx0ZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZW1pZ2h0X3NsZWVwID0gZW52LVx1MDAzZXN1YnByb2dfaW5mb1swXS5taWdodF9zbGVlcDtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0zMTc3PXZvaWQgX193ZWFrIGJwZl9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMzE4MC1cbmtlcm5lbC9icGYvY29yZS5jOjMxODE6Ym9vbCBfX3dlYWsgYnBmX2hlbHBlcl9jaGFuZ2VzX3BrdF9kYXRhKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZClcbmtlcm5lbC9icGYvY29yZS5jLTMxODIte1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmM9MTAyOD1zdGF0aWMgaW50IGppdF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTE1OS1cdFx0ZnVuY1tpXS1cdTAwM2VhdXgtXHUwMDNlZXhjZXB0aW9uX2NiID0gZW52LVx1MDAzZXN1YnByb2dfaW5mb1tpXS5pc19leGNlcHRpb25fY2I7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjExNjA6XHRcdGZ1bmNbaV0tXHUwMDNlYXV4LVx1MDAzZWNoYW5nZXNfcGt0X2RhdGEgPSBlbnYtXHUwMDNlc3VicHJvZ19pbmZvW2ldLmNoYW5nZXNfcGt0X2RhdGE7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTExNjEtXHRcdGZ1bmNbaV0tXHUwMDNlYXV4LVx1MDAzZW1pZ2h0X3NsZWVwID0gZW52LVx1MDAzZXN1YnByb2dfaW5mb1tpXS5taWdodF9zbGVlcDtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTMyNj1zdGF0aWMgaW50IGNoZWNrX2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTkzNjgtXHRcdFx0XHRzdWJwcm9nLCBzdWJfbmFtZSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTM2OTpcdFx0aWYgKGVudi1cdTAwM2VzdWJwcm9nX2luZm9bc3VicHJvZ10uY2hhbmdlc19wa3RfZGF0YSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05MzcwLVx0XHRcdGNsZWFyX2FsbF9wa3RfcG9pbnRlcnMoZW52KTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTAxNDk9c3RhdGljIGludCBjaGVja19oZWxwZXJfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMTg4LVx0LyogV2l0aCBMRF9BQlMvSU5EIHNvbWUgSklUcyBzYXZlL3Jlc3RvcmUgc2tiIGZyb20gcjEuICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTAxODk6XHRjaGFuZ2VzX2RhdGEgPSBicGZfaGVscGVyX2NoYW5nZXNfcGt0X2RhdGEoZnVuY19pZCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAxOTAtXHRpZiAoY2hhbmdlc19kYXRhIFx1MDAyNlx1MDAyNiBmbi1cdTAwM2VhcmcxX3R5cGUgIT0gQVJHX1BUUl9UT19DVFgpIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTg4NTg9aW50IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4ODk4LVx0XHRzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXggPSB0Z3RfcHJvZy1cdTAwM2VhdXg7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTg4OTk6XHRcdGJvb2wgdGd0X2NoYW5nZXNfcGt0X2RhdGE7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg5MDAtXHRcdGJvb2wgdGd0X21pZ2h0X3NsZWVwO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODkzNC1cdFx0XHR9XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTg5MzU6XHRcdFx0dGd0X2NoYW5nZXNfcGt0X2RhdGEgPSBhdXgtXHUwMDNlZnVuY1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE4OTM2Olx0XHRcdFx0XHQgICAgICAgPyBhdXgtXHUwMDNlZnVuY1tzdWJwcm9nXS1cdTAwM2VhdXgtXHUwMDNlY2hhbmdlc19wa3RfZGF0YVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4OTM3Olx0XHRcdFx0XHQgICAgICAgOiBhdXgtXHUwMDNlY2hhbmdlc19wa3RfZGF0YTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODkzODpcdFx0XHRpZiAocHJvZy1cdTAwM2VhdXgtXHUwMDNlY2hhbmdlc19wa3RfZGF0YSBcdTAwMjZcdTAwMjYgIXRndF9jaGFuZ2VzX3BrdF9kYXRhKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg5MzktXHRcdFx0XHRicGZfbG9nKGxvZyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzNzQKCQkJCQkJCW91dHB1dDogMTM1CgkJCQkJCQl0aG91Z2h0czogMjc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBTdHJlYW0gUGFyc2VyIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSByZWxhdGl2ZWx5IG1pbm9yLCBidXQgaW1wb3J0YW50LCBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIEJQRiBzdWJzeXN0ZW0uIEVzc2VudGlhbGx5LCBpdCBhZGRzIGEgY2hlY2s6IHRoZSBgY2hhbmdlc19wa3RfZGF0YWAgZmxhZyBpcyBzZXQgd2hlbiBhIEJQRiBwcm9ncmFtIHVzZXMgYSBoZWxwZXIgdGhhdCBtb2RpZmllcyBwYWNrZXQgZGF0YS4gVGhlIHBhdGNoIG5vdyBjaGVja3MgdGhpcyBmbGFnICpzcGVjaWZpY2FsbHkqIHdoZW4gd2UmIzM5O3JlIHRyeWluZyB0byBhdHRhY2ggYSBwcm9ncmFtIG9mIHRoZSBgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSYCB0eXBlLiBTZWVtcyBsaWtlIGEgZ29vZCBzYWZldHkgbWVhc3VyZS4KCkdpdmVuIHRoaXMsIEkmIzM5O3ZlIGdvdCBhIGNsZWFyIGZ1enppbmcgc3RyYXRlZ3kuIFRoZSBrZXkgZnVuY3Rpb25zIHRvIHRhcmdldCBhcmUgYHNvY2tfbWFwX3Byb2dfYXR0YWNoX2NoZWNrYCwgYHNvY2tfbWFwX3Byb2dfdXBkYXRlYCwgYW5kIGBzb2NrX21hcF9saW5rX3VwZGF0ZV9wcm9nYC4gVGhlc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMgdGhhdCB0aGUgcGF0Y2ggZGlyZWN0bHkgaW1wYWN0cywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYnBmX3Byb2dfYXR0YWNoYCBhbmQgYGJwZl9saW5rX3VwZGF0ZWAgc3lzY2FsbHMuIFdlIGFyZSBjaGVja2luZyB0aGUgZmxhZyB3aXRoaW4gdGhlIGNoZWNrIGFuZCB1cGRhdGUgZnVuY3Rpb25zLgoKVGhlIHJlbGV2YW50IGNvbmZpZyBJIG5lZWQgdG8gcGF5IGF0dGVudGlvbiB0byBpcyBgQlBGX1NUUkVBTV9QQVJTRVJgLiBJIGFscmVhZHkga25vdyBzeXprYWxsZXIgaGFzIGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBgQ09ORklHX0NHUk9VUF9CUEZgIGVuYWJsZWQuIEdvb2QuIEkgYWxzbyBzZWUgdGhhdCBgQ09ORklHX05FVF9TT0NLX01TR2AgaXMgYSBkZXBlbmRlbmN5IG9mIGBCUEZfU1RSRUFNX1BBUlNFUmAuIEFsbCB0aGUgcGllY2VzIGFyZSBoZXJlLiBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gbm90ZSB0aGF0IGluIG15IG91dHB1dC4KCkFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50IGluIHRoaXMgZXZhbHVhdGlvbi4gVGltZSB0byBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAwMzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NUUkVBTV9QQVJTRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzb2NrX21hcF9wcm9nX2F0dGFjaF9jaGVjayYjMzQ7LAogICAgJiMzNDtzb2NrX21hcF9wcm9nX3VwZGF0ZSYjMzQ7LAogICAgJiMzNDtzb2NrX21hcF9saW5rX3VwZGF0ZV9wcm9nJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBjaGVjayB0byBwcmV2ZW50IGF0dGFjaGluZyBCUEYgc3RyZWFtIHBhcnNlciBwcm9ncmFtcyB0aGF0IG1vZGlmeSBwYWNrZXQgZGF0YSB0byBzb2NrbWFwcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgc3Vic3lzdGVtIHRoYXQgYWZmZWN0cyBicGZfcHJvZ19hdHRhY2ggYW5kIGJwZl9saW5rX3VwZGF0ZSBzeXNjYWxscy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIGF0dGFjaCBhbmQgdXBkYXRlIGZ1bmN0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NUUkVBTV9QQVJTRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzb2NrX21hcF9wcm9nX2F0dGFjaF9jaGVjayYjMzQ7LAogICAgJiMzNDtzb2NrX21hcF9wcm9nX3VwZGF0ZSYjMzQ7LAogICAgJiMzNDtzb2NrX21hcF9saW5rX3VwZGF0ZV9wcm9nJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBjaGVjayB0byBwcmV2ZW50IGF0dGFjaGluZyBCUEYgc3RyZWFtIHBhcnNlciBwcm9ncmFtcyB0aGF0IG1vZGlmeSBwYWNrZXQgZGF0YSB0byBzb2NrbWFwcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgc3Vic3lzdGVtIHRoYXQgYWZmZWN0cyBicGZfcHJvZ19hdHRhY2ggYW5kIGJwZl9saW5rX3VwZGF0ZSBzeXNjYWxscy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIGF0dGFjaCBhbmQgdXBkYXRlIGZ1bmN0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAzOjA0OjA0LjQ5NjU3MTk0OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDg4MTI1OTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TVFJFQU1fUEFSU0VSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic29ja19tYXBfcHJvZ19hdHRhY2hfY2hlY2tcIixcbiAgICBcInNvY2tfbWFwX3Byb2dfdXBkYXRlXCIsXG4gICAgXCJzb2NrX21hcF9saW5rX3VwZGF0ZV9wcm9nXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNoZWNrIHRvIHByZXZlbnQgYXR0YWNoaW5nIEJQRiBzdHJlYW0gcGFyc2VyIHByb2dyYW1zIHRoYXQgbW9kaWZ5IHBhY2tldCBkYXRhIHRvIHNvY2ttYXBzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGJwZl9wcm9nX2F0dGFjaCBhbmQgYnBmX2xpbmtfdXBkYXRlIHN5c2NhbGxzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgYXR0YWNoIGFuZCB1cGRhdGUgZnVuY3Rpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMzowNDowNC40OTY1NzY4NThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3Nzk3MzcyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDFkZTdlZDcxYTViNzUxYTJlMmM0ZWY5NjhkMTU0NjYxYjZmOWJlMDBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdW4gMjAgMDM6MDQ6MDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29ja19tYXAuYyBiL25ldC9jb3JlL3NvY2tfbWFwLmNcXG5pbmRleCA5OWUzNzg5NDkyYTA5ZS4uYzYwYmE2ZDI5MmY5YWUgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvc29ja19tYXAuY1xcbisrKyBiL25ldC9jb3JlL3NvY2tfbWFwLmNcXG5AQCAtMTUxNSw2ICsxNTE1LDE3IEBAIHN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ19saW5rX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Byb2cgKioqcHByXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHNvY2tfbWFwX3Byb2dfYXR0YWNoX2NoZWNrKGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuK3tcXG4rXFx0LyogQSBzdHJlYW0gcGFyc2VyIG11c3Qgbm90IG1vZGlmeSB0aGUgc2tiLCBvbmx5IG1lYXN1cmUgaXQuICovXFxuK1xcdGlmIChwcm9nIFxcdTAwMjZcXHUwMDI2IGF0dGFjaF90eXBlID09IEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VjaGFuZ2VzX3BrdF9kYXRhKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiAvKiBIYW5kbGUgdGhlIGZvbGxvd2luZyBmb3VyIGNhc2VzOlxcbiAgKiBwcm9nX2F0dGFjaDogcHJvZyAhPSBOVUxMLCBvbGQgPT0gTlVMTCwgbGluayA9PSBOVUxMXFxuICAqIHByb2dfZGV0YWNoOiBwcm9nID09IE5VTEwsIG9sZCAhPSBOVUxMLCBsaW5rID09IE5VTExcXG5AQCAtMTUzMyw2ICsxNTQ0LDEwIEBAIHN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ191cGRhdGUoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4rXFx0cmV0ID0gc29ja19tYXBfcHJvZ19hdHRhY2hfY2hlY2sod2hpY2gsIHByb2cpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4gXFx0LyogZm9yIHByb2dfYXR0YWNoL3Byb2dfZGV0YWNoL2xpbmtfYXR0YWNoLCByZXR1cm4gZXJyb3IgaWYgYSBicGZfbGlua1xcbiBcXHQgKiBleGlzdHMgZm9yIHRoYXQgcHJvZy5cXG4gXFx0ICovXFxuQEAgLTE3NzYsNiArMTc5MSwxMSBAQCBzdGF0aWMgaW50IHNvY2tfbWFwX2xpbmtfdXBkYXRlX3Byb2coc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbiBcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbitcXG4rXFx0cmV0ID0gc29ja19tYXBfcHJvZ19hdHRhY2hfY2hlY2sobGluay1cXHUwMDNlYXR0YWNoX3R5cGUsIHByb2cpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuIFxcdGlmICghc29ja21hcF9saW5rLVxcdTAwM2VtYXApIHtcXG4gXFx0XFx0cmV0ID0gLUVOT0xJTks7XFxuIFxcdFxcdGdvdG8gb3V0O1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jXFxuaW5kZXggNjIxYjNiNzE4ODhlZmUuLjFkNzIzMTcyOGVhZmQ5IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmNcXG5AQCAtNDMxLDYgKzQzMSwzNSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXBfc3RycF92ZXJkaWN0KGludCBmYW1pbHksIGludCBzb3R5cGUpXFxuIFxcdHRlc3Rfc29ja21hcF9zdHJwX19kZXN0cm95KHN0cnApO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXBfc3RycF9wYXJzZXJfcmVqZWN0KHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IHRlc3Rfc29ja21hcF9zdHJwICpzdHJwID0gTlVMTDtcXG4rXFx0aW50IHBhcnNlcl9tb2QsIHBhcnNlcl9ybywgbGluaztcXG4rXFx0aW50IGVyciwgbWFwO1xcbitcXG4rXFx0c3RycCA9IHRlc3Rfc29ja21hcF9zdHJwX19vcGVuX2FuZF9sb2FkKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihzdHJwLCBcXFwidGVzdF9zb2NrbWFwX3N0cnBfX29wZW5fYW5kX2xvYWRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0bWFwID0gYnBmX21hcF9fZmQoc3RycC1cXHUwMDNlbWFwcy5zb2NrX21hcCk7XFxuK1xcdHBhcnNlcl9tb2QgPSBicGZfcHJvZ3JhbV9fZmQoc3RycC1cXHUwMDNlcHJvZ3MucHJvZ19za2JfcGFyc2VyX3Jlc2l6ZSk7XFxuK1xcdHBhcnNlcl9ybyA9IGJwZl9wcm9ncmFtX19mZChzdHJwLVxcdTAwM2Vwcm9ncy5wcm9nX3NrYl9wYXJzZXIpO1xcbitcXG4rXFx0ZXJyID0gYnBmX3Byb2dfYXR0YWNoKHBhcnNlcl9tb2QsIG1hcCwgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSLCAwKTtcXG4rXFx0QVNTRVJUX0VSUihlcnIsIFxcXCJicGZfcHJvZ19hdHRhY2ggcGFyc2VyX21vZFxcXCIpO1xcbitcXG4rXFx0bGluayA9IGJwZl9saW5rX2NyZWF0ZShwYXJzZXJfcm8sIG1hcCwgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSLCBOVUxMKTtcXG4rXFx0aWYgKCFBU1NFUlRfR0UobGluaywgMCwgXFxcImJwZl9saW5rX2NyZWF0ZSBwYXJzZXJfcm9cXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRlcnIgPSBicGZfbGlua191cGRhdGUobGluaywgcGFyc2VyX21vZCwgTlVMTCk7XFxuK1xcdEFTU0VSVF9FUlIoZXJyLCBcXFwiYnBmX2xpbmtfdXBkYXRlIHBhcnNlcl9tb2RcXFwiKTtcXG4rb3V0OlxcbitcXHRpZiAobGluayBcXHUwMDNlPSAwKVxcbitcXHRcXHRjbG9zZShsaW5rKTtcXG4rXFx0dGVzdF9zb2NrbWFwX3N0cnBfX2Rlc3Ryb3koc3RycCk7XFxuK31cXG4rXFxuIHZvaWQgdGVzdF9zb2NrbWFwX3N0cnAodm9pZClcXG4ge1xcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwic29ja21hcCBzdHJwIHRjcCBwYXNzXFxcIikpXFxuQEAgLTQ1MSw0ICs0ODAsNiBAQCB2b2lkIHRlc3Rfc29ja21hcF9zdHJwKHZvaWQpXFxuIFxcdFxcdHRlc3Rfc29ja21hcF9zdHJwX211bHRpcGxlX3BrdChBRl9JTkVULCBTT0NLX1NUUkVBTSk7XFxuIFxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJzb2NrbWFwIHN0cnAgdGNwIGRpc3BhdGNoXFxcIikpXFxuIFxcdFxcdHRlc3Rfc29ja21hcF9zdHJwX2Rpc3BhdGNoX3BrdChBRl9JTkVULCBTT0NLX1NUUkVBTSk7XFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJzb2NrbWFwIHN0cnAgcGFyc2VyIHJlamVjdCBwa3QgbW9kXFxcIikpXFxuK1xcdFxcdHRlc3Rfc29ja21hcF9zdHJwX3BhcnNlcl9yZWplY3QoKTtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja21hcF9wYXJzZV9wcm9nLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja21hcF9wYXJzZV9wcm9nLmNcXG5pbmRleCBjOWFiZmUzYTExYWZhYS4uNTZlOWFlYmYwNWYyNGMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2ttYXBfcGFyc2VfcHJvZy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2ttYXBfcGFyc2VfcHJvZy5jXFxuQEAgLTUsMjggKzUsNiBAQFxcbiBTRUMoXFxcInNrX3NrYjFcXFwiKVxcbiBpbnQgYnBmX3Byb2cxKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4ge1xcbi1cXHR2b2lkICpkYXRhX2VuZCA9ICh2b2lkICopKGxvbmcpIHNrYi1cXHUwMDNlZGF0YV9lbmQ7XFxuLVxcdHZvaWQgKmRhdGEgPSAodm9pZCAqKShsb25nKSBza2ItXFx1MDAzZWRhdGE7XFxuLVxcdF9fdTggKmQgPSBkYXRhO1xcbi1cXHRpbnQgZXJyO1xcbi1cXG4tXFx0aWYgKGRhdGEgKyAxMCBcXHUwMDNlIGRhdGFfZW5kKSB7XFxuLVxcdFxcdGVyciA9IGJwZl9za2JfcHVsbF9kYXRhKHNrYiwgMTApO1xcbi1cXHRcXHRpZiAoZXJyKVxcbi1cXHRcXHRcXHRyZXR1cm4gU0tfRFJPUDtcXG4tXFxuLVxcdFxcdGRhdGFfZW5kID0gKHZvaWQgKikobG9uZylza2ItXFx1MDAzZWRhdGFfZW5kO1xcbi1cXHRcXHRkYXRhID0gKHZvaWQgKikobG9uZylza2ItXFx1MDAzZWRhdGE7XFxuLVxcdFxcdGlmIChkYXRhICsgMTAgXFx1MDAzZSBkYXRhX2VuZClcXG4tXFx0XFx0XFx0cmV0dXJuIFNLX0RST1A7XFxuLVxcdH1cXG4tXFxuLVxcdC8qIFRoaXMgd3JpdGUvcmVhZCBpcyBhIGJpdCBwb2ludGxlc3MgYnV0IHRlc3RzIHRoZSB2ZXJpZmllciBhbmRcXG4tXFx0ICogc3RycGFyc2VyIGhhbmRsZXIgZm9yIHJlYWQvd3JpdGUgcGt0IGRhdGEgYW5kIGFjY2VzcyBpbnRvIHNrXFxuLVxcdCAqIGZpZWxkcy5cXG4tXFx0ICovXFxuLVxcdGQgPSBkYXRhO1xcbi1cXHRkWzddID0gMTtcXG4gXFx0cmV0dXJuIHNrYi1cXHUwMDNlbGVuO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX3N0cnAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfc3RycC5jXFxuaW5kZXggZGRlM2Q1YmVjNTE1NGEuLmZlODhmYTZkNDBiYzUwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfc3RycC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmNcXG5AQCAtNTAsNCArNTAsMTEgQEAgaW50IHByb2dfc2tiX3BhcnNlcl9wYXJ0aWFsKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4gXFx0cmV0dXJuIDEwO1xcbiB9XFxuIFxcbitTRUMoXFxcInNrX3NrYi9zdHJlYW1fcGFyc2VyXFxcIilcXG4raW50IHByb2dfc2tiX3BhcnNlcl9yZXNpemUoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdGJwZl9za2JfY2hhbmdlX3RhaWwoc2tiLCBza2ItXFx1MDAzZWxlbiwgMCk7XFxuK1xcdHJldHVybiBza2ItXFx1MDAzZWxlbjtcXG4rfVxcbitcXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAzOjA0OjA0Ljk3NTMwODM4N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM2MDkzODA3OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NUUkVBTV9QQVJTRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzb2NrX21hcF9wcm9nX2F0dGFjaF9jaGVja1wiLFxuICAgIFwic29ja19tYXBfcHJvZ191cGRhdGVcIixcbiAgICBcInNvY2tfbWFwX2xpbmtfdXBkYXRlX3Byb2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY2hlY2sgdG8gcHJldmVudCBhdHRhY2hpbmcgQlBGIHN0cmVhbSBwYXJzZXIgcHJvZ3JhbXMgdGhhdCBtb2RpZnkgcGFja2V0IGRhdGEgdG8gc29ja21hcHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQlBGIHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMgYnBmX3Byb2dfYXR0YWNoIGFuZCBicGZfbGlua191cGRhdGUgc3lzY2FsbHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtb2RpZmllZCBhdHRhY2ggYW5kIHVwZGF0ZSBmdW5jdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMWRlN2VkNzFhNWI3NTFhMmUyYzRlZjk2OGQxNTQ2NjFiNmY5YmUwMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVuIDIwIDAzOjA0OjAzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29ja19tYXAuYyBiL25ldC9jb3JlL3NvY2tfbWFwLmNcbmluZGV4IDk5ZTM3ODk0OTJhMDllLi5jNjBiYTZkMjkyZjlhZSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NvY2tfbWFwLmNcbisrKyBiL25ldC9jb3JlL3NvY2tfbWFwLmNcbkBAIC0xNTE1LDYgKzE1MTUsMTcgQEAgc3RhdGljIGludCBzb2NrX21hcF9wcm9nX2xpbmtfbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfcHJvZyAqKipwcHJcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IHNvY2tfbWFwX3Byb2dfYXR0YWNoX2NoZWNrKGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuK3tcbitcdC8qIEEgc3RyZWFtIHBhcnNlciBtdXN0IG5vdCBtb2RpZnkgdGhlIHNrYiwgb25seSBtZWFzdXJlIGl0LiAqL1xuK1x0aWYgKHByb2cgXHUwMDI2XHUwMDI2IGF0dGFjaF90eXBlID09IEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiBcdTAwMjZcdTAwMjZcbitcdCAgICBwcm9nLVx1MDAzZWF1eC1cdTAwM2VjaGFuZ2VzX3BrdF9kYXRhKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiAvKiBIYW5kbGUgdGhlIGZvbGxvd2luZyBmb3VyIGNhc2VzOlxuICAqIHByb2dfYXR0YWNoOiBwcm9nICE9IE5VTEwsIG9sZCA9PSBOVUxMLCBsaW5rID09IE5VTExcbiAgKiBwcm9nX2RldGFjaDogcHJvZyA9PSBOVUxMLCBvbGQgIT0gTlVMTCwgbGluayA9PSBOVUxMXG5AQCAtMTUzMyw2ICsxNTQ0LDEwIEBAIHN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ191cGRhdGUoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbitcdHJldCA9IHNvY2tfbWFwX3Byb2dfYXR0YWNoX2NoZWNrKHdoaWNoLCBwcm9nKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4gXHQvKiBmb3IgcHJvZ19hdHRhY2gvcHJvZ19kZXRhY2gvbGlua19hdHRhY2gsIHJldHVybiBlcnJvciBpZiBhIGJwZl9saW5rXG4gXHQgKiBleGlzdHMgZm9yIHRoYXQgcHJvZy5cbiBcdCAqL1xuQEAgLTE3NzYsNiArMTc5MSwxMSBAQCBzdGF0aWMgaW50IHNvY2tfbWFwX2xpbmtfdXBkYXRlX3Byb2coc3RydWN0IGJwZl9saW5rICpsaW5rLFxuIFx0XHRyZXQgPSAtRUlOVkFMO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbitcbitcdHJldCA9IHNvY2tfbWFwX3Byb2dfYXR0YWNoX2NoZWNrKGxpbmstXHUwMDNlYXR0YWNoX3R5cGUsIHByb2cpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXQ7XG4rXG4gXHRpZiAoIXNvY2ttYXBfbGluay1cdTAwM2VtYXApIHtcbiBcdFx0cmV0ID0gLUVOT0xJTks7XG4gXHRcdGdvdG8gb3V0O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmNcbmluZGV4IDYyMWIzYjcxODg4ZWZlLi4xZDcyMzE3MjhlYWZkOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuY1xuQEAgLTQzMSw2ICs0MzEsMzUgQEAgc3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX3N0cnBfdmVyZGljdChpbnQgZmFtaWx5LCBpbnQgc290eXBlKVxuIFx0dGVzdF9zb2NrbWFwX3N0cnBfX2Rlc3Ryb3koc3RycCk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF9zdHJwX3BhcnNlcl9yZWplY3Qodm9pZClcbit7XG4rXHRzdHJ1Y3QgdGVzdF9zb2NrbWFwX3N0cnAgKnN0cnAgPSBOVUxMO1xuK1x0aW50IHBhcnNlcl9tb2QsIHBhcnNlcl9ybywgbGluaztcbitcdGludCBlcnIsIG1hcDtcbitcbitcdHN0cnAgPSB0ZXN0X3NvY2ttYXBfc3RycF9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHN0cnAsIFwidGVzdF9zb2NrbWFwX3N0cnBfX29wZW5fYW5kX2xvYWRcIikpXG4rXHRcdHJldHVybjtcbitcbitcdG1hcCA9IGJwZl9tYXBfX2ZkKHN0cnAtXHUwMDNlbWFwcy5zb2NrX21hcCk7XG4rXHRwYXJzZXJfbW9kID0gYnBmX3Byb2dyYW1fX2ZkKHN0cnAtXHUwMDNlcHJvZ3MucHJvZ19za2JfcGFyc2VyX3Jlc2l6ZSk7XG4rXHRwYXJzZXJfcm8gPSBicGZfcHJvZ3JhbV9fZmQoc3RycC1cdTAwM2Vwcm9ncy5wcm9nX3NrYl9wYXJzZXIpO1xuK1xuK1x0ZXJyID0gYnBmX3Byb2dfYXR0YWNoKHBhcnNlcl9tb2QsIG1hcCwgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSLCAwKTtcbitcdEFTU0VSVF9FUlIoZXJyLCBcImJwZl9wcm9nX2F0dGFjaCBwYXJzZXJfbW9kXCIpO1xuK1xuK1x0bGluayA9IGJwZl9saW5rX2NyZWF0ZShwYXJzZXJfcm8sIG1hcCwgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSLCBOVUxMKTtcbitcdGlmICghQVNTRVJUX0dFKGxpbmssIDAsIFwiYnBmX2xpbmtfY3JlYXRlIHBhcnNlcl9yb1wiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRlcnIgPSBicGZfbGlua191cGRhdGUobGluaywgcGFyc2VyX21vZCwgTlVMTCk7XG4rXHRBU1NFUlRfRVJSKGVyciwgXCJicGZfbGlua191cGRhdGUgcGFyc2VyX21vZFwiKTtcbitvdXQ6XG4rXHRpZiAobGluayBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKGxpbmspO1xuK1x0dGVzdF9zb2NrbWFwX3N0cnBfX2Rlc3Ryb3koc3RycCk7XG4rfVxuK1xuIHZvaWQgdGVzdF9zb2NrbWFwX3N0cnAodm9pZClcbiB7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInNvY2ttYXAgc3RycCB0Y3AgcGFzc1wiKSlcbkBAIC00NTEsNCArNDgwLDYgQEAgdm9pZCB0ZXN0X3NvY2ttYXBfc3RycCh2b2lkKVxuIFx0XHR0ZXN0X3NvY2ttYXBfc3RycF9tdWx0aXBsZV9wa3QoQUZfSU5FVCwgU09DS19TVFJFQU0pO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJzb2NrbWFwIHN0cnAgdGNwIGRpc3BhdGNoXCIpKVxuIFx0XHR0ZXN0X3NvY2ttYXBfc3RycF9kaXNwYXRjaF9wa3QoQUZfSU5FVCwgU09DS19TVFJFQU0pO1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJzb2NrbWFwIHN0cnAgcGFyc2VyIHJlamVjdCBwa3QgbW9kXCIpKVxuK1x0XHR0ZXN0X3NvY2ttYXBfc3RycF9wYXJzZXJfcmVqZWN0KCk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrbWFwX3BhcnNlX3Byb2cuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrbWFwX3BhcnNlX3Byb2cuY1xuaW5kZXggYzlhYmZlM2ExMWFmYWEuLjU2ZTlhZWJmMDVmMjRjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2ttYXBfcGFyc2VfcHJvZy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja21hcF9wYXJzZV9wcm9nLmNcbkBAIC01LDI4ICs1LDYgQEBcbiBTRUMoXCJza19za2IxXCIpXG4gaW50IGJwZl9wcm9nMShzdHJ1Y3QgX19za19idWZmICpza2IpXG4ge1xuLVx0dm9pZCAqZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKSBza2ItXHUwMDNlZGF0YV9lbmQ7XG4tXHR2b2lkICpkYXRhID0gKHZvaWQgKikobG9uZykgc2tiLVx1MDAzZWRhdGE7XG4tXHRfX3U4ICpkID0gZGF0YTtcbi1cdGludCBlcnI7XG4tXG4tXHRpZiAoZGF0YSArIDEwIFx1MDAzZSBkYXRhX2VuZCkge1xuLVx0XHRlcnIgPSBicGZfc2tiX3B1bGxfZGF0YShza2IsIDEwKTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRyZXR1cm4gU0tfRFJPUDtcbi1cbi1cdFx0ZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKXNrYi1cdTAwM2VkYXRhX2VuZDtcbi1cdFx0ZGF0YSA9ICh2b2lkICopKGxvbmcpc2tiLVx1MDAzZWRhdGE7XG4tXHRcdGlmIChkYXRhICsgMTAgXHUwMDNlIGRhdGFfZW5kKVxuLVx0XHRcdHJldHVybiBTS19EUk9QO1xuLVx0fVxuLVxuLVx0LyogVGhpcyB3cml0ZS9yZWFkIGlzIGEgYml0IHBvaW50bGVzcyBidXQgdGVzdHMgdGhlIHZlcmlmaWVyIGFuZFxuLVx0ICogc3RycGFyc2VyIGhhbmRsZXIgZm9yIHJlYWQvd3JpdGUgcGt0IGRhdGEgYW5kIGFjY2VzcyBpbnRvIHNrXG4tXHQgKiBmaWVsZHMuXG4tXHQgKi9cbi1cdGQgPSBkYXRhO1xuLVx0ZFs3XSA9IDE7XG4gXHRyZXR1cm4gc2tiLVx1MDAzZWxlbjtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX3N0cnAuY1xuaW5kZXggZGRlM2Q1YmVjNTE1NGEuLmZlODhmYTZkNDBiYzUwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfc3RycC5jXG5AQCAtNTAsNCArNTAsMTEgQEAgaW50IHByb2dfc2tiX3BhcnNlcl9wYXJ0aWFsKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiBcdHJldHVybiAxMDtcbiB9XG4gXG4rU0VDKFwic2tfc2tiL3N0cmVhbV9wYXJzZXJcIilcbitpbnQgcHJvZ19za2JfcGFyc2VyX3Jlc2l6ZShzdHJ1Y3QgX19za19idWZmICpza2IpXG4re1xuK1x0YnBmX3NrYl9jaGFuZ2VfdGFpbChza2IsIHNrYi1cdTAwM2VsZW4sIDApO1xuK1x0cmV0dXJuIHNrYi1cdTAwM2VsZW47XG4rfVxuK1xuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAzOjA0OjA0Ljk3NTMwOTcwN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxNDczMTEyMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTb2NrbWFwIEJQRiBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF04oCZcyBtYWtpbmcgc29tZSBpbnRlcmVzdGluZyBjaGFuZ2VzIHRvIGBuZXQvY29yZS9zb2NrX21hcC5jYCBhbmQgc29tZSByZWxhdGVkIEJQRiBzZWxmdGVzdHMuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gcG9pbnQgaXMgdGhlIGludHJvZHVjdGlvbiBvZiB0aGlzIG5ldyBmdW5jdGlvbiwgYHNvY2tfbWFwX3Byb2dfYXR0YWNoX2NoZWNrYC4gVGhlIHB1cnBvc2Ugb2YgdGhpcyBjaGVjaywgZnJvbSB3aGF0IEkgY2FuIHNlZSwgaXMgdG8gZXhhbWluZSBCUEYgcHJvZ3JhbXMgdGhhdCBhcmUgYmVpbmcgYXR0YWNoZWQgdG8gYSBzb2NrbWFwIGFzIGEgc3RyZWFtIHBhcnNlciB1c2luZyBgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSYC4gU3BlY2lmaWNhbGx5LCBpdCBjaGVja3MgaWYgdGhpcyBCUEYgcHJvZ3JhbSBhdHRlbXB0cyB0byBtb2RpZnkgdGhlIFNLQiBkYXRhIHVzaW5nIGBwcm9nLVx1MDAzZWF1eC1cdTAwM2VjaGFuZ2VzX3BrdF9kYXRhYC4gSWYgaXQgZG9lcywgdGhlIG5ldyBmdW5jdGlvbiBpcyB0aHJvd2luZyBhIGAtRUlOVkFMYCBlcnJvci4gVGhhdCdzIGEgZGVmaW5pdGUgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGtlcm5lbOKAmXMgQlBGIHN1YnN5c3RlbS5cblxuVGhlIHBhdGNoIHNlZW1zIHRvIGFsc28gYmUgdG91Y2hpbmcgYHNvY2tfbWFwX3Byb2dfdXBkYXRlYCBhbmQgYHNvY2tfbWFwX2xpbmtfdXBkYXRlX3Byb2dgLCBzbyBJIHNob3VsZCBrZWVwIGFuIGV5ZSBvbiB0aG9zZS4gVGhpcyBsb29rcyBsaWtlIGEgZGVsaWJlcmF0ZSBwcmV2ZW50YXRpdmUgbWVhc3VyZSwgc3BlY2lmaWNhbGx5IHByZXZlbnRpbmcgdGhlIGF0dGFjaG1lbnQgb2YgY2VydGFpbiBCUEYgcHJvZ3JhbXMgdG8gc29ja21hcHMuXG5cbk5vdywgdGhlIHF1ZXN0aW9uIGlzLCBob3cgZWFzaWx5IGNhbiB0aGlzIGJlIHJlYWNoZWQ/IERlZmluaXRlbHkgcmVhY2hhYmxlLCB2aWEgQlBGIHN5c2NhbGxzIGxpa2UgYGJwZl9wcm9nX2F0dGFjaGAgb3IgYGJwZl9saW5rX3VwZGF0ZWAuIEFuZCBzaW5jZSBpdOKAmXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUga2VybmVsLCBpdCBhYnNvbHV0ZWx5IG5lZWRzIHNvbWUgZ29vZCBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIHBvaW50cyBoZXJlIGFyZSBnb2luZyB0byBiZSB0aG9zZSBtb2RpZmllZCBmdW5jdGlvbnM6IGBzb2NrX21hcF9wcm9nX2F0dGFjaF9jaGVja2AgKHRoZSBuZXcgb25lKSwgYHNvY2tfbWFwX3Byb2dfdXBkYXRlYCwgYW5kIGBzb2NrX21hcF9saW5rX3VwZGF0ZV9wcm9nYC4gSSdsbCB3YW50IHRvIGdvIGRpZyBpbnRvIHRob3NlIGZ1bmN0aW9ucyBpbiBgbmV0L2NvcmUvc29ja19tYXAuY2AgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzIGluIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjQ0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMDM6MDQ6MTEuMTIyNjIyNTM5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NzY0NDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvY2tfbWFwX3Byb2dfdXBkYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NvY2tfbWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc29ja19tYXAuYz0zMj1zdGF0aWMgREVGSU5FX01VVEVYKHNvY2ttYXBfbXV0ZXgpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzMtXFxubmV0L2NvcmUvc29ja19tYXAuYzozNDpzdGF0aWMgaW50IHNvY2tfbWFwX3Byb2dfdXBkYXRlKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTM1LVxcdFxcdFxcdFxcdHN0cnVjdCBicGZfcHJvZyAqb2xkLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTY4PWludCBzb2NrX21hcF9nZXRfZnJvbV9mZChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy04MC1cXHRtdXRleF9sb2NrKFxcdTAwMjZzb2NrbWFwX211dGV4KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjgxOlxcdHJldCA9IHNvY2tfbWFwX3Byb2dfdXBkYXRlKG1hcCwgcHJvZywgTlVMTCwgTlVMTCwgYXR0ci1cXHUwMDNlYXR0YWNoX3R5cGUpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODItXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzb2NrbWFwX211dGV4KTtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9ODY9aW50IHNvY2tfbWFwX3Byb2dfZGV0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBlbnVtIGJwZl9wcm9nX3R5cGUgcHR5cGUpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTEwOS1cXHRtdXRleF9sb2NrKFxcdTAwMjZzb2NrbWFwX211dGV4KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjExMDpcXHRyZXQgPSBzb2NrX21hcF9wcm9nX3VwZGF0ZShtYXAsIE5VTEwsIHByb2csIE5VTEwsIGF0dHItXFx1MDAzZWF0dGFjaF90eXBlKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTExMS1cXHRtdXRleF91bmxvY2soXFx1MDAyNnNvY2ttYXBfbXV0ZXgpO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0xNTE4PXN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ19hdHRhY2hfY2hlY2soZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUsXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE1MzQtICovXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNTM1OnN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ191cGRhdGUoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUzNi1cXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZCwgc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0xNzQwPXN0YXRpYyB2b2lkIHNvY2tfbWFwX2xpbmtfcmVsZWFzZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE3NDctXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNzQ4OlxcdFdBUk5fT05fT05DRShzb2NrX21hcF9wcm9nX3VwZGF0ZShzb2NrbWFwX2xpbmstXFx1MDAzZW1hcCwgTlVMTCwgbGluay1cXHUwMDNlcHJvZywgbGluayxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE3NDktXFx0XFx0XFx0XFx0XFx0ICBsaW5rLVxcdTAwM2VhdHRhY2hfdHlwZSkpO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0xODczPWludCBzb2NrX21hcF9saW5rX2NyZWF0ZShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xOTA5LVxcdG11dGV4X2xvY2soXFx1MDAyNnNvY2ttYXBfbXV0ZXgpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTkxMDpcXHRyZXQgPSBzb2NrX21hcF9wcm9nX3VwZGF0ZShtYXAsIHByb2csIE5VTEwsIFxcdTAwMjZzb2NrbWFwX2xpbmstXFx1MDAzZWxpbmssIGF0dGFjaF90eXBlKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE5MTEtXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzb2NrbWFwX211dGV4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMDM6MDQ6MTEuMTc4MzkxOTk4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIxOTA0NTM5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLCBwdXR0aW5nIG15c2VsZiBpbiB0aGUgcm9sZSBvZiB0aGlua2luZyB0aHJvdWdoIHRoaXM6XG5cbioqUmVmaW5pbmcgdGhlIEZvY3VzOiBTb2NrIE1hcHMgYW5kIFByb2dyYW0gVXBkYXRlcyoqXG5cblJpZ2h0LCBsZXQncyBzZWUsIEknbSByZXZpZXdpbmcgdGhlIHJlY2VudCBjaGFuZ2VzLCBhbmQgSSdtIHRoaW5raW5nIGFib3V0IHdoZXJlIHdlIGNhbiBiZXN0IGFwcGx5IG91ciBuZXcgYEZvY3VzU3ltYm9sc2AgYXBwcm9hY2guIExvb2tpbmcgYXQgdGhlc2Ugc29ja2V0IG1hcCB1cGRhdGVz4oCmIGhtbSwgYHNvY2tfbWFwX3Byb2dfdXBkYXRlYCBhbmQgYHNvY2tfbWFwX2xpbmtfdXBkYXRlX3Byb2dgIGltbWVkaWF0ZWx5IGp1bXAgb3V0IGFzIHN0cm9uZyBwb3NzaWJpbGl0aWVzLiBUaGV5IHNlZW0gbGlrZSBwcmltZSBjYW5kaWRhdGVzIGZvciBkZWVwZXIgYW5hbHlzaXMsIGdpdmVuIHRoZWlyIHJvbGUgaW4gY29ubmVjdGluZyBwcm9ncmFtcyB0byBzb2NrZXQgbWFwcy5cblxuT2theSwgbGV0J3Mgc3RhcnQgd2l0aCBgc29ja19tYXBfbGlua191cGRhdGVfcHJvZ2AuIEkgd2FudCB0byBkaWcgaW50byB0aGF0IG9uZSBmaXJzdDsgc2VlIHdoYXQncyBoYXBwZW5pbmcgdGhlcmUgYXQgYSBmaW5lciBsZXZlbC4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNDQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMzowNDoxNC4zOTc0Mzk3ODVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQwOTA5MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic29ja19tYXBfbGlua191cGRhdGVfcHJvZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9zb2NrX21hcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NvY2tfbWFwLmM9MTc2Mz1zdGF0aWMgdm9pZCBzb2NrX21hcF9saW5rX2RlYWxsb2Moc3RydWN0IGJwZl9saW5rICpsaW5rKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNzcxLSAqL1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTc3MjpzdGF0aWMgaW50IHNvY2tfbWFwX2xpbmtfdXBkYXRlX3Byb2coc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTc3My1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTg2ND1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBzb2NrX21hcF9saW5rX29wcyA9IHtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg2Ny1cXHQuZGV0YWNoID0gc29ja19tYXBfbGlua19kZXRhY2gsXFxubmV0L2NvcmUvc29ja19tYXAuYzoxODY4OlxcdC51cGRhdGVfcHJvZyA9IHNvY2tfbWFwX2xpbmtfdXBkYXRlX3Byb2csXFxubmV0L2NvcmUvc29ja19tYXAuYy0xODY5LVxcdC5maWxsX2xpbmtfaW5mbyA9IHNvY2tfbWFwX2xpbmtfZmlsbF9pbmZvLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMzowNDoxNC40NTE1MzczODRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDg2NDc1NzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkh1bnRpbmcgRG93biBUaG9zZSBLY29uZmlnIE9wdGlvbnMgZm9yIGBzb2NrX21hcC5jYCoqXG5cbkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gcGlucG9pbnQgdGhlIEtjb25maWcgb3B0aW9ucyB0aGF0IGdvdmVybiB0aGUgYmVoYXZpb3IsIG9yIHBlcmhhcHMgZXZlbiB0aGUgdmVyeSBleGlzdGVuY2UsIG9mIGBzb2NrX21hcC5jYC4gSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBzeXN0ZW1hdGljIGFwcHJvYWNoLiBGaXJzdCwgSSdtIHRoaW5raW5nIEknbGwgcGVyZm9ybSBhIGJyb2FkIHNlYXJjaCB1c2luZyBgZ3JlcGAsIGBmaW5kYCwgb3IgZXZlbiBhIG1vcmUgc29waGlzdGljYXRlZCB0b29sIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZSB0cmVlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGRpcmVjdCByZWZlcmVuY2VzIHRvIHRoZSBmaWxlIG5hbWUgaXRzZWxmLCBsaWtlIFwic29ja19tYXAuY1wiLCBtYXliZSBldmVuIFwiQ09ORklHX1NPTUVUSElOR19TT0NLX01BUFwiLiBJJ2xsIGJlIG1pbmRmdWwgb2YgY2FzZSBzZW5zaXRpdml0eSBhbmQgdHJ5IGEgZmV3IHZhcmlhdGlvbnMsIGp1c3QgdG8gYmUgdGhvcm91Z2guXG5cbk5leHQsIEknbGwgY29uc2lkZXIgdGhhdCB0aGUgZmlsZSBtaWdodCBiZSBwYXJ0IG9mIGEgbGFyZ2VyIHN1YnN5c3RlbS4gUGVyaGFwcyBpdCdzIHVuZGVyIHRoZSB1bWJyZWxsYSBvZiBuZXR3b3JraW5nLCB0aGUgQlBGIGluZnJhc3RydWN0dXJlLCBvciBzb21ldGhpbmcgcmVsYXRlZCB0byBzb2NrZXQgb3BlcmF0aW9ucy4gSWYgbXkgaW5pdGlhbCBzZWFyY2ggaXMgdG9vIGJyb2FkLCBJJ2xsIG5hcnJvdyBpdCBkb3duIGJhc2VkIG9uIG15IHByaW9yIGtub3dsZWRnZSBhbmQgY29udGV4dC4gSSdsbCBmb3JtdWxhdGUgYSBtb3JlIHRhcmdldGVkIHNlYXJjaC4gRm9yIGluc3RhbmNlLCBJIG1pZ2h0IGxvb2sgZm9yIEtjb25maWcgc3ltYm9scyB0aGF0IGRlYWwgd2l0aCBzb2NrZXQgbWFwcywgQlBGIHByb2dyYW0gc3VwcG9ydCwgb3Igc3BlY2lmaWMgbmV0d29ya2luZyBmZWF0dXJlcyB0aGF0IGNvdWxkIHVzZSB0aGlzIGNvbXBvbmVudC5cblxuSSdsbCBhbHNvIGtlZXAgaW4gbWluZCB0aGF0IHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgbWlnaHQgbm90IGRpcmVjdGx5IG1lbnRpb24gYHNvY2tfbWFwLmNgLCBidXQgcmF0aGVyIGNvbnRyb2wgdGhlIGluY2x1c2lvbiBvZiBhIGxhcmdlciBtb2R1bGUgb3IgZnVuY3Rpb25hbGl0eSB0aGF0IGluZGlyZWN0bHkgYnJpbmdzIGl0IGluLiBTbywgSSBuZWVkIHRvIGxvb2sgZm9yIGluZGlyZWN0IGRlcGVuZGVuY2llcy4gSSBtaWdodCBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBpdHMgcHVycG9zZS4gVGhlbiwgYnkgbG9va2luZyBhdCB0aGUgcHVycG9zZSBvZiB0aGUgY29kZSwgSSBjYW4gbWFrZSBzb21lIGluZmVyZW5jZXMgdG8gc2VhcmNoIHRoZSBjb25maWd1cmF0aW9uLiBJJ2xsIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgb3IgdGhlIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIGZvciBoaW50cyBhYm91dCByZWxldmFudCBLY29uZmlnIHN5bWJvbHMuXG5cbkZpbmFsbHksIEknbGwgZG91YmxlLWNoZWNrIG15IGZpbmRpbmdzLiBJJ2xsIHJlYWQgYW55IGRvY3VtZW50YXRpb24gc3Vycm91bmRpbmcgdGhlIHBvc3NpYmxlIEtjb25maWcgc3ltYm9scyB0byB2ZXJpZnkgdGhlaXIgZXhhY3QgZnVuY3Rpb24gYW5kIGltcGFjdC4gSSdsbCB2ZXJpZnkgdGhhdCBteSBjb25jbHVzaW9ucyBhbGlnbiB3aXRoIHRoZSBhY3R1YWwgYnVpbGQgcHJvY2VzcyBhbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjYzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMDM6MDQ6MTguNTM4MDE1NDAyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MzM5NjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvY2tfbWFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlPTQ0PW9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICs9IHNrbXNnLm9cXG5uZXQvY29yZS9NYWtlZmlsZTo0NTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHNvY2tfbWFwLm9cXG5uZXQvY29yZS9NYWtlZmlsZS00Ni1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9za19zdG9yYWdlLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMDM6MDQ6MTguNTk1MzYwODQxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE3ODY5MzIzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uLiBUaGUga2V5IGZsYWcgSSBzZWUgaXMgYENPTkZJR19CUEZfU1lTQ0FMTGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoYXQgZWxzZSBpcyBwb3RlbnRpYWxseSByZWxldmFudD9cIiBMZXQncyBzZWUuLi4gaXMgYENPTkZJR19ORVRfU09DS19NU0dgIGFsc28gaW4gcGxheSBoZXJlPyBJIG5lZWQgdG8gY29uc2lkZXIgYWxsIHRoZSBwaWVjZXMuXG5cbkFoLCBJIHNlZS4uLiBgc29ja19tYXAub2AgZ2V0cyBjb21waWxlZCBpZiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlbmFibGVkLiBUaGF0IG1ha2VzIHNlbnNlLCBhIGtleSBidWlsZGluZyBibG9jay4gTm93LCBJIGhhdmUgdG8ga2VlcCB0aGlua2luZyB0aHJvdWdoIHRoaXMuIElzIGBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVJgIGRlcGVuZGVudCBvbiBhbnl0aGluZyBlbHNlIHdpdGhpbiB0aGlzIGNvbmZpZ3VyYXRpb24gZWNvc3lzdGVtPyBXaGF0IGFyZSBpdHMgb3RoZXIgZGVwZW5kZW5jaWVzIGFuZCBpbXBsaWNhdGlvbnM/IEkgbmVlZCB0byB0cmFjZSB0aGlzIGRlcGVuZGVuY3kgY2hhaW4gdG8gYmUgY2VydGFpbiBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjIyOSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAzOjA0OjIxLjc3NDA1NjQ2OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI5NTE2NDI1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vYnBmL2xpYmJwZi9wcm9ncmFtX3R5cGVzLnJzdD0xOD1kZXNjcmliZWQgaW4gbW9yZSBkZXRhaWwgaW4gdGhlIGZvb3Rub3Rlcy5cXG4tLVxcbkRvY3VtZW50YXRpb24vYnBmL2xpYmJwZi9wcm9ncmFtX3R5cGVzLnJzdC0xNzktKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tK1xcbkRvY3VtZW50YXRpb24vYnBmL2xpYmJwZi9wcm9ncmFtX3R5cGVzLnJzdDoxODA6fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSYGAgICAgICAgICAgIHwgYGBza19za2Ivc3RyZWFtX3BhcnNlcmBgICAgICAgICAgfCAgICAgICAgICAgfFxcbkRvY3VtZW50YXRpb24vYnBmL2xpYmJwZi9wcm9ncmFtX3R5cGVzLnJzdC0xODEtKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tK1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3NvY2ttYXAucnN0PTU3PVRoZSBhdHRhY2ggdHlwZXMgZm9yIHRoZSBtYXAgcHJvZ3JhbXMgYXJlOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3NvY2ttYXAucnN0LTU5LS0gYGBtc2dfcGFyc2VyYGAgcHJvZ3JhbSAtIGBgQlBGX1NLX01TR19WRVJESUNUYGAuXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3NvY2ttYXAucnN0OjYwOi0gYGBzdHJlYW1fcGFyc2VyYGAgcHJvZ3JhbSAtIGBgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSYGAuXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3NvY2ttYXAucnN0LTYxLS0gYGBzdHJlYW1fdmVyZGljdGBgIHByb2dyYW0gLSBgYEJQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1RgYC5cXG4tLVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9zb2NrbWFwLnJzdD00NDQ9dmVyZGljdCBwcm9ncmFtLCBhcyB3ZWxsIGFzIGFkZCBhIHNvY2tldCBlbnRyeS5cXG4tLVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9zb2NrbWFwLnJzdC00NTgtXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3NvY2ttYXAucnN0OjQ1OTpcXHRcXHRlcnIgPSBicGZfcHJvZ19hdHRhY2gocGFyc2VfcHJvZ19mZCwgbWFwLCBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVIsIDApO1xcbkRvY3VtZW50YXRpb24vYnBmL21hcF9zb2NrbWFwLnJzdC00NjAtXFx0XFx0aWYgKGVycil7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTA5OT1lbnVtIGJwZl9hdHRhY2hfdHlwZSB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTEwMy1cXHRCUEZfQ0dST1VQX1NPQ0tfT1BTLFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMTA0OlxcdEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUixcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTEwNS1cXHRCUEZfU0tfU0tCX1NUUkVBTV9WRVJESUNULFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NDQ1Mz1hdHRhY2hfdHlwZV90b19wcm9nX3R5cGUoZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NDg3LVxcdFxcdHJldHVybiBCUEZfUFJPR19UWVBFX1NLX01TRztcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0NDg4OlxcdGNhc2UgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ0ODktXFx0Y2FzZSBCUEZfU0tfU0tCX1NUUkVBTV9WRVJESUNUOlxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NDc3Mz1zdGF0aWMgaW50IGJwZl9wcm9nX3F1ZXJ5KGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDgxOC1cXHRcXHRyZXR1cm4gbmV0bnNfYnBmX3Byb2dfcXVlcnkoYXR0ciwgdWF0dHIpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQ4MTk6XFx0Y2FzZSBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVI6XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDgyMC1cXHRjYXNlIEJQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1Q6XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTE0NzU9c3RhdGljIGludCBzb2NrX21hcF9wcm9nX2xpbmtfbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfcHJvZyAqKipwcHJvZyxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQ5MC0jaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIpXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNDkxOlxcdGNhc2UgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSOlxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQ5Mi1cXHRcXHRjdXJfcHByb2cgPSBcXHUwMDI2cHJvZ3MtXFx1MDAzZXN0cmVhbV9wYXJzZXI7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTE1MTg9c3RhdGljIGludCBzb2NrX21hcF9wcm9nX2F0dGFjaF9jaGVjayhlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHRhY2hfdHlwZSxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUyMS1cXHQvKiBBIHN0cmVhbSBwYXJzZXIgbXVzdCBub3QgbW9kaWZ5IHRoZSBza2IsIG9ubHkgbWVhc3VyZSBpdC4gKi9cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE1MjI6XFx0aWYgKHByb2cgXFx1MDAyNlxcdTAwMjYgYXR0YWNoX3R5cGUgPT0gQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSIFxcdTAwMjZcXHUwMDI2XFxubmV0L2NvcmUvc29ja19tYXAuYy0xNTIzLVxcdCAgICBwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWNoYW5nZXNfcGt0X2RhdGEpXFxuLS1cXG50b29scy9icGYvYnBmdG9vbC9wcm9nLmM9NDc9c3RhdGljIGNvbnN0IGJvb2wgYXR0YWNoX3R5cGVzW10gPSB7XFxudG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jOjQ4OlxcdFtCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVJdID0gdHJ1ZSxcXG50b29scy9icGYvYnBmdG9vbC9wcm9nLmMtNDktXFx0W0JQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1RdID0gdHJ1ZSxcXG4tLVxcbnRvb2xzL2JwZi9icGZ0b29sL3Byb2cuYz01OT1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGF0dGFjaF90eXBlX3N0cmluZ3NbXSA9IHtcXG50b29scy9icGYvYnBmdG9vbC9wcm9nLmM6NjA6XFx0W0JQRl9TS19TS0JfU1RSRUFNX1BBUlNFUl0gPSBcXFwic3RyZWFtX3BhcnNlclxcXCIsXFxudG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jLTYxLVxcdFtCUEZfU0tfU0tCX1NUUkVBTV9WRVJESUNUXSA9IFxcXCJzdHJlYW1fdmVyZGljdFxcXCIsXFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTA5OT1lbnVtIGJwZl9hdHRhY2hfdHlwZSB7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTEwMy1cXHRCUEZfQ0dST1VQX1NPQ0tfT1BTLFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMTA0OlxcdEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUixcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTEwNS1cXHRCUEZfU0tfU0tCX1NUUkVBTV9WRVJESUNULFxcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGYuYz03OT1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGF0dGFjaF90eXBlX25hbWVbXSA9IHtcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMTA3LVxcdFtCUEZfQ0dST1VQX1NFVFNPQ0tPUFRdXFx0XFx0PSBcXFwiY2dyb3VwX3NldHNvY2tvcHRcXFwiLFxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6MTA4OlxcdFtCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVJdXFx0PSBcXFwic2tfc2tiX3N0cmVhbV9wYXJzZXJcXFwiLFxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMTA5LVxcdFtCUEZfU0tfU0tCX1NUUkVBTV9WRVJESUNUXVxcdD0gXFxcInNrX3NrYl9zdHJlYW1fdmVyZGljdFxcXCIsXFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTEwMDc2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3NlY19kZWYgc2VjdGlvbl9kZWZzW10gPSB7XFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTEwMTUyLVxcdFNFQ19ERUYoXFxcInNvY2tvcHNcXFwiLFxcdFxcdFNPQ0tfT1BTLCBCUEZfQ0dST1VQX1NPQ0tfT1BTLCBTRUNfQVRUQUNIQUJMRV9PUFQpLFxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6MTAxNTM6XFx0U0VDX0RFRihcXFwic2tfc2tiL3N0cmVhbV9wYXJzZXJcXFwiLFxcdFNLX1NLQiwgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSLCBTRUNfQVRUQUNIQUJMRV9PUFQpLFxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMTAxNTQtXFx0U0VDX0RFRihcXFwic2tfc2tiL3N0cmVhbV92ZXJkaWN0XFxcIixTS19TS0IsIEJQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1QsIFNFQ19BVFRBQ0hBQkxFX09QVCksXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX3NvY2ttYXAuYz0yNDc9c3RhdGljIGludCBzZXR1cF9yeF9zb2NrbWFwKHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX3NvY2ttYXAuYy0yNTktXFx0XFx0Y3R4LnNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcGt0X3NpemUgPSBjdHguc3RycF9zaXplO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfc29ja21hcC5jOjI2MDpcXHRcXHRlcnIgPSBicGZfcHJvZ19hdHRhY2gocGFyc2VyLCBtYXAsIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9zb2NrbWFwLmMtMjYxLVxcdFxcdGlmIChlcnIpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZWN0aW9uX25hbWVzLmM9MjA9c3RhdGljIHN0cnVjdCBzZWNfbmFtZV90ZXN0IHRlc3RzW10gPSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZWN0aW9uX25hbWVzLmMtODEtXFx0XFx0XFxcInNrX3NrYi9zdHJlYW1fcGFyc2VyXFxcIixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZWN0aW9uX25hbWVzLmM6ODI6XFx0XFx0ezAsIEJQRl9QUk9HX1RZUEVfU0tfU0tCLCBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVJ9LFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlY3Rpb25fbmFtZXMuYzo4MzpcXHRcXHR7MCwgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSfSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZWN0aW9uX25hbWVzLmMtODQtXFx0fSxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuYz0xMTg3PXN0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF9jb3BpZWRfc2VxKGJvb2wgc3RycClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuYy0xMjEwLVxcdFxcdHByb2cgPSBza2VsLVxcdTAwM2Vwcm9ncy5wcm9nX3NrYl92ZXJkaWN0X2luZ3Jlc3Nfc3RycDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmM6MTIxMTpcXHRcXHRlcnIgPSBicGZfcHJvZ19hdHRhY2goYnBmX3Byb2dyYW1fX2ZkKHByb2cpLCBtYXAsIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jLTEyMTItXFx0XFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwiYnBmX3Byb2dfYXR0YWNoIHBhcnNlclxcXCIpKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jPTEzNzY9dm9pZCB0ZXN0X3NvY2ttYXBfYmFzaWModm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuYy0xNDA4LVxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJzb2NrbWFwIHN0cmVhbV9wYXJzZXIgcHJvZ3MgcXVlcnlcXFwiKSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmM6MTQwOTpcXHRcXHR0ZXN0X3NvY2ttYXBfcHJvZ3NfcXVlcnkoQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmMtMTQxMC1cXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwic29ja21hcCBzdHJlYW1fdmVyZGljdCBwcm9ncyBxdWVyeVxcXCIpKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9saXN0ZW4uYz03MjQ9c3RhdGljIHZvaWQgdGVzdF9za2JfcmVkaXJfdG9fY29ubmVjdGVkKHN0cnVjdCB0ZXN0X3NvY2ttYXBfbGlzdGVuICpza2VsLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9saXN0ZW4uYy03MzMtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9saXN0ZW4uYzo3MzQ6XFx0ZXJyID0geGJwZl9wcm9nX2F0dGFjaChwYXJzZXIsIHNvY2tfbWFwLCBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVIsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfbGlzdGVuLmMtNzM1LVxcdGlmIChlcnIpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2xpc3Rlbi5jLTc0NS1kZXRhY2g6XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9saXN0ZW4uYzo3NDY6XFx0eGJwZl9wcm9nX2RldGFjaDIocGFyc2VyLCBzb2NrX21hcCwgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2xpc3Rlbi5jLTc0Ny19XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2xpc3Rlbi5jPTg0ND1zdGF0aWMgdm9pZCB0ZXN0X3NrYl9yZWRpcl90b19saXN0ZW5pbmcoc3RydWN0IHRlc3Rfc29ja21hcF9saXN0ZW4gKnNrZWwsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2xpc3Rlbi5jLTg1My1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2xpc3Rlbi5jOjg1NDpcXHRlcnIgPSB4YnBmX3Byb2dfYXR0YWNoKHBhcnNlciwgc29ja19tYXAsIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9saXN0ZW4uYy04NTUtXFx0aWYgKGVycilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfbGlzdGVuLmMtODY1LWRldGFjaDpcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2xpc3Rlbi5jOjg2NjpcXHR4YnBmX3Byb2dfZGV0YWNoMihwYXJzZXIsIHNvY2tfbWFwLCBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfbGlzdGVuLmMtODY3LX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfbGlzdGVuLmM9OTQ4PXN0YXRpYyB2b2lkIHRlc3Rfc2tiX3JlZGlyX3BhcnRpYWwoc3RydWN0IHRlc3Rfc29ja21hcF9saXN0ZW4gKnNrZWwsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2xpc3Rlbi5jLTk1Ny1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2xpc3Rlbi5jOjk1ODpcXHRlcnIgPSB4YnBmX3Byb2dfYXR0YWNoKHBhcnNlciwgc29ja19tYXAsIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9saXN0ZW4uYy05NTktXFx0aWYgKGVycilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfbGlzdGVuLmMtOTY5LWRldGFjaDpcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2xpc3Rlbi5jOjk3MDpcXHR4YnBmX3Byb2dfZGV0YWNoMihwYXJzZXIsIHNvY2tfbWFwLCBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfbGlzdGVuLmMtOTcxLX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jPTQ2PXN0YXRpYyBzdHJ1Y3QgdGVzdF9zb2NrbWFwX3N0cnAgKnNvY2ttYXBfc3RycF9pbml0KGludCAqb3V0X21hcCwgYm9vbCBwYXNzLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmMtNjUtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmM6NjY6XFx0ZXJyID0gYnBmX3Byb2dfYXR0YWNoKHBhcnNlciwgKm91dF9tYXAsIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmMtNjctXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwiYnBmX3Byb2dfYXR0YWNoIHN0cmVhbSBwYXJzZXJcXFwiKSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jPTQzND1zdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXBfc3RycF9wYXJzZXJfcmVqZWN0KHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuYy00NDctXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmM6NDQ4OlxcdGVyciA9IGJwZl9wcm9nX2F0dGFjaChwYXJzZXJfbW9kLCBtYXAsIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmMtNDQ5LVxcdEFTU0VSVF9FUlIoZXJyLCBcXFwiYnBmX3Byb2dfYXR0YWNoIHBhcnNlcl9tb2RcXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuYy00NTAtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmM6NDUxOlxcdGxpbmsgPSBicGZfbGlua19jcmVhdGUocGFyc2VyX3JvLCBtYXAsIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiwgTlVMTCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmMtNDUyLVxcdGlmICghQVNTRVJUX0dFKGxpbmssIDAsIFxcXCJicGZfbGlua19jcmVhdGUgcGFyc2VyX3JvXFxcIikpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmM9NjY1PXN0YXRpYyB2b2lkIHRlc3Rfc29ja21hcCh1bnNpZ25lZCBpbnQgdGFza3MsIHZvaWQgKmRhdGEpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmMtNzgzLVxcdC8qIFRlc3QgYXR0YWNoaW5nL2RldGFjaGluZyBiYWQgZmRzICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jOjc4NDpcXHRlcnIgPSBicGZfcHJvZ19hdHRhY2goLTEsIGZkLCBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVIsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYy03ODUtXFx0aWYgKCFlcnIpIHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYy04MDctXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jOjgwODpcXHRlcnIgPSBicGZfcHJvZ19kZXRhY2goZmQsIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jLTgwOS1cXHRpZiAoIWVycikge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jLTkwMi1cXHRlcnIgPSBicGZfcHJvZ19hdHRhY2gocGFyc2VfcHJvZywgbWFwX2ZkX2JyZWFrLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYzo5MDM6XFx0XFx0XFx0ICAgICAgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmMtOTA0LVxcdGlmICghZXJyKSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmMtOTA5LVxcdGVyciA9IGJwZl9wcm9nX2F0dGFjaChwYXJzZV9wcm9nLCBtYXBfZmRfcngsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jOjkxMDpcXHRcXHQgICAgICBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVIsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYy05MTEtXFx0aWYgKGVycikge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jLTEwNTAtXFx0ZXJyID0gYnBmX3Byb2dfYXR0YWNoKHBhcnNlX3Byb2csIGZkLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYzoxMDUxOlxcdFxcdFxcdCAgICAgIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jLTEwNTItXFx0aWYgKGVycikge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jLTExMTUtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jOjExMTY6XFx0ZXJyID0gYnBmX3Byb2dfZGV0YWNoMihwYXJzZV9wcm9nLCBtYXBfZmRfcngsIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jLTExMTctXFx0aWYgKGVycikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMzowNDoyNC4wNjkyMjY2MThaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUzNjc1OTUwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEJQRiBTdHJlYW0gUGFyc2VyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGlzIGBDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVJgIHBvcHBpbmcgdXAgaW4gYG5ldC9jb3JlL3NvY2tfbWFwLmNgLiBUaGF0J3MgaW50ZXJlc3Rpbmc7IGl0IHN1Z2dlc3RzIHNvbWUgaW52b2x2ZW1lbnQgd2l0aCBlQlBGIGFuZCBuZXR3b3JrIHN0cmVhbXMuIE15IGZpcnN0IG1vdmUgaXMgdG8gZmlndXJlIG91dCB3aGF0IHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gYWN0dWFsbHkgKmRvZXMqLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIGltcGxpY2F0aW9ucy4gR2l2ZW4gdGhlIGNvbnRleHQsIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBuZXQvS2NvbmZpZ2Agb3IgYG5ldC9jb3JlL0tjb25maWdgIGZpbGVzIOKAkyBtb3N0IGxpa2VseSBvbmUgb2YgdGhvc2Ugd2lsbCBob2xkIHRoZSBhbnN3ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgY29uZmlnIHdpbGwgYWN0dWFsbHkgZG8gdG8gdGhlIGJ1aWxkIGFuZCB0aGUgcmVzdWx0aW5nIGtlcm5lbCdzIG5ldHdvcmsgZnVuY3Rpb25hbGl0eS4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTQ3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMDM6MDQ6MjcuNjA1OTg4NDI5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODczNzExOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUEZfU1RSRUFNX1BBUlNFUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTM1ND1jb25maWcgQlFMXFxuLS1cXG5uZXQvS2NvbmZpZy0zNjAtXFxubmV0L0tjb25maWc6MzYxOmNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlxcbm5ldC9LY29uZmlnLTM2Mi1cXHRib29sIFxcXCJlbmFibGUgQlBGIFNUUkVBTV9QQVJTRVJcXFwiXFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTU0NT1zdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtNTczLVxcbm5ldC9jb3JlL3NrbXNnLmM6NTc0OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilcXG5uZXQvY29yZS9za21zZy5jLTU3NS1cXHRwc29jay1cXHUwMDNlaW5ncmVzc19ieXRlcyArPSBsZW47XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTEwNTc9c3RhdGljIHZvaWQgc2tfcHNvY2tfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMDczLVxcbm5ldC9jb3JlL3NrbXNnLmM6MTA3NDojaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIpXFxubmV0L2NvcmUvc2ttc2cuYy0xMDc1LXN0YXRpYyB2b2lkIHNrX3Bzb2NrX3N0cnBfcmVhZChzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz0xMTkzPXN0YXRpYyB2b2lkIHNrX3Bzb2NrX2RvbmVfc3RycChzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMTk1LX1cXG5uZXQvY29yZS9za21zZy5jOjExOTY6I2VuZGlmIC8qIENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUiAqL1xcbm5ldC9jb3JlL3NrbXNnLmMtMTE5Ny1cXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTQ3NT1zdGF0aWMgaW50IHNvY2tfbWFwX3Byb2dfbGlua19sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9wcm9nICoqKnBwcm9nLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNDg5LVxcdFxcdGJyZWFrO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTQ5MDojaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIpXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNDkxLVxcdGNhc2UgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSOlxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTY2Mj1zdGF0aWMgaW50IHRjcF9icGZfYXNzZXJ0X3Byb3RvX29wcyhzdHJ1Y3QgcHJvdG8gKm9wcylcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy02NzEtXFxubmV0L2lwdjQvdGNwX2JwZi5jOjY3MjojaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIpXFxubmV0L2lwdjQvdGNwX2JwZi5jLTY3My1pbnQgdGNwX2JwZl9zdHJwX3JlYWRfc29jayhzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy03MDUtfVxcbm5ldC9pcHY0L3RjcF9icGYuYzo3MDY6I2VuZGlmIC8qIENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUiAqL1xcbm5ldC9pcHY0L3RjcF9icGYuYy03MDctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAzOjA0OjI3LjY4NDczNjU3N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTY0Mjk5MTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIEJQRiBTdHJlYW0gUGFyc2VyIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBpdCdzIHByZXR0eSBjbGVhciBJJ20gZ29pbmcgdG8gbmVlZCB0byBlbmFibGUgYENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUmAgZm9yIHRoaXMsIGFuZCBhbHNvIGBDT05GSUdfQlBGX1NZU0NBTExgLiBObyBzdXJwcmlzZXMgdGhlcmUuIEJ1dCBiZWZvcmUgSSBwcm9jZWVkLCBpdCdzIGFsd2F5cyBhIGdvb2QgcHJhY3RpY2UgdG8gZG91YmxlIGNoZWNrIGRlcGVuZGVuY2llcy4gR290dGEgbWFrZSBzdXJlIGBDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVJgIGlzbid0IHJlbHlpbmcgb24gc29tZSBvYnNjdXJlIG9yIHVuZXhwZWN0ZWQgb3RoZXIgb3B0aW9uIGJlaW5nIHNldC4gTGV0J3MgZGlnIGluIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBwcmVyZXF1aXNpdGVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZiBiZWZvcmUgSSBtYWtlIHRoZXNlIGNoYW5nZXMuIEJldHRlciB0byBiZSB0aG9yb3VnaCB1cGZyb250IHRoYW4gdG8gY2hhc2UgZG93biBhIHdlaXJkIGJ1aWxkIGVycm9yIGxhdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjEyMSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAzOjA0OjMxLjY0OTAzNzk4OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ5MjE3ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTM1ND1jb25maWcgQlFMXFxuLS1cXG5uZXQvS2NvbmZpZy0zNjAtXFxubmV0L0tjb25maWc6MzYxOmNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlxcbm5ldC9LY29uZmlnLTM2Mi1cXHRib29sIFxcXCJlbmFibGUgQlBGIFNUUkVBTV9QQVJTRVJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAzOjA0OjMxLjcwMzk2NzE5NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDQ1NjAyMjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzZWN0aW9uIG9mIHRoZSBjb2RlIGJldHRlci4gTGV0IG1lIHNlZS4uLiBJJ20gdGhpbmtpbmcgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgbGlrZWx5IGluIGBuZXQvS2NvbmZpZ2AsIGFuZCwgYWgsIHllcywgSSdtIGFpbWluZyBmb3IgYXJvdW5kIGxpbmUgMzYxLiBUaGF0IGZlZWxzIGxpa2UgYSBnb29kIHNwb3QgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQgSSdtIGxvb2tpbmcgZm9yLiBMZXQncyBzZWUgd2hhdCB0aGF0IHJldmVhbHMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBiYXNlIGZvciBteSBleHBsb3JhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0MzcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMzowNDozNC43NDk1NzI2MzhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjYxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzU1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzU1OlxcdFxcdGJvb2xcXG4gMzU2OlxcdFxcdHByb21wdCBcXFwiRW5hYmxlIEJ5dGUgUXVldWUgTGltaXRzXFxcIlxcbiAzNTc6XFx0XFx0ZGVwZW5kcyBvbiBTWVNGU1xcbiAzNTg6XFx0XFx0c2VsZWN0IERRTFxcbiAzNTk6XFx0XFx0ZGVmYXVsdCB5XFxuIDM2MDpcXHRcXG4gMzYxOlxcdGNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlxcbiAzNjI6XFx0XFx0Ym9vbCBcXFwiZW5hYmxlIEJQRiBTVFJFQU1fUEFSU0VSXFxcIlxcbiAzNjM6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuIDM2NDpcXHRcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuIDM2NTpcXHRcXHRkZXBlbmRzIG9uIENHUk9VUF9CUEZcXG4gMzY2OlxcdFxcdHNlbGVjdCBTVFJFQU1fUEFSU0VSXFxuIDM2NzpcXHRcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxuIDM2ODpcXHRcXHRoZWxwXFxuIDM2OTpcXHRcXHQgIEVuYWJsaW5nIHRoaXMgYWxsb3dzIGEgVENQIHN0cmVhbSBwYXJzZXIgdG8gYmUgdXNlZCB3aXRoXFxuIDM3MDpcXHRcXHQgIEJQRl9NQVBfVFlQRV9TT0NLTUFQLlxcbiAzNzE6XFx0XFxuIDM3MjpcXHRjb25maWcgTkVUX0ZMT1dfTElNSVRcXG4gMzczOlxcdFxcdGJvb2wgXFxcIk5ldCBmbG93IGxpbWl0XFxcIlxcbiAzNzQ6XFx0XFx0ZGVwZW5kcyBvbiBSUFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMDM6MDQ6MzQuNzQ5NjQwMzQ4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMzgxMzc5NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIFN0cmVhbSBQYXJzZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBCUEZfU1RSRUFNX1BBUlNFUmAgcmVsaWVzIG9uIGEgZmV3IG90aGVyIGNvcmUgZnVuY3Rpb25hbGl0aWVzOiBgSU5FVGAsIGBCUEZfU1lTQ0FMTGAsIGFuZCBgQ0dST1VQX0JQRmAuIFNpbmNlIGBCUEZfU1lTQ0FMTGAgYW5kIGBDR1JPVVBfQlBGYCBhcmUgYWxyZWFkeSBoYW5kbGVkIGluIGdlbmVyaWMgY29uZmlndXJhdGlvbnMsIHRoZSBrZXkgdGhpbmcgaGVyZSBpcyB0byBtYWtlIHN1cmUgYEJQRl9TVFJFQU1fUEFSU0VSYCBpdHNlbGYgZ2V0cyBleHBsaWNpdGx5IGluY2x1ZGVkIGluIGBFbmFibGVDb25maWdzYC4gSXQncyB3b3J0aCBsaXN0aW5nIGl0IGV4cGxpY2l0bHkuXG5cbk5vdywgZm9jdXNpbmcgb24gdGhlIGNvZGUgY2hhbmdlcywgaXQgYXBwZWFycyB0aGUgcGF0Y2ggaW50cm9kdWNlcyBgc29ja19tYXBfcHJvZ19hdHRhY2hfY2hlY2tgIGFuZCBjYWxscyBpdCBmcm9tIGBzb2NrX21hcF9wcm9nX3VwZGF0ZWAgYW5kIGBzb2NrX21hcF9saW5rX3VwZGF0ZV9wcm9nYC4gU28sIHRoZXNlIHRocmVlIGZ1bmN0aW9ucyBhcmUgZ29pbmcgdG8gYmUgdGhlIGNlbnRyYWwgcG9pbnRzIG9mIGludGVyZXN0IGZvciBhbmFseXNpcywgcGFydGljdWxhcmx5IGBzb2NrX21hcF9wcm9nX2F0dGFjaF9jaGVja2AsIGBzb2NrX21hcF9wcm9nX3VwZGF0ZWAsIGFuZCBgc29ja19tYXBfbGlua191cGRhdGVfcHJvZ2AuIEkgcXVpY2tseSBjb25maXJtZWQgdGhhdCBgc29ja19tYXBfcHJvZ19hdHRhY2hfY2hlY2tgIGlzLCBpbiBmYWN0LCBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgdXNlZnVsIHRvIGtub3cuXG5cbkJleW9uZCB0aG9zZSBjb3JlIGNoYW5nZXMsIGl0J3MgYWxzbyB3b3J0aCBub3RpbmcgdGhlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIHNlbGZ0ZXN0cy4gVGhlIHBhdGNoIHVwZGF0ZXMgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrbWFwX3BhcnNlX3Byb2cuY2AsIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmNgLiBUaGVzZSB0ZXN0cyBhcmUgaW1wb3J0YW50IGJlY2F1c2UgdGhleSBkZW1vbnN0cmF0ZSB0aGUgKmludGVuZGVkIHVzYWdlKiBvZiB0aGlzIGZlYXR1cmUuIFNwZWNpZmljYWxseSwgaXQgc2hvd3MgaG93IGEgQlBGIHByb2dyYW0gb2YgdHlwZSBgQlBGX1BST0dfVFlQRV9TS19TS0JgIHdpdGggYW4gYXR0YWNoIHR5cGUgb2YgYEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUmAgaXMgYXR0YWNoZWQgdG8gYSBzb2NrbWFwLiBUaGUga2V5IHBhcnQgaGVyZSBpcyB0aGF0IHRoZSBwYXRjaCBhbHNvIGludHJvZHVjZXMgYSBjaGVjayB0byBwcmV2ZW50IGF0dGFjaGluZyBhIHByb2dyYW0gdGhhdCBtb2RpZmllcyB0aGUgcGFja2V0IGRhdGEuIFRoaXMgc2VlbXMgdG8gYmUgdGhlIGNydWNpYWwgYml0OiBpdCBsb29rcyBsaWtlIHdlJ3JlIGVuZm9yY2luZyBhIGNvbnN0cmFpbnQgYmFzZWQgb24gYHByb2ctXHUwMDNlYXV4LVx1MDAzZWNoYW5nZXNfcGt0X2RhdGFgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGBjaGFuZ2VzX3BrdF9kYXRhYCBjaGVjay4gVGhhdCBzaG91bGQgYmUgbXkgbmV4dCBmb2N1cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4NjcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMzowNDo0Mi4wODc3ODAxODNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NDA0Mzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoYW5nZXNfcGt0X2RhdGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9jZmcuYz00Mz1lbnVtIHtcXG4tLVxcbmtlcm5lbC9icGYvY2ZnLmMtNTAtXFxua2VybmVsL2JwZi9jZmcuYzo1MTpzdGF0aWMgdm9pZCBtYXJrX3N1YnByb2dfY2hhbmdlc19wa3RfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgb2ZmKVxcbmtlcm5lbC9icGYvY2ZnLmMtNTIte1xcbi0tXFxua2VybmVsL2JwZi9jZmcuYy01NS1cXHRzdWJwcm9nID0gYnBmX2ZpbmRfY29udGFpbmluZ19zdWJwcm9nKGVudiwgb2ZmKTtcXG5rZXJuZWwvYnBmL2NmZy5jOjU2OlxcdHN1YnByb2ctXFx1MDAzZWNoYW5nZXNfcGt0X2RhdGEgPSB0cnVlO1xcbmtlcm5lbC9icGYvY2ZnLmMtNTctfVxcbi0tXFxua2VybmVsL2JwZi9jZmcuYz04MT1zdGF0aWMgdm9pZCBtZXJnZV9jYWxsZWVfZWZmZWN0cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgdCwgaW50IHcpXFxuLS1cXG5rZXJuZWwvYnBmL2NmZy5jLTg2LVxcdGNhbGxlZSA9IGJwZl9maW5kX2NvbnRhaW5pbmdfc3VicHJvZyhlbnYsIHcpO1xcbmtlcm5lbC9icGYvY2ZnLmM6ODc6XFx0Y2FsbGVyLVxcdTAwM2VjaGFuZ2VzX3BrdF9kYXRhIHw9IGNhbGxlZS1cXHUwMDNlY2hhbmdlc19wa3RfZGF0YTtcXG5rZXJuZWwvYnBmL2NmZy5jLTg4LVxcdGNhbGxlci1cXHUwMDNlbWlnaHRfc2xlZXAgfD0gY2FsbGVlLVxcdTAwM2VtaWdodF9zbGVlcDtcXG4tLVxcbmtlcm5lbC9icGYvY2ZnLmM9NDI2PXN0YXRpYyBpbnQgdmlzaXRfaW5zbihpbnQgdCwgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvY2ZnLmMtNDg1LVxcdFxcdFxcdFxcdG1hcmtfc3VicHJvZ19taWdodF9zbGVlcChlbnYsIHQpO1xcbmtlcm5lbC9icGYvY2ZnLmM6NDg2OlxcdFxcdFxcdGlmIChicGZfaGVscGVyX2NoYW5nZXNfcGt0X2RhdGEoaW5zbi1cXHUwMDNlaW1tKSlcXG5rZXJuZWwvYnBmL2NmZy5jOjQ4NzpcXHRcXHRcXHRcXHRtYXJrX3N1YnByb2dfY2hhbmdlc19wa3RfZGF0YShlbnYsIHQpO1xcbmtlcm5lbC9icGYvY2ZnLmMtNDg4LVxcdFxcdFxcdGlmIChpbnNuLVxcdTAwM2VpbW0gPT0gQlBGX0ZVTkNfdGFpbF9jYWxsKSB7XFxuLS1cXG5rZXJuZWwvYnBmL2NmZy5jLTUxOS1cXHRcXHRcXHRpZiAocmV0ID09IDAgXFx1MDAyNlxcdTAwMjYgYnBmX2lzX2tmdW5jX3BrdF9jaGFuZ2luZyhcXHUwMDI2bWV0YSkpXFxua2VybmVsL2JwZi9jZmcuYzo1MjA6XFx0XFx0XFx0XFx0bWFya19zdWJwcm9nX2NoYW5nZXNfcGt0X2RhdGEoZW52LCB0KTtcXG5rZXJuZWwvYnBmL2NmZy5jLTUyMS1cXHRcXHRcXHRpZiAocmV0ID09IDAgXFx1MDAyNlxcdTAwMjYgYnBmX2lzX3Rocm93X2tmdW5jKGluc24pKVxcbi0tXFxua2VybmVsL2JwZi9jZmcuYz01NjI9aW50IGJwZl9jaGVja19jZmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvY2ZnLmMtNjM5LVxcdHJldCA9IDA7IC8qIGNmZyBsb29rcyBnb29kICovXFxua2VybmVsL2JwZi9jZmcuYzo2NDA6XFx0ZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWNoYW5nZXNfcGt0X2RhdGEgPSBlbnYtXFx1MDAzZXN1YnByb2dfaW5mb1swXS5jaGFuZ2VzX3BrdF9kYXRhO1xcbmtlcm5lbC9icGYvY2ZnLmMtNjQxLVxcdGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VtaWdodF9zbGVlcCA9IGVudi1cXHUwMDNlc3VicHJvZ19pbmZvWzBdLm1pZ2h0X3NsZWVwO1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MzE3Nz12b2lkIF9fd2VhayBicGZfaml0X2NvbXBpbGUoc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMzE4MC1cXG5rZXJuZWwvYnBmL2NvcmUuYzozMTgxOmJvb2wgX193ZWFrIGJwZl9oZWxwZXJfY2hhbmdlc19wa3RfZGF0YShlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQpXFxua2VybmVsL2JwZi9jb3JlLmMtMzE4Mi17XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTEwMjg9c3RhdGljIGludCBqaXRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTE1OS1cXHRcXHRmdW5jW2ldLVxcdTAwM2VhdXgtXFx1MDAzZWV4Y2VwdGlvbl9jYiA9IGVudi1cXHUwMDNlc3VicHJvZ19pbmZvW2ldLmlzX2V4Y2VwdGlvbl9jYjtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjExNjA6XFx0XFx0ZnVuY1tpXS1cXHUwMDNlYXV4LVxcdTAwM2VjaGFuZ2VzX3BrdF9kYXRhID0gZW52LVxcdTAwM2VzdWJwcm9nX2luZm9baV0uY2hhbmdlc19wa3RfZGF0YTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTExNjEtXFx0XFx0ZnVuY1tpXS1cXHUwMDNlYXV4LVxcdTAwM2VtaWdodF9zbGVlcCA9IGVudi1cXHUwMDNlc3VicHJvZ19pbmZvW2ldLm1pZ2h0X3NsZWVwO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTkzMjY9c3RhdGljIGludCBjaGVja19mdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTkzNjgtXFx0XFx0XFx0XFx0c3VicHJvZywgc3ViX25hbWUpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5MzY5OlxcdFxcdGlmIChlbnYtXFx1MDAzZXN1YnByb2dfaW5mb1tzdWJwcm9nXS5jaGFuZ2VzX3BrdF9kYXRhKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05MzcwLVxcdFxcdFxcdGNsZWFyX2FsbF9wa3RfcG9pbnRlcnMoZW52KTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDE0OT1zdGF0aWMgaW50IGNoZWNrX2hlbHBlcl9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDE4OC1cXHQvKiBXaXRoIExEX0FCUy9JTkQgc29tZSBKSVRzIHNhdmUvcmVzdG9yZSBza2IgZnJvbSByMS4gKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTAxODk6XFx0Y2hhbmdlc19kYXRhID0gYnBmX2hlbHBlcl9jaGFuZ2VzX3BrdF9kYXRhKGZ1bmNfaWQpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDE5MC1cXHRpZiAoY2hhbmdlc19kYXRhIFxcdTAwMjZcXHUwMDI2IGZuLVxcdTAwM2VhcmcxX3R5cGUgIT0gQVJHX1BUUl9UT19DVFgpIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODg1OD1pbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODg5OC1cXHRcXHRzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXggPSB0Z3RfcHJvZy1cXHUwMDNlYXV4O1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODg5OTpcXHRcXHRib29sIHRndF9jaGFuZ2VzX3BrdF9kYXRhO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODkwMC1cXHRcXHRib29sIHRndF9taWdodF9zbGVlcDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODkzNC1cXHRcXHRcXHR9XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4OTM1OlxcdFxcdFxcdHRndF9jaGFuZ2VzX3BrdF9kYXRhID0gYXV4LVxcdTAwM2VmdW5jXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4OTM2OlxcdFxcdFxcdFxcdFxcdCAgICAgICA/IGF1eC1cXHUwMDNlZnVuY1tzdWJwcm9nXS1cXHUwMDNlYXV4LVxcdTAwM2VjaGFuZ2VzX3BrdF9kYXRhXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4OTM3OlxcdFxcdFxcdFxcdFxcdCAgICAgICA6IGF1eC1cXHUwMDNlY2hhbmdlc19wa3RfZGF0YTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTg5Mzg6XFx0XFx0XFx0aWYgKHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlY2hhbmdlc19wa3RfZGF0YSBcXHUwMDI2XFx1MDAyNiAhdGd0X2NoYW5nZXNfcGt0X2RhdGEpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg5MzktXFx0XFx0XFx0XFx0YnBmX2xvZyhsb2csXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAzOjA0OjQyLjE0NDE5NTkwMloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzYzOTAxNTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBTdHJlYW0gUGFyc2VyIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIHJlbGF0aXZlbHkgbWlub3IsIGJ1dCBpbXBvcnRhbnQsIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbS4gRXNzZW50aWFsbHksIGl0IGFkZHMgYSBjaGVjazogdGhlIGBjaGFuZ2VzX3BrdF9kYXRhYCBmbGFnIGlzIHNldCB3aGVuIGEgQlBGIHByb2dyYW0gdXNlcyBhIGhlbHBlciB0aGF0IG1vZGlmaWVzIHBhY2tldCBkYXRhLiBUaGUgcGF0Y2ggbm93IGNoZWNrcyB0aGlzIGZsYWcgKnNwZWNpZmljYWxseSogd2hlbiB3ZSdyZSB0cnlpbmcgdG8gYXR0YWNoIGEgcHJvZ3JhbSBvZiB0aGUgYEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUmAgdHlwZS4gU2VlbXMgbGlrZSBhIGdvb2Qgc2FmZXR5IG1lYXN1cmUuXG5cbkdpdmVuIHRoaXMsIEkndmUgZ290IGEgY2xlYXIgZnV6emluZyBzdHJhdGVneS4gVGhlIGtleSBmdW5jdGlvbnMgdG8gdGFyZ2V0IGFyZSBgc29ja19tYXBfcHJvZ19hdHRhY2hfY2hlY2tgLCBgc29ja19tYXBfcHJvZ191cGRhdGVgLCBhbmQgYHNvY2tfbWFwX2xpbmtfdXBkYXRlX3Byb2dgLiBUaGVzZSBhcmUgdGhlIGVudHJ5IHBvaW50cyB0aGF0IHRoZSBwYXRjaCBkaXJlY3RseSBpbXBhY3RzLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBicGZfcHJvZ19hdHRhY2hgIGFuZCBgYnBmX2xpbmtfdXBkYXRlYCBzeXNjYWxscy4gV2UgYXJlIGNoZWNraW5nIHRoZSBmbGFnIHdpdGhpbiB0aGUgY2hlY2sgYW5kIHVwZGF0ZSBmdW5jdGlvbnMuXG5cblRoZSByZWxldmFudCBjb25maWcgSSBuZWVkIHRvIHBheSBhdHRlbnRpb24gdG8gaXMgYEJQRl9TVFJFQU1fUEFSU0VSYC4gSSBhbHJlYWR5IGtub3cgc3l6a2FsbGVyIGhhcyBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19DR1JPVVBfQlBGYCBlbmFibGVkLiBHb29kLiBJIGFsc28gc2VlIHRoYXQgYENPTkZJR19ORVRfU09DS19NU0dgIGlzIGEgZGVwZW5kZW5jeSBvZiBgQlBGX1NUUkVBTV9QQVJTRVJgLiBBbGwgdGhlIHBpZWNlcyBhcmUgaGVyZS4gSSdsbCBtYWtlIHN1cmUgdG8gbm90ZSB0aGF0IGluIG15IG91dHB1dC5cblxuQWxyaWdodCwgSSdtIGNvbmZpZGVudCBpbiB0aGlzIGV2YWx1YXRpb24uIFRpbWUgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzNzQsIk91dHB1dFRva2VucyI6MTM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAzOjA0OjQ4LjUwODEwMTM0OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NTgzNzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1RSRUFNX1BBUlNFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNvY2tfbWFwX3Byb2dfYXR0YWNoX2NoZWNrXCIsXG4gICAgXCJzb2NrX21hcF9wcm9nX3VwZGF0ZVwiLFxuICAgIFwic29ja19tYXBfbGlua191cGRhdGVfcHJvZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBjaGVjayB0byBwcmV2ZW50IGF0dGFjaGluZyBCUEYgc3RyZWFtIHBhcnNlciBwcm9ncmFtcyB0aGF0IG1vZGlmeSBwYWNrZXQgZGF0YSB0byBzb2NrbWFwcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgc3Vic3lzdGVtIHRoYXQgYWZmZWN0cyBicGZfcHJvZ19hdHRhY2ggYW5kIGJwZl9saW5rX3VwZGF0ZSBzeXNjYWxscy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIGF0dGFjaCBhbmQgdXBkYXRlIGZ1bmN0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1RSRUFNX1BBUlNFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNvY2tfbWFwX3Byb2dfYXR0YWNoX2NoZWNrXCIsXG4gICAgXCJzb2NrX21hcF9wcm9nX3VwZGF0ZVwiLFxuICAgIFwic29ja19tYXBfbGlua191cGRhdGVfcHJvZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBjaGVjayB0byBwcmV2ZW50IGF0dGFjaGluZyBCUEYgc3RyZWFtIHBhcnNlciBwcm9ncmFtcyB0aGF0IG1vZGlmeSBwYWNrZXQgZGF0YSB0byBzb2NrbWFwcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgc3Vic3lzdGVtIHRoYXQgYWZmZWN0cyBicGZfcHJvZ19hdHRhY2ggYW5kIGJwZl9saW5rX3VwZGF0ZSBzeXNjYWxscy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIGF0dGFjaCBhbmQgdXBkYXRlIGZ1bmN0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowrhfvj[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-20 02:54:46 +0000 UTC FinishedAt: 2026-06-20 03:04:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "a975094bf98ca97be9146f9d3b5681a6f9cf5ce3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_STREAM_PARSER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "a975094bf98ca97be9146f9d3b5681a6f9cf5ce3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_STREAM_PARSER" ], "series_id": "6573ff55-3f17-43a4-a437-fa954209aa7f" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "sock_map_prog_attach_check", "sock_map_prog_update", "sock_map_link_update_prog" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA2LzIwIDAzOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TVFJFQU1fUEFSU0VSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c29ja19tYXBfcHJvZ19hdHRhY2hfY2hlY2smIzM0OywKICAgICYjMzQ7c29ja19tYXBfcHJvZ191cGRhdGUmIzM0OywKICAgICYjMzQ7c29ja19tYXBfbGlua191cGRhdGVfcHJvZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY2hlY2sgdG8gcHJldmVudCBhdHRhY2hpbmcgQlBGIHN0cmVhbSBwYXJzZXIgcHJvZ3JhbXMgdGhhdCBtb2RpZnkgcGFja2V0IGRhdGEgdG8gc29ja21hcHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQlBGIHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMgYnBmX3Byb2dfYXR0YWNoIGFuZCBicGZfbGlua191cGRhdGUgc3lzY2FsbHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtb2RpZmllZCBhdHRhY2ggYW5kIHVwZGF0ZSBmdW5jdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDM6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxZGU3ZWQ3MWE1Yjc1MWEyZTJjNGVmOTY4ZDE1NDY2MWI2ZjliZTAwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdW4gMjAgMDM6MDQ6MDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29ja19tYXAuYyBiL25ldC9jb3JlL3NvY2tfbWFwLmNcbmluZGV4IDk5ZTM3ODk0OTJhMDllLi5jNjBiYTZkMjkyZjlhZSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NvY2tfbWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NvY2tfbWFwLmNcbkBAIC0xNTE1LDYgJiM0MzsxNTE1LDE3IEBAIHN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ19saW5rX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Byb2cgKioqcHByXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgc29ja19tYXBfcHJvZ19hdHRhY2hfY2hlY2soZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUsXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuJiM0Mzt7XG4mIzQzO1x0LyogQSBzdHJlYW0gcGFyc2VyIG11c3Qgbm90IG1vZGlmeSB0aGUgc2tiLCBvbmx5IG1lYXN1cmUgaXQuICovXG4mIzQzO1x0aWYgKHByb2cgXHUwMDI2XHUwMDI2IGF0dGFjaF90eXBlID09IEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgcHJvZy1cdTAwM2VhdXgtXHUwMDNlY2hhbmdlc19wa3RfZGF0YSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiAvKiBIYW5kbGUgdGhlIGZvbGxvd2luZyBmb3VyIGNhc2VzOlxuICAqIHByb2dfYXR0YWNoOiBwcm9nICE9IE5VTEwsIG9sZCA9PSBOVUxMLCBsaW5rID09IE5VTExcbiAgKiBwcm9nX2RldGFjaDogcHJvZyA9PSBOVUxMLCBvbGQgIT0gTlVMTCwgbGluayA9PSBOVUxMXG5AQCAtMTUzMyw2ICYjNDM7MTU0NCwxMCBAQCBzdGF0aWMgaW50IHNvY2tfbWFwX3Byb2dfdXBkYXRlKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4mIzQzO1x0cmV0ID0gc29ja19tYXBfcHJvZ19hdHRhY2hfY2hlY2sod2hpY2gsIHByb2cpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiBcdC8qIGZvciBwcm9nX2F0dGFjaC9wcm9nX2RldGFjaC9saW5rX2F0dGFjaCwgcmV0dXJuIGVycm9yIGlmIGEgYnBmX2xpbmtcbiBcdCAqIGV4aXN0cyBmb3IgdGhhdCBwcm9nLlxuIFx0ICovXG5AQCAtMTc3Niw2ICYjNDM7MTc5MSwxMSBAQCBzdGF0aWMgaW50IHNvY2tfbWFwX2xpbmtfdXBkYXRlX3Byb2coc3RydWN0IGJwZl9saW5rICpsaW5rLFxuIFx0XHRyZXQgPSAtRUlOVkFMO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gc29ja19tYXBfcHJvZ19hdHRhY2hfY2hlY2sobGluay1cdTAwM2VhdHRhY2hfdHlwZSwgcHJvZyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiBcdGlmICghc29ja21hcF9saW5rLVx1MDAzZW1hcCkge1xuIFx0XHRyZXQgPSAtRU5PTElOSztcbiBcdFx0Z290byBvdXQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuY1xuaW5kZXggNjIxYjNiNzE4ODhlZmUuLjFkNzIzMTcyOGVhZmQ5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jXG5AQCAtNDMxLDYgJiM0Mzs0MzEsMzUgQEAgc3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX3N0cnBfdmVyZGljdChpbnQgZmFtaWx5LCBpbnQgc290eXBlKVxuIFx0dGVzdF9zb2NrbWFwX3N0cnBfX2Rlc3Ryb3koc3RycCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXBfc3RycF9wYXJzZXJfcmVqZWN0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGVzdF9zb2NrbWFwX3N0cnAgKnN0cnAgPSBOVUxMO1xuJiM0MztcdGludCBwYXJzZXJfbW9kLCBwYXJzZXJfcm8sIGxpbms7XG4mIzQzO1x0aW50IGVyciwgbWFwO1xuJiM0MztcbiYjNDM7XHRzdHJwID0gdGVzdF9zb2NrbWFwX3N0cnBfX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc3RycCwgXCYjMzQ7dGVzdF9zb2NrbWFwX3N0cnBfX29wZW5fYW5kX2xvYWRcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRtYXAgPSBicGZfbWFwX19mZChzdHJwLVx1MDAzZW1hcHMuc29ja19tYXApO1xuJiM0MztcdHBhcnNlcl9tb2QgPSBicGZfcHJvZ3JhbV9fZmQoc3RycC1cdTAwM2Vwcm9ncy5wcm9nX3NrYl9wYXJzZXJfcmVzaXplKTtcbiYjNDM7XHRwYXJzZXJfcm8gPSBicGZfcHJvZ3JhbV9fZmQoc3RycC1cdTAwM2Vwcm9ncy5wcm9nX3NrYl9wYXJzZXIpO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBicGZfcHJvZ19hdHRhY2gocGFyc2VyX21vZCwgbWFwLCBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVIsIDApO1xuJiM0MztcdEFTU0VSVF9FUlIoZXJyLCBcJiMzNDticGZfcHJvZ19hdHRhY2ggcGFyc2VyX21vZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGxpbmsgPSBicGZfbGlua19jcmVhdGUocGFyc2VyX3JvLCBtYXAsIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiwgTlVMTCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UobGluaywgMCwgXCYjMzQ7YnBmX2xpbmtfY3JlYXRlIHBhcnNlcl9yb1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gYnBmX2xpbmtfdXBkYXRlKGxpbmssIHBhcnNlcl9tb2QsIE5VTEwpO1xuJiM0MztcdEFTU0VSVF9FUlIoZXJyLCBcJiMzNDticGZfbGlua191cGRhdGUgcGFyc2VyX21vZFwmIzM0Oyk7XG4mIzQzO291dDpcbiYjNDM7XHRpZiAobGluayBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShsaW5rKTtcbiYjNDM7XHR0ZXN0X3NvY2ttYXBfc3RycF9fZGVzdHJveShzdHJwKTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIHRlc3Rfc29ja21hcF9zdHJwKHZvaWQpXG4ge1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7c29ja21hcCBzdHJwIHRjcCBwYXNzXCYjMzQ7KSlcbkBAIC00NTEsNCAmIzQzOzQ4MCw2IEBAIHZvaWQgdGVzdF9zb2NrbWFwX3N0cnAodm9pZClcbiBcdFx0dGVzdF9zb2NrbWFwX3N0cnBfbXVsdGlwbGVfcGt0KEFGX0lORVQsIFNPQ0tfU1RSRUFNKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3NvY2ttYXAgc3RycCB0Y3AgZGlzcGF0Y2hcJiMzNDspKVxuIFx0XHR0ZXN0X3NvY2ttYXBfc3RycF9kaXNwYXRjaF9wa3QoQUZfSU5FVCwgU09DS19TVFJFQU0pO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3NvY2ttYXAgc3RycCBwYXJzZXIgcmVqZWN0IHBrdCBtb2RcJiMzNDspKVxuJiM0MztcdFx0dGVzdF9zb2NrbWFwX3N0cnBfcGFyc2VyX3JlamVjdCgpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja21hcF9wYXJzZV9wcm9nLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja21hcF9wYXJzZV9wcm9nLmNcbmluZGV4IGM5YWJmZTNhMTFhZmFhLi41NmU5YWViZjA1ZjI0YyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrbWFwX3BhcnNlX3Byb2cuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2ttYXBfcGFyc2VfcHJvZy5jXG5AQCAtNSwyOCAmIzQzOzUsNiBAQFxuIFNFQyhcJiMzNDtza19za2IxXCYjMzQ7KVxuIGludCBicGZfcHJvZzEoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuIHtcbi1cdHZvaWQgKmRhdGFfZW5kID0gKHZvaWQgKikobG9uZykgc2tiLVx1MDAzZWRhdGFfZW5kO1xuLVx0dm9pZCAqZGF0YSA9ICh2b2lkICopKGxvbmcpIHNrYi1cdTAwM2VkYXRhO1xuLVx0X191OCAqZCA9IGRhdGE7XG4tXHRpbnQgZXJyO1xuLVxuLVx0aWYgKGRhdGEgJiM0MzsgMTAgXHUwMDNlIGRhdGFfZW5kKSB7XG4tXHRcdGVyciA9IGJwZl9za2JfcHVsbF9kYXRhKHNrYiwgMTApO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdHJldHVybiBTS19EUk9QO1xuLVxuLVx0XHRkYXRhX2VuZCA9ICh2b2lkICopKGxvbmcpc2tiLVx1MDAzZWRhdGFfZW5kO1xuLVx0XHRkYXRhID0gKHZvaWQgKikobG9uZylza2ItXHUwMDNlZGF0YTtcbi1cdFx0aWYgKGRhdGEgJiM0MzsgMTAgXHUwMDNlIGRhdGFfZW5kKVxuLVx0XHRcdHJldHVybiBTS19EUk9QO1xuLVx0fVxuLVxuLVx0LyogVGhpcyB3cml0ZS9yZWFkIGlzIGEgYml0IHBvaW50bGVzcyBidXQgdGVzdHMgdGhlIHZlcmlmaWVyIGFuZFxuLVx0ICogc3RycGFyc2VyIGhhbmRsZXIgZm9yIHJlYWQvd3JpdGUgcGt0IGRhdGEgYW5kIGFjY2VzcyBpbnRvIHNrXG4tXHQgKiBmaWVsZHMuXG4tXHQgKi9cbi1cdGQgPSBkYXRhO1xuLVx0ZFs3XSA9IDE7XG4gXHRyZXR1cm4gc2tiLVx1MDAzZWxlbjtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX3N0cnAuY1xuaW5kZXggZGRlM2Q1YmVjNTE1NGEuLmZlODhmYTZkNDBiYzUwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfc3RycC5jXG5AQCAtNTAsNCAmIzQzOzUwLDExIEBAIGludCBwcm9nX3NrYl9wYXJzZXJfcGFydGlhbChzdHJ1Y3QgX19za19idWZmICpza2IpXG4gXHRyZXR1cm4gMTA7XG4gfVxuIFxuJiM0MztTRUMoXCYjMzQ7c2tfc2tiL3N0cmVhbV9wYXJzZXJcJiMzNDspXG4mIzQzO2ludCBwcm9nX3NrYl9wYXJzZXJfcmVzaXplKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdGJwZl9za2JfY2hhbmdlX3RhaWwoc2tiLCBza2ItXHUwMDNlbGVuLCAwKTtcbiYjNDM7XHRyZXR1cm4gc2tiLVx1MDAzZWxlbjtcbiYjNDM7fVxuJiM0MztcbiBjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAzOjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TVFJFQU1fUEFSU0VSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c29ja19tYXBfcHJvZ19hdHRhY2hfY2hlY2smIzM0OywKICAgICYjMzQ7c29ja19tYXBfcHJvZ191cGRhdGUmIzM0OywKICAgICYjMzQ7c29ja19tYXBfbGlua191cGRhdGVfcHJvZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY2hlY2sgdG8gcHJldmVudCBhdHRhY2hpbmcgQlBGIHN0cmVhbSBwYXJzZXIgcHJvZ3JhbXMgdGhhdCBtb2RpZnkgcGFja2V0IGRhdGEgdG8gc29ja21hcHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQlBGIHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMgYnBmX3Byb2dfYXR0YWNoIGFuZCBicGZfbGlua191cGRhdGUgc3lzY2FsbHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtb2RpZmllZCBhdHRhY2ggYW5kIHVwZGF0ZSBmdW5jdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDFkZTdlZDcxYTViNzUxYTJlMmM0ZWY5NjhkMTU0NjYxYjZmOWJlMDAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1biAyMCAwMzowNDowMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2tfbWFwLmMgYi9uZXQvY29yZS9zb2NrX21hcC5jCmluZGV4IDk5ZTM3ODk0OTJhMDllLi5jNjBiYTZkMjkyZjlhZSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc29ja19tYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9zb2NrX21hcC5jCkBAIC0xNTE1LDYgJiM0MzsxNTE1LDE3IEBAIHN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ19saW5rX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Byb2cgKioqcHByCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IHNvY2tfbWFwX3Byb2dfYXR0YWNoX2NoZWNrKGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpCiYjNDM7ewomIzQzOwkvKiBBIHN0cmVhbSBwYXJzZXIgbXVzdCBub3QgbW9kaWZ5IHRoZSBza2IsIG9ubHkgbWVhc3VyZSBpdC4gKi8KJiM0MzsJaWYgKHByb2cgJmFtcDsmYW1wOyBhdHRhY2hfdHlwZSA9PSBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVIgJmFtcDsmYW1wOwomIzQzOwkgICAgcHJvZy0mZ3Q7YXV4LSZndDtjaGFuZ2VzX3BrdF9kYXRhKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIC8qIEhhbmRsZSB0aGUgZm9sbG93aW5nIGZvdXIgY2FzZXM6CiAgKiBwcm9nX2F0dGFjaDogcHJvZyAhPSBOVUxMLCBvbGQgPT0gTlVMTCwgbGluayA9PSBOVUxMCiAgKiBwcm9nX2RldGFjaDogcHJvZyA9PSBOVUxMLCBvbGQgIT0gTlVMTCwgbGluayA9PSBOVUxMCkBAIC0xNTMzLDYgJiM0MzsxNTQ0LDEwIEBAIHN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ191cGRhdGUoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9wcm9nICpwcm9nLAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKJiM0MzsJcmV0ID0gc29ja19tYXBfcHJvZ19hdHRhY2hfY2hlY2sod2hpY2gsIHByb2cpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKIAkvKiBmb3IgcHJvZ19hdHRhY2gvcHJvZ19kZXRhY2gvbGlua19hdHRhY2gsIHJldHVybiBlcnJvciBpZiBhIGJwZl9saW5rCiAJICogZXhpc3RzIGZvciB0aGF0IHByb2cuCiAJICovCkBAIC0xNzc2LDYgJiM0MzsxNzkxLDExIEBAIHN0YXRpYyBpbnQgc29ja19tYXBfbGlua191cGRhdGVfcHJvZyhzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssCiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KJiM0MzsKJiM0MzsJcmV0ID0gc29ja19tYXBfcHJvZ19hdHRhY2hfY2hlY2sobGluay0mZ3Q7YXR0YWNoX3R5cGUsIHByb2cpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiAJaWYgKCFzb2NrbWFwX2xpbmstJmd0O21hcCkgewogCQlyZXQgPSAtRU5PTElOSzsKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jCmluZGV4IDYyMWIzYjcxODg4ZWZlLi4xZDcyMzE3MjhlYWZkOSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmMKQEAgLTQzMSw2ICYjNDM7NDMxLDM1IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF9zdHJwX3ZlcmRpY3QoaW50IGZhbWlseSwgaW50IHNvdHlwZSkKIAl0ZXN0X3NvY2ttYXBfc3RycF9fZGVzdHJveShzdHJwKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF9zdHJwX3BhcnNlcl9yZWplY3Qodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0ZXN0X3NvY2ttYXBfc3RycCAqc3RycCA9IE5VTEw7CiYjNDM7CWludCBwYXJzZXJfbW9kLCBwYXJzZXJfcm8sIGxpbms7CiYjNDM7CWludCBlcnIsIG1hcDsKJiM0MzsKJiM0MzsJc3RycCA9IHRlc3Rfc29ja21hcF9zdHJwX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihzdHJwLCAmIzM0O3Rlc3Rfc29ja21hcF9zdHJwX19vcGVuX2FuZF9sb2FkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwltYXAgPSBicGZfbWFwX19mZChzdHJwLSZndDttYXBzLnNvY2tfbWFwKTsKJiM0MzsJcGFyc2VyX21vZCA9IGJwZl9wcm9ncmFtX19mZChzdHJwLSZndDtwcm9ncy5wcm9nX3NrYl9wYXJzZXJfcmVzaXplKTsKJiM0MzsJcGFyc2VyX3JvID0gYnBmX3Byb2dyYW1fX2ZkKHN0cnAtJmd0O3Byb2dzLnByb2dfc2tiX3BhcnNlcik7CiYjNDM7CiYjNDM7CWVyciA9IGJwZl9wcm9nX2F0dGFjaChwYXJzZXJfbW9kLCBtYXAsIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiwgMCk7CiYjNDM7CUFTU0VSVF9FUlIoZXJyLCAmIzM0O2JwZl9wcm9nX2F0dGFjaCBwYXJzZXJfbW9kJiMzNDspOwomIzQzOwomIzQzOwlsaW5rID0gYnBmX2xpbmtfY3JlYXRlKHBhcnNlcl9ybywgbWFwLCBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVIsIE5VTEwpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShsaW5rLCAwLCAmIzM0O2JwZl9saW5rX2NyZWF0ZSBwYXJzZXJfcm8mIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJZXJyID0gYnBmX2xpbmtfdXBkYXRlKGxpbmssIHBhcnNlcl9tb2QsIE5VTEwpOwomIzQzOwlBU1NFUlRfRVJSKGVyciwgJiMzNDticGZfbGlua191cGRhdGUgcGFyc2VyX21vZCYjMzQ7KTsKJiM0MztvdXQ6CiYjNDM7CWlmIChsaW5rICZndDs9IDApCiYjNDM7CQljbG9zZShsaW5rKTsKJiM0MzsJdGVzdF9zb2NrbWFwX3N0cnBfX2Rlc3Ryb3koc3RycCk7CiYjNDM7fQomIzQzOwogdm9pZCB0ZXN0X3NvY2ttYXBfc3RycCh2b2lkKQogewogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7c29ja21hcCBzdHJwIHRjcCBwYXNzJiMzNDspKQpAQCAtNDUxLDQgJiM0Mzs0ODAsNiBAQCB2b2lkIHRlc3Rfc29ja21hcF9zdHJwKHZvaWQpCiAJCXRlc3Rfc29ja21hcF9zdHJwX211bHRpcGxlX3BrdChBRl9JTkVULCBTT0NLX1NUUkVBTSk7CiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtzb2NrbWFwIHN0cnAgdGNwIGRpc3BhdGNoJiMzNDspKQogCQl0ZXN0X3NvY2ttYXBfc3RycF9kaXNwYXRjaF9wa3QoQUZfSU5FVCwgU09DS19TVFJFQU0pOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3NvY2ttYXAgc3RycCBwYXJzZXIgcmVqZWN0IHBrdCBtb2QmIzM0OykpCiYjNDM7CQl0ZXN0X3NvY2ttYXBfc3RycF9wYXJzZXJfcmVqZWN0KCk7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja21hcF9wYXJzZV9wcm9nLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja21hcF9wYXJzZV9wcm9nLmMKaW5kZXggYzlhYmZlM2ExMWFmYWEuLjU2ZTlhZWJmMDVmMjRjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja21hcF9wYXJzZV9wcm9nLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2ttYXBfcGFyc2VfcHJvZy5jCkBAIC01LDI4ICYjNDM7NSw2IEBACiBTRUMoJiMzNDtza19za2IxJiMzNDspCiBpbnQgYnBmX3Byb2cxKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKIHsKLQl2b2lkICpkYXRhX2VuZCA9ICh2b2lkICopKGxvbmcpIHNrYi0mZ3Q7ZGF0YV9lbmQ7Ci0Jdm9pZCAqZGF0YSA9ICh2b2lkICopKGxvbmcpIHNrYi0mZ3Q7ZGF0YTsKLQlfX3U4ICpkID0gZGF0YTsKLQlpbnQgZXJyOwotCi0JaWYgKGRhdGEgJiM0MzsgMTAgJmd0OyBkYXRhX2VuZCkgewotCQllcnIgPSBicGZfc2tiX3B1bGxfZGF0YShza2IsIDEwKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBTS19EUk9QOwotCi0JCWRhdGFfZW5kID0gKHZvaWQgKikobG9uZylza2ItJmd0O2RhdGFfZW5kOwotCQlkYXRhID0gKHZvaWQgKikobG9uZylza2ItJmd0O2RhdGE7Ci0JCWlmIChkYXRhICYjNDM7IDEwICZndDsgZGF0YV9lbmQpCi0JCQlyZXR1cm4gU0tfRFJPUDsKLQl9Ci0KLQkvKiBUaGlzIHdyaXRlL3JlYWQgaXMgYSBiaXQgcG9pbnRsZXNzIGJ1dCB0ZXN0cyB0aGUgdmVyaWZpZXIgYW5kCi0JICogc3RycGFyc2VyIGhhbmRsZXIgZm9yIHJlYWQvd3JpdGUgcGt0IGRhdGEgYW5kIGFjY2VzcyBpbnRvIHNrCi0JICogZmllbGRzLgotCSAqLwotCWQgPSBkYXRhOwotCWRbN10gPSAxOwogCXJldHVybiBza2ItJmd0O2xlbjsKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX3N0cnAuYwppbmRleCBkZGUzZDViZWM1MTU0YS4uZmU4OGZhNmQ0MGJjNTAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfc3RycC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfc3RycC5jCkBAIC01MCw0ICYjNDM7NTAsMTEgQEAgaW50IHByb2dfc2tiX3BhcnNlcl9wYXJ0aWFsKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKIAlyZXR1cm4gMTA7CiB9CiAKJiM0MztTRUMoJiMzNDtza19za2Ivc3RyZWFtX3BhcnNlciYjMzQ7KQomIzQzO2ludCBwcm9nX3NrYl9wYXJzZXJfcmVzaXplKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CWJwZl9za2JfY2hhbmdlX3RhaWwoc2tiLCBza2ItJmd0O2xlbiwgMCk7CiYjNDM7CXJldHVybiBza2ItJmd0O2xlbjsKJiM0Mzt9CiYjNDM7CiBjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAzOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NDQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTb2NrbWFwIEJQRiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXTigJlzIG1ha2luZyBzb21lIGludGVyZXN0aW5nIGNoYW5nZXMgdG8gYG5ldC9jb3JlL3NvY2tfbWFwLmNgIGFuZCBzb21lIHJlbGF0ZWQgQlBGIHNlbGZ0ZXN0cy4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiBwb2ludCBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIHRoaXMgbmV3IGZ1bmN0aW9uLCBgc29ja19tYXBfcHJvZ19hdHRhY2hfY2hlY2tgLiBUaGUgcHVycG9zZSBvZiB0aGlzIGNoZWNrLCBmcm9tIHdoYXQgSSBjYW4gc2VlLCBpcyB0byBleGFtaW5lIEJQRiBwcm9ncmFtcyB0aGF0IGFyZSBiZWluZyBhdHRhY2hlZCB0byBhIHNvY2ttYXAgYXMgYSBzdHJlYW0gcGFyc2VyIHVzaW5nIGBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVJgLiBTcGVjaWZpY2FsbHksIGl0IGNoZWNrcyBpZiB0aGlzIEJQRiBwcm9ncmFtIGF0dGVtcHRzIHRvIG1vZGlmeSB0aGUgU0tCIGRhdGEgdXNpbmcgYHByb2ctJmd0O2F1eC0mZ3Q7Y2hhbmdlc19wa3RfZGF0YWAuIElmIGl0IGRvZXMsIHRoZSBuZXcgZnVuY3Rpb24gaXMgdGhyb3dpbmcgYSBgLUVJTlZBTGAgZXJyb3IuIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUga2VybmVs4oCZcyBCUEYgc3Vic3lzdGVtLgoKVGhlIHBhdGNoIHNlZW1zIHRvIGFsc28gYmUgdG91Y2hpbmcgYHNvY2tfbWFwX3Byb2dfdXBkYXRlYCBhbmQgYHNvY2tfbWFwX2xpbmtfdXBkYXRlX3Byb2dgLCBzbyBJIHNob3VsZCBrZWVwIGFuIGV5ZSBvbiB0aG9zZS4gVGhpcyBsb29rcyBsaWtlIGEgZGVsaWJlcmF0ZSBwcmV2ZW50YXRpdmUgbWVhc3VyZSwgc3BlY2lmaWNhbGx5IHByZXZlbnRpbmcgdGhlIGF0dGFjaG1lbnQgb2YgY2VydGFpbiBCUEYgcHJvZ3JhbXMgdG8gc29ja21hcHMuCgpOb3csIHRoZSBxdWVzdGlvbiBpcywgaG93IGVhc2lseSBjYW4gdGhpcyBiZSByZWFjaGVkPyBEZWZpbml0ZWx5IHJlYWNoYWJsZSwgdmlhIEJQRiBzeXNjYWxscyBsaWtlIGBicGZfcHJvZ19hdHRhY2hgIG9yIGBicGZfbGlua191cGRhdGVgLiBBbmQgc2luY2UgaXTigJlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGtlcm5lbCwgaXQgYWJzb2x1dGVseSBuZWVkcyBzb21lIGdvb2QgZnV6emluZy4KCk15IHByaW1hcnkgZm9jdXMgcG9pbnRzIGhlcmUgYXJlIGdvaW5nIHRvIGJlIHRob3NlIG1vZGlmaWVkIGZ1bmN0aW9uczogYHNvY2tfbWFwX3Byb2dfYXR0YWNoX2NoZWNrYCAodGhlIG5ldyBvbmUpLCBgc29ja19tYXBfcHJvZ191cGRhdGVgLCBhbmQgYHNvY2tfbWFwX2xpbmtfdXBkYXRlX3Byb2dgLiBJJiMzOTtsbCB3YW50IHRvIGdvIGRpZyBpbnRvIHRob3NlIGZ1bmN0aW9ucyBpbiBgbmV0L2NvcmUvc29ja19tYXAuY2AgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzIGluIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAzOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvY2tfbWFwX3Byb2dfdXBkYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29ja19tYXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrX21hcC5jPTMyPXN0YXRpYyBERUZJTkVfTVVURVgoc29ja21hcF9tdXRleCk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTMzLVxubmV0L2NvcmUvc29ja19tYXAuYzozNDpzdGF0aWMgaW50IHNvY2tfbWFwX3Byb2dfdXBkYXRlKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzUtXHRcdFx0XHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZCwgc3RydWN0IGJwZl9saW5rICpsaW5rLFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9Njg9aW50IHNvY2tfbWFwX2dldF9mcm9tX2ZkKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy04MC1cdG11dGV4X2xvY2soXHUwMDI2c29ja21hcF9tdXRleCk7XG5uZXQvY29yZS9zb2NrX21hcC5jOjgxOlx0cmV0ID0gc29ja19tYXBfcHJvZ191cGRhdGUobWFwLCBwcm9nLCBOVUxMLCBOVUxMLCBhdHRyLVx1MDAzZWF0dGFjaF90eXBlKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODItXHRtdXRleF91bmxvY2soXHUwMDI2c29ja21hcF9tdXRleCk7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz04Nj1pbnQgc29ja19tYXBfcHJvZ19kZXRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSlcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTEwOS1cdG11dGV4X2xvY2soXHUwMDI2c29ja21hcF9tdXRleCk7XG5uZXQvY29yZS9zb2NrX21hcC5jOjExMDpcdHJldCA9IHNvY2tfbWFwX3Byb2dfdXBkYXRlKG1hcCwgTlVMTCwgcHJvZywgTlVMTCwgYXR0ci1cdTAwM2VhdHRhY2hfdHlwZSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTExMS1cdG11dGV4X3VubG9jayhcdTAwMjZzb2NrbWFwX211dGV4KTtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTE1MTg9c3RhdGljIGludCBzb2NrX21hcF9wcm9nX2F0dGFjaF9jaGVjayhlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHRhY2hfdHlwZSxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE1MzQtICovXG5uZXQvY29yZS9zb2NrX21hcC5jOjE1MzU6c3RhdGljIGludCBzb2NrX21hcF9wcm9nX3VwZGF0ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG5uZXQvY29yZS9zb2NrX21hcC5jLTE1MzYtXHRcdFx0XHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZCwgc3RydWN0IGJwZl9saW5rICpsaW5rLFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTc0MD1zdGF0aWMgdm9pZCBzb2NrX21hcF9saW5rX3JlbGVhc2Uoc3RydWN0IGJwZl9saW5rICpsaW5rKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTc0Ny1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTc0ODpcdFdBUk5fT05fT05DRShzb2NrX21hcF9wcm9nX3VwZGF0ZShzb2NrbWFwX2xpbmstXHUwMDNlbWFwLCBOVUxMLCBsaW5rLVx1MDAzZXByb2csIGxpbmssXG5uZXQvY29yZS9zb2NrX21hcC5jLTE3NDktXHRcdFx0XHRcdCAgbGluay1cdTAwM2VhdHRhY2hfdHlwZSkpO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTg3Mz1pbnQgc29ja19tYXBfbGlua19jcmVhdGUoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE5MDktXHRtdXRleF9sb2NrKFx1MDAyNnNvY2ttYXBfbXV0ZXgpO1xubmV0L2NvcmUvc29ja19tYXAuYzoxOTEwOlx0cmV0ID0gc29ja19tYXBfcHJvZ191cGRhdGUobWFwLCBwcm9nLCBOVUxMLCBcdTAwMjZzb2NrbWFwX2xpbmstXHUwMDNlbGluaywgYXR0YWNoX3R5cGUpO1xubmV0L2NvcmUvc29ja19tYXAuYy0xOTExLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnNvY2ttYXBfbXV0ZXgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAzOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNDQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucywgcHV0dGluZyBteXNlbGYgaW4gdGhlIHJvbGUgb2YgdGhpbmtpbmcgdGhyb3VnaCB0aGlzOgoKKipSZWZpbmluZyB0aGUgRm9jdXM6IFNvY2sgTWFwcyBhbmQgUHJvZ3JhbSBVcGRhdGVzKioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBJJiMzOTttIHJldmlld2luZyB0aGUgcmVjZW50IGNoYW5nZXMsIGFuZCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHdoZXJlIHdlIGNhbiBiZXN0IGFwcGx5IG91ciBuZXcgYEZvY3VzU3ltYm9sc2AgYXBwcm9hY2guIExvb2tpbmcgYXQgdGhlc2Ugc29ja2V0IG1hcCB1cGRhdGVz4oCmIGhtbSwgYHNvY2tfbWFwX3Byb2dfdXBkYXRlYCBhbmQgYHNvY2tfbWFwX2xpbmtfdXBkYXRlX3Byb2dgIGltbWVkaWF0ZWx5IGp1bXAgb3V0IGFzIHN0cm9uZyBwb3NzaWJpbGl0aWVzLiBUaGV5IHNlZW0gbGlrZSBwcmltZSBjYW5kaWRhdGVzIGZvciBkZWVwZXIgYW5hbHlzaXMsIGdpdmVuIHRoZWlyIHJvbGUgaW4gY29ubmVjdGluZyBwcm9ncmFtcyB0byBzb2NrZXQgbWFwcy4KCk9rYXksIGxldCYjMzk7cyBzdGFydCB3aXRoIGBzb2NrX21hcF9saW5rX3VwZGF0ZV9wcm9nYC4gSSB3YW50IHRvIGRpZyBpbnRvIHRoYXQgb25lIGZpcnN0OyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdGhlcmUgYXQgYSBmaW5lciBsZXZlbC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAzOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvY2tfbWFwX2xpbmtfdXBkYXRlX3Byb2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrX21hcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmM9MTc2Mz1zdGF0aWMgdm9pZCBzb2NrX21hcF9saW5rX2RlYWxsb2Moc3RydWN0IGJwZl9saW5rICpsaW5rKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTc3MS0gKi9cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTc3MjpzdGF0aWMgaW50IHNvY2tfbWFwX2xpbmtfdXBkYXRlX3Byb2coc3RydWN0IGJwZl9saW5rICpsaW5rLFxubmV0L2NvcmUvc29ja19tYXAuYy0xNzczLVx0XHRcdFx0ICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz0xODY0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIHNvY2tfbWFwX2xpbmtfb3BzID0ge1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg2Ny1cdC5kZXRhY2ggPSBzb2NrX21hcF9saW5rX2RldGFjaCxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTg2ODpcdC51cGRhdGVfcHJvZyA9IHNvY2tfbWFwX2xpbmtfdXBkYXRlX3Byb2csXG5uZXQvY29yZS9zb2NrX21hcC5jLTE4NjktXHQuZmlsbF9saW5rX2luZm8gPSBzb2NrX21hcF9saW5rX2ZpbGxfaW5mbyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAwMzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjYzCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipIdW50aW5nIERvd24gVGhvc2UgS2NvbmZpZyBPcHRpb25zIGZvciBgc29ja19tYXAuY2AqKgoKQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byBwaW5wb2ludCB0aGUgS2NvbmZpZyBvcHRpb25zIHRoYXQgZ292ZXJuIHRoZSBiZWhhdmlvciwgb3IgcGVyaGFwcyBldmVuIHRoZSB2ZXJ5IGV4aXN0ZW5jZSwgb2YgYHNvY2tfbWFwLmNgLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBzeXN0ZW1hdGljIGFwcHJvYWNoLiBGaXJzdCwgSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBwZXJmb3JtIGEgYnJvYWQgc2VhcmNoIHVzaW5nIGBncmVwYCwgYGZpbmRgLCBvciBldmVuIGEgbW9yZSBzb3BoaXN0aWNhdGVkIHRvb2wgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlIHRyZWUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGRpcmVjdCByZWZlcmVuY2VzIHRvIHRoZSBmaWxlIG5hbWUgaXRzZWxmLCBsaWtlICYjMzQ7c29ja19tYXAuYyYjMzQ7LCBtYXliZSBldmVuICYjMzQ7Q09ORklHX1NPTUVUSElOR19TT0NLX01BUCYjMzQ7LiBJJiMzOTtsbCBiZSBtaW5kZnVsIG9mIGNhc2Ugc2Vuc2l0aXZpdHkgYW5kIHRyeSBhIGZldyB2YXJpYXRpb25zLCBqdXN0IHRvIGJlIHRob3JvdWdoLgoKTmV4dCwgSSYjMzk7bGwgY29uc2lkZXIgdGhhdCB0aGUgZmlsZSBtaWdodCBiZSBwYXJ0IG9mIGEgbGFyZ2VyIHN1YnN5c3RlbS4gUGVyaGFwcyBpdCYjMzk7cyB1bmRlciB0aGUgdW1icmVsbGEgb2YgbmV0d29ya2luZywgdGhlIEJQRiBpbmZyYXN0cnVjdHVyZSwgb3Igc29tZXRoaW5nIHJlbGF0ZWQgdG8gc29ja2V0IG9wZXJhdGlvbnMuIElmIG15IGluaXRpYWwgc2VhcmNoIGlzIHRvbyBicm9hZCwgSSYjMzk7bGwgbmFycm93IGl0IGRvd24gYmFzZWQgb24gbXkgcHJpb3Iga25vd2xlZGdlIGFuZCBjb250ZXh0LiBJJiMzOTtsbCBmb3JtdWxhdGUgYSBtb3JlIHRhcmdldGVkIHNlYXJjaC4gRm9yIGluc3RhbmNlLCBJIG1pZ2h0IGxvb2sgZm9yIEtjb25maWcgc3ltYm9scyB0aGF0IGRlYWwgd2l0aCBzb2NrZXQgbWFwcywgQlBGIHByb2dyYW0gc3VwcG9ydCwgb3Igc3BlY2lmaWMgbmV0d29ya2luZyBmZWF0dXJlcyB0aGF0IGNvdWxkIHVzZSB0aGlzIGNvbXBvbmVudC4KCkkmIzM5O2xsIGFsc28ga2VlcCBpbiBtaW5kIHRoYXQgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyBtaWdodCBub3QgZGlyZWN0bHkgbWVudGlvbiBgc29ja19tYXAuY2AsIGJ1dCByYXRoZXIgY29udHJvbCB0aGUgaW5jbHVzaW9uIG9mIGEgbGFyZ2VyIG1vZHVsZSBvciBmdW5jdGlvbmFsaXR5IHRoYXQgaW5kaXJlY3RseSBicmluZ3MgaXQgaW4uIFNvLCBJIG5lZWQgdG8gbG9vayBmb3IgaW5kaXJlY3QgZGVwZW5kZW5jaWVzLiBJIG1pZ2h0IGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGl0cyBwdXJwb3NlLiBUaGVuLCBieSBsb29raW5nIGF0IHRoZSBwdXJwb3NlIG9mIHRoZSBjb2RlLCBJIGNhbiBtYWtlIHNvbWUgaW5mZXJlbmNlcyB0byBzZWFyY2ggdGhlIGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgb3IgdGhlIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIGZvciBoaW50cyBhYm91dCByZWxldmFudCBLY29uZmlnIHN5bWJvbHMuCgpGaW5hbGx5LCBJJiMzOTtsbCBkb3VibGUtY2hlY2sgbXkgZmluZGluZ3MuIEkmIzM5O2xsIHJlYWQgYW55IGRvY3VtZW50YXRpb24gc3Vycm91bmRpbmcgdGhlIHBvc3NpYmxlIEtjb25maWcgc3ltYm9scyB0byB2ZXJpZnkgdGhlaXIgZXhhY3QgZnVuY3Rpb24gYW5kIGltcGFjdC4gSSYjMzk7bGwgdmVyaWZ5IHRoYXQgbXkgY29uY2x1c2lvbnMgYWxpZ24gd2l0aCB0aGUgYWN0dWFsIGJ1aWxkIHByb2Nlc3MgYW5kIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAwMzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2NrX21hcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL01ha2VmaWxlPTQ0PW9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICYjNDM7PSBza21zZy5vXG5uZXQvY29yZS9NYWtlZmlsZTo0NTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzb2NrX21hcC5vXG5uZXQvY29yZS9NYWtlZmlsZS00Ni1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfc2tfc3RvcmFnZS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIyOQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29uZmlndXJhdGlvbi4gVGhlIGtleSBmbGFnIEkgc2VlIGlzIGBDT05GSUdfQlBGX1NZU0NBTExgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGF0IGVsc2UgaXMgcG90ZW50aWFsbHkgcmVsZXZhbnQ/JiMzNDsgTGV0JiMzOTtzIHNlZS4uLiBpcyBgQ09ORklHX05FVF9TT0NLX01TR2AgYWxzbyBpbiBwbGF5IGhlcmU/IEkgbmVlZCB0byBjb25zaWRlciBhbGwgdGhlIHBpZWNlcy4KCkFoLCBJIHNlZS4uLiBgc29ja19tYXAub2AgZ2V0cyBjb21waWxlZCBpZiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlbmFibGVkLiBUaGF0IG1ha2VzIHNlbnNlLCBhIGtleSBidWlsZGluZyBibG9jay4gTm93LCBJIGhhdmUgdG8ga2VlcCB0aGlua2luZyB0aHJvdWdoIHRoaXMuIElzIGBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVJgIGRlcGVuZGVudCBvbiBhbnl0aGluZyBlbHNlIHdpdGhpbiB0aGlzIGNvbmZpZ3VyYXRpb24gZWNvc3lzdGVtPyBXaGF0IGFyZSBpdHMgb3RoZXIgZGVwZW5kZW5jaWVzIGFuZCBpbXBsaWNhdGlvbnM/IEkgbmVlZCB0byB0cmFjZSB0aGlzIGRlcGVuZGVuY3kgY2hhaW4gdG8gYmUgY2VydGFpbiBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDM6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYnBmL2xpYmJwZi9wcm9ncmFtX3R5cGVzLnJzdD0xOD1kZXNjcmliZWQgaW4gbW9yZSBkZXRhaWwgaW4gdGhlIGZvb3Rub3Rlcy5cbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9saWJicGYvcHJvZ3JhbV90eXBlcy5yc3QtMTc5LSYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0mIzQzO1xuRG9jdW1lbnRhdGlvbi9icGYvbGliYnBmL3Byb2dyYW1fdHlwZXMucnN0OjE4MDp8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYGBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVJgYCAgICAgICAgICAgfCBgYHNrX3NrYi9zdHJlYW1fcGFyc2VyYGAgICAgICAgICB8ICAgICAgICAgICB8XG5Eb2N1bWVudGF0aW9uL2JwZi9saWJicGYvcHJvZ3JhbV90eXBlcy5yc3QtMTgxLSYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0mIzQzO1xuLS1cbkRvY3VtZW50YXRpb24vYnBmL21hcF9zb2NrbWFwLnJzdD01Nz1UaGUgYXR0YWNoIHR5cGVzIGZvciB0aGUgbWFwIHByb2dyYW1zIGFyZTpcbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfc29ja21hcC5yc3QtNTktLSBgYG1zZ19wYXJzZXJgYCBwcm9ncmFtIC0gYGBCUEZfU0tfTVNHX1ZFUkRJQ1RgYC5cbkRvY3VtZW50YXRpb24vYnBmL21hcF9zb2NrbWFwLnJzdDo2MDotIGBgc3RyZWFtX3BhcnNlcmBgIHByb2dyYW0gLSBgYEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUmBgLlxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3NvY2ttYXAucnN0LTYxLS0gYGBzdHJlYW1fdmVyZGljdGBgIHByb2dyYW0gLSBgYEJQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1RgYC5cbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfc29ja21hcC5yc3Q9NDQ0PXZlcmRpY3QgcHJvZ3JhbSwgYXMgd2VsbCBhcyBhZGQgYSBzb2NrZXQgZW50cnkuXG4tLVxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3NvY2ttYXAucnN0LTQ1OC1cbkRvY3VtZW50YXRpb24vYnBmL21hcF9zb2NrbWFwLnJzdDo0NTk6XHRcdGVyciA9IGJwZl9wcm9nX2F0dGFjaChwYXJzZV9wcm9nX2ZkLCBtYXAsIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiwgMCk7XG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfc29ja21hcC5yc3QtNDYwLVx0XHRpZiAoZXJyKXtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTA5OT1lbnVtIGJwZl9hdHRhY2hfdHlwZSB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTExMDMtXHRCUEZfQ0dST1VQX1NPQ0tfT1BTLFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjExMDQ6XHRCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVIsXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTEwNS1cdEJQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1QsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NDQ1Mz1hdHRhY2hfdHlwZV90b19wcm9nX3R5cGUoZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDQ4Ny1cdFx0cmV0dXJuIEJQRl9QUk9HX1RZUEVfU0tfTVNHO1xua2VybmVsL2JwZi9zeXNjYWxsLmM6NDQ4ODpcdGNhc2UgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSOlxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDQ4OS1cdGNhc2UgQlBGX1NLX1NLQl9TVFJFQU1fVkVSRElDVDpcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz00NzczPXN0YXRpYyBpbnQgYnBmX3Byb2dfcXVlcnkoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDgxOC1cdFx0cmV0dXJuIG5ldG5zX2JwZl9wcm9nX3F1ZXJ5KGF0dHIsIHVhdHRyKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQ4MTk6XHRjYXNlIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUjpcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ4MjAtXHRjYXNlIEJQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1Q6XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz0xNDc1PXN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ19saW5rX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Byb2cgKioqcHByb2csXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNDkwLSNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTQ5MTpcdGNhc2UgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSOlxubmV0L2NvcmUvc29ja19tYXAuYy0xNDkyLVx0XHRjdXJfcHByb2cgPSBcdTAwMjZwcm9ncy1cdTAwM2VzdHJlYW1fcGFyc2VyO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTUxOD1zdGF0aWMgaW50IHNvY2tfbWFwX3Byb2dfYXR0YWNoX2NoZWNrKGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlLFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUyMS1cdC8qIEEgc3RyZWFtIHBhcnNlciBtdXN0IG5vdCBtb2RpZnkgdGhlIHNrYiwgb25seSBtZWFzdXJlIGl0LiAqL1xubmV0L2NvcmUvc29ja19tYXAuYzoxNTIyOlx0aWYgKHByb2cgXHUwMDI2XHUwMDI2IGF0dGFjaF90eXBlID09IEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiBcdTAwMjZcdTAwMjZcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUyMy1cdCAgICBwcm9nLVx1MDAzZWF1eC1cdTAwM2VjaGFuZ2VzX3BrdF9kYXRhKVxuLS1cbnRvb2xzL2JwZi9icGZ0b29sL3Byb2cuYz00Nz1zdGF0aWMgY29uc3QgYm9vbCBhdHRhY2hfdHlwZXNbXSA9IHtcbnRvb2xzL2JwZi9icGZ0b29sL3Byb2cuYzo0ODpcdFtCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVJdID0gdHJ1ZSxcbnRvb2xzL2JwZi9icGZ0b29sL3Byb2cuYy00OS1cdFtCUEZfU0tfU0tCX1NUUkVBTV9WRVJESUNUXSA9IHRydWUsXG4tLVxudG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jPTU5PXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYXR0YWNoX3R5cGVfc3RyaW5nc1tdID0ge1xudG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jOjYwOlx0W0JQRl9TS19TS0JfU1RSRUFNX1BBUlNFUl0gPSBcJiMzNDtzdHJlYW1fcGFyc2VyXCYjMzQ7LFxudG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jLTYxLVx0W0JQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1RdID0gXCYjMzQ7c3RyZWFtX3ZlcmRpY3RcJiMzNDssXG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTEwOTk9ZW51bSBicGZfYXR0YWNoX3R5cGUge1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMTAzLVx0QlBGX0NHUk9VUF9TT0NLX09QUyxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMTA0Olx0QlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSLFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTExMDUtXHRCUEZfU0tfU0tCX1NUUkVBTV9WRVJESUNULFxuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmM9Nzk9c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBhdHRhY2hfdHlwZV9uYW1lW10gPSB7XG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYy0xMDctXHRbQlBGX0NHUk9VUF9TRVRTT0NLT1BUXVx0XHQ9IFwmIzM0O2Nncm91cF9zZXRzb2Nrb3B0XCYjMzQ7LFxudG9vbHMvbGliL2JwZi9saWJicGYuYzoxMDg6XHRbQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSXVx0PSBcJiMzNDtza19za2Jfc3RyZWFtX3BhcnNlclwmIzM0OyxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMTA5LVx0W0JQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1RdXHQ9IFwmIzM0O3NrX3NrYl9zdHJlYW1fdmVyZGljdFwmIzM0Oyxcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTEwMDc2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3NlY19kZWYgc2VjdGlvbl9kZWZzW10gPSB7XG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYy0xMDE1Mi1cdFNFQ19ERUYoXCYjMzQ7c29ja29wc1wmIzM0OyxcdFx0U09DS19PUFMsIEJQRl9DR1JPVVBfU09DS19PUFMsIFNFQ19BVFRBQ0hBQkxFX09QVCksXG50b29scy9saWIvYnBmL2xpYmJwZi5jOjEwMTUzOlx0U0VDX0RFRihcJiMzNDtza19za2Ivc3RyZWFtX3BhcnNlclwmIzM0OyxcdFNLX1NLQiwgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSLCBTRUNfQVRUQUNIQUJMRV9PUFQpLFxudG9vbHMvbGliL2JwZi9saWJicGYuYy0xMDE1NC1cdFNFQ19ERUYoXCYjMzQ7c2tfc2tiL3N0cmVhbV92ZXJkaWN0XCYjMzQ7LFNLX1NLQiwgQlBGX1NLX1NLQl9TVFJFQU1fVkVSRElDVCwgU0VDX0FUVEFDSEFCTEVfT1BUKSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX3NvY2ttYXAuYz0yNDc9c3RhdGljIGludCBzZXR1cF9yeF9zb2NrbWFwKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9zb2NrbWFwLmMtMjU5LVx0XHRjdHguc2tlbC1cdTAwM2Vic3MtXHUwMDNlcGt0X3NpemUgPSBjdHguc3RycF9zaXplO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9zb2NrbWFwLmM6MjYwOlx0XHRlcnIgPSBicGZfcHJvZ19hdHRhY2gocGFyc2VyLCBtYXAsIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX3NvY2ttYXAuYy0yNjEtXHRcdGlmIChlcnIpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2VjdGlvbl9uYW1lcy5jPTIwPXN0YXRpYyBzdHJ1Y3Qgc2VjX25hbWVfdGVzdCB0ZXN0c1tdID0ge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlY3Rpb25fbmFtZXMuYy04MS1cdFx0XCYjMzQ7c2tfc2tiL3N0cmVhbV9wYXJzZXJcJiMzNDssXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZWN0aW9uX25hbWVzLmM6ODI6XHRcdHswLCBCUEZfUFJPR19UWVBFX1NLX1NLQiwgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSfSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlY3Rpb25fbmFtZXMuYzo4MzpcdFx0ezAsIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUn0sXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZWN0aW9uX25hbWVzLmMtODQtXHR9LFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuYz0xMTg3PXN0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF9jb3BpZWRfc2VxKGJvb2wgc3RycClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmMtMTIxMC1cdFx0cHJvZyA9IHNrZWwtXHUwMDNlcHJvZ3MucHJvZ19za2JfdmVyZGljdF9pbmdyZXNzX3N0cnA7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmM6MTIxMTpcdFx0ZXJyID0gYnBmX3Byb2dfYXR0YWNoKGJwZl9wcm9ncmFtX19mZChwcm9nKSwgbWFwLCBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVIsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jLTEyMTItXHRcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7YnBmX3Byb2dfYXR0YWNoIHBhcnNlclwmIzM0OykpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jPTEzNzY9dm9pZCB0ZXN0X3NvY2ttYXBfYmFzaWModm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmMtMTQwOC1cdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3NvY2ttYXAgc3RyZWFtX3BhcnNlciBwcm9ncyBxdWVyeVwmIzM0OykpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmM6MTQwOTpcdFx0dGVzdF9zb2NrbWFwX3Byb2dzX3F1ZXJ5KEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUik7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmMtMTQxMC1cdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3NvY2ttYXAgc3RyZWFtX3ZlcmRpY3QgcHJvZ3MgcXVlcnlcJiMzNDspKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfbGlzdGVuLmM9NzI0PXN0YXRpYyB2b2lkIHRlc3Rfc2tiX3JlZGlyX3RvX2Nvbm5lY3RlZChzdHJ1Y3QgdGVzdF9zb2NrbWFwX2xpc3RlbiAqc2tlbCxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2xpc3Rlbi5jLTczMy1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfbGlzdGVuLmM6NzM0Olx0ZXJyID0geGJwZl9wcm9nX2F0dGFjaChwYXJzZXIsIHNvY2tfbWFwLCBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVIsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9saXN0ZW4uYy03MzUtXHRpZiAoZXJyKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfbGlzdGVuLmMtNzQ1LWRldGFjaDpcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfbGlzdGVuLmM6NzQ2Olx0eGJwZl9wcm9nX2RldGFjaDIocGFyc2VyLCBzb2NrX21hcCwgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfbGlzdGVuLmMtNzQ3LX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2xpc3Rlbi5jPTg0ND1zdGF0aWMgdm9pZCB0ZXN0X3NrYl9yZWRpcl90b19saXN0ZW5pbmcoc3RydWN0IHRlc3Rfc29ja21hcF9saXN0ZW4gKnNrZWwsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9saXN0ZW4uYy04NTMtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2xpc3Rlbi5jOjg1NDpcdGVyciA9IHhicGZfcHJvZ19hdHRhY2gocGFyc2VyLCBzb2NrX21hcCwgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfbGlzdGVuLmMtODU1LVx0aWYgKGVycilcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2xpc3Rlbi5jLTg2NS1kZXRhY2g6XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2xpc3Rlbi5jOjg2NjpcdHhicGZfcHJvZ19kZXRhY2gyKHBhcnNlciwgc29ja19tYXAsIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUik7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2xpc3Rlbi5jLTg2Ny19XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9saXN0ZW4uYz05NDg9c3RhdGljIHZvaWQgdGVzdF9za2JfcmVkaXJfcGFydGlhbChzdHJ1Y3QgdGVzdF9zb2NrbWFwX2xpc3RlbiAqc2tlbCxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2xpc3Rlbi5jLTk1Ny1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfbGlzdGVuLmM6OTU4Olx0ZXJyID0geGJwZl9wcm9nX2F0dGFjaChwYXJzZXIsIHNvY2tfbWFwLCBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVIsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9saXN0ZW4uYy05NTktXHRpZiAoZXJyKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfbGlzdGVuLmMtOTY5LWRldGFjaDpcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfbGlzdGVuLmM6OTcwOlx0eGJwZl9wcm9nX2RldGFjaDIocGFyc2VyLCBzb2NrX21hcCwgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfbGlzdGVuLmMtOTcxLX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuYz00Nj1zdGF0aWMgc3RydWN0IHRlc3Rfc29ja21hcF9zdHJwICpzb2NrbWFwX3N0cnBfaW5pdChpbnQgKm91dF9tYXAsIGJvb2wgcGFzcyxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuYy02NS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jOjY2Olx0ZXJyID0gYnBmX3Byb2dfYXR0YWNoKHBhcnNlciwgKm91dF9tYXAsIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuYy02Ny1cdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7YnBmX3Byb2dfYXR0YWNoIHN0cmVhbSBwYXJzZXJcJiMzNDspKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jPTQzND1zdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXBfc3RycF9wYXJzZXJfcmVqZWN0KHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmMtNDQ3LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmM6NDQ4Olx0ZXJyID0gYnBmX3Byb2dfYXR0YWNoKHBhcnNlcl9tb2QsIG1hcCwgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jLTQ0OS1cdEFTU0VSVF9FUlIoZXJyLCBcJiMzNDticGZfcHJvZ19hdHRhY2ggcGFyc2VyX21vZFwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuYy00NTAtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuYzo0NTE6XHRsaW5rID0gYnBmX2xpbmtfY3JlYXRlKHBhcnNlcl9ybywgbWFwLCBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVIsIE5VTEwpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmMtNDUyLVx0aWYgKCFBU1NFUlRfR0UobGluaywgMCwgXCYjMzQ7YnBmX2xpbmtfY3JlYXRlIHBhcnNlcl9yb1wmIzM0OykpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jPTY2NT1zdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXAodW5zaWduZWQgaW50IHRhc2tzLCB2b2lkICpkYXRhKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYy03ODMtXHQvKiBUZXN0IGF0dGFjaGluZy9kZXRhY2hpbmcgYmFkIGZkcyAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jOjc4NDpcdGVyciA9IGJwZl9wcm9nX2F0dGFjaCgtMSwgZmQsIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmMtNzg1LVx0aWYgKCFlcnIpIHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmMtODA3LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jOjgwODpcdGVyciA9IGJwZl9wcm9nX2RldGFjaChmZCwgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYy04MDktXHRpZiAoIWVycikge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYy05MDItXHRlcnIgPSBicGZfcHJvZ19hdHRhY2gocGFyc2VfcHJvZywgbWFwX2ZkX2JyZWFrLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jOjkwMzpcdFx0XHQgICAgICBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVIsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jLTkwNC1cdGlmICghZXJyKSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jLTkwOS1cdGVyciA9IGJwZl9wcm9nX2F0dGFjaChwYXJzZV9wcm9nLCBtYXBfZmRfcngsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmM6OTEwOlx0XHQgICAgICBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVIsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jLTkxMS1cdGlmIChlcnIpIHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmMtMTA1MC1cdGVyciA9IGJwZl9wcm9nX2F0dGFjaChwYXJzZV9wcm9nLCBmZCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYzoxMDUxOlx0XHRcdCAgICAgIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmMtMTA1Mi1cdGlmIChlcnIpIHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmMtMTExNS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYzoxMTE2Olx0ZXJyID0gYnBmX3Byb2dfZGV0YWNoMihwYXJzZV9wcm9nLCBtYXBfZmRfcngsIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUik7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmMtMTExNy1cdGlmIChlcnIpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExNDcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIEJQRiBTdHJlYW0gUGFyc2VyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBzZWUgdGhpcyBgQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSYCBwb3BwaW5nIHVwIGluIGBuZXQvY29yZS9zb2NrX21hcC5jYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZzsgaXQgc3VnZ2VzdHMgc29tZSBpbnZvbHZlbWVudCB3aXRoIGVCUEYgYW5kIG5ldHdvcmsgc3RyZWFtcy4gTXkgZmlyc3QgbW92ZSBpcyB0byBmaWd1cmUgb3V0IHdoYXQgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBhY3R1YWxseSAqZG9lcyouIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgaW1wbGljYXRpb25zLiBHaXZlbiB0aGUgY29udGV4dCwgSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBuZXQvS2NvbmZpZ2Agb3IgYG5ldC9jb3JlL0tjb25maWdgIGZpbGVzIOKAkyBtb3N0IGxpa2VseSBvbmUgb2YgdGhvc2Ugd2lsbCBob2xkIHRoZSBhbnN3ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgY29uZmlnIHdpbGwgYWN0dWFsbHkgZG8gdG8gdGhlIGJ1aWxkIGFuZCB0aGUgcmVzdWx0aW5nIGtlcm5lbCYjMzk7cyBuZXR3b3JrIGZ1bmN0aW9uYWxpdHkuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDM6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlBGX1NUUkVBTV9QQVJTRVImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTM1ND1jb25maWcgQlFMXG4tLVxubmV0L0tjb25maWctMzYwLVxubmV0L0tjb25maWc6MzYxOmNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlxubmV0L0tjb25maWctMzYyLVx0Ym9vbCBcJiMzNDtlbmFibGUgQlBGIFNUUkVBTV9QQVJTRVJcJiMzNDtcbi0tXG5uZXQvY29yZS9za21zZy5jPTU0NT1zdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9za21zZy5jLTU3My1cbm5ldC9jb3JlL3NrbXNnLmM6NTc0OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilcbm5ldC9jb3JlL3NrbXNnLmMtNTc1LVx0cHNvY2stXHUwMDNlaW5ncmVzc19ieXRlcyAmIzQzOz0gbGVuO1xuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTA1Nz1zdGF0aWMgdm9pZCBza19wc29ja193cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMDczLVxubmV0L2NvcmUvc2ttc2cuYzoxMDc0OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilcbm5ldC9jb3JlL3NrbXNnLmMtMTA3NS1zdGF0aWMgdm9pZCBza19wc29ja19zdHJwX3JlYWQoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9za21zZy5jPTExOTM9c3RhdGljIHZvaWQgc2tfcHNvY2tfZG9uZV9zdHJwKHN0cnVjdCBza19wc29jayAqcHNvY2spXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMTk1LX1cbm5ldC9jb3JlL3NrbXNnLmM6MTE5NjojZW5kaWYgLyogQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSICovXG5uZXQvY29yZS9za21zZy5jLTExOTctXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz0xNDc1PXN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ19saW5rX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Byb2cgKioqcHByb2csXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNDg5LVx0XHRicmVhaztcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTQ5MDojaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIpXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0OTEtXHRjYXNlIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUjpcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmM9NjYyPXN0YXRpYyBpbnQgdGNwX2JwZl9hc3NlcnRfcHJvdG9fb3BzKHN0cnVjdCBwcm90byAqb3BzKVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy02NzEtXG5uZXQvaXB2NC90Y3BfYnBmLmM6NjcyOiNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilcbm5ldC9pcHY0L3RjcF9icGYuYy02NzMtaW50IHRjcF9icGZfc3RycF9yZWFkX3NvY2soc3RydWN0IHN0cnBhcnNlciAqc3RycCwgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTcwNS19XG5uZXQvaXB2NC90Y3BfYnBmLmM6NzA2OiNlbmRpZiAvKiBDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIgKi9cbm5ldC9pcHY0L3RjcF9icGYuYy03MDctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAzOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTIxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBCUEYgU3RyZWFtIFBhcnNlciBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGl0JiMzOTtzIHByZXR0eSBjbGVhciBJJiMzOTttIGdvaW5nIHRvIG5lZWQgdG8gZW5hYmxlIGBDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVJgIGZvciB0aGlzLCBhbmQgYWxzbyBgQ09ORklHX0JQRl9TWVNDQUxMYC4gTm8gc3VycHJpc2VzIHRoZXJlLiBCdXQgYmVmb3JlIEkgcHJvY2VlZCwgaXQmIzM5O3MgYWx3YXlzIGEgZ29vZCBwcmFjdGljZSB0byBkb3VibGUgY2hlY2sgZGVwZW5kZW5jaWVzLiBHb3R0YSBtYWtlIHN1cmUgYENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUmAgaXNuJiMzOTt0IHJlbHlpbmcgb24gc29tZSBvYnNjdXJlIG9yIHVuZXhwZWN0ZWQgb3RoZXIgb3B0aW9uIGJlaW5nIHNldC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgcHJlcmVxdWlzaXRlcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgYmVmb3JlIEkgbWFrZSB0aGVzZSBjaGFuZ2VzLiBCZXR0ZXIgdG8gYmUgdGhvcm91Z2ggdXBmcm9udCB0aGFuIHRvIGNoYXNlIGRvd24gYSB3ZWlyZCBidWlsZCBlcnJvciBsYXRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDM6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9MzU0PWNvbmZpZyBCUUxcbi0tXG5uZXQvS2NvbmZpZy0zNjAtXG5uZXQvS2NvbmZpZzozNjE6Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSXG5uZXQvS2NvbmZpZy0zNjItXHRib29sIFwmIzM0O2VuYWJsZSBCUEYgU1RSRUFNX1BBUlNFUlwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAwMzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQzNwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzZWN0aW9uIG9mIHRoZSBjb2RlIGJldHRlci4gTGV0IG1lIHNlZS4uLiBJJiMzOTttIHRoaW5raW5nIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIGxpa2VseSBpbiBgbmV0L0tjb25maWdgLCBhbmQsIGFoLCB5ZXMsIEkmIzM5O20gYWltaW5nIGZvciBhcm91bmQgbGluZSAzNjEuIFRoYXQgZmVlbHMgbGlrZSBhIGdvb2Qgc3BvdCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCByZXZlYWxzLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgYmFzZSBmb3IgbXkgZXhwbG9yYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAzOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM1NTpcdFx0Ym9vbFxuIDM1NjpcdFx0cHJvbXB0IFwmIzM0O0VuYWJsZSBCeXRlIFF1ZXVlIExpbWl0c1wmIzM0O1xuIDM1NzpcdFx0ZGVwZW5kcyBvbiBTWVNGU1xuIDM1ODpcdFx0c2VsZWN0IERRTFxuIDM1OTpcdFx0ZGVmYXVsdCB5XG4gMzYwOlx0XG4gMzYxOlx0Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSXG4gMzYyOlx0XHRib29sIFwmIzM0O2VuYWJsZSBCUEYgU1RSRUFNX1BBUlNFUlwmIzM0O1xuIDM2MzpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gMzY0Olx0XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXG4gMzY1Olx0XHRkZXBlbmRzIG9uIENHUk9VUF9CUEZcbiAzNjY6XHRcdHNlbGVjdCBTVFJFQU1fUEFSU0VSXG4gMzY3Olx0XHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG4gMzY4Olx0XHRoZWxwXG4gMzY5Olx0XHQgIEVuYWJsaW5nIHRoaXMgYWxsb3dzIGEgVENQIHN0cmVhbSBwYXJzZXIgdG8gYmUgdXNlZCB3aXRoXG4gMzcwOlx0XHQgIEJQRl9NQVBfVFlQRV9TT0NLTUFQLlxuIDM3MTpcdFxuIDM3MjpcdGNvbmZpZyBORVRfRkxPV19MSU1JVFxuIDM3MzpcdFx0Ym9vbCBcJiMzNDtOZXQgZmxvdyBsaW1pdFwmIzM0O1xuIDM3NDpcdFx0ZGVwZW5kcyBvbiBSUFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4NjcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0MzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIFN0cmVhbSBQYXJzZXIgUGF0Y2gqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgQlBGX1NUUkVBTV9QQVJTRVJgIHJlbGllcyBvbiBhIGZldyBvdGhlciBjb3JlIGZ1bmN0aW9uYWxpdGllczogYElORVRgLCBgQlBGX1NZU0NBTExgLCBhbmQgYENHUk9VUF9CUEZgLiBTaW5jZSBgQlBGX1NZU0NBTExgIGFuZCBgQ0dST1VQX0JQRmAgYXJlIGFscmVhZHkgaGFuZGxlZCBpbiBnZW5lcmljIGNvbmZpZ3VyYXRpb25zLCB0aGUga2V5IHRoaW5nIGhlcmUgaXMgdG8gbWFrZSBzdXJlIGBCUEZfU1RSRUFNX1BBUlNFUmAgaXRzZWxmIGdldHMgZXhwbGljaXRseSBpbmNsdWRlZCBpbiBgRW5hYmxlQ29uZmlnc2AuIEl0JiMzOTtzIHdvcnRoIGxpc3RpbmcgaXQgZXhwbGljaXRseS4KCk5vdywgZm9jdXNpbmcgb24gdGhlIGNvZGUgY2hhbmdlcywgaXQgYXBwZWFycyB0aGUgcGF0Y2ggaW50cm9kdWNlcyBgc29ja19tYXBfcHJvZ19hdHRhY2hfY2hlY2tgIGFuZCBjYWxscyBpdCBmcm9tIGBzb2NrX21hcF9wcm9nX3VwZGF0ZWAgYW5kIGBzb2NrX21hcF9saW5rX3VwZGF0ZV9wcm9nYC4gU28sIHRoZXNlIHRocmVlIGZ1bmN0aW9ucyBhcmUgZ29pbmcgdG8gYmUgdGhlIGNlbnRyYWwgcG9pbnRzIG9mIGludGVyZXN0IGZvciBhbmFseXNpcywgcGFydGljdWxhcmx5IGBzb2NrX21hcF9wcm9nX2F0dGFjaF9jaGVja2AsIGBzb2NrX21hcF9wcm9nX3VwZGF0ZWAsIGFuZCBgc29ja19tYXBfbGlua191cGRhdGVfcHJvZ2AuIEkgcXVpY2tseSBjb25maXJtZWQgdGhhdCBgc29ja19tYXBfcHJvZ19hdHRhY2hfY2hlY2tgIGlzLCBpbiBmYWN0LCBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgdXNlZnVsIHRvIGtub3cuCgpCZXlvbmQgdGhvc2UgY29yZSBjaGFuZ2VzLCBpdCYjMzk7cyBhbHNvIHdvcnRoIG5vdGluZyB0aGUgbW9kaWZpY2F0aW9ucyB0byB0aGUgc2VsZnRlc3RzLiBUaGUgcGF0Y2ggdXBkYXRlcyBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmNgLCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2ttYXBfcGFyc2VfcHJvZy5jYCwgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX3N0cnAuY2AuIFRoZXNlIHRlc3RzIGFyZSBpbXBvcnRhbnQgYmVjYXVzZSB0aGV5IGRlbW9uc3RyYXRlIHRoZSAqaW50ZW5kZWQgdXNhZ2UqIG9mIHRoaXMgZmVhdHVyZS4gU3BlY2lmaWNhbGx5LCBpdCBzaG93cyBob3cgYSBCUEYgcHJvZ3JhbSBvZiB0eXBlIGBCUEZfUFJPR19UWVBFX1NLX1NLQmAgd2l0aCBhbiBhdHRhY2ggdHlwZSBvZiBgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSYCBpcyBhdHRhY2hlZCB0byBhIHNvY2ttYXAuIFRoZSBrZXkgcGFydCBoZXJlIGlzIHRoYXQgdGhlIHBhdGNoIGFsc28gaW50cm9kdWNlcyBhIGNoZWNrIHRvIHByZXZlbnQgYXR0YWNoaW5nIGEgcHJvZ3JhbSB0aGF0IG1vZGlmaWVzIHRoZSBwYWNrZXQgZGF0YS4gVGhpcyBzZWVtcyB0byBiZSB0aGUgY3J1Y2lhbCBiaXQ6IGl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGVuZm9yY2luZyBhIGNvbnN0cmFpbnQgYmFzZWQgb24gYHByb2ctJmd0O2F1eC0mZ3Q7Y2hhbmdlc19wa3RfZGF0YWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgYGNoYW5nZXNfcGt0X2RhdGFgIGNoZWNrLiBUaGF0IHNob3VsZCBiZSBteSBuZXh0IGZvY3VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAwMzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGFuZ2VzX3BrdF9kYXRhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jZmcuYz00Mz1lbnVtIHtcbi0tXG5rZXJuZWwvYnBmL2NmZy5jLTUwLVxua2VybmVsL2JwZi9jZmcuYzo1MTpzdGF0aWMgdm9pZCBtYXJrX3N1YnByb2dfY2hhbmdlc19wa3RfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgb2ZmKVxua2VybmVsL2JwZi9jZmcuYy01Mi17XG4tLVxua2VybmVsL2JwZi9jZmcuYy01NS1cdHN1YnByb2cgPSBicGZfZmluZF9jb250YWluaW5nX3N1YnByb2coZW52LCBvZmYpO1xua2VybmVsL2JwZi9jZmcuYzo1NjpcdHN1YnByb2ctXHUwMDNlY2hhbmdlc19wa3RfZGF0YSA9IHRydWU7XG5rZXJuZWwvYnBmL2NmZy5jLTU3LX1cbi0tXG5rZXJuZWwvYnBmL2NmZy5jPTgxPXN0YXRpYyB2b2lkIG1lcmdlX2NhbGxlZV9lZmZlY3RzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCB0LCBpbnQgdylcbi0tXG5rZXJuZWwvYnBmL2NmZy5jLTg2LVx0Y2FsbGVlID0gYnBmX2ZpbmRfY29udGFpbmluZ19zdWJwcm9nKGVudiwgdyk7XG5rZXJuZWwvYnBmL2NmZy5jOjg3Olx0Y2FsbGVyLVx1MDAzZWNoYW5nZXNfcGt0X2RhdGEgfD0gY2FsbGVlLVx1MDAzZWNoYW5nZXNfcGt0X2RhdGE7XG5rZXJuZWwvYnBmL2NmZy5jLTg4LVx0Y2FsbGVyLVx1MDAzZW1pZ2h0X3NsZWVwIHw9IGNhbGxlZS1cdTAwM2VtaWdodF9zbGVlcDtcbi0tXG5rZXJuZWwvYnBmL2NmZy5jPTQyNj1zdGF0aWMgaW50IHZpc2l0X2luc24oaW50IHQsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi9jZmcuYy00ODUtXHRcdFx0XHRtYXJrX3N1YnByb2dfbWlnaHRfc2xlZXAoZW52LCB0KTtcbmtlcm5lbC9icGYvY2ZnLmM6NDg2Olx0XHRcdGlmIChicGZfaGVscGVyX2NoYW5nZXNfcGt0X2RhdGEoaW5zbi1cdTAwM2VpbW0pKVxua2VybmVsL2JwZi9jZmcuYzo0ODc6XHRcdFx0XHRtYXJrX3N1YnByb2dfY2hhbmdlc19wa3RfZGF0YShlbnYsIHQpO1xua2VybmVsL2JwZi9jZmcuYy00ODgtXHRcdFx0aWYgKGluc24tXHUwMDNlaW1tID09IEJQRl9GVU5DX3RhaWxfY2FsbCkge1xuLS1cbmtlcm5lbC9icGYvY2ZnLmMtNTE5LVx0XHRcdGlmIChyZXQgPT0gMCBcdTAwMjZcdTAwMjYgYnBmX2lzX2tmdW5jX3BrdF9jaGFuZ2luZyhcdTAwMjZtZXRhKSlcbmtlcm5lbC9icGYvY2ZnLmM6NTIwOlx0XHRcdFx0bWFya19zdWJwcm9nX2NoYW5nZXNfcGt0X2RhdGEoZW52LCB0KTtcbmtlcm5lbC9icGYvY2ZnLmMtNTIxLVx0XHRcdGlmIChyZXQgPT0gMCBcdTAwMjZcdTAwMjYgYnBmX2lzX3Rocm93X2tmdW5jKGluc24pKVxuLS1cbmtlcm5lbC9icGYvY2ZnLmM9NTYyPWludCBicGZfY2hlY2tfY2ZnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi9jZmcuYy02MzktXHRyZXQgPSAwOyAvKiBjZmcgbG9va3MgZ29vZCAqL1xua2VybmVsL2JwZi9jZmcuYzo2NDA6XHRlbnYtXHUwMDNlcHJvZy1cdTAwM2VhdXgtXHUwMDNlY2hhbmdlc19wa3RfZGF0YSA9IGVudi1cdTAwM2VzdWJwcm9nX2luZm9bMF0uY2hhbmdlc19wa3RfZGF0YTtcbmtlcm5lbC9icGYvY2ZnLmMtNjQxLVx0ZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZW1pZ2h0X3NsZWVwID0gZW52LVx1MDAzZXN1YnByb2dfaW5mb1swXS5taWdodF9zbGVlcDtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0zMTc3PXZvaWQgX193ZWFrIGJwZl9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMzE4MC1cbmtlcm5lbC9icGYvY29yZS5jOjMxODE6Ym9vbCBfX3dlYWsgYnBmX2hlbHBlcl9jaGFuZ2VzX3BrdF9kYXRhKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZClcbmtlcm5lbC9icGYvY29yZS5jLTMxODIte1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmM9MTAyOD1zdGF0aWMgaW50IGppdF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTE1OS1cdFx0ZnVuY1tpXS1cdTAwM2VhdXgtXHUwMDNlZXhjZXB0aW9uX2NiID0gZW52LVx1MDAzZXN1YnByb2dfaW5mb1tpXS5pc19leGNlcHRpb25fY2I7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjExNjA6XHRcdGZ1bmNbaV0tXHUwMDNlYXV4LVx1MDAzZWNoYW5nZXNfcGt0X2RhdGEgPSBlbnYtXHUwMDNlc3VicHJvZ19pbmZvW2ldLmNoYW5nZXNfcGt0X2RhdGE7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTExNjEtXHRcdGZ1bmNbaV0tXHUwMDNlYXV4LVx1MDAzZW1pZ2h0X3NsZWVwID0gZW52LVx1MDAzZXN1YnByb2dfaW5mb1tpXS5taWdodF9zbGVlcDtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTMyNj1zdGF0aWMgaW50IGNoZWNrX2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTkzNjgtXHRcdFx0XHRzdWJwcm9nLCBzdWJfbmFtZSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTM2OTpcdFx0aWYgKGVudi1cdTAwM2VzdWJwcm9nX2luZm9bc3VicHJvZ10uY2hhbmdlc19wa3RfZGF0YSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05MzcwLVx0XHRcdGNsZWFyX2FsbF9wa3RfcG9pbnRlcnMoZW52KTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTAxNDk9c3RhdGljIGludCBjaGVja19oZWxwZXJfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMTg4LVx0LyogV2l0aCBMRF9BQlMvSU5EIHNvbWUgSklUcyBzYXZlL3Jlc3RvcmUgc2tiIGZyb20gcjEuICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTAxODk6XHRjaGFuZ2VzX2RhdGEgPSBicGZfaGVscGVyX2NoYW5nZXNfcGt0X2RhdGEoZnVuY19pZCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAxOTAtXHRpZiAoY2hhbmdlc19kYXRhIFx1MDAyNlx1MDAyNiBmbi1cdTAwM2VhcmcxX3R5cGUgIT0gQVJHX1BUUl9UT19DVFgpIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTg4NTg9aW50IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4ODk4LVx0XHRzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXggPSB0Z3RfcHJvZy1cdTAwM2VhdXg7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTg4OTk6XHRcdGJvb2wgdGd0X2NoYW5nZXNfcGt0X2RhdGE7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg5MDAtXHRcdGJvb2wgdGd0X21pZ2h0X3NsZWVwO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODkzNC1cdFx0XHR9XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTg5MzU6XHRcdFx0dGd0X2NoYW5nZXNfcGt0X2RhdGEgPSBhdXgtXHUwMDNlZnVuY1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE4OTM2Olx0XHRcdFx0XHQgICAgICAgPyBhdXgtXHUwMDNlZnVuY1tzdWJwcm9nXS1cdTAwM2VhdXgtXHUwMDNlY2hhbmdlc19wa3RfZGF0YVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4OTM3Olx0XHRcdFx0XHQgICAgICAgOiBhdXgtXHUwMDNlY2hhbmdlc19wa3RfZGF0YTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODkzODpcdFx0XHRpZiAocHJvZy1cdTAwM2VhdXgtXHUwMDNlY2hhbmdlc19wa3RfZGF0YSBcdTAwMjZcdTAwMjYgIXRndF9jaGFuZ2VzX3BrdF9kYXRhKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg5MzktXHRcdFx0XHRicGZfbG9nKGxvZyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzNzQKCQkJCQkJCW91dHB1dDogMTM1CgkJCQkJCQl0aG91Z2h0czogMjc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBTdHJlYW0gUGFyc2VyIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSByZWxhdGl2ZWx5IG1pbm9yLCBidXQgaW1wb3J0YW50LCBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIEJQRiBzdWJzeXN0ZW0uIEVzc2VudGlhbGx5LCBpdCBhZGRzIGEgY2hlY2s6IHRoZSBgY2hhbmdlc19wa3RfZGF0YWAgZmxhZyBpcyBzZXQgd2hlbiBhIEJQRiBwcm9ncmFtIHVzZXMgYSBoZWxwZXIgdGhhdCBtb2RpZmllcyBwYWNrZXQgZGF0YS4gVGhlIHBhdGNoIG5vdyBjaGVja3MgdGhpcyBmbGFnICpzcGVjaWZpY2FsbHkqIHdoZW4gd2UmIzM5O3JlIHRyeWluZyB0byBhdHRhY2ggYSBwcm9ncmFtIG9mIHRoZSBgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSYCB0eXBlLiBTZWVtcyBsaWtlIGEgZ29vZCBzYWZldHkgbWVhc3VyZS4KCkdpdmVuIHRoaXMsIEkmIzM5O3ZlIGdvdCBhIGNsZWFyIGZ1enppbmcgc3RyYXRlZ3kuIFRoZSBrZXkgZnVuY3Rpb25zIHRvIHRhcmdldCBhcmUgYHNvY2tfbWFwX3Byb2dfYXR0YWNoX2NoZWNrYCwgYHNvY2tfbWFwX3Byb2dfdXBkYXRlYCwgYW5kIGBzb2NrX21hcF9saW5rX3VwZGF0ZV9wcm9nYC4gVGhlc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMgdGhhdCB0aGUgcGF0Y2ggZGlyZWN0bHkgaW1wYWN0cywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYnBmX3Byb2dfYXR0YWNoYCBhbmQgYGJwZl9saW5rX3VwZGF0ZWAgc3lzY2FsbHMuIFdlIGFyZSBjaGVja2luZyB0aGUgZmxhZyB3aXRoaW4gdGhlIGNoZWNrIGFuZCB1cGRhdGUgZnVuY3Rpb25zLgoKVGhlIHJlbGV2YW50IGNvbmZpZyBJIG5lZWQgdG8gcGF5IGF0dGVudGlvbiB0byBpcyBgQlBGX1NUUkVBTV9QQVJTRVJgLiBJIGFscmVhZHkga25vdyBzeXprYWxsZXIgaGFzIGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBgQ09ORklHX0NHUk9VUF9CUEZgIGVuYWJsZWQuIEdvb2QuIEkgYWxzbyBzZWUgdGhhdCBgQ09ORklHX05FVF9TT0NLX01TR2AgaXMgYSBkZXBlbmRlbmN5IG9mIGBCUEZfU1RSRUFNX1BBUlNFUmAuIEFsbCB0aGUgcGllY2VzIGFyZSBoZXJlLiBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gbm90ZSB0aGF0IGluIG15IG91dHB1dC4KCkFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50IGluIHRoaXMgZXZhbHVhdGlvbi4gVGltZSB0byBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAwMzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NUUkVBTV9QQVJTRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzb2NrX21hcF9wcm9nX2F0dGFjaF9jaGVjayYjMzQ7LAogICAgJiMzNDtzb2NrX21hcF9wcm9nX3VwZGF0ZSYjMzQ7LAogICAgJiMzNDtzb2NrX21hcF9saW5rX3VwZGF0ZV9wcm9nJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBjaGVjayB0byBwcmV2ZW50IGF0dGFjaGluZyBCUEYgc3RyZWFtIHBhcnNlciBwcm9ncmFtcyB0aGF0IG1vZGlmeSBwYWNrZXQgZGF0YSB0byBzb2NrbWFwcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgc3Vic3lzdGVtIHRoYXQgYWZmZWN0cyBicGZfcHJvZ19hdHRhY2ggYW5kIGJwZl9saW5rX3VwZGF0ZSBzeXNjYWxscy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIGF0dGFjaCBhbmQgdXBkYXRlIGZ1bmN0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NUUkVBTV9QQVJTRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzb2NrX21hcF9wcm9nX2F0dGFjaF9jaGVjayYjMzQ7LAogICAgJiMzNDtzb2NrX21hcF9wcm9nX3VwZGF0ZSYjMzQ7LAogICAgJiMzNDtzb2NrX21hcF9saW5rX3VwZGF0ZV9wcm9nJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBjaGVjayB0byBwcmV2ZW50IGF0dGFjaGluZyBCUEYgc3RyZWFtIHBhcnNlciBwcm9ncmFtcyB0aGF0IG1vZGlmeSBwYWNrZXQgZGF0YSB0byBzb2NrbWFwcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgc3Vic3lzdGVtIHRoYXQgYWZmZWN0cyBicGZfcHJvZ19hdHRhY2ggYW5kIGJwZl9saW5rX3VwZGF0ZSBzeXNjYWxscy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIGF0dGFjaCBhbmQgdXBkYXRlIGZ1bmN0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAzOjA0OjA0LjQ5NjU3MTk0OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDg4MTI1OTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TVFJFQU1fUEFSU0VSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic29ja19tYXBfcHJvZ19hdHRhY2hfY2hlY2tcIixcbiAgICBcInNvY2tfbWFwX3Byb2dfdXBkYXRlXCIsXG4gICAgXCJzb2NrX21hcF9saW5rX3VwZGF0ZV9wcm9nXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNoZWNrIHRvIHByZXZlbnQgYXR0YWNoaW5nIEJQRiBzdHJlYW0gcGFyc2VyIHByb2dyYW1zIHRoYXQgbW9kaWZ5IHBhY2tldCBkYXRhIHRvIHNvY2ttYXBzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGJwZl9wcm9nX2F0dGFjaCBhbmQgYnBmX2xpbmtfdXBkYXRlIHN5c2NhbGxzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgYXR0YWNoIGFuZCB1cGRhdGUgZnVuY3Rpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMzowNDowNC40OTY1NzY4NThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3Nzk3MzcyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDFkZTdlZDcxYTViNzUxYTJlMmM0ZWY5NjhkMTU0NjYxYjZmOWJlMDBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdW4gMjAgMDM6MDQ6MDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29ja19tYXAuYyBiL25ldC9jb3JlL3NvY2tfbWFwLmNcXG5pbmRleCA5OWUzNzg5NDkyYTA5ZS4uYzYwYmE2ZDI5MmY5YWUgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvc29ja19tYXAuY1xcbisrKyBiL25ldC9jb3JlL3NvY2tfbWFwLmNcXG5AQCAtMTUxNSw2ICsxNTE1LDE3IEBAIHN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ19saW5rX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Byb2cgKioqcHByXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHNvY2tfbWFwX3Byb2dfYXR0YWNoX2NoZWNrKGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuK3tcXG4rXFx0LyogQSBzdHJlYW0gcGFyc2VyIG11c3Qgbm90IG1vZGlmeSB0aGUgc2tiLCBvbmx5IG1lYXN1cmUgaXQuICovXFxuK1xcdGlmIChwcm9nIFxcdTAwMjZcXHUwMDI2IGF0dGFjaF90eXBlID09IEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VjaGFuZ2VzX3BrdF9kYXRhKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiAvKiBIYW5kbGUgdGhlIGZvbGxvd2luZyBmb3VyIGNhc2VzOlxcbiAgKiBwcm9nX2F0dGFjaDogcHJvZyAhPSBOVUxMLCBvbGQgPT0gTlVMTCwgbGluayA9PSBOVUxMXFxuICAqIHByb2dfZGV0YWNoOiBwcm9nID09IE5VTEwsIG9sZCAhPSBOVUxMLCBsaW5rID09IE5VTExcXG5AQCAtMTUzMyw2ICsxNTQ0LDEwIEBAIHN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ191cGRhdGUoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4rXFx0cmV0ID0gc29ja19tYXBfcHJvZ19hdHRhY2hfY2hlY2sod2hpY2gsIHByb2cpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4gXFx0LyogZm9yIHByb2dfYXR0YWNoL3Byb2dfZGV0YWNoL2xpbmtfYXR0YWNoLCByZXR1cm4gZXJyb3IgaWYgYSBicGZfbGlua1xcbiBcXHQgKiBleGlzdHMgZm9yIHRoYXQgcHJvZy5cXG4gXFx0ICovXFxuQEAgLTE3NzYsNiArMTc5MSwxMSBAQCBzdGF0aWMgaW50IHNvY2tfbWFwX2xpbmtfdXBkYXRlX3Byb2coc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbiBcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbitcXG4rXFx0cmV0ID0gc29ja19tYXBfcHJvZ19hdHRhY2hfY2hlY2sobGluay1cXHUwMDNlYXR0YWNoX3R5cGUsIHByb2cpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuIFxcdGlmICghc29ja21hcF9saW5rLVxcdTAwM2VtYXApIHtcXG4gXFx0XFx0cmV0ID0gLUVOT0xJTks7XFxuIFxcdFxcdGdvdG8gb3V0O1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jXFxuaW5kZXggNjIxYjNiNzE4ODhlZmUuLjFkNzIzMTcyOGVhZmQ5IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmNcXG5AQCAtNDMxLDYgKzQzMSwzNSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXBfc3RycF92ZXJkaWN0KGludCBmYW1pbHksIGludCBzb3R5cGUpXFxuIFxcdHRlc3Rfc29ja21hcF9zdHJwX19kZXN0cm95KHN0cnApO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXBfc3RycF9wYXJzZXJfcmVqZWN0KHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IHRlc3Rfc29ja21hcF9zdHJwICpzdHJwID0gTlVMTDtcXG4rXFx0aW50IHBhcnNlcl9tb2QsIHBhcnNlcl9ybywgbGluaztcXG4rXFx0aW50IGVyciwgbWFwO1xcbitcXG4rXFx0c3RycCA9IHRlc3Rfc29ja21hcF9zdHJwX19vcGVuX2FuZF9sb2FkKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihzdHJwLCBcXFwidGVzdF9zb2NrbWFwX3N0cnBfX29wZW5fYW5kX2xvYWRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0bWFwID0gYnBmX21hcF9fZmQoc3RycC1cXHUwMDNlbWFwcy5zb2NrX21hcCk7XFxuK1xcdHBhcnNlcl9tb2QgPSBicGZfcHJvZ3JhbV9fZmQoc3RycC1cXHUwMDNlcHJvZ3MucHJvZ19za2JfcGFyc2VyX3Jlc2l6ZSk7XFxuK1xcdHBhcnNlcl9ybyA9IGJwZl9wcm9ncmFtX19mZChzdHJwLVxcdTAwM2Vwcm9ncy5wcm9nX3NrYl9wYXJzZXIpO1xcbitcXG4rXFx0ZXJyID0gYnBmX3Byb2dfYXR0YWNoKHBhcnNlcl9tb2QsIG1hcCwgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSLCAwKTtcXG4rXFx0QVNTRVJUX0VSUihlcnIsIFxcXCJicGZfcHJvZ19hdHRhY2ggcGFyc2VyX21vZFxcXCIpO1xcbitcXG4rXFx0bGluayA9IGJwZl9saW5rX2NyZWF0ZShwYXJzZXJfcm8sIG1hcCwgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSLCBOVUxMKTtcXG4rXFx0aWYgKCFBU1NFUlRfR0UobGluaywgMCwgXFxcImJwZl9saW5rX2NyZWF0ZSBwYXJzZXJfcm9cXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRlcnIgPSBicGZfbGlua191cGRhdGUobGluaywgcGFyc2VyX21vZCwgTlVMTCk7XFxuK1xcdEFTU0VSVF9FUlIoZXJyLCBcXFwiYnBmX2xpbmtfdXBkYXRlIHBhcnNlcl9tb2RcXFwiKTtcXG4rb3V0OlxcbitcXHRpZiAobGluayBcXHUwMDNlPSAwKVxcbitcXHRcXHRjbG9zZShsaW5rKTtcXG4rXFx0dGVzdF9zb2NrbWFwX3N0cnBfX2Rlc3Ryb3koc3RycCk7XFxuK31cXG4rXFxuIHZvaWQgdGVzdF9zb2NrbWFwX3N0cnAodm9pZClcXG4ge1xcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwic29ja21hcCBzdHJwIHRjcCBwYXNzXFxcIikpXFxuQEAgLTQ1MSw0ICs0ODAsNiBAQCB2b2lkIHRlc3Rfc29ja21hcF9zdHJwKHZvaWQpXFxuIFxcdFxcdHRlc3Rfc29ja21hcF9zdHJwX211bHRpcGxlX3BrdChBRl9JTkVULCBTT0NLX1NUUkVBTSk7XFxuIFxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJzb2NrbWFwIHN0cnAgdGNwIGRpc3BhdGNoXFxcIikpXFxuIFxcdFxcdHRlc3Rfc29ja21hcF9zdHJwX2Rpc3BhdGNoX3BrdChBRl9JTkVULCBTT0NLX1NUUkVBTSk7XFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJzb2NrbWFwIHN0cnAgcGFyc2VyIHJlamVjdCBwa3QgbW9kXFxcIikpXFxuK1xcdFxcdHRlc3Rfc29ja21hcF9zdHJwX3BhcnNlcl9yZWplY3QoKTtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja21hcF9wYXJzZV9wcm9nLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja21hcF9wYXJzZV9wcm9nLmNcXG5pbmRleCBjOWFiZmUzYTExYWZhYS4uNTZlOWFlYmYwNWYyNGMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2ttYXBfcGFyc2VfcHJvZy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2ttYXBfcGFyc2VfcHJvZy5jXFxuQEAgLTUsMjggKzUsNiBAQFxcbiBTRUMoXFxcInNrX3NrYjFcXFwiKVxcbiBpbnQgYnBmX3Byb2cxKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4ge1xcbi1cXHR2b2lkICpkYXRhX2VuZCA9ICh2b2lkICopKGxvbmcpIHNrYi1cXHUwMDNlZGF0YV9lbmQ7XFxuLVxcdHZvaWQgKmRhdGEgPSAodm9pZCAqKShsb25nKSBza2ItXFx1MDAzZWRhdGE7XFxuLVxcdF9fdTggKmQgPSBkYXRhO1xcbi1cXHRpbnQgZXJyO1xcbi1cXG4tXFx0aWYgKGRhdGEgKyAxMCBcXHUwMDNlIGRhdGFfZW5kKSB7XFxuLVxcdFxcdGVyciA9IGJwZl9za2JfcHVsbF9kYXRhKHNrYiwgMTApO1xcbi1cXHRcXHRpZiAoZXJyKVxcbi1cXHRcXHRcXHRyZXR1cm4gU0tfRFJPUDtcXG4tXFxuLVxcdFxcdGRhdGFfZW5kID0gKHZvaWQgKikobG9uZylza2ItXFx1MDAzZWRhdGFfZW5kO1xcbi1cXHRcXHRkYXRhID0gKHZvaWQgKikobG9uZylza2ItXFx1MDAzZWRhdGE7XFxuLVxcdFxcdGlmIChkYXRhICsgMTAgXFx1MDAzZSBkYXRhX2VuZClcXG4tXFx0XFx0XFx0cmV0dXJuIFNLX0RST1A7XFxuLVxcdH1cXG4tXFxuLVxcdC8qIFRoaXMgd3JpdGUvcmVhZCBpcyBhIGJpdCBwb2ludGxlc3MgYnV0IHRlc3RzIHRoZSB2ZXJpZmllciBhbmRcXG4tXFx0ICogc3RycGFyc2VyIGhhbmRsZXIgZm9yIHJlYWQvd3JpdGUgcGt0IGRhdGEgYW5kIGFjY2VzcyBpbnRvIHNrXFxuLVxcdCAqIGZpZWxkcy5cXG4tXFx0ICovXFxuLVxcdGQgPSBkYXRhO1xcbi1cXHRkWzddID0gMTtcXG4gXFx0cmV0dXJuIHNrYi1cXHUwMDNlbGVuO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX3N0cnAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfc3RycC5jXFxuaW5kZXggZGRlM2Q1YmVjNTE1NGEuLmZlODhmYTZkNDBiYzUwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfc3RycC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmNcXG5AQCAtNTAsNCArNTAsMTEgQEAgaW50IHByb2dfc2tiX3BhcnNlcl9wYXJ0aWFsKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4gXFx0cmV0dXJuIDEwO1xcbiB9XFxuIFxcbitTRUMoXFxcInNrX3NrYi9zdHJlYW1fcGFyc2VyXFxcIilcXG4raW50IHByb2dfc2tiX3BhcnNlcl9yZXNpemUoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdGJwZl9za2JfY2hhbmdlX3RhaWwoc2tiLCBza2ItXFx1MDAzZWxlbiwgMCk7XFxuK1xcdHJldHVybiBza2ItXFx1MDAzZWxlbjtcXG4rfVxcbitcXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAzOjA0OjA0Ljk3NTMwODM4N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM2MDkzODA3OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NUUkVBTV9QQVJTRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzb2NrX21hcF9wcm9nX2F0dGFjaF9jaGVja1wiLFxuICAgIFwic29ja19tYXBfcHJvZ191cGRhdGVcIixcbiAgICBcInNvY2tfbWFwX2xpbmtfdXBkYXRlX3Byb2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY2hlY2sgdG8gcHJldmVudCBhdHRhY2hpbmcgQlBGIHN0cmVhbSBwYXJzZXIgcHJvZ3JhbXMgdGhhdCBtb2RpZnkgcGFja2V0IGRhdGEgdG8gc29ja21hcHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQlBGIHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMgYnBmX3Byb2dfYXR0YWNoIGFuZCBicGZfbGlua191cGRhdGUgc3lzY2FsbHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtb2RpZmllZCBhdHRhY2ggYW5kIHVwZGF0ZSBmdW5jdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMWRlN2VkNzFhNWI3NTFhMmUyYzRlZjk2OGQxNTQ2NjFiNmY5YmUwMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVuIDIwIDAzOjA0OjAzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29ja19tYXAuYyBiL25ldC9jb3JlL3NvY2tfbWFwLmNcbmluZGV4IDk5ZTM3ODk0OTJhMDllLi5jNjBiYTZkMjkyZjlhZSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NvY2tfbWFwLmNcbisrKyBiL25ldC9jb3JlL3NvY2tfbWFwLmNcbkBAIC0xNTE1LDYgKzE1MTUsMTcgQEAgc3RhdGljIGludCBzb2NrX21hcF9wcm9nX2xpbmtfbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfcHJvZyAqKipwcHJcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IHNvY2tfbWFwX3Byb2dfYXR0YWNoX2NoZWNrKGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuK3tcbitcdC8qIEEgc3RyZWFtIHBhcnNlciBtdXN0IG5vdCBtb2RpZnkgdGhlIHNrYiwgb25seSBtZWFzdXJlIGl0LiAqL1xuK1x0aWYgKHByb2cgXHUwMDI2XHUwMDI2IGF0dGFjaF90eXBlID09IEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiBcdTAwMjZcdTAwMjZcbitcdCAgICBwcm9nLVx1MDAzZWF1eC1cdTAwM2VjaGFuZ2VzX3BrdF9kYXRhKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiAvKiBIYW5kbGUgdGhlIGZvbGxvd2luZyBmb3VyIGNhc2VzOlxuICAqIHByb2dfYXR0YWNoOiBwcm9nICE9IE5VTEwsIG9sZCA9PSBOVUxMLCBsaW5rID09IE5VTExcbiAgKiBwcm9nX2RldGFjaDogcHJvZyA9PSBOVUxMLCBvbGQgIT0gTlVMTCwgbGluayA9PSBOVUxMXG5AQCAtMTUzMyw2ICsxNTQ0LDEwIEBAIHN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ191cGRhdGUoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbitcdHJldCA9IHNvY2tfbWFwX3Byb2dfYXR0YWNoX2NoZWNrKHdoaWNoLCBwcm9nKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4gXHQvKiBmb3IgcHJvZ19hdHRhY2gvcHJvZ19kZXRhY2gvbGlua19hdHRhY2gsIHJldHVybiBlcnJvciBpZiBhIGJwZl9saW5rXG4gXHQgKiBleGlzdHMgZm9yIHRoYXQgcHJvZy5cbiBcdCAqL1xuQEAgLTE3NzYsNiArMTc5MSwxMSBAQCBzdGF0aWMgaW50IHNvY2tfbWFwX2xpbmtfdXBkYXRlX3Byb2coc3RydWN0IGJwZl9saW5rICpsaW5rLFxuIFx0XHRyZXQgPSAtRUlOVkFMO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbitcbitcdHJldCA9IHNvY2tfbWFwX3Byb2dfYXR0YWNoX2NoZWNrKGxpbmstXHUwMDNlYXR0YWNoX3R5cGUsIHByb2cpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXQ7XG4rXG4gXHRpZiAoIXNvY2ttYXBfbGluay1cdTAwM2VtYXApIHtcbiBcdFx0cmV0ID0gLUVOT0xJTks7XG4gXHRcdGdvdG8gb3V0O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmNcbmluZGV4IDYyMWIzYjcxODg4ZWZlLi4xZDcyMzE3MjhlYWZkOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuY1xuQEAgLTQzMSw2ICs0MzEsMzUgQEAgc3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX3N0cnBfdmVyZGljdChpbnQgZmFtaWx5LCBpbnQgc290eXBlKVxuIFx0dGVzdF9zb2NrbWFwX3N0cnBfX2Rlc3Ryb3koc3RycCk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF9zdHJwX3BhcnNlcl9yZWplY3Qodm9pZClcbit7XG4rXHRzdHJ1Y3QgdGVzdF9zb2NrbWFwX3N0cnAgKnN0cnAgPSBOVUxMO1xuK1x0aW50IHBhcnNlcl9tb2QsIHBhcnNlcl9ybywgbGluaztcbitcdGludCBlcnIsIG1hcDtcbitcbitcdHN0cnAgPSB0ZXN0X3NvY2ttYXBfc3RycF9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHN0cnAsIFwidGVzdF9zb2NrbWFwX3N0cnBfX29wZW5fYW5kX2xvYWRcIikpXG4rXHRcdHJldHVybjtcbitcbitcdG1hcCA9IGJwZl9tYXBfX2ZkKHN0cnAtXHUwMDNlbWFwcy5zb2NrX21hcCk7XG4rXHRwYXJzZXJfbW9kID0gYnBmX3Byb2dyYW1fX2ZkKHN0cnAtXHUwMDNlcHJvZ3MucHJvZ19za2JfcGFyc2VyX3Jlc2l6ZSk7XG4rXHRwYXJzZXJfcm8gPSBicGZfcHJvZ3JhbV9fZmQoc3RycC1cdTAwM2Vwcm9ncy5wcm9nX3NrYl9wYXJzZXIpO1xuK1xuK1x0ZXJyID0gYnBmX3Byb2dfYXR0YWNoKHBhcnNlcl9tb2QsIG1hcCwgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSLCAwKTtcbitcdEFTU0VSVF9FUlIoZXJyLCBcImJwZl9wcm9nX2F0dGFjaCBwYXJzZXJfbW9kXCIpO1xuK1xuK1x0bGluayA9IGJwZl9saW5rX2NyZWF0ZShwYXJzZXJfcm8sIG1hcCwgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSLCBOVUxMKTtcbitcdGlmICghQVNTRVJUX0dFKGxpbmssIDAsIFwiYnBmX2xpbmtfY3JlYXRlIHBhcnNlcl9yb1wiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRlcnIgPSBicGZfbGlua191cGRhdGUobGluaywgcGFyc2VyX21vZCwgTlVMTCk7XG4rXHRBU1NFUlRfRVJSKGVyciwgXCJicGZfbGlua191cGRhdGUgcGFyc2VyX21vZFwiKTtcbitvdXQ6XG4rXHRpZiAobGluayBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKGxpbmspO1xuK1x0dGVzdF9zb2NrbWFwX3N0cnBfX2Rlc3Ryb3koc3RycCk7XG4rfVxuK1xuIHZvaWQgdGVzdF9zb2NrbWFwX3N0cnAodm9pZClcbiB7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInNvY2ttYXAgc3RycCB0Y3AgcGFzc1wiKSlcbkBAIC00NTEsNCArNDgwLDYgQEAgdm9pZCB0ZXN0X3NvY2ttYXBfc3RycCh2b2lkKVxuIFx0XHR0ZXN0X3NvY2ttYXBfc3RycF9tdWx0aXBsZV9wa3QoQUZfSU5FVCwgU09DS19TVFJFQU0pO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJzb2NrbWFwIHN0cnAgdGNwIGRpc3BhdGNoXCIpKVxuIFx0XHR0ZXN0X3NvY2ttYXBfc3RycF9kaXNwYXRjaF9wa3QoQUZfSU5FVCwgU09DS19TVFJFQU0pO1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJzb2NrbWFwIHN0cnAgcGFyc2VyIHJlamVjdCBwa3QgbW9kXCIpKVxuK1x0XHR0ZXN0X3NvY2ttYXBfc3RycF9wYXJzZXJfcmVqZWN0KCk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrbWFwX3BhcnNlX3Byb2cuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrbWFwX3BhcnNlX3Byb2cuY1xuaW5kZXggYzlhYmZlM2ExMWFmYWEuLjU2ZTlhZWJmMDVmMjRjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2ttYXBfcGFyc2VfcHJvZy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja21hcF9wYXJzZV9wcm9nLmNcbkBAIC01LDI4ICs1LDYgQEBcbiBTRUMoXCJza19za2IxXCIpXG4gaW50IGJwZl9wcm9nMShzdHJ1Y3QgX19za19idWZmICpza2IpXG4ge1xuLVx0dm9pZCAqZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKSBza2ItXHUwMDNlZGF0YV9lbmQ7XG4tXHR2b2lkICpkYXRhID0gKHZvaWQgKikobG9uZykgc2tiLVx1MDAzZWRhdGE7XG4tXHRfX3U4ICpkID0gZGF0YTtcbi1cdGludCBlcnI7XG4tXG4tXHRpZiAoZGF0YSArIDEwIFx1MDAzZSBkYXRhX2VuZCkge1xuLVx0XHRlcnIgPSBicGZfc2tiX3B1bGxfZGF0YShza2IsIDEwKTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRyZXR1cm4gU0tfRFJPUDtcbi1cbi1cdFx0ZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKXNrYi1cdTAwM2VkYXRhX2VuZDtcbi1cdFx0ZGF0YSA9ICh2b2lkICopKGxvbmcpc2tiLVx1MDAzZWRhdGE7XG4tXHRcdGlmIChkYXRhICsgMTAgXHUwMDNlIGRhdGFfZW5kKVxuLVx0XHRcdHJldHVybiBTS19EUk9QO1xuLVx0fVxuLVxuLVx0LyogVGhpcyB3cml0ZS9yZWFkIGlzIGEgYml0IHBvaW50bGVzcyBidXQgdGVzdHMgdGhlIHZlcmlmaWVyIGFuZFxuLVx0ICogc3RycGFyc2VyIGhhbmRsZXIgZm9yIHJlYWQvd3JpdGUgcGt0IGRhdGEgYW5kIGFjY2VzcyBpbnRvIHNrXG4tXHQgKiBmaWVsZHMuXG4tXHQgKi9cbi1cdGQgPSBkYXRhO1xuLVx0ZFs3XSA9IDE7XG4gXHRyZXR1cm4gc2tiLVx1MDAzZWxlbjtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX3N0cnAuY1xuaW5kZXggZGRlM2Q1YmVjNTE1NGEuLmZlODhmYTZkNDBiYzUwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfc3RycC5jXG5AQCAtNTAsNCArNTAsMTEgQEAgaW50IHByb2dfc2tiX3BhcnNlcl9wYXJ0aWFsKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiBcdHJldHVybiAxMDtcbiB9XG4gXG4rU0VDKFwic2tfc2tiL3N0cmVhbV9wYXJzZXJcIilcbitpbnQgcHJvZ19za2JfcGFyc2VyX3Jlc2l6ZShzdHJ1Y3QgX19za19idWZmICpza2IpXG4re1xuK1x0YnBmX3NrYl9jaGFuZ2VfdGFpbChza2IsIHNrYi1cdTAwM2VsZW4sIDApO1xuK1x0cmV0dXJuIHNrYi1cdTAwM2VsZW47XG4rfVxuK1xuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAzOjA0OjA0Ljk3NTMwOTcwN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxNDczMTEyMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTb2NrbWFwIEJQRiBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF04oCZcyBtYWtpbmcgc29tZSBpbnRlcmVzdGluZyBjaGFuZ2VzIHRvIGBuZXQvY29yZS9zb2NrX21hcC5jYCBhbmQgc29tZSByZWxhdGVkIEJQRiBzZWxmdGVzdHMuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gcG9pbnQgaXMgdGhlIGludHJvZHVjdGlvbiBvZiB0aGlzIG5ldyBmdW5jdGlvbiwgYHNvY2tfbWFwX3Byb2dfYXR0YWNoX2NoZWNrYC4gVGhlIHB1cnBvc2Ugb2YgdGhpcyBjaGVjaywgZnJvbSB3aGF0IEkgY2FuIHNlZSwgaXMgdG8gZXhhbWluZSBCUEYgcHJvZ3JhbXMgdGhhdCBhcmUgYmVpbmcgYXR0YWNoZWQgdG8gYSBzb2NrbWFwIGFzIGEgc3RyZWFtIHBhcnNlciB1c2luZyBgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSYC4gU3BlY2lmaWNhbGx5LCBpdCBjaGVja3MgaWYgdGhpcyBCUEYgcHJvZ3JhbSBhdHRlbXB0cyB0byBtb2RpZnkgdGhlIFNLQiBkYXRhIHVzaW5nIGBwcm9nLVx1MDAzZWF1eC1cdTAwM2VjaGFuZ2VzX3BrdF9kYXRhYC4gSWYgaXQgZG9lcywgdGhlIG5ldyBmdW5jdGlvbiBpcyB0aHJvd2luZyBhIGAtRUlOVkFMYCBlcnJvci4gVGhhdCdzIGEgZGVmaW5pdGUgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGtlcm5lbOKAmXMgQlBGIHN1YnN5c3RlbS5cblxuVGhlIHBhdGNoIHNlZW1zIHRvIGFsc28gYmUgdG91Y2hpbmcgYHNvY2tfbWFwX3Byb2dfdXBkYXRlYCBhbmQgYHNvY2tfbWFwX2xpbmtfdXBkYXRlX3Byb2dgLCBzbyBJIHNob3VsZCBrZWVwIGFuIGV5ZSBvbiB0aG9zZS4gVGhpcyBsb29rcyBsaWtlIGEgZGVsaWJlcmF0ZSBwcmV2ZW50YXRpdmUgbWVhc3VyZSwgc3BlY2lmaWNhbGx5IHByZXZlbnRpbmcgdGhlIGF0dGFjaG1lbnQgb2YgY2VydGFpbiBCUEYgcHJvZ3JhbXMgdG8gc29ja21hcHMuXG5cbk5vdywgdGhlIHF1ZXN0aW9uIGlzLCBob3cgZWFzaWx5IGNhbiB0aGlzIGJlIHJlYWNoZWQ/IERlZmluaXRlbHkgcmVhY2hhYmxlLCB2aWEgQlBGIHN5c2NhbGxzIGxpa2UgYGJwZl9wcm9nX2F0dGFjaGAgb3IgYGJwZl9saW5rX3VwZGF0ZWAuIEFuZCBzaW5jZSBpdOKAmXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUga2VybmVsLCBpdCBhYnNvbHV0ZWx5IG5lZWRzIHNvbWUgZ29vZCBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIHBvaW50cyBoZXJlIGFyZSBnb2luZyB0byBiZSB0aG9zZSBtb2RpZmllZCBmdW5jdGlvbnM6IGBzb2NrX21hcF9wcm9nX2F0dGFjaF9jaGVja2AgKHRoZSBuZXcgb25lKSwgYHNvY2tfbWFwX3Byb2dfdXBkYXRlYCwgYW5kIGBzb2NrX21hcF9saW5rX3VwZGF0ZV9wcm9nYC4gSSdsbCB3YW50IHRvIGdvIGRpZyBpbnRvIHRob3NlIGZ1bmN0aW9ucyBpbiBgbmV0L2NvcmUvc29ja19tYXAuY2AgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzIGluIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjQ0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMDM6MDQ6MTEuMTIyNjIyNTM5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NzY0NDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvY2tfbWFwX3Byb2dfdXBkYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NvY2tfbWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc29ja19tYXAuYz0zMj1zdGF0aWMgREVGSU5FX01VVEVYKHNvY2ttYXBfbXV0ZXgpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzMtXFxubmV0L2NvcmUvc29ja19tYXAuYzozNDpzdGF0aWMgaW50IHNvY2tfbWFwX3Byb2dfdXBkYXRlKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTM1LVxcdFxcdFxcdFxcdHN0cnVjdCBicGZfcHJvZyAqb2xkLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTY4PWludCBzb2NrX21hcF9nZXRfZnJvbV9mZChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy04MC1cXHRtdXRleF9sb2NrKFxcdTAwMjZzb2NrbWFwX211dGV4KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjgxOlxcdHJldCA9IHNvY2tfbWFwX3Byb2dfdXBkYXRlKG1hcCwgcHJvZywgTlVMTCwgTlVMTCwgYXR0ci1cXHUwMDNlYXR0YWNoX3R5cGUpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODItXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzb2NrbWFwX211dGV4KTtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9ODY9aW50IHNvY2tfbWFwX3Byb2dfZGV0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBlbnVtIGJwZl9wcm9nX3R5cGUgcHR5cGUpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTEwOS1cXHRtdXRleF9sb2NrKFxcdTAwMjZzb2NrbWFwX211dGV4KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjExMDpcXHRyZXQgPSBzb2NrX21hcF9wcm9nX3VwZGF0ZShtYXAsIE5VTEwsIHByb2csIE5VTEwsIGF0dHItXFx1MDAzZWF0dGFjaF90eXBlKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTExMS1cXHRtdXRleF91bmxvY2soXFx1MDAyNnNvY2ttYXBfbXV0ZXgpO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0xNTE4PXN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ19hdHRhY2hfY2hlY2soZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUsXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE1MzQtICovXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNTM1OnN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ191cGRhdGUoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUzNi1cXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZCwgc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0xNzQwPXN0YXRpYyB2b2lkIHNvY2tfbWFwX2xpbmtfcmVsZWFzZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE3NDctXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNzQ4OlxcdFdBUk5fT05fT05DRShzb2NrX21hcF9wcm9nX3VwZGF0ZShzb2NrbWFwX2xpbmstXFx1MDAzZW1hcCwgTlVMTCwgbGluay1cXHUwMDNlcHJvZywgbGluayxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE3NDktXFx0XFx0XFx0XFx0XFx0ICBsaW5rLVxcdTAwM2VhdHRhY2hfdHlwZSkpO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0xODczPWludCBzb2NrX21hcF9saW5rX2NyZWF0ZShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xOTA5LVxcdG11dGV4X2xvY2soXFx1MDAyNnNvY2ttYXBfbXV0ZXgpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTkxMDpcXHRyZXQgPSBzb2NrX21hcF9wcm9nX3VwZGF0ZShtYXAsIHByb2csIE5VTEwsIFxcdTAwMjZzb2NrbWFwX2xpbmstXFx1MDAzZWxpbmssIGF0dGFjaF90eXBlKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE5MTEtXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzb2NrbWFwX211dGV4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMDM6MDQ6MTEuMTc4MzkxOTk4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIxOTA0NTM5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLCBwdXR0aW5nIG15c2VsZiBpbiB0aGUgcm9sZSBvZiB0aGlua2luZyB0aHJvdWdoIHRoaXM6XG5cbioqUmVmaW5pbmcgdGhlIEZvY3VzOiBTb2NrIE1hcHMgYW5kIFByb2dyYW0gVXBkYXRlcyoqXG5cblJpZ2h0LCBsZXQncyBzZWUsIEknbSByZXZpZXdpbmcgdGhlIHJlY2VudCBjaGFuZ2VzLCBhbmQgSSdtIHRoaW5raW5nIGFib3V0IHdoZXJlIHdlIGNhbiBiZXN0IGFwcGx5IG91ciBuZXcgYEZvY3VzU3ltYm9sc2AgYXBwcm9hY2guIExvb2tpbmcgYXQgdGhlc2Ugc29ja2V0IG1hcCB1cGRhdGVz4oCmIGhtbSwgYHNvY2tfbWFwX3Byb2dfdXBkYXRlYCBhbmQgYHNvY2tfbWFwX2xpbmtfdXBkYXRlX3Byb2dgIGltbWVkaWF0ZWx5IGp1bXAgb3V0IGFzIHN0cm9uZyBwb3NzaWJpbGl0aWVzLiBUaGV5IHNlZW0gbGlrZSBwcmltZSBjYW5kaWRhdGVzIGZvciBkZWVwZXIgYW5hbHlzaXMsIGdpdmVuIHRoZWlyIHJvbGUgaW4gY29ubmVjdGluZyBwcm9ncmFtcyB0byBzb2NrZXQgbWFwcy5cblxuT2theSwgbGV0J3Mgc3RhcnQgd2l0aCBgc29ja19tYXBfbGlua191cGRhdGVfcHJvZ2AuIEkgd2FudCB0byBkaWcgaW50byB0aGF0IG9uZSBmaXJzdDsgc2VlIHdoYXQncyBoYXBwZW5pbmcgdGhlcmUgYXQgYSBmaW5lciBsZXZlbC4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNDQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMzowNDoxNC4zOTc0Mzk3ODVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQwOTA5MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic29ja19tYXBfbGlua191cGRhdGVfcHJvZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9zb2NrX21hcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NvY2tfbWFwLmM9MTc2Mz1zdGF0aWMgdm9pZCBzb2NrX21hcF9saW5rX2RlYWxsb2Moc3RydWN0IGJwZl9saW5rICpsaW5rKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNzcxLSAqL1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTc3MjpzdGF0aWMgaW50IHNvY2tfbWFwX2xpbmtfdXBkYXRlX3Byb2coc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTc3My1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTg2ND1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBzb2NrX21hcF9saW5rX29wcyA9IHtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg2Ny1cXHQuZGV0YWNoID0gc29ja19tYXBfbGlua19kZXRhY2gsXFxubmV0L2NvcmUvc29ja19tYXAuYzoxODY4OlxcdC51cGRhdGVfcHJvZyA9IHNvY2tfbWFwX2xpbmtfdXBkYXRlX3Byb2csXFxubmV0L2NvcmUvc29ja19tYXAuYy0xODY5LVxcdC5maWxsX2xpbmtfaW5mbyA9IHNvY2tfbWFwX2xpbmtfZmlsbF9pbmZvLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMzowNDoxNC40NTE1MzczODRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDg2NDc1NzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkh1bnRpbmcgRG93biBUaG9zZSBLY29uZmlnIE9wdGlvbnMgZm9yIGBzb2NrX21hcC5jYCoqXG5cbkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gcGlucG9pbnQgdGhlIEtjb25maWcgb3B0aW9ucyB0aGF0IGdvdmVybiB0aGUgYmVoYXZpb3IsIG9yIHBlcmhhcHMgZXZlbiB0aGUgdmVyeSBleGlzdGVuY2UsIG9mIGBzb2NrX21hcC5jYC4gSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBzeXN0ZW1hdGljIGFwcHJvYWNoLiBGaXJzdCwgSSdtIHRoaW5raW5nIEknbGwgcGVyZm9ybSBhIGJyb2FkIHNlYXJjaCB1c2luZyBgZ3JlcGAsIGBmaW5kYCwgb3IgZXZlbiBhIG1vcmUgc29waGlzdGljYXRlZCB0b29sIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZSB0cmVlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGRpcmVjdCByZWZlcmVuY2VzIHRvIHRoZSBmaWxlIG5hbWUgaXRzZWxmLCBsaWtlIFwic29ja19tYXAuY1wiLCBtYXliZSBldmVuIFwiQ09ORklHX1NPTUVUSElOR19TT0NLX01BUFwiLiBJJ2xsIGJlIG1pbmRmdWwgb2YgY2FzZSBzZW5zaXRpdml0eSBhbmQgdHJ5IGEgZmV3IHZhcmlhdGlvbnMsIGp1c3QgdG8gYmUgdGhvcm91Z2guXG5cbk5leHQsIEknbGwgY29uc2lkZXIgdGhhdCB0aGUgZmlsZSBtaWdodCBiZSBwYXJ0IG9mIGEgbGFyZ2VyIHN1YnN5c3RlbS4gUGVyaGFwcyBpdCdzIHVuZGVyIHRoZSB1bWJyZWxsYSBvZiBuZXR3b3JraW5nLCB0aGUgQlBGIGluZnJhc3RydWN0dXJlLCBvciBzb21ldGhpbmcgcmVsYXRlZCB0byBzb2NrZXQgb3BlcmF0aW9ucy4gSWYgbXkgaW5pdGlhbCBzZWFyY2ggaXMgdG9vIGJyb2FkLCBJJ2xsIG5hcnJvdyBpdCBkb3duIGJhc2VkIG9uIG15IHByaW9yIGtub3dsZWRnZSBhbmQgY29udGV4dC4gSSdsbCBmb3JtdWxhdGUgYSBtb3JlIHRhcmdldGVkIHNlYXJjaC4gRm9yIGluc3RhbmNlLCBJIG1pZ2h0IGxvb2sgZm9yIEtjb25maWcgc3ltYm9scyB0aGF0IGRlYWwgd2l0aCBzb2NrZXQgbWFwcywgQlBGIHByb2dyYW0gc3VwcG9ydCwgb3Igc3BlY2lmaWMgbmV0d29ya2luZyBmZWF0dXJlcyB0aGF0IGNvdWxkIHVzZSB0aGlzIGNvbXBvbmVudC5cblxuSSdsbCBhbHNvIGtlZXAgaW4gbWluZCB0aGF0IHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgbWlnaHQgbm90IGRpcmVjdGx5IG1lbnRpb24gYHNvY2tfbWFwLmNgLCBidXQgcmF0aGVyIGNvbnRyb2wgdGhlIGluY2x1c2lvbiBvZiBhIGxhcmdlciBtb2R1bGUgb3IgZnVuY3Rpb25hbGl0eSB0aGF0IGluZGlyZWN0bHkgYnJpbmdzIGl0IGluLiBTbywgSSBuZWVkIHRvIGxvb2sgZm9yIGluZGlyZWN0IGRlcGVuZGVuY2llcy4gSSBtaWdodCBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBpdHMgcHVycG9zZS4gVGhlbiwgYnkgbG9va2luZyBhdCB0aGUgcHVycG9zZSBvZiB0aGUgY29kZSwgSSBjYW4gbWFrZSBzb21lIGluZmVyZW5jZXMgdG8gc2VhcmNoIHRoZSBjb25maWd1cmF0aW9uLiBJJ2xsIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgb3IgdGhlIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIGZvciBoaW50cyBhYm91dCByZWxldmFudCBLY29uZmlnIHN5bWJvbHMuXG5cbkZpbmFsbHksIEknbGwgZG91YmxlLWNoZWNrIG15IGZpbmRpbmdzLiBJJ2xsIHJlYWQgYW55IGRvY3VtZW50YXRpb24gc3Vycm91bmRpbmcgdGhlIHBvc3NpYmxlIEtjb25maWcgc3ltYm9scyB0byB2ZXJpZnkgdGhlaXIgZXhhY3QgZnVuY3Rpb24gYW5kIGltcGFjdC4gSSdsbCB2ZXJpZnkgdGhhdCBteSBjb25jbHVzaW9ucyBhbGlnbiB3aXRoIHRoZSBhY3R1YWwgYnVpbGQgcHJvY2VzcyBhbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjYzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMDM6MDQ6MTguNTM4MDE1NDAyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MzM5NjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvY2tfbWFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlPTQ0PW9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICs9IHNrbXNnLm9cXG5uZXQvY29yZS9NYWtlZmlsZTo0NTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHNvY2tfbWFwLm9cXG5uZXQvY29yZS9NYWtlZmlsZS00Ni1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9za19zdG9yYWdlLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMDM6MDQ6MTguNTk1MzYwODQxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE3ODY5MzIzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uLiBUaGUga2V5IGZsYWcgSSBzZWUgaXMgYENPTkZJR19CUEZfU1lTQ0FMTGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoYXQgZWxzZSBpcyBwb3RlbnRpYWxseSByZWxldmFudD9cIiBMZXQncyBzZWUuLi4gaXMgYENPTkZJR19ORVRfU09DS19NU0dgIGFsc28gaW4gcGxheSBoZXJlPyBJIG5lZWQgdG8gY29uc2lkZXIgYWxsIHRoZSBwaWVjZXMuXG5cbkFoLCBJIHNlZS4uLiBgc29ja19tYXAub2AgZ2V0cyBjb21waWxlZCBpZiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlbmFibGVkLiBUaGF0IG1ha2VzIHNlbnNlLCBhIGtleSBidWlsZGluZyBibG9jay4gTm93LCBJIGhhdmUgdG8ga2VlcCB0aGlua2luZyB0aHJvdWdoIHRoaXMuIElzIGBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVJgIGRlcGVuZGVudCBvbiBhbnl0aGluZyBlbHNlIHdpdGhpbiB0aGlzIGNvbmZpZ3VyYXRpb24gZWNvc3lzdGVtPyBXaGF0IGFyZSBpdHMgb3RoZXIgZGVwZW5kZW5jaWVzIGFuZCBpbXBsaWNhdGlvbnM/IEkgbmVlZCB0byB0cmFjZSB0aGlzIGRlcGVuZGVuY3kgY2hhaW4gdG8gYmUgY2VydGFpbiBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjIyOSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAzOjA0OjIxLjc3NDA1NjQ2OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI5NTE2NDI1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vYnBmL2xpYmJwZi9wcm9ncmFtX3R5cGVzLnJzdD0xOD1kZXNjcmliZWQgaW4gbW9yZSBkZXRhaWwgaW4gdGhlIGZvb3Rub3Rlcy5cXG4tLVxcbkRvY3VtZW50YXRpb24vYnBmL2xpYmJwZi9wcm9ncmFtX3R5cGVzLnJzdC0xNzktKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tK1xcbkRvY3VtZW50YXRpb24vYnBmL2xpYmJwZi9wcm9ncmFtX3R5cGVzLnJzdDoxODA6fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSYGAgICAgICAgICAgIHwgYGBza19za2Ivc3RyZWFtX3BhcnNlcmBgICAgICAgICAgfCAgICAgICAgICAgfFxcbkRvY3VtZW50YXRpb24vYnBmL2xpYmJwZi9wcm9ncmFtX3R5cGVzLnJzdC0xODEtKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tK1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3NvY2ttYXAucnN0PTU3PVRoZSBhdHRhY2ggdHlwZXMgZm9yIHRoZSBtYXAgcHJvZ3JhbXMgYXJlOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3NvY2ttYXAucnN0LTU5LS0gYGBtc2dfcGFyc2VyYGAgcHJvZ3JhbSAtIGBgQlBGX1NLX01TR19WRVJESUNUYGAuXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3NvY2ttYXAucnN0OjYwOi0gYGBzdHJlYW1fcGFyc2VyYGAgcHJvZ3JhbSAtIGBgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSYGAuXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3NvY2ttYXAucnN0LTYxLS0gYGBzdHJlYW1fdmVyZGljdGBgIHByb2dyYW0gLSBgYEJQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1RgYC5cXG4tLVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9zb2NrbWFwLnJzdD00NDQ9dmVyZGljdCBwcm9ncmFtLCBhcyB3ZWxsIGFzIGFkZCBhIHNvY2tldCBlbnRyeS5cXG4tLVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9zb2NrbWFwLnJzdC00NTgtXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3NvY2ttYXAucnN0OjQ1OTpcXHRcXHRlcnIgPSBicGZfcHJvZ19hdHRhY2gocGFyc2VfcHJvZ19mZCwgbWFwLCBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVIsIDApO1xcbkRvY3VtZW50YXRpb24vYnBmL21hcF9zb2NrbWFwLnJzdC00NjAtXFx0XFx0aWYgKGVycil7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTA5OT1lbnVtIGJwZl9hdHRhY2hfdHlwZSB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTEwMy1cXHRCUEZfQ0dST1VQX1NPQ0tfT1BTLFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMTA0OlxcdEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUixcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTEwNS1cXHRCUEZfU0tfU0tCX1NUUkVBTV9WRVJESUNULFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NDQ1Mz1hdHRhY2hfdHlwZV90b19wcm9nX3R5cGUoZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NDg3LVxcdFxcdHJldHVybiBCUEZfUFJPR19UWVBFX1NLX01TRztcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0NDg4OlxcdGNhc2UgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ0ODktXFx0Y2FzZSBCUEZfU0tfU0tCX1NUUkVBTV9WRVJESUNUOlxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NDc3Mz1zdGF0aWMgaW50IGJwZl9wcm9nX3F1ZXJ5KGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDgxOC1cXHRcXHRyZXR1cm4gbmV0bnNfYnBmX3Byb2dfcXVlcnkoYXR0ciwgdWF0dHIpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQ4MTk6XFx0Y2FzZSBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVI6XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDgyMC1cXHRjYXNlIEJQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1Q6XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTE0NzU9c3RhdGljIGludCBzb2NrX21hcF9wcm9nX2xpbmtfbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfcHJvZyAqKipwcHJvZyxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQ5MC0jaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIpXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNDkxOlxcdGNhc2UgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSOlxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQ5Mi1cXHRcXHRjdXJfcHByb2cgPSBcXHUwMDI2cHJvZ3MtXFx1MDAzZXN0cmVhbV9wYXJzZXI7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTE1MTg9c3RhdGljIGludCBzb2NrX21hcF9wcm9nX2F0dGFjaF9jaGVjayhlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHRhY2hfdHlwZSxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUyMS1cXHQvKiBBIHN0cmVhbSBwYXJzZXIgbXVzdCBub3QgbW9kaWZ5IHRoZSBza2IsIG9ubHkgbWVhc3VyZSBpdC4gKi9cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE1MjI6XFx0aWYgKHByb2cgXFx1MDAyNlxcdTAwMjYgYXR0YWNoX3R5cGUgPT0gQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSIFxcdTAwMjZcXHUwMDI2XFxubmV0L2NvcmUvc29ja19tYXAuYy0xNTIzLVxcdCAgICBwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWNoYW5nZXNfcGt0X2RhdGEpXFxuLS1cXG50b29scy9icGYvYnBmdG9vbC9wcm9nLmM9NDc9c3RhdGljIGNvbnN0IGJvb2wgYXR0YWNoX3R5cGVzW10gPSB7XFxudG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jOjQ4OlxcdFtCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVJdID0gdHJ1ZSxcXG50b29scy9icGYvYnBmdG9vbC9wcm9nLmMtNDktXFx0W0JQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1RdID0gdHJ1ZSxcXG4tLVxcbnRvb2xzL2JwZi9icGZ0b29sL3Byb2cuYz01OT1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGF0dGFjaF90eXBlX3N0cmluZ3NbXSA9IHtcXG50b29scy9icGYvYnBmdG9vbC9wcm9nLmM6NjA6XFx0W0JQRl9TS19TS0JfU1RSRUFNX1BBUlNFUl0gPSBcXFwic3RyZWFtX3BhcnNlclxcXCIsXFxudG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jLTYxLVxcdFtCUEZfU0tfU0tCX1NUUkVBTV9WRVJESUNUXSA9IFxcXCJzdHJlYW1fdmVyZGljdFxcXCIsXFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTA5OT1lbnVtIGJwZl9hdHRhY2hfdHlwZSB7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTEwMy1cXHRCUEZfQ0dST1VQX1NPQ0tfT1BTLFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMTA0OlxcdEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUixcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTEwNS1cXHRCUEZfU0tfU0tCX1NUUkVBTV9WRVJESUNULFxcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGYuYz03OT1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGF0dGFjaF90eXBlX25hbWVbXSA9IHtcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMTA3LVxcdFtCUEZfQ0dST1VQX1NFVFNPQ0tPUFRdXFx0XFx0PSBcXFwiY2dyb3VwX3NldHNvY2tvcHRcXFwiLFxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6MTA4OlxcdFtCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVJdXFx0PSBcXFwic2tfc2tiX3N0cmVhbV9wYXJzZXJcXFwiLFxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMTA5LVxcdFtCUEZfU0tfU0tCX1NUUkVBTV9WRVJESUNUXVxcdD0gXFxcInNrX3NrYl9zdHJlYW1fdmVyZGljdFxcXCIsXFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTEwMDc2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3NlY19kZWYgc2VjdGlvbl9kZWZzW10gPSB7XFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTEwMTUyLVxcdFNFQ19ERUYoXFxcInNvY2tvcHNcXFwiLFxcdFxcdFNPQ0tfT1BTLCBCUEZfQ0dST1VQX1NPQ0tfT1BTLCBTRUNfQVRUQUNIQUJMRV9PUFQpLFxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6MTAxNTM6XFx0U0VDX0RFRihcXFwic2tfc2tiL3N0cmVhbV9wYXJzZXJcXFwiLFxcdFNLX1NLQiwgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSLCBTRUNfQVRUQUNIQUJMRV9PUFQpLFxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMTAxNTQtXFx0U0VDX0RFRihcXFwic2tfc2tiL3N0cmVhbV92ZXJkaWN0XFxcIixTS19TS0IsIEJQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1QsIFNFQ19BVFRBQ0hBQkxFX09QVCksXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX3NvY2ttYXAuYz0yNDc9c3RhdGljIGludCBzZXR1cF9yeF9zb2NrbWFwKHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX3NvY2ttYXAuYy0yNTktXFx0XFx0Y3R4LnNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcGt0X3NpemUgPSBjdHguc3RycF9zaXplO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfc29ja21hcC5jOjI2MDpcXHRcXHRlcnIgPSBicGZfcHJvZ19hdHRhY2gocGFyc2VyLCBtYXAsIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9zb2NrbWFwLmMtMjYxLVxcdFxcdGlmIChlcnIpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZWN0aW9uX25hbWVzLmM9MjA9c3RhdGljIHN0cnVjdCBzZWNfbmFtZV90ZXN0IHRlc3RzW10gPSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZWN0aW9uX25hbWVzLmMtODEtXFx0XFx0XFxcInNrX3NrYi9zdHJlYW1fcGFyc2VyXFxcIixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZWN0aW9uX25hbWVzLmM6ODI6XFx0XFx0ezAsIEJQRl9QUk9HX1RZUEVfU0tfU0tCLCBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVJ9LFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlY3Rpb25fbmFtZXMuYzo4MzpcXHRcXHR7MCwgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSfSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZWN0aW9uX25hbWVzLmMtODQtXFx0fSxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuYz0xMTg3PXN0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF9jb3BpZWRfc2VxKGJvb2wgc3RycClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuYy0xMjEwLVxcdFxcdHByb2cgPSBza2VsLVxcdTAwM2Vwcm9ncy5wcm9nX3NrYl92ZXJkaWN0X2luZ3Jlc3Nfc3RycDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmM6MTIxMTpcXHRcXHRlcnIgPSBicGZfcHJvZ19hdHRhY2goYnBmX3Byb2dyYW1fX2ZkKHByb2cpLCBtYXAsIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jLTEyMTItXFx0XFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwiYnBmX3Byb2dfYXR0YWNoIHBhcnNlclxcXCIpKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jPTEzNzY9dm9pZCB0ZXN0X3NvY2ttYXBfYmFzaWModm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuYy0xNDA4LVxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJzb2NrbWFwIHN0cmVhbV9wYXJzZXIgcHJvZ3MgcXVlcnlcXFwiKSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmM6MTQwOTpcXHRcXHR0ZXN0X3NvY2ttYXBfcHJvZ3NfcXVlcnkoQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmMtMTQxMC1cXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwic29ja21hcCBzdHJlYW1fdmVyZGljdCBwcm9ncyBxdWVyeVxcXCIpKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9saXN0ZW4uYz03MjQ9c3RhdGljIHZvaWQgdGVzdF9za2JfcmVkaXJfdG9fY29ubmVjdGVkKHN0cnVjdCB0ZXN0X3NvY2ttYXBfbGlzdGVuICpza2VsLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9saXN0ZW4uYy03MzMtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9saXN0ZW4uYzo3MzQ6XFx0ZXJyID0geGJwZl9wcm9nX2F0dGFjaChwYXJzZXIsIHNvY2tfbWFwLCBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVIsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfbGlzdGVuLmMtNzM1LVxcdGlmIChlcnIpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2xpc3Rlbi5jLTc0NS1kZXRhY2g6XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9saXN0ZW4uYzo3NDY6XFx0eGJwZl9wcm9nX2RldGFjaDIocGFyc2VyLCBzb2NrX21hcCwgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2xpc3Rlbi5jLTc0Ny19XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2xpc3Rlbi5jPTg0ND1zdGF0aWMgdm9pZCB0ZXN0X3NrYl9yZWRpcl90b19saXN0ZW5pbmcoc3RydWN0IHRlc3Rfc29ja21hcF9saXN0ZW4gKnNrZWwsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2xpc3Rlbi5jLTg1My1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2xpc3Rlbi5jOjg1NDpcXHRlcnIgPSB4YnBmX3Byb2dfYXR0YWNoKHBhcnNlciwgc29ja19tYXAsIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9saXN0ZW4uYy04NTUtXFx0aWYgKGVycilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfbGlzdGVuLmMtODY1LWRldGFjaDpcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2xpc3Rlbi5jOjg2NjpcXHR4YnBmX3Byb2dfZGV0YWNoMihwYXJzZXIsIHNvY2tfbWFwLCBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfbGlzdGVuLmMtODY3LX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfbGlzdGVuLmM9OTQ4PXN0YXRpYyB2b2lkIHRlc3Rfc2tiX3JlZGlyX3BhcnRpYWwoc3RydWN0IHRlc3Rfc29ja21hcF9saXN0ZW4gKnNrZWwsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2xpc3Rlbi5jLTk1Ny1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2xpc3Rlbi5jOjk1ODpcXHRlcnIgPSB4YnBmX3Byb2dfYXR0YWNoKHBhcnNlciwgc29ja19tYXAsIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9saXN0ZW4uYy05NTktXFx0aWYgKGVycilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfbGlzdGVuLmMtOTY5LWRldGFjaDpcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2xpc3Rlbi5jOjk3MDpcXHR4YnBmX3Byb2dfZGV0YWNoMihwYXJzZXIsIHNvY2tfbWFwLCBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfbGlzdGVuLmMtOTcxLX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jPTQ2PXN0YXRpYyBzdHJ1Y3QgdGVzdF9zb2NrbWFwX3N0cnAgKnNvY2ttYXBfc3RycF9pbml0KGludCAqb3V0X21hcCwgYm9vbCBwYXNzLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmMtNjUtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmM6NjY6XFx0ZXJyID0gYnBmX3Byb2dfYXR0YWNoKHBhcnNlciwgKm91dF9tYXAsIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmMtNjctXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwiYnBmX3Byb2dfYXR0YWNoIHN0cmVhbSBwYXJzZXJcXFwiKSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jPTQzND1zdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXBfc3RycF9wYXJzZXJfcmVqZWN0KHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuYy00NDctXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmM6NDQ4OlxcdGVyciA9IGJwZl9wcm9nX2F0dGFjaChwYXJzZXJfbW9kLCBtYXAsIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmMtNDQ5LVxcdEFTU0VSVF9FUlIoZXJyLCBcXFwiYnBmX3Byb2dfYXR0YWNoIHBhcnNlcl9tb2RcXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuYy00NTAtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmM6NDUxOlxcdGxpbmsgPSBicGZfbGlua19jcmVhdGUocGFyc2VyX3JvLCBtYXAsIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiwgTlVMTCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmMtNDUyLVxcdGlmICghQVNTRVJUX0dFKGxpbmssIDAsIFxcXCJicGZfbGlua19jcmVhdGUgcGFyc2VyX3JvXFxcIikpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmM9NjY1PXN0YXRpYyB2b2lkIHRlc3Rfc29ja21hcCh1bnNpZ25lZCBpbnQgdGFza3MsIHZvaWQgKmRhdGEpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmMtNzgzLVxcdC8qIFRlc3QgYXR0YWNoaW5nL2RldGFjaGluZyBiYWQgZmRzICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jOjc4NDpcXHRlcnIgPSBicGZfcHJvZ19hdHRhY2goLTEsIGZkLCBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVIsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYy03ODUtXFx0aWYgKCFlcnIpIHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYy04MDctXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jOjgwODpcXHRlcnIgPSBicGZfcHJvZ19kZXRhY2goZmQsIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jLTgwOS1cXHRpZiAoIWVycikge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jLTkwMi1cXHRlcnIgPSBicGZfcHJvZ19hdHRhY2gocGFyc2VfcHJvZywgbWFwX2ZkX2JyZWFrLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYzo5MDM6XFx0XFx0XFx0ICAgICAgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmMtOTA0LVxcdGlmICghZXJyKSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmMtOTA5LVxcdGVyciA9IGJwZl9wcm9nX2F0dGFjaChwYXJzZV9wcm9nLCBtYXBfZmRfcngsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jOjkxMDpcXHRcXHQgICAgICBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVIsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYy05MTEtXFx0aWYgKGVycikge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jLTEwNTAtXFx0ZXJyID0gYnBmX3Byb2dfYXR0YWNoKHBhcnNlX3Byb2csIGZkLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYzoxMDUxOlxcdFxcdFxcdCAgICAgIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jLTEwNTItXFx0aWYgKGVycikge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jLTExMTUtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jOjExMTY6XFx0ZXJyID0gYnBmX3Byb2dfZGV0YWNoMihwYXJzZV9wcm9nLCBtYXBfZmRfcngsIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jLTExMTctXFx0aWYgKGVycikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMzowNDoyNC4wNjkyMjY2MThaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUzNjc1OTUwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEJQRiBTdHJlYW0gUGFyc2VyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGlzIGBDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVJgIHBvcHBpbmcgdXAgaW4gYG5ldC9jb3JlL3NvY2tfbWFwLmNgLiBUaGF0J3MgaW50ZXJlc3Rpbmc7IGl0IHN1Z2dlc3RzIHNvbWUgaW52b2x2ZW1lbnQgd2l0aCBlQlBGIGFuZCBuZXR3b3JrIHN0cmVhbXMuIE15IGZpcnN0IG1vdmUgaXMgdG8gZmlndXJlIG91dCB3aGF0IHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gYWN0dWFsbHkgKmRvZXMqLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIGltcGxpY2F0aW9ucy4gR2l2ZW4gdGhlIGNvbnRleHQsIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBuZXQvS2NvbmZpZ2Agb3IgYG5ldC9jb3JlL0tjb25maWdgIGZpbGVzIOKAkyBtb3N0IGxpa2VseSBvbmUgb2YgdGhvc2Ugd2lsbCBob2xkIHRoZSBhbnN3ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgY29uZmlnIHdpbGwgYWN0dWFsbHkgZG8gdG8gdGhlIGJ1aWxkIGFuZCB0aGUgcmVzdWx0aW5nIGtlcm5lbCdzIG5ldHdvcmsgZnVuY3Rpb25hbGl0eS4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTQ3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMDM6MDQ6MjcuNjA1OTg4NDI5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODczNzExOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUEZfU1RSRUFNX1BBUlNFUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTM1ND1jb25maWcgQlFMXFxuLS1cXG5uZXQvS2NvbmZpZy0zNjAtXFxubmV0L0tjb25maWc6MzYxOmNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlxcbm5ldC9LY29uZmlnLTM2Mi1cXHRib29sIFxcXCJlbmFibGUgQlBGIFNUUkVBTV9QQVJTRVJcXFwiXFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTU0NT1zdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtNTczLVxcbm5ldC9jb3JlL3NrbXNnLmM6NTc0OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilcXG5uZXQvY29yZS9za21zZy5jLTU3NS1cXHRwc29jay1cXHUwMDNlaW5ncmVzc19ieXRlcyArPSBsZW47XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTEwNTc9c3RhdGljIHZvaWQgc2tfcHNvY2tfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMDczLVxcbm5ldC9jb3JlL3NrbXNnLmM6MTA3NDojaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIpXFxubmV0L2NvcmUvc2ttc2cuYy0xMDc1LXN0YXRpYyB2b2lkIHNrX3Bzb2NrX3N0cnBfcmVhZChzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz0xMTkzPXN0YXRpYyB2b2lkIHNrX3Bzb2NrX2RvbmVfc3RycChzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMTk1LX1cXG5uZXQvY29yZS9za21zZy5jOjExOTY6I2VuZGlmIC8qIENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUiAqL1xcbm5ldC9jb3JlL3NrbXNnLmMtMTE5Ny1cXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTQ3NT1zdGF0aWMgaW50IHNvY2tfbWFwX3Byb2dfbGlua19sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9wcm9nICoqKnBwcm9nLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNDg5LVxcdFxcdGJyZWFrO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTQ5MDojaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIpXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNDkxLVxcdGNhc2UgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSOlxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTY2Mj1zdGF0aWMgaW50IHRjcF9icGZfYXNzZXJ0X3Byb3RvX29wcyhzdHJ1Y3QgcHJvdG8gKm9wcylcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy02NzEtXFxubmV0L2lwdjQvdGNwX2JwZi5jOjY3MjojaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIpXFxubmV0L2lwdjQvdGNwX2JwZi5jLTY3My1pbnQgdGNwX2JwZl9zdHJwX3JlYWRfc29jayhzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy03MDUtfVxcbm5ldC9pcHY0L3RjcF9icGYuYzo3MDY6I2VuZGlmIC8qIENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUiAqL1xcbm5ldC9pcHY0L3RjcF9icGYuYy03MDctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAzOjA0OjI3LjY4NDczNjU3N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTY0Mjk5MTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIEJQRiBTdHJlYW0gUGFyc2VyIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBpdCdzIHByZXR0eSBjbGVhciBJJ20gZ29pbmcgdG8gbmVlZCB0byBlbmFibGUgYENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUmAgZm9yIHRoaXMsIGFuZCBhbHNvIGBDT05GSUdfQlBGX1NZU0NBTExgLiBObyBzdXJwcmlzZXMgdGhlcmUuIEJ1dCBiZWZvcmUgSSBwcm9jZWVkLCBpdCdzIGFsd2F5cyBhIGdvb2QgcHJhY3RpY2UgdG8gZG91YmxlIGNoZWNrIGRlcGVuZGVuY2llcy4gR290dGEgbWFrZSBzdXJlIGBDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVJgIGlzbid0IHJlbHlpbmcgb24gc29tZSBvYnNjdXJlIG9yIHVuZXhwZWN0ZWQgb3RoZXIgb3B0aW9uIGJlaW5nIHNldC4gTGV0J3MgZGlnIGluIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBwcmVyZXF1aXNpdGVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZiBiZWZvcmUgSSBtYWtlIHRoZXNlIGNoYW5nZXMuIEJldHRlciB0byBiZSB0aG9yb3VnaCB1cGZyb250IHRoYW4gdG8gY2hhc2UgZG93biBhIHdlaXJkIGJ1aWxkIGVycm9yIGxhdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjEyMSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAzOjA0OjMxLjY0OTAzNzk4OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ5MjE3ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTM1ND1jb25maWcgQlFMXFxuLS1cXG5uZXQvS2NvbmZpZy0zNjAtXFxubmV0L0tjb25maWc6MzYxOmNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlxcbm5ldC9LY29uZmlnLTM2Mi1cXHRib29sIFxcXCJlbmFibGUgQlBGIFNUUkVBTV9QQVJTRVJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAzOjA0OjMxLjcwMzk2NzE5NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDQ1NjAyMjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzZWN0aW9uIG9mIHRoZSBjb2RlIGJldHRlci4gTGV0IG1lIHNlZS4uLiBJJ20gdGhpbmtpbmcgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgbGlrZWx5IGluIGBuZXQvS2NvbmZpZ2AsIGFuZCwgYWgsIHllcywgSSdtIGFpbWluZyBmb3IgYXJvdW5kIGxpbmUgMzYxLiBUaGF0IGZlZWxzIGxpa2UgYSBnb29kIHNwb3QgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQgSSdtIGxvb2tpbmcgZm9yLiBMZXQncyBzZWUgd2hhdCB0aGF0IHJldmVhbHMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBiYXNlIGZvciBteSBleHBsb3JhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0MzcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMzowNDozNC43NDk1NzI2MzhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjYxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzU1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzU1OlxcdFxcdGJvb2xcXG4gMzU2OlxcdFxcdHByb21wdCBcXFwiRW5hYmxlIEJ5dGUgUXVldWUgTGltaXRzXFxcIlxcbiAzNTc6XFx0XFx0ZGVwZW5kcyBvbiBTWVNGU1xcbiAzNTg6XFx0XFx0c2VsZWN0IERRTFxcbiAzNTk6XFx0XFx0ZGVmYXVsdCB5XFxuIDM2MDpcXHRcXG4gMzYxOlxcdGNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlxcbiAzNjI6XFx0XFx0Ym9vbCBcXFwiZW5hYmxlIEJQRiBTVFJFQU1fUEFSU0VSXFxcIlxcbiAzNjM6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuIDM2NDpcXHRcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuIDM2NTpcXHRcXHRkZXBlbmRzIG9uIENHUk9VUF9CUEZcXG4gMzY2OlxcdFxcdHNlbGVjdCBTVFJFQU1fUEFSU0VSXFxuIDM2NzpcXHRcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxuIDM2ODpcXHRcXHRoZWxwXFxuIDM2OTpcXHRcXHQgIEVuYWJsaW5nIHRoaXMgYWxsb3dzIGEgVENQIHN0cmVhbSBwYXJzZXIgdG8gYmUgdXNlZCB3aXRoXFxuIDM3MDpcXHRcXHQgIEJQRl9NQVBfVFlQRV9TT0NLTUFQLlxcbiAzNzE6XFx0XFxuIDM3MjpcXHRjb25maWcgTkVUX0ZMT1dfTElNSVRcXG4gMzczOlxcdFxcdGJvb2wgXFxcIk5ldCBmbG93IGxpbWl0XFxcIlxcbiAzNzQ6XFx0XFx0ZGVwZW5kcyBvbiBSUFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMDM6MDQ6MzQuNzQ5NjQwMzQ4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMzgxMzc5NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIFN0cmVhbSBQYXJzZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBCUEZfU1RSRUFNX1BBUlNFUmAgcmVsaWVzIG9uIGEgZmV3IG90aGVyIGNvcmUgZnVuY3Rpb25hbGl0aWVzOiBgSU5FVGAsIGBCUEZfU1lTQ0FMTGAsIGFuZCBgQ0dST1VQX0JQRmAuIFNpbmNlIGBCUEZfU1lTQ0FMTGAgYW5kIGBDR1JPVVBfQlBGYCBhcmUgYWxyZWFkeSBoYW5kbGVkIGluIGdlbmVyaWMgY29uZmlndXJhdGlvbnMsIHRoZSBrZXkgdGhpbmcgaGVyZSBpcyB0byBtYWtlIHN1cmUgYEJQRl9TVFJFQU1fUEFSU0VSYCBpdHNlbGYgZ2V0cyBleHBsaWNpdGx5IGluY2x1ZGVkIGluIGBFbmFibGVDb25maWdzYC4gSXQncyB3b3J0aCBsaXN0aW5nIGl0IGV4cGxpY2l0bHkuXG5cbk5vdywgZm9jdXNpbmcgb24gdGhlIGNvZGUgY2hhbmdlcywgaXQgYXBwZWFycyB0aGUgcGF0Y2ggaW50cm9kdWNlcyBgc29ja19tYXBfcHJvZ19hdHRhY2hfY2hlY2tgIGFuZCBjYWxscyBpdCBmcm9tIGBzb2NrX21hcF9wcm9nX3VwZGF0ZWAgYW5kIGBzb2NrX21hcF9saW5rX3VwZGF0ZV9wcm9nYC4gU28sIHRoZXNlIHRocmVlIGZ1bmN0aW9ucyBhcmUgZ29pbmcgdG8gYmUgdGhlIGNlbnRyYWwgcG9pbnRzIG9mIGludGVyZXN0IGZvciBhbmFseXNpcywgcGFydGljdWxhcmx5IGBzb2NrX21hcF9wcm9nX2F0dGFjaF9jaGVja2AsIGBzb2NrX21hcF9wcm9nX3VwZGF0ZWAsIGFuZCBgc29ja19tYXBfbGlua191cGRhdGVfcHJvZ2AuIEkgcXVpY2tseSBjb25maXJtZWQgdGhhdCBgc29ja19tYXBfcHJvZ19hdHRhY2hfY2hlY2tgIGlzLCBpbiBmYWN0LCBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgdXNlZnVsIHRvIGtub3cuXG5cbkJleW9uZCB0aG9zZSBjb3JlIGNoYW5nZXMsIGl0J3MgYWxzbyB3b3J0aCBub3RpbmcgdGhlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIHNlbGZ0ZXN0cy4gVGhlIHBhdGNoIHVwZGF0ZXMgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrbWFwX3BhcnNlX3Byb2cuY2AsIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmNgLiBUaGVzZSB0ZXN0cyBhcmUgaW1wb3J0YW50IGJlY2F1c2UgdGhleSBkZW1vbnN0cmF0ZSB0aGUgKmludGVuZGVkIHVzYWdlKiBvZiB0aGlzIGZlYXR1cmUuIFNwZWNpZmljYWxseSwgaXQgc2hvd3MgaG93IGEgQlBGIHByb2dyYW0gb2YgdHlwZSBgQlBGX1BST0dfVFlQRV9TS19TS0JgIHdpdGggYW4gYXR0YWNoIHR5cGUgb2YgYEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUmAgaXMgYXR0YWNoZWQgdG8gYSBzb2NrbWFwLiBUaGUga2V5IHBhcnQgaGVyZSBpcyB0aGF0IHRoZSBwYXRjaCBhbHNvIGludHJvZHVjZXMgYSBjaGVjayB0byBwcmV2ZW50IGF0dGFjaGluZyBhIHByb2dyYW0gdGhhdCBtb2RpZmllcyB0aGUgcGFja2V0IGRhdGEuIFRoaXMgc2VlbXMgdG8gYmUgdGhlIGNydWNpYWwgYml0OiBpdCBsb29rcyBsaWtlIHdlJ3JlIGVuZm9yY2luZyBhIGNvbnN0cmFpbnQgYmFzZWQgb24gYHByb2ctXHUwMDNlYXV4LVx1MDAzZWNoYW5nZXNfcGt0X2RhdGFgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGBjaGFuZ2VzX3BrdF9kYXRhYCBjaGVjay4gVGhhdCBzaG91bGQgYmUgbXkgbmV4dCBmb2N1cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4NjcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMzowNDo0Mi4wODc3ODAxODNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NDA0Mzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoYW5nZXNfcGt0X2RhdGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9jZmcuYz00Mz1lbnVtIHtcXG4tLVxcbmtlcm5lbC9icGYvY2ZnLmMtNTAtXFxua2VybmVsL2JwZi9jZmcuYzo1MTpzdGF0aWMgdm9pZCBtYXJrX3N1YnByb2dfY2hhbmdlc19wa3RfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgb2ZmKVxcbmtlcm5lbC9icGYvY2ZnLmMtNTIte1xcbi0tXFxua2VybmVsL2JwZi9jZmcuYy01NS1cXHRzdWJwcm9nID0gYnBmX2ZpbmRfY29udGFpbmluZ19zdWJwcm9nKGVudiwgb2ZmKTtcXG5rZXJuZWwvYnBmL2NmZy5jOjU2OlxcdHN1YnByb2ctXFx1MDAzZWNoYW5nZXNfcGt0X2RhdGEgPSB0cnVlO1xcbmtlcm5lbC9icGYvY2ZnLmMtNTctfVxcbi0tXFxua2VybmVsL2JwZi9jZmcuYz04MT1zdGF0aWMgdm9pZCBtZXJnZV9jYWxsZWVfZWZmZWN0cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgdCwgaW50IHcpXFxuLS1cXG5rZXJuZWwvYnBmL2NmZy5jLTg2LVxcdGNhbGxlZSA9IGJwZl9maW5kX2NvbnRhaW5pbmdfc3VicHJvZyhlbnYsIHcpO1xcbmtlcm5lbC9icGYvY2ZnLmM6ODc6XFx0Y2FsbGVyLVxcdTAwM2VjaGFuZ2VzX3BrdF9kYXRhIHw9IGNhbGxlZS1cXHUwMDNlY2hhbmdlc19wa3RfZGF0YTtcXG5rZXJuZWwvYnBmL2NmZy5jLTg4LVxcdGNhbGxlci1cXHUwMDNlbWlnaHRfc2xlZXAgfD0gY2FsbGVlLVxcdTAwM2VtaWdodF9zbGVlcDtcXG4tLVxcbmtlcm5lbC9icGYvY2ZnLmM9NDI2PXN0YXRpYyBpbnQgdmlzaXRfaW5zbihpbnQgdCwgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvY2ZnLmMtNDg1LVxcdFxcdFxcdFxcdG1hcmtfc3VicHJvZ19taWdodF9zbGVlcChlbnYsIHQpO1xcbmtlcm5lbC9icGYvY2ZnLmM6NDg2OlxcdFxcdFxcdGlmIChicGZfaGVscGVyX2NoYW5nZXNfcGt0X2RhdGEoaW5zbi1cXHUwMDNlaW1tKSlcXG5rZXJuZWwvYnBmL2NmZy5jOjQ4NzpcXHRcXHRcXHRcXHRtYXJrX3N1YnByb2dfY2hhbmdlc19wa3RfZGF0YShlbnYsIHQpO1xcbmtlcm5lbC9icGYvY2ZnLmMtNDg4LVxcdFxcdFxcdGlmIChpbnNuLVxcdTAwM2VpbW0gPT0gQlBGX0ZVTkNfdGFpbF9jYWxsKSB7XFxuLS1cXG5rZXJuZWwvYnBmL2NmZy5jLTUxOS1cXHRcXHRcXHRpZiAocmV0ID09IDAgXFx1MDAyNlxcdTAwMjYgYnBmX2lzX2tmdW5jX3BrdF9jaGFuZ2luZyhcXHUwMDI2bWV0YSkpXFxua2VybmVsL2JwZi9jZmcuYzo1MjA6XFx0XFx0XFx0XFx0bWFya19zdWJwcm9nX2NoYW5nZXNfcGt0X2RhdGEoZW52LCB0KTtcXG5rZXJuZWwvYnBmL2NmZy5jLTUyMS1cXHRcXHRcXHRpZiAocmV0ID09IDAgXFx1MDAyNlxcdTAwMjYgYnBmX2lzX3Rocm93X2tmdW5jKGluc24pKVxcbi0tXFxua2VybmVsL2JwZi9jZmcuYz01NjI9aW50IGJwZl9jaGVja19jZmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvY2ZnLmMtNjM5LVxcdHJldCA9IDA7IC8qIGNmZyBsb29rcyBnb29kICovXFxua2VybmVsL2JwZi9jZmcuYzo2NDA6XFx0ZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWNoYW5nZXNfcGt0X2RhdGEgPSBlbnYtXFx1MDAzZXN1YnByb2dfaW5mb1swXS5jaGFuZ2VzX3BrdF9kYXRhO1xcbmtlcm5lbC9icGYvY2ZnLmMtNjQxLVxcdGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VtaWdodF9zbGVlcCA9IGVudi1cXHUwMDNlc3VicHJvZ19pbmZvWzBdLm1pZ2h0X3NsZWVwO1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MzE3Nz12b2lkIF9fd2VhayBicGZfaml0X2NvbXBpbGUoc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMzE4MC1cXG5rZXJuZWwvYnBmL2NvcmUuYzozMTgxOmJvb2wgX193ZWFrIGJwZl9oZWxwZXJfY2hhbmdlc19wa3RfZGF0YShlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQpXFxua2VybmVsL2JwZi9jb3JlLmMtMzE4Mi17XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTEwMjg9c3RhdGljIGludCBqaXRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTE1OS1cXHRcXHRmdW5jW2ldLVxcdTAwM2VhdXgtXFx1MDAzZWV4Y2VwdGlvbl9jYiA9IGVudi1cXHUwMDNlc3VicHJvZ19pbmZvW2ldLmlzX2V4Y2VwdGlvbl9jYjtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjExNjA6XFx0XFx0ZnVuY1tpXS1cXHUwMDNlYXV4LVxcdTAwM2VjaGFuZ2VzX3BrdF9kYXRhID0gZW52LVxcdTAwM2VzdWJwcm9nX2luZm9baV0uY2hhbmdlc19wa3RfZGF0YTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTExNjEtXFx0XFx0ZnVuY1tpXS1cXHUwMDNlYXV4LVxcdTAwM2VtaWdodF9zbGVlcCA9IGVudi1cXHUwMDNlc3VicHJvZ19pbmZvW2ldLm1pZ2h0X3NsZWVwO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTkzMjY9c3RhdGljIGludCBjaGVja19mdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTkzNjgtXFx0XFx0XFx0XFx0c3VicHJvZywgc3ViX25hbWUpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5MzY5OlxcdFxcdGlmIChlbnYtXFx1MDAzZXN1YnByb2dfaW5mb1tzdWJwcm9nXS5jaGFuZ2VzX3BrdF9kYXRhKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05MzcwLVxcdFxcdFxcdGNsZWFyX2FsbF9wa3RfcG9pbnRlcnMoZW52KTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDE0OT1zdGF0aWMgaW50IGNoZWNrX2hlbHBlcl9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDE4OC1cXHQvKiBXaXRoIExEX0FCUy9JTkQgc29tZSBKSVRzIHNhdmUvcmVzdG9yZSBza2IgZnJvbSByMS4gKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTAxODk6XFx0Y2hhbmdlc19kYXRhID0gYnBmX2hlbHBlcl9jaGFuZ2VzX3BrdF9kYXRhKGZ1bmNfaWQpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDE5MC1cXHRpZiAoY2hhbmdlc19kYXRhIFxcdTAwMjZcXHUwMDI2IGZuLVxcdTAwM2VhcmcxX3R5cGUgIT0gQVJHX1BUUl9UT19DVFgpIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODg1OD1pbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODg5OC1cXHRcXHRzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXggPSB0Z3RfcHJvZy1cXHUwMDNlYXV4O1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODg5OTpcXHRcXHRib29sIHRndF9jaGFuZ2VzX3BrdF9kYXRhO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODkwMC1cXHRcXHRib29sIHRndF9taWdodF9zbGVlcDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODkzNC1cXHRcXHRcXHR9XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4OTM1OlxcdFxcdFxcdHRndF9jaGFuZ2VzX3BrdF9kYXRhID0gYXV4LVxcdTAwM2VmdW5jXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4OTM2OlxcdFxcdFxcdFxcdFxcdCAgICAgICA/IGF1eC1cXHUwMDNlZnVuY1tzdWJwcm9nXS1cXHUwMDNlYXV4LVxcdTAwM2VjaGFuZ2VzX3BrdF9kYXRhXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4OTM3OlxcdFxcdFxcdFxcdFxcdCAgICAgICA6IGF1eC1cXHUwMDNlY2hhbmdlc19wa3RfZGF0YTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTg5Mzg6XFx0XFx0XFx0aWYgKHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlY2hhbmdlc19wa3RfZGF0YSBcXHUwMDI2XFx1MDAyNiAhdGd0X2NoYW5nZXNfcGt0X2RhdGEpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg5MzktXFx0XFx0XFx0XFx0YnBmX2xvZyhsb2csXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAzOjA0OjQyLjE0NDE5NTkwMloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzYzOTAxNTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBTdHJlYW0gUGFyc2VyIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIHJlbGF0aXZlbHkgbWlub3IsIGJ1dCBpbXBvcnRhbnQsIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbS4gRXNzZW50aWFsbHksIGl0IGFkZHMgYSBjaGVjazogdGhlIGBjaGFuZ2VzX3BrdF9kYXRhYCBmbGFnIGlzIHNldCB3aGVuIGEgQlBGIHByb2dyYW0gdXNlcyBhIGhlbHBlciB0aGF0IG1vZGlmaWVzIHBhY2tldCBkYXRhLiBUaGUgcGF0Y2ggbm93IGNoZWNrcyB0aGlzIGZsYWcgKnNwZWNpZmljYWxseSogd2hlbiB3ZSdyZSB0cnlpbmcgdG8gYXR0YWNoIGEgcHJvZ3JhbSBvZiB0aGUgYEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUmAgdHlwZS4gU2VlbXMgbGlrZSBhIGdvb2Qgc2FmZXR5IG1lYXN1cmUuXG5cbkdpdmVuIHRoaXMsIEkndmUgZ290IGEgY2xlYXIgZnV6emluZyBzdHJhdGVneS4gVGhlIGtleSBmdW5jdGlvbnMgdG8gdGFyZ2V0IGFyZSBgc29ja19tYXBfcHJvZ19hdHRhY2hfY2hlY2tgLCBgc29ja19tYXBfcHJvZ191cGRhdGVgLCBhbmQgYHNvY2tfbWFwX2xpbmtfdXBkYXRlX3Byb2dgLiBUaGVzZSBhcmUgdGhlIGVudHJ5IHBvaW50cyB0aGF0IHRoZSBwYXRjaCBkaXJlY3RseSBpbXBhY3RzLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBicGZfcHJvZ19hdHRhY2hgIGFuZCBgYnBmX2xpbmtfdXBkYXRlYCBzeXNjYWxscy4gV2UgYXJlIGNoZWNraW5nIHRoZSBmbGFnIHdpdGhpbiB0aGUgY2hlY2sgYW5kIHVwZGF0ZSBmdW5jdGlvbnMuXG5cblRoZSByZWxldmFudCBjb25maWcgSSBuZWVkIHRvIHBheSBhdHRlbnRpb24gdG8gaXMgYEJQRl9TVFJFQU1fUEFSU0VSYC4gSSBhbHJlYWR5IGtub3cgc3l6a2FsbGVyIGhhcyBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19DR1JPVVBfQlBGYCBlbmFibGVkLiBHb29kLiBJIGFsc28gc2VlIHRoYXQgYENPTkZJR19ORVRfU09DS19NU0dgIGlzIGEgZGVwZW5kZW5jeSBvZiBgQlBGX1NUUkVBTV9QQVJTRVJgLiBBbGwgdGhlIHBpZWNlcyBhcmUgaGVyZS4gSSdsbCBtYWtlIHN1cmUgdG8gbm90ZSB0aGF0IGluIG15IG91dHB1dC5cblxuQWxyaWdodCwgSSdtIGNvbmZpZGVudCBpbiB0aGlzIGV2YWx1YXRpb24uIFRpbWUgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzNzQsIk91dHB1dFRva2VucyI6MTM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAzOjA0OjQ4LjUwODEwMTM0OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NTgzNzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1RSRUFNX1BBUlNFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNvY2tfbWFwX3Byb2dfYXR0YWNoX2NoZWNrXCIsXG4gICAgXCJzb2NrX21hcF9wcm9nX3VwZGF0ZVwiLFxuICAgIFwic29ja19tYXBfbGlua191cGRhdGVfcHJvZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBjaGVjayB0byBwcmV2ZW50IGF0dGFjaGluZyBCUEYgc3RyZWFtIHBhcnNlciBwcm9ncmFtcyB0aGF0IG1vZGlmeSBwYWNrZXQgZGF0YSB0byBzb2NrbWFwcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgc3Vic3lzdGVtIHRoYXQgYWZmZWN0cyBicGZfcHJvZ19hdHRhY2ggYW5kIGJwZl9saW5rX3VwZGF0ZSBzeXNjYWxscy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIGF0dGFjaCBhbmQgdXBkYXRlIGZ1bmN0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1RSRUFNX1BBUlNFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNvY2tfbWFwX3Byb2dfYXR0YWNoX2NoZWNrXCIsXG4gICAgXCJzb2NrX21hcF9wcm9nX3VwZGF0ZVwiLFxuICAgIFwic29ja19tYXBfbGlua191cGRhdGVfcHJvZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBjaGVjayB0byBwcmV2ZW50IGF0dGFjaGluZyBCUEYgc3RyZWFtIHBhcnNlciBwcm9ncmFtcyB0aGF0IG1vZGlmeSBwYWNrZXQgZGF0YSB0byBzb2NrbWFwcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgc3Vic3lzdGVtIHRoYXQgYWZmZWN0cyBicGZfcHJvZ19hdHRhY2ggYW5kIGJwZl9saW5rX3VwZGF0ZSBzeXNjYWxscy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIGF0dGFjaCBhbmQgdXBkYXRlIGZ1bmN0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowrhfvj[1] Phase: Succeeded StartedAt: 2026-06-20 03:05:00 +0000 UTC FinishedAt: 2026-06-20 03:05:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhfvj[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-20 03:05:00 +0000 UTC FinishedAt: 2026-06-20 03:05:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhfvj[2] Phase: Succeeded StartedAt: 2026-06-20 03:05:00 +0000 UTC FinishedAt: 2026-06-20 06:57:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhfvj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_prog_attach_check","sock_map_prog_update","sock_map_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"6573ff55-3f17-43a4-a437-fa954209aa7f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-20 03:05:00 +0000 UTC FinishedAt: 2026-06-20 06:57:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_prog_attach_check","sock_map_prog_update","sock_map_link_update_prog"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"6573ff55-3f17-43a4-a437-fa954209aa7f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowrhfvj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_prog_attach_check","sock_map_prog_update","sock_map_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"6573ff55-3f17-43a4-a437-fa954209aa7f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-20 03:05:00 +0000 UTC FinishedAt: 2026-06-20 03:05:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhfvj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_prog_attach_check","sock_map_prog_update","sock_map_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"6573ff55-3f17-43a4-a437-fa954209aa7f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-20 03:05:00 +0000 UTC FinishedAt: 2026-06-20 03:05:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrhfvj/series-workflowrhfvj-convert-artifact-659211919/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrhfvj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_prog_attach_check","sock_map_prog_update","sock_map_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"6573ff55-3f17-43a4-a437-fa954209aa7f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-20 03:05:10 +0000 UTC FinishedAt: 2026-06-20 03:27:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhfvj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_prog_attach_check","sock_map_prog_update","sock_map_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"6573ff55-3f17-43a4-a437-fa954209aa7f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-20 03:05:10 +0000 UTC FinishedAt: 2026-06-20 03:27:10 +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:*6cc942ba-e90b-4ece-885e-db0c9348dba1,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-workflowrhfvj/series-workflowrhfvj-convert-artifact-659211919/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": "dd2979dc-b73e-477c-95c2-e8b2a49d2243", "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-workflowrhfvj/series-workflowrhfvj-build-action-3598234581/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrhfvj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_prog_attach_check","sock_map_prog_update","sock_map_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"6573ff55-3f17-43a4-a437-fa954209aa7f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-20 03:05:10 +0000 UTC FinishedAt: 2026-06-20 03:27:00 +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:*6cc942ba-e90b-4ece-885e-db0c9348dba1,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-workflowrhfvj/series-workflowrhfvj-convert-artifact-659211919/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": "dd2979dc-b73e-477c-95c2-e8b2a49d2243", "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-workflowrhfvj/series-workflowrhfvj-build-action-3598234581/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrhfvj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_prog_attach_check","sock_map_prog_update","sock_map_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"6573ff55-3f17-43a4-a437-fa954209aa7f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-20 03:27:10 +0000 UTC FinishedAt: 2026-06-20 03:27:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhfvj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_prog_attach_check","sock_map_prog_update","sock_map_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"6573ff55-3f17-43a4-a437-fa954209aa7f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-20 03:27:10 +0000 UTC FinishedAt: 2026-06-20 03:27:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhfvj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_prog_attach_check","sock_map_prog_update","sock_map_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"6573ff55-3f17-43a4-a437-fa954209aa7f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-20 03:27:10 +0000 UTC FinishedAt: 2026-06-20 03:27:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhfvj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_prog_attach_check","sock_map_prog_update","sock_map_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"6573ff55-3f17-43a4-a437-fa954209aa7f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-20 03:27:10 +0000 UTC FinishedAt: 2026-06-20 03:27:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"6573ff55-3f17-43a4-a437-fa954209aa7f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrhfvj/series-workflowrhfvj-convert-artifact-4111029214/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrhfvj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_prog_attach_check","sock_map_prog_update","sock_map_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"6573ff55-3f17-43a4-a437-fa954209aa7f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-20 03:27:20 +0000 UTC FinishedAt: 2026-06-20 03:29:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhfvj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_prog_attach_check","sock_map_prog_update","sock_map_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"6573ff55-3f17-43a4-a437-fa954209aa7f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-20 03:27:20 +0000 UTC FinishedAt: 2026-06-20 03:28:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*dd2979dc-b73e-477c-95c2-e8b2a49d2243,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-workflowrhfvj/series-workflowrhfvj-build-action-3598234581/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-workflowrhfvj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_prog_attach_check","sock_map_prog_update","sock_map_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"6573ff55-3f17-43a4-a437-fa954209aa7f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-20 03:29:08 +0000 UTC FinishedAt: 2026-06-20 03:29:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhfvj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_prog_attach_check","sock_map_prog_update","sock_map_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"6573ff55-3f17-43a4-a437-fa954209aa7f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-20 03:29:08 +0000 UTC FinishedAt: 2026-06-20 03:29:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhfvj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_prog_attach_check","sock_map_prog_update","sock_map_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"6573ff55-3f17-43a4-a437-fa954209aa7f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-20 03:29:08 +0000 UTC FinishedAt: 2026-06-20 03:52:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhfvj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_prog_attach_check","sock_map_prog_update","sock_map_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"6573ff55-3f17-43a4-a437-fa954209aa7f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-20 03:29:08 +0000 UTC FinishedAt: 2026-06-20 03:52:38 +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:*6cc942ba-e90b-4ece-885e-db0c9348dba1,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-workflowrhfvj/series-workflowrhfvj-convert-artifact-4111029214/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": "e6829c7c-2725-4298-b520-e6e53ca70683", "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-workflowrhfvj/series-workflowrhfvj-build-action-3622476978/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrhfvj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_prog_attach_check","sock_map_prog_update","sock_map_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"6573ff55-3f17-43a4-a437-fa954209aa7f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-20 03:29:08 +0000 UTC FinishedAt: 2026-06-20 03:52:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6cc942ba-e90b-4ece-885e-db0c9348dba1,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-workflowrhfvj/series-workflowrhfvj-convert-artifact-4111029214/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": "e6829c7c-2725-4298-b520-e6e53ca70683", "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-workflowrhfvj/series-workflowrhfvj-build-action-3622476978/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrhfvj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_prog_attach_check","sock_map_prog_update","sock_map_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"6573ff55-3f17-43a4-a437-fa954209aa7f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-20 03:52:38 +0000 UTC FinishedAt: 2026-06-20 03:52:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhfvj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_prog_attach_check","sock_map_prog_update","sock_map_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"6573ff55-3f17-43a4-a437-fa954209aa7f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-20 03:52:38 +0000 UTC FinishedAt: 2026-06-20 03:52:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhfvj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_prog_attach_check","sock_map_prog_update","sock_map_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"6573ff55-3f17-43a4-a437-fa954209aa7f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-20 03:52:38 +0000 UTC FinishedAt: 2026-06-20 03:54:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhfvj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_prog_attach_check","sock_map_prog_update","sock_map_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"6573ff55-3f17-43a4-a437-fa954209aa7f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-20 03:52:38 +0000 UTC FinishedAt: 2026-06-20 03:54:11 +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:*e6829c7c-2725-4298-b520-e6e53ca70683,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-workflowrhfvj/series-workflowrhfvj-build-action-3622476978/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-workflowrhfvj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_prog_attach_check","sock_map_prog_update","sock_map_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"6573ff55-3f17-43a4-a437-fa954209aa7f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-20 03:54:21 +0000 UTC FinishedAt: 2026-06-20 06:57:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhfvj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_prog_attach_check","sock_map_prog_update","sock_map_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"6573ff55-3f17-43a4-a437-fa954209aa7f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-20 03:54:21 +0000 UTC FinishedAt: 2026-06-20 06:57:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_prog_attach_check","sock_map_prog_update","sock_map_link_update_prog"],"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:*dd2979dc-b73e-477c-95c2-e8b2a49d2243,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e6829c7c-2725-4298-b520-e6e53ca70683,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-workflowrhfvj/series-workflowrhfvj-build-action-3598234581/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-workflowrhfvj/series-workflowrhfvj-build-action-3622476978/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowrhfvj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_prog_attach_check","sock_map_prog_update","sock_map_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"6573ff55-3f17-43a4-a437-fa954209aa7f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-20 03:54:21 +0000 UTC FinishedAt: 2026-06-20 03:54:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhfvj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_prog_attach_check","sock_map_prog_update","sock_map_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"6573ff55-3f17-43a4-a437-fa954209aa7f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-20 03:54:21 +0000 UTC FinishedAt: 2026-06-20 03:54:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_prog_attach_check","sock_map_prog_update","sock_map_link_update_prog"],"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-workflowrhfvj/series-workflowrhfvj-convert-artifact-18106595/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrhfvj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_prog_attach_check","sock_map_prog_update","sock_map_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"6573ff55-3f17-43a4-a437-fa954209aa7f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-20 03:54:21 +0000 UTC FinishedAt: 2026-06-20 03:54:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhfvj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_prog_attach_check","sock_map_prog_update","sock_map_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"6573ff55-3f17-43a4-a437-fa954209aa7f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-20 03:54:21 +0000 UTC FinishedAt: 2026-06-20 03:54:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhfvj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_prog_attach_check","sock_map_prog_update","sock_map_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"6573ff55-3f17-43a4-a437-fa954209aa7f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-20 03:54:21 +0000 UTC FinishedAt: 2026-06-20 03:54:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhfvj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_prog_attach_check","sock_map_prog_update","sock_map_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"6573ff55-3f17-43a4-a437-fa954209aa7f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-20 03:54:31 +0000 UTC FinishedAt: 2026-06-20 06:57:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhfvj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_prog_attach_check","sock_map_prog_update","sock_map_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_STREAM_PARSER"],"series_id":"6573ff55-3f17-43a4-a437-fa954209aa7f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-20 03:54:31 +0000 UTC FinishedAt: 2026-06-20 06:56:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*dd2979dc-b73e-477c-95c2-e8b2a49d2243,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e6829c7c-2725-4298-b520-e6e53ca70683,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-workflowrhfvj/series-workflowrhfvj-build-action-3598234581/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-workflowrhfvj/series-workflowrhfvj-build-action-3622476978/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-workflowrhfvj/series-workflowrhfvj-convert-artifact-18106595/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,}