Name: series-workflow4j2wn Phase: Succeeded StartedAt: 2026-07-20 23:38:18 +0000 UTC FinishedAt: 2026-07-21 04:30:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4j2wn[0] Phase: Succeeded StartedAt: 2026-07-20 23:38:18 +0000 UTC FinishedAt: 2026-07-21 00:08:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4j2wn[0].run-triage Phase: Succeeded StartedAt: 2026-07-20 23:38:18 +0000 UTC FinishedAt: 2026-07-21 00:08:32 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "026d81ec-4fb6-4448-8a9f-d50e7df373d5" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "prepare_scan_control", "shrink_inactive_list", "shrink_active_list", "evict_folios", "lruvec_page_state_monotonic", "node_page_state_monotonic", "workingset_refault", "pageout" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHJlcGFyZV9zY2FuX2NvbnRyb2wmIzM0OywKICAgICYjMzQ7c2hyaW5rX2luYWN0aXZlX2xpc3QmIzM0OywKICAgICYjMzQ7c2hyaW5rX2FjdGl2ZV9saXN0JiMzNDssCiAgICAmIzM0O2V2aWN0X2ZvbGlvcyYjMzQ7LAogICAgJiMzNDtscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMmIzM0OywKICAgICYjMzQ7bm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyYjMzQ7LAogICAgJiMzNDt3b3JraW5nc2V0X3JlZmF1bHQmIzM0OywKICAgICYjMzQ7cGFnZW91dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTFJVIGNvc3QgbW9kZWwgYW5kIHN0YXRpc3RpY3MgdHJhY2tpbmcgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJdCBpbnRyb2R1Y2VzIG1vbm90b25pYyBwYWdlIHN0YXRlIHRyYWNraW5nIGZvciBMUlUgdmVjdG9ycyBhbmQgbm9kZXMsIGFuZCB1cGRhdGVzIGhvdyBgYW5vbl9jb3N0YCBhbmQgYGZpbGVfY29zdGAgYXJlIGNhbGN1bGF0ZWQgZHVyaW5nIG1lbW9yeSByZWNsYWltLiBJdCBhbHNvIG1vZGlmaWVzIGJvdGggdGhlIHRyYWRpdGlvbmFsIExSVSBhbmQgTXVsdGktR2VuIExSVSAoTUdMUlUpIHJlY2xhaW0gcGF0aHMgdG8gdXNlIHRoZSBuZXcgY29zdCBtb2RlbCBhbmQgc3RhdGlzdGljcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMWNjYTg1NDllOTdkZTVlMzY3MTA5NjllNzU5NzMzMmM1ZDY0ZmUxNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDIxIDAwOjA2OjQxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IGUxZjQ2YTAwMTZmY2ZkLi5iNDBiYzRmNmZlNGEwZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuQEAgLTkzMSw2ICYjNDM7OTMxLDggQEAgdW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX291dHB1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKTtcbiBib29sIG1lbWNnX3N0YXRfaXRlbV92YWxpZChpbnQgaWR4KTtcbiBib29sIG1lbWNnX3ZtX2V2ZW50X2l0ZW1fdmFsaWQoZW51bSB2bV9ldmVudF9pdGVtIGlkeCk7XG4gdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KTtcbiYjNDM7dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuJiM0MztcdFx0XHRcdFx0ICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCk7XG4gdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdFx0XHQgICAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCk7XG4gXG5AQCAtMTM3OCw2ICYjNDM7MTM4MCwxMiBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0cmV0dXJuIG5vZGVfcGFnZV9zdGF0ZShscnV2ZWNfcGdkYXQobHJ1dmVjKSwgaWR4KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuJiM0MztcdFx0XHRcdFx0XHRcdGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMobHJ1dmVjX3BnZGF0KGxydXZlYyksIGlkeCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0XHRcdFx0XHQgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXG4ge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5pbmRleCBjYTI3MTIxODcxNDc1Yy4uODUzMDNjNTg2N2M4NGIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5AQCAtMzIzLDYgJiM0MzszMjMsOCBAQCBlbnVtIG5vZGVfc3RhdF9pdGVtIHtcbiBcdFBHU0NBTl9QUk9BQ1RJVkUsXG4gXHRQR1NDQU5fQU5PTixcbiBcdFBHU0NBTl9GSUxFLFxuJiM0MztcdFBHUk9UQVRFX0FOT04sXG4mIzQzO1x0UEdST1RBVEVfRklMRSxcbiBcdFBHUkVGSUxMLFxuICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG4gXHROUl9IVUdFVExCLFxuQEAgLTc1NSw2ICYjNDM7NzU3LDEyIEBAIHZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsXG4gXG4gI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG4gXG4mIzQzO3N0cnVjdCBscnVfY29zdCB7XG4mIzQzO1x0dW5zaWduZWQgbG9uZ1x0XHRjb3VudDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nXHRcdGxhc3Rfcm90YXRlZDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nXHRcdGxhc3RfaW87XG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCBscnV2ZWMge1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0XHRsaXN0c1tOUl9MUlVfTElTVFNdO1xuIFx0LyogcGVyIGxydXZlYyBscnVfbG9jayBmb3IgbWVtY2cgKi9cbkBAIC03NjMsOSAmIzQzOzc3MSwxMiBAQCBzdHJ1Y3QgbHJ1dmVjIHtcbiBcdCAqIFRoZXNlIHRyYWNrIHRoZSBjb3N0IG9mIHJlY2xhaW1pbmcgb25lIExSVSAtIGZpbGUgb3IgYW5vbiAtXG4gXHQgKiBvdmVyIHRoZSBvdGhlci4gQXMgdGhlIG9ic2VydmVkIGNvc3Qgb2YgcmVjbGFpbWluZyBvbmUgTFJVXG4gXHQgKiBpbmNyZWFzZXMsIHRoZSByZWNsYWltIHNjYW4gYmFsYW5jZSB0aXBzIHRvd2FyZCB0aGUgb3RoZXIuXG4mIzQzO1x0ICogVXBkYXRlZCBhbmQgZGVjYXllZCBhdCBwcmVwYXJlX3NjYW5fY29udHJvbCgpIHRpbWU7IGNvc3RfbG9ja1xuJiM0MztcdCAqIHNlcmlhbGlzZXMgdGhhdCB1cGRhdGUuXG4gXHQgKi9cbi1cdHVuc2lnbmVkIGxvbmdcdFx0XHRhbm9uX2Nvc3Q7XG4tXHR1bnNpZ25lZCBsb25nXHRcdFx0ZmlsZV9jb3N0O1xuJiM0MztcdHN0cnVjdCBscnVfY29zdFx0XHRcdGNvc3RbQU5PTl9BTkRfRklMRV07XG4mIzQzO1x0LyogUHJvdGVjdHMgY29zdFtdLiAqL1xuJiM0MztcdHNwaW5sb2NrX3RcdFx0XHRjb3N0X2xvY2s7XG4gXHQvKiBOb24tcmVzaWRlbnQgYWdlLCBkcml2ZW4gYnkgTFJVIG1vdmVtZW50ICovXG4gXHRhdG9taWNfbG9uZ190XHRcdFx0bm9ucmVzaWRlbnRfYWdlO1xuIFx0LyogUmVmYXVsdHMgYXQgdGhlIHRpbWUgb2YgbGFzdCByZWNsYWltIGN5Y2xlICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuaW5kZXggOGYwZjY4ZTI0NWJhYTMuLmI4ZTJlMWFmMmIxNDI1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5AQCAtMzA5LDkgJiM0MzszMDksNiBAQCBleHRlcm4gdW5zaWduZWQgbG9uZyB0b3RhbHJlc2VydmVfcGFnZXM7XG4gXG4gXG4gLyogbGludXgvbW0vc3dhcC5jICovXG4tdm9pZCBscnVfbm90ZV9jb3N0X3VubG9ja19pcnEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBib29sIGZpbGUsXG4tXHRcdHVuc2lnbmVkIGludCBucl9pbywgdW5zaWduZWQgaW50IG5yX3JvdGF0ZWQpO1xuLXZvaWQgbHJ1X25vdGVfY29zdF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqKTtcbiB2b2lkIGZvbGlvX2FkZF9scnUoc3RydWN0IGZvbGlvICopO1xuIHZvaWQgZm9saW9fYWRkX2xydV92bWEoc3RydWN0IGZvbGlvICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTtcbiB2b2lkIG1hcmtfcGFnZV9hY2Nlc3NlZChzdHJ1Y3QgcGFnZSAqKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oIGIvaW5jbHVkZS9saW51eC92bXN0YXQuaFxuaW5kZXggM2M5YzI2NmNmNzgyYWQuLjViMzFkOGU3YWU0MDU4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC92bXN0YXQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC92bXN0YXQuaFxuQEAgLTIwLDcgJiM0MzsyMCw2IEBAIHN0cnVjdCByZWNsYWltX3N0YXQge1xuIFx0dW5zaWduZWQgbnJfY29uZ2VzdGVkO1xuIFx0dW5zaWduZWQgbnJfd3JpdGViYWNrO1xuIFx0dW5zaWduZWQgbnJfaW1tZWRpYXRlO1xuLVx0dW5zaWduZWQgbnJfcGFnZW91dDtcbiBcdHVuc2lnbmVkIG5yX2FjdGl2YXRlW0FOT05fQU5EX0ZJTEVdO1xuIFx0dW5zaWduZWQgbnJfcmVmX2tlZXA7XG4gXHR1bnNpZ25lZCBucl91bm1hcF9mYWlsO1xuQEAgLTE5NCw2ICYjNDM7MTkzLDE5IEBAIHVuc2lnbmVkIGxvbmcgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZV9wYWdlcyhlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW0pXG4gXHRyZXR1cm4geDtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIE5vbi1jbGFtcGluZyB2YXJpYW50IG9mIGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoKSBpbnRlbmRlZCBmb3IgY2FsbGVycyB0aGF0XG4mIzQzOyAqIHNuYXBzaG90IGEgbW9ub3RvbmljYWxseS1pbmNyZW1lbnRlZCBjb3VudGVyIGFuZCBzdWJ0cmFjdCB0d28gc2FtcGxlcy5cbiYjNDM7ICogUmV0dXJucyB0aGUgcmF3IHdyYXBwaW5nIHZhbHVlIHNvIHRoYXQgdW5zaWduZWQgbW9kdWxhciBzdWJ0cmFjdGlvbiBzdGF5c1xuJiM0MzsgKiBjb3JyZWN0IGFjcm9zcyBhIHNpZ25lZC1sb25nIG92ZXJmbG93IChhIHJlYWwgaGF6YXJkIG9uIDMyLWJpdCkgdGhhdCB0aGVcbiYjNDM7ICogY2xhbXAgaW4gZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZSgpIHdvdWxkIG90aGVyd2lzZSB0dXJuIGludG8gYSBodWdlIHNwdXJpb3VzXG4mIzQzOyAqIGRlbHRhLiBEbyBOT1QgdXNlIGZvciBub24tbW9ub3RvbmljIHBhZ2UtY291bnQgcmVhZHMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMoZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuICh1bnNpZ25lZCBsb25nKWF0b21pY19sb25nX3JlYWQoXHUwMDI2dm1fbm9kZV9zdGF0W2l0ZW1dKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZShlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW0pXG4ge1xuIFx0Vk1fV0FSTl9PTl9PTkNFKHZtc3RhdF9pdGVtX2luX2J5dGVzKGl0ZW0pKTtcbkBAIC0yNTksMTEgJiM0MzsyNzEsMTQgQEAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbm9kZV9wYWdlX3N0YXRlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4gXHRcdFx0XHRcdFx0ZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKTtcbiBleHRlcm4gdW5zaWduZWQgbG9uZyBub2RlX3BhZ2Vfc3RhdGVfcGFnZXMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbiBcdFx0XHRcdFx0ICAgZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKTtcbiYjNDM7ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbSk7XG4gZXh0ZXJuIHZvaWQgZm9sZF92bV9udW1hX2V2ZW50cyh2b2lkKTtcbiAjZWxzZVxuICNkZWZpbmUgc3VtX3pvbmVfbm9kZV9wYWdlX3N0YXRlKG5vZGUsIGl0ZW0pIGdsb2JhbF96b25lX3BhZ2Vfc3RhdGUoaXRlbSlcbiAjZGVmaW5lIG5vZGVfcGFnZV9zdGF0ZShub2RlLCBpdGVtKSBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKGl0ZW0pXG4gI2RlZmluZSBub2RlX3BhZ2Vfc3RhdGVfcGFnZXMobm9kZSwgaXRlbSkgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZV9wYWdlcyhpdGVtKVxuJiM0MzsjZGVmaW5lIG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMobm9kZSwgaXRlbSkgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMoaXRlbSlcbiBzdGF0aWMgaW5saW5lIHZvaWQgZm9sZF92bV9udW1hX2V2ZW50cyh2b2lkKVxuIHtcbiB9XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5jIGIvbW0vbWVtY29udHJvbC12MS5jXG5pbmRleCA3NjUwNjkyMTE1Njc4Yy4uMDkxYmM5ZmZlZTQ0YTAgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLXYxLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wtdjEuY1xuQEAgLTE5ODgsOCAmIzQzOzE5ODgsOCBAQCB2b2lkIG1lbWNnMV9zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKVxuIFx0XHRmb3JfZWFjaF9vbmxpbmVfcGdkYXQocGdkYXQpIHtcbiBcdFx0XHRteiA9IG1lbWNnLVx1MDAzZW5vZGVpbmZvW3BnZGF0LVx1MDAzZW5vZGVfaWRdO1xuIFxuLVx0XHRcdGFub25fY29zdCAmIzQzOz0gbXotXHUwMDNlbHJ1dmVjLmFub25fY29zdDtcbi1cdFx0XHRmaWxlX2Nvc3QgJiM0Mzs9IG16LVx1MDAzZWxydXZlYy5maWxlX2Nvc3Q7XG4mIzQzO1x0XHRcdGFub25fY29zdCAmIzQzOz0gbXotXHUwMDNlbHJ1dmVjLmNvc3RbV09SS0lOR1NFVF9BTk9OXS5jb3VudDtcbiYjNDM7XHRcdFx0ZmlsZV9jb3N0ICYjNDM7PSBtei1cdTAwM2VscnV2ZWMuY29zdFtXT1JLSU5HU0VUX0ZJTEVdLmNvdW50O1xuIFx0XHR9XG4gXHRcdHNlcV9idWZfcHJpbnRmKHMsIFwmIzM0O2Fub25fY29zdCAlbHVcXG5cJiMzNDssIGFub25fY29zdCk7XG4gXHRcdHNlcV9idWZfcHJpbnRmKHMsIFwmIzM0O2ZpbGVfY29zdCAlbHVcXG5cJiMzNDssIGZpbGVfY29zdCk7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCA2ZGM0ODg4YTkwZjNmZC4uYzk3YzliYzNmOGRkYjggMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTM5Myw2ICYjNDM7MzkzLDcgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ19ub2RlX3N0YXRfaXRlbXNbXSA9IHtcbiBcdE5SX1NITUVNX1RIUFMsXG4gXHROUl9GSUxFX1RIUFMsXG4gXHROUl9BTk9OX1RIUFMsXG4mIzQzO1x0TlJfVk1TQ0FOX1dSSVRFLFxuIFx0TlJfVk1BTExPQyxcbiBcdE5SX0tFUk5FTF9TVEFDS19LQixcbiBcdE5SX1BBR0VUQUJMRSxcbkBAIC00MTksNiAmIzQzOzQyMCw4IEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfbm9kZV9zdGF0X2l0ZW1zW10gPSB7XG4gXHRQR1NDQU5fUFJPQUNUSVZFLFxuIFx0UEdTQ0FOX0FOT04sXG4gXHRQR1NDQU5fRklMRSxcbiYjNDM7XHRQR1JPVEFURV9BTk9OLFxuJiM0MztcdFBHUk9UQVRFX0ZJTEUsXG4gXHRQR1JFRklMTCxcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuIFx0TlJfSFVHRVRMQixcbkBAIC01MDIsNiAmIzQzOzUwNSw0MiBAQCB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXG4gXHRyZXR1cm4geDtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMgLSBub24tY2xhbXBpbmcgbHJ1dmVjIHN0YXQgcmVhZCBmb3IgZGVsdGEgc2FtcGxpbmdcbiYjNDM7ICogQGxydXZlYzogdGhlIExSVSB2ZWN0b3IgdG8gcmVhZCBmcm9tXG4mIzQzOyAqIEBpZHg6IHRoZSBub2RlX3N0YXRfaXRlbSB0byByZWFkXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnMgdGhlIHJhdyBzdGF0ZVtpZHhdIHZhbHVlIGNhc3QgdG8gdW5zaWduZWQgbG9uZywgc2tpcHBpbmcgdGhlXG4mIzQzOyAqIGNsYW1wLW5lZ2F0aXZlLXRvLXplcm8gc3RlcCBpbiBscnV2ZWNfcGFnZV9zdGF0ZSgpLiBJbnRlbmRlZCBmb3IgY2FsbGVyc1xuJiM0MzsgKiB0aGF0IHNuYXBzaG90IGEgbW9ub3RvbmljYWxseS1pbmNyZW1lbnRlZCBjb3VudGVyIGFuZCBzdWJ0cmFjdCB0d29cbiYjNDM7ICogc2FtcGxlczogdW5zaWduZWQgbW9kdWxhciBhcml0aG1ldGljIHRoZW4geWllbGRzIHRoZSBjb3JyZWN0IGRlbHRhIGFjcm9zc1xuJiM0MzsgKiBhIHNpZ25lZC1sb25nIHdyYXBhcm91bmQgKGEgcmVhbCBoYXphcmQgb24gMzItYml0KSB0aGF0IHRoZSBjbGFtcCB3b3VsZFxuJiM0MzsgKiBvdGhlcndpc2UgdHVybiBpbnRvIGEgaHVnZSBzcHVyaW91cyBkZWx0YS5cbiYjNDM7ICpcbiYjNDM7ICogRG8gTk9UIHVzZSBmb3Igbm9uLW1vbm90b25pYyBwYWdlLWNvdW50IHJlYWRzIHdoZXJlIGEgdHJhbnNpZW50IG5lZ2F0aXZlXG4mIzQzOyAqIHJlYWRpbmcgZnJvbSBwZXItQ1BVIGRlbHRhIHNrZXcgbXVzdCBwcmVzZW50IGFzIHplcm8uXG4mIzQzOyAqXG4mIzQzOyAqIFhYWDogVGhpcyBoZWxwZXIgKGFuZCBpdHMgbm9kZS9nbG9iYWwgcGVlcnMpIGV4aXN0cyBiZWNhdXNlIHdlIHBsYWNlXG4mIzQzOyAqIG1vbm90b25pY2FsbHktaW5jcmVtZW50ZWQgZXZlbnQgY291bnRlcnMgKE5SX1ZNU0NBTl9XUklURSBhbmQgUEdST1RBVEVfKilcbiYjNDM7ICogaW50byBlbnVtIG5vZGVfc3RhdF9pdGVtLlxuJiM0MzsgKi9cbiYjNDM7dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuJiM0MztcdFx0XHRcdFx0ICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbjtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbiYjNDM7XHRcdHJldHVybiBub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKGxydXZlY19wZ2RhdChscnV2ZWMpLCBpZHgpO1xuJiM0MztcbiYjNDM7XHRpID0gbWVtY2dfc3RhdHNfaW5kZXgoaWR4KTtcbiYjNDM7XHRpZiAoV0FSTl9PTkNFKEJBRF9TVEFUX0lEWChpKSwgXCYjMzQ7JXM6IG1pc3Npbmcgc3RhdCBpdGVtICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXywgaWR4KSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRwbiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xuJiM0MztcdHJldHVybiAodW5zaWduZWQgbG9uZylSRUFEX09OQ0UocG4tXHUwMDNlbHJ1dmVjX3N0YXRzLVx1MDAzZXN0YXRlW2ldKTtcbiYjNDM7fVxuJiM0MztcbiB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0XHRcdCAgICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxuIHtcbmRpZmYgLS1naXQgYS9tbS9tbXpvbmUuYyBiL21tL21tem9uZS5jXG5pbmRleCAwYzhmMTgxZDlkNTAwNi4uMTcxMzlkYjRkMjkxY2UgMTAwNjQ0XG4tLS0gYS9tbS9tbXpvbmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbW16b25lLmNcbkBAIC03OCw2ICYjNDM7NzgsNyBAQCB2b2lkIGxydXZlY19pbml0KHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbiBcbiBcdG1lbXNldChscnV2ZWMsIDAsIHNpemVvZihzdHJ1Y3QgbHJ1dmVjKSk7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1X2xvY2spO1xuJiM0MztcdHNwaW5fbG9ja19pbml0KFx1MDAyNmxydXZlYy1cdTAwM2Vjb3N0X2xvY2spO1xuIFx0enN3YXBfbHJ1dmVjX3N0YXRlX2luaXQobHJ1dmVjKTtcbiBcbiBcdGZvcl9lYWNoX2xydShscnUpXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcC5jIGIvbW0vc3dhcC5jXG5pbmRleCA1ODhmNTBkOGYxYThjOS4uNzRiMjgxNzc4Y2JjOTIgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXAuY1xuQEAgLTI3Miw3MyAmIzQzOzI3Miw2IEBAIHZvaWQgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRmb2xpb19iYXRjaF9hZGRfYW5kX21vdmUoZm9saW8sIGxydV9tb3ZlX3RhaWwpO1xuIH1cbiBcbi12b2lkIGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGJvb2wgZmlsZSxcbi1cdFx0dW5zaWduZWQgaW50IG5yX2lvLCB1bnNpZ25lZCBpbnQgbnJfcm90YXRlZClcbi1cdFx0X19yZWxlYXNlcyhscnV2ZWMtXHUwMDNlbHJ1X2xvY2spXG4tXHRcdF9fcmVsZWFzZXMocmN1KVxuLXtcbi1cdHVuc2lnbmVkIGxvbmcgY29zdDtcbi1cbi1cdC8qXG4tXHQgKiBSZWZsZWN0IHRoZSByZWxhdGl2ZSBjb3N0IG9mIGluY3VycmluZyBJTyBhbmQgc3BlbmRpbmcgQ1BVXG4tXHQgKiB0aW1lIG9uIHJvdGF0aW9ucy4gVGhpcyBkb2VzbiYjMzk7dCBhdHRlbXB0IHRvIG1ha2UgYSBwcmVjaXNlXG4tXHQgKiBjb21wYXJpc29uLCBpdCBqdXN0IHNheXM6IGlmIHJlbG9hZHMgYXJlIGFib3V0IGNvbXBhcmFibGVcbi1cdCAqIGJldHdlZW4gdGhlIExSVSBsaXN0cywgb3Igcm90YXRpb25zIGFyZSBvdmVyd2hlbG1pbmdseVxuLVx0ICogZGlmZmVyZW50IGJldHdlZW4gdGhlbSwgYWRqdXN0IHNjYW4gYmFsYW5jZSBmb3IgQ1BVIHdvcmsuXG4tXHQgKi9cbi1cdGNvc3QgPSBucl9pbyAqIFNXQVBfQ0xVU1RFUl9NQVggJiM0MzsgbnJfcm90YXRlZDtcbi1cdGlmICghY29zdCkge1xuLVx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2bHJ1dmVjLVx1MDAzZWxydV9sb2NrKTtcbi1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXHRcdHJldHVybjtcbi1cdH1cbi1cbi1cdGZvciAoOzspIHtcbi1cdFx0dW5zaWduZWQgbG9uZyBscnVzaXplO1xuLVxuLVx0XHQvKiBSZWNvcmQgY29zdCBldmVudCAqL1xuLVx0XHRpZiAoZmlsZSlcbi1cdFx0XHRscnV2ZWMtXHUwMDNlZmlsZV9jb3N0ICYjNDM7PSBjb3N0O1xuLVx0XHRlbHNlXG4tXHRcdFx0bHJ1dmVjLVx1MDAzZWFub25fY29zdCAmIzQzOz0gY29zdDtcbi1cbi1cdFx0Lypcbi1cdFx0ICogRGVjYXkgcHJldmlvdXMgZXZlbnRzXG4tXHRcdCAqXG4tXHRcdCAqIEJlY2F1c2Ugd29ya2xvYWRzIGNoYW5nZSBvdmVyIHRpbWUgKGFuZCB0byBhdm9pZFxuLVx0XHQgKiBvdmVyZmxvdykgd2Uga2VlcCB0aGVzZSBzdGF0aXN0aWNzIGFzIGEgZmxvYXRpbmdcbi1cdFx0ICogYXZlcmFnZSwgd2hpY2ggZW5kcyB1cCB3ZWlnaGluZyByZWNlbnQgcmVmYXVsdHNcbi1cdFx0ICogbW9yZSB0aGFuIG9sZCBvbmVzLlxuLVx0XHQgKi9cbi1cdFx0bHJ1c2l6ZSA9IGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfSU5BQ1RJVkVfQU5PTikgJiM0Mztcbi1cdFx0XHQgIGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfQUNUSVZFX0FOT04pICYjNDM7XG4tXHRcdFx0ICBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0lOQUNUSVZFX0ZJTEUpICYjNDM7XG4tXHRcdFx0ICBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0FDVElWRV9GSUxFKTtcbi1cbi1cdFx0aWYgKGxydXZlYy1cdTAwM2VmaWxlX2Nvc3QgJiM0MzsgbHJ1dmVjLVx1MDAzZWFub25fY29zdCBcdTAwM2UgbHJ1c2l6ZSAvIDQpIHtcbi1cdFx0XHRscnV2ZWMtXHUwMDNlZmlsZV9jb3N0IC89IDI7XG4tXHRcdFx0bHJ1dmVjLVx1MDAzZWFub25fY29zdCAvPSAyO1xuLVx0XHR9XG4tXG4tXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1X2xvY2spO1xuLVx0XHRscnV2ZWMgPSBwYXJlbnRfbHJ1dmVjKGxydXZlYyk7XG4tXHRcdGlmICghbHJ1dmVjKSB7XG4tXHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1X2xvY2spO1xuLVx0fVxuLX1cbi1cbi12b2lkIGxydV9ub3RlX2Nvc3RfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLXtcbi1cdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcbi1cbi1cdGxydXZlYyA9IGZvbGlvX2xydXZlY19sb2NrX2lycShmb2xpbyk7XG4tXHRscnVfbm90ZV9jb3N0X3VubG9ja19pcnEobHJ1dmVjLCBmb2xpb19pc19maWxlX2xydShmb2xpbyksXG4tXHRcdFx0XHRmb2xpb19ucl9wYWdlcyhmb2xpbyksIDApO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCBscnVfYWN0aXZhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG5AQCAtMTE2NCw4ICYjNDM7MTA5Nyw2IEBAIHZvaWQgbHJ1X3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50XG4gXG4gXHRjaGlsZF9scnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgTk9ERV9EQVRBKG5pZCkpO1xuIFx0cGFyZW50X2xydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHBhcmVudCwgTk9ERV9EQVRBKG5pZCkpO1xuLVx0cGFyZW50X2xydXZlYy1cdTAwM2Vhbm9uX2Nvc3QgJiM0Mzs9IGNoaWxkX2xydXZlYy1cdTAwM2Vhbm9uX2Nvc3Q7XG4tXHRwYXJlbnRfbHJ1dmVjLVx1MDAzZWZpbGVfY29zdCAmIzQzOz0gY2hpbGRfbHJ1dmVjLVx1MDAzZWZpbGVfY29zdDtcbiBcbiBcdGZvcl9lYWNoX2xydShscnUpXG4gXHRcdGxydXZlY19yZXBhcmVudF9scnUoY2hpbGRfbHJ1dmVjLCBwYXJlbnRfbHJ1dmVjLCBscnUsIG5pZCk7XG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggMzVjM2JiMTVhZTk2YTMuLjA3NTQ1MDk1YjM1MmNjIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jXG5AQCAtNjY4LDcgJiM0Mzs2NjgsNyBAQCBzdGF0aWMgcGFnZW91dF90IHBhZ2VvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdGZvbGlvX2NsZWFyX3JlY2xhaW0oZm9saW8pO1xuIFxuIFx0dHJhY2VfbW1fdm1zY2FuX3dyaXRlX2ZvbGlvKGZvbGlvKTtcbi1cdG5vZGVfc3RhdF9hZGRfZm9saW8oZm9saW8sIE5SX1ZNU0NBTl9XUklURSk7XG4mIzQzO1x0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9WTVNDQU5fV1JJVEUsIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG4gXHRyZXR1cm4gUEFHRV9TVUNDRVNTO1xuIH1cbiBcbkBAIC0xNDEzLDggJiM0MzsxNDEzLDYgQEAgc3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuIFx0XHRcdFx0XHRzYy1cdTAwM2Vucl9zY2FubmVkIC09IChucl9wYWdlcyAtIDEpO1xuIFx0XHRcdFx0XHRucl9wYWdlcyA9IDE7XG4gXHRcdFx0XHR9XG4tXHRcdFx0XHRzdGF0LVx1MDAzZW5yX3BhZ2VvdXQgJiM0Mzs9IG5yX3BhZ2VzO1xuLVxuIFx0XHRcdFx0aWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSlcbiBcdFx0XHRcdFx0Z290byBrZWVwO1xuIFx0XHRcdFx0aWYgKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKVxuQEAgLTIwMzgsMTAgJiM0MzsyMDM2LDEwIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19pbmFjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcbiBcdGl0ZW0gPSBQR1NURUFMX0tTV0FQRCAmIzQzOyByZWNsYWltZXJfb2Zmc2V0KHNjKTtcbiBcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBpdGVtLCBucl9yZWNsYWltZWQpO1xuIFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHU1RFQUxfQU5PTiAmIzQzOyBmaWxlLCBucl9yZWNsYWltZWQpO1xuJiM0MztcdGlmIChucl9zY2FubmVkIFx1MDAzZSBucl9yZWNsYWltZWQpXG4mIzQzO1x0XHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdST1RBVEVfQU5PTiAmIzQzOyBmaWxlLFxuJiM0MztcdFx0XHRcdCBucl9zY2FubmVkIC0gbnJfcmVjbGFpbWVkKTtcbiBcbi1cdGxydXZlY19sb2NrX2lycShscnV2ZWMpO1xuLVx0bHJ1X25vdGVfY29zdF91bmxvY2tfaXJxKGxydXZlYywgZmlsZSwgc3RhdC5ucl9wYWdlb3V0LFxuLVx0XHRcdFx0XHRucl9zY2FubmVkIC0gbnJfcmVjbGFpbWVkKTtcbiBcdGhhbmRsZV9yZWNsYWltX3dyaXRlYmFjayhucl90YWtlbiwgcGdkYXQsIHNjLCBcdTAwMjZzdGF0KTtcbiBcdHRyYWNlX21tX3Ztc2Nhbl9scnVfc2hyaW5rX2luYWN0aXZlKHBnZGF0LVx1MDAzZW5vZGVfaWQsXG4gXHRcdFx0bnJfc2Nhbm5lZCwgbnJfcmVjbGFpbWVkLCBcdTAwMjZzdGF0LCBzYy1cdTAwM2Vwcmlvcml0eSwgZmlsZSk7XG5AQCAtMjE0Nyw5ICYjNDM7MjE0NSw5IEBAIHN0YXRpYyB2b2lkIHNocmlua19hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4gXHRjb3VudF92bV9ldmVudHMoUEdERUFDVElWQVRFLCBucl9kZWFjdGl2YXRlKTtcbiBcdGNvdW50X21lbWNnX2V2ZW50cyhscnV2ZWNfbWVtY2cobHJ1dmVjKSwgUEdERUFDVElWQVRFLCBucl9kZWFjdGl2YXRlKTtcbiBcdG1vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gJiM0MzsgZmlsZSwgLW5yX3Rha2VuKTtcbiYjNDM7XHRpZiAobnJfcm90YXRlZClcbiYjNDM7XHRcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JPVEFURV9BTk9OICYjNDM7IGZpbGUsIG5yX3JvdGF0ZWQpO1xuIFxuLVx0bHJ1dmVjX2xvY2tfaXJxKGxydXZlYyk7XG4tXHRscnVfbm90ZV9jb3N0X3VubG9ja19pcnEobHJ1dmVjLCBmaWxlLCAwLCBucl9yb3RhdGVkKTtcbiBcdHRyYWNlX21tX3Ztc2Nhbl9scnVfc2hyaW5rX2FjdGl2ZShwZ2RhdC1cdTAwM2Vub2RlX2lkLCBucl90YWtlbiwgbnJfYWN0aXZhdGUsXG4gXHRcdFx0bnJfZGVhY3RpdmF0ZSwgbnJfcm90YXRlZCwgc2MtXHUwMDNlcHJpb3JpdHksIGZpbGUpO1xuIH1cbkBAIC0yMjgyLDggJiM0MzsyMjgwLDEwIEBAIGVudW0gc2Nhbl9iYWxhbmNlIHtcbiBcbiBzdGF0aWMgdm9pZCBwcmVwYXJlX3NjYW5fY29udHJvbChwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGZpbGU7XG4mIzQzO1x0c3RydWN0IGxydV9jb3N0ICphbm9uX2Nvc3QsICpmaWxlX2Nvc3Q7XG4gXHRzdHJ1Y3QgbHJ1dmVjICp0YXJnZXRfbHJ1dmVjO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbHJ1c2l6ZTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZpbGU7XG4gXG4gXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXHUwMDI2XHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpKVxuIFx0XHRyZXR1cm47XG5AQCAtMjI5OSwxMSAmIzQzOzIyOTksNjkgQEAgc3RhdGljIHZvaWQgcHJlcGFyZV9zY2FuX2NvbnRyb2wocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4gXG4gXHQvKlxuIFx0ICogRGV0ZXJtaW5lIHRoZSBzY2FuIGJhbGFuY2UgYmV0d2VlbiBhbm9uIGFuZCBmaWxlIExSVXMuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBUaGUgY29zdCBtb2RlbCBpcyBiYXNlZCBvbiByb3RhdGlvbnMsIHJlZmF1bHRzIGFuZFxuJiM0MztcdCAqIHJlY2xhaW0tZHJpdmVuIHdyaXRlcyAoYW5vbiBvbmx5KSBvbiBlYWNoIHNpZGUuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBUaGVzZSBldmVudCBjb3VudGVycyBhcmUgbW9ub3RvbmljLCBzbyBlYWNoIHJlY2xhaW0gY3ljbGVcbiYjNDM7XHQgKiB0aGUgZGVsdGEgc2luY2UgdGhlIGxhc3Qgc2NhbiBpcyBleHRyYWN0ZWQgYW5kIGluY29ycG9yYXRlZFxuJiM0MztcdCAqIGludG8gYSBkZWNheWluZyBhdmVyYWdlLiBUaGlzIGVuc3VyZXMgY3VycmVuY3ksIGFzIHdvcmtsb2Fkc1xuJiM0MztcdCAqIGNoYW5nZSBvdmVyIHRpbWUsIGFuZCBhdm9pZHMgb3ZlcmZsb3cgaW4gdGhlIGNhbGN1bGF0aW9ucy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFVzZSBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoKSBzbyB1bnNpZ25lZCBzdWJ0cmFjdGlvblxuJiM0MztcdCAqIHlpZWxkcyB0aGUgY29ycmVjdCBkZWx0YSBhY3Jvc3MgYSBzaWduZWQtbG9uZyB3cmFwYXJvdW5kIG9mXG4mIzQzO1x0ICogdGhlIHVuZGVybHlpbmcgY291bnRlciAoYSByZWFsIGhhemFyZCBvbiAzMi1iaXQgdGhhdCB0aGVcbiYjNDM7XHQgKiBjbGFtcCBpbiBscnV2ZWNfcGFnZV9zdGF0ZSgpIHdvdWxkIG90aGVyd2lzZSB0dXJuIGludG8gYSBodWdlXG4mIzQzO1x0ICogc3B1cmlvdXMgZGVsdGEpLlxuIFx0ICovXG4tXHRzcGluX2xvY2tfaXJxKFx1MDAyNnRhcmdldF9scnV2ZWMtXHUwMDNlbHJ1X2xvY2spO1xuLVx0c2MtXHUwMDNlYW5vbl9jb3N0ID0gdGFyZ2V0X2xydXZlYy1cdTAwM2Vhbm9uX2Nvc3Q7XG4tXHRzYy1cdTAwM2VmaWxlX2Nvc3QgPSB0YXJnZXRfbHJ1dmVjLVx1MDAzZWZpbGVfY29zdDtcbi1cdHNwaW5fdW5sb2NrX2lycShcdTAwMjZ0YXJnZXRfbHJ1dmVjLVx1MDAzZWxydV9sb2NrKTtcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2dGFyZ2V0X2xydXZlYy1cdTAwM2Vjb3N0X2xvY2spO1xuJiM0MztcbiYjNDM7XHRmb3IgKGludCBmID0gMDsgZiBcdTAwM2M9IDE7IGYmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgbHJ1X2Nvc3QgKmNvc3QgPSBcdTAwMjZ0YXJnZXRfbHJ1dmVjLVx1MDAzZWNvc3RbZl07XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIHJvdGF0ZWQsIGlvLCBucl9yb3RhdGVkLCBucl9pbztcbiYjNDM7XG4mIzQzO1x0XHRyb3RhdGVkID0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHRhcmdldF9scnV2ZWMsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgIFBHUk9UQVRFX0FOT04gJiM0MzsgZik7XG4mIzQzO1x0XHRpbyA9IGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyh0YXJnZXRfbHJ1dmVjLFxuJiM0MztcdFx0XHRcdFx0XHQgV09SS0lOR1NFVF9SRVNUT1JFX0JBU0UgJiM0MzsgZik7XG4mIzQzO1x0XHRpZiAoZiA9PSBXT1JLSU5HU0VUX0FOT04pXG4mIzQzO1x0XHRcdGlvICYjNDM7PSBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWModGFyZ2V0X2xydXZlYyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgIE5SX1ZNU0NBTl9XUklURSk7XG4mIzQzO1xuJiM0MztcdFx0bnJfcm90YXRlZCA9IHJvdGF0ZWQgLSBjb3N0LVx1MDAzZWxhc3Rfcm90YXRlZDtcbiYjNDM7XHRcdG5yX2lvID0gaW8gLSBjb3N0LVx1MDAzZWxhc3RfaW87XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFJlZmxlY3QgdGhlIHJlbGF0aXZlIGNvc3Qgb2YgaW5jdXJyaW5nIElPIGFuZCBzcGVuZGluZ1xuJiM0MztcdFx0ICogQ1BVIHRpbWUgb24gcm90YXRpb25zLiBUaGlzIGRvZXNuJiMzOTt0IGF0dGVtcHQgdG8gbWFrZSBhXG4mIzQzO1x0XHQgKiBwcmVjaXNlIGNvbXBhcmlzb24sIGl0IGp1c3Qgc2F5czogaWYgcmVsb2FkcyBhcmUgYWJvdXRcbiYjNDM7XHRcdCAqIGNvbXBhcmFibGUgYmV0d2VlbiB0aGUgTFJVIGxpc3RzLCBvciByb3RhdGlvbnMgYXJlXG4mIzQzO1x0XHQgKiBvdmVyd2hlbG1pbmdseSBkaWZmZXJlbnQgYmV0d2VlbiB0aGVtLCBhZGp1c3Qgc2NhblxuJiM0MztcdFx0ICogYmFsYW5jZSBmb3IgQ1BVIHdvcmsuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGNvc3QtXHUwMDNlY291bnQgJiM0Mzs9IG5yX2lvICogU1dBUF9DTFVTVEVSX01BWCAmIzQzOyBucl9yb3RhdGVkO1xuJiM0MztcbiYjNDM7XHRcdGNvc3QtXHUwMDNlbGFzdF9yb3RhdGVkID0gcm90YXRlZDtcbiYjNDM7XHRcdGNvc3QtXHUwMDNlbGFzdF9pbyA9IGlvO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0YW5vbl9jb3N0ID0gXHUwMDI2dGFyZ2V0X2xydXZlYy1cdTAwM2Vjb3N0W1dPUktJTkdTRVRfQU5PTl07XG4mIzQzO1x0ZmlsZV9jb3N0ID0gXHUwMDI2dGFyZ2V0X2xydXZlYy1cdTAwM2Vjb3N0W1dPUktJTkdTRVRfRklMRV07XG4mIzQzO1xuJiM0MztcdGxydXNpemUgPSBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLCBOUl9JTkFDVElWRV9BTk9OKSAmIzQzO1xuJiM0MztcdFx0ICBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLCBOUl9BQ1RJVkVfQU5PTikgJiM0MztcbiYjNDM7XHRcdCAgbHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYywgTlJfSU5BQ1RJVkVfRklMRSkgJiM0MztcbiYjNDM7XHRcdCAgbHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYywgTlJfQUNUSVZFX0ZJTEUpO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoYW5vbl9jb3N0LVx1MDAzZWNvdW50ICYjNDM7IGZpbGVfY29zdC1cdTAwM2Vjb3VudCBcdTAwM2UgbHJ1c2l6ZSAvIDQpIHtcbiYjNDM7XHRcdGFub25fY29zdC1cdTAwM2Vjb3VudCAvPSAyO1xuJiM0MztcdFx0ZmlsZV9jb3N0LVx1MDAzZWNvdW50IC89IDI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzYy1cdTAwM2Vhbm9uX2Nvc3QgPSBhbm9uX2Nvc3QtXHUwMDNlY291bnQ7XG4mIzQzO1x0c2MtXHUwMDNlZmlsZV9jb3N0ID0gZmlsZV9jb3N0LVx1MDAzZWNvdW50O1xuJiM0MztcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZ0YXJnZXRfbHJ1dmVjLVx1MDAzZWNvc3RfbG9jayk7XG4gXG4gXHQvKlxuIFx0ICogVGFyZ2V0IGRlc2lyYWJsZSBpbmFjdGl2ZTphY3RpdmUgbGlzdCByYXRpb3MgZm9yIHRoZSBhbm9uXG5AQCAtNDgxMCw3ICYjNDM7NDg2OCw4IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0c3RydWN0IHJlY2xhaW1fc3RhdCBzdGF0O1xuIFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaztcbiBcdGludCBzY2FubmVkLCByZWNsYWltZWQ7XG4tXHRpbnQgaXNvbGF0ZWQgPSAwLCB0eXBlLCB0eXBlX3NjYW5uZWQ7XG4mIzQzO1x0aW50IGlzb2xhdGVkID0gMCwgbnJfaXNvbGF0ZWQgPSAwLCB0eXBlLCB0eXBlX3NjYW5uZWQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyB0b3RhbF9yZWNsYWltZWQgPSAwO1xuIFx0Ym9vbCBza2lwX3JldHJ5ID0gZmFsc2U7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcbkBAIC00ODIyLDYgJiM0Mzs0ODgxLDcgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXG4gXHRzY2FubmVkID0gaXNvbGF0ZV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyxcbiBcdFx0XHRcdCBcdTAwMjZsaXN0LCBcdTAwMjZpc29sYXRlZCwgXHUwMDI2dHlwZSwgXHUwMDI2dHlwZV9zY2FubmVkKTtcbiYjNDM7XHRucl9pc29sYXRlZCA9IGlzb2xhdGVkO1xuIFxuIFx0LyogU2Nhbm5pbmcgbWF5IGhhdmUgZW1wdGllZCB0aGUgb2xkZXN0IGdlbiwgZmx1c2ggaXQgKi9cbiBcdGlmIChzY2FubmVkKVxuQEAgLTQ4MzQsNiAmIzQzOzQ4OTQsNyBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiByZXRyeTpcbiBcdHJlY2xhaW1lZCA9IHNocmlua19mb2xpb19saXN0KFx1MDAyNmxpc3QsIHBnZGF0LCBzYywgXHUwMDI2c3RhdCwgZmFsc2UsIG1lbWNnKTtcbiBcdHNjLVx1MDAzZW5yX3JlY2xhaW1lZCAmIzQzOz0gcmVjbGFpbWVkO1xuJiM0MztcdHRvdGFsX3JlY2xhaW1lZCAmIzQzOz0gcmVjbGFpbWVkO1xuIFx0LyogUmV0cnkgcGFzcyBpcyBvbmx5IG1lYW50IGZvciBjbGVhbiBmb2xpb3Mgd2l0aG91dCBuZXcgaXNvbGF0aW9uICovXG4gXHRpZiAoaXNvbGF0ZWQpXG4gXHRcdGhhbmRsZV9yZWNsYWltX3dyaXRlYmFjayhpc29sYXRlZCwgcGdkYXQsIHNjLCBcdTAwMjZzdGF0KTtcbkBAIC00ODg3LDYgJiM0Mzs0OTQ4LDEwIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRnb3RvIHJldHJ5O1xuIFx0fVxuIFxuJiM0MztcdGlmIChucl9pc29sYXRlZCBcdTAwM2UgdG90YWxfcmVjbGFpbWVkKVxuJiM0MztcdFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUk9UQVRFX0FOT04gJiM0MzsgdHlwZSxcbiYjNDM7XHRcdFx0XHQgbnJfaXNvbGF0ZWQgLSB0b3RhbF9yZWNsYWltZWQpO1xuJiM0MztcbiBcdHJldHVybiBzY2FubmVkO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9tbS92bXN0YXQuYyBiL21tL3Ztc3RhdC5jXG5pbmRleCBmNTM0OTcyZjUxN2RlMC4uODdkNGE2NzgxMzY3NjcgMTAwNjQ0XG4tLS0gYS9tbS92bXN0YXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zdGF0LmNcbkBAIC0xMDI0LDYgJiM0MzsxMDI0LDE3IEBAIHVuc2lnbmVkIGxvbmcgbm9kZV9wYWdlX3N0YXRlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4gXG4gXHRyZXR1cm4gbm9kZV9wYWdlX3N0YXRlX3BhZ2VzKHBnZGF0LCBpdGVtKTtcbiB9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBOb24tY2xhbXBpbmcgdmFyaWFudCBvZiBub2RlX3BhZ2Vfc3RhdGUoKSBpbnRlbmRlZCBmb3IgY2FsbGVycyB0aGF0XG4mIzQzOyAqIHNuYXBzaG90IGEgbW9ub3RvbmljYWxseS1pbmNyZW1lbnRlZCBjb3VudGVyIGFuZCBzdWJ0cmFjdCB0d28gc2FtcGxlcy5cbiYjNDM7ICogU2VlIGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKCkgZm9yIHRoZSByYXRpb25hbGUuXG4mIzQzOyAqL1xuJiM0Mzt1bnNpZ25lZCBsb25nIG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbiYjNDM7XHRcdFx0XHRcdGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiAodW5zaWduZWQgbG9uZylhdG9taWNfbG9uZ19yZWFkKFx1MDAyNnBnZGF0LVx1MDAzZXZtX3N0YXRbaXRlbV0pO1xuJiM0Mzt9XG4gI2VuZGlmXG4gXG4gLypcbkBAIC0xMjg5LDYgJiM0MzsxMzAwLDggQEAgY29uc3QgY2hhciAqIGNvbnN0IHZtc3RhdF90ZXh0W10gPSB7XG4gXHRbSShQR1NDQU5fUFJPQUNUSVZFKV1cdFx0XHQ9IFwmIzM0O3Bnc2Nhbl9wcm9hY3RpdmVcJiMzNDssXG4gXHRbSShQR1NDQU5fQU5PTildXHRcdFx0PSBcJiMzNDtwZ3NjYW5fYW5vblwmIzM0OyxcbiBcdFtJKFBHU0NBTl9GSUxFKV1cdFx0XHQ9IFwmIzM0O3Bnc2Nhbl9maWxlXCYjMzQ7LFxuJiM0MztcdFtJKFBHUk9UQVRFX0FOT04pXVx0XHRcdD0gXCYjMzQ7cGdyb3RhdGVfYW5vblwmIzM0OyxcbiYjNDM7XHRbSShQR1JPVEFURV9GSUxFKV1cdFx0XHQ9IFwmIzM0O3Bncm90YXRlX2ZpbGVcJiMzNDssXG4gXHRbSShQR1JFRklMTCldXHRcdFx0XHQ9IFwmIzM0O3BncmVmaWxsXCYjMzQ7LFxuICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG4gXHRbSShOUl9IVUdFVExCKV1cdFx0XHRcdD0gXCYjMzQ7bnJfaHVnZXRsYlwmIzM0OyxcbmRpZmYgLS1naXQgYS9tbS93b3JraW5nc2V0LmMgYi9tbS93b3JraW5nc2V0LmNcbmluZGV4IGYzNTE3OThlNzIzYWNkLi43YWMyYjg4YzgwYWU1NiAxMDA2NDRcbi0tLSBhL21tL3dvcmtpbmdzZXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vd29ya2luZ3NldC5jXG5AQCAtNTg0LDExICYjNDM7NTg0LDYgQEAgdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxuIFx0LyogRm9saW8gd2FzIGFjdGl2ZSBwcmlvciB0byBldmljdGlvbiAqL1xuIFx0aWYgKHdvcmtpbmdzZXQpIHtcbiBcdFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xuLVx0XHQvKlxuLVx0XHQgKiBYWFg6IE1vdmUgdG8gZm9saW9fYWRkX2xydSgpIHdoZW4gaXQgc3VwcG9ydHMgbmV3IHZzXG4tXHRcdCAqIHB1dGJhY2tcbi1cdFx0ICovXG4tXHRcdGxydV9ub3RlX2Nvc3RfcmVmYXVsdChmb2xpbyk7XG4gXHRcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBXT1JLSU5HU0VUX1JFU1RPUkVfQkFTRSAmIzQzOyBmaWxlLCBucik7XG4gXHR9XG4gb3V0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ByZXBhcmVfc2Nhbl9jb250cm9sJiMzNDssCiAgICAmIzM0O3Nocmlua19pbmFjdGl2ZV9saXN0JiMzNDssCiAgICAmIzM0O3Nocmlua19hY3RpdmVfbGlzdCYjMzQ7LAogICAgJiMzNDtldmljdF9mb2xpb3MmIzM0OywKICAgICYjMzQ7bHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljJiMzNDssCiAgICAmIzM0O25vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMmIzM0OywKICAgICYjMzQ7d29ya2luZ3NldF9yZWZhdWx0JiMzNDssCiAgICAmIzM0O3BhZ2VvdXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIExSVSBjb3N0IG1vZGVsIGFuZCBzdGF0aXN0aWNzIHRyYWNraW5nIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gSXQgaW50cm9kdWNlcyBtb25vdG9uaWMgcGFnZSBzdGF0ZSB0cmFja2luZyBmb3IgTFJVIHZlY3RvcnMgYW5kIG5vZGVzLCBhbmQgdXBkYXRlcyBob3cgYGFub25fY29zdGAgYW5kIGBmaWxlX2Nvc3RgIGFyZSBjYWxjdWxhdGVkIGR1cmluZyBtZW1vcnkgcmVjbGFpbS4gSXQgYWxzbyBtb2RpZmllcyBib3RoIHRoZSB0cmFkaXRpb25hbCBMUlUgYW5kIE11bHRpLUdlbiBMUlUgKE1HTFJVKSByZWNsYWltIHBhdGhzIHRvIHVzZSB0aGUgbmV3IGNvc3QgbW9kZWwgYW5kIHN0YXRpc3RpY3MuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMWNjYTg1NDllOTdkZTVlMzY3MTA5NjllNzU5NzMzMmM1ZDY0ZmUxNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDIxIDAwOjA2OjQxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAppbmRleCBlMWY0NmEwMDE2ZmNmZC4uYjQwYmM0ZjZmZTRhMGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCkBAIC05MzEsNiAmIzQzOzkzMSw4IEBAIHVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSk7CiBib29sIG1lbWNnX3N0YXRfaXRlbV92YWxpZChpbnQgaWR4KTsKIGJvb2wgbWVtY2dfdm1fZXZlbnRfaXRlbV92YWxpZChlbnVtIHZtX2V2ZW50X2l0ZW0gaWR4KTsKIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCk7CiYjNDM7dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLAomIzQzOwkJCQkJICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCk7CiB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJCQkgICAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCk7CiAKQEAgLTEzNzgsNiAmIzQzOzEzODAsMTIgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAlyZXR1cm4gbm9kZV9wYWdlX3N0YXRlKGxydXZlY19wZ2RhdChscnV2ZWMpLCBpZHgpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiYjNDM7CQkJCQkJCWVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KQomIzQzO3sKJiM0MzsJcmV0dXJuIG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMobHJ1dmVjX3BnZGF0KGxydXZlYyksIGlkeCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJCQkJCSAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCmluZGV4IGNhMjcxMjE4NzE0NzVjLi44NTMwM2M1ODY3Yzg0YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCkBAIC0zMjMsNiAmIzQzOzMyMyw4IEBAIGVudW0gbm9kZV9zdGF0X2l0ZW0gewogCVBHU0NBTl9QUk9BQ1RJVkUsCiAJUEdTQ0FOX0FOT04sCiAJUEdTQ0FOX0ZJTEUsCiYjNDM7CVBHUk9UQVRFX0FOT04sCiYjNDM7CVBHUk9UQVRFX0ZJTEUsCiAJUEdSRUZJTEwsCiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQogCU5SX0hVR0VUTEIsCkBAIC03NTUsNiAmIzQzOzc1NywxMiBAQCB2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LAogCiAjZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi8KIAomIzQzO3N0cnVjdCBscnVfY29zdCB7CiYjNDM7CXVuc2lnbmVkIGxvbmcJCWNvdW50OwomIzQzOwl1bnNpZ25lZCBsb25nCQlsYXN0X3JvdGF0ZWQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcJCWxhc3RfaW87CiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBscnV2ZWMgewogCXN0cnVjdCBsaXN0X2hlYWQJCWxpc3RzW05SX0xSVV9MSVNUU107CiAJLyogcGVyIGxydXZlYyBscnVfbG9jayBmb3IgbWVtY2cgKi8KQEAgLTc2Myw5ICYjNDM7NzcxLDEyIEBAIHN0cnVjdCBscnV2ZWMgewogCSAqIFRoZXNlIHRyYWNrIHRoZSBjb3N0IG9mIHJlY2xhaW1pbmcgb25lIExSVSAtIGZpbGUgb3IgYW5vbiAtCiAJICogb3ZlciB0aGUgb3RoZXIuIEFzIHRoZSBvYnNlcnZlZCBjb3N0IG9mIHJlY2xhaW1pbmcgb25lIExSVQogCSAqIGluY3JlYXNlcywgdGhlIHJlY2xhaW0gc2NhbiBiYWxhbmNlIHRpcHMgdG93YXJkIHRoZSBvdGhlci4KJiM0MzsJICogVXBkYXRlZCBhbmQgZGVjYXllZCBhdCBwcmVwYXJlX3NjYW5fY29udHJvbCgpIHRpbWU7IGNvc3RfbG9jawomIzQzOwkgKiBzZXJpYWxpc2VzIHRoYXQgdXBkYXRlLgogCSAqLwotCXVuc2lnbmVkIGxvbmcJCQlhbm9uX2Nvc3Q7Ci0JdW5zaWduZWQgbG9uZwkJCWZpbGVfY29zdDsKJiM0MzsJc3RydWN0IGxydV9jb3N0CQkJY29zdFtBTk9OX0FORF9GSUxFXTsKJiM0MzsJLyogUHJvdGVjdHMgY29zdFtdLiAqLwomIzQzOwlzcGlubG9ja190CQkJY29zdF9sb2NrOwogCS8qIE5vbi1yZXNpZGVudCBhZ2UsIGRyaXZlbiBieSBMUlUgbW92ZW1lbnQgKi8KIAlhdG9taWNfbG9uZ190CQkJbm9ucmVzaWRlbnRfYWdlOwogCS8qIFJlZmF1bHRzIGF0IHRoZSB0aW1lIG9mIGxhc3QgcmVjbGFpbSBjeWNsZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaAppbmRleCA4ZjBmNjhlMjQ1YmFhMy4uYjhlMmUxYWYyYjE0MjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3dhcC5oCkBAIC0zMDksOSAmIzQzOzMwOSw2IEBAIGV4dGVybiB1bnNpZ25lZCBsb25nIHRvdGFscmVzZXJ2ZV9wYWdlczsKIAogCiAvKiBsaW51eC9tbS9zd2FwLmMgKi8KLXZvaWQgbHJ1X25vdGVfY29zdF91bmxvY2tfaXJxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgYm9vbCBmaWxlLAotCQl1bnNpZ25lZCBpbnQgbnJfaW8sIHVuc2lnbmVkIGludCBucl9yb3RhdGVkKTsKLXZvaWQgbHJ1X25vdGVfY29zdF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqKTsKIHZvaWQgZm9saW9fYWRkX2xydShzdHJ1Y3QgZm9saW8gKik7CiB2b2lkIGZvbGlvX2FkZF9scnVfdm1hKHN0cnVjdCBmb2xpbyAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CiB2b2lkIG1hcmtfcGFnZV9hY2Nlc3NlZChzdHJ1Y3QgcGFnZSAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdm1zdGF0LmggYi9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oCmluZGV4IDNjOWMyNjZjZjc4MmFkLi41YjMxZDhlN2FlNDA1OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92bXN0YXQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oCkBAIC0yMCw3ICYjNDM7MjAsNiBAQCBzdHJ1Y3QgcmVjbGFpbV9zdGF0IHsKIAl1bnNpZ25lZCBucl9jb25nZXN0ZWQ7CiAJdW5zaWduZWQgbnJfd3JpdGViYWNrOwogCXVuc2lnbmVkIG5yX2ltbWVkaWF0ZTsKLQl1bnNpZ25lZCBucl9wYWdlb3V0OwogCXVuc2lnbmVkIG5yX2FjdGl2YXRlW0FOT05fQU5EX0ZJTEVdOwogCXVuc2lnbmVkIG5yX3JlZl9rZWVwOwogCXVuc2lnbmVkIG5yX3VubWFwX2ZhaWw7CkBAIC0xOTQsNiAmIzQzOzE5MywxOSBAQCB1bnNpZ25lZCBsb25nIGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGVfcGFnZXMoZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKQogCXJldHVybiB4OwogfQogCiYjNDM7LyoKJiM0MzsgKiBOb24tY2xhbXBpbmcgdmFyaWFudCBvZiBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKCkgaW50ZW5kZWQgZm9yIGNhbGxlcnMgdGhhdAomIzQzOyAqIHNuYXBzaG90IGEgbW9ub3RvbmljYWxseS1pbmNyZW1lbnRlZCBjb3VudGVyIGFuZCBzdWJ0cmFjdCB0d28gc2FtcGxlcy4KJiM0MzsgKiBSZXR1cm5zIHRoZSByYXcgd3JhcHBpbmcgdmFsdWUgc28gdGhhdCB1bnNpZ25lZCBtb2R1bGFyIHN1YnRyYWN0aW9uIHN0YXlzCiYjNDM7ICogY29ycmVjdCBhY3Jvc3MgYSBzaWduZWQtbG9uZyBvdmVyZmxvdyAoYSByZWFsIGhhemFyZCBvbiAzMi1iaXQpIHRoYXQgdGhlCiYjNDM7ICogY2xhbXAgaW4gZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZSgpIHdvdWxkIG90aGVyd2lzZSB0dXJuIGludG8gYSBodWdlIHNwdXJpb3VzCiYjNDM7ICogZGVsdGEuIERvIE5PVCB1c2UgZm9yIG5vbi1tb25vdG9uaWMgcGFnZS1jb3VudCByZWFkcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMoZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKQomIzQzO3sKJiM0MzsJcmV0dXJuICh1bnNpZ25lZCBsb25nKWF0b21pY19sb25nX3JlYWQoJmFtcDt2bV9ub2RlX3N0YXRbaXRlbV0pOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbSkKIHsKIAlWTV9XQVJOX09OX09OQ0Uodm1zdGF0X2l0ZW1faW5fYnl0ZXMoaXRlbSkpOwpAQCAtMjU5LDExICYjNDM7MjcxLDE0IEBAIGV4dGVybiB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZV9zdGF0ZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LAogCQkJCQkJZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZV9zdGF0ZV9wYWdlcyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LAogCQkJCQkgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW0pOwomIzQzO2V4dGVybiB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwKJiM0MzsJCQkJCSAgICAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW0pOwogZXh0ZXJuIHZvaWQgZm9sZF92bV9udW1hX2V2ZW50cyh2b2lkKTsKICNlbHNlCiAjZGVmaW5lIHN1bV96b25lX25vZGVfcGFnZV9zdGF0ZShub2RlLCBpdGVtKSBnbG9iYWxfem9uZV9wYWdlX3N0YXRlKGl0ZW0pCiAjZGVmaW5lIG5vZGVfcGFnZV9zdGF0ZShub2RlLCBpdGVtKSBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKGl0ZW0pCiAjZGVmaW5lIG5vZGVfcGFnZV9zdGF0ZV9wYWdlcyhub2RlLCBpdGVtKSBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlX3BhZ2VzKGl0ZW0pCiYjNDM7I2RlZmluZSBub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKG5vZGUsIGl0ZW0pIGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKGl0ZW0pCiBzdGF0aWMgaW5saW5lIHZvaWQgZm9sZF92bV9udW1hX2V2ZW50cyh2b2lkKQogewogfQpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5jIGIvbW0vbWVtY29udHJvbC12MS5jCmluZGV4IDc2NTA2OTIxMTU2NzhjLi4wOTFiYzlmZmVlNDRhMCAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC12MS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wtdjEuYwpAQCAtMTk4OCw4ICYjNDM7MTk4OCw4IEBAIHZvaWQgbWVtY2cxX3N0YXRfZm9ybWF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHNlcV9idWYgKnMpCiAJCWZvcl9lYWNoX29ubGluZV9wZ2RhdChwZ2RhdCkgewogCQkJbXogPSBtZW1jZy0mZ3Q7bm9kZWluZm9bcGdkYXQtJmd0O25vZGVfaWRdOwogCi0JCQlhbm9uX2Nvc3QgJiM0Mzs9IG16LSZndDtscnV2ZWMuYW5vbl9jb3N0OwotCQkJZmlsZV9jb3N0ICYjNDM7PSBtei0mZ3Q7bHJ1dmVjLmZpbGVfY29zdDsKJiM0MzsJCQlhbm9uX2Nvc3QgJiM0Mzs9IG16LSZndDtscnV2ZWMuY29zdFtXT1JLSU5HU0VUX0FOT05dLmNvdW50OwomIzQzOwkJCWZpbGVfY29zdCAmIzQzOz0gbXotJmd0O2xydXZlYy5jb3N0W1dPUktJTkdTRVRfRklMRV0uY291bnQ7CiAJCX0KIAkJc2VxX2J1Zl9wcmludGYocywgJiMzNDthbm9uX2Nvc3QgJWx1XG4mIzM0OywgYW5vbl9jb3N0KTsKIAkJc2VxX2J1Zl9wcmludGYocywgJiMzNDtmaWxlX2Nvc3QgJWx1XG4mIzM0OywgZmlsZV9jb3N0KTsKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCA2ZGM0ODg4YTkwZjNmZC4uYzk3YzliYzNmOGRkYjggMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTM5Myw2ICYjNDM7MzkzLDcgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ19ub2RlX3N0YXRfaXRlbXNbXSA9IHsKIAlOUl9TSE1FTV9USFBTLAogCU5SX0ZJTEVfVEhQUywKIAlOUl9BTk9OX1RIUFMsCiYjNDM7CU5SX1ZNU0NBTl9XUklURSwKIAlOUl9WTUFMTE9DLAogCU5SX0tFUk5FTF9TVEFDS19LQiwKIAlOUl9QQUdFVEFCTEUsCkBAIC00MTksNiAmIzQzOzQyMCw4IEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfbm9kZV9zdGF0X2l0ZW1zW10gPSB7CiAJUEdTQ0FOX1BST0FDVElWRSwKIAlQR1NDQU5fQU5PTiwKIAlQR1NDQU5fRklMRSwKJiM0MzsJUEdST1RBVEVfQU5PTiwKJiM0MzsJUEdST1RBVEVfRklMRSwKIAlQR1JFRklMTCwKICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCiAJTlJfSFVHRVRMQiwKQEAgLTUwMiw2ICYjNDM7NTA1LDQyIEBAIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCkKIAlyZXR1cm4geDsKIH0KIAomIzQzOy8qKgomIzQzOyAqIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyAtIG5vbi1jbGFtcGluZyBscnV2ZWMgc3RhdCByZWFkIGZvciBkZWx0YSBzYW1wbGluZwomIzQzOyAqIEBscnV2ZWM6IHRoZSBMUlUgdmVjdG9yIHRvIHJlYWQgZnJvbQomIzQzOyAqIEBpZHg6IHRoZSBub2RlX3N0YXRfaXRlbSB0byByZWFkCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zIHRoZSByYXcgc3RhdGVbaWR4XSB2YWx1ZSBjYXN0IHRvIHVuc2lnbmVkIGxvbmcsIHNraXBwaW5nIHRoZQomIzQzOyAqIGNsYW1wLW5lZ2F0aXZlLXRvLXplcm8gc3RlcCBpbiBscnV2ZWNfcGFnZV9zdGF0ZSgpLiBJbnRlbmRlZCBmb3IgY2FsbGVycwomIzQzOyAqIHRoYXQgc25hcHNob3QgYSBtb25vdG9uaWNhbGx5LWluY3JlbWVudGVkIGNvdW50ZXIgYW5kIHN1YnRyYWN0IHR3bwomIzQzOyAqIHNhbXBsZXM6IHVuc2lnbmVkIG1vZHVsYXIgYXJpdGhtZXRpYyB0aGVuIHlpZWxkcyB0aGUgY29ycmVjdCBkZWx0YSBhY3Jvc3MKJiM0MzsgKiBhIHNpZ25lZC1sb25nIHdyYXBhcm91bmQgKGEgcmVhbCBoYXphcmQgb24gMzItYml0KSB0aGF0IHRoZSBjbGFtcCB3b3VsZAomIzQzOyAqIG90aGVyd2lzZSB0dXJuIGludG8gYSBodWdlIHNwdXJpb3VzIGRlbHRhLgomIzQzOyAqCiYjNDM7ICogRG8gTk9UIHVzZSBmb3Igbm9uLW1vbm90b25pYyBwYWdlLWNvdW50IHJlYWRzIHdoZXJlIGEgdHJhbnNpZW50IG5lZ2F0aXZlCiYjNDM7ICogcmVhZGluZyBmcm9tIHBlci1DUFUgZGVsdGEgc2tldyBtdXN0IHByZXNlbnQgYXMgemVyby4KJiM0MzsgKgomIzQzOyAqIFhYWDogVGhpcyBoZWxwZXIgKGFuZCBpdHMgbm9kZS9nbG9iYWwgcGVlcnMpIGV4aXN0cyBiZWNhdXNlIHdlIHBsYWNlCiYjNDM7ICogbW9ub3RvbmljYWxseS1pbmNyZW1lbnRlZCBldmVudCBjb3VudGVycyAoTlJfVk1TQ0FOX1dSSVRFIGFuZCBQR1JPVEFURV8qKQomIzQzOyAqIGludG8gZW51bSBub2RlX3N0YXRfaXRlbS4KJiM0MzsgKi8KJiM0Mzt1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiYjNDM7CQkJCQkgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KQomIzQzO3sKJiM0MzsJc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJaWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkKJiM0MzsJCXJldHVybiBub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKGxydXZlY19wZ2RhdChscnV2ZWMpLCBpZHgpOwomIzQzOwomIzQzOwlpID0gbWVtY2dfc3RhdHNfaW5kZXgoaWR4KTsKJiM0MzsJaWYgKFdBUk5fT05DRShCQURfU1RBVF9JRFgoaSksICYjMzQ7JXM6IG1pc3Npbmcgc3RhdCBpdGVtICVkXG4mIzM0OywgX19mdW5jX18sIGlkeCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcG4gPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTsKJiM0MzsJcmV0dXJuICh1bnNpZ25lZCBsb25nKVJFQURfT05DRShwbi0mZ3Q7bHJ1dmVjX3N0YXRzLSZndDtzdGF0ZVtpXSk7CiYjNDM7fQomIzQzOwogdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCQkJICAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpCiB7CmRpZmYgLS1naXQgYS9tbS9tbXpvbmUuYyBiL21tL21tem9uZS5jCmluZGV4IDBjOGYxODFkOWQ1MDA2Li4xNzEzOWRiNGQyOTFjZSAxMDA2NDQKLS0tIGEvbW0vbW16b25lLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbW16b25lLmMKQEAgLTc4LDYgJiM0Mzs3OCw3IEBAIHZvaWQgbHJ1dmVjX2luaXQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKQogCiAJbWVtc2V0KGxydXZlYywgMCwgc2l6ZW9mKHN0cnVjdCBscnV2ZWMpKTsKIAlzcGluX2xvY2tfaW5pdCgmYW1wO2xydXZlYy0mZ3Q7bHJ1X2xvY2spOwomIzQzOwlzcGluX2xvY2tfaW5pdCgmYW1wO2xydXZlYy0mZ3Q7Y29zdF9sb2NrKTsKIAl6c3dhcF9scnV2ZWNfc3RhdGVfaW5pdChscnV2ZWMpOwogCiAJZm9yX2VhY2hfbHJ1KGxydSkKZGlmZiAtLWdpdCBhL21tL3N3YXAuYyBiL21tL3N3YXAuYwppbmRleCA1ODhmNTBkOGYxYThjOS4uNzRiMjgxNzc4Y2JjOTIgMTAwNjQ0Ci0tLSBhL21tL3N3YXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwLmMKQEAgLTI3Miw3MyAmIzQzOzI3Miw2IEBAIHZvaWQgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJZm9saW9fYmF0Y2hfYWRkX2FuZF9tb3ZlKGZvbGlvLCBscnVfbW92ZV90YWlsKTsKIH0KIAotdm9pZCBscnVfbm90ZV9jb3N0X3VubG9ja19pcnEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBib29sIGZpbGUsCi0JCXVuc2lnbmVkIGludCBucl9pbywgdW5zaWduZWQgaW50IG5yX3JvdGF0ZWQpCi0JCV9fcmVsZWFzZXMobHJ1dmVjLSZndDtscnVfbG9jaykKLQkJX19yZWxlYXNlcyhyY3UpCi17Ci0JdW5zaWduZWQgbG9uZyBjb3N0OwotCi0JLyoKLQkgKiBSZWZsZWN0IHRoZSByZWxhdGl2ZSBjb3N0IG9mIGluY3VycmluZyBJTyBhbmQgc3BlbmRpbmcgQ1BVCi0JICogdGltZSBvbiByb3RhdGlvbnMuIFRoaXMgZG9lc24mIzM5O3QgYXR0ZW1wdCB0byBtYWtlIGEgcHJlY2lzZQotCSAqIGNvbXBhcmlzb24sIGl0IGp1c3Qgc2F5czogaWYgcmVsb2FkcyBhcmUgYWJvdXQgY29tcGFyYWJsZQotCSAqIGJldHdlZW4gdGhlIExSVSBsaXN0cywgb3Igcm90YXRpb25zIGFyZSBvdmVyd2hlbG1pbmdseQotCSAqIGRpZmZlcmVudCBiZXR3ZWVuIHRoZW0sIGFkanVzdCBzY2FuIGJhbGFuY2UgZm9yIENQVSB3b3JrLgotCSAqLwotCWNvc3QgPSBucl9pbyAqIFNXQVBfQ0xVU1RFUl9NQVggJiM0MzsgbnJfcm90YXRlZDsKLQlpZiAoIWNvc3QpIHsKLQkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7bHJ1dmVjLSZndDtscnVfbG9jayk7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCQlyZXR1cm47Ci0JfQotCi0JZm9yICg7OykgewotCQl1bnNpZ25lZCBsb25nIGxydXNpemU7Ci0KLQkJLyogUmVjb3JkIGNvc3QgZXZlbnQgKi8KLQkJaWYgKGZpbGUpCi0JCQlscnV2ZWMtJmd0O2ZpbGVfY29zdCAmIzQzOz0gY29zdDsKLQkJZWxzZQotCQkJbHJ1dmVjLSZndDthbm9uX2Nvc3QgJiM0Mzs9IGNvc3Q7Ci0KLQkJLyoKLQkJICogRGVjYXkgcHJldmlvdXMgZXZlbnRzCi0JCSAqCi0JCSAqIEJlY2F1c2Ugd29ya2xvYWRzIGNoYW5nZSBvdmVyIHRpbWUgKGFuZCB0byBhdm9pZAotCQkgKiBvdmVyZmxvdykgd2Uga2VlcCB0aGVzZSBzdGF0aXN0aWNzIGFzIGEgZmxvYXRpbmcKLQkJICogYXZlcmFnZSwgd2hpY2ggZW5kcyB1cCB3ZWlnaGluZyByZWNlbnQgcmVmYXVsdHMKLQkJICogbW9yZSB0aGFuIG9sZCBvbmVzLgotCQkgKi8KLQkJbHJ1c2l6ZSA9IGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfSU5BQ1RJVkVfQU5PTikgJiM0MzsKLQkJCSAgbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9BQ1RJVkVfQU5PTikgJiM0MzsKLQkJCSAgbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9JTkFDVElWRV9GSUxFKSAmIzQzOwotCQkJICBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0FDVElWRV9GSUxFKTsKLQotCQlpZiAobHJ1dmVjLSZndDtmaWxlX2Nvc3QgJiM0MzsgbHJ1dmVjLSZndDthbm9uX2Nvc3QgJmd0OyBscnVzaXplIC8gNCkgewotCQkJbHJ1dmVjLSZndDtmaWxlX2Nvc3QgLz0gMjsKLQkJCWxydXZlYy0mZ3Q7YW5vbl9jb3N0IC89IDI7Ci0JCX0KLQotCQlzcGluX3VubG9ja19pcnEoJmFtcDtscnV2ZWMtJmd0O2xydV9sb2NrKTsKLQkJbHJ1dmVjID0gcGFyZW50X2xydXZlYyhscnV2ZWMpOwotCQlpZiAoIWxydXZlYykgewotCQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCQlicmVhazsKLQkJfQotCQlzcGluX2xvY2tfaXJxKCZhbXA7bHJ1dmVjLSZndDtscnVfbG9jayk7Ci0JfQotfQotCi12b2lkIGxydV9ub3RlX2Nvc3RfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvKQotewotCXN0cnVjdCBscnV2ZWMgKmxydXZlYzsKLQotCWxydXZlYyA9IGZvbGlvX2xydXZlY19sb2NrX2lycShmb2xpbyk7Ci0JbHJ1X25vdGVfY29zdF91bmxvY2tfaXJxKGxydXZlYywgZm9saW9faXNfZmlsZV9scnUoZm9saW8pLAotCQkJCWZvbGlvX25yX3BhZ2VzKGZvbGlvKSwgMCk7Ci19Ci0KIHN0YXRpYyB2b2lkIGxydV9hY3RpdmF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKQEAgLTExNjQsOCAmIzQzOzEwOTcsNiBAQCB2b2lkIGxydV9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludAogCiAJY2hpbGRfbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIE5PREVfREFUQShuaWQpKTsKIAlwYXJlbnRfbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMocGFyZW50LCBOT0RFX0RBVEEobmlkKSk7Ci0JcGFyZW50X2xydXZlYy0mZ3Q7YW5vbl9jb3N0ICYjNDM7PSBjaGlsZF9scnV2ZWMtJmd0O2Fub25fY29zdDsKLQlwYXJlbnRfbHJ1dmVjLSZndDtmaWxlX2Nvc3QgJiM0Mzs9IGNoaWxkX2xydXZlYy0mZ3Q7ZmlsZV9jb3N0OwogCiAJZm9yX2VhY2hfbHJ1KGxydSkKIAkJbHJ1dmVjX3JlcGFyZW50X2xydShjaGlsZF9scnV2ZWMsIHBhcmVudF9scnV2ZWMsIGxydSwgbmlkKTsKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggMzVjM2JiMTVhZTk2YTMuLjA3NTQ1MDk1YjM1MmNjIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtNjY4LDcgJiM0Mzs2NjgsNyBAQCBzdGF0aWMgcGFnZW91dF90IHBhZ2VvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCWZvbGlvX2NsZWFyX3JlY2xhaW0oZm9saW8pOwogCiAJdHJhY2VfbW1fdm1zY2FuX3dyaXRlX2ZvbGlvKGZvbGlvKTsKLQlub2RlX3N0YXRfYWRkX2ZvbGlvKGZvbGlvLCBOUl9WTVNDQU5fV1JJVEUpOwomIzQzOwlscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX1ZNU0NBTl9XUklURSwgZm9saW9fbnJfcGFnZXMoZm9saW8pKTsKIAlyZXR1cm4gUEFHRV9TVUNDRVNTOwogfQogCkBAIC0xNDEzLDggJiM0MzsxNDEzLDYgQEAgc3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LAogCQkJCQlzYy0mZ3Q7bnJfc2Nhbm5lZCAtPSAobnJfcGFnZXMgLSAxKTsKIAkJCQkJbnJfcGFnZXMgPSAxOwogCQkJCX0KLQkJCQlzdGF0LSZndDtucl9wYWdlb3V0ICYjNDM7PSBucl9wYWdlczsKLQogCQkJCWlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpCiAJCQkJCWdvdG8ga2VlcDsKIAkJCQlpZiAoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpCkBAIC0yMDM4LDEwICYjNDM7MjAzNiwxMCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sCiAJaXRlbSA9IFBHU1RFQUxfS1NXQVBEICYjNDM7IHJlY2xhaW1lcl9vZmZzZXQoc2MpOwogCW1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBpdGVtLCBucl9yZWNsYWltZWQpOwogCW1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1NURUFMX0FOT04gJiM0MzsgZmlsZSwgbnJfcmVjbGFpbWVkKTsKJiM0MzsJaWYgKG5yX3NjYW5uZWQgJmd0OyBucl9yZWNsYWltZWQpCiYjNDM7CQltb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdST1RBVEVfQU5PTiAmIzQzOyBmaWxlLAomIzQzOwkJCQkgbnJfc2Nhbm5lZCAtIG5yX3JlY2xhaW1lZCk7CiAKLQlscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTsKLQlscnVfbm90ZV9jb3N0X3VubG9ja19pcnEobHJ1dmVjLCBmaWxlLCBzdGF0Lm5yX3BhZ2VvdXQsCi0JCQkJCW5yX3NjYW5uZWQgLSBucl9yZWNsYWltZWQpOwogCWhhbmRsZV9yZWNsYWltX3dyaXRlYmFjayhucl90YWtlbiwgcGdkYXQsIHNjLCAmYW1wO3N0YXQpOwogCXRyYWNlX21tX3Ztc2Nhbl9scnVfc2hyaW5rX2luYWN0aXZlKHBnZGF0LSZndDtub2RlX2lkLAogCQkJbnJfc2Nhbm5lZCwgbnJfcmVjbGFpbWVkLCAmYW1wO3N0YXQsIHNjLSZndDtwcmlvcml0eSwgZmlsZSk7CkBAIC0yMTQ3LDkgJiM0MzsyMTQ1LDkgQEAgc3RhdGljIHZvaWQgc2hyaW5rX2FjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbiwKIAljb3VudF92bV9ldmVudHMoUEdERUFDVElWQVRFLCBucl9kZWFjdGl2YXRlKTsKIAljb3VudF9tZW1jZ19ldmVudHMobHJ1dmVjX21lbWNnKGxydXZlYyksIFBHREVBQ1RJVkFURSwgbnJfZGVhY3RpdmF0ZSk7CiAJbW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiAmIzQzOyBmaWxlLCAtbnJfdGFrZW4pOwomIzQzOwlpZiAobnJfcm90YXRlZCkKJiM0MzsJCW1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JPVEFURV9BTk9OICYjNDM7IGZpbGUsIG5yX3JvdGF0ZWQpOwogCi0JbHJ1dmVjX2xvY2tfaXJxKGxydXZlYyk7Ci0JbHJ1X25vdGVfY29zdF91bmxvY2tfaXJxKGxydXZlYywgZmlsZSwgMCwgbnJfcm90YXRlZCk7CiAJdHJhY2VfbW1fdm1zY2FuX2xydV9zaHJpbmtfYWN0aXZlKHBnZGF0LSZndDtub2RlX2lkLCBucl90YWtlbiwgbnJfYWN0aXZhdGUsCiAJCQlucl9kZWFjdGl2YXRlLCBucl9yb3RhdGVkLCBzYy0mZ3Q7cHJpb3JpdHksIGZpbGUpOwogfQpAQCAtMjI4Miw4ICYjNDM7MjI4MCwxMCBAQCBlbnVtIHNjYW5fYmFsYW5jZSB7CiAKIHN0YXRpYyB2b2lkIHByZXBhcmVfc2Nhbl9jb250cm9sKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQogewotCXVuc2lnbmVkIGxvbmcgZmlsZTsKJiM0MzsJc3RydWN0IGxydV9jb3N0ICphbm9uX2Nvc3QsICpmaWxlX2Nvc3Q7CiAJc3RydWN0IGxydXZlYyAqdGFyZ2V0X2xydXZlYzsKJiM0MzsJdW5zaWduZWQgbG9uZyBscnVzaXplOwomIzQzOwl1bnNpZ25lZCBsb25nIGZpbGU7CiAKIAlpZiAobHJ1X2dlbl9lbmFibGVkKCkgJmFtcDsmYW1wOyAhbHJ1X2dlbl9zd2l0Y2hpbmcoKSkKIAkJcmV0dXJuOwpAQCAtMjI5OSwxMSAmIzQzOzIyOTksNjkgQEAgc3RhdGljIHZvaWQgcHJlcGFyZV9zY2FuX2NvbnRyb2wocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiAKIAkvKgogCSAqIERldGVybWluZSB0aGUgc2NhbiBiYWxhbmNlIGJldHdlZW4gYW5vbiBhbmQgZmlsZSBMUlVzLgomIzQzOwkgKgomIzQzOwkgKiBUaGUgY29zdCBtb2RlbCBpcyBiYXNlZCBvbiByb3RhdGlvbnMsIHJlZmF1bHRzIGFuZAomIzQzOwkgKiByZWNsYWltLWRyaXZlbiB3cml0ZXMgKGFub24gb25seSkgb24gZWFjaCBzaWRlLgomIzQzOwkgKgomIzQzOwkgKiBUaGVzZSBldmVudCBjb3VudGVycyBhcmUgbW9ub3RvbmljLCBzbyBlYWNoIHJlY2xhaW0gY3ljbGUKJiM0MzsJICogdGhlIGRlbHRhIHNpbmNlIHRoZSBsYXN0IHNjYW4gaXMgZXh0cmFjdGVkIGFuZCBpbmNvcnBvcmF0ZWQKJiM0MzsJICogaW50byBhIGRlY2F5aW5nIGF2ZXJhZ2UuIFRoaXMgZW5zdXJlcyBjdXJyZW5jeSwgYXMgd29ya2xvYWRzCiYjNDM7CSAqIGNoYW5nZSBvdmVyIHRpbWUsIGFuZCBhdm9pZHMgb3ZlcmZsb3cgaW4gdGhlIGNhbGN1bGF0aW9ucy4KJiM0MzsJICoKJiM0MzsJICogVXNlIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYygpIHNvIHVuc2lnbmVkIHN1YnRyYWN0aW9uCiYjNDM7CSAqIHlpZWxkcyB0aGUgY29ycmVjdCBkZWx0YSBhY3Jvc3MgYSBzaWduZWQtbG9uZyB3cmFwYXJvdW5kIG9mCiYjNDM7CSAqIHRoZSB1bmRlcmx5aW5nIGNvdW50ZXIgKGEgcmVhbCBoYXphcmQgb24gMzItYml0IHRoYXQgdGhlCiYjNDM7CSAqIGNsYW1wIGluIGxydXZlY19wYWdlX3N0YXRlKCkgd291bGQgb3RoZXJ3aXNlIHR1cm4gaW50byBhIGh1Z2UKJiM0MzsJICogc3B1cmlvdXMgZGVsdGEpLgogCSAqLwotCXNwaW5fbG9ja19pcnEoJmFtcDt0YXJnZXRfbHJ1dmVjLSZndDtscnVfbG9jayk7Ci0Jc2MtJmd0O2Fub25fY29zdCA9IHRhcmdldF9scnV2ZWMtJmd0O2Fub25fY29zdDsKLQlzYy0mZ3Q7ZmlsZV9jb3N0ID0gdGFyZ2V0X2xydXZlYy0mZ3Q7ZmlsZV9jb3N0OwotCXNwaW5fdW5sb2NrX2lycSgmYW1wO3RhcmdldF9scnV2ZWMtJmd0O2xydV9sb2NrKTsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7dGFyZ2V0X2xydXZlYy0mZ3Q7Y29zdF9sb2NrKTsKJiM0MzsKJiM0MzsJZm9yIChpbnQgZiA9IDA7IGYgJmx0Oz0gMTsgZiYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBscnVfY29zdCAqY29zdCA9ICZhbXA7dGFyZ2V0X2xydXZlYy0mZ3Q7Y29zdFtmXTsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgcm90YXRlZCwgaW8sIG5yX3JvdGF0ZWQsIG5yX2lvOwomIzQzOwomIzQzOwkJcm90YXRlZCA9IGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyh0YXJnZXRfbHJ1dmVjLAomIzQzOwkJCQkJCSAgICAgIFBHUk9UQVRFX0FOT04gJiM0MzsgZik7CiYjNDM7CQlpbyA9IGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyh0YXJnZXRfbHJ1dmVjLAomIzQzOwkJCQkJCSBXT1JLSU5HU0VUX1JFU1RPUkVfQkFTRSAmIzQzOyBmKTsKJiM0MzsJCWlmIChmID09IFdPUktJTkdTRVRfQU5PTikKJiM0MzsJCQlpbyAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHRhcmdldF9scnV2ZWMsCiYjNDM7CQkJCQkJCSAgTlJfVk1TQ0FOX1dSSVRFKTsKJiM0MzsKJiM0MzsJCW5yX3JvdGF0ZWQgPSByb3RhdGVkIC0gY29zdC0mZ3Q7bGFzdF9yb3RhdGVkOwomIzQzOwkJbnJfaW8gPSBpbyAtIGNvc3QtJmd0O2xhc3RfaW87CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogUmVmbGVjdCB0aGUgcmVsYXRpdmUgY29zdCBvZiBpbmN1cnJpbmcgSU8gYW5kIHNwZW5kaW5nCiYjNDM7CQkgKiBDUFUgdGltZSBvbiByb3RhdGlvbnMuIFRoaXMgZG9lc24mIzM5O3QgYXR0ZW1wdCB0byBtYWtlIGEKJiM0MzsJCSAqIHByZWNpc2UgY29tcGFyaXNvbiwgaXQganVzdCBzYXlzOiBpZiByZWxvYWRzIGFyZSBhYm91dAomIzQzOwkJICogY29tcGFyYWJsZSBiZXR3ZWVuIHRoZSBMUlUgbGlzdHMsIG9yIHJvdGF0aW9ucyBhcmUKJiM0MzsJCSAqIG92ZXJ3aGVsbWluZ2x5IGRpZmZlcmVudCBiZXR3ZWVuIHRoZW0sIGFkanVzdCBzY2FuCiYjNDM7CQkgKiBiYWxhbmNlIGZvciBDUFUgd29yay4KJiM0MzsJCSAqLwomIzQzOwkJY29zdC0mZ3Q7Y291bnQgJiM0Mzs9IG5yX2lvICogU1dBUF9DTFVTVEVSX01BWCAmIzQzOyBucl9yb3RhdGVkOwomIzQzOwomIzQzOwkJY29zdC0mZ3Q7bGFzdF9yb3RhdGVkID0gcm90YXRlZDsKJiM0MzsJCWNvc3QtJmd0O2xhc3RfaW8gPSBpbzsKJiM0MzsJfQomIzQzOwomIzQzOwlhbm9uX2Nvc3QgPSAmYW1wO3RhcmdldF9scnV2ZWMtJmd0O2Nvc3RbV09SS0lOR1NFVF9BTk9OXTsKJiM0MzsJZmlsZV9jb3N0ID0gJmFtcDt0YXJnZXRfbHJ1dmVjLSZndDtjb3N0W1dPUktJTkdTRVRfRklMRV07CiYjNDM7CiYjNDM7CWxydXNpemUgPSBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLCBOUl9JTkFDVElWRV9BTk9OKSAmIzQzOwomIzQzOwkJICBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLCBOUl9BQ1RJVkVfQU5PTikgJiM0MzsKJiM0MzsJCSAgbHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYywgTlJfSU5BQ1RJVkVfRklMRSkgJiM0MzsKJiM0MzsJCSAgbHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYywgTlJfQUNUSVZFX0ZJTEUpOwomIzQzOwomIzQzOwl3aGlsZSAoYW5vbl9jb3N0LSZndDtjb3VudCAmIzQzOyBmaWxlX2Nvc3QtJmd0O2NvdW50ICZndDsgbHJ1c2l6ZSAvIDQpIHsKJiM0MzsJCWFub25fY29zdC0mZ3Q7Y291bnQgLz0gMjsKJiM0MzsJCWZpbGVfY29zdC0mZ3Q7Y291bnQgLz0gMjsKJiM0MzsJfQomIzQzOwomIzQzOwlzYy0mZ3Q7YW5vbl9jb3N0ID0gYW5vbl9jb3N0LSZndDtjb3VudDsKJiM0MzsJc2MtJmd0O2ZpbGVfY29zdCA9IGZpbGVfY29zdC0mZ3Q7Y291bnQ7CiYjNDM7CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7dGFyZ2V0X2xydXZlYy0mZ3Q7Y29zdF9sb2NrKTsKIAogCS8qCiAJICogVGFyZ2V0IGRlc2lyYWJsZSBpbmFjdGl2ZTphY3RpdmUgbGlzdCByYXRpb3MgZm9yIHRoZSBhbm9uCkBAIC00ODEwLDcgJiM0Mzs0ODY4LDggQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJc3RydWN0IHJlY2xhaW1fc3RhdCBzdGF0OwogCXN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7CiAJaW50IHNjYW5uZWQsIHJlY2xhaW1lZDsKLQlpbnQgaXNvbGF0ZWQgPSAwLCB0eXBlLCB0eXBlX3NjYW5uZWQ7CiYjNDM7CWludCBpc29sYXRlZCA9IDAsIG5yX2lzb2xhdGVkID0gMCwgdHlwZSwgdHlwZV9zY2FubmVkOwomIzQzOwl1bnNpZ25lZCBsb25nIHRvdGFsX3JlY2xhaW1lZCA9IDA7CiAJYm9vbCBza2lwX3JldHJ5ID0gZmFsc2U7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpOwpAQCAtNDgyMiw2ICYjNDM7NDg4MSw3IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCiAJc2Nhbm5lZCA9IGlzb2xhdGVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIHN3YXBwaW5lc3MsCiAJCQkJICZhbXA7bGlzdCwgJmFtcDtpc29sYXRlZCwgJmFtcDt0eXBlLCAmYW1wO3R5cGVfc2Nhbm5lZCk7CiYjNDM7CW5yX2lzb2xhdGVkID0gaXNvbGF0ZWQ7CiAKIAkvKiBTY2FubmluZyBtYXkgaGF2ZSBlbXB0aWVkIHRoZSBvbGRlc3QgZ2VuLCBmbHVzaCBpdCAqLwogCWlmIChzY2FubmVkKQpAQCAtNDgzNCw2ICYjNDM7NDg5NCw3IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogcmV0cnk6CiAJcmVjbGFpbWVkID0gc2hyaW5rX2ZvbGlvX2xpc3QoJmFtcDtsaXN0LCBwZ2RhdCwgc2MsICZhbXA7c3RhdCwgZmFsc2UsIG1lbWNnKTsKIAlzYy0mZ3Q7bnJfcmVjbGFpbWVkICYjNDM7PSByZWNsYWltZWQ7CiYjNDM7CXRvdGFsX3JlY2xhaW1lZCAmIzQzOz0gcmVjbGFpbWVkOwogCS8qIFJldHJ5IHBhc3MgaXMgb25seSBtZWFudCBmb3IgY2xlYW4gZm9saW9zIHdpdGhvdXQgbmV3IGlzb2xhdGlvbiAqLwogCWlmIChpc29sYXRlZCkKIAkJaGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKGlzb2xhdGVkLCBwZ2RhdCwgc2MsICZhbXA7c3RhdCk7CkBAIC00ODg3LDYgJiM0Mzs0OTQ4LDEwIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCQlnb3RvIHJldHJ5OwogCX0KIAomIzQzOwlpZiAobnJfaXNvbGF0ZWQgJmd0OyB0b3RhbF9yZWNsYWltZWQpCiYjNDM7CQltb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdST1RBVEVfQU5PTiAmIzQzOyB0eXBlLAomIzQzOwkJCQkgbnJfaXNvbGF0ZWQgLSB0b3RhbF9yZWNsYWltZWQpOwomIzQzOwogCXJldHVybiBzY2FubmVkOwogfQogCmRpZmYgLS1naXQgYS9tbS92bXN0YXQuYyBiL21tL3Ztc3RhdC5jCmluZGV4IGY1MzQ5NzJmNTE3ZGUwLi44N2Q0YTY3ODEzNjc2NyAxMDA2NDQKLS0tIGEvbW0vdm1zdGF0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zdGF0LmMKQEAgLTEwMjQsNiAmIzQzOzEwMjQsMTcgQEAgdW5zaWduZWQgbG9uZyBub2RlX3BhZ2Vfc3RhdGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwKIAogCXJldHVybiBub2RlX3BhZ2Vfc3RhdGVfcGFnZXMocGdkYXQsIGl0ZW0pOwogfQomIzQzOwomIzQzOy8qCiYjNDM7ICogTm9uLWNsYW1waW5nIHZhcmlhbnQgb2Ygbm9kZV9wYWdlX3N0YXRlKCkgaW50ZW5kZWQgZm9yIGNhbGxlcnMgdGhhdAomIzQzOyAqIHNuYXBzaG90IGEgbW9ub3RvbmljYWxseS1pbmNyZW1lbnRlZCBjb3VudGVyIGFuZCBzdWJ0cmFjdCB0d28gc2FtcGxlcy4KJiM0MzsgKiBTZWUgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMoKSBmb3IgdGhlIHJhdGlvbmFsZS4KJiM0MzsgKi8KJiM0Mzt1bnNpZ25lZCBsb25nIG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwKJiM0MzsJCQkJCWVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbSkKJiM0Mzt7CiYjNDM7CXJldHVybiAodW5zaWduZWQgbG9uZylhdG9taWNfbG9uZ19yZWFkKCZhbXA7cGdkYXQtJmd0O3ZtX3N0YXRbaXRlbV0pOwomIzQzO30KICNlbmRpZgogCiAvKgpAQCAtMTI4OSw2ICYjNDM7MTMwMCw4IEBAIGNvbnN0IGNoYXIgKiBjb25zdCB2bXN0YXRfdGV4dFtdID0gewogCVtJKFBHU0NBTl9QUk9BQ1RJVkUpXQkJCT0gJiMzNDtwZ3NjYW5fcHJvYWN0aXZlJiMzNDssCiAJW0koUEdTQ0FOX0FOT04pXQkJCT0gJiMzNDtwZ3NjYW5fYW5vbiYjMzQ7LAogCVtJKFBHU0NBTl9GSUxFKV0JCQk9ICYjMzQ7cGdzY2FuX2ZpbGUmIzM0OywKJiM0MzsJW0koUEdST1RBVEVfQU5PTildCQkJPSAmIzM0O3Bncm90YXRlX2Fub24mIzM0OywKJiM0MzsJW0koUEdST1RBVEVfRklMRSldCQkJPSAmIzM0O3Bncm90YXRlX2ZpbGUmIzM0OywKIAlbSShQR1JFRklMTCldCQkJCT0gJiMzNDtwZ3JlZmlsbCYjMzQ7LAogI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKIAlbSShOUl9IVUdFVExCKV0JCQkJPSAmIzM0O25yX2h1Z2V0bGImIzM0OywKZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuYwppbmRleCBmMzUxNzk4ZTcyM2FjZC4uN2FjMmI4OGM4MGFlNTYgMTAwNjQ0Ci0tLSBhL21tL3dvcmtpbmdzZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS93b3JraW5nc2V0LmMKQEAgLTU4NCwxMSAmIzQzOzU4NCw2IEBAIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdykKIAkvKiBGb2xpbyB3YXMgYWN0aXZlIHByaW9yIHRvIGV2aWN0aW9uICovCiAJaWYgKHdvcmtpbmdzZXQpIHsKIAkJZm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pOwotCQkvKgotCQkgKiBYWFg6IE1vdmUgdG8gZm9saW9fYWRkX2xydSgpIHdoZW4gaXQgc3VwcG9ydHMgbmV3IHZzCi0JCSAqIHB1dGJhY2sKLQkJICovCi0JCWxydV9ub3RlX2Nvc3RfcmVmYXVsdChmb2xpbyk7CiAJCW1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBXT1JLSU5HU0VUX1JFU1RPUkVfQkFTRSAmIzQzOyBmaWxlLCBucik7CiAJfQogb3V0Ogo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTM2CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaW4gZnJvbnQgb2YgbWUgdGhhdCYjMzk7cyB0d2Vha2luZyB0aGUgTFJVIGNvc3QgbW9kZWwgYW5kIGl0cyBhc3NvY2lhdGVkIHN0YXRzIOKAkyB0aGF0JiMzOTtzIHNvbWUgc2VyaW91cyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN0dWZmLiBJdCYjMzk7cyBpbnRyb2R1Y2luZyB0aGVzZSBuZXcgbW9ub3RvbmljIGNvdW50ZXJzLCBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCBhbmQgYG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWNgLiBBbmQgaXQmIzM5O3MgYWxzbyBtYWtpbmcgc29tZSBjaGFuZ2VzIHRvIGhvdyBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgIGNhbGN1bGF0ZXMgdGhlIGNvc3Qgb2Ygc2Nhbm5pbmcgYW5vbnltb3VzIGFuZCBmaWxlIHBhZ2VzLiBFc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBpcyBjaGFuZ2luZyB0aGUgcmVjbGFpbSBwYXRoLCBzcGVjaWZpY2FsbHkgdGhlIGJhbGFuY2UgYmV0d2VlbiBzY2FubmluZyBhbm9uIGFuZCBmaWxlIExSVXMsIHNvIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLgoKVGhlIHBhdGNoIGFsc28gc2VlbXMgdG8gYmUgY2xlYW5pbmcgdXAgc29tZSBvbGRlciBmdW5jdGlvbnMsIGxpa2UgcmVtb3ZpbmcgYGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycWAgYW5kIGBscnVfbm90ZV9jb3N0X3JlZmF1bHRgLCBhbmQgYWRkaW5nIHR3byBuZXcgaXRlbXMgYFBHUk9UQVRFX0FOT05gIGFuZCBgUEdST1RBVEVfRklMRWAuIEl0IGxvb2tzIGxpa2UgYHNocmlua19pbmFjdGl2ZV9saXN0YCwgYHNocmlua19hY3RpdmVfbGlzdGAsIGFuZCBgZXZpY3RfZm9saW9zYCBhcmUgYWxsIGJlaW5nIHVwZGF0ZWQgdG8gYWNjb3VudCBmb3IgdGhlIG5ldyBpdGVtcy4gVGhpcyBpcyBhbGwgY2VudGVyZWQgb24gaG93IHRoZSBrZXJuZWwgZGVjaWRlcyB3aGF0IHRvIGV2aWN0LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhpcyBmdXJ0aGVyLgoKVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgYSBrZXkgdGFyZ2V0OiBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCwgYG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWNgLCBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgLCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYGV2aWN0X2ZvbGlvc2AsIGBwYWdlb3V0YCwgYW5kIGBzaHJpbmtfZm9saW9fbGlzdGAuIExvb2tzIGxpa2UgYHByZXBhcmVfc2Nhbl9jb250cm9sYCwgYHNocmlua19pbmFjdGl2ZV9saXN0YCwgYHNocmlua19hY3RpdmVfbGlzdGAsIGFuZCBgZXZpY3RfZm9saW9zYCBhcmUgYWxsIHBhcnQgb2YgdGhlIHJlY2xhaW0gcGF0aC4gVGhlc2UgYXJlIGRlZmluaXRlbHkgd2hlcmUgSSBzaG91bGQgZm9jdXMgdGhlIGZ1enppbmcgZWZmb3J0cy4KCkkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhlIGNvZGUgaXMgaW4gdGhlIG1haW4gTU0gc3Vic3lzdGVtczogYG1tL3Ztc2Nhbi5jYCwgYG1tL3N3YXAuY2AsIGBtbS93b3JraW5nc2V0LmNgLCBgbW0vbWVtY29udHJvbC5jYCwgYW5kIGBtbS92bXN0YXQuY2AsIHNvIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG9uIGBDT05GSUdfTUVNQ0dgIHdoaWNoIGlzIHJlbGF0ZWQgdG8gYG1tL21lbWNvbnRyb2wuY2AuIEkgbmVlZCB0byByZXZpZXcgYG1tL01ha2VmaWxlYCBhbmQgYG1tL0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHRoYXQgY291bGQgaW5mbHVlbmNlIGhvdyB0aGlzIGNvZGUgYmVoYXZlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcmVwYXJlX3NjYW5fY29udHJvbCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tem9uZS5oPTc2Nj1zdHJ1Y3QgbHJ1dmVjIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTc3My1cdCAqIGluY3JlYXNlcywgdGhlIHJlY2xhaW0gc2NhbiBiYWxhbmNlIHRpcHMgdG93YXJkIHRoZSBvdGhlci5cbmluY2x1ZGUvbGludXgvbW16b25lLmg6Nzc0Olx0ICogVXBkYXRlZCBhbmQgZGVjYXllZCBhdCBwcmVwYXJlX3NjYW5fY29udHJvbCgpIHRpbWU7IGNvc3RfbG9ja1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03NzUtXHQgKiBzZXJpYWxpc2VzIHRoYXQgdXBkYXRlLlxuLS1cbm1tL3Ztc2Nhbi5jPTIyNzQ9ZW51bSBzY2FuX2JhbGFuY2Uge1xuLS1cbm1tL3Ztc2Nhbi5jLTIyODAtXG5tbS92bXNjYW4uYzoyMjgxOnN0YXRpYyB2b2lkIHByZXBhcmVfc2Nhbl9jb250cm9sKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtMjI4Mi17XG4tLVxubW0vdm1zY2FuLmM9NjIxMT1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MjMzLVxubW0vdm1zY2FuLmM6NjIzNDpcdHByZXBhcmVfc2Nhbl9jb250cm9sKHBnZGF0LCBzYyk7XG5tbS92bXNjYW4uYy02MjM1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzYzCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE1lbW9yeSBNYW5hZ2VtZW50IENvZGUqKgoKQWxyaWdodCwgc28gdGhlIG1vZGlmaWNhdGlvbnMgYXJlIGRlZmluaXRlbHkgY2VudGVyZWQgaW4gYG1tL3Ztc2Nhbi5jYC4gVGhhdCYjMzk7cyBnb29kLCBhdCBsZWFzdCBpdCYjMzk7cyBhIGtub3duIGFyZWEuIFRoYXQgZmlsZSBpcyBhbHdheXMgY29tcGlsZWQsIHdoaWNoIGlzIHVzZWZ1bCB3aGVuIHRyYWNraW5nIGRvd24gYSBzcGVjaWZpYyBpc3N1ZS4gSSBjYW4gdXNlIG15IGV4cGVyaWVuY2UgdG8gaW1tZWRpYXRlbHkgdGhpbmsgYWJvdXQgdGhlIGNoYW5nZXMgbWFkZSB0aGVyZSBhbmQgaG93IHRoZXkgbWF5IGluZmx1ZW5jZSBteSB3b3JrLgoKTm93LCBpZiBtZW1vcnkgc2VydmVzLCBgQ09ORklHX01FTUNHYCBjb21lcyBpbnRvIHBsYXkgd2l0aCBgbW0vbWVtY29udHJvbC5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGNsb3NlbHkgdGhlIGN1cnJlbnQgbW9kaWZpY2F0aW9uIGlzIHRpZWQgdG8gbWVtb3J5IGNvbnRyb2wgZ3JvdXBzLiBUbyB2ZXJpZnkgdGhlIHJlbGF0aW9uc2hpcCwgbGV0JiMzOTtzIHRha2UgYSBxdWljayBsb29rIGF0IGBtbS9NYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgY29tcGlsYXRpb24gb2YgYG1lbWNvbnRyb2wuY2AuIFRoaXMgd2lsbCBnaXZlIG1lIGFuIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoaXMgZmlsZSBhbmQgdGhlIGNvbXBpbGF0aW9uIHByb2Nlc3MsIGhlbHBpbmcgbWUgYnVpbGQgYSBtZW50YWwgbW9kZWwgb2YgdGhlIGNoYW5nZXMuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtY29udHJvbC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9Mjc9S0NPVl9JTlNUUlVNRU5UX2ttZW1sZWFrLm8gOj0gblxubW0vTWFrZWZpbGU6Mjg6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wubyA6PSBuXG5tbS9NYWtlZmlsZS0yOS1LQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC12MS5vIDo9IG5cbi0tXG5tbS9NYWtlZmlsZT0xMDQ9b2JqLSQoQ09ORklHX01FTUNHX1YxKSAmIzQzOz0gbWVtY29udHJvbC12MS5vXG5tbS9NYWtlZmlsZToxMDU6b2JqLSQoQ09ORklHX01FTUNHKSAmIzQzOz0gbWVtY29udHJvbC5vIHZtcHJlc3N1cmUub1xubW0vTWFrZWZpbGUtMTA2LWlmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxubW0vTWFrZWZpbGU6MTA3Om9iai0kKENPTkZJR19NRU1DRykgJiM0Mzs9IGJwZl9tZW1jb250cm9sLm9cbm1tL01ha2VmaWxlLTEwOC1lbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODM4CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMTc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IExpbmUgb2YgSW5xdWlyeTogTWVtb3J5IE1hbmFnZW1lbnQgYW5kIExSVSBHZW5lcmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBhbmQgaXQgbG9va3MgbGlrZSBgQ09ORklHX01FTUNHYCBpcyBkZWZpbml0ZWx5IGEgcHJlcmVxdWlzaXRlIGZvciBgbWVtY29udHJvbC5jYC4gVGhhdCYjMzk7cyBub3Qgc3VycHJpc2luZy4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29ubmVjdGlvbiB0byBgQ09ORklHX0xSVV9HRU5gLiBMZXQmIzM5O3Mgc2VlLi4uIGxvb2tpbmcgYXQgYG1tL3Ztc2Nhbi5jYCwgSSBzcG90IHRoaXMgZnVuY3Rpb24sIGBwcmVwYXJlX3NjYW5fY29udHJvbGAuIEhtbSwgaW5zaWRlIGl0LCB0aGVyZSYjMzk7cyBhIGNoZWNrOiBgbHJ1X2dlbl9lbmFibGVkKClgLiBUaGlzIGlzIGludGVyZXN0aW5nOyBpdCBzdWdnZXN0cyB0aGF0IExSVSBnZW5lcmF0aW9uIGlzIHNvbWVob3cgaW50ZWdyYXRlZCBpbnRvIHRoZSBzY2FubmluZyBwcm9jZXNzIGl0c2VsZi4gVGhlIGxvZ2ljIHN1Z2dlc3RzLCB0aGF0LCBpZiBMUlUgZ2VuZXJhdGlvbiBpcyBlbmFibGVkIGFuZCBpdCBpcyBub3Qgc3dpdGNoaW5nLCB0aGVuIHRoZSBmdW5jdGlvbiBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgIGlzIGdvaW5nIHRvIHJldHVybi4gQWxyaWdodCwgc2VlbXMgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdC4gTm93LCBsZXQmIzM5O3MgbG9vayBhdCB3aGVyZSBgZXZpY3RfZm9saW9zYCBmaXRzIGludG8gYWxsIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXZpY3RfZm9saW9zJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTQ4MjY9c3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS92bXNjYW4uYy00ODU5LVxubW0vdm1zY2FuLmM6NDg2MDpzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbm1tL3Ztc2Nhbi5jLTQ4NjEtXHRcdFx0c3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKVxuLS1cbm1tL3Ztc2Nhbi5jPTUwMjQ9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MDQ3LVx0XHRucl9iYXRjaCA9IG1pbihucl90b19zY2FuLCBNSU5fTFJVX0JBVENIKTtcbm1tL3Ztc2Nhbi5jOjUwNDg6XHRcdGRlbHRhID0gZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKTtcbm1tL3Ztc2Nhbi5jLTUwNDktXHRcdGlmICghZGVsdGEpXG4tLVxubW0vdm1zY2FuLmM9NTY1MT1zdGF0aWMgaW50IHJ1bl9ldmljdGlvbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbi0tXG5tbS92bXNjYW4uYy01NjcxLVx0XHRucl9iYXRjaCA9IG1pbihucl90b19yZWNsYWltIC0gc2MtXHUwMDNlbnJfcmVjbGFpbWVkLCBNQVhfTFJVX0JBVENIKTtcbm1tL3Ztc2Nhbi5jOjU2NzI6XHRcdGlmICghZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKSlcbm1tL3Ztc2Nhbi5jLTU2NzMtXHRcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MjQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzoKCioqQ2hlY2tpbmcgdGhlIE1HTFJVIENvbm5lY3Rpb24gdG8gRXZpY3Rpb24gTG9naWMqKgoKQWxyaWdodCwgc28gYGV2aWN0X2ZvbGlvc2AgaXMgcGFydCBvZiB0aGUgTUdMUlUgaW1wbGVtZW50YXRpb24uIE15IGluaXRpYWwgY29uY2VybiBpcyB0byB1bmRlcnN0YW5kIGl0cyBwbGFjZSB3aXRoaW4gdGhlIGJyb2FkZXIgcGljdHVyZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgaWYgdGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNvbXBpbGVkIGlmIHRoZSBgQ09ORklHX0xSVV9HRU5gIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBkZXRhaWwgYmVjYXVzZSBpdCB0aWVzIGBldmljdF9mb2xpb3NgIGRpcmVjdGx5IHRvIHRoZSBtdWx0aS1nZW5lcmF0aW9uYWwgTFJVIG1lY2hhbmlzbS4gRW5zdXJpbmcgdGhpcyBkZXBlbmRlbmN5IHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBiZWhhdmlvciBpbiB0aGUgbGFyZ2VyIGNvbnRleHQgb2YgbWVtb3J5IG1hbmFnZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19MUlVfR0VOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9ODI0PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XG4tLVxubW0vdm1zY2FuLmMtODMwLVxubW0vdm1zY2FuLmM6ODMxOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxubW0vdm1zY2FuLmMtODMyLS8qXG4tLVxubW0vdm1zY2FuLmM9ODU0PXN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS92bXNjYW4uYy04NTctfVxubW0vdm1zY2FuLmM6ODU4OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xubW0vdm1zY2FuLmMtODU5LVxuLS1cbm1tL3Ztc2Nhbi5jPTI2NzE9c3RhdGljIGJvb2wgY2FuX2FnZV9hbm9uX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS92bXNjYW4uYy0yNjgyLVxubW0vdm1zY2FuLmM6MjY4MzojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL3Ztc2Nhbi5jLTI2ODQtXG5tbS92bXNjYW4uYz0yNjg1PURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGxydV9zd2l0Y2gpO1xubW0vdm1zY2FuLmM6MjY4NjojaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxubW0vdm1zY2FuLmMtMjY4Ny1ERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9UUlVFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcbi0tXG5tbS92bXNjYW4uYz0yODY3PXN0YXRpYyB2b2lkIHJlc2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxuLS1cbm1tL3Ztc2Nhbi5jLTI4ODYtXG5tbS92bXNjYW4uYzoyODg3OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcbm1tL3Ztc2Nhbi5jLTI4ODgtXG4tLVxubW0vdm1zY2FuLmM9Mjk5Nj12b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS92bXNjYW4uYy0zMDI0LVxubW0vdm1zY2FuLmM6MzAyNTojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VICovXG5tbS92bXNjYW4uYy0zMDI2LVxuLS1cbm1tL3Ztc2Nhbi5jPTU5MjA9bGF0ZV9pbml0Y2FsbChpbml0X2xydV9nZW4pO1xubW0vdm1zY2FuLmMtNTkyMS1cbm1tL3Ztc2Nhbi5jOjU5MjI6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXG5tbS92bXNjYW4uYy01OTIzLVxuLS1cbm1tL3Ztc2Nhbi5jPTU5MzQ9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01OTM4LVxubW0vdm1zY2FuLmM6NTkzOTojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbm1tL3Ztc2Nhbi5jLTU5NDAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTA1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVk1zY2FuIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIHRoYXQgYGV2aWN0X2ZvbGlvc2AgaXMgZGVmaW5pdGVseSBuZXN0bGVkIHdpdGhpbiB0aGF0IGAjaWZkZWYgQ09ORklHX0xSVV9HRU5gIGJsb2NrLiBUaGF0JiMzOTtzIGEga2V5IG9ic2VydmF0aW9uLiBOb3csIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSBJIGhhdmUgdGhpcyByaWdodC4uLiB3YWl0IGEgc2Vjb25kLCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYW5kIGBwcmVwYXJlX3NjYW5fY29udHJvbGAgYXJlIGFsbCBjb3JlIGNvbXBvbmVudHMgb2YgdGhlIHRyYWRpdGlvbmFsIGFjdGl2ZS9pbmFjdGl2ZSBMUlUgbWVjaGFuaXNtLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIGJvdGggdGhlIE1HTFJVIHZpYSBgZXZpY3RfZm9saW9zYCwgYW5kIHRoZSBjbGFzc2ljIExSVSB3aXRoIHRob3NlIHRocmVlIGZ1bmN0aW9ucy4gU28gaXQmIzM5O3MgYWZmZWN0aW5nICpib3RoKiBpbXBsZW1lbnRhdGlvbnMsIG5vdCBqdXN0IHRoZSBuZXcgb25lLiBJIHNob3VsZCBwcm9iYWJseSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGJ5IGxvb2tpbmcgYXQgYG1tL3Ztc2Nhbi5jYCB0byBjb25maXJtLiBJdCBpcyBub3QganVzdCBvbmUgTFJVIHRoYXQgaXMgYmVpbmcgbW9kaWZpZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V2aWN0X2ZvbGlvcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTQ4MjY9c3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS92bXNjYW4uYy00ODU5LVxubW0vdm1zY2FuLmM6NDg2MDpzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbm1tL3Ztc2Nhbi5jLTQ4NjEtXHRcdFx0c3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKVxuLS1cbm1tL3Ztc2Nhbi5jPTUwMjQ9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MDQ3LVx0XHRucl9iYXRjaCA9IG1pbihucl90b19zY2FuLCBNSU5fTFJVX0JBVENIKTtcbm1tL3Ztc2Nhbi5jOjUwNDg6XHRcdGRlbHRhID0gZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKTtcbm1tL3Ztc2Nhbi5jLTUwNDktXHRcdGlmICghZGVsdGEpXG4tLVxubW0vdm1zY2FuLmM9NTY1MT1zdGF0aWMgaW50IHJ1bl9ldmljdGlvbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbi0tXG5tbS92bXNjYW4uYy01NjcxLVx0XHRucl9iYXRjaCA9IG1pbihucl90b19yZWNsYWltIC0gc2MtXHUwMDNlbnJfcmVjbGFpbWVkLCBNQVhfTFJVX0JBVENIKTtcbm1tL3Ztc2Nhbi5jOjU2NzI6XHRcdGlmICghZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKSlcbm1tL3Ztc2Nhbi5jLTU2NzMtXHRcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjUzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBjb2RlLiBIZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZyBhcyBJIGFuYWx5emUgdGhlc2UgZnVuY3Rpb25zOgoKKipBbmFseXppbmcgYHNocmlua19pbmFjdGl2ZV9saXN0YCBhbmQgYHNocmlua19hY3RpdmVfbGlzdGAqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGxpc3RzIGFyZSBiZWluZyBtYW5hZ2VkIGFuZCBob3cgbWVtb3J5IGlzIHBvdGVudGlhbGx5IGJlaW5nIG9wdGltaXplZC4gU28sIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgbG9va2luZyBhdCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGFuZCBgc2hyaW5rX2FjdGl2ZV9saXN0YC4gVGhlc2UgZnVuY3Rpb24gbmFtZXMgYXJlIHByZXR0eSBkZXNjcmlwdGl2ZSwgc28gbXkgaW5pdGlhbCBoeXBvdGhlc2lzIGlzIHRoYXQgdGhleSYjMzk7cmUgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcHJvYmFibHkgaW52b2x2ZSByZWR1Y2luZyB0aGUgc2l6ZSBvZiBzb21lIGRhdGEgc3RydWN0dXJlcyB0byByZWNsYWltIHJlc291cmNlcy4gSSBuZWVkIHRvIHNlZSAqaG93KiB0aGlzIHNocmlua2luZyBpcyBhY2NvbXBsaXNoZWQg4oCTIGFyZSB3ZSBmcmVlaW5nIG1lbW9yeSwgY29hbGVzY2luZyBzZWdtZW50cywgb3IganVzdCByZWFsbG9jYXRpbmcgdG8gc21hbGxlciBibG9ja3M/IFdoYXQgYXJlIHRoZSBjcml0ZXJpYSBmb3IgdHJpZ2dlcmluZyB0aGlzIHNocmlua2FnZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGUgYHNocmlua19pbmFjdGl2ZV9saXN0YCBhbmQgYHNocmlua19hY3RpdmVfbGlzdGAgb24gcGVyZm9ybWFuY2UsIHBhcnRpY3VsYXJseSB0aGUgdHJhZGUtb2ZmIGJldHdlZW4gbWVtb3J5IGZvb3RwcmludCBhbmQgZXhlY3V0aW9uIHNwZWVkLiBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgSSBzaG91bGQgYmUgYXdhcmUgb2YsIGVzcGVjaWFsbHkgaWYgdGhlIGxpc3RzIGFyZSBiZWluZyBhY2Nlc3NlZCBieSBtdWx0aXBsZSB0aHJlYWRzPyBVbHRpbWF0ZWx5LCBJIG5lZWQgYSB2ZXJ5IGNsZWFyIHBpY3R1cmUgb2YgdGhlaXIgZnVuY3Rpb25hbGl0eSBhbmQgdGhlIGludmFyaWFudHMgdGhleSBtYWludGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2hyaW5rX2luYWN0aXZlX2xpc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz0xOTQyPXN0YXRpYyB2b2lkIGhhbmRsZV9yZWNsYWltX3dyaXRlYmFjayh1bnNpZ25lZCBsb25nIG5yX3Rha2VuLFxuLS1cbm1tL3Ztc2Nhbi5jLTE5ODAtLypcbm1tL3Ztc2Nhbi5jOjE5ODE6ICogc2hyaW5rX2luYWN0aXZlX2xpc3QoKSBpcyBhIGhlbHBlciBmb3Igc2hyaW5rX25vZGUoKS4gIEl0IHJldHVybnMgdGhlIG51bWJlclxubW0vdm1zY2FuLmMtMTk4Mi0gKiBvZiByZWNsYWltZWQgcGFnZXNcbm1tL3Ztc2Nhbi5jLTE5ODMtICovXG5tbS92bXNjYW4uYzoxOTg0OnN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19pbmFjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbixcbm1tL3Ztc2Nhbi5jLTE5ODUtXHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4tLVxubW0vdm1zY2FuLmM9MjIxMz1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfbGlzdChlbnVtIGxydV9saXN0IGxydSwgdW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxuLS1cbm1tL3Ztc2Nhbi5jLTIyMjMtXG5tbS92bXNjYW4uYzoyMjI0Olx0cmV0dXJuIHNocmlua19pbmFjdGl2ZV9saXN0KG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIGxydSk7XG5tbS92bXNjYW4uYy0yMjI1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4MzgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCYjMzk7cyBJbXBhY3Qgb24gTFJVIGFuZCBNR0xSVSBJbXBsZW1lbnRhdGlvbnMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIGJpdCBtb3JlIGludm9sdmVkIHRoYW4gSSBpbml0aWFsbHkgdGhvdWdodC4gSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlcyB0b3VjaCBib3RoIHRoZSB0cmFkaXRpb25hbCBMUlUgYWxnb3JpdGhtICphbmQqIHRoZSBNR0xSVSAoTXVsdGktR2VuZXJhdGlvbmFsIExSVSkgaW1wbGVtZW50YXRpb24uIFRoZSBjbGFzc2ljIExSVSBpcyBhbHdheXMgYmFrZWQgaW50byB0aGUga2VybmVsLCB0aGF04oCZcyBubyBzdXJwcmlzZSwgYnV0IE1HTFJVIGlzIGNvbmRpdGlvbmFsLCBiYXNlZCBvbiB0aGUgYENPTkZJR19MUlVfR0VOYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhlcmVmb3JlLCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIG92ZXJhbGwgZWZmZWN0IG9mIHRoaXMgY29kZSwgSSYjMzk7bSB0aGlua2luZyB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgZW5hYmxlIGBDT05GSUdfTFJVX0dFTmAuCgpIb2xkIG9uIGEgc2Vjb25kLCB0aG91Z2guIEkmIzM5O20gYWxzbyBzZWVpbmcgc29tZSBwb3RlbnRpYWwgaW50ZXJhY3Rpb24gd2l0aCBgQ09ORklHX01FTUNHYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pY2AgZnVuY3Rpb24uIFRoYXQgZnVuY3Rpb24gaGFzIHNwZWNpZmljIGxvZ2ljIHRoYXQgaGluZ2VzIG9uIGBtZW1fY2dyb3VwX2Rpc2FibGVkKClgLiBUaGlzIGlzIGdvaW5nIHRvIG1hdHRlciwgc28gSSByZWFsbHkgbmVlZCB0byBleGFtaW5lIHRoZSBkZXRhaWxzIHRoZXJlLiBJ4oCZbGwgbmF2aWdhdGUgdG8gYG1tL21lbWNvbnRyb2wuY2AgYW5kIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pY2AgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBhbGwgZml0cyB0b2dldGhlciBhbmQgaG93IHRoZSBtZW1vcnkgY2dyb3VwIHNldHRpbmcgY2hhbmdlcyB0aGUgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9NDg2PXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcbi0tXG5tbS9tZW1jb250cm9sLmMtNTA4LS8qKlxubW0vbWVtY29udHJvbC5jOjUwOTogKiBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMgLSBub24tY2xhbXBpbmcgbHJ1dmVjIHN0YXQgcmVhZCBmb3IgZGVsdGEgc2FtcGxpbmdcbm1tL21lbWNvbnRyb2wuYy01MTAtICogQGxydXZlYzogdGhlIExSVSB2ZWN0b3IgdG8gcmVhZCBmcm9tXG4tLVxubW0vbWVtY29udHJvbC5jLTUyNi0gKi9cbm1tL21lbWNvbnRyb2wuYzo1Mjc6dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxubW0vbWVtY29udHJvbC5jLTUyOC1cdFx0XHRcdFx0ICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0MzkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipLY29uZmlnIERlcGVuZGVuY3kgQ29uZmlybWF0aW9uKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgYWJzb2x1dGVseSBnb2luZyB0byBuZWVkIGBDT05GSUdfTUVNQ0dgLiBObyBxdWVzdGlvbiBhYm91dCB0aGF0LiBOb3csIGxldCYjMzk7cyBzZWUsIHdoYXQmIzM5O3MgbmV4dD8gSG1tLCB0aGUgcHJvYmxlbSBJJiMzOTttIHRyeWluZyB0byBzb2x2ZSBzZWVtcyB0byBoaW5nZSBvbiBzb21ldGhpbmcgcmVsYXRlZCB0byBgTFJVX0dFTmAuIEkgc2hvdWxkIGdvIGRpcmVjdGx5IHRvIGBtbS9LY29uZmlnYCB0byBzZWUgaWYgdGhhdCBvcHRpb24gaXMgZW5hYmxlZCwgYW5kIHVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcy4gR290dGEgbWFrZSBzdXJlIHdlJiMzOTtyZSBub3QgbWlzc2luZyBhIGNyaXRpY2FsIGRlcGVuZGVuY3kgb3Igc29tZXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwMDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTFJVX0dFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xNDA2PWVuZGlmICMgVVNFUkZBVUxURkRcbi0tXG5tbS9LY29uZmlnLTE0MDgtIyBtdWx0aS1nZW4gTFJVIHtcbm1tL0tjb25maWc6MTQwOTpjb25maWcgTFJVX0dFTlxubW0vS2NvbmZpZy0xNDEwLVx0Ym9vbCBcJiMzNDtNdWx0aS1HZW4gTFJVXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDE3LVxubW0vS2NvbmZpZzoxNDE4OmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcbm1tL0tjb25maWctMTQxOS1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MjMtXG5tbS9LY29uZmlnOjE0MjQ6Y29uZmlnIExSVV9HRU5fU1RBVFNcbm1tL0tjb25maWctMTQyNS1cdGJvb2wgXCYjMzQ7RnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDMyLVxubW0vS2NvbmZpZzoxNDMzOmNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxubW0vS2NvbmZpZy0xNDM0LVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwMDowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDg1MQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDMzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBNR0xSVSBUZXN0aW5nICZhbXA7IEtleSBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgdG8gcmVhbGx5IHB1dCB0aGUgTUdMUlUgcGF0aCB0aHJvdWdoIGl0cyBwYWNlcywgZW5hYmxpbmcgYENPTkZJR19MUlVfR0VOYCBhbmQgYENPTkZJR19MUlVfR0VOX0VOQUJMRURgIHNlZW1zIGxpa2UgdGhlIHJpZ2h0IG1vdmUuIEhvd2V2ZXIsIHdhaXQgYSBtaW51dGUsIGlmIHdlIGVuYWJsZSBgQ09ORklHX0xSVV9HRU5fRU5BQkxFRGAgb3V0cmlnaHQsIHdlIG1pZ2h0IGluYWR2ZXJ0ZW50bHkgYnlwYXNzIHRoZSB0cmFkaXRpb25hbCBMUlUgcGF0aCBpbiBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zLCB1bmxlc3Mgd2UgZXhwbGljaXRseSBmb3JjZSBhIHJ1bnRpbWUgc3dpdGNoLiBUaGF0JiMzOTtzIG5vdCBpZGVhbCwgc2luY2UgdGhlIHBhdGNoIG1vZGlmaWVzIGJvdGggYXBwcm9hY2hlcy4gU28sIEkmIzM5O2xsIGJlIHN1cmUgdG8gbWFrZSBub3RlIG9mIHRoZXNlIGNvbmNlcm5zLiBJIGNhbiBzaW1wbGlmeSB0aGluZ3MgYnkgbGlzdGluZyBgTUVNQ0dgIGFuZCBgTFJVX0dFTmAuCgpOb3csIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHdoZXJlIHRoaXMgcGF0Y2ggd2lsbCBoYXZlIHRoZSBncmVhdGVzdCBpbXBhY3QgYW5kIHdoZXJlIHRlc3Rpbmcgc2hvdWxkIGJlIGZvY3VzZWQuIEkmIzM5O3ZlIGdvdCB0byBjb25zaWRlcjoKCiogICBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgCiogICBgc2hyaW5rX2luYWN0aXZlX2xpc3RgCiogICBgc2hyaW5rX2FjdGl2ZV9saXN0YAoqICAgYGV2aWN0X2ZvbGlvc2AKKiAgIGBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWNgCiogICBgbm9kZV9wYWdlX3N0YXRlX21vbm90b25pY2AKCkkmIzM5O20gZXZhbHVhdGluZyB3aGV0aGVyIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgYW5kIGBzaHJpbmtfYWN0aXZlX2xpc3RgIGFyZSBob3QsIGNyaXRpY2FsIHBhdGhzLiBJIGtub3cgdGhleSYjMzk7cmUgaW52b2tlZCBkdXJpbmcgbWVtb3J5IHJlY2xhaW0sIHdoaWNoIGNhbiBoYXBwZW4gZnJlcXVlbnRseSB3aGVuIHRoZSBzeXN0ZW0gaXMgdW5kZXIgbWVtb3J5IHByZXNzdXJlLCBidXQgdGhleSYjMzk7cmUgbm90IHF1aXRlIGFzIHViaXF1aXRvdXMgYXMgZnVuY3Rpb25zIGxpa2UgYGttYWxsb2NgIG9yIGBzY2hlZHVsZWAuIGBwcmVwYXJlX3NjYW5fY29udHJvbGAgaXMgYWxzbyBwYXJ0IG9mIHRoYXQgcmVjbGFpbSBwcm9jZXNzLiBgZXZpY3RfZm9saW9zYCBkZWZpbml0ZWx5IGxvb2tzIGtleSBzaW5jZSBpdCYjMzk7cyBkaXJlY3RseSBpbnZvbHZlZCBpbiB0aGUgTUdMUlUgcmVjbGFpbSBwcm9jZXNzLiBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCBpcyBjYWxsZWQgZnJvbSBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgLCBhbmQgYG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWNgIGlzIGluIHR1cm4gY2FsbGVkIGZyb20gYGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pY2AuIEkmIzM5O2xsIHdhbnQgdG8gY2hlY2sgdGhlIGNhbGxlcnMgb2YgYHByZXBhcmVfc2Nhbl9jb250cm9sYCBuZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwMDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcmVwYXJlX3NjYW5fY29udHJvbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTIyNzQ9ZW51bSBzY2FuX2JhbGFuY2Uge1xuLS1cbm1tL3Ztc2Nhbi5jLTIyODAtXG5tbS92bXNjYW4uYzoyMjgxOnN0YXRpYyB2b2lkIHByZXBhcmVfc2Nhbl9jb250cm9sKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtMjI4Mi17XG4tLVxubW0vdm1zY2FuLmM9NjIxMT1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MjMzLVxubW0vdm1zY2FuLmM6NjIzNDpcdHByZXBhcmVfc2Nhbl9jb250cm9sKHBnZGF0LCBzYyk7XG5tbS92bXNjYW4uYy02MjM1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwMDowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTgxMgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIE1lbW9yeSBTaHJpbmthZ2UgUHJvY2VzcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgZW50cnkgcG9pbnQgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBoZXJlIGlzIGBzaHJpbmtfbm9kZWAuIFRoYXQmIzM5O3Mgd2hlcmUgaXQgYWxsIGJlZ2lucy4gQW5kIGZyb20gbXkgZXhwZXJpZW5jZSwgYHNocmlua19ub2RlYCBnZXRzIGludm9rZWQgZnJvbSBhIGZldyBrZXkgcGxhY2VzOiBgZG9fdHJ5X3RvX2ZyZWVfcGFnZXNgLCBga3N3YXBkX3Nocmlua19ub2RlYCwgYHNocmlua19hbGxfbWVtb3J5YCwgYWxsIGNvcmUgY29tcG9uZW50cyBvZiB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbS4gS25vd2luZyB0aGF0LCBmb2N1c2luZyBpbiBvbiBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgLCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYW5kIGBldmljdF9mb2xpb3NgIHNlZW1zIGxpa2UgdGhlIHJpZ2h0IGFwcHJvYWNoLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIHdvcmsgb2YgcmVjbGFtYXRpb24gaXMgaGFwcGVuaW5nLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCB0aGUgYWN0aXZlIGFuZCBpbmFjdGl2ZSBsaXN0IG1hbmlwdWxhdGlvbi4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gYGV2aWN0X2ZvbGlvc2AsIGJlY2F1c2UgdGhhdCB0b3VjaGVzIGRpcmVjdGx5IG9uIHRoZSBkYXRhIHN0cnVjdHVyZXMuIEkgdGhpbmsgaXQgaXMgaW1wb3J0YW50IHRvIGJlIGNvbXByZWhlbnNpdmUgaGVyZS4KCkJlZm9yZSBJIGdvIGZ1cnRoZXIsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayBob3cgYGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pY2Agd29ya3MgYWdhaW4uIEl0JiMzOTtzIG9mdGVuIHRoZSByb290IG9mIHN1YnRsZSBidWdzIHJlbGF0ZWQgdG8gdGhlIGJvb2trZWVwaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwMDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTQ4Nj11bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXG4tLVxubW0vbWVtY29udHJvbC5jLTUwOC0vKipcbm1tL21lbWNvbnRyb2wuYzo1MDk6ICogbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljIC0gbm9uLWNsYW1waW5nIGxydXZlYyBzdGF0IHJlYWQgZm9yIGRlbHRhIHNhbXBsaW5nXG5tbS9tZW1jb250cm9sLmMtNTEwLSAqIEBscnV2ZWM6IHRoZSBMUlUgdmVjdG9yIHRvIHJlYWQgZnJvbVxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjYtICovXG5tbS9tZW1jb250cm9sLmM6NTI3OnVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbm1tL21lbWNvbnRyb2wuYy01MjgtXHRcdFx0XHRcdCAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2Mzk2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBOZXcgRnVuY3Rpb24qKgoKQWxyaWdodCwgYSBuZXcgZnVuY3Rpb24sIGdvdCBpdC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgcmlnaHQgaW4gYW5kIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucy4gRmlyc3QsIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIHF1aWNrIGNoZWNrIG9uIGBub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYC4gVGhhdCBzcGVjaWZpYyBmdW5jdGlvbiBvciB2YXJpYWJsZSBuYW1lIGltbWVkaWF0ZWx5IHJpbmdzIGEgYmVsbCDigJMgaXQmIzM5O3MgbGlrZWx5IGEga2V5IGVsZW1lbnQgb3IgZGVwZW5kZW5jeSBoZXJlLiBJJiMzOTtsbCBuZWVkIHRvIGFzc2VzcyBob3cgdGhpcyBuZXcgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGgsIG9yIG1vZGlmaWVzLCB3aGF0ZXZlciBiZWhhdmlvciBgbm9kZV9wYWdlX3N0YXRlX21vbm90b25pY2AgaXMgcmVzcG9uc2libGUgZm9yLiBVbmRlcnN0YW5kaW5nIHRoYXQgcmVsYXRpb25zaGlwIGlzIGNydWNpYWwgYmVmb3JlIEkgY2FuIGZ1bGx5IGdyYXNwIHRoZSBpbnRlbnQgYW5kIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhlIGludHJvZHVjdGlvbi4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGF0IHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoaXMgY29yZSBjb25jZXB0IHdpbGwgcmV2ZWFsIHRoZSBmdW5jdGlvbiYjMzk7cyB0cnVlIHB1cnBvc2UgYW5kIGxpa2VseSBhcmVhcyBmb3IgcG90ZW50aWFsIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc3RhdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc3RhdC5jPTEwMjA9dW5zaWduZWQgbG9uZyBub2RlX3BhZ2Vfc3RhdGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbi0tXG5tbS92bXN0YXQuYy0xMDMwLSAqIHNuYXBzaG90IGEgbW9ub3RvbmljYWxseS1pbmNyZW1lbnRlZCBjb3VudGVyIGFuZCBzdWJ0cmFjdCB0d28gc2FtcGxlcy5cbm1tL3Ztc3RhdC5jOjEwMzE6ICogU2VlIGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKCkgZm9yIHRoZSByYXRpb25hbGUuXG5tbS92bXN0YXQuYy0xMDMyLSAqL1xubW0vdm1zdGF0LmM6MTAzMzp1bnNpZ25lZCBsb25nIG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbm1tL3Ztc3RhdC5jLTEwMzQtXHRcdFx0XHRcdGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3ODgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFJlY2VudCBLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQgQ2hhbmdlcyoqCgpPa2F5LCBzbyB0aGlzIGlzIG5ldyBpbmZvcm1hdGlvbi4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgcmVjZW50IG1vZGlmaWNhdGlvbnMsIGFuZCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGJlZW4gdG91Y2hlZCBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLgoKSXQgc2VlbXMgd2UmIzM5O3ZlIGdvdCBhIGxpc3Qgb2YgbW9kaWZpZWQgZnVuY3Rpb25zLiBBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCB3ZSBoYXZlIGBwYWdlb3V0YCBpbiBgbW0vdm1zY2FuLmNgLCBgc2hyaW5rX2ZvbGlvX2xpc3RgIGluIGBtbS92bXNjYW4uY2AsIGB3b3JraW5nc2V0X3JlZmF1bHRgIGluIGBtbS93b3JraW5nc2V0LmNgLCBgbHJ1X3JlcGFyZW50X21lbWNnYCBpbiBgbW0vc3dhcC5jYCwgYW5kIGBtZW1jZzFfc3RhdF9mb3JtYXRgIGluIGBtbS9tZW1jb250cm9sLXYxLmNgLgoKUmlnaHQuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlc2UuIEkmIzM5O2xsIGJlZ2luIGJ5IGZvY3VzaW5nIG9uIGBwYWdlb3V0YC4gSXQmIzM5O3MgYWx3YXlzIGEgY3JpdGljYWwgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhZ2VvdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz01ODI9dm9pZCBfX2FjY3RfcmVjbGFpbV93cml0ZWJhY2socGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS92bXNjYW4uYy02MDItXG5tbS92bXNjYW4uYzo2MDM6LyogcG9zc2libGUgb3V0Y29tZSBvZiBwYWdlb3V0KCkgKi9cbm1tL3Ztc2Nhbi5jLTYwNC10eXBlZGVmIGVudW0ge1xuLS1cbm1tL3Ztc2Nhbi5jLTYxMi1cdFBBR0VfQ0xFQU4sXG5tbS92bXNjYW4uYzo2MTM6fSBwYWdlb3V0X3Q7XG5tbS92bXNjYW4uYy02MTQtXG5tbS92bXNjYW4uYy02MTUtLypcbm1tL3Ztc2Nhbi5jOjYxNjogKiBwYWdlb3V0IGlzIGNhbGxlZCBieSBzaHJpbmtfZm9saW9fbGlzdCgpIGZvciBlYWNoIGRpcnR5IGZvbGlvLlxubW0vdm1zY2FuLmMtNjE3LSAqL1xubW0vdm1zY2FuLmM6NjE4OnN0YXRpYyBwYWdlb3V0X3QgcGFnZW91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbm1tL3Ztc2Nhbi5jLTYxOS1cdFx0XHQgc3RydWN0IHN3YXBfaW9jYiAqKnBsdWcsIHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QpXG4tLVxubW0vdm1zY2FuLmM9MTA1NT1zdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4tLVxubW0vdm1zY2FuLmMtMTM5Ni1cdFx0XHR0cnlfdG9fdW5tYXBfZmx1c2hfZGlydHkoKTtcbm1tL3Ztc2Nhbi5jOjEzOTc6XHRcdFx0c3dpdGNoIChwYWdlb3V0KGZvbGlvLCBtYXBwaW5nLCBcdTAwMjZwbHVnLCBmb2xpb19saXN0KSkge1xubW0vdm1zY2FuLmMtMTM5OC1cdFx0XHRjYXNlIFBBR0VfS0VFUDpcbi0tXG5tbS92bXNjYW4uYz0yMjEzPXN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19saXN0KGVudW0gbHJ1X2xpc3QgbHJ1LCB1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4tLVxubW0vdm1zY2FuLmMtMjI0MC0gKiBUaGUgaW5hY3RpdmVfcmF0aW8gaXMgdGhlIHRhcmdldCByYXRpbyBvZiBBQ1RJVkUgdG8gSU5BQ1RJVkUgZm9saW9zXG5tbS92bXNjYW4uYzoyMjQxOiAqIG9uIHRoaXMgTFJVLCBtYWludGFpbmVkIGJ5IHRoZSBwYWdlb3V0IGNvZGUuIEFuIGluYWN0aXZlX3JhdGlvXG5tbS92bXNjYW4uYy0yMjQyLSAqIG9mIDMgbWVhbnMgMzoxIG9yIDI1JSBvZiB0aGUgZm9saW9zIGFyZSBrZXB0IG9uIHRoZSBpbmFjdGl2ZSBsaXN0LlxuLS1cbm1tL3Ztc2Nhbi5jPTczNjc9c3RhdGljIHZvaWQga3N3YXBkX3RyeV90b19zbGVlcChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgYWxsb2Nfb3JkZXIsIGludCByZWNsYWltX29yZGVyLFxuLS1cbm1tL3Ztc2Nhbi5jLTc0NTEtLypcbm1tL3Ztc2Nhbi5jOjc0NTI6ICogVGhlIGJhY2tncm91bmQgcGFnZW91dCBkYWVtb24sIHN0YXJ0ZWQgYXMgYSBrZXJuZWwgdGhyZWFkXG5tbS92bXNjYW4uYy03NDUzLSAqIGZyb20gdGhlIGluaXQgcHJvY2Vzcy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc3NDUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnMgaGVyZS4gSW50ZXJlc3RpbmcsIGBwYWdlb3V0YCBpcyBkZWZpbmVkIGFzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IHVzdWFsbHkgbWVhbnMgaXQmIzM5O3MgbGltaXRlZCBpbiBzY29wZSBhbmQgY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBzYW1lIHNvdXJjZSBmaWxlLiBHb29kIHRvIGtub3cgZm9yIHVuZGVyc3RhbmRpbmcgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLiBUaGVuIHRoZXJlJiMzOTtzIGBzaHJpbmtfZm9saW9fbGlzdGAsIGFsc28gc3RhdGljLiBBZ2FpbiwgcmVpbmZvcmNlcyB0aGUgaWRlYSBvZiBsaW1pdGVkIHZpc2liaWxpdHkgYW5kIGEgc3BlY2lmaWMgcHVycG9zZSB3aXRoaW4gaXRzIGNvbXBpbGF0aW9uIHVuaXQuCgpCdXQgbm93LCBgd29ya2luZ3NldF9yZWZhdWx0YCBoYXMgYmVlbiBleHBvcnRlZC4gVGhhdCBzdWdnZXN0cyBpdCYjMzk7cyBkZXNpZ25lZCB0byBiZSB1c2VkIGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0sIHBvdGVudGlhbGx5IGJ5IHRoZSBrZXJuZWwgaXRzZWxmIG9yIG1heWJlIGV2ZW4gdXNlci1zcGFjZSBwcm9jZXNzZXMgaWYgdGhlIEFQSSBpcyBleHBvc2VkIGNvcnJlY3RseS4gVGhhdCYjMzk7cyB0aGUgb25lIEkgbmVlZCB0byBmb2N1cyBvbi4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgZmlndXJlIG91dCBob3cgYHdvcmtpbmdzZXRfcmVmYXVsdGAgaXMgdXNlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBzdGF0aWMgYHBhZ2VvdXRgIGFuZCBgc2hyaW5rX2ZvbGlvX2xpc3RgLiBUaGlzIGlzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBzdHVmZiB1c3VhbGx5IGlzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d29ya2luZ3NldF9yZWZhdWx0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vd29ya2luZ3NldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3dvcmtpbmdzZXQuYz00MzA9Ym9vbCB3b3JraW5nc2V0X3Rlc3RfcmVjZW50KHZvaWQgKnNoYWRvdywgYm9vbCBmaWxlLCBib29sICp3b3JraW5nc2V0LFxuLS1cbm1tL3dvcmtpbmdzZXQuYy01MzktLyoqXG5tbS93b3JraW5nc2V0LmM6NTQwOiAqIHdvcmtpbmdzZXRfcmVmYXVsdCAtIEV2YWx1YXRlIHRoZSByZWZhdWx0IG9mIGEgcHJldmlvdXNseSBldmljdGVkIGZvbGlvLlxubW0vd29ya2luZ3NldC5jLTU0MS0gKiBAZm9saW86IFRoZSBmcmVzaGx5IGFsbG9jYXRlZCByZXBsYWNlbWVudCBmb2xpby5cbi0tXG5tbS93b3JraW5nc2V0LmMtNTQ3LSAqL1xubW0vd29ya2luZ3NldC5jOjU0ODp2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG5tbS93b3JraW5nc2V0LmMtNTQ5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgyMTEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA1NjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgS2V5IEZ1bmN0aW9ucyBhbmQgQ29uZmlndXJhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIHBpbnBvaW50aW5nIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgYW5kIGNvbmZpZ3VyYXRpb25zLiBCYXNlZCBvbiB3aGF0IEkmIzM5O3ZlIHNlZW4sIEkmIzM5O3ZlIGlkZW50aWZpZWQgc2V2ZXJhbCBmdW5jdGlvbnMgdGhhdCBhcmUgY2VudHJhbCB0byB0aGUgd29yayBJJiMzOTttIGRvaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciBzY29wZSBhbmQgaG93IHRoZXkmIzM5O3JlIHVzZWQuIE15IGluaXRpYWwgbGlzdCBpbmNsdWRlczogYHByZXBhcmVfc2Nhbl9jb250cm9sYCwgYHNocmlua19pbmFjdGl2ZV9saXN0YCwgYHNocmlua19hY3RpdmVfbGlzdGAsIGBldmljdF9mb2xpb3NgLCBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCwgYG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWNgLCBhbmQgYHdvcmtpbmdzZXRfcmVmYXVsdGAuCgpOb3csIEkgbmVlZCB0byBjb25maXJtIHRoZSBzY29wZSBvZiB0aGVzZSBmdW5jdGlvbnMuIEFyZSB0aGV5IGdsb2JhbGx5IGFjY2Vzc2libGUsIG9yIGFyZSB0aGV5IHN0YXRpYyB3aXRoaW4gYSBzcGVjaWZpYyBtb2R1bGU/IEl0IGxvb2tzIGxpa2UgYGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pY2AgaXMgZ2xvYmFsbHkgZGVjbGFyZWQgaW4gYG1tL21lbWNvbnRyb2wuY2AgYW5kIGBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaGAgYW5kIGBub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCBpcyBpbiBgbW0vdm1zdGF0LmNgIGFuZCBgaW5jbHVkZS9saW51eC92bXN0YXQuaGAuIEkgY29uZmlybSB0aGF0IGBldmljdF9mb2xpb3NgIGlzIHRoZSBjb3JyZWN0IGZ1bmN0aW9uIG5hbWUgd2l0aGluIGBtbS92bXNjYW4uY2AuIFNpbWlsYXJseSwgYHNocmlua19pbmFjdGl2ZV9saXN0YCBhbmQgYHNocmlua19hY3RpdmVfbGlzdGAsIGFuZCBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgIGFyZSBzdGF0aWMgd2l0aGluIGBtbS92bXNjYW4uY2AuIEFuZCBgd29ya2luZ3NldF9yZWZhdWx0YCBpcyBnbG9iYWwgaW4gYG1tL3dvcmtpbmdzZXQuY2AuIEkgY29uZmlybSBgcGFnZW91dGAgYW5kIGBzaHJpbmtfZm9saW9fbGlzdGAgYXJlIHN0YXRpYyB3aXRoaW4gYG1tL3Ztc2Nhbi5jYC4KCk9rYXksIHNvIG15IGNvbmZpcm1lZCBsaXN0IG9mIEZvY3VzU3ltYm9scyBpczoKYHByZXBhcmVfc2Nhbl9jb250cm9sYApgc2hyaW5rX2luYWN0aXZlX2xpc3RgCmBzaHJpbmtfYWN0aXZlX2xpc3RgCmBldmljdF9mb2xpb3NgCmBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWNgCmBub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYApgd29ya2luZ3NldF9yZWZhdWx0YAoKTmV4dCwgSSBuZWVkIHRvIGNvbnNpZGVyIGFueSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gSSYjMzk7dmUgbm90ZWQgdGhyZWUga2V5IG9uZXM6IGBDT05GSUdfTUVNQ0dgLCBgQ09ORklHX0xSVV9HRU5gLCBhbmQgYENPTkZJR19MUlVfR0VOX0VOQUJMRURgLiBUaGUgcHJlc2VuY2Ugb2YgYENPTkZJR19MUlVfR0VOYCBtZWFucyBgZXZpY3RfZm9saW9zYCAqY291bGQqIGJlIGNvbXBpbGVkLiBCdXQgdGhlIGV4ZWN1dGlvbiBvZiBgZXZpY3RfZm9saW9zYCBtYXkgZGVwZW5kIG9uIHJ1bnRpbWUgb3IgY29tcGlsZS10aW1lIG9wdGlvbnMuIFNvIHRvIGVuc3VyZSBJJiMzOTttIGNvdmVyaW5nIGFsbCBiYXNlcywgSSBzaG91bGQgaW5jbHVkZSBgTFJVX0dFTl9FTkFCTEVEYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExSVV9HRU5fRU5BQkxFRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xNDA5PWNvbmZpZyBMUlVfR0VOXG4tLVxubW0vS2NvbmZpZy0xNDE3LVxubW0vS2NvbmZpZzoxNDE4OmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcbm1tL0tjb25maWctMTQxOS1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJ5IGRlZmF1bHRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkzOTYKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIFN3YXAgYW5kIExSVSBHZW5lcmF0aW9uIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIGBMUlVfR0VOX0VOQUJMRURgIGlzIGluZGVlZCBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCB0aGF0JiMzOTtzIGNsZWFyIGVub3VnaC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFyb3VuZCB0aGlzIGNoYW5nZS4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciBvciBub3Qgd2UgbmVlZCB0byBjb25zaWRlciBgQ09ORklHX1NXQVBgIGluIHRoaXMgZXF1YXRpb24uIFRoZSBwYXRjaCB0b3VjaGVzIGJvdGggYG1tL3N3YXAuY2AgYW5kIGBpbmNsdWRlL2xpbnV4L3N3YXAuaGAuIFRoYXQmIzM5O3MgdGhlIGtleS4gQWx0aG91Z2ggYG1tL3N3YXAuY2AgaXMgYWx3YXlzIGNvbXBpbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwMDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzd2FwLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT01MT1vYmoteVx0XHRcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcbm1tL01ha2VmaWxlLTUyLVx0XHRcdCAgIG1hY2Nlc3MubyBwYWdlLXdyaXRlYmFjay5vIGZvbGlvLWNvbXBhdC5vIFxcXG5tbS9NYWtlZmlsZTo1MzpcdFx0XHQgICByZWFkYWhlYWQubyBzd2FwLm8gdHJ1bmNhdGUubyB2bXNjYW4ubyBzaHJpbmtlci5vIFxcXG5tbS9NYWtlZmlsZS01NC1cdFx0XHQgICBzaG1lbS5vIHV0aWwubyBtbXpvbmUubyB2bXN0YXQubyBiYWNraW5nLWRldi5vIFxcXG4tLVxubW0vTWFrZWZpbGU9Nzg9b2JqLSQoQ09ORklHX1NXQVApXHQmIzQzOz0gcGFnZV9pby5vIHN3YXBfc3RhdGUubyBzd2FwZmlsZS5vXG5tbS9NYWtlZmlsZTo3OTpvYmotJChDT05GSUdfWlNXQVApXHQmIzQzOz0genN3YXAub1xubW0vTWFrZWZpbGUtODAtb2JqLSQoQ09ORklHX0hBU19ETUEpXHQmIzQzOz0gZG1hcG9vbC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5ODIxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNoZWNraW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgYHN3YXAub2AqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYHN3YXAub2AgaXMgaW5kZWVkIGluY2x1ZGVkIGluIGBvYmoteWAuIE15IG5leHQgc3RlcCBpcyB0byBuYWlsIGRvd24gdGhlIGV4YWN0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpbnZvbHZlZCBoZXJlLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYE1FTUNHYCwgYExSVV9HRU5gLCBhbmQgYExSVV9HRU5fRU5BQkxFRGAuIE5vdywgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSBhYm91dCB0aGUgYmVoYXZpb3Igb2YgYGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pY2AuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgbW0vbWVtY29udHJvbC5jYC4KClJpZ2h0LCBpZiBgQ09ORklHX01FTUNHYCAqaXNuJiMzOTt0KiBzZXQsIGBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWNgIGlzIGRlZmluZWQgYXMgYW4gaW5saW5lIGZ1bmN0aW9uIHdpdGhpbiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLiBUaGF0JiMzOTtzIGEgY3J1Y2lhbCBkZXRhaWwgdG8gcmVtZW1iZXIuIEkmIzM5O2xsIG1ha2Ugc3VyZSB0byBub3RlIHRoaXMgZGlmZmVyZW5jZSBpbiBiZWhhdmlvciBkZXBlbmRpbmcgb24gd2hldGhlciBNRU1DRyBpcyBlbmFibGVkIG9yIGRpc2FibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD05MzM9dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjkzNDp1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC05MzUtXHRcdFx0XHRcdCAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTEzNzc9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMzgyLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTM4MzpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEzODQtXHRcdFx0XHRcdFx0XHRlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzODQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGVzZSB0aG91Z2h0cywgcHV0dGluZyBteXNlbGYgaW4gdGhlIHBvc2l0aW9uIG9mIG5lZWRpbmcgdG8gdW5kZXJzdGFuZCB0aGlzIGNvZGU6CgoqKkFuYWx5emluZyBNZW1vcnkgQ29udHJvbCB3aXRoIENPTkZJR19NRU1DRyoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgbWVtb3J5IGNvbnRyb2wgY29kZS4gRmlyc3QsIHRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBgbW0vbWVtY29udHJvbC5jYCBmdW5jdGlvbmFsaXR5IGlubGluZSBvciBvdXQtb2YtbGluZT8gVGhlIG5vdGUgY2xlYXJseSBzdGF0ZXMgdGhhdCBpZiBgIUNPTkZJR19NRU1DR2AgaXMgdHJ1ZSwgdGhlbiBpdCYjMzk7cyBpbmxpbmUuIFRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gVGhlcmVmb3JlLCB0byAqcmVhbGx5KiB0ZXN0IHRoZSBvdXQtb2YtbGluZSBpbXBsZW1lbnRhdGlvbiwgd2UmIzM5O3JlIGdvaW5nIHRvIG5lZWQgdG8gZW5zdXJlIGBNRU1DR2AgaXMgZGVmaW5lZCBhbmQgYWN0aXZlLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZSwgdGhlIGNvcmUgY29uZGl0aW9uLgoKTm93LCB3aGVyZSBkbyB3ZSBnbyBmcm9tIHRoZXJlPyBUaGUgbmV4dCBwbGFjZSB0byBjaGVjayBpcyBgbW0vdm1zdGF0LmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCBmdW5jdGlvbi4gSSBoYXZlIGEgaHVuY2gsIGFuZCB0aGlzIG5lZWRzIHRvIGJlIGNvbmZpcm1lZCwgdGhhdCBpZiBgQ09ORklHX1NNUGAgaXMgKm5vdCogZGVmaW5lZCwgdGhlbiAqdGhhdCogcG9ydGlvbiBvZiB0aGUgY29kZSBpcyBsaWtlbHkgdG8gYmUgaW5saW5lIGFzIHdlbGwuIFRoaXMsIEkgbmVlZCB0byB2ZXJpZnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3Ztc3RhdC5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvdm1zdGF0Lmg9MTg2PXVuc2lnbmVkIGxvbmcgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZV9wYWdlcyhlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW0pXG4tLVxuaW5jbHVkZS9saW51eC92bXN0YXQuaC0yMDMtICovXG5pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oOjIwNDpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMoZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKVxuaW5jbHVkZS9saW51eC92bXN0YXQuaC0yMDUte1xuLS1cbmluY2x1ZGUvbGludXgvdm1zdGF0Lmg9MjcyPWV4dGVybiB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZV9zdGF0ZV9wYWdlcyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuaW5jbHVkZS9saW51eC92bXN0YXQuaC0yNzMtXHRcdFx0XHRcdCAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbSk7XG5pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oOjI3NDpleHRlcm4gdW5zaWduZWQgbG9uZyBub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG5pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oLTI3NS1cdFx0XHRcdFx0ICAgICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbSk7XG5pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oPTI3Nj1leHRlcm4gdm9pZCBmb2xkX3ZtX251bWFfZXZlbnRzKHZvaWQpO1xuLS1cbmluY2x1ZGUvbGludXgvdm1zdGF0LmgtMjgwLSNkZWZpbmUgbm9kZV9wYWdlX3N0YXRlX3BhZ2VzKG5vZGUsIGl0ZW0pIGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGVfcGFnZXMoaXRlbSlcbmluY2x1ZGUvbGludXgvdm1zdGF0Lmg6MjgxOiNkZWZpbmUgbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhub2RlLCBpdGVtKSBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhpdGVtKVxuaW5jbHVkZS9saW51eC92bXN0YXQuaC0yODItc3RhdGljIGlubGluZSB2b2lkIGZvbGRfdm1fbnVtYV9ldmVudHModm9pZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwOTIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA4NjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIExSVSBDb3N0IE1vZGVsIGFuZCBTdGF0aXN0aWNzIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBmaXJzdCB0aGluZyBJJiMzOTttIHNlZWluZyBpcyBob3cgYGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCBpcyBjb25kaXRpb25hbC4gSXQmIzM5O3MgZGVmaW5lZCB3aGVuIGAhQ09ORklHX1NNUGAsIG1lYW5pbmcgdGhhdCB0byB0ZXN0IHRoZSBvdXQtb2YtbGluZSB2ZXJzaW9uIHdpdGhpbiBgbW0vdm1zdGF0LmNgLCBTTVAgKFN5bW1ldHJpYyBNdWx0aXByb2Nlc3NpbmcpIG5lZWRzIHRvIGJlIGVuYWJsZWQuIEhvd2V2ZXIsIFNNUCBpcyBhbG1vc3QgYWx3YXlzIGVuYWJsZWQgdGhlc2UgZGF5cywgc28gd2hldGhlciB3ZSBleHBsaWNpdGx5IGxpc3QgaXQgb3Igbm90IGlzIGVzc2VudGlhbGx5IGlycmVsZXZhbnQgZm9yIGNvdmVyYWdlLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gdGhlIG1lYXQgb2YgdGhlIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBzdW1tYXJpemUgdGhlIGNvcmUgZnVuY3Rpb25zIGFmZmVjdGVkOiBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgLCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYGV2aWN0X2ZvbGlvc2AsIGBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWNgLCBgbm9kZV9wYWdlX3N0YXRlX21vbm90b25pY2AsIGFuZCBgd29ya2luZ3NldF9yZWZhdWx0YC4gVGhlc2UgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFuZCBjb3JlIGxvZ2ljIGltcGFjdGVkIGJ5IHRoZSBjaGFuZ2VzIHRvIHRoZSBMUlUgY29zdCBtb2RlbCBhbmQgc3RhdGlzdGljcy4KCkkgc2hvdWxkIGFsc28gY2hlY2sgaWYgYHNocmlua19mb2xpb19saXN0YCBzaG91bGQgYmUgaW5jbHVkZWQuIEl0IGxvb2tzIGxpa2UgaXQgb25seSBoYXMgYSBtaW5vciBtb2RpZmljYXRpb24sIGp1c3QgcmVtb3ZpbmcgYSBgc3RhdC0mZ3Q7bnJfcGFnZW91dCAmIzQzOz0gbnJfcGFnZXM7YCBzdGF0ZW1lbnQuIFRoaXMgaXNuJiMzOTt0IGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UsIHNvIEkmIzM5O20gbm90IGltbWVkaWF0ZWx5IGNvbmNlcm5lZC4gT24gdGhlIG90aGVyIGhhbmQsIHRoZSBgcGFnZW91dGAgZnVuY3Rpb24gKmRvZXMqIGludm9sdmUgYSBjaGFuZ2UgZnJvbSBhIG5vZGUgc3RhdCB0byBhbiBscnV2ZWMgc3RhdCwgYXMgaW5kaWNhdGVkIGJ5IHRoZSBjaGFuZ2U6CgpgYGBjCi0Jbm9kZV9zdGF0X2FkZF9mb2xpbyhmb2xpbywgTlJfVk1TQ0FOX1dSSVRFKTsKJiM0MzsJbHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9WTVNDQU5fV1JJVEUsIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7CmBgYAoKU28gYHBhZ2VvdXRgIHByb2JhYmx5ICpzaG91bGQqIGJlIGNvbnNpZGVyZWQuCgpMZXQmIzM5O3MgY2hlY2sgYGxydV9yZXBhcmVudF9tZW1jZ2AuIEl0JiMzOTtzIG9ubHkgcmVtb3ZpbmcgbGluZXM6CgpgYGBjCi0JcGFyZW50X2xydXZlYy0mZ3Q7YW5vbl9jb3N0ICYjNDM7PSBjaGlsZF9scnV2ZWMtJmd0O2Fub25fY29zdDsKLQlwYXJlbnRfbHJ1dmVjLSZndDtmaWxlX2Nvc3QgJiM0Mzs9IGNoaWxkX2xydXZlYy0mZ3Q7ZmlsZV9jb3N0OwpgYGAKClNpbWlsYXJseSwgYG1lbWNnMV9zdGF0X2Zvcm1hdGAgaXMganVzdCByZWFkaW5nIGZyb20gYSBuZXcgc3RydWN0OgoKYGBgYwotCQkJYW5vbl9jb3N0ICYjNDM7PSBtei0mZ3Q7bHJ1dmVjLmFub25fY29zdDsKLQkJCWZpbGVfY29zdCAmIzQzOz0gbXotJmd0O2xydXZlYy5maWxlX2Nvc3Q7CiYjNDM7CQkJYW5vbl9jb3N0ICYjNDM7PSBtei0mZ3Q7bHJ1dmVjLmNvc3RbV09SS0lOR1NFVF9BTk9OXS5jb3VudDsKJiM0MzsJCQlmaWxlX2Nvc3QgJiM0Mzs9IG16LSZndDtscnV2ZWMuY29zdFtXT1JLSU5HU0VUX0ZJTEVdLmNvdW50OwpgYGAKClNvIHRoZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIGZvY3VzZWQgaW46IGBwcmVwYXJlX3NjYW5fY29udHJvbGAsIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAsIGBzaHJpbmtfYWN0aXZlX2xpc3RgLCBgZXZpY3RfZm9saW9zYCwgYGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pY2AsIGBub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCwgYHdvcmtpbmdzZXRfcmVmYXVsdGAsIGFuZCBgcGFnZW91dGAuIEkmIzM5O20gdXBkYXRpbmcgbXkgaW5pdGlhbCBsaXN0IHRvIHJlZmxlY3QgdGhpcyBhbmFseXNpczoKCmBgYGpzb24KWwogICYjMzQ7cHJlcGFyZV9zY2FuX2NvbnRyb2wmIzM0OywKICAmIzM0O3Nocmlua19pbmFjdGl2ZV9saXN0JiMzNDssCiAgJiMzNDtzaHJpbmtfYWN0aXZlX2xpc3QmIzM0OywKICAmIzM0O2V2aWN0X2ZvbGlvcyYjMzQ7LAogICYjMzQ7bHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljJiMzNDssCiAgJiMzNDtub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljJiMzNDssCiAgJiMzNDt3b3JraW5nc2V0X3JlZmF1bHQmIzM0OywKICAmIzM0O3BhZ2VvdXQmIzM0OwpdCmBgYAoKRmluYWxseSwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gQmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgaGVyZSBzaG91bGQgaW5jbHVkZSBgTUVNQ0dgLCBgTFJVX0dFTmAsIGFuZCBgTFJVX0dFTl9FTkFCTEVEYC4gVGhlc2Ugc2hvdWxkIGJlIHRoZSBtaW5pbWFsIG5lY2Vzc2FyeSBmb3IgZnV6emluZy4KCmBgYGpzb24KWwogICYjMzQ7TUVNQ0cmIzM0OywKICAmIzM0O0xSVV9HRU4mIzM0OywKICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7Cl0KYGBgCgpJbiBzdW1tYXJ5LCB0aGlzIHBhdGNoIHByb2ZvdW5kbHkgYWx0ZXJzIHRoZSBMUlUgY29zdCBtb2RlbCBhbmQgc3RhdGlzdGljcyB0cmFja2luZyB3aXRoaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQuIEl0IGludHJvZHVjZXMgbW9ub3RvbmljIHBhZ2Ugc3RhdGUgdHJhY2tpbmcgZm9yIGJvdGggTFJVIHZlY3RvcnMgYW5kIG5vZGVzLCBhbmQgY2hhbmdlcyBob3cgYGFub25fY29zdGAgYW5kIGBmaWxlX2Nvc3RgIGFyZSBjb21wdXRlZCBkdXJpbmcgbWVtb3J5IHJlY2xhaW0uIEl0IGFsc28gbW9kaWZpZXMgYm90aCB0cmFkaXRpb25hbCBMUlUgYW5kIE11bHRpLUdlbiBMUlUgKE1HTFJVKSByZWNsYWltIHBhdGhzIHRvIHVzZSB0aGUgdXBkYXRlZCBjb3N0IG1vZGVsIGFuZCBzdGF0aXN0aWNzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHdoaWNoIGNvdmVyIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgbmVlZCB0byBiZSBmdXp6ZWQuIEkmIzM5O3ZlIGRvdWJsZSBjaGVja2VkIHRoYXQgdGhlIGNvbmZpZyBuYW1lcyAoYExSVV9HRU5gLCBgTFJVX0dFTl9FTkFCTEVEYCBhbmQgYE1FTUNHYCkgYXJlIGNvcnJlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA2Mz1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcbi0tXG5pbml0L0tjb25maWctMTA3Mi1cbmluaXQvS2NvbmZpZzoxMDczOmNvbmZpZyBNRU1DR1xuaW5pdC9LY29uZmlnLTEwNzQtXHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4tLVxuaW5pdC9LY29uZmlnLTEwODEtXG5pbml0L0tjb25maWc6MTA4Mjpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuaW5pdC9LY29uZmlnLTEwODMtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTEwODgtXG5pbml0L0tjb25maWc6MTA4OTpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbmluaXQvS2NvbmZpZy0xMDkwLVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMDk1LVxuaW5pdC9LY29uZmlnOjEwOTY6Y29uZmlnIE1FTUNHX1YxXG5pbml0L0tjb25maWctMTA5Ny1cdGJvb2wgXCYjMzQ7TGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzE2MwoJCQkJCQkJb3V0cHV0OiAyMTQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIENvZGUqKgoKWWVzLCB0aGF0JiMzOTtzIGl0ISBMb29raW5nIGJhY2ssIGBNRU1DR2AgaXMgZGVmaW5pdGVseSB0aGUgY29ycmVjdCBjb21wb25lbnQgdG8gYmUgZm9jdXNpbmcgb24uIFRoYXQmIzM5O3MgdGhlIGtleS4gTm93IHRoYXQgSSYjMzk7dmUgZXN0YWJsaXNoZWQgdGhhdCwgbGV0JiMzOTtzIG1vdmUgZm9yd2FyZCBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLiBJdCYjMzk7cyB0aGUgbG9naWNhbCBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ByZXBhcmVfc2Nhbl9jb250cm9sJiMzNDssCiAgICAmIzM0O3Nocmlua19pbmFjdGl2ZV9saXN0JiMzNDssCiAgICAmIzM0O3Nocmlua19hY3RpdmVfbGlzdCYjMzQ7LAogICAgJiMzNDtldmljdF9mb2xpb3MmIzM0OywKICAgICYjMzQ7bHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljJiMzNDssCiAgICAmIzM0O25vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMmIzM0OywKICAgICYjMzQ7d29ya2luZ3NldF9yZWZhdWx0JiMzNDssCiAgICAmIzM0O3BhZ2VvdXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIExSVSBjb3N0IG1vZGVsIGFuZCBzdGF0aXN0aWNzIHRyYWNraW5nIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gSXQgaW50cm9kdWNlcyBtb25vdG9uaWMgcGFnZSBzdGF0ZSB0cmFja2luZyBmb3IgTFJVIHZlY3RvcnMgYW5kIG5vZGVzLCBhbmQgdXBkYXRlcyBob3cgYGFub25fY29zdGAgYW5kIGBmaWxlX2Nvc3RgIGFyZSBjYWxjdWxhdGVkIGR1cmluZyBtZW1vcnkgcmVjbGFpbS4gSXQgYWxzbyBtb2RpZmllcyBib3RoIHRoZSB0cmFkaXRpb25hbCBMUlUgYW5kIE11bHRpLUdlbiBMUlUgKE1HTFJVKSByZWNsYWltIHBhdGhzIHRvIHVzZSB0aGUgbmV3IGNvc3QgbW9kZWwgYW5kIHN0YXRpc3RpY3MuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtMUlVfR0VOX0VOQUJMRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwcmVwYXJlX3NjYW5fY29udHJvbCYjMzQ7LAogICAgJiMzNDtzaHJpbmtfaW5hY3RpdmVfbGlzdCYjMzQ7LAogICAgJiMzNDtzaHJpbmtfYWN0aXZlX2xpc3QmIzM0OywKICAgICYjMzQ7ZXZpY3RfZm9saW9zJiMzNDssCiAgICAmIzM0O2xydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyYjMzQ7LAogICAgJiMzNDtub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljJiMzNDssCiAgICAmIzM0O3dvcmtpbmdzZXRfcmVmYXVsdCYjMzQ7LAogICAgJiMzNDtwYWdlb3V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBMUlUgY29zdCBtb2RlbCBhbmQgc3RhdGlzdGljcyB0cmFja2luZyBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIEl0IGludHJvZHVjZXMgbW9ub3RvbmljIHBhZ2Ugc3RhdGUgdHJhY2tpbmcgZm9yIExSVSB2ZWN0b3JzIGFuZCBub2RlcywgYW5kIHVwZGF0ZXMgaG93IGBhbm9uX2Nvc3RgIGFuZCBgZmlsZV9jb3N0YCBhcmUgY2FsY3VsYXRlZCBkdXJpbmcgbWVtb3J5IHJlY2xhaW0uIEl0IGFsc28gbW9kaWZpZXMgYm90aCB0aGUgdHJhZGl0aW9uYWwgTFJVIGFuZCBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcmVjbGFpbSBwYXRocyB0byB1c2UgdGhlIG5ldyBjb3N0IG1vZGVsIGFuZCBzdGF0aXN0aWNzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwMDowNjo0My4wNzM1MTMyMDhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Njg0MDUxMzE0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHJlcGFyZV9zY2FuX2NvbnRyb2xcIixcbiAgICBcInNocmlua19pbmFjdGl2ZV9saXN0XCIsXG4gICAgXCJzaHJpbmtfYWN0aXZlX2xpc3RcIixcbiAgICBcImV2aWN0X2ZvbGlvc1wiLFxuICAgIFwibHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljXCIsXG4gICAgXCJub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljXCIsXG4gICAgXCJ3b3JraW5nc2V0X3JlZmF1bHRcIixcbiAgICBcInBhZ2VvdXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTFJVIGNvc3QgbW9kZWwgYW5kIHN0YXRpc3RpY3MgdHJhY2tpbmcgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJdCBpbnRyb2R1Y2VzIG1vbm90b25pYyBwYWdlIHN0YXRlIHRyYWNraW5nIGZvciBMUlUgdmVjdG9ycyBhbmQgbm9kZXMsIGFuZCB1cGRhdGVzIGhvdyBgYW5vbl9jb3N0YCBhbmQgYGZpbGVfY29zdGAgYXJlIGNhbGN1bGF0ZWQgZHVyaW5nIG1lbW9yeSByZWNsYWltLiBJdCBhbHNvIG1vZGlmaWVzIGJvdGggdGhlIHRyYWRpdGlvbmFsIExSVSBhbmQgTXVsdGktR2VuIExSVSAoTUdMUlUpIHJlY2xhaW0gcGF0aHMgdG8gdXNlIHRoZSBuZXcgY29zdCBtb2RlbCBhbmQgc3RhdGlzdGljcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwMDowNjo0My4wNzM1NDY1MThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxNDQwNTc1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDFjY2E4NTQ5ZTk3ZGU1ZTM2NzEwOTY5ZTc1OTczMzJjNWQ2NGZlMTVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdWwgMjEgMDA6MDY6NDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxcbmluZGV4IGUxZjQ2YTAwMTZmY2ZkLi5iNDBiYzRmNmZlNGEwZSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuQEAgLTkzMSw2ICs5MzEsOCBAQCB1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pO1xcbiBib29sIG1lbWNnX3N0YXRfaXRlbV92YWxpZChpbnQgaWR4KTtcXG4gYm9vbCBtZW1jZ192bV9ldmVudF9pdGVtX3ZhbGlkKGVudW0gdm1fZXZlbnRfaXRlbSBpZHgpO1xcbiB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpO1xcbit1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpO1xcbiB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gXFx0XFx0XFx0XFx0ICAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpO1xcbiBcXG5AQCAtMTM3OCw2ICsxMzgwLDEyIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdHJldHVybiBub2RlX3BhZ2Vfc3RhdGUobHJ1dmVjX3BnZGF0KGxydXZlYyksIGlkeCk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcXG4re1xcbitcXHRyZXR1cm4gbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhscnV2ZWNfcGdkYXQobHJ1dmVjKSwgaWR4KTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxcbiB7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXFxuaW5kZXggY2EyNzEyMTg3MTQ3NWMuLjg1MzAzYzU4NjdjODRiIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXFxuQEAgLTMyMyw2ICszMjMsOCBAQCBlbnVtIG5vZGVfc3RhdF9pdGVtIHtcXG4gXFx0UEdTQ0FOX1BST0FDVElWRSxcXG4gXFx0UEdTQ0FOX0FOT04sXFxuIFxcdFBHU0NBTl9GSUxFLFxcbitcXHRQR1JPVEFURV9BTk9OLFxcbitcXHRQR1JPVEFURV9GSUxFLFxcbiBcXHRQR1JFRklMTCxcXG4gI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG4gXFx0TlJfSFVHRVRMQixcXG5AQCAtNzU1LDYgKzc1NywxMiBAQCB2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LFxcbiBcXG4gI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxuIFxcbitzdHJ1Y3QgbHJ1X2Nvc3Qge1xcbitcXHR1bnNpZ25lZCBsb25nXFx0XFx0Y291bnQ7XFxuK1xcdHVuc2lnbmVkIGxvbmdcXHRcXHRsYXN0X3JvdGF0ZWQ7XFxuK1xcdHVuc2lnbmVkIGxvbmdcXHRcXHRsYXN0X2lvO1xcbit9O1xcbitcXG4gc3RydWN0IGxydXZlYyB7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRcXHRsaXN0c1tOUl9MUlVfTElTVFNdO1xcbiBcXHQvKiBwZXIgbHJ1dmVjIGxydV9sb2NrIGZvciBtZW1jZyAqL1xcbkBAIC03NjMsOSArNzcxLDEyIEBAIHN0cnVjdCBscnV2ZWMge1xcbiBcXHQgKiBUaGVzZSB0cmFjayB0aGUgY29zdCBvZiByZWNsYWltaW5nIG9uZSBMUlUgLSBmaWxlIG9yIGFub24gLVxcbiBcXHQgKiBvdmVyIHRoZSBvdGhlci4gQXMgdGhlIG9ic2VydmVkIGNvc3Qgb2YgcmVjbGFpbWluZyBvbmUgTFJVXFxuIFxcdCAqIGluY3JlYXNlcywgdGhlIHJlY2xhaW0gc2NhbiBiYWxhbmNlIHRpcHMgdG93YXJkIHRoZSBvdGhlci5cXG4rXFx0ICogVXBkYXRlZCBhbmQgZGVjYXllZCBhdCBwcmVwYXJlX3NjYW5fY29udHJvbCgpIHRpbWU7IGNvc3RfbG9ja1xcbitcXHQgKiBzZXJpYWxpc2VzIHRoYXQgdXBkYXRlLlxcbiBcXHQgKi9cXG4tXFx0dW5zaWduZWQgbG9uZ1xcdFxcdFxcdGFub25fY29zdDtcXG4tXFx0dW5zaWduZWQgbG9uZ1xcdFxcdFxcdGZpbGVfY29zdDtcXG4rXFx0c3RydWN0IGxydV9jb3N0XFx0XFx0XFx0Y29zdFtBTk9OX0FORF9GSUxFXTtcXG4rXFx0LyogUHJvdGVjdHMgY29zdFtdLiAqL1xcbitcXHRzcGlubG9ja190XFx0XFx0XFx0Y29zdF9sb2NrO1xcbiBcXHQvKiBOb24tcmVzaWRlbnQgYWdlLCBkcml2ZW4gYnkgTFJVIG1vdmVtZW50ICovXFxuIFxcdGF0b21pY19sb25nX3RcXHRcXHRcXHRub25yZXNpZGVudF9hZ2U7XFxuIFxcdC8qIFJlZmF1bHRzIGF0IHRoZSB0aW1lIG9mIGxhc3QgcmVjbGFpbSBjeWNsZSAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oXFxuaW5kZXggOGYwZjY4ZTI0NWJhYTMuLmI4ZTJlMWFmMmIxNDI1IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcXG5AQCAtMzA5LDkgKzMwOSw2IEBAIGV4dGVybiB1bnNpZ25lZCBsb25nIHRvdGFscmVzZXJ2ZV9wYWdlcztcXG4gXFxuIFxcbiAvKiBsaW51eC9tbS9zd2FwLmMgKi9cXG4tdm9pZCBscnVfbm90ZV9jb3N0X3VubG9ja19pcnEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBib29sIGZpbGUsXFxuLVxcdFxcdHVuc2lnbmVkIGludCBucl9pbywgdW5zaWduZWQgaW50IG5yX3JvdGF0ZWQpO1xcbi12b2lkIGxydV9ub3RlX2Nvc3RfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKik7XFxuIHZvaWQgZm9saW9fYWRkX2xydShzdHJ1Y3QgZm9saW8gKik7XFxuIHZvaWQgZm9saW9fYWRkX2xydV92bWEoc3RydWN0IGZvbGlvICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTtcXG4gdm9pZCBtYXJrX3BhZ2VfYWNjZXNzZWQoc3RydWN0IHBhZ2UgKik7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdm1zdGF0LmggYi9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oXFxuaW5kZXggM2M5YzI2NmNmNzgyYWQuLjViMzFkOGU3YWU0MDU4IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvdm1zdGF0LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oXFxuQEAgLTIwLDcgKzIwLDYgQEAgc3RydWN0IHJlY2xhaW1fc3RhdCB7XFxuIFxcdHVuc2lnbmVkIG5yX2Nvbmdlc3RlZDtcXG4gXFx0dW5zaWduZWQgbnJfd3JpdGViYWNrO1xcbiBcXHR1bnNpZ25lZCBucl9pbW1lZGlhdGU7XFxuLVxcdHVuc2lnbmVkIG5yX3BhZ2VvdXQ7XFxuIFxcdHVuc2lnbmVkIG5yX2FjdGl2YXRlW0FOT05fQU5EX0ZJTEVdO1xcbiBcXHR1bnNpZ25lZCBucl9yZWZfa2VlcDtcXG4gXFx0dW5zaWduZWQgbnJfdW5tYXBfZmFpbDtcXG5AQCAtMTk0LDYgKzE5MywxOSBAQCB1bnNpZ25lZCBsb25nIGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGVfcGFnZXMoZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKVxcbiBcXHRyZXR1cm4geDtcXG4gfVxcbiBcXG4rLypcXG4rICogTm9uLWNsYW1waW5nIHZhcmlhbnQgb2YgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZSgpIGludGVuZGVkIGZvciBjYWxsZXJzIHRoYXRcXG4rICogc25hcHNob3QgYSBtb25vdG9uaWNhbGx5LWluY3JlbWVudGVkIGNvdW50ZXIgYW5kIHN1YnRyYWN0IHR3byBzYW1wbGVzLlxcbisgKiBSZXR1cm5zIHRoZSByYXcgd3JhcHBpbmcgdmFsdWUgc28gdGhhdCB1bnNpZ25lZCBtb2R1bGFyIHN1YnRyYWN0aW9uIHN0YXlzXFxuKyAqIGNvcnJlY3QgYWNyb3NzIGEgc2lnbmVkLWxvbmcgb3ZlcmZsb3cgKGEgcmVhbCBoYXphcmQgb24gMzItYml0KSB0aGF0IHRoZVxcbisgKiBjbGFtcCBpbiBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKCkgd291bGQgb3RoZXJ3aXNlIHR1cm4gaW50byBhIGh1Z2Ugc3B1cmlvdXNcXG4rICogZGVsdGEuIERvIE5PVCB1c2UgZm9yIG5vbi1tb25vdG9uaWMgcGFnZS1jb3VudCByZWFkcy5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW0pXFxuK3tcXG4rXFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKWF0b21pY19sb25nX3JlYWQoXFx1MDAyNnZtX25vZGVfc3RhdFtpdGVtXSk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbSlcXG4ge1xcbiBcXHRWTV9XQVJOX09OX09OQ0Uodm1zdGF0X2l0ZW1faW5fYnl0ZXMoaXRlbSkpO1xcbkBAIC0yNTksMTEgKzI3MSwxNCBAQCBleHRlcm4gdW5zaWduZWQgbG9uZyBub2RlX3BhZ2Vfc3RhdGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKTtcXG4gZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbm9kZV9wYWdlX3N0YXRlX3BhZ2VzKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbSk7XFxuK2V4dGVybiB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbSk7XFxuIGV4dGVybiB2b2lkIGZvbGRfdm1fbnVtYV9ldmVudHModm9pZCk7XFxuICNlbHNlXFxuICNkZWZpbmUgc3VtX3pvbmVfbm9kZV9wYWdlX3N0YXRlKG5vZGUsIGl0ZW0pIGdsb2JhbF96b25lX3BhZ2Vfc3RhdGUoaXRlbSlcXG4gI2RlZmluZSBub2RlX3BhZ2Vfc3RhdGUobm9kZSwgaXRlbSkgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZShpdGVtKVxcbiAjZGVmaW5lIG5vZGVfcGFnZV9zdGF0ZV9wYWdlcyhub2RlLCBpdGVtKSBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlX3BhZ2VzKGl0ZW0pXFxuKyNkZWZpbmUgbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhub2RlLCBpdGVtKSBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhpdGVtKVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgZm9sZF92bV9udW1hX2V2ZW50cyh2b2lkKVxcbiB7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5jIGIvbW0vbWVtY29udHJvbC12MS5jXFxuaW5kZXggNzY1MDY5MjExNTY3OGMuLjA5MWJjOWZmZWU0NGEwIDEwMDY0NFxcbi0tLSBhL21tL21lbWNvbnRyb2wtdjEuY1xcbisrKyBiL21tL21lbWNvbnRyb2wtdjEuY1xcbkBAIC0xOTg4LDggKzE5ODgsOCBAQCB2b2lkIG1lbWNnMV9zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKVxcbiBcXHRcXHRmb3JfZWFjaF9vbmxpbmVfcGdkYXQocGdkYXQpIHtcXG4gXFx0XFx0XFx0bXogPSBtZW1jZy1cXHUwMDNlbm9kZWluZm9bcGdkYXQtXFx1MDAzZW5vZGVfaWRdO1xcbiBcXG4tXFx0XFx0XFx0YW5vbl9jb3N0ICs9IG16LVxcdTAwM2VscnV2ZWMuYW5vbl9jb3N0O1xcbi1cXHRcXHRcXHRmaWxlX2Nvc3QgKz0gbXotXFx1MDAzZWxydXZlYy5maWxlX2Nvc3Q7XFxuK1xcdFxcdFxcdGFub25fY29zdCArPSBtei1cXHUwMDNlbHJ1dmVjLmNvc3RbV09SS0lOR1NFVF9BTk9OXS5jb3VudDtcXG4rXFx0XFx0XFx0ZmlsZV9jb3N0ICs9IG16LVxcdTAwM2VscnV2ZWMuY29zdFtXT1JLSU5HU0VUX0ZJTEVdLmNvdW50O1xcbiBcXHRcXHR9XFxuIFxcdFxcdHNlcV9idWZfcHJpbnRmKHMsIFxcXCJhbm9uX2Nvc3QgJWx1XFxcXG5cXFwiLCBhbm9uX2Nvc3QpO1xcbiBcXHRcXHRzZXFfYnVmX3ByaW50ZihzLCBcXFwiZmlsZV9jb3N0ICVsdVxcXFxuXFxcIiwgZmlsZV9jb3N0KTtcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXFxuaW5kZXggNmRjNDg4OGE5MGYzZmQuLmM5N2M5YmMzZjhkZGI4IDEwMDY0NFxcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xcbisrKyBiL21tL21lbWNvbnRyb2wuY1xcbkBAIC0zOTMsNiArMzkzLDcgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ19ub2RlX3N0YXRfaXRlbXNbXSA9IHtcXG4gXFx0TlJfU0hNRU1fVEhQUyxcXG4gXFx0TlJfRklMRV9USFBTLFxcbiBcXHROUl9BTk9OX1RIUFMsXFxuK1xcdE5SX1ZNU0NBTl9XUklURSxcXG4gXFx0TlJfVk1BTExPQyxcXG4gXFx0TlJfS0VSTkVMX1NUQUNLX0tCLFxcbiBcXHROUl9QQUdFVEFCTEUsXFxuQEAgLTQxOSw2ICs0MjAsOCBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX25vZGVfc3RhdF9pdGVtc1tdID0ge1xcbiBcXHRQR1NDQU5fUFJPQUNUSVZFLFxcbiBcXHRQR1NDQU5fQU5PTixcXG4gXFx0UEdTQ0FOX0ZJTEUsXFxuK1xcdFBHUk9UQVRFX0FOT04sXFxuK1xcdFBHUk9UQVRFX0ZJTEUsXFxuIFxcdFBHUkVGSUxMLFxcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbiBcXHROUl9IVUdFVExCLFxcbkBAIC01MDIsNiArNTA1LDQyIEBAIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcXG4gXFx0cmV0dXJuIHg7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMgLSBub24tY2xhbXBpbmcgbHJ1dmVjIHN0YXQgcmVhZCBmb3IgZGVsdGEgc2FtcGxpbmdcXG4rICogQGxydXZlYzogdGhlIExSVSB2ZWN0b3IgdG8gcmVhZCBmcm9tXFxuKyAqIEBpZHg6IHRoZSBub2RlX3N0YXRfaXRlbSB0byByZWFkXFxuKyAqXFxuKyAqIFJldHVybnMgdGhlIHJhdyBzdGF0ZVtpZHhdIHZhbHVlIGNhc3QgdG8gdW5zaWduZWQgbG9uZywgc2tpcHBpbmcgdGhlXFxuKyAqIGNsYW1wLW5lZ2F0aXZlLXRvLXplcm8gc3RlcCBpbiBscnV2ZWNfcGFnZV9zdGF0ZSgpLiBJbnRlbmRlZCBmb3IgY2FsbGVyc1xcbisgKiB0aGF0IHNuYXBzaG90IGEgbW9ub3RvbmljYWxseS1pbmNyZW1lbnRlZCBjb3VudGVyIGFuZCBzdWJ0cmFjdCB0d29cXG4rICogc2FtcGxlczogdW5zaWduZWQgbW9kdWxhciBhcml0aG1ldGljIHRoZW4geWllbGRzIHRoZSBjb3JyZWN0IGRlbHRhIGFjcm9zc1xcbisgKiBhIHNpZ25lZC1sb25nIHdyYXBhcm91bmQgKGEgcmVhbCBoYXphcmQgb24gMzItYml0KSB0aGF0IHRoZSBjbGFtcCB3b3VsZFxcbisgKiBvdGhlcndpc2UgdHVybiBpbnRvIGEgaHVnZSBzcHVyaW91cyBkZWx0YS5cXG4rICpcXG4rICogRG8gTk9UIHVzZSBmb3Igbm9uLW1vbm90b25pYyBwYWdlLWNvdW50IHJlYWRzIHdoZXJlIGEgdHJhbnNpZW50IG5lZ2F0aXZlXFxuKyAqIHJlYWRpbmcgZnJvbSBwZXItQ1BVIGRlbHRhIHNrZXcgbXVzdCBwcmVzZW50IGFzIHplcm8uXFxuKyAqXFxuKyAqIFhYWDogVGhpcyBoZWxwZXIgKGFuZCBpdHMgbm9kZS9nbG9iYWwgcGVlcnMpIGV4aXN0cyBiZWNhdXNlIHdlIHBsYWNlXFxuKyAqIG1vbm90b25pY2FsbHktaW5jcmVtZW50ZWQgZXZlbnQgY291bnRlcnMgKE5SX1ZNU0NBTl9XUklURSBhbmQgUEdST1RBVEVfKilcXG4rICogaW50byBlbnVtIG5vZGVfc3RhdF9pdGVtLlxcbisgKi9cXG4rdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbitcXHRcXHRcXHRcXHRcXHQgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxcbit7XFxuK1xcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbjtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbitcXHRcXHRyZXR1cm4gbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhscnV2ZWNfcGdkYXQobHJ1dmVjKSwgaWR4KTtcXG4rXFxuK1xcdGkgPSBtZW1jZ19zdGF0c19pbmRleChpZHgpO1xcbitcXHRpZiAoV0FSTl9PTkNFKEJBRF9TVEFUX0lEWChpKSwgXFxcIiVzOiBtaXNzaW5nIHN0YXQgaXRlbSAlZFxcXFxuXFxcIiwgX19mdW5jX18sIGlkeCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cG4gPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTtcXG4rXFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKVJFQURfT05DRShwbi1cXHUwMDNlbHJ1dmVjX3N0YXRzLVxcdTAwM2VzdGF0ZVtpXSk7XFxuK31cXG4rXFxuIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiBcXHRcXHRcXHRcXHQgICAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcXG4ge1xcbmRpZmYgLS1naXQgYS9tbS9tbXpvbmUuYyBiL21tL21tem9uZS5jXFxuaW5kZXggMGM4ZjE4MWQ5ZDUwMDYuLjE3MTM5ZGI0ZDI5MWNlIDEwMDY0NFxcbi0tLSBhL21tL21tem9uZS5jXFxuKysrIGIvbW0vbW16b25lLmNcXG5AQCAtNzgsNiArNzgsNyBAQCB2b2lkIGxydXZlY19pbml0KHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG4gXFxuIFxcdG1lbXNldChscnV2ZWMsIDAsIHNpemVvZihzdHJ1Y3QgbHJ1dmVjKSk7XFxuIFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydV9sb2NrKTtcXG4rXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmxydXZlYy1cXHUwMDNlY29zdF9sb2NrKTtcXG4gXFx0enN3YXBfbHJ1dmVjX3N0YXRlX2luaXQobHJ1dmVjKTtcXG4gXFxuIFxcdGZvcl9lYWNoX2xydShscnUpXFxuZGlmZiAtLWdpdCBhL21tL3N3YXAuYyBiL21tL3N3YXAuY1xcbmluZGV4IDU4OGY1MGQ4ZjFhOGM5Li43NGIyODE3NzhjYmM5MiAxMDA2NDRcXG4tLS0gYS9tbS9zd2FwLmNcXG4rKysgYi9tbS9zd2FwLmNcXG5AQCAtMjcyLDczICsyNzIsNiBAQCB2b2lkIGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRmb2xpb19iYXRjaF9hZGRfYW5kX21vdmUoZm9saW8sIGxydV9tb3ZlX3RhaWwpO1xcbiB9XFxuIFxcbi12b2lkIGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGJvb2wgZmlsZSxcXG4tXFx0XFx0dW5zaWduZWQgaW50IG5yX2lvLCB1bnNpZ25lZCBpbnQgbnJfcm90YXRlZClcXG4tXFx0XFx0X19yZWxlYXNlcyhscnV2ZWMtXFx1MDAzZWxydV9sb2NrKVxcbi1cXHRcXHRfX3JlbGVhc2VzKHJjdSlcXG4te1xcbi1cXHR1bnNpZ25lZCBsb25nIGNvc3Q7XFxuLVxcbi1cXHQvKlxcbi1cXHQgKiBSZWZsZWN0IHRoZSByZWxhdGl2ZSBjb3N0IG9mIGluY3VycmluZyBJTyBhbmQgc3BlbmRpbmcgQ1BVXFxuLVxcdCAqIHRpbWUgb24gcm90YXRpb25zLiBUaGlzIGRvZXNuJ3QgYXR0ZW1wdCB0byBtYWtlIGEgcHJlY2lzZVxcbi1cXHQgKiBjb21wYXJpc29uLCBpdCBqdXN0IHNheXM6IGlmIHJlbG9hZHMgYXJlIGFib3V0IGNvbXBhcmFibGVcXG4tXFx0ICogYmV0d2VlbiB0aGUgTFJVIGxpc3RzLCBvciByb3RhdGlvbnMgYXJlIG92ZXJ3aGVsbWluZ2x5XFxuLVxcdCAqIGRpZmZlcmVudCBiZXR3ZWVuIHRoZW0sIGFkanVzdCBzY2FuIGJhbGFuY2UgZm9yIENQVSB3b3JrLlxcbi1cXHQgKi9cXG4tXFx0Y29zdCA9IG5yX2lvICogU1dBUF9DTFVTVEVSX01BWCArIG5yX3JvdGF0ZWQ7XFxuLVxcdGlmICghY29zdCkge1xcbi1cXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1X2xvY2spO1xcbi1cXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXHR9XFxuLVxcbi1cXHRmb3IgKDs7KSB7XFxuLVxcdFxcdHVuc2lnbmVkIGxvbmcgbHJ1c2l6ZTtcXG4tXFxuLVxcdFxcdC8qIFJlY29yZCBjb3N0IGV2ZW50ICovXFxuLVxcdFxcdGlmIChmaWxlKVxcbi1cXHRcXHRcXHRscnV2ZWMtXFx1MDAzZWZpbGVfY29zdCArPSBjb3N0O1xcbi1cXHRcXHRlbHNlXFxuLVxcdFxcdFxcdGxydXZlYy1cXHUwMDNlYW5vbl9jb3N0ICs9IGNvc3Q7XFxuLVxcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBEZWNheSBwcmV2aW91cyBldmVudHNcXG4tXFx0XFx0ICpcXG4tXFx0XFx0ICogQmVjYXVzZSB3b3JrbG9hZHMgY2hhbmdlIG92ZXIgdGltZSAoYW5kIHRvIGF2b2lkXFxuLVxcdFxcdCAqIG92ZXJmbG93KSB3ZSBrZWVwIHRoZXNlIHN0YXRpc3RpY3MgYXMgYSBmbG9hdGluZ1xcbi1cXHRcXHQgKiBhdmVyYWdlLCB3aGljaCBlbmRzIHVwIHdlaWdoaW5nIHJlY2VudCByZWZhdWx0c1xcbi1cXHRcXHQgKiBtb3JlIHRoYW4gb2xkIG9uZXMuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRscnVzaXplID0gbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9JTkFDVElWRV9BTk9OKSArXFxuLVxcdFxcdFxcdCAgbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9BQ1RJVkVfQU5PTikgK1xcbi1cXHRcXHRcXHQgIGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfSU5BQ1RJVkVfRklMRSkgK1xcbi1cXHRcXHRcXHQgIGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfQUNUSVZFX0ZJTEUpO1xcbi1cXG4tXFx0XFx0aWYgKGxydXZlYy1cXHUwMDNlZmlsZV9jb3N0ICsgbHJ1dmVjLVxcdTAwM2Vhbm9uX2Nvc3QgXFx1MDAzZSBscnVzaXplIC8gNCkge1xcbi1cXHRcXHRcXHRscnV2ZWMtXFx1MDAzZWZpbGVfY29zdCAvPSAyO1xcbi1cXHRcXHRcXHRscnV2ZWMtXFx1MDAzZWFub25fY29zdCAvPSAyO1xcbi1cXHRcXHR9XFxuLVxcbi1cXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1X2xvY2spO1xcbi1cXHRcXHRscnV2ZWMgPSBwYXJlbnRfbHJ1dmVjKGxydXZlYyk7XFxuLVxcdFxcdGlmICghbHJ1dmVjKSB7XFxuLVxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbi1cXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydV9sb2NrKTtcXG4tXFx0fVxcbi19XFxuLVxcbi12b2lkIGxydV9ub3RlX2Nvc3RfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi17XFxuLVxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcXG4tXFxuLVxcdGxydXZlYyA9IGZvbGlvX2xydXZlY19sb2NrX2lycShmb2xpbyk7XFxuLVxcdGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycShscnV2ZWMsIGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKSxcXG4tXFx0XFx0XFx0XFx0Zm9saW9fbnJfcGFnZXMoZm9saW8pLCAwKTtcXG4tfVxcbi1cXG4gc3RhdGljIHZvaWQgbHJ1X2FjdGl2YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHRsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbkBAIC0xMTY0LDggKzEwOTcsNiBAQCB2b2lkIGxydV9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludFxcbiBcXG4gXFx0Y2hpbGRfbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIE5PREVfREFUQShuaWQpKTtcXG4gXFx0cGFyZW50X2xydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHBhcmVudCwgTk9ERV9EQVRBKG5pZCkpO1xcbi1cXHRwYXJlbnRfbHJ1dmVjLVxcdTAwM2Vhbm9uX2Nvc3QgKz0gY2hpbGRfbHJ1dmVjLVxcdTAwM2Vhbm9uX2Nvc3Q7XFxuLVxcdHBhcmVudF9scnV2ZWMtXFx1MDAzZWZpbGVfY29zdCArPSBjaGlsZF9scnV2ZWMtXFx1MDAzZWZpbGVfY29zdDtcXG4gXFxuIFxcdGZvcl9lYWNoX2xydShscnUpXFxuIFxcdFxcdGxydXZlY19yZXBhcmVudF9scnUoY2hpbGRfbHJ1dmVjLCBwYXJlbnRfbHJ1dmVjLCBscnUsIG5pZCk7XFxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcXG5pbmRleCAzNWMzYmIxNWFlOTZhMy4uMDc1NDUwOTViMzUyY2MgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC02NjgsNyArNjY4LDcgQEAgc3RhdGljIHBhZ2VvdXRfdCBwYWdlb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRcXHRmb2xpb19jbGVhcl9yZWNsYWltKGZvbGlvKTtcXG4gXFxuIFxcdHRyYWNlX21tX3Ztc2Nhbl93cml0ZV9mb2xpbyhmb2xpbyk7XFxuLVxcdG5vZGVfc3RhdF9hZGRfZm9saW8oZm9saW8sIE5SX1ZNU0NBTl9XUklURSk7XFxuK1xcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfVk1TQ0FOX1dSSVRFLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xcbiBcXHRyZXR1cm4gUEFHRV9TVUNDRVNTO1xcbiB9XFxuIFxcbkBAIC0xNDEzLDggKzE0MTMsNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXFxuIFxcdFxcdFxcdFxcdFxcdHNjLVxcdTAwM2Vucl9zY2FubmVkIC09IChucl9wYWdlcyAtIDEpO1xcbiBcXHRcXHRcXHRcXHRcXHRucl9wYWdlcyA9IDE7XFxuIFxcdFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0XFx0c3RhdC1cXHUwMDNlbnJfcGFnZW91dCArPSBucl9wYWdlcztcXG4tXFxuIFxcdFxcdFxcdFxcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpXFxuIFxcdFxcdFxcdFxcdFxcdGdvdG8ga2VlcDtcXG4gXFx0XFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKVxcbkBAIC0yMDM4LDEwICsyMDM2LDEwIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19pbmFjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcXG4gXFx0aXRlbSA9IFBHU1RFQUxfS1NXQVBEICsgcmVjbGFpbWVyX29mZnNldChzYyk7XFxuIFxcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBpdGVtLCBucl9yZWNsYWltZWQpO1xcbiBcXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdTVEVBTF9BTk9OICsgZmlsZSwgbnJfcmVjbGFpbWVkKTtcXG4rXFx0aWYgKG5yX3NjYW5uZWQgXFx1MDAzZSBucl9yZWNsYWltZWQpXFxuK1xcdFxcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JPVEFURV9BTk9OICsgZmlsZSxcXG4rXFx0XFx0XFx0XFx0IG5yX3NjYW5uZWQgLSBucl9yZWNsYWltZWQpO1xcbiBcXG4tXFx0bHJ1dmVjX2xvY2tfaXJxKGxydXZlYyk7XFxuLVxcdGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycShscnV2ZWMsIGZpbGUsIHN0YXQubnJfcGFnZW91dCxcXG4tXFx0XFx0XFx0XFx0XFx0bnJfc2Nhbm5lZCAtIG5yX3JlY2xhaW1lZCk7XFxuIFxcdGhhbmRsZV9yZWNsYWltX3dyaXRlYmFjayhucl90YWtlbiwgcGdkYXQsIHNjLCBcXHUwMDI2c3RhdCk7XFxuIFxcdHRyYWNlX21tX3Ztc2Nhbl9scnVfc2hyaW5rX2luYWN0aXZlKHBnZGF0LVxcdTAwM2Vub2RlX2lkLFxcbiBcXHRcXHRcXHRucl9zY2FubmVkLCBucl9yZWNsYWltZWQsIFxcdTAwMjZzdGF0LCBzYy1cXHUwMDNlcHJpb3JpdHksIGZpbGUpO1xcbkBAIC0yMTQ3LDkgKzIxNDUsOSBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbiBcXHRjb3VudF92bV9ldmVudHMoUEdERUFDVElWQVRFLCBucl9kZWFjdGl2YXRlKTtcXG4gXFx0Y291bnRfbWVtY2dfZXZlbnRzKGxydXZlY19tZW1jZyhscnV2ZWMpLCBQR0RFQUNUSVZBVEUsIG5yX2RlYWN0aXZhdGUpO1xcbiBcXHRtb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICsgZmlsZSwgLW5yX3Rha2VuKTtcXG4rXFx0aWYgKG5yX3JvdGF0ZWQpXFxuK1xcdFxcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JPVEFURV9BTk9OICsgZmlsZSwgbnJfcm90YXRlZCk7XFxuIFxcbi1cXHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcXG4tXFx0bHJ1X25vdGVfY29zdF91bmxvY2tfaXJxKGxydXZlYywgZmlsZSwgMCwgbnJfcm90YXRlZCk7XFxuIFxcdHRyYWNlX21tX3Ztc2Nhbl9scnVfc2hyaW5rX2FjdGl2ZShwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgbnJfdGFrZW4sIG5yX2FjdGl2YXRlLFxcbiBcXHRcXHRcXHRucl9kZWFjdGl2YXRlLCBucl9yb3RhdGVkLCBzYy1cXHUwMDNlcHJpb3JpdHksIGZpbGUpO1xcbiB9XFxuQEAgLTIyODIsOCArMjI4MCwxMCBAQCBlbnVtIHNjYW5fYmFsYW5jZSB7XFxuIFxcbiBzdGF0aWMgdm9pZCBwcmVwYXJlX3NjYW5fY29udHJvbChwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIGZpbGU7XFxuK1xcdHN0cnVjdCBscnVfY29zdCAqYW5vbl9jb3N0LCAqZmlsZV9jb3N0O1xcbiBcXHRzdHJ1Y3QgbHJ1dmVjICp0YXJnZXRfbHJ1dmVjO1xcbitcXHR1bnNpZ25lZCBsb25nIGxydXNpemU7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmlsZTtcXG4gXFxuIFxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiAhbHJ1X2dlbl9zd2l0Y2hpbmcoKSlcXG4gXFx0XFx0cmV0dXJuO1xcbkBAIC0yMjk5LDExICsyMjk5LDY5IEBAIHN0YXRpYyB2b2lkIHByZXBhcmVfc2Nhbl9jb250cm9sKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbiBcXG4gXFx0LypcXG4gXFx0ICogRGV0ZXJtaW5lIHRoZSBzY2FuIGJhbGFuY2UgYmV0d2VlbiBhbm9uIGFuZCBmaWxlIExSVXMuXFxuK1xcdCAqXFxuK1xcdCAqIFRoZSBjb3N0IG1vZGVsIGlzIGJhc2VkIG9uIHJvdGF0aW9ucywgcmVmYXVsdHMgYW5kXFxuK1xcdCAqIHJlY2xhaW0tZHJpdmVuIHdyaXRlcyAoYW5vbiBvbmx5KSBvbiBlYWNoIHNpZGUuXFxuK1xcdCAqXFxuK1xcdCAqIFRoZXNlIGV2ZW50IGNvdW50ZXJzIGFyZSBtb25vdG9uaWMsIHNvIGVhY2ggcmVjbGFpbSBjeWNsZVxcbitcXHQgKiB0aGUgZGVsdGEgc2luY2UgdGhlIGxhc3Qgc2NhbiBpcyBleHRyYWN0ZWQgYW5kIGluY29ycG9yYXRlZFxcbitcXHQgKiBpbnRvIGEgZGVjYXlpbmcgYXZlcmFnZS4gVGhpcyBlbnN1cmVzIGN1cnJlbmN5LCBhcyB3b3JrbG9hZHNcXG4rXFx0ICogY2hhbmdlIG92ZXIgdGltZSwgYW5kIGF2b2lkcyBvdmVyZmxvdyBpbiB0aGUgY2FsY3VsYXRpb25zLlxcbitcXHQgKlxcbitcXHQgKiBVc2UgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKCkgc28gdW5zaWduZWQgc3VidHJhY3Rpb25cXG4rXFx0ICogeWllbGRzIHRoZSBjb3JyZWN0IGRlbHRhIGFjcm9zcyBhIHNpZ25lZC1sb25nIHdyYXBhcm91bmQgb2ZcXG4rXFx0ICogdGhlIHVuZGVybHlpbmcgY291bnRlciAoYSByZWFsIGhhemFyZCBvbiAzMi1iaXQgdGhhdCB0aGVcXG4rXFx0ICogY2xhbXAgaW4gbHJ1dmVjX3BhZ2Vfc3RhdGUoKSB3b3VsZCBvdGhlcndpc2UgdHVybiBpbnRvIGEgaHVnZVxcbitcXHQgKiBzcHVyaW91cyBkZWx0YSkuXFxuIFxcdCAqL1xcbi1cXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZ0YXJnZXRfbHJ1dmVjLVxcdTAwM2VscnVfbG9jayk7XFxuLVxcdHNjLVxcdTAwM2Vhbm9uX2Nvc3QgPSB0YXJnZXRfbHJ1dmVjLVxcdTAwM2Vhbm9uX2Nvc3Q7XFxuLVxcdHNjLVxcdTAwM2VmaWxlX2Nvc3QgPSB0YXJnZXRfbHJ1dmVjLVxcdTAwM2VmaWxlX2Nvc3Q7XFxuLVxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2dGFyZ2V0X2xydXZlYy1cXHUwMDNlbHJ1X2xvY2spO1xcbitcXHRzcGluX2xvY2soXFx1MDAyNnRhcmdldF9scnV2ZWMtXFx1MDAzZWNvc3RfbG9jayk7XFxuK1xcbitcXHRmb3IgKGludCBmID0gMDsgZiBcXHUwMDNjPSAxOyBmKyspIHtcXG4rXFx0XFx0c3RydWN0IGxydV9jb3N0ICpjb3N0ID0gXFx1MDAyNnRhcmdldF9scnV2ZWMtXFx1MDAzZWNvc3RbZl07XFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgcm90YXRlZCwgaW8sIG5yX3JvdGF0ZWQsIG5yX2lvO1xcbitcXG4rXFx0XFx0cm90YXRlZCA9IGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyh0YXJnZXRfbHJ1dmVjLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBQR1JPVEFURV9BTk9OICsgZik7XFxuK1xcdFxcdGlvID0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHRhcmdldF9scnV2ZWMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBXT1JLSU5HU0VUX1JFU1RPUkVfQkFTRSArIGYpO1xcbitcXHRcXHRpZiAoZiA9PSBXT1JLSU5HU0VUX0FOT04pXFxuK1xcdFxcdFxcdGlvICs9IGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyh0YXJnZXRfbHJ1dmVjLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIE5SX1ZNU0NBTl9XUklURSk7XFxuK1xcbitcXHRcXHRucl9yb3RhdGVkID0gcm90YXRlZCAtIGNvc3QtXFx1MDAzZWxhc3Rfcm90YXRlZDtcXG4rXFx0XFx0bnJfaW8gPSBpbyAtIGNvc3QtXFx1MDAzZWxhc3RfaW87XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBSZWZsZWN0IHRoZSByZWxhdGl2ZSBjb3N0IG9mIGluY3VycmluZyBJTyBhbmQgc3BlbmRpbmdcXG4rXFx0XFx0ICogQ1BVIHRpbWUgb24gcm90YXRpb25zLiBUaGlzIGRvZXNuJ3QgYXR0ZW1wdCB0byBtYWtlIGFcXG4rXFx0XFx0ICogcHJlY2lzZSBjb21wYXJpc29uLCBpdCBqdXN0IHNheXM6IGlmIHJlbG9hZHMgYXJlIGFib3V0XFxuK1xcdFxcdCAqIGNvbXBhcmFibGUgYmV0d2VlbiB0aGUgTFJVIGxpc3RzLCBvciByb3RhdGlvbnMgYXJlXFxuK1xcdFxcdCAqIG92ZXJ3aGVsbWluZ2x5IGRpZmZlcmVudCBiZXR3ZWVuIHRoZW0sIGFkanVzdCBzY2FuXFxuK1xcdFxcdCAqIGJhbGFuY2UgZm9yIENQVSB3b3JrLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0Y29zdC1cXHUwMDNlY291bnQgKz0gbnJfaW8gKiBTV0FQX0NMVVNURVJfTUFYICsgbnJfcm90YXRlZDtcXG4rXFxuK1xcdFxcdGNvc3QtXFx1MDAzZWxhc3Rfcm90YXRlZCA9IHJvdGF0ZWQ7XFxuK1xcdFxcdGNvc3QtXFx1MDAzZWxhc3RfaW8gPSBpbztcXG4rXFx0fVxcbitcXG4rXFx0YW5vbl9jb3N0ID0gXFx1MDAyNnRhcmdldF9scnV2ZWMtXFx1MDAzZWNvc3RbV09SS0lOR1NFVF9BTk9OXTtcXG4rXFx0ZmlsZV9jb3N0ID0gXFx1MDAyNnRhcmdldF9scnV2ZWMtXFx1MDAzZWNvc3RbV09SS0lOR1NFVF9GSUxFXTtcXG4rXFxuK1xcdGxydXNpemUgPSBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLCBOUl9JTkFDVElWRV9BTk9OKSArXFxuK1xcdFxcdCAgbHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYywgTlJfQUNUSVZFX0FOT04pICtcXG4rXFx0XFx0ICBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLCBOUl9JTkFDVElWRV9GSUxFKSArXFxuK1xcdFxcdCAgbHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYywgTlJfQUNUSVZFX0ZJTEUpO1xcbitcXG4rXFx0d2hpbGUgKGFub25fY29zdC1cXHUwMDNlY291bnQgKyBmaWxlX2Nvc3QtXFx1MDAzZWNvdW50IFxcdTAwM2UgbHJ1c2l6ZSAvIDQpIHtcXG4rXFx0XFx0YW5vbl9jb3N0LVxcdTAwM2Vjb3VudCAvPSAyO1xcbitcXHRcXHRmaWxlX2Nvc3QtXFx1MDAzZWNvdW50IC89IDI7XFxuK1xcdH1cXG4rXFxuK1xcdHNjLVxcdTAwM2Vhbm9uX2Nvc3QgPSBhbm9uX2Nvc3QtXFx1MDAzZWNvdW50O1xcbitcXHRzYy1cXHUwMDNlZmlsZV9jb3N0ID0gZmlsZV9jb3N0LVxcdTAwM2Vjb3VudDtcXG4rXFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZ0YXJnZXRfbHJ1dmVjLVxcdTAwM2Vjb3N0X2xvY2spO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogVGFyZ2V0IGRlc2lyYWJsZSBpbmFjdGl2ZTphY3RpdmUgbGlzdCByYXRpb3MgZm9yIHRoZSBhbm9uXFxuQEAgLTQ4MTAsNyArNDg2OCw4IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiBcXHRzdHJ1Y3QgcmVjbGFpbV9zdGF0IHN0YXQ7XFxuIFxcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7XFxuIFxcdGludCBzY2FubmVkLCByZWNsYWltZWQ7XFxuLVxcdGludCBpc29sYXRlZCA9IDAsIHR5cGUsIHR5cGVfc2Nhbm5lZDtcXG4rXFx0aW50IGlzb2xhdGVkID0gMCwgbnJfaXNvbGF0ZWQgPSAwLCB0eXBlLCB0eXBlX3NjYW5uZWQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgdG90YWxfcmVjbGFpbWVkID0gMDtcXG4gXFx0Ym9vbCBza2lwX3JldHJ5ID0gZmFsc2U7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xcbiBcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XFxuQEAgLTQ4MjIsNiArNDg4MSw3IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiBcXG4gXFx0c2Nhbm5lZCA9IGlzb2xhdGVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIHN3YXBwaW5lc3MsXFxuIFxcdFxcdFxcdFxcdCBcXHUwMDI2bGlzdCwgXFx1MDAyNmlzb2xhdGVkLCBcXHUwMDI2dHlwZSwgXFx1MDAyNnR5cGVfc2Nhbm5lZCk7XFxuK1xcdG5yX2lzb2xhdGVkID0gaXNvbGF0ZWQ7XFxuIFxcbiBcXHQvKiBTY2FubmluZyBtYXkgaGF2ZSBlbXB0aWVkIHRoZSBvbGRlc3QgZ2VuLCBmbHVzaCBpdCAqL1xcbiBcXHRpZiAoc2Nhbm5lZClcXG5AQCAtNDgzNCw2ICs0ODk0LDcgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIHJldHJ5OlxcbiBcXHRyZWNsYWltZWQgPSBzaHJpbmtfZm9saW9fbGlzdChcXHUwMDI2bGlzdCwgcGdkYXQsIHNjLCBcXHUwMDI2c3RhdCwgZmFsc2UsIG1lbWNnKTtcXG4gXFx0c2MtXFx1MDAzZW5yX3JlY2xhaW1lZCArPSByZWNsYWltZWQ7XFxuK1xcdHRvdGFsX3JlY2xhaW1lZCArPSByZWNsYWltZWQ7XFxuIFxcdC8qIFJldHJ5IHBhc3MgaXMgb25seSBtZWFudCBmb3IgY2xlYW4gZm9saW9zIHdpdGhvdXQgbmV3IGlzb2xhdGlvbiAqL1xcbiBcXHRpZiAoaXNvbGF0ZWQpXFxuIFxcdFxcdGhhbmRsZV9yZWNsYWltX3dyaXRlYmFjayhpc29sYXRlZCwgcGdkYXQsIHNjLCBcXHUwMDI2c3RhdCk7XFxuQEAgLTQ4ODcsNiArNDk0OCwxMCBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gXFx0XFx0Z290byByZXRyeTtcXG4gXFx0fVxcbiBcXG4rXFx0aWYgKG5yX2lzb2xhdGVkIFxcdTAwM2UgdG90YWxfcmVjbGFpbWVkKVxcbitcXHRcXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdST1RBVEVfQU5PTiArIHR5cGUsXFxuK1xcdFxcdFxcdFxcdCBucl9pc29sYXRlZCAtIHRvdGFsX3JlY2xhaW1lZCk7XFxuK1xcbiBcXHRyZXR1cm4gc2Nhbm5lZDtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vdm1zdGF0LmMgYi9tbS92bXN0YXQuY1xcbmluZGV4IGY1MzQ5NzJmNTE3ZGUwLi44N2Q0YTY3ODEzNjc2NyAxMDA2NDRcXG4tLS0gYS9tbS92bXN0YXQuY1xcbisrKyBiL21tL3Ztc3RhdC5jXFxuQEAgLTEwMjQsNiArMTAyNCwxNyBAQCB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZV9zdGF0ZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxcbiBcXG4gXFx0cmV0dXJuIG5vZGVfcGFnZV9zdGF0ZV9wYWdlcyhwZ2RhdCwgaXRlbSk7XFxuIH1cXG4rXFxuKy8qXFxuKyAqIE5vbi1jbGFtcGluZyB2YXJpYW50IG9mIG5vZGVfcGFnZV9zdGF0ZSgpIGludGVuZGVkIGZvciBjYWxsZXJzIHRoYXRcXG4rICogc25hcHNob3QgYSBtb25vdG9uaWNhbGx5LWluY3JlbWVudGVkIGNvdW50ZXIgYW5kIHN1YnRyYWN0IHR3byBzYW1wbGVzLlxcbisgKiBTZWUgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMoKSBmb3IgdGhlIHJhdGlvbmFsZS5cXG4rICovXFxuK3Vuc2lnbmVkIGxvbmcgbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxcbitcXHRcXHRcXHRcXHRcXHRlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW0pXFxuK3tcXG4rXFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKWF0b21pY19sb25nX3JlYWQoXFx1MDAyNnBnZGF0LVxcdTAwM2V2bV9zdGF0W2l0ZW1dKTtcXG4rfVxcbiAjZW5kaWZcXG4gXFxuIC8qXFxuQEAgLTEyODksNiArMTMwMCw4IEBAIGNvbnN0IGNoYXIgKiBjb25zdCB2bXN0YXRfdGV4dFtdID0ge1xcbiBcXHRbSShQR1NDQU5fUFJPQUNUSVZFKV1cXHRcXHRcXHQ9IFxcXCJwZ3NjYW5fcHJvYWN0aXZlXFxcIixcXG4gXFx0W0koUEdTQ0FOX0FOT04pXVxcdFxcdFxcdD0gXFxcInBnc2Nhbl9hbm9uXFxcIixcXG4gXFx0W0koUEdTQ0FOX0ZJTEUpXVxcdFxcdFxcdD0gXFxcInBnc2Nhbl9maWxlXFxcIixcXG4rXFx0W0koUEdST1RBVEVfQU5PTildXFx0XFx0XFx0PSBcXFwicGdyb3RhdGVfYW5vblxcXCIsXFxuK1xcdFtJKFBHUk9UQVRFX0ZJTEUpXVxcdFxcdFxcdD0gXFxcInBncm90YXRlX2ZpbGVcXFwiLFxcbiBcXHRbSShQR1JFRklMTCldXFx0XFx0XFx0XFx0PSBcXFwicGdyZWZpbGxcXFwiLFxcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbiBcXHRbSShOUl9IVUdFVExCKV1cXHRcXHRcXHRcXHQ9IFxcXCJucl9odWdldGxiXFxcIixcXG5kaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jXFxuaW5kZXggZjM1MTc5OGU3MjNhY2QuLjdhYzJiODhjODBhZTU2IDEwMDY0NFxcbi0tLSBhL21tL3dvcmtpbmdzZXQuY1xcbisrKyBiL21tL3dvcmtpbmdzZXQuY1xcbkBAIC01ODQsMTEgKzU4NCw2IEBAIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcXG4gXFx0LyogRm9saW8gd2FzIGFjdGl2ZSBwcmlvciB0byBldmljdGlvbiAqL1xcbiBcXHRpZiAod29ya2luZ3NldCkge1xcbiBcXHRcXHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIFhYWDogTW92ZSB0byBmb2xpb19hZGRfbHJ1KCkgd2hlbiBpdCBzdXBwb3J0cyBuZXcgdnNcXG4tXFx0XFx0ICogcHV0YmFja1xcbi1cXHRcXHQgKi9cXG4tXFx0XFx0bHJ1X25vdGVfY29zdF9yZWZhdWx0KGZvbGlvKTtcXG4gXFx0XFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFdPUktJTkdTRVRfUkVTVE9SRV9CQVNFICsgZmlsZSwgbnIpO1xcbiBcXHR9XFxuIG91dDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDA6MDY6NDMuOTg4OTExMTc2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTU5MjUwOTc2NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInByZXBhcmVfc2Nhbl9jb250cm9sXCIsXG4gICAgXCJzaHJpbmtfaW5hY3RpdmVfbGlzdFwiLFxuICAgIFwic2hyaW5rX2FjdGl2ZV9saXN0XCIsXG4gICAgXCJldmljdF9mb2xpb3NcIixcbiAgICBcImxydXZlY19wYWdlX3N0YXRlX21vbm90b25pY1wiLFxuICAgIFwibm9kZV9wYWdlX3N0YXRlX21vbm90b25pY1wiLFxuICAgIFwid29ya2luZ3NldF9yZWZhdWx0XCIsXG4gICAgXCJwYWdlb3V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIExSVSBjb3N0IG1vZGVsIGFuZCBzdGF0aXN0aWNzIHRyYWNraW5nIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gSXQgaW50cm9kdWNlcyBtb25vdG9uaWMgcGFnZSBzdGF0ZSB0cmFja2luZyBmb3IgTFJVIHZlY3RvcnMgYW5kIG5vZGVzLCBhbmQgdXBkYXRlcyBob3cgYGFub25fY29zdGAgYW5kIGBmaWxlX2Nvc3RgIGFyZSBjYWxjdWxhdGVkIGR1cmluZyBtZW1vcnkgcmVjbGFpbS4gSXQgYWxzbyBtb2RpZmllcyBib3RoIHRoZSB0cmFkaXRpb25hbCBMUlUgYW5kIE11bHRpLUdlbiBMUlUgKE1HTFJVKSByZWNsYWltIHBhdGhzIHRvIHVzZSB0aGUgbmV3IGNvc3QgbW9kZWwgYW5kIHN0YXRpc3RpY3MuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxY2NhODU0OWU5N2RlNWUzNjcxMDk2OWU3NTk3MzMyYzVkNjRmZTE1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMjEgMDA6MDY6NDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5pbmRleCBlMWY0NmEwMDE2ZmNmZC4uYjQwYmM0ZjZmZTRhMGUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC05MzEsNiArOTMxLDggQEAgdW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX291dHB1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKTtcbiBib29sIG1lbWNnX3N0YXRfaXRlbV92YWxpZChpbnQgaWR4KTtcbiBib29sIG1lbWNnX3ZtX2V2ZW50X2l0ZW1fdmFsaWQoZW51bSB2bV9ldmVudF9pdGVtIGlkeCk7XG4gdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KTtcbit1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4rXHRcdFx0XHRcdCAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpO1xuIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRcdFx0ICAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpO1xuIFxuQEAgLTEzNzgsNiArMTM4MCwxMiBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0cmV0dXJuIG5vZGVfcGFnZV9zdGF0ZShscnV2ZWNfcGdkYXQobHJ1dmVjKSwgaWR4KTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4rXHRcdFx0XHRcdFx0XHRlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcbit7XG4rXHRyZXR1cm4gbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhscnV2ZWNfcGdkYXQobHJ1dmVjKSwgaWR4KTtcbit9XG4rXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0XHRcdFx0XHQgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXG4ge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5pbmRleCBjYTI3MTIxODcxNDc1Yy4uODUzMDNjNTg2N2M4NGIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5AQCAtMzIzLDYgKzMyMyw4IEBAIGVudW0gbm9kZV9zdGF0X2l0ZW0ge1xuIFx0UEdTQ0FOX1BST0FDVElWRSxcbiBcdFBHU0NBTl9BTk9OLFxuIFx0UEdTQ0FOX0ZJTEUsXG4rXHRQR1JPVEFURV9BTk9OLFxuK1x0UEdST1RBVEVfRklMRSxcbiBcdFBHUkVGSUxMLFxuICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG4gXHROUl9IVUdFVExCLFxuQEAgLTc1NSw2ICs3NTcsMTIgQEAgdm9pZCBscnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCxcbiBcbiAjZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbiBcbitzdHJ1Y3QgbHJ1X2Nvc3Qge1xuK1x0dW5zaWduZWQgbG9uZ1x0XHRjb3VudDtcbitcdHVuc2lnbmVkIGxvbmdcdFx0bGFzdF9yb3RhdGVkO1xuK1x0dW5zaWduZWQgbG9uZ1x0XHRsYXN0X2lvO1xuK307XG4rXG4gc3RydWN0IGxydXZlYyB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdGxpc3RzW05SX0xSVV9MSVNUU107XG4gXHQvKiBwZXIgbHJ1dmVjIGxydV9sb2NrIGZvciBtZW1jZyAqL1xuQEAgLTc2Myw5ICs3NzEsMTIgQEAgc3RydWN0IGxydXZlYyB7XG4gXHQgKiBUaGVzZSB0cmFjayB0aGUgY29zdCBvZiByZWNsYWltaW5nIG9uZSBMUlUgLSBmaWxlIG9yIGFub24gLVxuIFx0ICogb3ZlciB0aGUgb3RoZXIuIEFzIHRoZSBvYnNlcnZlZCBjb3N0IG9mIHJlY2xhaW1pbmcgb25lIExSVVxuIFx0ICogaW5jcmVhc2VzLCB0aGUgcmVjbGFpbSBzY2FuIGJhbGFuY2UgdGlwcyB0b3dhcmQgdGhlIG90aGVyLlxuK1x0ICogVXBkYXRlZCBhbmQgZGVjYXllZCBhdCBwcmVwYXJlX3NjYW5fY29udHJvbCgpIHRpbWU7IGNvc3RfbG9ja1xuK1x0ICogc2VyaWFsaXNlcyB0aGF0IHVwZGF0ZS5cbiBcdCAqL1xuLVx0dW5zaWduZWQgbG9uZ1x0XHRcdGFub25fY29zdDtcbi1cdHVuc2lnbmVkIGxvbmdcdFx0XHRmaWxlX2Nvc3Q7XG4rXHRzdHJ1Y3QgbHJ1X2Nvc3RcdFx0XHRjb3N0W0FOT05fQU5EX0ZJTEVdO1xuK1x0LyogUHJvdGVjdHMgY29zdFtdLiAqL1xuK1x0c3BpbmxvY2tfdFx0XHRcdGNvc3RfbG9jaztcbiBcdC8qIE5vbi1yZXNpZGVudCBhZ2UsIGRyaXZlbiBieSBMUlUgbW92ZW1lbnQgKi9cbiBcdGF0b21pY19sb25nX3RcdFx0XHRub25yZXNpZGVudF9hZ2U7XG4gXHQvKiBSZWZhdWx0cyBhdCB0aGUgdGltZSBvZiBsYXN0IHJlY2xhaW0gY3ljbGUgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5pbmRleCA4ZjBmNjhlMjQ1YmFhMy4uYjhlMmUxYWYyYjE0MjUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcbkBAIC0zMDksOSArMzA5LDYgQEAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdG90YWxyZXNlcnZlX3BhZ2VzO1xuIFxuIFxuIC8qIGxpbnV4L21tL3N3YXAuYyAqL1xuLXZvaWQgbHJ1X25vdGVfY29zdF91bmxvY2tfaXJxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgYm9vbCBmaWxlLFxuLVx0XHR1bnNpZ25lZCBpbnQgbnJfaW8sIHVuc2lnbmVkIGludCBucl9yb3RhdGVkKTtcbi12b2lkIGxydV9ub3RlX2Nvc3RfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKik7XG4gdm9pZCBmb2xpb19hZGRfbHJ1KHN0cnVjdCBmb2xpbyAqKTtcbiB2b2lkIGZvbGlvX2FkZF9scnVfdm1hKHN0cnVjdCBmb2xpbyAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7XG4gdm9pZCBtYXJrX3BhZ2VfYWNjZXNzZWQoc3RydWN0IHBhZ2UgKik7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92bXN0YXQuaCBiL2luY2x1ZGUvbGludXgvdm1zdGF0LmhcbmluZGV4IDNjOWMyNjZjZjc4MmFkLi41YjMxZDhlN2FlNDA1OCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvdm1zdGF0LmhcbisrKyBiL2luY2x1ZGUvbGludXgvdm1zdGF0LmhcbkBAIC0yMCw3ICsyMCw2IEBAIHN0cnVjdCByZWNsYWltX3N0YXQge1xuIFx0dW5zaWduZWQgbnJfY29uZ2VzdGVkO1xuIFx0dW5zaWduZWQgbnJfd3JpdGViYWNrO1xuIFx0dW5zaWduZWQgbnJfaW1tZWRpYXRlO1xuLVx0dW5zaWduZWQgbnJfcGFnZW91dDtcbiBcdHVuc2lnbmVkIG5yX2FjdGl2YXRlW0FOT05fQU5EX0ZJTEVdO1xuIFx0dW5zaWduZWQgbnJfcmVmX2tlZXA7XG4gXHR1bnNpZ25lZCBucl91bm1hcF9mYWlsO1xuQEAgLTE5NCw2ICsxOTMsMTkgQEAgdW5zaWduZWQgbG9uZyBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlX3BhZ2VzKGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbSlcbiBcdHJldHVybiB4O1xuIH1cbiBcbisvKlxuKyAqIE5vbi1jbGFtcGluZyB2YXJpYW50IG9mIGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoKSBpbnRlbmRlZCBmb3IgY2FsbGVycyB0aGF0XG4rICogc25hcHNob3QgYSBtb25vdG9uaWNhbGx5LWluY3JlbWVudGVkIGNvdW50ZXIgYW5kIHN1YnRyYWN0IHR3byBzYW1wbGVzLlxuKyAqIFJldHVybnMgdGhlIHJhdyB3cmFwcGluZyB2YWx1ZSBzbyB0aGF0IHVuc2lnbmVkIG1vZHVsYXIgc3VidHJhY3Rpb24gc3RheXNcbisgKiBjb3JyZWN0IGFjcm9zcyBhIHNpZ25lZC1sb25nIG92ZXJmbG93IChhIHJlYWwgaGF6YXJkIG9uIDMyLWJpdCkgdGhhdCB0aGVcbisgKiBjbGFtcCBpbiBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKCkgd291bGQgb3RoZXJ3aXNlIHR1cm4gaW50byBhIGh1Z2Ugc3B1cmlvdXNcbisgKiBkZWx0YS4gRG8gTk9UIHVzZSBmb3Igbm9uLW1vbm90b25pYyBwYWdlLWNvdW50IHJlYWRzLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW0pXG4re1xuK1x0cmV0dXJuICh1bnNpZ25lZCBsb25nKWF0b21pY19sb25nX3JlYWQoXHUwMDI2dm1fbm9kZV9zdGF0W2l0ZW1dKTtcbit9XG4rXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKVxuIHtcbiBcdFZNX1dBUk5fT05fT05DRSh2bXN0YXRfaXRlbV9pbl9ieXRlcyhpdGVtKSk7XG5AQCAtMjU5LDExICsyNzEsMTQgQEAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbm9kZV9wYWdlX3N0YXRlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4gXHRcdFx0XHRcdFx0ZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKTtcbiBleHRlcm4gdW5zaWduZWQgbG9uZyBub2RlX3BhZ2Vfc3RhdGVfcGFnZXMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbiBcdFx0XHRcdFx0ICAgZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKTtcbitleHRlcm4gdW5zaWduZWQgbG9uZyBub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4rXHRcdFx0XHRcdCAgICAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW0pO1xuIGV4dGVybiB2b2lkIGZvbGRfdm1fbnVtYV9ldmVudHModm9pZCk7XG4gI2Vsc2VcbiAjZGVmaW5lIHN1bV96b25lX25vZGVfcGFnZV9zdGF0ZShub2RlLCBpdGVtKSBnbG9iYWxfem9uZV9wYWdlX3N0YXRlKGl0ZW0pXG4gI2RlZmluZSBub2RlX3BhZ2Vfc3RhdGUobm9kZSwgaXRlbSkgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZShpdGVtKVxuICNkZWZpbmUgbm9kZV9wYWdlX3N0YXRlX3BhZ2VzKG5vZGUsIGl0ZW0pIGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGVfcGFnZXMoaXRlbSlcbisjZGVmaW5lIG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMobm9kZSwgaXRlbSkgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMoaXRlbSlcbiBzdGF0aWMgaW5saW5lIHZvaWQgZm9sZF92bV9udW1hX2V2ZW50cyh2b2lkKVxuIHtcbiB9XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5jIGIvbW0vbWVtY29udHJvbC12MS5jXG5pbmRleCA3NjUwNjkyMTE1Njc4Yy4uMDkxYmM5ZmZlZTQ0YTAgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLXYxLmNcbisrKyBiL21tL21lbWNvbnRyb2wtdjEuY1xuQEAgLTE5ODgsOCArMTk4OCw4IEBAIHZvaWQgbWVtY2cxX3N0YXRfZm9ybWF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHNlcV9idWYgKnMpXG4gXHRcdGZvcl9lYWNoX29ubGluZV9wZ2RhdChwZ2RhdCkge1xuIFx0XHRcdG16ID0gbWVtY2ctXHUwMDNlbm9kZWluZm9bcGdkYXQtXHUwMDNlbm9kZV9pZF07XG4gXG4tXHRcdFx0YW5vbl9jb3N0ICs9IG16LVx1MDAzZWxydXZlYy5hbm9uX2Nvc3Q7XG4tXHRcdFx0ZmlsZV9jb3N0ICs9IG16LVx1MDAzZWxydXZlYy5maWxlX2Nvc3Q7XG4rXHRcdFx0YW5vbl9jb3N0ICs9IG16LVx1MDAzZWxydXZlYy5jb3N0W1dPUktJTkdTRVRfQU5PTl0uY291bnQ7XG4rXHRcdFx0ZmlsZV9jb3N0ICs9IG16LVx1MDAzZWxydXZlYy5jb3N0W1dPUktJTkdTRVRfRklMRV0uY291bnQ7XG4gXHRcdH1cbiBcdFx0c2VxX2J1Zl9wcmludGYocywgXCJhbm9uX2Nvc3QgJWx1XFxuXCIsIGFub25fY29zdCk7XG4gXHRcdHNlcV9idWZfcHJpbnRmKHMsIFwiZmlsZV9jb3N0ICVsdVxcblwiLCBmaWxlX2Nvc3QpO1xuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggNmRjNDg4OGE5MGYzZmQuLmM5N2M5YmMzZjhkZGI4IDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC0zOTMsNiArMzkzLDcgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ19ub2RlX3N0YXRfaXRlbXNbXSA9IHtcbiBcdE5SX1NITUVNX1RIUFMsXG4gXHROUl9GSUxFX1RIUFMsXG4gXHROUl9BTk9OX1RIUFMsXG4rXHROUl9WTVNDQU5fV1JJVEUsXG4gXHROUl9WTUFMTE9DLFxuIFx0TlJfS0VSTkVMX1NUQUNLX0tCLFxuIFx0TlJfUEFHRVRBQkxFLFxuQEAgLTQxOSw2ICs0MjAsOCBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX25vZGVfc3RhdF9pdGVtc1tdID0ge1xuIFx0UEdTQ0FOX1BST0FDVElWRSxcbiBcdFBHU0NBTl9BTk9OLFxuIFx0UEdTQ0FOX0ZJTEUsXG4rXHRQR1JPVEFURV9BTk9OLFxuK1x0UEdST1RBVEVfRklMRSxcbiBcdFBHUkVGSUxMLFxuICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG4gXHROUl9IVUdFVExCLFxuQEAgLTUwMiw2ICs1MDUsNDIgQEAgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxuIFx0cmV0dXJuIHg7XG4gfVxuIFxuKy8qKlxuKyAqIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyAtIG5vbi1jbGFtcGluZyBscnV2ZWMgc3RhdCByZWFkIGZvciBkZWx0YSBzYW1wbGluZ1xuKyAqIEBscnV2ZWM6IHRoZSBMUlUgdmVjdG9yIHRvIHJlYWQgZnJvbVxuKyAqIEBpZHg6IHRoZSBub2RlX3N0YXRfaXRlbSB0byByZWFkXG4rICpcbisgKiBSZXR1cm5zIHRoZSByYXcgc3RhdGVbaWR4XSB2YWx1ZSBjYXN0IHRvIHVuc2lnbmVkIGxvbmcsIHNraXBwaW5nIHRoZVxuKyAqIGNsYW1wLW5lZ2F0aXZlLXRvLXplcm8gc3RlcCBpbiBscnV2ZWNfcGFnZV9zdGF0ZSgpLiBJbnRlbmRlZCBmb3IgY2FsbGVyc1xuKyAqIHRoYXQgc25hcHNob3QgYSBtb25vdG9uaWNhbGx5LWluY3JlbWVudGVkIGNvdW50ZXIgYW5kIHN1YnRyYWN0IHR3b1xuKyAqIHNhbXBsZXM6IHVuc2lnbmVkIG1vZHVsYXIgYXJpdGhtZXRpYyB0aGVuIHlpZWxkcyB0aGUgY29ycmVjdCBkZWx0YSBhY3Jvc3NcbisgKiBhIHNpZ25lZC1sb25nIHdyYXBhcm91bmQgKGEgcmVhbCBoYXphcmQgb24gMzItYml0KSB0aGF0IHRoZSBjbGFtcCB3b3VsZFxuKyAqIG90aGVyd2lzZSB0dXJuIGludG8gYSBodWdlIHNwdXJpb3VzIGRlbHRhLlxuKyAqXG4rICogRG8gTk9UIHVzZSBmb3Igbm9uLW1vbm90b25pYyBwYWdlLWNvdW50IHJlYWRzIHdoZXJlIGEgdHJhbnNpZW50IG5lZ2F0aXZlXG4rICogcmVhZGluZyBmcm9tIHBlci1DUFUgZGVsdGEgc2tldyBtdXN0IHByZXNlbnQgYXMgemVyby5cbisgKlxuKyAqIFhYWDogVGhpcyBoZWxwZXIgKGFuZCBpdHMgbm9kZS9nbG9iYWwgcGVlcnMpIGV4aXN0cyBiZWNhdXNlIHdlIHBsYWNlXG4rICogbW9ub3RvbmljYWxseS1pbmNyZW1lbnRlZCBldmVudCBjb3VudGVycyAoTlJfVk1TQ0FOX1dSSVRFIGFuZCBQR1JPVEFURV8qKVxuKyAqIGludG8gZW51bSBub2RlX3N0YXRfaXRlbS5cbisgKi9cbit1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4rXHRcdFx0XHRcdCAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXG4re1xuK1x0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuO1xuK1x0aW50IGk7XG4rXG4rXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuK1x0XHRyZXR1cm4gbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhscnV2ZWNfcGdkYXQobHJ1dmVjKSwgaWR4KTtcbitcbitcdGkgPSBtZW1jZ19zdGF0c19pbmRleChpZHgpO1xuK1x0aWYgKFdBUk5fT05DRShCQURfU1RBVF9JRFgoaSksIFwiJXM6IG1pc3Npbmcgc3RhdCBpdGVtICVkXFxuXCIsIF9fZnVuY19fLCBpZHgpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHBuID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7XG4rXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpUkVBRF9PTkNFKHBuLVx1MDAzZWxydXZlY19zdGF0cy1cdTAwM2VzdGF0ZVtpXSk7XG4rfVxuK1xuIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRcdFx0ICAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXG4ge1xuZGlmZiAtLWdpdCBhL21tL21tem9uZS5jIGIvbW0vbW16b25lLmNcbmluZGV4IDBjOGYxODFkOWQ1MDA2Li4xNzEzOWRiNGQyOTFjZSAxMDA2NDRcbi0tLSBhL21tL21tem9uZS5jXG4rKysgYi9tbS9tbXpvbmUuY1xuQEAgLTc4LDYgKzc4LDcgQEAgdm9pZCBscnV2ZWNfaW5pdChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4gXG4gXHRtZW1zZXQobHJ1dmVjLCAwLCBzaXplb2Yoc3RydWN0IGxydXZlYykpO1xuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2bHJ1dmVjLVx1MDAzZWxydV9sb2NrKTtcbitcdHNwaW5fbG9ja19pbml0KFx1MDAyNmxydXZlYy1cdTAwM2Vjb3N0X2xvY2spO1xuIFx0enN3YXBfbHJ1dmVjX3N0YXRlX2luaXQobHJ1dmVjKTtcbiBcbiBcdGZvcl9lYWNoX2xydShscnUpXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcC5jIGIvbW0vc3dhcC5jXG5pbmRleCA1ODhmNTBkOGYxYThjOS4uNzRiMjgxNzc4Y2JjOTIgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwLmNcbisrKyBiL21tL3N3YXAuY1xuQEAgLTI3Miw3MyArMjcyLDYgQEAgdm9pZCBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGZvbGlvX2JhdGNoX2FkZF9hbmRfbW92ZShmb2xpbywgbHJ1X21vdmVfdGFpbCk7XG4gfVxuIFxuLXZvaWQgbHJ1X25vdGVfY29zdF91bmxvY2tfaXJxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgYm9vbCBmaWxlLFxuLVx0XHR1bnNpZ25lZCBpbnQgbnJfaW8sIHVuc2lnbmVkIGludCBucl9yb3RhdGVkKVxuLVx0XHRfX3JlbGVhc2VzKGxydXZlYy1cdTAwM2VscnVfbG9jaylcbi1cdFx0X19yZWxlYXNlcyhyY3UpXG4te1xuLVx0dW5zaWduZWQgbG9uZyBjb3N0O1xuLVxuLVx0Lypcbi1cdCAqIFJlZmxlY3QgdGhlIHJlbGF0aXZlIGNvc3Qgb2YgaW5jdXJyaW5nIElPIGFuZCBzcGVuZGluZyBDUFVcbi1cdCAqIHRpbWUgb24gcm90YXRpb25zLiBUaGlzIGRvZXNuJ3QgYXR0ZW1wdCB0byBtYWtlIGEgcHJlY2lzZVxuLVx0ICogY29tcGFyaXNvbiwgaXQganVzdCBzYXlzOiBpZiByZWxvYWRzIGFyZSBhYm91dCBjb21wYXJhYmxlXG4tXHQgKiBiZXR3ZWVuIHRoZSBMUlUgbGlzdHMsIG9yIHJvdGF0aW9ucyBhcmUgb3ZlcndoZWxtaW5nbHlcbi1cdCAqIGRpZmZlcmVudCBiZXR3ZWVuIHRoZW0sIGFkanVzdCBzY2FuIGJhbGFuY2UgZm9yIENQVSB3b3JrLlxuLVx0ICovXG4tXHRjb3N0ID0gbnJfaW8gKiBTV0FQX0NMVVNURVJfTUFYICsgbnJfcm90YXRlZDtcbi1cdGlmICghY29zdCkge1xuLVx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2bHJ1dmVjLVx1MDAzZWxydV9sb2NrKTtcbi1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXHRcdHJldHVybjtcbi1cdH1cbi1cbi1cdGZvciAoOzspIHtcbi1cdFx0dW5zaWduZWQgbG9uZyBscnVzaXplO1xuLVxuLVx0XHQvKiBSZWNvcmQgY29zdCBldmVudCAqL1xuLVx0XHRpZiAoZmlsZSlcbi1cdFx0XHRscnV2ZWMtXHUwMDNlZmlsZV9jb3N0ICs9IGNvc3Q7XG4tXHRcdGVsc2Vcbi1cdFx0XHRscnV2ZWMtXHUwMDNlYW5vbl9jb3N0ICs9IGNvc3Q7XG4tXG4tXHRcdC8qXG4tXHRcdCAqIERlY2F5IHByZXZpb3VzIGV2ZW50c1xuLVx0XHQgKlxuLVx0XHQgKiBCZWNhdXNlIHdvcmtsb2FkcyBjaGFuZ2Ugb3ZlciB0aW1lIChhbmQgdG8gYXZvaWRcbi1cdFx0ICogb3ZlcmZsb3cpIHdlIGtlZXAgdGhlc2Ugc3RhdGlzdGljcyBhcyBhIGZsb2F0aW5nXG4tXHRcdCAqIGF2ZXJhZ2UsIHdoaWNoIGVuZHMgdXAgd2VpZ2hpbmcgcmVjZW50IHJlZmF1bHRzXG4tXHRcdCAqIG1vcmUgdGhhbiBvbGQgb25lcy5cbi1cdFx0ICovXG4tXHRcdGxydXNpemUgPSBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0lOQUNUSVZFX0FOT04pICtcbi1cdFx0XHQgIGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfQUNUSVZFX0FOT04pICtcbi1cdFx0XHQgIGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfSU5BQ1RJVkVfRklMRSkgK1xuLVx0XHRcdCAgbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9BQ1RJVkVfRklMRSk7XG4tXG4tXHRcdGlmIChscnV2ZWMtXHUwMDNlZmlsZV9jb3N0ICsgbHJ1dmVjLVx1MDAzZWFub25fY29zdCBcdTAwM2UgbHJ1c2l6ZSAvIDQpIHtcbi1cdFx0XHRscnV2ZWMtXHUwMDNlZmlsZV9jb3N0IC89IDI7XG4tXHRcdFx0bHJ1dmVjLVx1MDAzZWFub25fY29zdCAvPSAyO1xuLVx0XHR9XG4tXG4tXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1X2xvY2spO1xuLVx0XHRscnV2ZWMgPSBwYXJlbnRfbHJ1dmVjKGxydXZlYyk7XG4tXHRcdGlmICghbHJ1dmVjKSB7XG4tXHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1X2xvY2spO1xuLVx0fVxuLX1cbi1cbi12b2lkIGxydV9ub3RlX2Nvc3RfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLXtcbi1cdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcbi1cbi1cdGxydXZlYyA9IGZvbGlvX2xydXZlY19sb2NrX2lycShmb2xpbyk7XG4tXHRscnVfbm90ZV9jb3N0X3VubG9ja19pcnEobHJ1dmVjLCBmb2xpb19pc19maWxlX2xydShmb2xpbyksXG4tXHRcdFx0XHRmb2xpb19ucl9wYWdlcyhmb2xpbyksIDApO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCBscnVfYWN0aXZhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG5AQCAtMTE2NCw4ICsxMDk3LDYgQEAgdm9pZCBscnVfcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnRcbiBcbiBcdGNoaWxkX2xydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBOT0RFX0RBVEEobmlkKSk7XG4gXHRwYXJlbnRfbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMocGFyZW50LCBOT0RFX0RBVEEobmlkKSk7XG4tXHRwYXJlbnRfbHJ1dmVjLVx1MDAzZWFub25fY29zdCArPSBjaGlsZF9scnV2ZWMtXHUwMDNlYW5vbl9jb3N0O1xuLVx0cGFyZW50X2xydXZlYy1cdTAwM2VmaWxlX2Nvc3QgKz0gY2hpbGRfbHJ1dmVjLVx1MDAzZWZpbGVfY29zdDtcbiBcbiBcdGZvcl9lYWNoX2xydShscnUpXG4gXHRcdGxydXZlY19yZXBhcmVudF9scnUoY2hpbGRfbHJ1dmVjLCBwYXJlbnRfbHJ1dmVjLCBscnUsIG5pZCk7XG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggMzVjM2JiMTVhZTk2YTMuLjA3NTQ1MDk1YjM1MmNjIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtNjY4LDcgKzY2OCw3IEBAIHN0YXRpYyBwYWdlb3V0X3QgcGFnZW91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdFx0Zm9saW9fY2xlYXJfcmVjbGFpbShmb2xpbyk7XG4gXG4gXHR0cmFjZV9tbV92bXNjYW5fd3JpdGVfZm9saW8oZm9saW8pO1xuLVx0bm9kZV9zdGF0X2FkZF9mb2xpbyhmb2xpbywgTlJfVk1TQ0FOX1dSSVRFKTtcbitcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfVk1TQ0FOX1dSSVRFLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xuIFx0cmV0dXJuIFBBR0VfU1VDQ0VTUztcbiB9XG4gXG5AQCAtMTQxMyw4ICsxNDEzLDYgQEAgc3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuIFx0XHRcdFx0XHRzYy1cdTAwM2Vucl9zY2FubmVkIC09IChucl9wYWdlcyAtIDEpO1xuIFx0XHRcdFx0XHRucl9wYWdlcyA9IDE7XG4gXHRcdFx0XHR9XG4tXHRcdFx0XHRzdGF0LVx1MDAzZW5yX3BhZ2VvdXQgKz0gbnJfcGFnZXM7XG4tXG4gXHRcdFx0XHRpZiAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKVxuIFx0XHRcdFx0XHRnb3RvIGtlZXA7XG4gXHRcdFx0XHRpZiAoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpXG5AQCAtMjAzOCwxMCArMjAzNiwxMCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4gXHRpdGVtID0gUEdTVEVBTF9LU1dBUEQgKyByZWNsYWltZXJfb2Zmc2V0KHNjKTtcbiBcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBpdGVtLCBucl9yZWNsYWltZWQpO1xuIFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHU1RFQUxfQU5PTiArIGZpbGUsIG5yX3JlY2xhaW1lZCk7XG4rXHRpZiAobnJfc2Nhbm5lZCBcdTAwM2UgbnJfcmVjbGFpbWVkKVxuK1x0XHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdST1RBVEVfQU5PTiArIGZpbGUsXG4rXHRcdFx0XHQgbnJfc2Nhbm5lZCAtIG5yX3JlY2xhaW1lZCk7XG4gXG4tXHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcbi1cdGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycShscnV2ZWMsIGZpbGUsIHN0YXQubnJfcGFnZW91dCxcbi1cdFx0XHRcdFx0bnJfc2Nhbm5lZCAtIG5yX3JlY2xhaW1lZCk7XG4gXHRoYW5kbGVfcmVjbGFpbV93cml0ZWJhY2sobnJfdGFrZW4sIHBnZGF0LCBzYywgXHUwMDI2c3RhdCk7XG4gXHR0cmFjZV9tbV92bXNjYW5fbHJ1X3Nocmlua19pbmFjdGl2ZShwZ2RhdC1cdTAwM2Vub2RlX2lkLFxuIFx0XHRcdG5yX3NjYW5uZWQsIG5yX3JlY2xhaW1lZCwgXHUwMDI2c3RhdCwgc2MtXHUwMDNlcHJpb3JpdHksIGZpbGUpO1xuQEAgLTIxNDcsOSArMjE0NSw5IEBAIHN0YXRpYyB2b2lkIHNocmlua19hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4gXHRjb3VudF92bV9ldmVudHMoUEdERUFDVElWQVRFLCBucl9kZWFjdGl2YXRlKTtcbiBcdGNvdW50X21lbWNnX2V2ZW50cyhscnV2ZWNfbWVtY2cobHJ1dmVjKSwgUEdERUFDVElWQVRFLCBucl9kZWFjdGl2YXRlKTtcbiBcdG1vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gKyBmaWxlLCAtbnJfdGFrZW4pO1xuK1x0aWYgKG5yX3JvdGF0ZWQpXG4rXHRcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JPVEFURV9BTk9OICsgZmlsZSwgbnJfcm90YXRlZCk7XG4gXG4tXHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcbi1cdGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycShscnV2ZWMsIGZpbGUsIDAsIG5yX3JvdGF0ZWQpO1xuIFx0dHJhY2VfbW1fdm1zY2FuX2xydV9zaHJpbmtfYWN0aXZlKHBnZGF0LVx1MDAzZW5vZGVfaWQsIG5yX3Rha2VuLCBucl9hY3RpdmF0ZSxcbiBcdFx0XHRucl9kZWFjdGl2YXRlLCBucl9yb3RhdGVkLCBzYy1cdTAwM2Vwcmlvcml0eSwgZmlsZSk7XG4gfVxuQEAgLTIyODIsOCArMjI4MCwxMCBAQCBlbnVtIHNjYW5fYmFsYW5jZSB7XG4gXG4gc3RhdGljIHZvaWQgcHJlcGFyZV9zY2FuX2NvbnRyb2wocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBmaWxlO1xuK1x0c3RydWN0IGxydV9jb3N0ICphbm9uX2Nvc3QsICpmaWxlX2Nvc3Q7XG4gXHRzdHJ1Y3QgbHJ1dmVjICp0YXJnZXRfbHJ1dmVjO1xuK1x0dW5zaWduZWQgbG9uZyBscnVzaXplO1xuK1x0dW5zaWduZWQgbG9uZyBmaWxlO1xuIFxuIFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiAhbHJ1X2dlbl9zd2l0Y2hpbmcoKSlcbiBcdFx0cmV0dXJuO1xuQEAgLTIyOTksMTEgKzIyOTksNjkgQEAgc3RhdGljIHZvaWQgcHJlcGFyZV9zY2FuX2NvbnRyb2wocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4gXG4gXHQvKlxuIFx0ICogRGV0ZXJtaW5lIHRoZSBzY2FuIGJhbGFuY2UgYmV0d2VlbiBhbm9uIGFuZCBmaWxlIExSVXMuXG4rXHQgKlxuK1x0ICogVGhlIGNvc3QgbW9kZWwgaXMgYmFzZWQgb24gcm90YXRpb25zLCByZWZhdWx0cyBhbmRcbitcdCAqIHJlY2xhaW0tZHJpdmVuIHdyaXRlcyAoYW5vbiBvbmx5KSBvbiBlYWNoIHNpZGUuXG4rXHQgKlxuK1x0ICogVGhlc2UgZXZlbnQgY291bnRlcnMgYXJlIG1vbm90b25pYywgc28gZWFjaCByZWNsYWltIGN5Y2xlXG4rXHQgKiB0aGUgZGVsdGEgc2luY2UgdGhlIGxhc3Qgc2NhbiBpcyBleHRyYWN0ZWQgYW5kIGluY29ycG9yYXRlZFxuK1x0ICogaW50byBhIGRlY2F5aW5nIGF2ZXJhZ2UuIFRoaXMgZW5zdXJlcyBjdXJyZW5jeSwgYXMgd29ya2xvYWRzXG4rXHQgKiBjaGFuZ2Ugb3ZlciB0aW1lLCBhbmQgYXZvaWRzIG92ZXJmbG93IGluIHRoZSBjYWxjdWxhdGlvbnMuXG4rXHQgKlxuK1x0ICogVXNlIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYygpIHNvIHVuc2lnbmVkIHN1YnRyYWN0aW9uXG4rXHQgKiB5aWVsZHMgdGhlIGNvcnJlY3QgZGVsdGEgYWNyb3NzIGEgc2lnbmVkLWxvbmcgd3JhcGFyb3VuZCBvZlxuK1x0ICogdGhlIHVuZGVybHlpbmcgY291bnRlciAoYSByZWFsIGhhemFyZCBvbiAzMi1iaXQgdGhhdCB0aGVcbitcdCAqIGNsYW1wIGluIGxydXZlY19wYWdlX3N0YXRlKCkgd291bGQgb3RoZXJ3aXNlIHR1cm4gaW50byBhIGh1Z2VcbitcdCAqIHNwdXJpb3VzIGRlbHRhKS5cbiBcdCAqL1xuLVx0c3Bpbl9sb2NrX2lycShcdTAwMjZ0YXJnZXRfbHJ1dmVjLVx1MDAzZWxydV9sb2NrKTtcbi1cdHNjLVx1MDAzZWFub25fY29zdCA9IHRhcmdldF9scnV2ZWMtXHUwMDNlYW5vbl9jb3N0O1xuLVx0c2MtXHUwMDNlZmlsZV9jb3N0ID0gdGFyZ2V0X2xydXZlYy1cdTAwM2VmaWxlX2Nvc3Q7XG4tXHRzcGluX3VubG9ja19pcnEoXHUwMDI2dGFyZ2V0X2xydXZlYy1cdTAwM2VscnVfbG9jayk7XG4rXHRzcGluX2xvY2soXHUwMDI2dGFyZ2V0X2xydXZlYy1cdTAwM2Vjb3N0X2xvY2spO1xuK1xuK1x0Zm9yIChpbnQgZiA9IDA7IGYgXHUwMDNjPSAxOyBmKyspIHtcbitcdFx0c3RydWN0IGxydV9jb3N0ICpjb3N0ID0gXHUwMDI2dGFyZ2V0X2xydXZlYy1cdTAwM2Vjb3N0W2ZdO1xuK1x0XHR1bnNpZ25lZCBsb25nIHJvdGF0ZWQsIGlvLCBucl9yb3RhdGVkLCBucl9pbztcbitcbitcdFx0cm90YXRlZCA9IGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyh0YXJnZXRfbHJ1dmVjLFxuK1x0XHRcdFx0XHRcdCAgICAgIFBHUk9UQVRFX0FOT04gKyBmKTtcbitcdFx0aW8gPSBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWModGFyZ2V0X2xydXZlYyxcbitcdFx0XHRcdFx0XHQgV09SS0lOR1NFVF9SRVNUT1JFX0JBU0UgKyBmKTtcbitcdFx0aWYgKGYgPT0gV09SS0lOR1NFVF9BTk9OKVxuK1x0XHRcdGlvICs9IGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyh0YXJnZXRfbHJ1dmVjLFxuK1x0XHRcdFx0XHRcdFx0ICBOUl9WTVNDQU5fV1JJVEUpO1xuK1xuK1x0XHRucl9yb3RhdGVkID0gcm90YXRlZCAtIGNvc3QtXHUwMDNlbGFzdF9yb3RhdGVkO1xuK1x0XHRucl9pbyA9IGlvIC0gY29zdC1cdTAwM2VsYXN0X2lvO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBSZWZsZWN0IHRoZSByZWxhdGl2ZSBjb3N0IG9mIGluY3VycmluZyBJTyBhbmQgc3BlbmRpbmdcbitcdFx0ICogQ1BVIHRpbWUgb24gcm90YXRpb25zLiBUaGlzIGRvZXNuJ3QgYXR0ZW1wdCB0byBtYWtlIGFcbitcdFx0ICogcHJlY2lzZSBjb21wYXJpc29uLCBpdCBqdXN0IHNheXM6IGlmIHJlbG9hZHMgYXJlIGFib3V0XG4rXHRcdCAqIGNvbXBhcmFibGUgYmV0d2VlbiB0aGUgTFJVIGxpc3RzLCBvciByb3RhdGlvbnMgYXJlXG4rXHRcdCAqIG92ZXJ3aGVsbWluZ2x5IGRpZmZlcmVudCBiZXR3ZWVuIHRoZW0sIGFkanVzdCBzY2FuXG4rXHRcdCAqIGJhbGFuY2UgZm9yIENQVSB3b3JrLlxuK1x0XHQgKi9cbitcdFx0Y29zdC1cdTAwM2Vjb3VudCArPSBucl9pbyAqIFNXQVBfQ0xVU1RFUl9NQVggKyBucl9yb3RhdGVkO1xuK1xuK1x0XHRjb3N0LVx1MDAzZWxhc3Rfcm90YXRlZCA9IHJvdGF0ZWQ7XG4rXHRcdGNvc3QtXHUwMDNlbGFzdF9pbyA9IGlvO1xuK1x0fVxuK1xuK1x0YW5vbl9jb3N0ID0gXHUwMDI2dGFyZ2V0X2xydXZlYy1cdTAwM2Vjb3N0W1dPUktJTkdTRVRfQU5PTl07XG4rXHRmaWxlX2Nvc3QgPSBcdTAwMjZ0YXJnZXRfbHJ1dmVjLVx1MDAzZWNvc3RbV09SS0lOR1NFVF9GSUxFXTtcbitcbitcdGxydXNpemUgPSBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLCBOUl9JTkFDVElWRV9BTk9OKSArXG4rXHRcdCAgbHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYywgTlJfQUNUSVZFX0FOT04pICtcbitcdFx0ICBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLCBOUl9JTkFDVElWRV9GSUxFKSArXG4rXHRcdCAgbHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYywgTlJfQUNUSVZFX0ZJTEUpO1xuK1xuK1x0d2hpbGUgKGFub25fY29zdC1cdTAwM2Vjb3VudCArIGZpbGVfY29zdC1cdTAwM2Vjb3VudCBcdTAwM2UgbHJ1c2l6ZSAvIDQpIHtcbitcdFx0YW5vbl9jb3N0LVx1MDAzZWNvdW50IC89IDI7XG4rXHRcdGZpbGVfY29zdC1cdTAwM2Vjb3VudCAvPSAyO1xuK1x0fVxuK1xuK1x0c2MtXHUwMDNlYW5vbl9jb3N0ID0gYW5vbl9jb3N0LVx1MDAzZWNvdW50O1xuK1x0c2MtXHUwMDNlZmlsZV9jb3N0ID0gZmlsZV9jb3N0LVx1MDAzZWNvdW50O1xuK1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2dGFyZ2V0X2xydXZlYy1cdTAwM2Vjb3N0X2xvY2spO1xuIFxuIFx0LypcbiBcdCAqIFRhcmdldCBkZXNpcmFibGUgaW5hY3RpdmU6YWN0aXZlIGxpc3QgcmF0aW9zIGZvciB0aGUgYW5vblxuQEAgLTQ4MTAsNyArNDg2OCw4IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0c3RydWN0IHJlY2xhaW1fc3RhdCBzdGF0O1xuIFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaztcbiBcdGludCBzY2FubmVkLCByZWNsYWltZWQ7XG4tXHRpbnQgaXNvbGF0ZWQgPSAwLCB0eXBlLCB0eXBlX3NjYW5uZWQ7XG4rXHRpbnQgaXNvbGF0ZWQgPSAwLCBucl9pc29sYXRlZCA9IDAsIHR5cGUsIHR5cGVfc2Nhbm5lZDtcbitcdHVuc2lnbmVkIGxvbmcgdG90YWxfcmVjbGFpbWVkID0gMDtcbiBcdGJvb2wgc2tpcF9yZXRyeSA9IGZhbHNlO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XG5AQCAtNDgyMiw2ICs0ODgxLDcgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXG4gXHRzY2FubmVkID0gaXNvbGF0ZV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyxcbiBcdFx0XHRcdCBcdTAwMjZsaXN0LCBcdTAwMjZpc29sYXRlZCwgXHUwMDI2dHlwZSwgXHUwMDI2dHlwZV9zY2FubmVkKTtcbitcdG5yX2lzb2xhdGVkID0gaXNvbGF0ZWQ7XG4gXG4gXHQvKiBTY2FubmluZyBtYXkgaGF2ZSBlbXB0aWVkIHRoZSBvbGRlc3QgZ2VuLCBmbHVzaCBpdCAqL1xuIFx0aWYgKHNjYW5uZWQpXG5AQCAtNDgzNCw2ICs0ODk0LDcgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gcmV0cnk6XG4gXHRyZWNsYWltZWQgPSBzaHJpbmtfZm9saW9fbGlzdChcdTAwMjZsaXN0LCBwZ2RhdCwgc2MsIFx1MDAyNnN0YXQsIGZhbHNlLCBtZW1jZyk7XG4gXHRzYy1cdTAwM2Vucl9yZWNsYWltZWQgKz0gcmVjbGFpbWVkO1xuK1x0dG90YWxfcmVjbGFpbWVkICs9IHJlY2xhaW1lZDtcbiBcdC8qIFJldHJ5IHBhc3MgaXMgb25seSBtZWFudCBmb3IgY2xlYW4gZm9saW9zIHdpdGhvdXQgbmV3IGlzb2xhdGlvbiAqL1xuIFx0aWYgKGlzb2xhdGVkKVxuIFx0XHRoYW5kbGVfcmVjbGFpbV93cml0ZWJhY2soaXNvbGF0ZWQsIHBnZGF0LCBzYywgXHUwMDI2c3RhdCk7XG5AQCAtNDg4Nyw2ICs0OTQ4LDEwIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRnb3RvIHJldHJ5O1xuIFx0fVxuIFxuK1x0aWYgKG5yX2lzb2xhdGVkIFx1MDAzZSB0b3RhbF9yZWNsYWltZWQpXG4rXHRcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JPVEFURV9BTk9OICsgdHlwZSxcbitcdFx0XHRcdCBucl9pc29sYXRlZCAtIHRvdGFsX3JlY2xhaW1lZCk7XG4rXG4gXHRyZXR1cm4gc2Nhbm5lZDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbW0vdm1zdGF0LmMgYi9tbS92bXN0YXQuY1xuaW5kZXggZjUzNDk3MmY1MTdkZTAuLjg3ZDRhNjc4MTM2NzY3IDEwMDY0NFxuLS0tIGEvbW0vdm1zdGF0LmNcbisrKyBiL21tL3Ztc3RhdC5jXG5AQCAtMTAyNCw2ICsxMDI0LDE3IEBAIHVuc2lnbmVkIGxvbmcgbm9kZV9wYWdlX3N0YXRlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4gXG4gXHRyZXR1cm4gbm9kZV9wYWdlX3N0YXRlX3BhZ2VzKHBnZGF0LCBpdGVtKTtcbiB9XG4rXG4rLypcbisgKiBOb24tY2xhbXBpbmcgdmFyaWFudCBvZiBub2RlX3BhZ2Vfc3RhdGUoKSBpbnRlbmRlZCBmb3IgY2FsbGVycyB0aGF0XG4rICogc25hcHNob3QgYSBtb25vdG9uaWNhbGx5LWluY3JlbWVudGVkIGNvdW50ZXIgYW5kIHN1YnRyYWN0IHR3byBzYW1wbGVzLlxuKyAqIFNlZSBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYygpIGZvciB0aGUgcmF0aW9uYWxlLlxuKyAqL1xuK3Vuc2lnbmVkIGxvbmcgbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuK1x0XHRcdFx0XHRlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW0pXG4re1xuK1x0cmV0dXJuICh1bnNpZ25lZCBsb25nKWF0b21pY19sb25nX3JlYWQoXHUwMDI2cGdkYXQtXHUwMDNldm1fc3RhdFtpdGVtXSk7XG4rfVxuICNlbmRpZlxuIFxuIC8qXG5AQCAtMTI4OSw2ICsxMzAwLDggQEAgY29uc3QgY2hhciAqIGNvbnN0IHZtc3RhdF90ZXh0W10gPSB7XG4gXHRbSShQR1NDQU5fUFJPQUNUSVZFKV1cdFx0XHQ9IFwicGdzY2FuX3Byb2FjdGl2ZVwiLFxuIFx0W0koUEdTQ0FOX0FOT04pXVx0XHRcdD0gXCJwZ3NjYW5fYW5vblwiLFxuIFx0W0koUEdTQ0FOX0ZJTEUpXVx0XHRcdD0gXCJwZ3NjYW5fZmlsZVwiLFxuK1x0W0koUEdST1RBVEVfQU5PTildXHRcdFx0PSBcInBncm90YXRlX2Fub25cIixcbitcdFtJKFBHUk9UQVRFX0ZJTEUpXVx0XHRcdD0gXCJwZ3JvdGF0ZV9maWxlXCIsXG4gXHRbSShQR1JFRklMTCldXHRcdFx0XHQ9IFwicGdyZWZpbGxcIixcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuIFx0W0koTlJfSFVHRVRMQildXHRcdFx0XHQ9IFwibnJfaHVnZXRsYlwiLFxuZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuY1xuaW5kZXggZjM1MTc5OGU3MjNhY2QuLjdhYzJiODhjODBhZTU2IDEwMDY0NFxuLS0tIGEvbW0vd29ya2luZ3NldC5jXG4rKysgYi9tbS93b3JraW5nc2V0LmNcbkBAIC01ODQsMTEgKzU4NCw2IEBAIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcbiBcdC8qIEZvbGlvIHdhcyBhY3RpdmUgcHJpb3IgdG8gZXZpY3Rpb24gKi9cbiBcdGlmICh3b3JraW5nc2V0KSB7XG4gXHRcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcbi1cdFx0Lypcbi1cdFx0ICogWFhYOiBNb3ZlIHRvIGZvbGlvX2FkZF9scnUoKSB3aGVuIGl0IHN1cHBvcnRzIG5ldyB2c1xuLVx0XHQgKiBwdXRiYWNrXG4tXHRcdCAqL1xuLVx0XHRscnVfbm90ZV9jb3N0X3JlZmF1bHQoZm9saW8pO1xuIFx0XHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgV09SS0lOR1NFVF9SRVNUT1JFX0JBU0UgKyBmaWxlLCBucik7XG4gXHR9XG4gb3V0OlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDA6MDY6NDMuOTg4OTM3Nzk2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM5ODA2NDg1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSB0aGF0J3MgdHdlYWtpbmcgdGhlIExSVSBjb3N0IG1vZGVsIGFuZCBpdHMgYXNzb2NpYXRlZCBzdGF0cyDigJMgdGhhdCdzIHNvbWUgc2VyaW91cyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN0dWZmLiBJdCdzIGludHJvZHVjaW5nIHRoZXNlIG5ldyBtb25vdG9uaWMgY291bnRlcnMsIGBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWNgIGFuZCBgbm9kZV9wYWdlX3N0YXRlX21vbm90b25pY2AuIEFuZCBpdCdzIGFsc28gbWFraW5nIHNvbWUgY2hhbmdlcyB0byBob3cgYHByZXBhcmVfc2Nhbl9jb250cm9sYCBjYWxjdWxhdGVzIHRoZSBjb3N0IG9mIHNjYW5uaW5nIGFub255bW91cyBhbmQgZmlsZSBwYWdlcy4gRXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcgdGhlIHJlY2xhaW0gcGF0aCwgc3BlY2lmaWNhbGx5IHRoZSBiYWxhbmNlIGJldHdlZW4gc2Nhbm5pbmcgYW5vbiBhbmQgZmlsZSBMUlVzLCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy5cblxuVGhlIHBhdGNoIGFsc28gc2VlbXMgdG8gYmUgY2xlYW5pbmcgdXAgc29tZSBvbGRlciBmdW5jdGlvbnMsIGxpa2UgcmVtb3ZpbmcgYGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycWAgYW5kIGBscnVfbm90ZV9jb3N0X3JlZmF1bHRgLCBhbmQgYWRkaW5nIHR3byBuZXcgaXRlbXMgYFBHUk9UQVRFX0FOT05gIGFuZCBgUEdST1RBVEVfRklMRWAuIEl0IGxvb2tzIGxpa2UgYHNocmlua19pbmFjdGl2ZV9saXN0YCwgYHNocmlua19hY3RpdmVfbGlzdGAsIGFuZCBgZXZpY3RfZm9saW9zYCBhcmUgYWxsIGJlaW5nIHVwZGF0ZWQgdG8gYWNjb3VudCBmb3IgdGhlIG5ldyBpdGVtcy4gVGhpcyBpcyBhbGwgY2VudGVyZWQgb24gaG93IHRoZSBrZXJuZWwgZGVjaWRlcyB3aGF0IHRvIGV2aWN0LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhpcyBmdXJ0aGVyLlxuXG5UaGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSBhIGtleSB0YXJnZXQ6IGBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWNgLCBgbm9kZV9wYWdlX3N0YXRlX21vbm90b25pY2AsIGBwcmVwYXJlX3NjYW5fY29udHJvbGAsIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAsIGBzaHJpbmtfYWN0aXZlX2xpc3RgLCBgZXZpY3RfZm9saW9zYCwgYHBhZ2VvdXRgLCBhbmQgYHNocmlua19mb2xpb19saXN0YC4gTG9va3MgbGlrZSBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgLCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYW5kIGBldmljdF9mb2xpb3NgIGFyZSBhbGwgcGFydCBvZiB0aGUgcmVjbGFpbSBwYXRoLiBUaGVzZSBhcmUgZGVmaW5pdGVseSB3aGVyZSBJIHNob3VsZCBmb2N1cyB0aGUgZnV6emluZyBlZmZvcnRzLlxuXG5JJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhlIGNvZGUgaXMgaW4gdGhlIG1haW4gTU0gc3Vic3lzdGVtczogYG1tL3Ztc2Nhbi5jYCwgYG1tL3N3YXAuY2AsIGBtbS93b3JraW5nc2V0LmNgLCBgbW0vbWVtY29udHJvbC5jYCwgYW5kIGBtbS92bXN0YXQuY2AsIHNvIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG9uIGBDT05GSUdfTUVNQ0dgIHdoaWNoIGlzIHJlbGF0ZWQgdG8gYG1tL21lbWNvbnRyb2wuY2AuIEkgbmVlZCB0byByZXZpZXcgYG1tL01ha2VmaWxlYCBhbmQgYG1tL0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHRoYXQgY291bGQgaW5mbHVlbmNlIGhvdyB0aGlzIGNvZGUgYmVoYXZlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTEzNiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA2OjUwLjM4NzAxMjE2NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTM4MTE3NzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByZXBhcmVfc2Nhbl9jb250cm9sXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbW16b25lLmg9NzY2PXN0cnVjdCBscnV2ZWMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03NzMtXFx0ICogaW5jcmVhc2VzLCB0aGUgcmVjbGFpbSBzY2FuIGJhbGFuY2UgdGlwcyB0b3dhcmQgdGhlIG90aGVyLlxcbmluY2x1ZGUvbGludXgvbW16b25lLmg6Nzc0OlxcdCAqIFVwZGF0ZWQgYW5kIGRlY2F5ZWQgYXQgcHJlcGFyZV9zY2FuX2NvbnRyb2woKSB0aW1lOyBjb3N0X2xvY2tcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTc3NS1cXHQgKiBzZXJpYWxpc2VzIHRoYXQgdXBkYXRlLlxcbi0tXFxubW0vdm1zY2FuLmM9MjI3ND1lbnVtIHNjYW5fYmFsYW5jZSB7XFxuLS1cXG5tbS92bXNjYW4uYy0yMjgwLVxcbm1tL3Ztc2Nhbi5jOjIyODE6c3RhdGljIHZvaWQgcHJlcGFyZV9zY2FuX2NvbnRyb2wocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtMjI4Mi17XFxuLS1cXG5tbS92bXNjYW4uYz02MjExPXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjIzMy1cXG5tbS92bXNjYW4uYzo2MjM0OlxcdHByZXBhcmVfc2Nhbl9jb250cm9sKHBnZGF0LCBzYyk7XFxubW0vdm1zY2FuLmMtNjIzNS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDA6MDY6NTUuNTI1MTQ0OTg4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUyOTk4Mjc1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIE1lbW9yeSBNYW5hZ2VtZW50IENvZGUqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgZGVmaW5pdGVseSBjZW50ZXJlZCBpbiBgbW0vdm1zY2FuLmNgLiBUaGF0J3MgZ29vZCwgYXQgbGVhc3QgaXQncyBhIGtub3duIGFyZWEuIFRoYXQgZmlsZSBpcyBhbHdheXMgY29tcGlsZWQsIHdoaWNoIGlzIHVzZWZ1bCB3aGVuIHRyYWNraW5nIGRvd24gYSBzcGVjaWZpYyBpc3N1ZS4gSSBjYW4gdXNlIG15IGV4cGVyaWVuY2UgdG8gaW1tZWRpYXRlbHkgdGhpbmsgYWJvdXQgdGhlIGNoYW5nZXMgbWFkZSB0aGVyZSBhbmQgaG93IHRoZXkgbWF5IGluZmx1ZW5jZSBteSB3b3JrLlxuXG5Ob3csIGlmIG1lbW9yeSBzZXJ2ZXMsIGBDT05GSUdfTUVNQ0dgIGNvbWVzIGludG8gcGxheSB3aXRoIGBtbS9tZW1jb250cm9sLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgY2xvc2VseSB0aGUgY3VycmVudCBtb2RpZmljYXRpb24gaXMgdGllZCB0byBtZW1vcnkgY29udHJvbCBncm91cHMuIFRvIHZlcmlmeSB0aGUgcmVsYXRpb25zaGlwLCBsZXQncyB0YWtlIGEgcXVpY2sgbG9vayBhdCBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGNvbXBpbGF0aW9uIG9mIGBtZW1jb250cm9sLmNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhbiB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGlzIGZpbGUgYW5kIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzLCBoZWxwaW5nIG1lIGJ1aWxkIGEgbWVudGFsIG1vZGVsIG9mIHRoZSBjaGFuZ2VzLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzYzLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDA6MDY6NTkuMDU1MTMzODc3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMDU0ODYxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1jb250cm9sLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9Mjc9S0NPVl9JTlNUUlVNRU5UX2ttZW1sZWFrLm8gOj0gblxcbm1tL01ha2VmaWxlOjI4OktDT1ZfSU5TVFJVTUVOVF9tZW1jb250cm9sLm8gOj0gblxcbm1tL01ha2VmaWxlLTI5LUtDT1ZfSU5TVFJVTUVOVF9tZW1jb250cm9sLXYxLm8gOj0gblxcbi0tXFxubW0vTWFrZWZpbGU9MTA0PW9iai0kKENPTkZJR19NRU1DR19WMSkgKz0gbWVtY29udHJvbC12MS5vXFxubW0vTWFrZWZpbGU6MTA1Om9iai0kKENPTkZJR19NRU1DRykgKz0gbWVtY29udHJvbC5vIHZtcHJlc3N1cmUub1xcbm1tL01ha2VmaWxlLTEwNi1pZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5tbS9NYWtlZmlsZToxMDc6b2JqLSQoQ09ORklHX01FTUNHKSArPSBicGZfbWVtY29udHJvbC5vXFxubW0vTWFrZWZpbGUtMTA4LWVuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA2OjU5LjU1NTY5NjExNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjMwNzI2MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBJbnF1aXJ5OiBNZW1vcnkgTWFuYWdlbWVudCBhbmQgTFJVIEdlbmVyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBhbmQgaXQgbG9va3MgbGlrZSBgQ09ORklHX01FTUNHYCBpcyBkZWZpbml0ZWx5IGEgcHJlcmVxdWlzaXRlIGZvciBgbWVtY29udHJvbC5jYC4gVGhhdCdzIG5vdCBzdXJwcmlzaW5nLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uIHRvIGBDT05GSUdfTFJVX0dFTmAuIExldCdzIHNlZS4uLiBsb29raW5nIGF0IGBtbS92bXNjYW4uY2AsIEkgc3BvdCB0aGlzIGZ1bmN0aW9uLCBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgLiBIbW0sIGluc2lkZSBpdCwgdGhlcmUncyBhIGNoZWNrOiBgbHJ1X2dlbl9lbmFibGVkKClgLiBUaGlzIGlzIGludGVyZXN0aW5nOyBpdCBzdWdnZXN0cyB0aGF0IExSVSBnZW5lcmF0aW9uIGlzIHNvbWVob3cgaW50ZWdyYXRlZCBpbnRvIHRoZSBzY2FubmluZyBwcm9jZXNzIGl0c2VsZi4gVGhlIGxvZ2ljIHN1Z2dlc3RzLCB0aGF0LCBpZiBMUlUgZ2VuZXJhdGlvbiBpcyBlbmFibGVkIGFuZCBpdCBpcyBub3Qgc3dpdGNoaW5nLCB0aGVuIHRoZSBmdW5jdGlvbiBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgIGlzIGdvaW5nIHRvIHJldHVybi4gQWxyaWdodCwgc2VlbXMgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdC4gTm93LCBsZXQncyBsb29rIGF0IHdoZXJlIGBldmljdF9mb2xpb3NgIGZpdHMgaW50byBhbGwgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4MzgsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDA6MDc6MDMuMjc4NzczMTQ0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNDE4NDA0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXZpY3RfZm9saW9zXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTQ4MjY9c3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ4NTktXFxubW0vdm1zY2FuLmM6NDg2MDpzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5tbS92bXNjYW4uYy00ODYxLVxcdFxcdFxcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUwMjQ9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUwNDctXFx0XFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fc2NhbiwgTUlOX0xSVV9CQVRDSCk7XFxubW0vdm1zY2FuLmM6NTA0ODpcXHRcXHRkZWx0YSA9IGV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyk7XFxubW0vdm1zY2FuLmMtNTA0OS1cXHRcXHRpZiAoIWRlbHRhKVxcbi0tXFxubW0vdm1zY2FuLmM9NTY1MT1zdGF0aWMgaW50IHJ1bl9ldmljdGlvbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU2NzEtXFx0XFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fcmVjbGFpbSAtIHNjLVxcdTAwM2Vucl9yZWNsYWltZWQsIE1BWF9MUlVfQkFUQ0gpO1xcbm1tL3Ztc2Nhbi5jOjU2NzI6XFx0XFx0aWYgKCFldmljdF9mb2xpb3MobnJfYmF0Y2gsIGxydXZlYywgc2MsIHN3YXBwaW5lc3MpKVxcbm1tL3Ztc2Nhbi5jLTU2NzMtXFx0XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA3OjA4LjMyMDYyMjUxM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3MTI0NDgwNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzpcblxuKipDaGVja2luZyB0aGUgTUdMUlUgQ29ubmVjdGlvbiB0byBFdmljdGlvbiBMb2dpYyoqXG5cbkFscmlnaHQsIHNvIGBldmljdF9mb2xpb3NgIGlzIHBhcnQgb2YgdGhlIE1HTFJVIGltcGxlbWVudGF0aW9uLiBNeSBpbml0aWFsIGNvbmNlcm4gaXMgdG8gdW5kZXJzdGFuZCBpdHMgcGxhY2Ugd2l0aGluIHRoZSBicm9hZGVyIHBpY3R1cmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGlmIHRoaXMgZnVuY3Rpb24gaXMgb25seSBjb21waWxlZCBpZiB0aGUgYENPTkZJR19MUlVfR0VOYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBlbmFibGVkLiBUaGF0J3MgYSBjcml0aWNhbCBkZXRhaWwgYmVjYXVzZSBpdCB0aWVzIGBldmljdF9mb2xpb3NgIGRpcmVjdGx5IHRvIHRoZSBtdWx0aS1nZW5lcmF0aW9uYWwgTFJVIG1lY2hhbmlzbS4gRW5zdXJpbmcgdGhpcyBkZXBlbmRlbmN5IHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBiZWhhdmlvciBpbiB0aGUgbGFyZ2VyIGNvbnRleHQgb2YgbWVtb3J5IG1hbmFnZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjI0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDA6MDc6MTEuMDMzMDc1NTc5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDcwNDc5MjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0xSVV9HRU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9ODI0PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XFxuLS1cXG5tbS92bXNjYW4uYy04MzAtXFxubW0vdm1zY2FuLmM6ODMxOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3Ztc2Nhbi5jLTgzMi0vKlxcbi0tXFxubW0vdm1zY2FuLmM9ODU0PXN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTg1Ny19XFxubW0vdm1zY2FuLmM6ODU4OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3Ztc2Nhbi5jLTg1OS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTI2NzE9c3RhdGljIGJvb2wgY2FuX2FnZV9hbm9uX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI2ODItXFxubW0vdm1zY2FuLmM6MjY4MzojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS92bXNjYW4uYy0yNjg0LVxcbm1tL3Ztc2Nhbi5jPTI2ODU9REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UobHJ1X3N3aXRjaCk7XFxubW0vdm1zY2FuLmM6MjY4NjojaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxcbm1tL3Ztc2Nhbi5jLTI2ODctREVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfVFJVRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XFxuLS1cXG5tbS92bXNjYW4uYz0yODY3PXN0YXRpYyB2b2lkIHJlc2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxcbi0tXFxubW0vdm1zY2FuLmMtMjg4Ni1cXG5tbS92bXNjYW4uYzoyODg3OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcXG5tbS92bXNjYW4uYy0yODg4LVxcbi0tXFxubW0vdm1zY2FuLmM9Mjk5Nj12b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwMjQtXFxubW0vdm1zY2FuLmM6MzAyNTojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VICovXFxubW0vdm1zY2FuLmMtMzAyNi1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTU5MjA9bGF0ZV9pbml0Y2FsbChpbml0X2xydV9nZW4pO1xcbm1tL3Ztc2Nhbi5jLTU5MjEtXFxubW0vdm1zY2FuLmM6NTkyMjojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cXG5tbS92bXNjYW4uYy01OTIzLVxcbi0tXFxubW0vdm1zY2FuLmM9NTkzND1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTkzOC1cXG5tbS92bXNjYW4uYzo1OTM5OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3Ztc2Nhbi5jLTU5NDAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA3OjExLjQ0MDEzNzAyMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzgxMTU5Mzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVk1zY2FuIFBhdGNoKipcblxuT2theSwgc28gSSdtIHNlZWluZyB0aGF0IGBldmljdF9mb2xpb3NgIGlzIGRlZmluaXRlbHkgbmVzdGxlZCB3aXRoaW4gdGhhdCBgI2lmZGVmIENPTkZJR19MUlVfR0VOYCBibG9jay4gVGhhdCdzIGEga2V5IG9ic2VydmF0aW9uLiBOb3csIGxldCdzIGp1c3QgbWFrZSBzdXJlIEkgaGF2ZSB0aGlzIHJpZ2h0Li4uIHdhaXQgYSBzZWNvbmQsIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAsIGBzaHJpbmtfYWN0aXZlX2xpc3RgLCBhbmQgYHByZXBhcmVfc2Nhbl9jb250cm9sYCBhcmUgYWxsIGNvcmUgY29tcG9uZW50cyBvZiB0aGUgdHJhZGl0aW9uYWwgYWN0aXZlL2luYWN0aXZlIExSVSBtZWNoYW5pc20uIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYm90aCB0aGUgTUdMUlUgdmlhIGBldmljdF9mb2xpb3NgLCBhbmQgdGhlIGNsYXNzaWMgTFJVIHdpdGggdGhvc2UgdGhyZWUgZnVuY3Rpb25zLiBTbyBpdCdzIGFmZmVjdGluZyAqYm90aCogaW1wbGVtZW50YXRpb25zLCBub3QganVzdCB0aGUgbmV3IG9uZS4gSSBzaG91bGQgcHJvYmFibHkganVzdCBkb3VibGUtY2hlY2sgdGhhdCBieSBsb29raW5nIGF0IGBtbS92bXNjYW4uY2AgdG8gY29uZmlybS4gSXQgaXMgbm90IGp1c3Qgb25lIExSVSB0aGF0IGlzIGJlaW5nIG1vZGlmaWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjUwNSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwMDowNzoxNS4yMjEzMDA5NDhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTc3OTU2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJldmljdF9mb2xpb3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NDgyNj1zdGF0aWMgaW50IGlzb2xhdGVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vdm1zY2FuLmMtNDg1OS1cXG5tbS92bXNjYW4uYzo0ODYwOnN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbm1tL3Ztc2Nhbi5jLTQ4NjEtXFx0XFx0XFx0c3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKVxcbi0tXFxubW0vdm1zY2FuLmM9NTAyND1zdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTA0Ny1cXHRcXHRucl9iYXRjaCA9IG1pbihucl90b19zY2FuLCBNSU5fTFJVX0JBVENIKTtcXG5tbS92bXNjYW4uYzo1MDQ4OlxcdFxcdGRlbHRhID0gZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKTtcXG5tbS92bXNjYW4uYy01MDQ5LVxcdFxcdGlmICghZGVsdGEpXFxuLS1cXG5tbS92bXNjYW4uYz01NjUxPXN0YXRpYyBpbnQgcnVuX2V2aWN0aW9uKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbi0tXFxubW0vdm1zY2FuLmMtNTY3MS1cXHRcXHRucl9iYXRjaCA9IG1pbihucl90b19yZWNsYWltIC0gc2MtXFx1MDAzZW5yX3JlY2xhaW1lZCwgTUFYX0xSVV9CQVRDSCk7XFxubW0vdm1zY2FuLmM6NTY3MjpcXHRcXHRpZiAoIWV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcykpXFxubW0vdm1zY2FuLmMtNTY3My1cXHRcXHRcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDA6MDc6MTUuMzc3MDkwNzkyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNzQ0ODY3NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuIEhlcmUncyB3aGF0IEknbSB0aGlua2luZyBhcyBJIGFuYWx5emUgdGhlc2UgZnVuY3Rpb25zOlxuXG4qKkFuYWx5emluZyBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGFuZCBgc2hyaW5rX2FjdGl2ZV9saXN0YCoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGxpc3RzIGFyZSBiZWluZyBtYW5hZ2VkIGFuZCBob3cgbWVtb3J5IGlzIHBvdGVudGlhbGx5IGJlaW5nIG9wdGltaXplZC4gU28sIEknbSBnb2luZyB0byBzdGFydCBieSBsb29raW5nIGF0IGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgYW5kIGBzaHJpbmtfYWN0aXZlX2xpc3RgLiBUaGVzZSBmdW5jdGlvbiBuYW1lcyBhcmUgcHJldHR5IGRlc2NyaXB0aXZlLCBzbyBteSBpbml0aWFsIGh5cG90aGVzaXMgaXMgdGhhdCB0aGV5J3JlIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHByb2JhYmx5IGludm9sdmUgcmVkdWNpbmcgdGhlIHNpemUgb2Ygc29tZSBkYXRhIHN0cnVjdHVyZXMgdG8gcmVjbGFpbSByZXNvdXJjZXMuIEkgbmVlZCB0byBzZWUgKmhvdyogdGhpcyBzaHJpbmtpbmcgaXMgYWNjb21wbGlzaGVkIOKAkyBhcmUgd2UgZnJlZWluZyBtZW1vcnksIGNvYWxlc2Npbmcgc2VnbWVudHMsIG9yIGp1c3QgcmVhbGxvY2F0aW5nIHRvIHNtYWxsZXIgYmxvY2tzPyBXaGF0IGFyZSB0aGUgY3JpdGVyaWEgZm9yIHRyaWdnZXJpbmcgdGhpcyBzaHJpbmthZ2U/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhlIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgYW5kIGBzaHJpbmtfYWN0aXZlX2xpc3RgIG9uIHBlcmZvcm1hbmNlLCBwYXJ0aWN1bGFybHkgdGhlIHRyYWRlLW9mZiBiZXR3ZWVuIG1lbW9yeSBmb290cHJpbnQgYW5kIGV4ZWN1dGlvbiBzcGVlZC4gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzIEkgc2hvdWxkIGJlIGF3YXJlIG9mLCBlc3BlY2lhbGx5IGlmIHRoZSBsaXN0cyBhcmUgYmVpbmcgYWNjZXNzZWQgYnkgbXVsdGlwbGUgdGhyZWFkcz8gVWx0aW1hdGVseSwgSSBuZWVkIGEgdmVyeSBjbGVhciBwaWN0dXJlIG9mIHRoZWlyIGZ1bmN0aW9uYWxpdHkgYW5kIHRoZSBpbnZhcmlhbnRzIHRoZXkgbWFpbnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjUzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDA6MDc6MTkuNjUxNTgyMzlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MDkxNzgxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaHJpbmtfaW5hY3RpdmVfbGlzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz0xOTQyPXN0YXRpYyB2b2lkIGhhbmRsZV9yZWNsYWltX3dyaXRlYmFjayh1bnNpZ25lZCBsb25nIG5yX3Rha2VuLFxcbi0tXFxubW0vdm1zY2FuLmMtMTk4MC0vKlxcbm1tL3Ztc2Nhbi5jOjE5ODE6ICogc2hyaW5rX2luYWN0aXZlX2xpc3QoKSBpcyBhIGhlbHBlciBmb3Igc2hyaW5rX25vZGUoKS4gIEl0IHJldHVybnMgdGhlIG51bWJlclxcbm1tL3Ztc2Nhbi5jLTE5ODItICogb2YgcmVjbGFpbWVkIHBhZ2VzXFxubW0vdm1zY2FuLmMtMTk4My0gKi9cXG5tbS92bXNjYW4uYzoxOTg0OnN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19pbmFjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcXG5tbS92bXNjYW4uYy0xOTg1LVxcdFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuLS1cXG5tbS92bXNjYW4uYz0yMjEzPXN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19saXN0KGVudW0gbHJ1X2xpc3QgbHJ1LCB1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXFxuLS1cXG5tbS92bXNjYW4uYy0yMjIzLVxcbm1tL3Ztc2Nhbi5jOjIyMjQ6XFx0cmV0dXJuIHNocmlua19pbmFjdGl2ZV9saXN0KG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIGxydSk7XFxubW0vdm1zY2FuLmMtMjIyNS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA3OjE5Ljg0MjUxMDM2MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTQ0ODY3NzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2gncyBJbXBhY3Qgb24gTFJVIGFuZCBNR0xSVSBJbXBsZW1lbnRhdGlvbnMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgYml0IG1vcmUgaW52b2x2ZWQgdGhhbiBJIGluaXRpYWxseSB0aG91Z2h0LiBJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2VzIHRvdWNoIGJvdGggdGhlIHRyYWRpdGlvbmFsIExSVSBhbGdvcml0aG0gKmFuZCogdGhlIE1HTFJVIChNdWx0aS1HZW5lcmF0aW9uYWwgTFJVKSBpbXBsZW1lbnRhdGlvbi4gVGhlIGNsYXNzaWMgTFJVIGlzIGFsd2F5cyBiYWtlZCBpbnRvIHRoZSBrZXJuZWwsIHRoYXTigJlzIG5vIHN1cnByaXNlLCBidXQgTUdMUlUgaXMgY29uZGl0aW9uYWwsIGJhc2VkIG9uIHRoZSBgQ09ORklHX0xSVV9HRU5gIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGVyZWZvcmUsIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBlZmZlY3Qgb2YgdGhpcyBjb2RlLCBJJ20gdGhpbmtpbmcgd2UgbmVlZCB0byBleHBsaWNpdGx5IGVuYWJsZSBgQ09ORklHX0xSVV9HRU5gLlxuXG5Ib2xkIG9uIGEgc2Vjb25kLCB0aG91Z2guIEknbSBhbHNvIHNlZWluZyBzb21lIHBvdGVudGlhbCBpbnRlcmFjdGlvbiB3aXRoIGBDT05GSUdfTUVNQ0dgLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCBmdW5jdGlvbi4gVGhhdCBmdW5jdGlvbiBoYXMgc3BlY2lmaWMgbG9naWMgdGhhdCBoaW5nZXMgb24gYG1lbV9jZ3JvdXBfZGlzYWJsZWQoKWAuIFRoaXMgaXMgZ29pbmcgdG8gbWF0dGVyLCBzbyBJIHJlYWxseSBuZWVkIHRvIGV4YW1pbmUgdGhlIGRldGFpbHMgdGhlcmUuIEnigJlsbCBuYXZpZ2F0ZSB0byBgbW0vbWVtY29udHJvbC5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGFsbCBmaXRzIHRvZ2V0aGVyIGFuZCBob3cgdGhlIG1lbW9yeSBjZ3JvdXAgc2V0dGluZyBjaGFuZ2VzIHRoZSBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4MzgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDA6MDc6MjMuNzg3MzgzODE5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDc3MTczNzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9NDg2PXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MDgtLyoqXFxubW0vbWVtY29udHJvbC5jOjUwOTogKiBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMgLSBub24tY2xhbXBpbmcgbHJ1dmVjIHN0YXQgcmVhZCBmb3IgZGVsdGEgc2FtcGxpbmdcXG5tbS9tZW1jb250cm9sLmMtNTEwLSAqIEBscnV2ZWM6IHRoZSBMUlUgdmVjdG9yIHRvIHJlYWQgZnJvbVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyNi0gKi9cXG5tbS9tZW1jb250cm9sLmM6NTI3OnVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5tbS9tZW1jb250cm9sLmMtNTI4LVxcdFxcdFxcdFxcdFxcdCAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA3OjIzLjk5NTExNTg5M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNTg4MjExNzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczpcblxuKipLY29uZmlnIERlcGVuZGVuY3kgQ29uZmlybWF0aW9uKipcblxuUmlnaHQsIHNvIHdlJ3JlIGFic29sdXRlbHkgZ29pbmcgdG8gbmVlZCBgQ09ORklHX01FTUNHYC4gTm8gcXVlc3Rpb24gYWJvdXQgdGhhdC4gTm93LCBsZXQncyBzZWUsIHdoYXQncyBuZXh0PyBIbW0sIHRoZSBwcm9ibGVtIEknbSB0cnlpbmcgdG8gc29sdmUgc2VlbXMgdG8gaGluZ2Ugb24gc29tZXRoaW5nIHJlbGF0ZWQgdG8gYExSVV9HRU5gLiBJIHNob3VsZCBnbyBkaXJlY3RseSB0byBgbW0vS2NvbmZpZ2AgdG8gc2VlIGlmIHRoYXQgb3B0aW9uIGlzIGVuYWJsZWQsIGFuZCB1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXMuIEdvdHRhIG1ha2Ugc3VyZSB3ZSdyZSBub3QgbWlzc2luZyBhIGNyaXRpY2FsIGRlcGVuZGVuY3kgb3Igc29tZXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQzOSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA3OjI2LjU4MzMzMTU0NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE2MzgxMTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBMUlVfR0VOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xNDA2PWVuZGlmICMgVVNFUkZBVUxURkRcXG4tLVxcbm1tL0tjb25maWctMTQwOC0jIG11bHRpLWdlbiBMUlUge1xcbm1tL0tjb25maWc6MTQwOTpjb25maWcgTFJVX0dFTlxcbm1tL0tjb25maWctMTQxMC1cXHRib29sIFxcXCJNdWx0aS1HZW4gTFJVXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDE3LVxcbm1tL0tjb25maWc6MTQxODpjb25maWcgTFJVX0dFTl9FTkFCTEVEXFxubW0vS2NvbmZpZy0xNDE5LVxcdGJvb2wgXFxcIkVuYWJsZSBieSBkZWZhdWx0XFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDIzLVxcbm1tL0tjb25maWc6MTQyNDpjb25maWcgTFJVX0dFTl9TVEFUU1xcbm1tL0tjb25maWctMTQyNS1cXHRib29sIFxcXCJGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MzItXFxubW0vS2NvbmZpZzoxNDMzOmNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxcbm1tL0tjb25maWctMTQzNC1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA3OjI2Ljg5OTcyNDI5OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzAyNzA3MTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE1HTFJVIFRlc3RpbmcgXHUwMDI2IEtleSBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIHRvIHJlYWxseSBwdXQgdGhlIE1HTFJVIHBhdGggdGhyb3VnaCBpdHMgcGFjZXMsIGVuYWJsaW5nIGBDT05GSUdfTFJVX0dFTmAgYW5kIGBDT05GSUdfTFJVX0dFTl9FTkFCTEVEYCBzZWVtcyBsaWtlIHRoZSByaWdodCBtb3ZlLiBIb3dldmVyLCB3YWl0IGEgbWludXRlLCBpZiB3ZSBlbmFibGUgYENPTkZJR19MUlVfR0VOX0VOQUJMRURgIG91dHJpZ2h0LCB3ZSBtaWdodCBpbmFkdmVydGVudGx5IGJ5cGFzcyB0aGUgdHJhZGl0aW9uYWwgTFJVIHBhdGggaW4gZGVmYXVsdCBjb25maWd1cmF0aW9ucywgdW5sZXNzIHdlIGV4cGxpY2l0bHkgZm9yY2UgYSBydW50aW1lIHN3aXRjaC4gVGhhdCdzIG5vdCBpZGVhbCwgc2luY2UgdGhlIHBhdGNoIG1vZGlmaWVzIGJvdGggYXBwcm9hY2hlcy4gU28sIEknbGwgYmUgc3VyZSB0byBtYWtlIG5vdGUgb2YgdGhlc2UgY29uY2VybnMuIEkgY2FuIHNpbXBsaWZ5IHRoaW5ncyBieSBsaXN0aW5nIGBNRU1DR2AgYW5kIGBMUlVfR0VOYC5cblxuTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB3aGVyZSB0aGlzIHBhdGNoIHdpbGwgaGF2ZSB0aGUgZ3JlYXRlc3QgaW1wYWN0IGFuZCB3aGVyZSB0ZXN0aW5nIHNob3VsZCBiZSBmb2N1c2VkLiBJJ3ZlIGdvdCB0byBjb25zaWRlcjpcblxuKiAgIGBwcmVwYXJlX3NjYW5fY29udHJvbGBcbiogICBgc2hyaW5rX2luYWN0aXZlX2xpc3RgXG4qICAgYHNocmlua19hY3RpdmVfbGlzdGBcbiogICBgZXZpY3RfZm9saW9zYFxuKiAgIGBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWNgXG4qICAgYG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWNgXG5cbkknbSBldmFsdWF0aW5nIHdoZXRoZXIgYHNocmlua19pbmFjdGl2ZV9saXN0YCBhbmQgYHNocmlua19hY3RpdmVfbGlzdGAgYXJlIGhvdCwgY3JpdGljYWwgcGF0aHMuIEkga25vdyB0aGV5J3JlIGludm9rZWQgZHVyaW5nIG1lbW9yeSByZWNsYWltLCB3aGljaCBjYW4gaGFwcGVuIGZyZXF1ZW50bHkgd2hlbiB0aGUgc3lzdGVtIGlzIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSwgYnV0IHRoZXkncmUgbm90IHF1aXRlIGFzIHViaXF1aXRvdXMgYXMgZnVuY3Rpb25zIGxpa2UgYGttYWxsb2NgIG9yIGBzY2hlZHVsZWAuIGBwcmVwYXJlX3NjYW5fY29udHJvbGAgaXMgYWxzbyBwYXJ0IG9mIHRoYXQgcmVjbGFpbSBwcm9jZXNzLiBgZXZpY3RfZm9saW9zYCBkZWZpbml0ZWx5IGxvb2tzIGtleSBzaW5jZSBpdCdzIGRpcmVjdGx5IGludm9sdmVkIGluIHRoZSBNR0xSVSByZWNsYWltIHByb2Nlc3MuIGBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWNgIGlzIGNhbGxlZCBmcm9tIGBwcmVwYXJlX3NjYW5fY29udHJvbGAsIGFuZCBgbm9kZV9wYWdlX3N0YXRlX21vbm90b25pY2AgaXMgaW4gdHVybiBjYWxsZWQgZnJvbSBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYC4gSSdsbCB3YW50IHRvIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBwcmVwYXJlX3NjYW5fY29udHJvbGAgbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4NTEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDA6MDc6MzIuNjAyNDM1NDU5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzY1NzQ0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJlcGFyZV9zY2FuX2NvbnRyb2xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9MjI3ND1lbnVtIHNjYW5fYmFsYW5jZSB7XFxuLS1cXG5tbS92bXNjYW4uYy0yMjgwLVxcbm1tL3Ztc2Nhbi5jOjIyODE6c3RhdGljIHZvaWQgcHJlcGFyZV9zY2FuX2NvbnRyb2wocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtMjI4Mi17XFxuLS1cXG5tbS92bXNjYW4uYz02MjExPXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjIzMy1cXG5tbS92bXNjYW4uYzo2MjM0OlxcdHByZXBhcmVfc2Nhbl9jb250cm9sKHBnZGF0LCBzYyk7XFxubW0vdm1zY2FuLmMtNjIzNS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDA6MDc6MzIuODc5MDIxNjA4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MTc3NDI3OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgTWVtb3J5IFNocmlua2FnZSBQcm9jZXNzKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgZW50cnkgcG9pbnQgd2UncmUgd29ya2luZyB3aXRoIGhlcmUgaXMgYHNocmlua19ub2RlYC4gVGhhdCdzIHdoZXJlIGl0IGFsbCBiZWdpbnMuIEFuZCBmcm9tIG15IGV4cGVyaWVuY2UsIGBzaHJpbmtfbm9kZWAgZ2V0cyBpbnZva2VkIGZyb20gYSBmZXcga2V5IHBsYWNlczogYGRvX3RyeV90b19mcmVlX3BhZ2VzYCwgYGtzd2FwZF9zaHJpbmtfbm9kZWAsIGBzaHJpbmtfYWxsX21lbW9yeWAsIGFsbCBjb3JlIGNvbXBvbmVudHMgb2YgdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbS4gS25vd2luZyB0aGF0LCBmb2N1c2luZyBpbiBvbiBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgLCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYW5kIGBldmljdF9mb2xpb3NgIHNlZW1zIGxpa2UgdGhlIHJpZ2h0IGFwcHJvYWNoLiBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgd29yayBvZiByZWNsYW1hdGlvbiBpcyBoYXBwZW5pbmcuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgdGhlIGFjdGl2ZSBhbmQgaW5hY3RpdmUgbGlzdCBtYW5pcHVsYXRpb24uIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gYGV2aWN0X2ZvbGlvc2AsIGJlY2F1c2UgdGhhdCB0b3VjaGVzIGRpcmVjdGx5IG9uIHRoZSBkYXRhIHN0cnVjdHVyZXMuIEkgdGhpbmsgaXQgaXMgaW1wb3J0YW50IHRvIGJlIGNvbXByZWhlbnNpdmUgaGVyZS5cblxuQmVmb3JlIEkgZ28gZnVydGhlciwgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGhvdyBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCB3b3JrcyBhZ2Fpbi4gSXQncyBvZnRlbiB0aGUgcm9vdCBvZiBzdWJ0bGUgYnVncyByZWxhdGVkIHRvIHRoZSBib29ra2VlcGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4MTIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDA6MDc6MzYuNjk2NzcxNTIyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc4ODE3MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9NDg2PXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MDgtLyoqXFxubW0vbWVtY29udHJvbC5jOjUwOTogKiBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMgLSBub24tY2xhbXBpbmcgbHJ1dmVjIHN0YXQgcmVhZCBmb3IgZGVsdGEgc2FtcGxpbmdcXG5tbS9tZW1jb250cm9sLmMtNTEwLSAqIEBscnV2ZWM6IHRoZSBMUlUgdmVjdG9yIHRvIHJlYWQgZnJvbVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyNi0gKi9cXG5tbS9tZW1jb250cm9sLmM6NTI3OnVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5tbS9tZW1jb250cm9sLmMtNTI4LVxcdFxcdFxcdFxcdFxcdCAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA3OjM2Ljg2NDY2MjIwMVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTYzNTk2NDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIE5ldyBGdW5jdGlvbioqXG5cbkFscmlnaHQsIGEgbmV3IGZ1bmN0aW9uLCBnb3QgaXQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGluIGFuZCB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMuIEZpcnN0LCBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIHF1aWNrIGNoZWNrIG9uIGBub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYC4gVGhhdCBzcGVjaWZpYyBmdW5jdGlvbiBvciB2YXJpYWJsZSBuYW1lIGltbWVkaWF0ZWx5IHJpbmdzIGEgYmVsbCDigJMgaXQncyBsaWtlbHkgYSBrZXkgZWxlbWVudCBvciBkZXBlbmRlbmN5IGhlcmUuIEknbGwgbmVlZCB0byBhc3Nlc3MgaG93IHRoaXMgbmV3IGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoLCBvciBtb2RpZmllcywgd2hhdGV2ZXIgYmVoYXZpb3IgYG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWNgIGlzIHJlc3BvbnNpYmxlIGZvci4gVW5kZXJzdGFuZGluZyB0aGF0IHJlbGF0aW9uc2hpcCBpcyBjcnVjaWFsIGJlZm9yZSBJIGNhbiBmdWxseSBncmFzcCB0aGUgaW50ZW50IGFuZCBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoZSBpbnRyb2R1Y3Rpb24uIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGF0IHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoaXMgY29yZSBjb25jZXB0IHdpbGwgcmV2ZWFsIHRoZSBmdW5jdGlvbidzIHRydWUgcHVycG9zZSBhbmQgbGlrZWx5IGFyZWFzIGZvciBwb3RlbnRpYWwgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjM5NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA3OjM5LjgyODI2NjQ0NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE0MDU0ODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zdGF0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zdGF0LmM9MTAyMD11bnNpZ25lZCBsb25nIG5vZGVfcGFnZV9zdGF0ZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxcbi0tXFxubW0vdm1zdGF0LmMtMTAzMC0gKiBzbmFwc2hvdCBhIG1vbm90b25pY2FsbHktaW5jcmVtZW50ZWQgY291bnRlciBhbmQgc3VidHJhY3QgdHdvIHNhbXBsZXMuXFxubW0vdm1zdGF0LmM6MTAzMTogKiBTZWUgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMoKSBmb3IgdGhlIHJhdGlvbmFsZS5cXG5tbS92bXN0YXQuYy0xMDMyLSAqL1xcbm1tL3Ztc3RhdC5jOjEwMzM6dW5zaWduZWQgbG9uZyBub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxubW0vdm1zdGF0LmMtMTAzNC1cXHRcXHRcXHRcXHRcXHRlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW0pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA3OjQwLjA0MjMzMTY0OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjgyMzIxNzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBSZWNlbnQgS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50IENoYW5nZXMqKlxuXG5Pa2F5LCBzbyB0aGlzIGlzIG5ldyBpbmZvcm1hdGlvbi4gSSdtIGZvY3VzaW5nIG9uIHRoZSByZWNlbnQgbW9kaWZpY2F0aW9ucywgYW5kIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBiZWVuIHRvdWNoZWQgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS5cblxuSXQgc2VlbXMgd2UndmUgZ290IGEgbGlzdCBvZiBtb2RpZmllZCBmdW5jdGlvbnMuIEFscmlnaHQsIGxldCdzIHNlZSwgd2UgaGF2ZSBgcGFnZW91dGAgaW4gYG1tL3Ztc2Nhbi5jYCwgYHNocmlua19mb2xpb19saXN0YCBpbiBgbW0vdm1zY2FuLmNgLCBgd29ya2luZ3NldF9yZWZhdWx0YCBpbiBgbW0vd29ya2luZ3NldC5jYCwgYGxydV9yZXBhcmVudF9tZW1jZ2AgaW4gYG1tL3N3YXAuY2AsIGFuZCBgbWVtY2cxX3N0YXRfZm9ybWF0YCBpbiBgbW0vbWVtY29udHJvbC12MS5jYC5cblxuUmlnaHQuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlc2UuIEknbGwgYmVnaW4gYnkgZm9jdXNpbmcgb24gYHBhZ2VvdXRgLiBJdCdzIGFsd2F5cyBhIGNyaXRpY2FsIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjc4OCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwMDowNzo0My43MjQ2NTgzMjFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NjM4Mzg4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWdlb3V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTU4Mj12b2lkIF9fYWNjdF9yZWNsYWltX3dyaXRlYmFjayhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vdm1zY2FuLmMtNjAyLVxcbm1tL3Ztc2Nhbi5jOjYwMzovKiBwb3NzaWJsZSBvdXRjb21lIG9mIHBhZ2VvdXQoKSAqL1xcbm1tL3Ztc2Nhbi5jLTYwNC10eXBlZGVmIGVudW0ge1xcbi0tXFxubW0vdm1zY2FuLmMtNjEyLVxcdFBBR0VfQ0xFQU4sXFxubW0vdm1zY2FuLmM6NjEzOn0gcGFnZW91dF90O1xcbm1tL3Ztc2Nhbi5jLTYxNC1cXG5tbS92bXNjYW4uYy02MTUtLypcXG5tbS92bXNjYW4uYzo2MTY6ICogcGFnZW91dCBpcyBjYWxsZWQgYnkgc2hyaW5rX2ZvbGlvX2xpc3QoKSBmb3IgZWFjaCBkaXJ0eSBmb2xpby5cXG5tbS92bXNjYW4uYy02MTctICovXFxubW0vdm1zY2FuLmM6NjE4OnN0YXRpYyBwYWdlb3V0X3QgcGFnZW91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG5tbS92bXNjYW4uYy02MTktXFx0XFx0XFx0IHN0cnVjdCBzd2FwX2lvY2IgKipwbHVnLCBzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KVxcbi0tXFxubW0vdm1zY2FuLmM9MTA1NT1zdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXFxuLS1cXG5tbS92bXNjYW4uYy0xMzk2LVxcdFxcdFxcdHRyeV90b191bm1hcF9mbHVzaF9kaXJ0eSgpO1xcbm1tL3Ztc2Nhbi5jOjEzOTc6XFx0XFx0XFx0c3dpdGNoIChwYWdlb3V0KGZvbGlvLCBtYXBwaW5nLCBcXHUwMDI2cGx1ZywgZm9saW9fbGlzdCkpIHtcXG5tbS92bXNjYW4uYy0xMzk4LVxcdFxcdFxcdGNhc2UgUEFHRV9LRUVQOlxcbi0tXFxubW0vdm1zY2FuLmM9MjIxMz1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfbGlzdChlbnVtIGxydV9saXN0IGxydSwgdW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbi0tXFxubW0vdm1zY2FuLmMtMjI0MC0gKiBUaGUgaW5hY3RpdmVfcmF0aW8gaXMgdGhlIHRhcmdldCByYXRpbyBvZiBBQ1RJVkUgdG8gSU5BQ1RJVkUgZm9saW9zXFxubW0vdm1zY2FuLmM6MjI0MTogKiBvbiB0aGlzIExSVSwgbWFpbnRhaW5lZCBieSB0aGUgcGFnZW91dCBjb2RlLiBBbiBpbmFjdGl2ZV9yYXRpb1xcbm1tL3Ztc2Nhbi5jLTIyNDItICogb2YgMyBtZWFucyAzOjEgb3IgMjUlIG9mIHRoZSBmb2xpb3MgYXJlIGtlcHQgb24gdGhlIGluYWN0aXZlIGxpc3QuXFxuLS1cXG5tbS92bXNjYW4uYz03MzY3PXN0YXRpYyB2b2lkIGtzd2FwZF90cnlfdG9fc2xlZXAocGdfZGF0YV90ICpwZ2RhdCwgaW50IGFsbG9jX29yZGVyLCBpbnQgcmVjbGFpbV9vcmRlcixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc0NTEtLypcXG5tbS92bXNjYW4uYzo3NDUyOiAqIFRoZSBiYWNrZ3JvdW5kIHBhZ2VvdXQgZGFlbW9uLCBzdGFydGVkIGFzIGEga2VybmVsIHRocmVhZFxcbm1tL3Ztc2Nhbi5jLTc0NTMtICogZnJvbSB0aGUgaW5pdCBwcm9jZXNzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwMDowNzo0My45MTEwNTEzNzNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA5NTU3NTI4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zIGhlcmUuIEludGVyZXN0aW5nLCBgcGFnZW91dGAgaXMgZGVmaW5lZCBhcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCB1c3VhbGx5IG1lYW5zIGl0J3MgbGltaXRlZCBpbiBzY29wZSBhbmQgY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBzYW1lIHNvdXJjZSBmaWxlLiBHb29kIHRvIGtub3cgZm9yIHVuZGVyc3RhbmRpbmcgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLiBUaGVuIHRoZXJlJ3MgYHNocmlua19mb2xpb19saXN0YCwgYWxzbyBzdGF0aWMuIEFnYWluLCByZWluZm9yY2VzIHRoZSBpZGVhIG9mIGxpbWl0ZWQgdmlzaWJpbGl0eSBhbmQgYSBzcGVjaWZpYyBwdXJwb3NlIHdpdGhpbiBpdHMgY29tcGlsYXRpb24gdW5pdC5cblxuQnV0IG5vdywgYHdvcmtpbmdzZXRfcmVmYXVsdGAgaGFzIGJlZW4gZXhwb3J0ZWQuIFRoYXQgc3VnZ2VzdHMgaXQncyBkZXNpZ25lZCB0byBiZSB1c2VkIGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0sIHBvdGVudGlhbGx5IGJ5IHRoZSBrZXJuZWwgaXRzZWxmIG9yIG1heWJlIGV2ZW4gdXNlci1zcGFjZSBwcm9jZXNzZXMgaWYgdGhlIEFQSSBpcyBleHBvc2VkIGNvcnJlY3RseS4gVGhhdCdzIHRoZSBvbmUgSSBuZWVkIHRvIGZvY3VzIG9uLiBMZXQncyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgaG93IGB3b3JraW5nc2V0X3JlZmF1bHRgIGlzIHVzZWQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgc3RhdGljIGBwYWdlb3V0YCBhbmQgYHNocmlua19mb2xpb19saXN0YC4gVGhpcyBpcyB3aGVyZSB0aGUgaW50ZXJlc3Rpbmcgc3R1ZmYgdXN1YWxseSBpcy4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzc0NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA3OjQ3LjAwNjYzMTE1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDk1OTA1MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid29ya2luZ3NldF9yZWZhdWx0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3dvcmtpbmdzZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS93b3JraW5nc2V0LmM9NDMwPWJvb2wgd29ya2luZ3NldF90ZXN0X3JlY2VudCh2b2lkICpzaGFkb3csIGJvb2wgZmlsZSwgYm9vbCAqd29ya2luZ3NldCxcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy01MzktLyoqXFxubW0vd29ya2luZ3NldC5jOjU0MDogKiB3b3JraW5nc2V0X3JlZmF1bHQgLSBFdmFsdWF0ZSB0aGUgcmVmYXVsdCBvZiBhIHByZXZpb3VzbHkgZXZpY3RlZCBmb2xpby5cXG5tbS93b3JraW5nc2V0LmMtNTQxLSAqIEBmb2xpbzogVGhlIGZyZXNobHkgYWxsb2NhdGVkIHJlcGxhY2VtZW50IGZvbGlvLlxcbi0tXFxubW0vd29ya2luZ3NldC5jLTU0Ny0gKi9cXG5tbS93b3JraW5nc2V0LmM6NTQ4OnZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcXG5tbS93b3JraW5nc2V0LmMtNTQ5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDA6MDc6NDcuMTU2MjMxMTY1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxMTY5ODMyMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgS2V5IEZ1bmN0aW9ucyBhbmQgQ29uZmlndXJhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGZvY3VzIHJpZ2h0IG5vdyBpcyBwaW5wb2ludGluZyB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIGFuZCBjb25maWd1cmF0aW9ucy4gQmFzZWQgb24gd2hhdCBJJ3ZlIHNlZW4sIEkndmUgaWRlbnRpZmllZCBzZXZlcmFsIGZ1bmN0aW9ucyB0aGF0IGFyZSBjZW50cmFsIHRvIHRoZSB3b3JrIEknbSBkb2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgc2NvcGUgYW5kIGhvdyB0aGV5J3JlIHVzZWQuIE15IGluaXRpYWwgbGlzdCBpbmNsdWRlczogYHByZXBhcmVfc2Nhbl9jb250cm9sYCwgYHNocmlua19pbmFjdGl2ZV9saXN0YCwgYHNocmlua19hY3RpdmVfbGlzdGAsIGBldmljdF9mb2xpb3NgLCBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCwgYG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWNgLCBhbmQgYHdvcmtpbmdzZXRfcmVmYXVsdGAuXG5cbk5vdywgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHNjb3BlIG9mIHRoZXNlIGZ1bmN0aW9ucy4gQXJlIHRoZXkgZ2xvYmFsbHkgYWNjZXNzaWJsZSwgb3IgYXJlIHRoZXkgc3RhdGljIHdpdGhpbiBhIHNwZWNpZmljIG1vZHVsZT8gSXQgbG9va3MgbGlrZSBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCBpcyBnbG9iYWxseSBkZWNsYXJlZCBpbiBgbW0vbWVtY29udHJvbC5jYCBhbmQgYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYCBhbmQgYG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWNgIGlzIGluIGBtbS92bXN0YXQuY2AgYW5kIGBpbmNsdWRlL2xpbnV4L3Ztc3RhdC5oYC4gSSBjb25maXJtIHRoYXQgYGV2aWN0X2ZvbGlvc2AgaXMgdGhlIGNvcnJlY3QgZnVuY3Rpb24gbmFtZSB3aXRoaW4gYG1tL3Ztc2Nhbi5jYC4gU2ltaWxhcmx5LCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGFuZCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYW5kIGBwcmVwYXJlX3NjYW5fY29udHJvbGAgYXJlIHN0YXRpYyB3aXRoaW4gYG1tL3Ztc2Nhbi5jYC4gQW5kIGB3b3JraW5nc2V0X3JlZmF1bHRgIGlzIGdsb2JhbCBpbiBgbW0vd29ya2luZ3NldC5jYC4gSSBjb25maXJtIGBwYWdlb3V0YCBhbmQgYHNocmlua19mb2xpb19saXN0YCBhcmUgc3RhdGljIHdpdGhpbiBgbW0vdm1zY2FuLmNgLlxuXG5Pa2F5LCBzbyBteSBjb25maXJtZWQgbGlzdCBvZiBGb2N1c1N5bWJvbHMgaXM6XG5gcHJlcGFyZV9zY2FuX2NvbnRyb2xgXG5gc2hyaW5rX2luYWN0aXZlX2xpc3RgXG5gc2hyaW5rX2FjdGl2ZV9saXN0YFxuYGV2aWN0X2ZvbGlvc2BcbmBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWNgXG5gbm9kZV9wYWdlX3N0YXRlX21vbm90b25pY2BcbmB3b3JraW5nc2V0X3JlZmF1bHRgXG5cbk5leHQsIEkgbmVlZCB0byBjb25zaWRlciBhbnkgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEkndmUgbm90ZWQgdGhyZWUga2V5IG9uZXM6IGBDT05GSUdfTUVNQ0dgLCBgQ09ORklHX0xSVV9HRU5gLCBhbmQgYENPTkZJR19MUlVfR0VOX0VOQUJMRURgLiBUaGUgcHJlc2VuY2Ugb2YgYENPTkZJR19MUlVfR0VOYCBtZWFucyBgZXZpY3RfZm9saW9zYCAqY291bGQqIGJlIGNvbXBpbGVkLiBCdXQgdGhlIGV4ZWN1dGlvbiBvZiBgZXZpY3RfZm9saW9zYCBtYXkgZGVwZW5kIG9uIHJ1bnRpbWUgb3IgY29tcGlsZS10aW1lIG9wdGlvbnMuIFNvIHRvIGVuc3VyZSBJJ20gY292ZXJpbmcgYWxsIGJhc2VzLCBJIHNob3VsZCBpbmNsdWRlIGBMUlVfR0VOX0VOQUJMRURgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODIxMSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwMDowNzo1NC4yNzMyMjAzNjFaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjI5NjkzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTFJVX0dFTl9FTkFCTEVEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xNDA5PWNvbmZpZyBMUlVfR0VOXFxuLS1cXG5tbS9LY29uZmlnLTE0MTctXFxubW0vS2NvbmZpZzoxNDE4OmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcXG5tbS9LY29uZmlnLTE0MTktXFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA3OjU0Ljc2NTUyNjY0M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTY3NjcxODkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIFN3YXAgYW5kIExSVSBHZW5lcmF0aW9uIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gYExSVV9HRU5fRU5BQkxFRGAgaXMgaW5kZWVkIGEgY29uZmlndXJhdGlvbiBvcHRpb24sIHRoYXQncyBjbGVhciBlbm91Z2guIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhcm91bmQgdGhpcyBjaGFuZ2UuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdoZXRoZXIgb3Igbm90IHdlIG5lZWQgdG8gY29uc2lkZXIgYENPTkZJR19TV0FQYCBpbiB0aGlzIGVxdWF0aW9uLiBUaGUgcGF0Y2ggdG91Y2hlcyBib3RoIGBtbS9zd2FwLmNgIGFuZCBgaW5jbHVkZS9saW51eC9zd2FwLmhgLiBUaGF0J3MgdGhlIGtleS4gQWx0aG91Z2ggYG1tL3N3YXAuY2AgaXMgYWx3YXlzIGNvbXBpbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTM5NiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA3OjU3LjczMzIwNDM5NloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM2MDc0NDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN3YXAub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT01MT1vYmoteVxcdFxcdFxcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcXFxcbm1tL01ha2VmaWxlLTUyLVxcdFxcdFxcdCAgIG1hY2Nlc3MubyBwYWdlLXdyaXRlYmFjay5vIGZvbGlvLWNvbXBhdC5vIFxcXFxcXG5tbS9NYWtlZmlsZTo1MzpcXHRcXHRcXHQgICByZWFkYWhlYWQubyBzd2FwLm8gdHJ1bmNhdGUubyB2bXNjYW4ubyBzaHJpbmtlci5vIFxcXFxcXG5tbS9NYWtlZmlsZS01NC1cXHRcXHRcXHQgICBzaG1lbS5vIHV0aWwubyBtbXpvbmUubyB2bXN0YXQubyBiYWNraW5nLWRldi5vIFxcXFxcXG4tLVxcbm1tL01ha2VmaWxlPTc4PW9iai0kKENPTkZJR19TV0FQKVxcdCs9IHBhZ2VfaW8ubyBzd2FwX3N0YXRlLm8gc3dhcGZpbGUub1xcbm1tL01ha2VmaWxlOjc5Om9iai0kKENPTkZJR19aU1dBUClcXHQrPSB6c3dhcC5vXFxubW0vTWFrZWZpbGUtODAtb2JqLSQoQ09ORklHX0hBU19ETUEpXFx0Kz0gZG1hcG9vbC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA3OjU3Ljk2OTI4ODlaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMyMjMxNDYxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyB0aGUgRGVwZW5kZW5jaWVzIG9mIGBzd2FwLm9gKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgc3dhcC5vYCBpcyBpbmRlZWQgaW5jbHVkZWQgaW4gYG9iai15YC4gTXkgbmV4dCBzdGVwIGlzIHRvIG5haWwgZG93biB0aGUgZXhhY3QgY29uZmlndXJhdGlvbiBvcHRpb25zIGludm9sdmVkIGhlcmUuIEl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIGBNRU1DR2AsIGBMUlVfR0VOYCwgYW5kIGBMUlVfR0VOX0VOQUJMRURgLiBOb3csIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgdGhlIGJlaGF2aW9yIG9mIGBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWNgLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgbW0vbWVtY29udHJvbC5jYC5cblxuUmlnaHQsIGlmIGBDT05GSUdfTUVNQ0dgICppc24ndCogc2V0LCBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCBpcyBkZWZpbmVkIGFzIGFuIGlubGluZSBmdW5jdGlvbiB3aXRoaW4gYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYC4gVGhhdCdzIGEgY3J1Y2lhbCBkZXRhaWwgdG8gcmVtZW1iZXIuIEknbGwgbWFrZSBzdXJlIHRvIG5vdGUgdGhpcyBkaWZmZXJlbmNlIGluIGJlaGF2aW9yIGRlcGVuZGluZyBvbiB3aGV0aGVyIE1FTUNHIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODIxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA4OjAxLjI5MTYwODMyNFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzcxNTE5Mjk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxydXZlY19wYWdlX3N0YXRlX21vbm90b25pY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD05MzM9dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo5MzQ6dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTkzNS1cXHRcXHRcXHRcXHRcXHQgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTEzNzc9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEzODItXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTM4MzpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMzg0LVxcdFxcdFxcdFxcdFxcdFxcdFxcdGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwMDowODowMS42NjMxNDYyODlaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ5NjI4NTE0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoZXNlIHRob3VnaHRzLCBwdXR0aW5nIG15c2VsZiBpbiB0aGUgcG9zaXRpb24gb2YgbmVlZGluZyB0byB1bmRlcnN0YW5kIHRoaXMgY29kZTpcblxuKipBbmFseXppbmcgTWVtb3J5IENvbnRyb2wgd2l0aCBDT05GSUdfTUVNQ0cqKlxuXG5SaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBtZW1vcnkgY29udHJvbCBjb2RlLiBGaXJzdCwgdGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGBtbS9tZW1jb250cm9sLmNgIGZ1bmN0aW9uYWxpdHkgaW5saW5lIG9yIG91dC1vZi1saW5lPyBUaGUgbm90ZSBjbGVhcmx5IHN0YXRlcyB0aGF0IGlmIGAhQ09ORklHX01FTUNHYCBpcyB0cnVlLCB0aGVuIGl0J3MgaW5saW5lLiBUaGF0J3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gVGhlcmVmb3JlLCB0byAqcmVhbGx5KiB0ZXN0IHRoZSBvdXQtb2YtbGluZSBpbXBsZW1lbnRhdGlvbiwgd2UncmUgZ29pbmcgdG8gbmVlZCB0byBlbnN1cmUgYE1FTUNHYCBpcyBkZWZpbmVkIGFuZCBhY3RpdmUuIFRoYXQncyB0aGUgYmFzZWxpbmUsIHRoZSBjb3JlIGNvbmRpdGlvbi5cblxuTm93LCB3aGVyZSBkbyB3ZSBnbyBmcm9tIHRoZXJlPyBUaGUgbmV4dCBwbGFjZSB0byBjaGVjayBpcyBgbW0vdm1zdGF0LmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCBmdW5jdGlvbi4gSSBoYXZlIGEgaHVuY2gsIGFuZCB0aGlzIG5lZWRzIHRvIGJlIGNvbmZpcm1lZCwgdGhhdCBpZiBgQ09ORklHX1NNUGAgaXMgKm5vdCogZGVmaW5lZCwgdGhlbiAqdGhhdCogcG9ydGlvbiBvZiB0aGUgY29kZSBpcyBsaWtlbHkgdG8gYmUgaW5saW5lIGFzIHdlbGwuIFRoaXMsIEkgbmVlZCB0byB2ZXJpZnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMzg0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDA6MDg6MDUuMTU5NDM3NDhaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4Mjg2OTc4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvdm1zdGF0LmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC92bXN0YXQuaD0xODY9dW5zaWduZWQgbG9uZyBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlX3BhZ2VzKGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbSlcXG4tLVxcbmluY2x1ZGUvbGludXgvdm1zdGF0LmgtMjAzLSAqL1xcbmluY2x1ZGUvbGludXgvdm1zdGF0Lmg6MjA0OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW0pXFxuaW5jbHVkZS9saW51eC92bXN0YXQuaC0yMDUte1xcbi0tXFxuaW5jbHVkZS9saW51eC92bXN0YXQuaD0yNzI9ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbm9kZV9wYWdlX3N0YXRlX3BhZ2VzKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuaW5jbHVkZS9saW51eC92bXN0YXQuaC0yNzMtXFx0XFx0XFx0XFx0XFx0ICAgZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKTtcXG5pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oOjI3NDpleHRlcm4gdW5zaWduZWQgbG9uZyBub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuaW5jbHVkZS9saW51eC92bXN0YXQuaC0yNzUtXFx0XFx0XFx0XFx0XFx0ICAgICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbSk7XFxuaW5jbHVkZS9saW51eC92bXN0YXQuaD0yNzY9ZXh0ZXJuIHZvaWQgZm9sZF92bV9udW1hX2V2ZW50cyh2b2lkKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvdm1zdGF0LmgtMjgwLSNkZWZpbmUgbm9kZV9wYWdlX3N0YXRlX3BhZ2VzKG5vZGUsIGl0ZW0pIGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGVfcGFnZXMoaXRlbSlcXG5pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oOjI4MTojZGVmaW5lIG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMobm9kZSwgaXRlbSkgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMoaXRlbSlcXG5pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oLTI4Mi1zdGF0aWMgaW5saW5lIHZvaWQgZm9sZF92bV9udW1hX2V2ZW50cyh2b2lkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwMDowODowNS40NDIzMTgwMzdaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA2MTI5NDM5NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIExSVSBDb3N0IE1vZGVsIGFuZCBTdGF0aXN0aWNzIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgZmlyc3QgdGhpbmcgSSdtIHNlZWluZyBpcyBob3cgYGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCBpcyBjb25kaXRpb25hbC4gSXQncyBkZWZpbmVkIHdoZW4gYCFDT05GSUdfU01QYCwgbWVhbmluZyB0aGF0IHRvIHRlc3QgdGhlIG91dC1vZi1saW5lIHZlcnNpb24gd2l0aGluIGBtbS92bXN0YXQuY2AsIFNNUCAoU3ltbWV0cmljIE11bHRpcHJvY2Vzc2luZykgbmVlZHMgdG8gYmUgZW5hYmxlZC4gSG93ZXZlciwgU01QIGlzIGFsbW9zdCBhbHdheXMgZW5hYmxlZCB0aGVzZSBkYXlzLCBzbyB3aGV0aGVyIHdlIGV4cGxpY2l0bHkgbGlzdCBpdCBvciBub3QgaXMgZXNzZW50aWFsbHkgaXJyZWxldmFudCBmb3IgY292ZXJhZ2UuXG5cbk5vdywgbGV0J3MgZ2V0IGRvd24gdG8gdGhlIG1lYXQgb2YgdGhlIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBzdW1tYXJpemUgdGhlIGNvcmUgZnVuY3Rpb25zIGFmZmVjdGVkOiBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgLCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYGV2aWN0X2ZvbGlvc2AsIGBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWNgLCBgbm9kZV9wYWdlX3N0YXRlX21vbm90b25pY2AsIGFuZCBgd29ya2luZ3NldF9yZWZhdWx0YC4gVGhlc2UgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFuZCBjb3JlIGxvZ2ljIGltcGFjdGVkIGJ5IHRoZSBjaGFuZ2VzIHRvIHRoZSBMUlUgY29zdCBtb2RlbCBhbmQgc3RhdGlzdGljcy5cblxuSSBzaG91bGQgYWxzbyBjaGVjayBpZiBgc2hyaW5rX2ZvbGlvX2xpc3RgIHNob3VsZCBiZSBpbmNsdWRlZC4gSXQgbG9va3MgbGlrZSBpdCBvbmx5IGhhcyBhIG1pbm9yIG1vZGlmaWNhdGlvbiwganVzdCByZW1vdmluZyBhIGBzdGF0LVx1MDAzZW5yX3BhZ2VvdXQgKz0gbnJfcGFnZXM7YCBzdGF0ZW1lbnQuIFRoaXMgaXNuJ3QgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSwgc28gSSdtIG5vdCBpbW1lZGlhdGVseSBjb25jZXJuZWQuIE9uIHRoZSBvdGhlciBoYW5kLCB0aGUgYHBhZ2VvdXRgIGZ1bmN0aW9uICpkb2VzKiBpbnZvbHZlIGEgY2hhbmdlIGZyb20gYSBub2RlIHN0YXQgdG8gYW4gbHJ1dmVjIHN0YXQsIGFzIGluZGljYXRlZCBieSB0aGUgY2hhbmdlOlxuXG5gYGBjXG4tXHRub2RlX3N0YXRfYWRkX2ZvbGlvKGZvbGlvLCBOUl9WTVNDQU5fV1JJVEUpO1xuK1x0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9WTVNDQU5fV1JJVEUsIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG5gYGBcblxuU28gYHBhZ2VvdXRgIHByb2JhYmx5ICpzaG91bGQqIGJlIGNvbnNpZGVyZWQuXG5cbkxldCdzIGNoZWNrIGBscnVfcmVwYXJlbnRfbWVtY2dgLiBJdCdzIG9ubHkgcmVtb3ZpbmcgbGluZXM6XG5cbmBgYGNcbi1cdHBhcmVudF9scnV2ZWMtXHUwMDNlYW5vbl9jb3N0ICs9IGNoaWxkX2xydXZlYy1cdTAwM2Vhbm9uX2Nvc3Q7XG4tXHRwYXJlbnRfbHJ1dmVjLVx1MDAzZWZpbGVfY29zdCArPSBjaGlsZF9scnV2ZWMtXHUwMDNlZmlsZV9jb3N0O1xuYGBgXG5cblNpbWlsYXJseSwgYG1lbWNnMV9zdGF0X2Zvcm1hdGAgaXMganVzdCByZWFkaW5nIGZyb20gYSBuZXcgc3RydWN0OlxuXG5gYGBjXG4tXHRcdFx0YW5vbl9jb3N0ICs9IG16LVx1MDAzZWxydXZlYy5hbm9uX2Nvc3Q7XG4tXHRcdFx0ZmlsZV9jb3N0ICs9IG16LVx1MDAzZWxydXZlYy5maWxlX2Nvc3Q7XG4rXHRcdFx0YW5vbl9jb3N0ICs9IG16LVx1MDAzZWxydXZlYy5jb3N0W1dPUktJTkdTRVRfQU5PTl0uY291bnQ7XG4rXHRcdFx0ZmlsZV9jb3N0ICs9IG16LVx1MDAzZWxydXZlYy5jb3N0W1dPUktJTkdTRVRfRklMRV0uY291bnQ7XG5gYGBcblxuU28gdGhlIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgZm9jdXNlZCBpbjogYHByZXBhcmVfc2Nhbl9jb250cm9sYCwgYHNocmlua19pbmFjdGl2ZV9saXN0YCwgYHNocmlua19hY3RpdmVfbGlzdGAsIGBldmljdF9mb2xpb3NgLCBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCwgYG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWNgLCBgd29ya2luZ3NldF9yZWZhdWx0YCwgYW5kIGBwYWdlb3V0YC4gSSdtIHVwZGF0aW5nIG15IGluaXRpYWwgbGlzdCB0byByZWZsZWN0IHRoaXMgYW5hbHlzaXM6XG5cbmBgYGpzb25cbltcbiAgXCJwcmVwYXJlX3NjYW5fY29udHJvbFwiLFxuICBcInNocmlua19pbmFjdGl2ZV9saXN0XCIsXG4gIFwic2hyaW5rX2FjdGl2ZV9saXN0XCIsXG4gIFwiZXZpY3RfZm9saW9zXCIsXG4gIFwibHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljXCIsXG4gIFwibm9kZV9wYWdlX3N0YXRlX21vbm90b25pY1wiLFxuICBcIndvcmtpbmdzZXRfcmVmYXVsdFwiLFxuICBcInBhZ2VvdXRcIlxuXVxuYGBgXG5cbkZpbmFsbHksIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGhlcmUgc2hvdWxkIGluY2x1ZGUgYE1FTUNHYCwgYExSVV9HRU5gLCBhbmQgYExSVV9HRU5fRU5BQkxFRGAuIFRoZXNlIHNob3VsZCBiZSB0aGUgbWluaW1hbCBuZWNlc3NhcnkgZm9yIGZ1enppbmcuXG5cbmBgYGpzb25cbltcbiAgXCJNRU1DR1wiLFxuICBcIkxSVV9HRU5cIixcbiAgXCJMUlVfR0VOX0VOQUJMRURcIlxuXVxuYGBgXG5cbkluIHN1bW1hcnksIHRoaXMgcGF0Y2ggcHJvZm91bmRseSBhbHRlcnMgdGhlIExSVSBjb3N0IG1vZGVsIGFuZCBzdGF0aXN0aWNzIHRyYWNraW5nIHdpdGhpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudC4gSXQgaW50cm9kdWNlcyBtb25vdG9uaWMgcGFnZSBzdGF0ZSB0cmFja2luZyBmb3IgYm90aCBMUlUgdmVjdG9ycyBhbmQgbm9kZXMsIGFuZCBjaGFuZ2VzIGhvdyBgYW5vbl9jb3N0YCBhbmQgYGZpbGVfY29zdGAgYXJlIGNvbXB1dGVkIGR1cmluZyBtZW1vcnkgcmVjbGFpbS4gSXQgYWxzbyBtb2RpZmllcyBib3RoIHRyYWRpdGlvbmFsIExSVSBhbmQgTXVsdGktR2VuIExSVSAoTUdMUlUpIHJlY2xhaW0gcGF0aHMgdG8gdXNlIHRoZSB1cGRhdGVkIGNvc3QgbW9kZWwgYW5kIHN0YXRpc3RpY3MuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgd2hpY2ggY292ZXIgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBuZWVkIHRvIGJlIGZ1enplZC4gSSd2ZSBkb3VibGUgY2hlY2tlZCB0aGF0IHRoZSBjb25maWcgbmFtZXMgKGBMUlVfR0VOYCwgYExSVV9HRU5fRU5BQkxFRGAgYW5kIGBNRU1DR2ApIGFyZSBjb3JyZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTA5MiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwMDowODoxNi4wNTUyNjc0MjRaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxODgxNTE4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNQ0dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDYzPWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xcbi0tXFxuaW5pdC9LY29uZmlnLTEwNzItXFxuaW5pdC9LY29uZmlnOjEwNzM6Y29uZmlnIE1FTUNHXFxuaW5pdC9LY29uZmlnLTEwNzQtXFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5pbml0L0tjb25maWctMTA4MS1cXG5pbml0L0tjb25maWc6MTA4Mjpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbmluaXQvS2NvbmZpZy0xMDgzLVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDg4LVxcbmluaXQvS2NvbmZpZzoxMDg5OmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluaXQvS2NvbmZpZy0xMDkwLVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDk1LVxcbmluaXQvS2NvbmZpZzoxMDk2OmNvbmZpZyBNRU1DR19WMVxcbmluaXQvS2NvbmZpZy0xMDk3LVxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA4OjE2LjM3NDA5Mjg5OFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzAyMjA0NDExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIENvZGUqKlxuXG5ZZXMsIHRoYXQncyBpdCEgTG9va2luZyBiYWNrLCBgTUVNQ0dgIGlzIGRlZmluaXRlbHkgdGhlIGNvcnJlY3QgY29tcG9uZW50IHRvIGJlIGZvY3VzaW5nIG9uLiBUaGF0J3MgdGhlIGtleS4gTm93IHRoYXQgSSd2ZSBlc3RhYmxpc2hlZCB0aGF0LCBsZXQncyBtb3ZlIGZvcndhcmQgYW5kIGNhbGwgYHNldC1yZXN1bHRzYC4gSXQncyB0aGUgbG9naWNhbCBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMTYzLCJPdXRwdXRUb2tlbnMiOjIxNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA4OjE5LjY3NjMwMjMzOVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNzY5NzEyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInByZXBhcmVfc2Nhbl9jb250cm9sXCIsXG4gICAgXCJzaHJpbmtfaW5hY3RpdmVfbGlzdFwiLFxuICAgIFwic2hyaW5rX2FjdGl2ZV9saXN0XCIsXG4gICAgXCJldmljdF9mb2xpb3NcIixcbiAgICBcImxydXZlY19wYWdlX3N0YXRlX21vbm90b25pY1wiLFxuICAgIFwibm9kZV9wYWdlX3N0YXRlX21vbm90b25pY1wiLFxuICAgIFwid29ya2luZ3NldF9yZWZhdWx0XCIsXG4gICAgXCJwYWdlb3V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIExSVSBjb3N0IG1vZGVsIGFuZCBzdGF0aXN0aWNzIHRyYWNraW5nIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gSXQgaW50cm9kdWNlcyBtb25vdG9uaWMgcGFnZSBzdGF0ZSB0cmFja2luZyBmb3IgTFJVIHZlY3RvcnMgYW5kIG5vZGVzLCBhbmQgdXBkYXRlcyBob3cgYGFub25fY29zdGAgYW5kIGBmaWxlX2Nvc3RgIGFyZSBjYWxjdWxhdGVkIGR1cmluZyBtZW1vcnkgcmVjbGFpbS4gSXQgYWxzbyBtb2RpZmllcyBib3RoIHRoZSB0cmFkaXRpb25hbCBMUlUgYW5kIE11bHRpLUdlbiBMUlUgKE1HTFJVKSByZWNsYWltIHBhdGhzIHRvIHVzZSB0aGUgbmV3IGNvc3QgbW9kZWwgYW5kIHN0YXRpc3RpY3MuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHJlcGFyZV9zY2FuX2NvbnRyb2xcIixcbiAgICBcInNocmlua19pbmFjdGl2ZV9saXN0XCIsXG4gICAgXCJzaHJpbmtfYWN0aXZlX2xpc3RcIixcbiAgICBcImV2aWN0X2ZvbGlvc1wiLFxuICAgIFwibHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljXCIsXG4gICAgXCJub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljXCIsXG4gICAgXCJ3b3JraW5nc2V0X3JlZmF1bHRcIixcbiAgICBcInBhZ2VvdXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTFJVIGNvc3QgbW9kZWwgYW5kIHN0YXRpc3RpY3MgdHJhY2tpbmcgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJdCBpbnRyb2R1Y2VzIG1vbm90b25pYyBwYWdlIHN0YXRlIHRyYWNraW5nIGZvciBMUlUgdmVjdG9ycyBhbmQgbm9kZXMsIGFuZCB1cGRhdGVzIGhvdyBgYW5vbl9jb3N0YCBhbmQgYGZpbGVfY29zdGAgYXJlIGNhbGN1bGF0ZWQgZHVyaW5nIG1lbW9yeSByZWNsYWltLiBJdCBhbHNvIG1vZGlmaWVzIGJvdGggdGhlIHRyYWRpdGlvbmFsIExSVSBhbmQgTXVsdGktR2VuIExSVSAoTUdMUlUpIHJlY2xhaW0gcGF0aHMgdG8gdXNlIHRoZSBuZXcgY29zdCBtb2RlbCBhbmQgc3RhdGlzdGljcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4j2wn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-20 23:38:18 +0000 UTC FinishedAt: 2026-07-21 00:08:22 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "026d81ec-4fb6-4448-8a9f-d50e7df373d5" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "prepare_scan_control", "shrink_inactive_list", "shrink_active_list", "evict_folios", "lruvec_page_state_monotonic", "node_page_state_monotonic", "workingset_refault", "pageout" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHJlcGFyZV9zY2FuX2NvbnRyb2wmIzM0OywKICAgICYjMzQ7c2hyaW5rX2luYWN0aXZlX2xpc3QmIzM0OywKICAgICYjMzQ7c2hyaW5rX2FjdGl2ZV9saXN0JiMzNDssCiAgICAmIzM0O2V2aWN0X2ZvbGlvcyYjMzQ7LAogICAgJiMzNDtscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMmIzM0OywKICAgICYjMzQ7bm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyYjMzQ7LAogICAgJiMzNDt3b3JraW5nc2V0X3JlZmF1bHQmIzM0OywKICAgICYjMzQ7cGFnZW91dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTFJVIGNvc3QgbW9kZWwgYW5kIHN0YXRpc3RpY3MgdHJhY2tpbmcgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJdCBpbnRyb2R1Y2VzIG1vbm90b25pYyBwYWdlIHN0YXRlIHRyYWNraW5nIGZvciBMUlUgdmVjdG9ycyBhbmQgbm9kZXMsIGFuZCB1cGRhdGVzIGhvdyBgYW5vbl9jb3N0YCBhbmQgYGZpbGVfY29zdGAgYXJlIGNhbGN1bGF0ZWQgZHVyaW5nIG1lbW9yeSByZWNsYWltLiBJdCBhbHNvIG1vZGlmaWVzIGJvdGggdGhlIHRyYWRpdGlvbmFsIExSVSBhbmQgTXVsdGktR2VuIExSVSAoTUdMUlUpIHJlY2xhaW0gcGF0aHMgdG8gdXNlIHRoZSBuZXcgY29zdCBtb2RlbCBhbmQgc3RhdGlzdGljcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMWNjYTg1NDllOTdkZTVlMzY3MTA5NjllNzU5NzMzMmM1ZDY0ZmUxNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDIxIDAwOjA2OjQxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IGUxZjQ2YTAwMTZmY2ZkLi5iNDBiYzRmNmZlNGEwZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuQEAgLTkzMSw2ICYjNDM7OTMxLDggQEAgdW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX291dHB1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKTtcbiBib29sIG1lbWNnX3N0YXRfaXRlbV92YWxpZChpbnQgaWR4KTtcbiBib29sIG1lbWNnX3ZtX2V2ZW50X2l0ZW1fdmFsaWQoZW51bSB2bV9ldmVudF9pdGVtIGlkeCk7XG4gdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KTtcbiYjNDM7dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuJiM0MztcdFx0XHRcdFx0ICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCk7XG4gdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdFx0XHQgICAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCk7XG4gXG5AQCAtMTM3OCw2ICYjNDM7MTM4MCwxMiBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0cmV0dXJuIG5vZGVfcGFnZV9zdGF0ZShscnV2ZWNfcGdkYXQobHJ1dmVjKSwgaWR4KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuJiM0MztcdFx0XHRcdFx0XHRcdGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMobHJ1dmVjX3BnZGF0KGxydXZlYyksIGlkeCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0XHRcdFx0XHQgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXG4ge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5pbmRleCBjYTI3MTIxODcxNDc1Yy4uODUzMDNjNTg2N2M4NGIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5AQCAtMzIzLDYgJiM0MzszMjMsOCBAQCBlbnVtIG5vZGVfc3RhdF9pdGVtIHtcbiBcdFBHU0NBTl9QUk9BQ1RJVkUsXG4gXHRQR1NDQU5fQU5PTixcbiBcdFBHU0NBTl9GSUxFLFxuJiM0MztcdFBHUk9UQVRFX0FOT04sXG4mIzQzO1x0UEdST1RBVEVfRklMRSxcbiBcdFBHUkVGSUxMLFxuICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG4gXHROUl9IVUdFVExCLFxuQEAgLTc1NSw2ICYjNDM7NzU3LDEyIEBAIHZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsXG4gXG4gI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG4gXG4mIzQzO3N0cnVjdCBscnVfY29zdCB7XG4mIzQzO1x0dW5zaWduZWQgbG9uZ1x0XHRjb3VudDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nXHRcdGxhc3Rfcm90YXRlZDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nXHRcdGxhc3RfaW87XG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCBscnV2ZWMge1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0XHRsaXN0c1tOUl9MUlVfTElTVFNdO1xuIFx0LyogcGVyIGxydXZlYyBscnVfbG9jayBmb3IgbWVtY2cgKi9cbkBAIC03NjMsOSAmIzQzOzc3MSwxMiBAQCBzdHJ1Y3QgbHJ1dmVjIHtcbiBcdCAqIFRoZXNlIHRyYWNrIHRoZSBjb3N0IG9mIHJlY2xhaW1pbmcgb25lIExSVSAtIGZpbGUgb3IgYW5vbiAtXG4gXHQgKiBvdmVyIHRoZSBvdGhlci4gQXMgdGhlIG9ic2VydmVkIGNvc3Qgb2YgcmVjbGFpbWluZyBvbmUgTFJVXG4gXHQgKiBpbmNyZWFzZXMsIHRoZSByZWNsYWltIHNjYW4gYmFsYW5jZSB0aXBzIHRvd2FyZCB0aGUgb3RoZXIuXG4mIzQzO1x0ICogVXBkYXRlZCBhbmQgZGVjYXllZCBhdCBwcmVwYXJlX3NjYW5fY29udHJvbCgpIHRpbWU7IGNvc3RfbG9ja1xuJiM0MztcdCAqIHNlcmlhbGlzZXMgdGhhdCB1cGRhdGUuXG4gXHQgKi9cbi1cdHVuc2lnbmVkIGxvbmdcdFx0XHRhbm9uX2Nvc3Q7XG4tXHR1bnNpZ25lZCBsb25nXHRcdFx0ZmlsZV9jb3N0O1xuJiM0MztcdHN0cnVjdCBscnVfY29zdFx0XHRcdGNvc3RbQU5PTl9BTkRfRklMRV07XG4mIzQzO1x0LyogUHJvdGVjdHMgY29zdFtdLiAqL1xuJiM0MztcdHNwaW5sb2NrX3RcdFx0XHRjb3N0X2xvY2s7XG4gXHQvKiBOb24tcmVzaWRlbnQgYWdlLCBkcml2ZW4gYnkgTFJVIG1vdmVtZW50ICovXG4gXHRhdG9taWNfbG9uZ190XHRcdFx0bm9ucmVzaWRlbnRfYWdlO1xuIFx0LyogUmVmYXVsdHMgYXQgdGhlIHRpbWUgb2YgbGFzdCByZWNsYWltIGN5Y2xlICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuaW5kZXggOGYwZjY4ZTI0NWJhYTMuLmI4ZTJlMWFmMmIxNDI1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5AQCAtMzA5LDkgJiM0MzszMDksNiBAQCBleHRlcm4gdW5zaWduZWQgbG9uZyB0b3RhbHJlc2VydmVfcGFnZXM7XG4gXG4gXG4gLyogbGludXgvbW0vc3dhcC5jICovXG4tdm9pZCBscnVfbm90ZV9jb3N0X3VubG9ja19pcnEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBib29sIGZpbGUsXG4tXHRcdHVuc2lnbmVkIGludCBucl9pbywgdW5zaWduZWQgaW50IG5yX3JvdGF0ZWQpO1xuLXZvaWQgbHJ1X25vdGVfY29zdF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqKTtcbiB2b2lkIGZvbGlvX2FkZF9scnUoc3RydWN0IGZvbGlvICopO1xuIHZvaWQgZm9saW9fYWRkX2xydV92bWEoc3RydWN0IGZvbGlvICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTtcbiB2b2lkIG1hcmtfcGFnZV9hY2Nlc3NlZChzdHJ1Y3QgcGFnZSAqKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oIGIvaW5jbHVkZS9saW51eC92bXN0YXQuaFxuaW5kZXggM2M5YzI2NmNmNzgyYWQuLjViMzFkOGU3YWU0MDU4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC92bXN0YXQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC92bXN0YXQuaFxuQEAgLTIwLDcgJiM0MzsyMCw2IEBAIHN0cnVjdCByZWNsYWltX3N0YXQge1xuIFx0dW5zaWduZWQgbnJfY29uZ2VzdGVkO1xuIFx0dW5zaWduZWQgbnJfd3JpdGViYWNrO1xuIFx0dW5zaWduZWQgbnJfaW1tZWRpYXRlO1xuLVx0dW5zaWduZWQgbnJfcGFnZW91dDtcbiBcdHVuc2lnbmVkIG5yX2FjdGl2YXRlW0FOT05fQU5EX0ZJTEVdO1xuIFx0dW5zaWduZWQgbnJfcmVmX2tlZXA7XG4gXHR1bnNpZ25lZCBucl91bm1hcF9mYWlsO1xuQEAgLTE5NCw2ICYjNDM7MTkzLDE5IEBAIHVuc2lnbmVkIGxvbmcgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZV9wYWdlcyhlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW0pXG4gXHRyZXR1cm4geDtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIE5vbi1jbGFtcGluZyB2YXJpYW50IG9mIGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoKSBpbnRlbmRlZCBmb3IgY2FsbGVycyB0aGF0XG4mIzQzOyAqIHNuYXBzaG90IGEgbW9ub3RvbmljYWxseS1pbmNyZW1lbnRlZCBjb3VudGVyIGFuZCBzdWJ0cmFjdCB0d28gc2FtcGxlcy5cbiYjNDM7ICogUmV0dXJucyB0aGUgcmF3IHdyYXBwaW5nIHZhbHVlIHNvIHRoYXQgdW5zaWduZWQgbW9kdWxhciBzdWJ0cmFjdGlvbiBzdGF5c1xuJiM0MzsgKiBjb3JyZWN0IGFjcm9zcyBhIHNpZ25lZC1sb25nIG92ZXJmbG93IChhIHJlYWwgaGF6YXJkIG9uIDMyLWJpdCkgdGhhdCB0aGVcbiYjNDM7ICogY2xhbXAgaW4gZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZSgpIHdvdWxkIG90aGVyd2lzZSB0dXJuIGludG8gYSBodWdlIHNwdXJpb3VzXG4mIzQzOyAqIGRlbHRhLiBEbyBOT1QgdXNlIGZvciBub24tbW9ub3RvbmljIHBhZ2UtY291bnQgcmVhZHMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMoZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuICh1bnNpZ25lZCBsb25nKWF0b21pY19sb25nX3JlYWQoXHUwMDI2dm1fbm9kZV9zdGF0W2l0ZW1dKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZShlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW0pXG4ge1xuIFx0Vk1fV0FSTl9PTl9PTkNFKHZtc3RhdF9pdGVtX2luX2J5dGVzKGl0ZW0pKTtcbkBAIC0yNTksMTEgJiM0MzsyNzEsMTQgQEAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbm9kZV9wYWdlX3N0YXRlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4gXHRcdFx0XHRcdFx0ZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKTtcbiBleHRlcm4gdW5zaWduZWQgbG9uZyBub2RlX3BhZ2Vfc3RhdGVfcGFnZXMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbiBcdFx0XHRcdFx0ICAgZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKTtcbiYjNDM7ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbSk7XG4gZXh0ZXJuIHZvaWQgZm9sZF92bV9udW1hX2V2ZW50cyh2b2lkKTtcbiAjZWxzZVxuICNkZWZpbmUgc3VtX3pvbmVfbm9kZV9wYWdlX3N0YXRlKG5vZGUsIGl0ZW0pIGdsb2JhbF96b25lX3BhZ2Vfc3RhdGUoaXRlbSlcbiAjZGVmaW5lIG5vZGVfcGFnZV9zdGF0ZShub2RlLCBpdGVtKSBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKGl0ZW0pXG4gI2RlZmluZSBub2RlX3BhZ2Vfc3RhdGVfcGFnZXMobm9kZSwgaXRlbSkgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZV9wYWdlcyhpdGVtKVxuJiM0MzsjZGVmaW5lIG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMobm9kZSwgaXRlbSkgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMoaXRlbSlcbiBzdGF0aWMgaW5saW5lIHZvaWQgZm9sZF92bV9udW1hX2V2ZW50cyh2b2lkKVxuIHtcbiB9XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5jIGIvbW0vbWVtY29udHJvbC12MS5jXG5pbmRleCA3NjUwNjkyMTE1Njc4Yy4uMDkxYmM5ZmZlZTQ0YTAgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLXYxLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wtdjEuY1xuQEAgLTE5ODgsOCAmIzQzOzE5ODgsOCBAQCB2b2lkIG1lbWNnMV9zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKVxuIFx0XHRmb3JfZWFjaF9vbmxpbmVfcGdkYXQocGdkYXQpIHtcbiBcdFx0XHRteiA9IG1lbWNnLVx1MDAzZW5vZGVpbmZvW3BnZGF0LVx1MDAzZW5vZGVfaWRdO1xuIFxuLVx0XHRcdGFub25fY29zdCAmIzQzOz0gbXotXHUwMDNlbHJ1dmVjLmFub25fY29zdDtcbi1cdFx0XHRmaWxlX2Nvc3QgJiM0Mzs9IG16LVx1MDAzZWxydXZlYy5maWxlX2Nvc3Q7XG4mIzQzO1x0XHRcdGFub25fY29zdCAmIzQzOz0gbXotXHUwMDNlbHJ1dmVjLmNvc3RbV09SS0lOR1NFVF9BTk9OXS5jb3VudDtcbiYjNDM7XHRcdFx0ZmlsZV9jb3N0ICYjNDM7PSBtei1cdTAwM2VscnV2ZWMuY29zdFtXT1JLSU5HU0VUX0ZJTEVdLmNvdW50O1xuIFx0XHR9XG4gXHRcdHNlcV9idWZfcHJpbnRmKHMsIFwmIzM0O2Fub25fY29zdCAlbHVcXG5cJiMzNDssIGFub25fY29zdCk7XG4gXHRcdHNlcV9idWZfcHJpbnRmKHMsIFwmIzM0O2ZpbGVfY29zdCAlbHVcXG5cJiMzNDssIGZpbGVfY29zdCk7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCA2ZGM0ODg4YTkwZjNmZC4uYzk3YzliYzNmOGRkYjggMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTM5Myw2ICYjNDM7MzkzLDcgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ19ub2RlX3N0YXRfaXRlbXNbXSA9IHtcbiBcdE5SX1NITUVNX1RIUFMsXG4gXHROUl9GSUxFX1RIUFMsXG4gXHROUl9BTk9OX1RIUFMsXG4mIzQzO1x0TlJfVk1TQ0FOX1dSSVRFLFxuIFx0TlJfVk1BTExPQyxcbiBcdE5SX0tFUk5FTF9TVEFDS19LQixcbiBcdE5SX1BBR0VUQUJMRSxcbkBAIC00MTksNiAmIzQzOzQyMCw4IEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfbm9kZV9zdGF0X2l0ZW1zW10gPSB7XG4gXHRQR1NDQU5fUFJPQUNUSVZFLFxuIFx0UEdTQ0FOX0FOT04sXG4gXHRQR1NDQU5fRklMRSxcbiYjNDM7XHRQR1JPVEFURV9BTk9OLFxuJiM0MztcdFBHUk9UQVRFX0ZJTEUsXG4gXHRQR1JFRklMTCxcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuIFx0TlJfSFVHRVRMQixcbkBAIC01MDIsNiAmIzQzOzUwNSw0MiBAQCB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXG4gXHRyZXR1cm4geDtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMgLSBub24tY2xhbXBpbmcgbHJ1dmVjIHN0YXQgcmVhZCBmb3IgZGVsdGEgc2FtcGxpbmdcbiYjNDM7ICogQGxydXZlYzogdGhlIExSVSB2ZWN0b3IgdG8gcmVhZCBmcm9tXG4mIzQzOyAqIEBpZHg6IHRoZSBub2RlX3N0YXRfaXRlbSB0byByZWFkXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnMgdGhlIHJhdyBzdGF0ZVtpZHhdIHZhbHVlIGNhc3QgdG8gdW5zaWduZWQgbG9uZywgc2tpcHBpbmcgdGhlXG4mIzQzOyAqIGNsYW1wLW5lZ2F0aXZlLXRvLXplcm8gc3RlcCBpbiBscnV2ZWNfcGFnZV9zdGF0ZSgpLiBJbnRlbmRlZCBmb3IgY2FsbGVyc1xuJiM0MzsgKiB0aGF0IHNuYXBzaG90IGEgbW9ub3RvbmljYWxseS1pbmNyZW1lbnRlZCBjb3VudGVyIGFuZCBzdWJ0cmFjdCB0d29cbiYjNDM7ICogc2FtcGxlczogdW5zaWduZWQgbW9kdWxhciBhcml0aG1ldGljIHRoZW4geWllbGRzIHRoZSBjb3JyZWN0IGRlbHRhIGFjcm9zc1xuJiM0MzsgKiBhIHNpZ25lZC1sb25nIHdyYXBhcm91bmQgKGEgcmVhbCBoYXphcmQgb24gMzItYml0KSB0aGF0IHRoZSBjbGFtcCB3b3VsZFxuJiM0MzsgKiBvdGhlcndpc2UgdHVybiBpbnRvIGEgaHVnZSBzcHVyaW91cyBkZWx0YS5cbiYjNDM7ICpcbiYjNDM7ICogRG8gTk9UIHVzZSBmb3Igbm9uLW1vbm90b25pYyBwYWdlLWNvdW50IHJlYWRzIHdoZXJlIGEgdHJhbnNpZW50IG5lZ2F0aXZlXG4mIzQzOyAqIHJlYWRpbmcgZnJvbSBwZXItQ1BVIGRlbHRhIHNrZXcgbXVzdCBwcmVzZW50IGFzIHplcm8uXG4mIzQzOyAqXG4mIzQzOyAqIFhYWDogVGhpcyBoZWxwZXIgKGFuZCBpdHMgbm9kZS9nbG9iYWwgcGVlcnMpIGV4aXN0cyBiZWNhdXNlIHdlIHBsYWNlXG4mIzQzOyAqIG1vbm90b25pY2FsbHktaW5jcmVtZW50ZWQgZXZlbnQgY291bnRlcnMgKE5SX1ZNU0NBTl9XUklURSBhbmQgUEdST1RBVEVfKilcbiYjNDM7ICogaW50byBlbnVtIG5vZGVfc3RhdF9pdGVtLlxuJiM0MzsgKi9cbiYjNDM7dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuJiM0MztcdFx0XHRcdFx0ICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbjtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbiYjNDM7XHRcdHJldHVybiBub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKGxydXZlY19wZ2RhdChscnV2ZWMpLCBpZHgpO1xuJiM0MztcbiYjNDM7XHRpID0gbWVtY2dfc3RhdHNfaW5kZXgoaWR4KTtcbiYjNDM7XHRpZiAoV0FSTl9PTkNFKEJBRF9TVEFUX0lEWChpKSwgXCYjMzQ7JXM6IG1pc3Npbmcgc3RhdCBpdGVtICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXywgaWR4KSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRwbiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xuJiM0MztcdHJldHVybiAodW5zaWduZWQgbG9uZylSRUFEX09OQ0UocG4tXHUwMDNlbHJ1dmVjX3N0YXRzLVx1MDAzZXN0YXRlW2ldKTtcbiYjNDM7fVxuJiM0MztcbiB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0XHRcdCAgICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxuIHtcbmRpZmYgLS1naXQgYS9tbS9tbXpvbmUuYyBiL21tL21tem9uZS5jXG5pbmRleCAwYzhmMTgxZDlkNTAwNi4uMTcxMzlkYjRkMjkxY2UgMTAwNjQ0XG4tLS0gYS9tbS9tbXpvbmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbW16b25lLmNcbkBAIC03OCw2ICYjNDM7NzgsNyBAQCB2b2lkIGxydXZlY19pbml0KHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbiBcbiBcdG1lbXNldChscnV2ZWMsIDAsIHNpemVvZihzdHJ1Y3QgbHJ1dmVjKSk7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1X2xvY2spO1xuJiM0MztcdHNwaW5fbG9ja19pbml0KFx1MDAyNmxydXZlYy1cdTAwM2Vjb3N0X2xvY2spO1xuIFx0enN3YXBfbHJ1dmVjX3N0YXRlX2luaXQobHJ1dmVjKTtcbiBcbiBcdGZvcl9lYWNoX2xydShscnUpXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcC5jIGIvbW0vc3dhcC5jXG5pbmRleCA1ODhmNTBkOGYxYThjOS4uNzRiMjgxNzc4Y2JjOTIgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXAuY1xuQEAgLTI3Miw3MyAmIzQzOzI3Miw2IEBAIHZvaWQgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRmb2xpb19iYXRjaF9hZGRfYW5kX21vdmUoZm9saW8sIGxydV9tb3ZlX3RhaWwpO1xuIH1cbiBcbi12b2lkIGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGJvb2wgZmlsZSxcbi1cdFx0dW5zaWduZWQgaW50IG5yX2lvLCB1bnNpZ25lZCBpbnQgbnJfcm90YXRlZClcbi1cdFx0X19yZWxlYXNlcyhscnV2ZWMtXHUwMDNlbHJ1X2xvY2spXG4tXHRcdF9fcmVsZWFzZXMocmN1KVxuLXtcbi1cdHVuc2lnbmVkIGxvbmcgY29zdDtcbi1cbi1cdC8qXG4tXHQgKiBSZWZsZWN0IHRoZSByZWxhdGl2ZSBjb3N0IG9mIGluY3VycmluZyBJTyBhbmQgc3BlbmRpbmcgQ1BVXG4tXHQgKiB0aW1lIG9uIHJvdGF0aW9ucy4gVGhpcyBkb2VzbiYjMzk7dCBhdHRlbXB0IHRvIG1ha2UgYSBwcmVjaXNlXG4tXHQgKiBjb21wYXJpc29uLCBpdCBqdXN0IHNheXM6IGlmIHJlbG9hZHMgYXJlIGFib3V0IGNvbXBhcmFibGVcbi1cdCAqIGJldHdlZW4gdGhlIExSVSBsaXN0cywgb3Igcm90YXRpb25zIGFyZSBvdmVyd2hlbG1pbmdseVxuLVx0ICogZGlmZmVyZW50IGJldHdlZW4gdGhlbSwgYWRqdXN0IHNjYW4gYmFsYW5jZSBmb3IgQ1BVIHdvcmsuXG4tXHQgKi9cbi1cdGNvc3QgPSBucl9pbyAqIFNXQVBfQ0xVU1RFUl9NQVggJiM0MzsgbnJfcm90YXRlZDtcbi1cdGlmICghY29zdCkge1xuLVx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2bHJ1dmVjLVx1MDAzZWxydV9sb2NrKTtcbi1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXHRcdHJldHVybjtcbi1cdH1cbi1cbi1cdGZvciAoOzspIHtcbi1cdFx0dW5zaWduZWQgbG9uZyBscnVzaXplO1xuLVxuLVx0XHQvKiBSZWNvcmQgY29zdCBldmVudCAqL1xuLVx0XHRpZiAoZmlsZSlcbi1cdFx0XHRscnV2ZWMtXHUwMDNlZmlsZV9jb3N0ICYjNDM7PSBjb3N0O1xuLVx0XHRlbHNlXG4tXHRcdFx0bHJ1dmVjLVx1MDAzZWFub25fY29zdCAmIzQzOz0gY29zdDtcbi1cbi1cdFx0Lypcbi1cdFx0ICogRGVjYXkgcHJldmlvdXMgZXZlbnRzXG4tXHRcdCAqXG4tXHRcdCAqIEJlY2F1c2Ugd29ya2xvYWRzIGNoYW5nZSBvdmVyIHRpbWUgKGFuZCB0byBhdm9pZFxuLVx0XHQgKiBvdmVyZmxvdykgd2Uga2VlcCB0aGVzZSBzdGF0aXN0aWNzIGFzIGEgZmxvYXRpbmdcbi1cdFx0ICogYXZlcmFnZSwgd2hpY2ggZW5kcyB1cCB3ZWlnaGluZyByZWNlbnQgcmVmYXVsdHNcbi1cdFx0ICogbW9yZSB0aGFuIG9sZCBvbmVzLlxuLVx0XHQgKi9cbi1cdFx0bHJ1c2l6ZSA9IGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfSU5BQ1RJVkVfQU5PTikgJiM0Mztcbi1cdFx0XHQgIGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfQUNUSVZFX0FOT04pICYjNDM7XG4tXHRcdFx0ICBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0lOQUNUSVZFX0ZJTEUpICYjNDM7XG4tXHRcdFx0ICBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0FDVElWRV9GSUxFKTtcbi1cbi1cdFx0aWYgKGxydXZlYy1cdTAwM2VmaWxlX2Nvc3QgJiM0MzsgbHJ1dmVjLVx1MDAzZWFub25fY29zdCBcdTAwM2UgbHJ1c2l6ZSAvIDQpIHtcbi1cdFx0XHRscnV2ZWMtXHUwMDNlZmlsZV9jb3N0IC89IDI7XG4tXHRcdFx0bHJ1dmVjLVx1MDAzZWFub25fY29zdCAvPSAyO1xuLVx0XHR9XG4tXG4tXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1X2xvY2spO1xuLVx0XHRscnV2ZWMgPSBwYXJlbnRfbHJ1dmVjKGxydXZlYyk7XG4tXHRcdGlmICghbHJ1dmVjKSB7XG4tXHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1X2xvY2spO1xuLVx0fVxuLX1cbi1cbi12b2lkIGxydV9ub3RlX2Nvc3RfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLXtcbi1cdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcbi1cbi1cdGxydXZlYyA9IGZvbGlvX2xydXZlY19sb2NrX2lycShmb2xpbyk7XG4tXHRscnVfbm90ZV9jb3N0X3VubG9ja19pcnEobHJ1dmVjLCBmb2xpb19pc19maWxlX2xydShmb2xpbyksXG4tXHRcdFx0XHRmb2xpb19ucl9wYWdlcyhmb2xpbyksIDApO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCBscnVfYWN0aXZhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG5AQCAtMTE2NCw4ICYjNDM7MTA5Nyw2IEBAIHZvaWQgbHJ1X3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50XG4gXG4gXHRjaGlsZF9scnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgTk9ERV9EQVRBKG5pZCkpO1xuIFx0cGFyZW50X2xydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHBhcmVudCwgTk9ERV9EQVRBKG5pZCkpO1xuLVx0cGFyZW50X2xydXZlYy1cdTAwM2Vhbm9uX2Nvc3QgJiM0Mzs9IGNoaWxkX2xydXZlYy1cdTAwM2Vhbm9uX2Nvc3Q7XG4tXHRwYXJlbnRfbHJ1dmVjLVx1MDAzZWZpbGVfY29zdCAmIzQzOz0gY2hpbGRfbHJ1dmVjLVx1MDAzZWZpbGVfY29zdDtcbiBcbiBcdGZvcl9lYWNoX2xydShscnUpXG4gXHRcdGxydXZlY19yZXBhcmVudF9scnUoY2hpbGRfbHJ1dmVjLCBwYXJlbnRfbHJ1dmVjLCBscnUsIG5pZCk7XG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggMzVjM2JiMTVhZTk2YTMuLjA3NTQ1MDk1YjM1MmNjIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jXG5AQCAtNjY4LDcgJiM0Mzs2NjgsNyBAQCBzdGF0aWMgcGFnZW91dF90IHBhZ2VvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdGZvbGlvX2NsZWFyX3JlY2xhaW0oZm9saW8pO1xuIFxuIFx0dHJhY2VfbW1fdm1zY2FuX3dyaXRlX2ZvbGlvKGZvbGlvKTtcbi1cdG5vZGVfc3RhdF9hZGRfZm9saW8oZm9saW8sIE5SX1ZNU0NBTl9XUklURSk7XG4mIzQzO1x0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9WTVNDQU5fV1JJVEUsIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG4gXHRyZXR1cm4gUEFHRV9TVUNDRVNTO1xuIH1cbiBcbkBAIC0xNDEzLDggJiM0MzsxNDEzLDYgQEAgc3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuIFx0XHRcdFx0XHRzYy1cdTAwM2Vucl9zY2FubmVkIC09IChucl9wYWdlcyAtIDEpO1xuIFx0XHRcdFx0XHRucl9wYWdlcyA9IDE7XG4gXHRcdFx0XHR9XG4tXHRcdFx0XHRzdGF0LVx1MDAzZW5yX3BhZ2VvdXQgJiM0Mzs9IG5yX3BhZ2VzO1xuLVxuIFx0XHRcdFx0aWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSlcbiBcdFx0XHRcdFx0Z290byBrZWVwO1xuIFx0XHRcdFx0aWYgKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKVxuQEAgLTIwMzgsMTAgJiM0MzsyMDM2LDEwIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19pbmFjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcbiBcdGl0ZW0gPSBQR1NURUFMX0tTV0FQRCAmIzQzOyByZWNsYWltZXJfb2Zmc2V0KHNjKTtcbiBcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBpdGVtLCBucl9yZWNsYWltZWQpO1xuIFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHU1RFQUxfQU5PTiAmIzQzOyBmaWxlLCBucl9yZWNsYWltZWQpO1xuJiM0MztcdGlmIChucl9zY2FubmVkIFx1MDAzZSBucl9yZWNsYWltZWQpXG4mIzQzO1x0XHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdST1RBVEVfQU5PTiAmIzQzOyBmaWxlLFxuJiM0MztcdFx0XHRcdCBucl9zY2FubmVkIC0gbnJfcmVjbGFpbWVkKTtcbiBcbi1cdGxydXZlY19sb2NrX2lycShscnV2ZWMpO1xuLVx0bHJ1X25vdGVfY29zdF91bmxvY2tfaXJxKGxydXZlYywgZmlsZSwgc3RhdC5ucl9wYWdlb3V0LFxuLVx0XHRcdFx0XHRucl9zY2FubmVkIC0gbnJfcmVjbGFpbWVkKTtcbiBcdGhhbmRsZV9yZWNsYWltX3dyaXRlYmFjayhucl90YWtlbiwgcGdkYXQsIHNjLCBcdTAwMjZzdGF0KTtcbiBcdHRyYWNlX21tX3Ztc2Nhbl9scnVfc2hyaW5rX2luYWN0aXZlKHBnZGF0LVx1MDAzZW5vZGVfaWQsXG4gXHRcdFx0bnJfc2Nhbm5lZCwgbnJfcmVjbGFpbWVkLCBcdTAwMjZzdGF0LCBzYy1cdTAwM2Vwcmlvcml0eSwgZmlsZSk7XG5AQCAtMjE0Nyw5ICYjNDM7MjE0NSw5IEBAIHN0YXRpYyB2b2lkIHNocmlua19hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4gXHRjb3VudF92bV9ldmVudHMoUEdERUFDVElWQVRFLCBucl9kZWFjdGl2YXRlKTtcbiBcdGNvdW50X21lbWNnX2V2ZW50cyhscnV2ZWNfbWVtY2cobHJ1dmVjKSwgUEdERUFDVElWQVRFLCBucl9kZWFjdGl2YXRlKTtcbiBcdG1vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gJiM0MzsgZmlsZSwgLW5yX3Rha2VuKTtcbiYjNDM7XHRpZiAobnJfcm90YXRlZClcbiYjNDM7XHRcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JPVEFURV9BTk9OICYjNDM7IGZpbGUsIG5yX3JvdGF0ZWQpO1xuIFxuLVx0bHJ1dmVjX2xvY2tfaXJxKGxydXZlYyk7XG4tXHRscnVfbm90ZV9jb3N0X3VubG9ja19pcnEobHJ1dmVjLCBmaWxlLCAwLCBucl9yb3RhdGVkKTtcbiBcdHRyYWNlX21tX3Ztc2Nhbl9scnVfc2hyaW5rX2FjdGl2ZShwZ2RhdC1cdTAwM2Vub2RlX2lkLCBucl90YWtlbiwgbnJfYWN0aXZhdGUsXG4gXHRcdFx0bnJfZGVhY3RpdmF0ZSwgbnJfcm90YXRlZCwgc2MtXHUwMDNlcHJpb3JpdHksIGZpbGUpO1xuIH1cbkBAIC0yMjgyLDggJiM0MzsyMjgwLDEwIEBAIGVudW0gc2Nhbl9iYWxhbmNlIHtcbiBcbiBzdGF0aWMgdm9pZCBwcmVwYXJlX3NjYW5fY29udHJvbChwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGZpbGU7XG4mIzQzO1x0c3RydWN0IGxydV9jb3N0ICphbm9uX2Nvc3QsICpmaWxlX2Nvc3Q7XG4gXHRzdHJ1Y3QgbHJ1dmVjICp0YXJnZXRfbHJ1dmVjO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbHJ1c2l6ZTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZpbGU7XG4gXG4gXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXHUwMDI2XHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpKVxuIFx0XHRyZXR1cm47XG5AQCAtMjI5OSwxMSAmIzQzOzIyOTksNjkgQEAgc3RhdGljIHZvaWQgcHJlcGFyZV9zY2FuX2NvbnRyb2wocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4gXG4gXHQvKlxuIFx0ICogRGV0ZXJtaW5lIHRoZSBzY2FuIGJhbGFuY2UgYmV0d2VlbiBhbm9uIGFuZCBmaWxlIExSVXMuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBUaGUgY29zdCBtb2RlbCBpcyBiYXNlZCBvbiByb3RhdGlvbnMsIHJlZmF1bHRzIGFuZFxuJiM0MztcdCAqIHJlY2xhaW0tZHJpdmVuIHdyaXRlcyAoYW5vbiBvbmx5KSBvbiBlYWNoIHNpZGUuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBUaGVzZSBldmVudCBjb3VudGVycyBhcmUgbW9ub3RvbmljLCBzbyBlYWNoIHJlY2xhaW0gY3ljbGVcbiYjNDM7XHQgKiB0aGUgZGVsdGEgc2luY2UgdGhlIGxhc3Qgc2NhbiBpcyBleHRyYWN0ZWQgYW5kIGluY29ycG9yYXRlZFxuJiM0MztcdCAqIGludG8gYSBkZWNheWluZyBhdmVyYWdlLiBUaGlzIGVuc3VyZXMgY3VycmVuY3ksIGFzIHdvcmtsb2Fkc1xuJiM0MztcdCAqIGNoYW5nZSBvdmVyIHRpbWUsIGFuZCBhdm9pZHMgb3ZlcmZsb3cgaW4gdGhlIGNhbGN1bGF0aW9ucy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFVzZSBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoKSBzbyB1bnNpZ25lZCBzdWJ0cmFjdGlvblxuJiM0MztcdCAqIHlpZWxkcyB0aGUgY29ycmVjdCBkZWx0YSBhY3Jvc3MgYSBzaWduZWQtbG9uZyB3cmFwYXJvdW5kIG9mXG4mIzQzO1x0ICogdGhlIHVuZGVybHlpbmcgY291bnRlciAoYSByZWFsIGhhemFyZCBvbiAzMi1iaXQgdGhhdCB0aGVcbiYjNDM7XHQgKiBjbGFtcCBpbiBscnV2ZWNfcGFnZV9zdGF0ZSgpIHdvdWxkIG90aGVyd2lzZSB0dXJuIGludG8gYSBodWdlXG4mIzQzO1x0ICogc3B1cmlvdXMgZGVsdGEpLlxuIFx0ICovXG4tXHRzcGluX2xvY2tfaXJxKFx1MDAyNnRhcmdldF9scnV2ZWMtXHUwMDNlbHJ1X2xvY2spO1xuLVx0c2MtXHUwMDNlYW5vbl9jb3N0ID0gdGFyZ2V0X2xydXZlYy1cdTAwM2Vhbm9uX2Nvc3Q7XG4tXHRzYy1cdTAwM2VmaWxlX2Nvc3QgPSB0YXJnZXRfbHJ1dmVjLVx1MDAzZWZpbGVfY29zdDtcbi1cdHNwaW5fdW5sb2NrX2lycShcdTAwMjZ0YXJnZXRfbHJ1dmVjLVx1MDAzZWxydV9sb2NrKTtcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2dGFyZ2V0X2xydXZlYy1cdTAwM2Vjb3N0X2xvY2spO1xuJiM0MztcbiYjNDM7XHRmb3IgKGludCBmID0gMDsgZiBcdTAwM2M9IDE7IGYmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgbHJ1X2Nvc3QgKmNvc3QgPSBcdTAwMjZ0YXJnZXRfbHJ1dmVjLVx1MDAzZWNvc3RbZl07XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIHJvdGF0ZWQsIGlvLCBucl9yb3RhdGVkLCBucl9pbztcbiYjNDM7XG4mIzQzO1x0XHRyb3RhdGVkID0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHRhcmdldF9scnV2ZWMsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgIFBHUk9UQVRFX0FOT04gJiM0MzsgZik7XG4mIzQzO1x0XHRpbyA9IGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyh0YXJnZXRfbHJ1dmVjLFxuJiM0MztcdFx0XHRcdFx0XHQgV09SS0lOR1NFVF9SRVNUT1JFX0JBU0UgJiM0MzsgZik7XG4mIzQzO1x0XHRpZiAoZiA9PSBXT1JLSU5HU0VUX0FOT04pXG4mIzQzO1x0XHRcdGlvICYjNDM7PSBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWModGFyZ2V0X2xydXZlYyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgIE5SX1ZNU0NBTl9XUklURSk7XG4mIzQzO1xuJiM0MztcdFx0bnJfcm90YXRlZCA9IHJvdGF0ZWQgLSBjb3N0LVx1MDAzZWxhc3Rfcm90YXRlZDtcbiYjNDM7XHRcdG5yX2lvID0gaW8gLSBjb3N0LVx1MDAzZWxhc3RfaW87XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFJlZmxlY3QgdGhlIHJlbGF0aXZlIGNvc3Qgb2YgaW5jdXJyaW5nIElPIGFuZCBzcGVuZGluZ1xuJiM0MztcdFx0ICogQ1BVIHRpbWUgb24gcm90YXRpb25zLiBUaGlzIGRvZXNuJiMzOTt0IGF0dGVtcHQgdG8gbWFrZSBhXG4mIzQzO1x0XHQgKiBwcmVjaXNlIGNvbXBhcmlzb24sIGl0IGp1c3Qgc2F5czogaWYgcmVsb2FkcyBhcmUgYWJvdXRcbiYjNDM7XHRcdCAqIGNvbXBhcmFibGUgYmV0d2VlbiB0aGUgTFJVIGxpc3RzLCBvciByb3RhdGlvbnMgYXJlXG4mIzQzO1x0XHQgKiBvdmVyd2hlbG1pbmdseSBkaWZmZXJlbnQgYmV0d2VlbiB0aGVtLCBhZGp1c3Qgc2NhblxuJiM0MztcdFx0ICogYmFsYW5jZSBmb3IgQ1BVIHdvcmsuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGNvc3QtXHUwMDNlY291bnQgJiM0Mzs9IG5yX2lvICogU1dBUF9DTFVTVEVSX01BWCAmIzQzOyBucl9yb3RhdGVkO1xuJiM0MztcbiYjNDM7XHRcdGNvc3QtXHUwMDNlbGFzdF9yb3RhdGVkID0gcm90YXRlZDtcbiYjNDM7XHRcdGNvc3QtXHUwMDNlbGFzdF9pbyA9IGlvO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0YW5vbl9jb3N0ID0gXHUwMDI2dGFyZ2V0X2xydXZlYy1cdTAwM2Vjb3N0W1dPUktJTkdTRVRfQU5PTl07XG4mIzQzO1x0ZmlsZV9jb3N0ID0gXHUwMDI2dGFyZ2V0X2xydXZlYy1cdTAwM2Vjb3N0W1dPUktJTkdTRVRfRklMRV07XG4mIzQzO1xuJiM0MztcdGxydXNpemUgPSBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLCBOUl9JTkFDVElWRV9BTk9OKSAmIzQzO1xuJiM0MztcdFx0ICBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLCBOUl9BQ1RJVkVfQU5PTikgJiM0MztcbiYjNDM7XHRcdCAgbHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYywgTlJfSU5BQ1RJVkVfRklMRSkgJiM0MztcbiYjNDM7XHRcdCAgbHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYywgTlJfQUNUSVZFX0ZJTEUpO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoYW5vbl9jb3N0LVx1MDAzZWNvdW50ICYjNDM7IGZpbGVfY29zdC1cdTAwM2Vjb3VudCBcdTAwM2UgbHJ1c2l6ZSAvIDQpIHtcbiYjNDM7XHRcdGFub25fY29zdC1cdTAwM2Vjb3VudCAvPSAyO1xuJiM0MztcdFx0ZmlsZV9jb3N0LVx1MDAzZWNvdW50IC89IDI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzYy1cdTAwM2Vhbm9uX2Nvc3QgPSBhbm9uX2Nvc3QtXHUwMDNlY291bnQ7XG4mIzQzO1x0c2MtXHUwMDNlZmlsZV9jb3N0ID0gZmlsZV9jb3N0LVx1MDAzZWNvdW50O1xuJiM0MztcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZ0YXJnZXRfbHJ1dmVjLVx1MDAzZWNvc3RfbG9jayk7XG4gXG4gXHQvKlxuIFx0ICogVGFyZ2V0IGRlc2lyYWJsZSBpbmFjdGl2ZTphY3RpdmUgbGlzdCByYXRpb3MgZm9yIHRoZSBhbm9uXG5AQCAtNDgxMCw3ICYjNDM7NDg2OCw4IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0c3RydWN0IHJlY2xhaW1fc3RhdCBzdGF0O1xuIFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaztcbiBcdGludCBzY2FubmVkLCByZWNsYWltZWQ7XG4tXHRpbnQgaXNvbGF0ZWQgPSAwLCB0eXBlLCB0eXBlX3NjYW5uZWQ7XG4mIzQzO1x0aW50IGlzb2xhdGVkID0gMCwgbnJfaXNvbGF0ZWQgPSAwLCB0eXBlLCB0eXBlX3NjYW5uZWQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyB0b3RhbF9yZWNsYWltZWQgPSAwO1xuIFx0Ym9vbCBza2lwX3JldHJ5ID0gZmFsc2U7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcbkBAIC00ODIyLDYgJiM0Mzs0ODgxLDcgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXG4gXHRzY2FubmVkID0gaXNvbGF0ZV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyxcbiBcdFx0XHRcdCBcdTAwMjZsaXN0LCBcdTAwMjZpc29sYXRlZCwgXHUwMDI2dHlwZSwgXHUwMDI2dHlwZV9zY2FubmVkKTtcbiYjNDM7XHRucl9pc29sYXRlZCA9IGlzb2xhdGVkO1xuIFxuIFx0LyogU2Nhbm5pbmcgbWF5IGhhdmUgZW1wdGllZCB0aGUgb2xkZXN0IGdlbiwgZmx1c2ggaXQgKi9cbiBcdGlmIChzY2FubmVkKVxuQEAgLTQ4MzQsNiAmIzQzOzQ4OTQsNyBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiByZXRyeTpcbiBcdHJlY2xhaW1lZCA9IHNocmlua19mb2xpb19saXN0KFx1MDAyNmxpc3QsIHBnZGF0LCBzYywgXHUwMDI2c3RhdCwgZmFsc2UsIG1lbWNnKTtcbiBcdHNjLVx1MDAzZW5yX3JlY2xhaW1lZCAmIzQzOz0gcmVjbGFpbWVkO1xuJiM0MztcdHRvdGFsX3JlY2xhaW1lZCAmIzQzOz0gcmVjbGFpbWVkO1xuIFx0LyogUmV0cnkgcGFzcyBpcyBvbmx5IG1lYW50IGZvciBjbGVhbiBmb2xpb3Mgd2l0aG91dCBuZXcgaXNvbGF0aW9uICovXG4gXHRpZiAoaXNvbGF0ZWQpXG4gXHRcdGhhbmRsZV9yZWNsYWltX3dyaXRlYmFjayhpc29sYXRlZCwgcGdkYXQsIHNjLCBcdTAwMjZzdGF0KTtcbkBAIC00ODg3LDYgJiM0Mzs0OTQ4LDEwIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRnb3RvIHJldHJ5O1xuIFx0fVxuIFxuJiM0MztcdGlmIChucl9pc29sYXRlZCBcdTAwM2UgdG90YWxfcmVjbGFpbWVkKVxuJiM0MztcdFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUk9UQVRFX0FOT04gJiM0MzsgdHlwZSxcbiYjNDM7XHRcdFx0XHQgbnJfaXNvbGF0ZWQgLSB0b3RhbF9yZWNsYWltZWQpO1xuJiM0MztcbiBcdHJldHVybiBzY2FubmVkO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9tbS92bXN0YXQuYyBiL21tL3Ztc3RhdC5jXG5pbmRleCBmNTM0OTcyZjUxN2RlMC4uODdkNGE2NzgxMzY3NjcgMTAwNjQ0XG4tLS0gYS9tbS92bXN0YXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zdGF0LmNcbkBAIC0xMDI0LDYgJiM0MzsxMDI0LDE3IEBAIHVuc2lnbmVkIGxvbmcgbm9kZV9wYWdlX3N0YXRlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4gXG4gXHRyZXR1cm4gbm9kZV9wYWdlX3N0YXRlX3BhZ2VzKHBnZGF0LCBpdGVtKTtcbiB9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBOb24tY2xhbXBpbmcgdmFyaWFudCBvZiBub2RlX3BhZ2Vfc3RhdGUoKSBpbnRlbmRlZCBmb3IgY2FsbGVycyB0aGF0XG4mIzQzOyAqIHNuYXBzaG90IGEgbW9ub3RvbmljYWxseS1pbmNyZW1lbnRlZCBjb3VudGVyIGFuZCBzdWJ0cmFjdCB0d28gc2FtcGxlcy5cbiYjNDM7ICogU2VlIGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKCkgZm9yIHRoZSByYXRpb25hbGUuXG4mIzQzOyAqL1xuJiM0Mzt1bnNpZ25lZCBsb25nIG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbiYjNDM7XHRcdFx0XHRcdGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiAodW5zaWduZWQgbG9uZylhdG9taWNfbG9uZ19yZWFkKFx1MDAyNnBnZGF0LVx1MDAzZXZtX3N0YXRbaXRlbV0pO1xuJiM0Mzt9XG4gI2VuZGlmXG4gXG4gLypcbkBAIC0xMjg5LDYgJiM0MzsxMzAwLDggQEAgY29uc3QgY2hhciAqIGNvbnN0IHZtc3RhdF90ZXh0W10gPSB7XG4gXHRbSShQR1NDQU5fUFJPQUNUSVZFKV1cdFx0XHQ9IFwmIzM0O3Bnc2Nhbl9wcm9hY3RpdmVcJiMzNDssXG4gXHRbSShQR1NDQU5fQU5PTildXHRcdFx0PSBcJiMzNDtwZ3NjYW5fYW5vblwmIzM0OyxcbiBcdFtJKFBHU0NBTl9GSUxFKV1cdFx0XHQ9IFwmIzM0O3Bnc2Nhbl9maWxlXCYjMzQ7LFxuJiM0MztcdFtJKFBHUk9UQVRFX0FOT04pXVx0XHRcdD0gXCYjMzQ7cGdyb3RhdGVfYW5vblwmIzM0OyxcbiYjNDM7XHRbSShQR1JPVEFURV9GSUxFKV1cdFx0XHQ9IFwmIzM0O3Bncm90YXRlX2ZpbGVcJiMzNDssXG4gXHRbSShQR1JFRklMTCldXHRcdFx0XHQ9IFwmIzM0O3BncmVmaWxsXCYjMzQ7LFxuICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG4gXHRbSShOUl9IVUdFVExCKV1cdFx0XHRcdD0gXCYjMzQ7bnJfaHVnZXRsYlwmIzM0OyxcbmRpZmYgLS1naXQgYS9tbS93b3JraW5nc2V0LmMgYi9tbS93b3JraW5nc2V0LmNcbmluZGV4IGYzNTE3OThlNzIzYWNkLi43YWMyYjg4YzgwYWU1NiAxMDA2NDRcbi0tLSBhL21tL3dvcmtpbmdzZXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vd29ya2luZ3NldC5jXG5AQCAtNTg0LDExICYjNDM7NTg0LDYgQEAgdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxuIFx0LyogRm9saW8gd2FzIGFjdGl2ZSBwcmlvciB0byBldmljdGlvbiAqL1xuIFx0aWYgKHdvcmtpbmdzZXQpIHtcbiBcdFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xuLVx0XHQvKlxuLVx0XHQgKiBYWFg6IE1vdmUgdG8gZm9saW9fYWRkX2xydSgpIHdoZW4gaXQgc3VwcG9ydHMgbmV3IHZzXG4tXHRcdCAqIHB1dGJhY2tcbi1cdFx0ICovXG4tXHRcdGxydV9ub3RlX2Nvc3RfcmVmYXVsdChmb2xpbyk7XG4gXHRcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBXT1JLSU5HU0VUX1JFU1RPUkVfQkFTRSAmIzQzOyBmaWxlLCBucik7XG4gXHR9XG4gb3V0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ByZXBhcmVfc2Nhbl9jb250cm9sJiMzNDssCiAgICAmIzM0O3Nocmlua19pbmFjdGl2ZV9saXN0JiMzNDssCiAgICAmIzM0O3Nocmlua19hY3RpdmVfbGlzdCYjMzQ7LAogICAgJiMzNDtldmljdF9mb2xpb3MmIzM0OywKICAgICYjMzQ7bHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljJiMzNDssCiAgICAmIzM0O25vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMmIzM0OywKICAgICYjMzQ7d29ya2luZ3NldF9yZWZhdWx0JiMzNDssCiAgICAmIzM0O3BhZ2VvdXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIExSVSBjb3N0IG1vZGVsIGFuZCBzdGF0aXN0aWNzIHRyYWNraW5nIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gSXQgaW50cm9kdWNlcyBtb25vdG9uaWMgcGFnZSBzdGF0ZSB0cmFja2luZyBmb3IgTFJVIHZlY3RvcnMgYW5kIG5vZGVzLCBhbmQgdXBkYXRlcyBob3cgYGFub25fY29zdGAgYW5kIGBmaWxlX2Nvc3RgIGFyZSBjYWxjdWxhdGVkIGR1cmluZyBtZW1vcnkgcmVjbGFpbS4gSXQgYWxzbyBtb2RpZmllcyBib3RoIHRoZSB0cmFkaXRpb25hbCBMUlUgYW5kIE11bHRpLUdlbiBMUlUgKE1HTFJVKSByZWNsYWltIHBhdGhzIHRvIHVzZSB0aGUgbmV3IGNvc3QgbW9kZWwgYW5kIHN0YXRpc3RpY3MuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMWNjYTg1NDllOTdkZTVlMzY3MTA5NjllNzU5NzMzMmM1ZDY0ZmUxNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDIxIDAwOjA2OjQxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAppbmRleCBlMWY0NmEwMDE2ZmNmZC4uYjQwYmM0ZjZmZTRhMGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCkBAIC05MzEsNiAmIzQzOzkzMSw4IEBAIHVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSk7CiBib29sIG1lbWNnX3N0YXRfaXRlbV92YWxpZChpbnQgaWR4KTsKIGJvb2wgbWVtY2dfdm1fZXZlbnRfaXRlbV92YWxpZChlbnVtIHZtX2V2ZW50X2l0ZW0gaWR4KTsKIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCk7CiYjNDM7dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLAomIzQzOwkJCQkJICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCk7CiB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJCQkgICAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCk7CiAKQEAgLTEzNzgsNiAmIzQzOzEzODAsMTIgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAlyZXR1cm4gbm9kZV9wYWdlX3N0YXRlKGxydXZlY19wZ2RhdChscnV2ZWMpLCBpZHgpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiYjNDM7CQkJCQkJCWVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KQomIzQzO3sKJiM0MzsJcmV0dXJuIG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMobHJ1dmVjX3BnZGF0KGxydXZlYyksIGlkeCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJCQkJCSAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCmluZGV4IGNhMjcxMjE4NzE0NzVjLi44NTMwM2M1ODY3Yzg0YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCkBAIC0zMjMsNiAmIzQzOzMyMyw4IEBAIGVudW0gbm9kZV9zdGF0X2l0ZW0gewogCVBHU0NBTl9QUk9BQ1RJVkUsCiAJUEdTQ0FOX0FOT04sCiAJUEdTQ0FOX0ZJTEUsCiYjNDM7CVBHUk9UQVRFX0FOT04sCiYjNDM7CVBHUk9UQVRFX0ZJTEUsCiAJUEdSRUZJTEwsCiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQogCU5SX0hVR0VUTEIsCkBAIC03NTUsNiAmIzQzOzc1NywxMiBAQCB2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LAogCiAjZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi8KIAomIzQzO3N0cnVjdCBscnVfY29zdCB7CiYjNDM7CXVuc2lnbmVkIGxvbmcJCWNvdW50OwomIzQzOwl1bnNpZ25lZCBsb25nCQlsYXN0X3JvdGF0ZWQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcJCWxhc3RfaW87CiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBscnV2ZWMgewogCXN0cnVjdCBsaXN0X2hlYWQJCWxpc3RzW05SX0xSVV9MSVNUU107CiAJLyogcGVyIGxydXZlYyBscnVfbG9jayBmb3IgbWVtY2cgKi8KQEAgLTc2Myw5ICYjNDM7NzcxLDEyIEBAIHN0cnVjdCBscnV2ZWMgewogCSAqIFRoZXNlIHRyYWNrIHRoZSBjb3N0IG9mIHJlY2xhaW1pbmcgb25lIExSVSAtIGZpbGUgb3IgYW5vbiAtCiAJICogb3ZlciB0aGUgb3RoZXIuIEFzIHRoZSBvYnNlcnZlZCBjb3N0IG9mIHJlY2xhaW1pbmcgb25lIExSVQogCSAqIGluY3JlYXNlcywgdGhlIHJlY2xhaW0gc2NhbiBiYWxhbmNlIHRpcHMgdG93YXJkIHRoZSBvdGhlci4KJiM0MzsJICogVXBkYXRlZCBhbmQgZGVjYXllZCBhdCBwcmVwYXJlX3NjYW5fY29udHJvbCgpIHRpbWU7IGNvc3RfbG9jawomIzQzOwkgKiBzZXJpYWxpc2VzIHRoYXQgdXBkYXRlLgogCSAqLwotCXVuc2lnbmVkIGxvbmcJCQlhbm9uX2Nvc3Q7Ci0JdW5zaWduZWQgbG9uZwkJCWZpbGVfY29zdDsKJiM0MzsJc3RydWN0IGxydV9jb3N0CQkJY29zdFtBTk9OX0FORF9GSUxFXTsKJiM0MzsJLyogUHJvdGVjdHMgY29zdFtdLiAqLwomIzQzOwlzcGlubG9ja190CQkJY29zdF9sb2NrOwogCS8qIE5vbi1yZXNpZGVudCBhZ2UsIGRyaXZlbiBieSBMUlUgbW92ZW1lbnQgKi8KIAlhdG9taWNfbG9uZ190CQkJbm9ucmVzaWRlbnRfYWdlOwogCS8qIFJlZmF1bHRzIGF0IHRoZSB0aW1lIG9mIGxhc3QgcmVjbGFpbSBjeWNsZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaAppbmRleCA4ZjBmNjhlMjQ1YmFhMy4uYjhlMmUxYWYyYjE0MjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3dhcC5oCkBAIC0zMDksOSAmIzQzOzMwOSw2IEBAIGV4dGVybiB1bnNpZ25lZCBsb25nIHRvdGFscmVzZXJ2ZV9wYWdlczsKIAogCiAvKiBsaW51eC9tbS9zd2FwLmMgKi8KLXZvaWQgbHJ1X25vdGVfY29zdF91bmxvY2tfaXJxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgYm9vbCBmaWxlLAotCQl1bnNpZ25lZCBpbnQgbnJfaW8sIHVuc2lnbmVkIGludCBucl9yb3RhdGVkKTsKLXZvaWQgbHJ1X25vdGVfY29zdF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqKTsKIHZvaWQgZm9saW9fYWRkX2xydShzdHJ1Y3QgZm9saW8gKik7CiB2b2lkIGZvbGlvX2FkZF9scnVfdm1hKHN0cnVjdCBmb2xpbyAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CiB2b2lkIG1hcmtfcGFnZV9hY2Nlc3NlZChzdHJ1Y3QgcGFnZSAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdm1zdGF0LmggYi9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oCmluZGV4IDNjOWMyNjZjZjc4MmFkLi41YjMxZDhlN2FlNDA1OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92bXN0YXQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oCkBAIC0yMCw3ICYjNDM7MjAsNiBAQCBzdHJ1Y3QgcmVjbGFpbV9zdGF0IHsKIAl1bnNpZ25lZCBucl9jb25nZXN0ZWQ7CiAJdW5zaWduZWQgbnJfd3JpdGViYWNrOwogCXVuc2lnbmVkIG5yX2ltbWVkaWF0ZTsKLQl1bnNpZ25lZCBucl9wYWdlb3V0OwogCXVuc2lnbmVkIG5yX2FjdGl2YXRlW0FOT05fQU5EX0ZJTEVdOwogCXVuc2lnbmVkIG5yX3JlZl9rZWVwOwogCXVuc2lnbmVkIG5yX3VubWFwX2ZhaWw7CkBAIC0xOTQsNiAmIzQzOzE5MywxOSBAQCB1bnNpZ25lZCBsb25nIGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGVfcGFnZXMoZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKQogCXJldHVybiB4OwogfQogCiYjNDM7LyoKJiM0MzsgKiBOb24tY2xhbXBpbmcgdmFyaWFudCBvZiBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKCkgaW50ZW5kZWQgZm9yIGNhbGxlcnMgdGhhdAomIzQzOyAqIHNuYXBzaG90IGEgbW9ub3RvbmljYWxseS1pbmNyZW1lbnRlZCBjb3VudGVyIGFuZCBzdWJ0cmFjdCB0d28gc2FtcGxlcy4KJiM0MzsgKiBSZXR1cm5zIHRoZSByYXcgd3JhcHBpbmcgdmFsdWUgc28gdGhhdCB1bnNpZ25lZCBtb2R1bGFyIHN1YnRyYWN0aW9uIHN0YXlzCiYjNDM7ICogY29ycmVjdCBhY3Jvc3MgYSBzaWduZWQtbG9uZyBvdmVyZmxvdyAoYSByZWFsIGhhemFyZCBvbiAzMi1iaXQpIHRoYXQgdGhlCiYjNDM7ICogY2xhbXAgaW4gZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZSgpIHdvdWxkIG90aGVyd2lzZSB0dXJuIGludG8gYSBodWdlIHNwdXJpb3VzCiYjNDM7ICogZGVsdGEuIERvIE5PVCB1c2UgZm9yIG5vbi1tb25vdG9uaWMgcGFnZS1jb3VudCByZWFkcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMoZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKQomIzQzO3sKJiM0MzsJcmV0dXJuICh1bnNpZ25lZCBsb25nKWF0b21pY19sb25nX3JlYWQoJmFtcDt2bV9ub2RlX3N0YXRbaXRlbV0pOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbSkKIHsKIAlWTV9XQVJOX09OX09OQ0Uodm1zdGF0X2l0ZW1faW5fYnl0ZXMoaXRlbSkpOwpAQCAtMjU5LDExICYjNDM7MjcxLDE0IEBAIGV4dGVybiB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZV9zdGF0ZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LAogCQkJCQkJZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZV9zdGF0ZV9wYWdlcyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LAogCQkJCQkgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW0pOwomIzQzO2V4dGVybiB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwKJiM0MzsJCQkJCSAgICAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW0pOwogZXh0ZXJuIHZvaWQgZm9sZF92bV9udW1hX2V2ZW50cyh2b2lkKTsKICNlbHNlCiAjZGVmaW5lIHN1bV96b25lX25vZGVfcGFnZV9zdGF0ZShub2RlLCBpdGVtKSBnbG9iYWxfem9uZV9wYWdlX3N0YXRlKGl0ZW0pCiAjZGVmaW5lIG5vZGVfcGFnZV9zdGF0ZShub2RlLCBpdGVtKSBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKGl0ZW0pCiAjZGVmaW5lIG5vZGVfcGFnZV9zdGF0ZV9wYWdlcyhub2RlLCBpdGVtKSBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlX3BhZ2VzKGl0ZW0pCiYjNDM7I2RlZmluZSBub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKG5vZGUsIGl0ZW0pIGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKGl0ZW0pCiBzdGF0aWMgaW5saW5lIHZvaWQgZm9sZF92bV9udW1hX2V2ZW50cyh2b2lkKQogewogfQpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5jIGIvbW0vbWVtY29udHJvbC12MS5jCmluZGV4IDc2NTA2OTIxMTU2NzhjLi4wOTFiYzlmZmVlNDRhMCAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC12MS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wtdjEuYwpAQCAtMTk4OCw4ICYjNDM7MTk4OCw4IEBAIHZvaWQgbWVtY2cxX3N0YXRfZm9ybWF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHNlcV9idWYgKnMpCiAJCWZvcl9lYWNoX29ubGluZV9wZ2RhdChwZ2RhdCkgewogCQkJbXogPSBtZW1jZy0mZ3Q7bm9kZWluZm9bcGdkYXQtJmd0O25vZGVfaWRdOwogCi0JCQlhbm9uX2Nvc3QgJiM0Mzs9IG16LSZndDtscnV2ZWMuYW5vbl9jb3N0OwotCQkJZmlsZV9jb3N0ICYjNDM7PSBtei0mZ3Q7bHJ1dmVjLmZpbGVfY29zdDsKJiM0MzsJCQlhbm9uX2Nvc3QgJiM0Mzs9IG16LSZndDtscnV2ZWMuY29zdFtXT1JLSU5HU0VUX0FOT05dLmNvdW50OwomIzQzOwkJCWZpbGVfY29zdCAmIzQzOz0gbXotJmd0O2xydXZlYy5jb3N0W1dPUktJTkdTRVRfRklMRV0uY291bnQ7CiAJCX0KIAkJc2VxX2J1Zl9wcmludGYocywgJiMzNDthbm9uX2Nvc3QgJWx1XG4mIzM0OywgYW5vbl9jb3N0KTsKIAkJc2VxX2J1Zl9wcmludGYocywgJiMzNDtmaWxlX2Nvc3QgJWx1XG4mIzM0OywgZmlsZV9jb3N0KTsKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCA2ZGM0ODg4YTkwZjNmZC4uYzk3YzliYzNmOGRkYjggMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTM5Myw2ICYjNDM7MzkzLDcgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ19ub2RlX3N0YXRfaXRlbXNbXSA9IHsKIAlOUl9TSE1FTV9USFBTLAogCU5SX0ZJTEVfVEhQUywKIAlOUl9BTk9OX1RIUFMsCiYjNDM7CU5SX1ZNU0NBTl9XUklURSwKIAlOUl9WTUFMTE9DLAogCU5SX0tFUk5FTF9TVEFDS19LQiwKIAlOUl9QQUdFVEFCTEUsCkBAIC00MTksNiAmIzQzOzQyMCw4IEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfbm9kZV9zdGF0X2l0ZW1zW10gPSB7CiAJUEdTQ0FOX1BST0FDVElWRSwKIAlQR1NDQU5fQU5PTiwKIAlQR1NDQU5fRklMRSwKJiM0MzsJUEdST1RBVEVfQU5PTiwKJiM0MzsJUEdST1RBVEVfRklMRSwKIAlQR1JFRklMTCwKICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCiAJTlJfSFVHRVRMQiwKQEAgLTUwMiw2ICYjNDM7NTA1LDQyIEBAIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCkKIAlyZXR1cm4geDsKIH0KIAomIzQzOy8qKgomIzQzOyAqIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyAtIG5vbi1jbGFtcGluZyBscnV2ZWMgc3RhdCByZWFkIGZvciBkZWx0YSBzYW1wbGluZwomIzQzOyAqIEBscnV2ZWM6IHRoZSBMUlUgdmVjdG9yIHRvIHJlYWQgZnJvbQomIzQzOyAqIEBpZHg6IHRoZSBub2RlX3N0YXRfaXRlbSB0byByZWFkCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zIHRoZSByYXcgc3RhdGVbaWR4XSB2YWx1ZSBjYXN0IHRvIHVuc2lnbmVkIGxvbmcsIHNraXBwaW5nIHRoZQomIzQzOyAqIGNsYW1wLW5lZ2F0aXZlLXRvLXplcm8gc3RlcCBpbiBscnV2ZWNfcGFnZV9zdGF0ZSgpLiBJbnRlbmRlZCBmb3IgY2FsbGVycwomIzQzOyAqIHRoYXQgc25hcHNob3QgYSBtb25vdG9uaWNhbGx5LWluY3JlbWVudGVkIGNvdW50ZXIgYW5kIHN1YnRyYWN0IHR3bwomIzQzOyAqIHNhbXBsZXM6IHVuc2lnbmVkIG1vZHVsYXIgYXJpdGhtZXRpYyB0aGVuIHlpZWxkcyB0aGUgY29ycmVjdCBkZWx0YSBhY3Jvc3MKJiM0MzsgKiBhIHNpZ25lZC1sb25nIHdyYXBhcm91bmQgKGEgcmVhbCBoYXphcmQgb24gMzItYml0KSB0aGF0IHRoZSBjbGFtcCB3b3VsZAomIzQzOyAqIG90aGVyd2lzZSB0dXJuIGludG8gYSBodWdlIHNwdXJpb3VzIGRlbHRhLgomIzQzOyAqCiYjNDM7ICogRG8gTk9UIHVzZSBmb3Igbm9uLW1vbm90b25pYyBwYWdlLWNvdW50IHJlYWRzIHdoZXJlIGEgdHJhbnNpZW50IG5lZ2F0aXZlCiYjNDM7ICogcmVhZGluZyBmcm9tIHBlci1DUFUgZGVsdGEgc2tldyBtdXN0IHByZXNlbnQgYXMgemVyby4KJiM0MzsgKgomIzQzOyAqIFhYWDogVGhpcyBoZWxwZXIgKGFuZCBpdHMgbm9kZS9nbG9iYWwgcGVlcnMpIGV4aXN0cyBiZWNhdXNlIHdlIHBsYWNlCiYjNDM7ICogbW9ub3RvbmljYWxseS1pbmNyZW1lbnRlZCBldmVudCBjb3VudGVycyAoTlJfVk1TQ0FOX1dSSVRFIGFuZCBQR1JPVEFURV8qKQomIzQzOyAqIGludG8gZW51bSBub2RlX3N0YXRfaXRlbS4KJiM0MzsgKi8KJiM0Mzt1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiYjNDM7CQkJCQkgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KQomIzQzO3sKJiM0MzsJc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJaWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkKJiM0MzsJCXJldHVybiBub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKGxydXZlY19wZ2RhdChscnV2ZWMpLCBpZHgpOwomIzQzOwomIzQzOwlpID0gbWVtY2dfc3RhdHNfaW5kZXgoaWR4KTsKJiM0MzsJaWYgKFdBUk5fT05DRShCQURfU1RBVF9JRFgoaSksICYjMzQ7JXM6IG1pc3Npbmcgc3RhdCBpdGVtICVkXG4mIzM0OywgX19mdW5jX18sIGlkeCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcG4gPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTsKJiM0MzsJcmV0dXJuICh1bnNpZ25lZCBsb25nKVJFQURfT05DRShwbi0mZ3Q7bHJ1dmVjX3N0YXRzLSZndDtzdGF0ZVtpXSk7CiYjNDM7fQomIzQzOwogdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCQkJICAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpCiB7CmRpZmYgLS1naXQgYS9tbS9tbXpvbmUuYyBiL21tL21tem9uZS5jCmluZGV4IDBjOGYxODFkOWQ1MDA2Li4xNzEzOWRiNGQyOTFjZSAxMDA2NDQKLS0tIGEvbW0vbW16b25lLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbW16b25lLmMKQEAgLTc4LDYgJiM0Mzs3OCw3IEBAIHZvaWQgbHJ1dmVjX2luaXQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKQogCiAJbWVtc2V0KGxydXZlYywgMCwgc2l6ZW9mKHN0cnVjdCBscnV2ZWMpKTsKIAlzcGluX2xvY2tfaW5pdCgmYW1wO2xydXZlYy0mZ3Q7bHJ1X2xvY2spOwomIzQzOwlzcGluX2xvY2tfaW5pdCgmYW1wO2xydXZlYy0mZ3Q7Y29zdF9sb2NrKTsKIAl6c3dhcF9scnV2ZWNfc3RhdGVfaW5pdChscnV2ZWMpOwogCiAJZm9yX2VhY2hfbHJ1KGxydSkKZGlmZiAtLWdpdCBhL21tL3N3YXAuYyBiL21tL3N3YXAuYwppbmRleCA1ODhmNTBkOGYxYThjOS4uNzRiMjgxNzc4Y2JjOTIgMTAwNjQ0Ci0tLSBhL21tL3N3YXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwLmMKQEAgLTI3Miw3MyAmIzQzOzI3Miw2IEBAIHZvaWQgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJZm9saW9fYmF0Y2hfYWRkX2FuZF9tb3ZlKGZvbGlvLCBscnVfbW92ZV90YWlsKTsKIH0KIAotdm9pZCBscnVfbm90ZV9jb3N0X3VubG9ja19pcnEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBib29sIGZpbGUsCi0JCXVuc2lnbmVkIGludCBucl9pbywgdW5zaWduZWQgaW50IG5yX3JvdGF0ZWQpCi0JCV9fcmVsZWFzZXMobHJ1dmVjLSZndDtscnVfbG9jaykKLQkJX19yZWxlYXNlcyhyY3UpCi17Ci0JdW5zaWduZWQgbG9uZyBjb3N0OwotCi0JLyoKLQkgKiBSZWZsZWN0IHRoZSByZWxhdGl2ZSBjb3N0IG9mIGluY3VycmluZyBJTyBhbmQgc3BlbmRpbmcgQ1BVCi0JICogdGltZSBvbiByb3RhdGlvbnMuIFRoaXMgZG9lc24mIzM5O3QgYXR0ZW1wdCB0byBtYWtlIGEgcHJlY2lzZQotCSAqIGNvbXBhcmlzb24sIGl0IGp1c3Qgc2F5czogaWYgcmVsb2FkcyBhcmUgYWJvdXQgY29tcGFyYWJsZQotCSAqIGJldHdlZW4gdGhlIExSVSBsaXN0cywgb3Igcm90YXRpb25zIGFyZSBvdmVyd2hlbG1pbmdseQotCSAqIGRpZmZlcmVudCBiZXR3ZWVuIHRoZW0sIGFkanVzdCBzY2FuIGJhbGFuY2UgZm9yIENQVSB3b3JrLgotCSAqLwotCWNvc3QgPSBucl9pbyAqIFNXQVBfQ0xVU1RFUl9NQVggJiM0MzsgbnJfcm90YXRlZDsKLQlpZiAoIWNvc3QpIHsKLQkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7bHJ1dmVjLSZndDtscnVfbG9jayk7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCQlyZXR1cm47Ci0JfQotCi0JZm9yICg7OykgewotCQl1bnNpZ25lZCBsb25nIGxydXNpemU7Ci0KLQkJLyogUmVjb3JkIGNvc3QgZXZlbnQgKi8KLQkJaWYgKGZpbGUpCi0JCQlscnV2ZWMtJmd0O2ZpbGVfY29zdCAmIzQzOz0gY29zdDsKLQkJZWxzZQotCQkJbHJ1dmVjLSZndDthbm9uX2Nvc3QgJiM0Mzs9IGNvc3Q7Ci0KLQkJLyoKLQkJICogRGVjYXkgcHJldmlvdXMgZXZlbnRzCi0JCSAqCi0JCSAqIEJlY2F1c2Ugd29ya2xvYWRzIGNoYW5nZSBvdmVyIHRpbWUgKGFuZCB0byBhdm9pZAotCQkgKiBvdmVyZmxvdykgd2Uga2VlcCB0aGVzZSBzdGF0aXN0aWNzIGFzIGEgZmxvYXRpbmcKLQkJICogYXZlcmFnZSwgd2hpY2ggZW5kcyB1cCB3ZWlnaGluZyByZWNlbnQgcmVmYXVsdHMKLQkJICogbW9yZSB0aGFuIG9sZCBvbmVzLgotCQkgKi8KLQkJbHJ1c2l6ZSA9IGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfSU5BQ1RJVkVfQU5PTikgJiM0MzsKLQkJCSAgbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9BQ1RJVkVfQU5PTikgJiM0MzsKLQkJCSAgbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9JTkFDVElWRV9GSUxFKSAmIzQzOwotCQkJICBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0FDVElWRV9GSUxFKTsKLQotCQlpZiAobHJ1dmVjLSZndDtmaWxlX2Nvc3QgJiM0MzsgbHJ1dmVjLSZndDthbm9uX2Nvc3QgJmd0OyBscnVzaXplIC8gNCkgewotCQkJbHJ1dmVjLSZndDtmaWxlX2Nvc3QgLz0gMjsKLQkJCWxydXZlYy0mZ3Q7YW5vbl9jb3N0IC89IDI7Ci0JCX0KLQotCQlzcGluX3VubG9ja19pcnEoJmFtcDtscnV2ZWMtJmd0O2xydV9sb2NrKTsKLQkJbHJ1dmVjID0gcGFyZW50X2xydXZlYyhscnV2ZWMpOwotCQlpZiAoIWxydXZlYykgewotCQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCQlicmVhazsKLQkJfQotCQlzcGluX2xvY2tfaXJxKCZhbXA7bHJ1dmVjLSZndDtscnVfbG9jayk7Ci0JfQotfQotCi12b2lkIGxydV9ub3RlX2Nvc3RfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvKQotewotCXN0cnVjdCBscnV2ZWMgKmxydXZlYzsKLQotCWxydXZlYyA9IGZvbGlvX2xydXZlY19sb2NrX2lycShmb2xpbyk7Ci0JbHJ1X25vdGVfY29zdF91bmxvY2tfaXJxKGxydXZlYywgZm9saW9faXNfZmlsZV9scnUoZm9saW8pLAotCQkJCWZvbGlvX25yX3BhZ2VzKGZvbGlvKSwgMCk7Ci19Ci0KIHN0YXRpYyB2b2lkIGxydV9hY3RpdmF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKQEAgLTExNjQsOCAmIzQzOzEwOTcsNiBAQCB2b2lkIGxydV9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludAogCiAJY2hpbGRfbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIE5PREVfREFUQShuaWQpKTsKIAlwYXJlbnRfbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMocGFyZW50LCBOT0RFX0RBVEEobmlkKSk7Ci0JcGFyZW50X2xydXZlYy0mZ3Q7YW5vbl9jb3N0ICYjNDM7PSBjaGlsZF9scnV2ZWMtJmd0O2Fub25fY29zdDsKLQlwYXJlbnRfbHJ1dmVjLSZndDtmaWxlX2Nvc3QgJiM0Mzs9IGNoaWxkX2xydXZlYy0mZ3Q7ZmlsZV9jb3N0OwogCiAJZm9yX2VhY2hfbHJ1KGxydSkKIAkJbHJ1dmVjX3JlcGFyZW50X2xydShjaGlsZF9scnV2ZWMsIHBhcmVudF9scnV2ZWMsIGxydSwgbmlkKTsKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggMzVjM2JiMTVhZTk2YTMuLjA3NTQ1MDk1YjM1MmNjIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtNjY4LDcgJiM0Mzs2NjgsNyBAQCBzdGF0aWMgcGFnZW91dF90IHBhZ2VvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCWZvbGlvX2NsZWFyX3JlY2xhaW0oZm9saW8pOwogCiAJdHJhY2VfbW1fdm1zY2FuX3dyaXRlX2ZvbGlvKGZvbGlvKTsKLQlub2RlX3N0YXRfYWRkX2ZvbGlvKGZvbGlvLCBOUl9WTVNDQU5fV1JJVEUpOwomIzQzOwlscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX1ZNU0NBTl9XUklURSwgZm9saW9fbnJfcGFnZXMoZm9saW8pKTsKIAlyZXR1cm4gUEFHRV9TVUNDRVNTOwogfQogCkBAIC0xNDEzLDggJiM0MzsxNDEzLDYgQEAgc3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LAogCQkJCQlzYy0mZ3Q7bnJfc2Nhbm5lZCAtPSAobnJfcGFnZXMgLSAxKTsKIAkJCQkJbnJfcGFnZXMgPSAxOwogCQkJCX0KLQkJCQlzdGF0LSZndDtucl9wYWdlb3V0ICYjNDM7PSBucl9wYWdlczsKLQogCQkJCWlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpCiAJCQkJCWdvdG8ga2VlcDsKIAkJCQlpZiAoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpCkBAIC0yMDM4LDEwICYjNDM7MjAzNiwxMCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sCiAJaXRlbSA9IFBHU1RFQUxfS1NXQVBEICYjNDM7IHJlY2xhaW1lcl9vZmZzZXQoc2MpOwogCW1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBpdGVtLCBucl9yZWNsYWltZWQpOwogCW1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1NURUFMX0FOT04gJiM0MzsgZmlsZSwgbnJfcmVjbGFpbWVkKTsKJiM0MzsJaWYgKG5yX3NjYW5uZWQgJmd0OyBucl9yZWNsYWltZWQpCiYjNDM7CQltb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdST1RBVEVfQU5PTiAmIzQzOyBmaWxlLAomIzQzOwkJCQkgbnJfc2Nhbm5lZCAtIG5yX3JlY2xhaW1lZCk7CiAKLQlscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTsKLQlscnVfbm90ZV9jb3N0X3VubG9ja19pcnEobHJ1dmVjLCBmaWxlLCBzdGF0Lm5yX3BhZ2VvdXQsCi0JCQkJCW5yX3NjYW5uZWQgLSBucl9yZWNsYWltZWQpOwogCWhhbmRsZV9yZWNsYWltX3dyaXRlYmFjayhucl90YWtlbiwgcGdkYXQsIHNjLCAmYW1wO3N0YXQpOwogCXRyYWNlX21tX3Ztc2Nhbl9scnVfc2hyaW5rX2luYWN0aXZlKHBnZGF0LSZndDtub2RlX2lkLAogCQkJbnJfc2Nhbm5lZCwgbnJfcmVjbGFpbWVkLCAmYW1wO3N0YXQsIHNjLSZndDtwcmlvcml0eSwgZmlsZSk7CkBAIC0yMTQ3LDkgJiM0MzsyMTQ1LDkgQEAgc3RhdGljIHZvaWQgc2hyaW5rX2FjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbiwKIAljb3VudF92bV9ldmVudHMoUEdERUFDVElWQVRFLCBucl9kZWFjdGl2YXRlKTsKIAljb3VudF9tZW1jZ19ldmVudHMobHJ1dmVjX21lbWNnKGxydXZlYyksIFBHREVBQ1RJVkFURSwgbnJfZGVhY3RpdmF0ZSk7CiAJbW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiAmIzQzOyBmaWxlLCAtbnJfdGFrZW4pOwomIzQzOwlpZiAobnJfcm90YXRlZCkKJiM0MzsJCW1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JPVEFURV9BTk9OICYjNDM7IGZpbGUsIG5yX3JvdGF0ZWQpOwogCi0JbHJ1dmVjX2xvY2tfaXJxKGxydXZlYyk7Ci0JbHJ1X25vdGVfY29zdF91bmxvY2tfaXJxKGxydXZlYywgZmlsZSwgMCwgbnJfcm90YXRlZCk7CiAJdHJhY2VfbW1fdm1zY2FuX2xydV9zaHJpbmtfYWN0aXZlKHBnZGF0LSZndDtub2RlX2lkLCBucl90YWtlbiwgbnJfYWN0aXZhdGUsCiAJCQlucl9kZWFjdGl2YXRlLCBucl9yb3RhdGVkLCBzYy0mZ3Q7cHJpb3JpdHksIGZpbGUpOwogfQpAQCAtMjI4Miw4ICYjNDM7MjI4MCwxMCBAQCBlbnVtIHNjYW5fYmFsYW5jZSB7CiAKIHN0YXRpYyB2b2lkIHByZXBhcmVfc2Nhbl9jb250cm9sKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQogewotCXVuc2lnbmVkIGxvbmcgZmlsZTsKJiM0MzsJc3RydWN0IGxydV9jb3N0ICphbm9uX2Nvc3QsICpmaWxlX2Nvc3Q7CiAJc3RydWN0IGxydXZlYyAqdGFyZ2V0X2xydXZlYzsKJiM0MzsJdW5zaWduZWQgbG9uZyBscnVzaXplOwomIzQzOwl1bnNpZ25lZCBsb25nIGZpbGU7CiAKIAlpZiAobHJ1X2dlbl9lbmFibGVkKCkgJmFtcDsmYW1wOyAhbHJ1X2dlbl9zd2l0Y2hpbmcoKSkKIAkJcmV0dXJuOwpAQCAtMjI5OSwxMSAmIzQzOzIyOTksNjkgQEAgc3RhdGljIHZvaWQgcHJlcGFyZV9zY2FuX2NvbnRyb2wocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiAKIAkvKgogCSAqIERldGVybWluZSB0aGUgc2NhbiBiYWxhbmNlIGJldHdlZW4gYW5vbiBhbmQgZmlsZSBMUlVzLgomIzQzOwkgKgomIzQzOwkgKiBUaGUgY29zdCBtb2RlbCBpcyBiYXNlZCBvbiByb3RhdGlvbnMsIHJlZmF1bHRzIGFuZAomIzQzOwkgKiByZWNsYWltLWRyaXZlbiB3cml0ZXMgKGFub24gb25seSkgb24gZWFjaCBzaWRlLgomIzQzOwkgKgomIzQzOwkgKiBUaGVzZSBldmVudCBjb3VudGVycyBhcmUgbW9ub3RvbmljLCBzbyBlYWNoIHJlY2xhaW0gY3ljbGUKJiM0MzsJICogdGhlIGRlbHRhIHNpbmNlIHRoZSBsYXN0IHNjYW4gaXMgZXh0cmFjdGVkIGFuZCBpbmNvcnBvcmF0ZWQKJiM0MzsJICogaW50byBhIGRlY2F5aW5nIGF2ZXJhZ2UuIFRoaXMgZW5zdXJlcyBjdXJyZW5jeSwgYXMgd29ya2xvYWRzCiYjNDM7CSAqIGNoYW5nZSBvdmVyIHRpbWUsIGFuZCBhdm9pZHMgb3ZlcmZsb3cgaW4gdGhlIGNhbGN1bGF0aW9ucy4KJiM0MzsJICoKJiM0MzsJICogVXNlIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYygpIHNvIHVuc2lnbmVkIHN1YnRyYWN0aW9uCiYjNDM7CSAqIHlpZWxkcyB0aGUgY29ycmVjdCBkZWx0YSBhY3Jvc3MgYSBzaWduZWQtbG9uZyB3cmFwYXJvdW5kIG9mCiYjNDM7CSAqIHRoZSB1bmRlcmx5aW5nIGNvdW50ZXIgKGEgcmVhbCBoYXphcmQgb24gMzItYml0IHRoYXQgdGhlCiYjNDM7CSAqIGNsYW1wIGluIGxydXZlY19wYWdlX3N0YXRlKCkgd291bGQgb3RoZXJ3aXNlIHR1cm4gaW50byBhIGh1Z2UKJiM0MzsJICogc3B1cmlvdXMgZGVsdGEpLgogCSAqLwotCXNwaW5fbG9ja19pcnEoJmFtcDt0YXJnZXRfbHJ1dmVjLSZndDtscnVfbG9jayk7Ci0Jc2MtJmd0O2Fub25fY29zdCA9IHRhcmdldF9scnV2ZWMtJmd0O2Fub25fY29zdDsKLQlzYy0mZ3Q7ZmlsZV9jb3N0ID0gdGFyZ2V0X2xydXZlYy0mZ3Q7ZmlsZV9jb3N0OwotCXNwaW5fdW5sb2NrX2lycSgmYW1wO3RhcmdldF9scnV2ZWMtJmd0O2xydV9sb2NrKTsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7dGFyZ2V0X2xydXZlYy0mZ3Q7Y29zdF9sb2NrKTsKJiM0MzsKJiM0MzsJZm9yIChpbnQgZiA9IDA7IGYgJmx0Oz0gMTsgZiYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBscnVfY29zdCAqY29zdCA9ICZhbXA7dGFyZ2V0X2xydXZlYy0mZ3Q7Y29zdFtmXTsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgcm90YXRlZCwgaW8sIG5yX3JvdGF0ZWQsIG5yX2lvOwomIzQzOwomIzQzOwkJcm90YXRlZCA9IGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyh0YXJnZXRfbHJ1dmVjLAomIzQzOwkJCQkJCSAgICAgIFBHUk9UQVRFX0FOT04gJiM0MzsgZik7CiYjNDM7CQlpbyA9IGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyh0YXJnZXRfbHJ1dmVjLAomIzQzOwkJCQkJCSBXT1JLSU5HU0VUX1JFU1RPUkVfQkFTRSAmIzQzOyBmKTsKJiM0MzsJCWlmIChmID09IFdPUktJTkdTRVRfQU5PTikKJiM0MzsJCQlpbyAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHRhcmdldF9scnV2ZWMsCiYjNDM7CQkJCQkJCSAgTlJfVk1TQ0FOX1dSSVRFKTsKJiM0MzsKJiM0MzsJCW5yX3JvdGF0ZWQgPSByb3RhdGVkIC0gY29zdC0mZ3Q7bGFzdF9yb3RhdGVkOwomIzQzOwkJbnJfaW8gPSBpbyAtIGNvc3QtJmd0O2xhc3RfaW87CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogUmVmbGVjdCB0aGUgcmVsYXRpdmUgY29zdCBvZiBpbmN1cnJpbmcgSU8gYW5kIHNwZW5kaW5nCiYjNDM7CQkgKiBDUFUgdGltZSBvbiByb3RhdGlvbnMuIFRoaXMgZG9lc24mIzM5O3QgYXR0ZW1wdCB0byBtYWtlIGEKJiM0MzsJCSAqIHByZWNpc2UgY29tcGFyaXNvbiwgaXQganVzdCBzYXlzOiBpZiByZWxvYWRzIGFyZSBhYm91dAomIzQzOwkJICogY29tcGFyYWJsZSBiZXR3ZWVuIHRoZSBMUlUgbGlzdHMsIG9yIHJvdGF0aW9ucyBhcmUKJiM0MzsJCSAqIG92ZXJ3aGVsbWluZ2x5IGRpZmZlcmVudCBiZXR3ZWVuIHRoZW0sIGFkanVzdCBzY2FuCiYjNDM7CQkgKiBiYWxhbmNlIGZvciBDUFUgd29yay4KJiM0MzsJCSAqLwomIzQzOwkJY29zdC0mZ3Q7Y291bnQgJiM0Mzs9IG5yX2lvICogU1dBUF9DTFVTVEVSX01BWCAmIzQzOyBucl9yb3RhdGVkOwomIzQzOwomIzQzOwkJY29zdC0mZ3Q7bGFzdF9yb3RhdGVkID0gcm90YXRlZDsKJiM0MzsJCWNvc3QtJmd0O2xhc3RfaW8gPSBpbzsKJiM0MzsJfQomIzQzOwomIzQzOwlhbm9uX2Nvc3QgPSAmYW1wO3RhcmdldF9scnV2ZWMtJmd0O2Nvc3RbV09SS0lOR1NFVF9BTk9OXTsKJiM0MzsJZmlsZV9jb3N0ID0gJmFtcDt0YXJnZXRfbHJ1dmVjLSZndDtjb3N0W1dPUktJTkdTRVRfRklMRV07CiYjNDM7CiYjNDM7CWxydXNpemUgPSBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLCBOUl9JTkFDVElWRV9BTk9OKSAmIzQzOwomIzQzOwkJICBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLCBOUl9BQ1RJVkVfQU5PTikgJiM0MzsKJiM0MzsJCSAgbHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYywgTlJfSU5BQ1RJVkVfRklMRSkgJiM0MzsKJiM0MzsJCSAgbHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYywgTlJfQUNUSVZFX0ZJTEUpOwomIzQzOwomIzQzOwl3aGlsZSAoYW5vbl9jb3N0LSZndDtjb3VudCAmIzQzOyBmaWxlX2Nvc3QtJmd0O2NvdW50ICZndDsgbHJ1c2l6ZSAvIDQpIHsKJiM0MzsJCWFub25fY29zdC0mZ3Q7Y291bnQgLz0gMjsKJiM0MzsJCWZpbGVfY29zdC0mZ3Q7Y291bnQgLz0gMjsKJiM0MzsJfQomIzQzOwomIzQzOwlzYy0mZ3Q7YW5vbl9jb3N0ID0gYW5vbl9jb3N0LSZndDtjb3VudDsKJiM0MzsJc2MtJmd0O2ZpbGVfY29zdCA9IGZpbGVfY29zdC0mZ3Q7Y291bnQ7CiYjNDM7CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7dGFyZ2V0X2xydXZlYy0mZ3Q7Y29zdF9sb2NrKTsKIAogCS8qCiAJICogVGFyZ2V0IGRlc2lyYWJsZSBpbmFjdGl2ZTphY3RpdmUgbGlzdCByYXRpb3MgZm9yIHRoZSBhbm9uCkBAIC00ODEwLDcgJiM0Mzs0ODY4LDggQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJc3RydWN0IHJlY2xhaW1fc3RhdCBzdGF0OwogCXN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7CiAJaW50IHNjYW5uZWQsIHJlY2xhaW1lZDsKLQlpbnQgaXNvbGF0ZWQgPSAwLCB0eXBlLCB0eXBlX3NjYW5uZWQ7CiYjNDM7CWludCBpc29sYXRlZCA9IDAsIG5yX2lzb2xhdGVkID0gMCwgdHlwZSwgdHlwZV9zY2FubmVkOwomIzQzOwl1bnNpZ25lZCBsb25nIHRvdGFsX3JlY2xhaW1lZCA9IDA7CiAJYm9vbCBza2lwX3JldHJ5ID0gZmFsc2U7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpOwpAQCAtNDgyMiw2ICYjNDM7NDg4MSw3IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCiAJc2Nhbm5lZCA9IGlzb2xhdGVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIHN3YXBwaW5lc3MsCiAJCQkJICZhbXA7bGlzdCwgJmFtcDtpc29sYXRlZCwgJmFtcDt0eXBlLCAmYW1wO3R5cGVfc2Nhbm5lZCk7CiYjNDM7CW5yX2lzb2xhdGVkID0gaXNvbGF0ZWQ7CiAKIAkvKiBTY2FubmluZyBtYXkgaGF2ZSBlbXB0aWVkIHRoZSBvbGRlc3QgZ2VuLCBmbHVzaCBpdCAqLwogCWlmIChzY2FubmVkKQpAQCAtNDgzNCw2ICYjNDM7NDg5NCw3IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogcmV0cnk6CiAJcmVjbGFpbWVkID0gc2hyaW5rX2ZvbGlvX2xpc3QoJmFtcDtsaXN0LCBwZ2RhdCwgc2MsICZhbXA7c3RhdCwgZmFsc2UsIG1lbWNnKTsKIAlzYy0mZ3Q7bnJfcmVjbGFpbWVkICYjNDM7PSByZWNsYWltZWQ7CiYjNDM7CXRvdGFsX3JlY2xhaW1lZCAmIzQzOz0gcmVjbGFpbWVkOwogCS8qIFJldHJ5IHBhc3MgaXMgb25seSBtZWFudCBmb3IgY2xlYW4gZm9saW9zIHdpdGhvdXQgbmV3IGlzb2xhdGlvbiAqLwogCWlmIChpc29sYXRlZCkKIAkJaGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKGlzb2xhdGVkLCBwZ2RhdCwgc2MsICZhbXA7c3RhdCk7CkBAIC00ODg3LDYgJiM0Mzs0OTQ4LDEwIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCQlnb3RvIHJldHJ5OwogCX0KIAomIzQzOwlpZiAobnJfaXNvbGF0ZWQgJmd0OyB0b3RhbF9yZWNsYWltZWQpCiYjNDM7CQltb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdST1RBVEVfQU5PTiAmIzQzOyB0eXBlLAomIzQzOwkJCQkgbnJfaXNvbGF0ZWQgLSB0b3RhbF9yZWNsYWltZWQpOwomIzQzOwogCXJldHVybiBzY2FubmVkOwogfQogCmRpZmYgLS1naXQgYS9tbS92bXN0YXQuYyBiL21tL3Ztc3RhdC5jCmluZGV4IGY1MzQ5NzJmNTE3ZGUwLi44N2Q0YTY3ODEzNjc2NyAxMDA2NDQKLS0tIGEvbW0vdm1zdGF0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zdGF0LmMKQEAgLTEwMjQsNiAmIzQzOzEwMjQsMTcgQEAgdW5zaWduZWQgbG9uZyBub2RlX3BhZ2Vfc3RhdGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwKIAogCXJldHVybiBub2RlX3BhZ2Vfc3RhdGVfcGFnZXMocGdkYXQsIGl0ZW0pOwogfQomIzQzOwomIzQzOy8qCiYjNDM7ICogTm9uLWNsYW1waW5nIHZhcmlhbnQgb2Ygbm9kZV9wYWdlX3N0YXRlKCkgaW50ZW5kZWQgZm9yIGNhbGxlcnMgdGhhdAomIzQzOyAqIHNuYXBzaG90IGEgbW9ub3RvbmljYWxseS1pbmNyZW1lbnRlZCBjb3VudGVyIGFuZCBzdWJ0cmFjdCB0d28gc2FtcGxlcy4KJiM0MzsgKiBTZWUgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMoKSBmb3IgdGhlIHJhdGlvbmFsZS4KJiM0MzsgKi8KJiM0Mzt1bnNpZ25lZCBsb25nIG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwKJiM0MzsJCQkJCWVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbSkKJiM0Mzt7CiYjNDM7CXJldHVybiAodW5zaWduZWQgbG9uZylhdG9taWNfbG9uZ19yZWFkKCZhbXA7cGdkYXQtJmd0O3ZtX3N0YXRbaXRlbV0pOwomIzQzO30KICNlbmRpZgogCiAvKgpAQCAtMTI4OSw2ICYjNDM7MTMwMCw4IEBAIGNvbnN0IGNoYXIgKiBjb25zdCB2bXN0YXRfdGV4dFtdID0gewogCVtJKFBHU0NBTl9QUk9BQ1RJVkUpXQkJCT0gJiMzNDtwZ3NjYW5fcHJvYWN0aXZlJiMzNDssCiAJW0koUEdTQ0FOX0FOT04pXQkJCT0gJiMzNDtwZ3NjYW5fYW5vbiYjMzQ7LAogCVtJKFBHU0NBTl9GSUxFKV0JCQk9ICYjMzQ7cGdzY2FuX2ZpbGUmIzM0OywKJiM0MzsJW0koUEdST1RBVEVfQU5PTildCQkJPSAmIzM0O3Bncm90YXRlX2Fub24mIzM0OywKJiM0MzsJW0koUEdST1RBVEVfRklMRSldCQkJPSAmIzM0O3Bncm90YXRlX2ZpbGUmIzM0OywKIAlbSShQR1JFRklMTCldCQkJCT0gJiMzNDtwZ3JlZmlsbCYjMzQ7LAogI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKIAlbSShOUl9IVUdFVExCKV0JCQkJPSAmIzM0O25yX2h1Z2V0bGImIzM0OywKZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuYwppbmRleCBmMzUxNzk4ZTcyM2FjZC4uN2FjMmI4OGM4MGFlNTYgMTAwNjQ0Ci0tLSBhL21tL3dvcmtpbmdzZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS93b3JraW5nc2V0LmMKQEAgLTU4NCwxMSAmIzQzOzU4NCw2IEBAIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdykKIAkvKiBGb2xpbyB3YXMgYWN0aXZlIHByaW9yIHRvIGV2aWN0aW9uICovCiAJaWYgKHdvcmtpbmdzZXQpIHsKIAkJZm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pOwotCQkvKgotCQkgKiBYWFg6IE1vdmUgdG8gZm9saW9fYWRkX2xydSgpIHdoZW4gaXQgc3VwcG9ydHMgbmV3IHZzCi0JCSAqIHB1dGJhY2sKLQkJICovCi0JCWxydV9ub3RlX2Nvc3RfcmVmYXVsdChmb2xpbyk7CiAJCW1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBXT1JLSU5HU0VUX1JFU1RPUkVfQkFTRSAmIzQzOyBmaWxlLCBucik7CiAJfQogb3V0Ogo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTM2CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaW4gZnJvbnQgb2YgbWUgdGhhdCYjMzk7cyB0d2Vha2luZyB0aGUgTFJVIGNvc3QgbW9kZWwgYW5kIGl0cyBhc3NvY2lhdGVkIHN0YXRzIOKAkyB0aGF0JiMzOTtzIHNvbWUgc2VyaW91cyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN0dWZmLiBJdCYjMzk7cyBpbnRyb2R1Y2luZyB0aGVzZSBuZXcgbW9ub3RvbmljIGNvdW50ZXJzLCBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCBhbmQgYG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWNgLiBBbmQgaXQmIzM5O3MgYWxzbyBtYWtpbmcgc29tZSBjaGFuZ2VzIHRvIGhvdyBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgIGNhbGN1bGF0ZXMgdGhlIGNvc3Qgb2Ygc2Nhbm5pbmcgYW5vbnltb3VzIGFuZCBmaWxlIHBhZ2VzLiBFc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBpcyBjaGFuZ2luZyB0aGUgcmVjbGFpbSBwYXRoLCBzcGVjaWZpY2FsbHkgdGhlIGJhbGFuY2UgYmV0d2VlbiBzY2FubmluZyBhbm9uIGFuZCBmaWxlIExSVXMsIHNvIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLgoKVGhlIHBhdGNoIGFsc28gc2VlbXMgdG8gYmUgY2xlYW5pbmcgdXAgc29tZSBvbGRlciBmdW5jdGlvbnMsIGxpa2UgcmVtb3ZpbmcgYGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycWAgYW5kIGBscnVfbm90ZV9jb3N0X3JlZmF1bHRgLCBhbmQgYWRkaW5nIHR3byBuZXcgaXRlbXMgYFBHUk9UQVRFX0FOT05gIGFuZCBgUEdST1RBVEVfRklMRWAuIEl0IGxvb2tzIGxpa2UgYHNocmlua19pbmFjdGl2ZV9saXN0YCwgYHNocmlua19hY3RpdmVfbGlzdGAsIGFuZCBgZXZpY3RfZm9saW9zYCBhcmUgYWxsIGJlaW5nIHVwZGF0ZWQgdG8gYWNjb3VudCBmb3IgdGhlIG5ldyBpdGVtcy4gVGhpcyBpcyBhbGwgY2VudGVyZWQgb24gaG93IHRoZSBrZXJuZWwgZGVjaWRlcyB3aGF0IHRvIGV2aWN0LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhpcyBmdXJ0aGVyLgoKVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgYSBrZXkgdGFyZ2V0OiBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCwgYG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWNgLCBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgLCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYGV2aWN0X2ZvbGlvc2AsIGBwYWdlb3V0YCwgYW5kIGBzaHJpbmtfZm9saW9fbGlzdGAuIExvb2tzIGxpa2UgYHByZXBhcmVfc2Nhbl9jb250cm9sYCwgYHNocmlua19pbmFjdGl2ZV9saXN0YCwgYHNocmlua19hY3RpdmVfbGlzdGAsIGFuZCBgZXZpY3RfZm9saW9zYCBhcmUgYWxsIHBhcnQgb2YgdGhlIHJlY2xhaW0gcGF0aC4gVGhlc2UgYXJlIGRlZmluaXRlbHkgd2hlcmUgSSBzaG91bGQgZm9jdXMgdGhlIGZ1enppbmcgZWZmb3J0cy4KCkkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhlIGNvZGUgaXMgaW4gdGhlIG1haW4gTU0gc3Vic3lzdGVtczogYG1tL3Ztc2Nhbi5jYCwgYG1tL3N3YXAuY2AsIGBtbS93b3JraW5nc2V0LmNgLCBgbW0vbWVtY29udHJvbC5jYCwgYW5kIGBtbS92bXN0YXQuY2AsIHNvIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG9uIGBDT05GSUdfTUVNQ0dgIHdoaWNoIGlzIHJlbGF0ZWQgdG8gYG1tL21lbWNvbnRyb2wuY2AuIEkgbmVlZCB0byByZXZpZXcgYG1tL01ha2VmaWxlYCBhbmQgYG1tL0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHRoYXQgY291bGQgaW5mbHVlbmNlIGhvdyB0aGlzIGNvZGUgYmVoYXZlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcmVwYXJlX3NjYW5fY29udHJvbCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tem9uZS5oPTc2Nj1zdHJ1Y3QgbHJ1dmVjIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTc3My1cdCAqIGluY3JlYXNlcywgdGhlIHJlY2xhaW0gc2NhbiBiYWxhbmNlIHRpcHMgdG93YXJkIHRoZSBvdGhlci5cbmluY2x1ZGUvbGludXgvbW16b25lLmg6Nzc0Olx0ICogVXBkYXRlZCBhbmQgZGVjYXllZCBhdCBwcmVwYXJlX3NjYW5fY29udHJvbCgpIHRpbWU7IGNvc3RfbG9ja1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03NzUtXHQgKiBzZXJpYWxpc2VzIHRoYXQgdXBkYXRlLlxuLS1cbm1tL3Ztc2Nhbi5jPTIyNzQ9ZW51bSBzY2FuX2JhbGFuY2Uge1xuLS1cbm1tL3Ztc2Nhbi5jLTIyODAtXG5tbS92bXNjYW4uYzoyMjgxOnN0YXRpYyB2b2lkIHByZXBhcmVfc2Nhbl9jb250cm9sKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtMjI4Mi17XG4tLVxubW0vdm1zY2FuLmM9NjIxMT1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MjMzLVxubW0vdm1zY2FuLmM6NjIzNDpcdHByZXBhcmVfc2Nhbl9jb250cm9sKHBnZGF0LCBzYyk7XG5tbS92bXNjYW4uYy02MjM1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzYzCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE1lbW9yeSBNYW5hZ2VtZW50IENvZGUqKgoKQWxyaWdodCwgc28gdGhlIG1vZGlmaWNhdGlvbnMgYXJlIGRlZmluaXRlbHkgY2VudGVyZWQgaW4gYG1tL3Ztc2Nhbi5jYC4gVGhhdCYjMzk7cyBnb29kLCBhdCBsZWFzdCBpdCYjMzk7cyBhIGtub3duIGFyZWEuIFRoYXQgZmlsZSBpcyBhbHdheXMgY29tcGlsZWQsIHdoaWNoIGlzIHVzZWZ1bCB3aGVuIHRyYWNraW5nIGRvd24gYSBzcGVjaWZpYyBpc3N1ZS4gSSBjYW4gdXNlIG15IGV4cGVyaWVuY2UgdG8gaW1tZWRpYXRlbHkgdGhpbmsgYWJvdXQgdGhlIGNoYW5nZXMgbWFkZSB0aGVyZSBhbmQgaG93IHRoZXkgbWF5IGluZmx1ZW5jZSBteSB3b3JrLgoKTm93LCBpZiBtZW1vcnkgc2VydmVzLCBgQ09ORklHX01FTUNHYCBjb21lcyBpbnRvIHBsYXkgd2l0aCBgbW0vbWVtY29udHJvbC5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGNsb3NlbHkgdGhlIGN1cnJlbnQgbW9kaWZpY2F0aW9uIGlzIHRpZWQgdG8gbWVtb3J5IGNvbnRyb2wgZ3JvdXBzLiBUbyB2ZXJpZnkgdGhlIHJlbGF0aW9uc2hpcCwgbGV0JiMzOTtzIHRha2UgYSBxdWljayBsb29rIGF0IGBtbS9NYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgY29tcGlsYXRpb24gb2YgYG1lbWNvbnRyb2wuY2AuIFRoaXMgd2lsbCBnaXZlIG1lIGFuIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoaXMgZmlsZSBhbmQgdGhlIGNvbXBpbGF0aW9uIHByb2Nlc3MsIGhlbHBpbmcgbWUgYnVpbGQgYSBtZW50YWwgbW9kZWwgb2YgdGhlIGNoYW5nZXMuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtY29udHJvbC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9Mjc9S0NPVl9JTlNUUlVNRU5UX2ttZW1sZWFrLm8gOj0gblxubW0vTWFrZWZpbGU6Mjg6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wubyA6PSBuXG5tbS9NYWtlZmlsZS0yOS1LQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC12MS5vIDo9IG5cbi0tXG5tbS9NYWtlZmlsZT0xMDQ9b2JqLSQoQ09ORklHX01FTUNHX1YxKSAmIzQzOz0gbWVtY29udHJvbC12MS5vXG5tbS9NYWtlZmlsZToxMDU6b2JqLSQoQ09ORklHX01FTUNHKSAmIzQzOz0gbWVtY29udHJvbC5vIHZtcHJlc3N1cmUub1xubW0vTWFrZWZpbGUtMTA2LWlmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxubW0vTWFrZWZpbGU6MTA3Om9iai0kKENPTkZJR19NRU1DRykgJiM0Mzs9IGJwZl9tZW1jb250cm9sLm9cbm1tL01ha2VmaWxlLTEwOC1lbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODM4CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMTc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IExpbmUgb2YgSW5xdWlyeTogTWVtb3J5IE1hbmFnZW1lbnQgYW5kIExSVSBHZW5lcmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBhbmQgaXQgbG9va3MgbGlrZSBgQ09ORklHX01FTUNHYCBpcyBkZWZpbml0ZWx5IGEgcHJlcmVxdWlzaXRlIGZvciBgbWVtY29udHJvbC5jYC4gVGhhdCYjMzk7cyBub3Qgc3VycHJpc2luZy4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29ubmVjdGlvbiB0byBgQ09ORklHX0xSVV9HRU5gLiBMZXQmIzM5O3Mgc2VlLi4uIGxvb2tpbmcgYXQgYG1tL3Ztc2Nhbi5jYCwgSSBzcG90IHRoaXMgZnVuY3Rpb24sIGBwcmVwYXJlX3NjYW5fY29udHJvbGAuIEhtbSwgaW5zaWRlIGl0LCB0aGVyZSYjMzk7cyBhIGNoZWNrOiBgbHJ1X2dlbl9lbmFibGVkKClgLiBUaGlzIGlzIGludGVyZXN0aW5nOyBpdCBzdWdnZXN0cyB0aGF0IExSVSBnZW5lcmF0aW9uIGlzIHNvbWVob3cgaW50ZWdyYXRlZCBpbnRvIHRoZSBzY2FubmluZyBwcm9jZXNzIGl0c2VsZi4gVGhlIGxvZ2ljIHN1Z2dlc3RzLCB0aGF0LCBpZiBMUlUgZ2VuZXJhdGlvbiBpcyBlbmFibGVkIGFuZCBpdCBpcyBub3Qgc3dpdGNoaW5nLCB0aGVuIHRoZSBmdW5jdGlvbiBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgIGlzIGdvaW5nIHRvIHJldHVybi4gQWxyaWdodCwgc2VlbXMgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdC4gTm93LCBsZXQmIzM5O3MgbG9vayBhdCB3aGVyZSBgZXZpY3RfZm9saW9zYCBmaXRzIGludG8gYWxsIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXZpY3RfZm9saW9zJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTQ4MjY9c3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS92bXNjYW4uYy00ODU5LVxubW0vdm1zY2FuLmM6NDg2MDpzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbm1tL3Ztc2Nhbi5jLTQ4NjEtXHRcdFx0c3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKVxuLS1cbm1tL3Ztc2Nhbi5jPTUwMjQ9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MDQ3LVx0XHRucl9iYXRjaCA9IG1pbihucl90b19zY2FuLCBNSU5fTFJVX0JBVENIKTtcbm1tL3Ztc2Nhbi5jOjUwNDg6XHRcdGRlbHRhID0gZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKTtcbm1tL3Ztc2Nhbi5jLTUwNDktXHRcdGlmICghZGVsdGEpXG4tLVxubW0vdm1zY2FuLmM9NTY1MT1zdGF0aWMgaW50IHJ1bl9ldmljdGlvbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbi0tXG5tbS92bXNjYW4uYy01NjcxLVx0XHRucl9iYXRjaCA9IG1pbihucl90b19yZWNsYWltIC0gc2MtXHUwMDNlbnJfcmVjbGFpbWVkLCBNQVhfTFJVX0JBVENIKTtcbm1tL3Ztc2Nhbi5jOjU2NzI6XHRcdGlmICghZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKSlcbm1tL3Ztc2Nhbi5jLTU2NzMtXHRcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MjQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzoKCioqQ2hlY2tpbmcgdGhlIE1HTFJVIENvbm5lY3Rpb24gdG8gRXZpY3Rpb24gTG9naWMqKgoKQWxyaWdodCwgc28gYGV2aWN0X2ZvbGlvc2AgaXMgcGFydCBvZiB0aGUgTUdMUlUgaW1wbGVtZW50YXRpb24uIE15IGluaXRpYWwgY29uY2VybiBpcyB0byB1bmRlcnN0YW5kIGl0cyBwbGFjZSB3aXRoaW4gdGhlIGJyb2FkZXIgcGljdHVyZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgaWYgdGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNvbXBpbGVkIGlmIHRoZSBgQ09ORklHX0xSVV9HRU5gIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBkZXRhaWwgYmVjYXVzZSBpdCB0aWVzIGBldmljdF9mb2xpb3NgIGRpcmVjdGx5IHRvIHRoZSBtdWx0aS1nZW5lcmF0aW9uYWwgTFJVIG1lY2hhbmlzbS4gRW5zdXJpbmcgdGhpcyBkZXBlbmRlbmN5IHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBiZWhhdmlvciBpbiB0aGUgbGFyZ2VyIGNvbnRleHQgb2YgbWVtb3J5IG1hbmFnZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19MUlVfR0VOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9ODI0PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XG4tLVxubW0vdm1zY2FuLmMtODMwLVxubW0vdm1zY2FuLmM6ODMxOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxubW0vdm1zY2FuLmMtODMyLS8qXG4tLVxubW0vdm1zY2FuLmM9ODU0PXN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS92bXNjYW4uYy04NTctfVxubW0vdm1zY2FuLmM6ODU4OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xubW0vdm1zY2FuLmMtODU5LVxuLS1cbm1tL3Ztc2Nhbi5jPTI2NzE9c3RhdGljIGJvb2wgY2FuX2FnZV9hbm9uX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS92bXNjYW4uYy0yNjgyLVxubW0vdm1zY2FuLmM6MjY4MzojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL3Ztc2Nhbi5jLTI2ODQtXG5tbS92bXNjYW4uYz0yNjg1PURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGxydV9zd2l0Y2gpO1xubW0vdm1zY2FuLmM6MjY4NjojaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxubW0vdm1zY2FuLmMtMjY4Ny1ERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9UUlVFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcbi0tXG5tbS92bXNjYW4uYz0yODY3PXN0YXRpYyB2b2lkIHJlc2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxuLS1cbm1tL3Ztc2Nhbi5jLTI4ODYtXG5tbS92bXNjYW4uYzoyODg3OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcbm1tL3Ztc2Nhbi5jLTI4ODgtXG4tLVxubW0vdm1zY2FuLmM9Mjk5Nj12b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS92bXNjYW4uYy0zMDI0LVxubW0vdm1zY2FuLmM6MzAyNTojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VICovXG5tbS92bXNjYW4uYy0zMDI2LVxuLS1cbm1tL3Ztc2Nhbi5jPTU5MjA9bGF0ZV9pbml0Y2FsbChpbml0X2xydV9nZW4pO1xubW0vdm1zY2FuLmMtNTkyMS1cbm1tL3Ztc2Nhbi5jOjU5MjI6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXG5tbS92bXNjYW4uYy01OTIzLVxuLS1cbm1tL3Ztc2Nhbi5jPTU5MzQ9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01OTM4LVxubW0vdm1zY2FuLmM6NTkzOTojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbm1tL3Ztc2Nhbi5jLTU5NDAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTA1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVk1zY2FuIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIHRoYXQgYGV2aWN0X2ZvbGlvc2AgaXMgZGVmaW5pdGVseSBuZXN0bGVkIHdpdGhpbiB0aGF0IGAjaWZkZWYgQ09ORklHX0xSVV9HRU5gIGJsb2NrLiBUaGF0JiMzOTtzIGEga2V5IG9ic2VydmF0aW9uLiBOb3csIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSBJIGhhdmUgdGhpcyByaWdodC4uLiB3YWl0IGEgc2Vjb25kLCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYW5kIGBwcmVwYXJlX3NjYW5fY29udHJvbGAgYXJlIGFsbCBjb3JlIGNvbXBvbmVudHMgb2YgdGhlIHRyYWRpdGlvbmFsIGFjdGl2ZS9pbmFjdGl2ZSBMUlUgbWVjaGFuaXNtLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIGJvdGggdGhlIE1HTFJVIHZpYSBgZXZpY3RfZm9saW9zYCwgYW5kIHRoZSBjbGFzc2ljIExSVSB3aXRoIHRob3NlIHRocmVlIGZ1bmN0aW9ucy4gU28gaXQmIzM5O3MgYWZmZWN0aW5nICpib3RoKiBpbXBsZW1lbnRhdGlvbnMsIG5vdCBqdXN0IHRoZSBuZXcgb25lLiBJIHNob3VsZCBwcm9iYWJseSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGJ5IGxvb2tpbmcgYXQgYG1tL3Ztc2Nhbi5jYCB0byBjb25maXJtLiBJdCBpcyBub3QganVzdCBvbmUgTFJVIHRoYXQgaXMgYmVpbmcgbW9kaWZpZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V2aWN0X2ZvbGlvcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTQ4MjY9c3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS92bXNjYW4uYy00ODU5LVxubW0vdm1zY2FuLmM6NDg2MDpzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbm1tL3Ztc2Nhbi5jLTQ4NjEtXHRcdFx0c3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKVxuLS1cbm1tL3Ztc2Nhbi5jPTUwMjQ9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MDQ3LVx0XHRucl9iYXRjaCA9IG1pbihucl90b19zY2FuLCBNSU5fTFJVX0JBVENIKTtcbm1tL3Ztc2Nhbi5jOjUwNDg6XHRcdGRlbHRhID0gZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKTtcbm1tL3Ztc2Nhbi5jLTUwNDktXHRcdGlmICghZGVsdGEpXG4tLVxubW0vdm1zY2FuLmM9NTY1MT1zdGF0aWMgaW50IHJ1bl9ldmljdGlvbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbi0tXG5tbS92bXNjYW4uYy01NjcxLVx0XHRucl9iYXRjaCA9IG1pbihucl90b19yZWNsYWltIC0gc2MtXHUwMDNlbnJfcmVjbGFpbWVkLCBNQVhfTFJVX0JBVENIKTtcbm1tL3Ztc2Nhbi5jOjU2NzI6XHRcdGlmICghZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKSlcbm1tL3Ztc2Nhbi5jLTU2NzMtXHRcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjUzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBjb2RlLiBIZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZyBhcyBJIGFuYWx5emUgdGhlc2UgZnVuY3Rpb25zOgoKKipBbmFseXppbmcgYHNocmlua19pbmFjdGl2ZV9saXN0YCBhbmQgYHNocmlua19hY3RpdmVfbGlzdGAqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGxpc3RzIGFyZSBiZWluZyBtYW5hZ2VkIGFuZCBob3cgbWVtb3J5IGlzIHBvdGVudGlhbGx5IGJlaW5nIG9wdGltaXplZC4gU28sIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgbG9va2luZyBhdCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGFuZCBgc2hyaW5rX2FjdGl2ZV9saXN0YC4gVGhlc2UgZnVuY3Rpb24gbmFtZXMgYXJlIHByZXR0eSBkZXNjcmlwdGl2ZSwgc28gbXkgaW5pdGlhbCBoeXBvdGhlc2lzIGlzIHRoYXQgdGhleSYjMzk7cmUgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcHJvYmFibHkgaW52b2x2ZSByZWR1Y2luZyB0aGUgc2l6ZSBvZiBzb21lIGRhdGEgc3RydWN0dXJlcyB0byByZWNsYWltIHJlc291cmNlcy4gSSBuZWVkIHRvIHNlZSAqaG93KiB0aGlzIHNocmlua2luZyBpcyBhY2NvbXBsaXNoZWQg4oCTIGFyZSB3ZSBmcmVlaW5nIG1lbW9yeSwgY29hbGVzY2luZyBzZWdtZW50cywgb3IganVzdCByZWFsbG9jYXRpbmcgdG8gc21hbGxlciBibG9ja3M/IFdoYXQgYXJlIHRoZSBjcml0ZXJpYSBmb3IgdHJpZ2dlcmluZyB0aGlzIHNocmlua2FnZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGUgYHNocmlua19pbmFjdGl2ZV9saXN0YCBhbmQgYHNocmlua19hY3RpdmVfbGlzdGAgb24gcGVyZm9ybWFuY2UsIHBhcnRpY3VsYXJseSB0aGUgdHJhZGUtb2ZmIGJldHdlZW4gbWVtb3J5IGZvb3RwcmludCBhbmQgZXhlY3V0aW9uIHNwZWVkLiBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgSSBzaG91bGQgYmUgYXdhcmUgb2YsIGVzcGVjaWFsbHkgaWYgdGhlIGxpc3RzIGFyZSBiZWluZyBhY2Nlc3NlZCBieSBtdWx0aXBsZSB0aHJlYWRzPyBVbHRpbWF0ZWx5LCBJIG5lZWQgYSB2ZXJ5IGNsZWFyIHBpY3R1cmUgb2YgdGhlaXIgZnVuY3Rpb25hbGl0eSBhbmQgdGhlIGludmFyaWFudHMgdGhleSBtYWludGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2hyaW5rX2luYWN0aXZlX2xpc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz0xOTQyPXN0YXRpYyB2b2lkIGhhbmRsZV9yZWNsYWltX3dyaXRlYmFjayh1bnNpZ25lZCBsb25nIG5yX3Rha2VuLFxuLS1cbm1tL3Ztc2Nhbi5jLTE5ODAtLypcbm1tL3Ztc2Nhbi5jOjE5ODE6ICogc2hyaW5rX2luYWN0aXZlX2xpc3QoKSBpcyBhIGhlbHBlciBmb3Igc2hyaW5rX25vZGUoKS4gIEl0IHJldHVybnMgdGhlIG51bWJlclxubW0vdm1zY2FuLmMtMTk4Mi0gKiBvZiByZWNsYWltZWQgcGFnZXNcbm1tL3Ztc2Nhbi5jLTE5ODMtICovXG5tbS92bXNjYW4uYzoxOTg0OnN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19pbmFjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbixcbm1tL3Ztc2Nhbi5jLTE5ODUtXHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4tLVxubW0vdm1zY2FuLmM9MjIxMz1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfbGlzdChlbnVtIGxydV9saXN0IGxydSwgdW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxuLS1cbm1tL3Ztc2Nhbi5jLTIyMjMtXG5tbS92bXNjYW4uYzoyMjI0Olx0cmV0dXJuIHNocmlua19pbmFjdGl2ZV9saXN0KG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIGxydSk7XG5tbS92bXNjYW4uYy0yMjI1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4MzgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCYjMzk7cyBJbXBhY3Qgb24gTFJVIGFuZCBNR0xSVSBJbXBsZW1lbnRhdGlvbnMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIGJpdCBtb3JlIGludm9sdmVkIHRoYW4gSSBpbml0aWFsbHkgdGhvdWdodC4gSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlcyB0b3VjaCBib3RoIHRoZSB0cmFkaXRpb25hbCBMUlUgYWxnb3JpdGhtICphbmQqIHRoZSBNR0xSVSAoTXVsdGktR2VuZXJhdGlvbmFsIExSVSkgaW1wbGVtZW50YXRpb24uIFRoZSBjbGFzc2ljIExSVSBpcyBhbHdheXMgYmFrZWQgaW50byB0aGUga2VybmVsLCB0aGF04oCZcyBubyBzdXJwcmlzZSwgYnV0IE1HTFJVIGlzIGNvbmRpdGlvbmFsLCBiYXNlZCBvbiB0aGUgYENPTkZJR19MUlVfR0VOYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhlcmVmb3JlLCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIG92ZXJhbGwgZWZmZWN0IG9mIHRoaXMgY29kZSwgSSYjMzk7bSB0aGlua2luZyB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgZW5hYmxlIGBDT05GSUdfTFJVX0dFTmAuCgpIb2xkIG9uIGEgc2Vjb25kLCB0aG91Z2guIEkmIzM5O20gYWxzbyBzZWVpbmcgc29tZSBwb3RlbnRpYWwgaW50ZXJhY3Rpb24gd2l0aCBgQ09ORklHX01FTUNHYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pY2AgZnVuY3Rpb24uIFRoYXQgZnVuY3Rpb24gaGFzIHNwZWNpZmljIGxvZ2ljIHRoYXQgaGluZ2VzIG9uIGBtZW1fY2dyb3VwX2Rpc2FibGVkKClgLiBUaGlzIGlzIGdvaW5nIHRvIG1hdHRlciwgc28gSSByZWFsbHkgbmVlZCB0byBleGFtaW5lIHRoZSBkZXRhaWxzIHRoZXJlLiBJ4oCZbGwgbmF2aWdhdGUgdG8gYG1tL21lbWNvbnRyb2wuY2AgYW5kIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pY2AgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBhbGwgZml0cyB0b2dldGhlciBhbmQgaG93IHRoZSBtZW1vcnkgY2dyb3VwIHNldHRpbmcgY2hhbmdlcyB0aGUgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9NDg2PXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcbi0tXG5tbS9tZW1jb250cm9sLmMtNTA4LS8qKlxubW0vbWVtY29udHJvbC5jOjUwOTogKiBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMgLSBub24tY2xhbXBpbmcgbHJ1dmVjIHN0YXQgcmVhZCBmb3IgZGVsdGEgc2FtcGxpbmdcbm1tL21lbWNvbnRyb2wuYy01MTAtICogQGxydXZlYzogdGhlIExSVSB2ZWN0b3IgdG8gcmVhZCBmcm9tXG4tLVxubW0vbWVtY29udHJvbC5jLTUyNi0gKi9cbm1tL21lbWNvbnRyb2wuYzo1Mjc6dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxubW0vbWVtY29udHJvbC5jLTUyOC1cdFx0XHRcdFx0ICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0MzkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipLY29uZmlnIERlcGVuZGVuY3kgQ29uZmlybWF0aW9uKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgYWJzb2x1dGVseSBnb2luZyB0byBuZWVkIGBDT05GSUdfTUVNQ0dgLiBObyBxdWVzdGlvbiBhYm91dCB0aGF0LiBOb3csIGxldCYjMzk7cyBzZWUsIHdoYXQmIzM5O3MgbmV4dD8gSG1tLCB0aGUgcHJvYmxlbSBJJiMzOTttIHRyeWluZyB0byBzb2x2ZSBzZWVtcyB0byBoaW5nZSBvbiBzb21ldGhpbmcgcmVsYXRlZCB0byBgTFJVX0dFTmAuIEkgc2hvdWxkIGdvIGRpcmVjdGx5IHRvIGBtbS9LY29uZmlnYCB0byBzZWUgaWYgdGhhdCBvcHRpb24gaXMgZW5hYmxlZCwgYW5kIHVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcy4gR290dGEgbWFrZSBzdXJlIHdlJiMzOTtyZSBub3QgbWlzc2luZyBhIGNyaXRpY2FsIGRlcGVuZGVuY3kgb3Igc29tZXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwMDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTFJVX0dFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xNDA2PWVuZGlmICMgVVNFUkZBVUxURkRcbi0tXG5tbS9LY29uZmlnLTE0MDgtIyBtdWx0aS1nZW4gTFJVIHtcbm1tL0tjb25maWc6MTQwOTpjb25maWcgTFJVX0dFTlxubW0vS2NvbmZpZy0xNDEwLVx0Ym9vbCBcJiMzNDtNdWx0aS1HZW4gTFJVXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDE3LVxubW0vS2NvbmZpZzoxNDE4OmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcbm1tL0tjb25maWctMTQxOS1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MjMtXG5tbS9LY29uZmlnOjE0MjQ6Y29uZmlnIExSVV9HRU5fU1RBVFNcbm1tL0tjb25maWctMTQyNS1cdGJvb2wgXCYjMzQ7RnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDMyLVxubW0vS2NvbmZpZzoxNDMzOmNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxubW0vS2NvbmZpZy0xNDM0LVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwMDowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDg1MQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDMzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBNR0xSVSBUZXN0aW5nICZhbXA7IEtleSBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgdG8gcmVhbGx5IHB1dCB0aGUgTUdMUlUgcGF0aCB0aHJvdWdoIGl0cyBwYWNlcywgZW5hYmxpbmcgYENPTkZJR19MUlVfR0VOYCBhbmQgYENPTkZJR19MUlVfR0VOX0VOQUJMRURgIHNlZW1zIGxpa2UgdGhlIHJpZ2h0IG1vdmUuIEhvd2V2ZXIsIHdhaXQgYSBtaW51dGUsIGlmIHdlIGVuYWJsZSBgQ09ORklHX0xSVV9HRU5fRU5BQkxFRGAgb3V0cmlnaHQsIHdlIG1pZ2h0IGluYWR2ZXJ0ZW50bHkgYnlwYXNzIHRoZSB0cmFkaXRpb25hbCBMUlUgcGF0aCBpbiBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zLCB1bmxlc3Mgd2UgZXhwbGljaXRseSBmb3JjZSBhIHJ1bnRpbWUgc3dpdGNoLiBUaGF0JiMzOTtzIG5vdCBpZGVhbCwgc2luY2UgdGhlIHBhdGNoIG1vZGlmaWVzIGJvdGggYXBwcm9hY2hlcy4gU28sIEkmIzM5O2xsIGJlIHN1cmUgdG8gbWFrZSBub3RlIG9mIHRoZXNlIGNvbmNlcm5zLiBJIGNhbiBzaW1wbGlmeSB0aGluZ3MgYnkgbGlzdGluZyBgTUVNQ0dgIGFuZCBgTFJVX0dFTmAuCgpOb3csIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHdoZXJlIHRoaXMgcGF0Y2ggd2lsbCBoYXZlIHRoZSBncmVhdGVzdCBpbXBhY3QgYW5kIHdoZXJlIHRlc3Rpbmcgc2hvdWxkIGJlIGZvY3VzZWQuIEkmIzM5O3ZlIGdvdCB0byBjb25zaWRlcjoKCiogICBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgCiogICBgc2hyaW5rX2luYWN0aXZlX2xpc3RgCiogICBgc2hyaW5rX2FjdGl2ZV9saXN0YAoqICAgYGV2aWN0X2ZvbGlvc2AKKiAgIGBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWNgCiogICBgbm9kZV9wYWdlX3N0YXRlX21vbm90b25pY2AKCkkmIzM5O20gZXZhbHVhdGluZyB3aGV0aGVyIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgYW5kIGBzaHJpbmtfYWN0aXZlX2xpc3RgIGFyZSBob3QsIGNyaXRpY2FsIHBhdGhzLiBJIGtub3cgdGhleSYjMzk7cmUgaW52b2tlZCBkdXJpbmcgbWVtb3J5IHJlY2xhaW0sIHdoaWNoIGNhbiBoYXBwZW4gZnJlcXVlbnRseSB3aGVuIHRoZSBzeXN0ZW0gaXMgdW5kZXIgbWVtb3J5IHByZXNzdXJlLCBidXQgdGhleSYjMzk7cmUgbm90IHF1aXRlIGFzIHViaXF1aXRvdXMgYXMgZnVuY3Rpb25zIGxpa2UgYGttYWxsb2NgIG9yIGBzY2hlZHVsZWAuIGBwcmVwYXJlX3NjYW5fY29udHJvbGAgaXMgYWxzbyBwYXJ0IG9mIHRoYXQgcmVjbGFpbSBwcm9jZXNzLiBgZXZpY3RfZm9saW9zYCBkZWZpbml0ZWx5IGxvb2tzIGtleSBzaW5jZSBpdCYjMzk7cyBkaXJlY3RseSBpbnZvbHZlZCBpbiB0aGUgTUdMUlUgcmVjbGFpbSBwcm9jZXNzLiBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCBpcyBjYWxsZWQgZnJvbSBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgLCBhbmQgYG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWNgIGlzIGluIHR1cm4gY2FsbGVkIGZyb20gYGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pY2AuIEkmIzM5O2xsIHdhbnQgdG8gY2hlY2sgdGhlIGNhbGxlcnMgb2YgYHByZXBhcmVfc2Nhbl9jb250cm9sYCBuZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwMDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcmVwYXJlX3NjYW5fY29udHJvbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTIyNzQ9ZW51bSBzY2FuX2JhbGFuY2Uge1xuLS1cbm1tL3Ztc2Nhbi5jLTIyODAtXG5tbS92bXNjYW4uYzoyMjgxOnN0YXRpYyB2b2lkIHByZXBhcmVfc2Nhbl9jb250cm9sKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtMjI4Mi17XG4tLVxubW0vdm1zY2FuLmM9NjIxMT1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MjMzLVxubW0vdm1zY2FuLmM6NjIzNDpcdHByZXBhcmVfc2Nhbl9jb250cm9sKHBnZGF0LCBzYyk7XG5tbS92bXNjYW4uYy02MjM1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwMDowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTgxMgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIE1lbW9yeSBTaHJpbmthZ2UgUHJvY2VzcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgZW50cnkgcG9pbnQgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBoZXJlIGlzIGBzaHJpbmtfbm9kZWAuIFRoYXQmIzM5O3Mgd2hlcmUgaXQgYWxsIGJlZ2lucy4gQW5kIGZyb20gbXkgZXhwZXJpZW5jZSwgYHNocmlua19ub2RlYCBnZXRzIGludm9rZWQgZnJvbSBhIGZldyBrZXkgcGxhY2VzOiBgZG9fdHJ5X3RvX2ZyZWVfcGFnZXNgLCBga3N3YXBkX3Nocmlua19ub2RlYCwgYHNocmlua19hbGxfbWVtb3J5YCwgYWxsIGNvcmUgY29tcG9uZW50cyBvZiB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbS4gS25vd2luZyB0aGF0LCBmb2N1c2luZyBpbiBvbiBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgLCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYW5kIGBldmljdF9mb2xpb3NgIHNlZW1zIGxpa2UgdGhlIHJpZ2h0IGFwcHJvYWNoLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIHdvcmsgb2YgcmVjbGFtYXRpb24gaXMgaGFwcGVuaW5nLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCB0aGUgYWN0aXZlIGFuZCBpbmFjdGl2ZSBsaXN0IG1hbmlwdWxhdGlvbi4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gYGV2aWN0X2ZvbGlvc2AsIGJlY2F1c2UgdGhhdCB0b3VjaGVzIGRpcmVjdGx5IG9uIHRoZSBkYXRhIHN0cnVjdHVyZXMuIEkgdGhpbmsgaXQgaXMgaW1wb3J0YW50IHRvIGJlIGNvbXByZWhlbnNpdmUgaGVyZS4KCkJlZm9yZSBJIGdvIGZ1cnRoZXIsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayBob3cgYGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pY2Agd29ya3MgYWdhaW4uIEl0JiMzOTtzIG9mdGVuIHRoZSByb290IG9mIHN1YnRsZSBidWdzIHJlbGF0ZWQgdG8gdGhlIGJvb2trZWVwaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwMDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTQ4Nj11bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXG4tLVxubW0vbWVtY29udHJvbC5jLTUwOC0vKipcbm1tL21lbWNvbnRyb2wuYzo1MDk6ICogbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljIC0gbm9uLWNsYW1waW5nIGxydXZlYyBzdGF0IHJlYWQgZm9yIGRlbHRhIHNhbXBsaW5nXG5tbS9tZW1jb250cm9sLmMtNTEwLSAqIEBscnV2ZWM6IHRoZSBMUlUgdmVjdG9yIHRvIHJlYWQgZnJvbVxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjYtICovXG5tbS9tZW1jb250cm9sLmM6NTI3OnVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbm1tL21lbWNvbnRyb2wuYy01MjgtXHRcdFx0XHRcdCAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2Mzk2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBOZXcgRnVuY3Rpb24qKgoKQWxyaWdodCwgYSBuZXcgZnVuY3Rpb24sIGdvdCBpdC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgcmlnaHQgaW4gYW5kIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucy4gRmlyc3QsIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIHF1aWNrIGNoZWNrIG9uIGBub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYC4gVGhhdCBzcGVjaWZpYyBmdW5jdGlvbiBvciB2YXJpYWJsZSBuYW1lIGltbWVkaWF0ZWx5IHJpbmdzIGEgYmVsbCDigJMgaXQmIzM5O3MgbGlrZWx5IGEga2V5IGVsZW1lbnQgb3IgZGVwZW5kZW5jeSBoZXJlLiBJJiMzOTtsbCBuZWVkIHRvIGFzc2VzcyBob3cgdGhpcyBuZXcgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGgsIG9yIG1vZGlmaWVzLCB3aGF0ZXZlciBiZWhhdmlvciBgbm9kZV9wYWdlX3N0YXRlX21vbm90b25pY2AgaXMgcmVzcG9uc2libGUgZm9yLiBVbmRlcnN0YW5kaW5nIHRoYXQgcmVsYXRpb25zaGlwIGlzIGNydWNpYWwgYmVmb3JlIEkgY2FuIGZ1bGx5IGdyYXNwIHRoZSBpbnRlbnQgYW5kIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhlIGludHJvZHVjdGlvbi4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGF0IHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoaXMgY29yZSBjb25jZXB0IHdpbGwgcmV2ZWFsIHRoZSBmdW5jdGlvbiYjMzk7cyB0cnVlIHB1cnBvc2UgYW5kIGxpa2VseSBhcmVhcyBmb3IgcG90ZW50aWFsIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc3RhdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc3RhdC5jPTEwMjA9dW5zaWduZWQgbG9uZyBub2RlX3BhZ2Vfc3RhdGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbi0tXG5tbS92bXN0YXQuYy0xMDMwLSAqIHNuYXBzaG90IGEgbW9ub3RvbmljYWxseS1pbmNyZW1lbnRlZCBjb3VudGVyIGFuZCBzdWJ0cmFjdCB0d28gc2FtcGxlcy5cbm1tL3Ztc3RhdC5jOjEwMzE6ICogU2VlIGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKCkgZm9yIHRoZSByYXRpb25hbGUuXG5tbS92bXN0YXQuYy0xMDMyLSAqL1xubW0vdm1zdGF0LmM6MTAzMzp1bnNpZ25lZCBsb25nIG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbm1tL3Ztc3RhdC5jLTEwMzQtXHRcdFx0XHRcdGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3ODgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFJlY2VudCBLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQgQ2hhbmdlcyoqCgpPa2F5LCBzbyB0aGlzIGlzIG5ldyBpbmZvcm1hdGlvbi4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgcmVjZW50IG1vZGlmaWNhdGlvbnMsIGFuZCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGJlZW4gdG91Y2hlZCBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLgoKSXQgc2VlbXMgd2UmIzM5O3ZlIGdvdCBhIGxpc3Qgb2YgbW9kaWZpZWQgZnVuY3Rpb25zLiBBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCB3ZSBoYXZlIGBwYWdlb3V0YCBpbiBgbW0vdm1zY2FuLmNgLCBgc2hyaW5rX2ZvbGlvX2xpc3RgIGluIGBtbS92bXNjYW4uY2AsIGB3b3JraW5nc2V0X3JlZmF1bHRgIGluIGBtbS93b3JraW5nc2V0LmNgLCBgbHJ1X3JlcGFyZW50X21lbWNnYCBpbiBgbW0vc3dhcC5jYCwgYW5kIGBtZW1jZzFfc3RhdF9mb3JtYXRgIGluIGBtbS9tZW1jb250cm9sLXYxLmNgLgoKUmlnaHQuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlc2UuIEkmIzM5O2xsIGJlZ2luIGJ5IGZvY3VzaW5nIG9uIGBwYWdlb3V0YC4gSXQmIzM5O3MgYWx3YXlzIGEgY3JpdGljYWwgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhZ2VvdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz01ODI9dm9pZCBfX2FjY3RfcmVjbGFpbV93cml0ZWJhY2socGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS92bXNjYW4uYy02MDItXG5tbS92bXNjYW4uYzo2MDM6LyogcG9zc2libGUgb3V0Y29tZSBvZiBwYWdlb3V0KCkgKi9cbm1tL3Ztc2Nhbi5jLTYwNC10eXBlZGVmIGVudW0ge1xuLS1cbm1tL3Ztc2Nhbi5jLTYxMi1cdFBBR0VfQ0xFQU4sXG5tbS92bXNjYW4uYzo2MTM6fSBwYWdlb3V0X3Q7XG5tbS92bXNjYW4uYy02MTQtXG5tbS92bXNjYW4uYy02MTUtLypcbm1tL3Ztc2Nhbi5jOjYxNjogKiBwYWdlb3V0IGlzIGNhbGxlZCBieSBzaHJpbmtfZm9saW9fbGlzdCgpIGZvciBlYWNoIGRpcnR5IGZvbGlvLlxubW0vdm1zY2FuLmMtNjE3LSAqL1xubW0vdm1zY2FuLmM6NjE4OnN0YXRpYyBwYWdlb3V0X3QgcGFnZW91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbm1tL3Ztc2Nhbi5jLTYxOS1cdFx0XHQgc3RydWN0IHN3YXBfaW9jYiAqKnBsdWcsIHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QpXG4tLVxubW0vdm1zY2FuLmM9MTA1NT1zdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4tLVxubW0vdm1zY2FuLmMtMTM5Ni1cdFx0XHR0cnlfdG9fdW5tYXBfZmx1c2hfZGlydHkoKTtcbm1tL3Ztc2Nhbi5jOjEzOTc6XHRcdFx0c3dpdGNoIChwYWdlb3V0KGZvbGlvLCBtYXBwaW5nLCBcdTAwMjZwbHVnLCBmb2xpb19saXN0KSkge1xubW0vdm1zY2FuLmMtMTM5OC1cdFx0XHRjYXNlIFBBR0VfS0VFUDpcbi0tXG5tbS92bXNjYW4uYz0yMjEzPXN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19saXN0KGVudW0gbHJ1X2xpc3QgbHJ1LCB1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4tLVxubW0vdm1zY2FuLmMtMjI0MC0gKiBUaGUgaW5hY3RpdmVfcmF0aW8gaXMgdGhlIHRhcmdldCByYXRpbyBvZiBBQ1RJVkUgdG8gSU5BQ1RJVkUgZm9saW9zXG5tbS92bXNjYW4uYzoyMjQxOiAqIG9uIHRoaXMgTFJVLCBtYWludGFpbmVkIGJ5IHRoZSBwYWdlb3V0IGNvZGUuIEFuIGluYWN0aXZlX3JhdGlvXG5tbS92bXNjYW4uYy0yMjQyLSAqIG9mIDMgbWVhbnMgMzoxIG9yIDI1JSBvZiB0aGUgZm9saW9zIGFyZSBrZXB0IG9uIHRoZSBpbmFjdGl2ZSBsaXN0LlxuLS1cbm1tL3Ztc2Nhbi5jPTczNjc9c3RhdGljIHZvaWQga3N3YXBkX3RyeV90b19zbGVlcChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgYWxsb2Nfb3JkZXIsIGludCByZWNsYWltX29yZGVyLFxuLS1cbm1tL3Ztc2Nhbi5jLTc0NTEtLypcbm1tL3Ztc2Nhbi5jOjc0NTI6ICogVGhlIGJhY2tncm91bmQgcGFnZW91dCBkYWVtb24sIHN0YXJ0ZWQgYXMgYSBrZXJuZWwgdGhyZWFkXG5tbS92bXNjYW4uYy03NDUzLSAqIGZyb20gdGhlIGluaXQgcHJvY2Vzcy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc3NDUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnMgaGVyZS4gSW50ZXJlc3RpbmcsIGBwYWdlb3V0YCBpcyBkZWZpbmVkIGFzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IHVzdWFsbHkgbWVhbnMgaXQmIzM5O3MgbGltaXRlZCBpbiBzY29wZSBhbmQgY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBzYW1lIHNvdXJjZSBmaWxlLiBHb29kIHRvIGtub3cgZm9yIHVuZGVyc3RhbmRpbmcgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLiBUaGVuIHRoZXJlJiMzOTtzIGBzaHJpbmtfZm9saW9fbGlzdGAsIGFsc28gc3RhdGljLiBBZ2FpbiwgcmVpbmZvcmNlcyB0aGUgaWRlYSBvZiBsaW1pdGVkIHZpc2liaWxpdHkgYW5kIGEgc3BlY2lmaWMgcHVycG9zZSB3aXRoaW4gaXRzIGNvbXBpbGF0aW9uIHVuaXQuCgpCdXQgbm93LCBgd29ya2luZ3NldF9yZWZhdWx0YCBoYXMgYmVlbiBleHBvcnRlZC4gVGhhdCBzdWdnZXN0cyBpdCYjMzk7cyBkZXNpZ25lZCB0byBiZSB1c2VkIGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0sIHBvdGVudGlhbGx5IGJ5IHRoZSBrZXJuZWwgaXRzZWxmIG9yIG1heWJlIGV2ZW4gdXNlci1zcGFjZSBwcm9jZXNzZXMgaWYgdGhlIEFQSSBpcyBleHBvc2VkIGNvcnJlY3RseS4gVGhhdCYjMzk7cyB0aGUgb25lIEkgbmVlZCB0byBmb2N1cyBvbi4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgZmlndXJlIG91dCBob3cgYHdvcmtpbmdzZXRfcmVmYXVsdGAgaXMgdXNlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBzdGF0aWMgYHBhZ2VvdXRgIGFuZCBgc2hyaW5rX2ZvbGlvX2xpc3RgLiBUaGlzIGlzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBzdHVmZiB1c3VhbGx5IGlzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d29ya2luZ3NldF9yZWZhdWx0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vd29ya2luZ3NldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3dvcmtpbmdzZXQuYz00MzA9Ym9vbCB3b3JraW5nc2V0X3Rlc3RfcmVjZW50KHZvaWQgKnNoYWRvdywgYm9vbCBmaWxlLCBib29sICp3b3JraW5nc2V0LFxuLS1cbm1tL3dvcmtpbmdzZXQuYy01MzktLyoqXG5tbS93b3JraW5nc2V0LmM6NTQwOiAqIHdvcmtpbmdzZXRfcmVmYXVsdCAtIEV2YWx1YXRlIHRoZSByZWZhdWx0IG9mIGEgcHJldmlvdXNseSBldmljdGVkIGZvbGlvLlxubW0vd29ya2luZ3NldC5jLTU0MS0gKiBAZm9saW86IFRoZSBmcmVzaGx5IGFsbG9jYXRlZCByZXBsYWNlbWVudCBmb2xpby5cbi0tXG5tbS93b3JraW5nc2V0LmMtNTQ3LSAqL1xubW0vd29ya2luZ3NldC5jOjU0ODp2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG5tbS93b3JraW5nc2V0LmMtNTQ5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgyMTEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA1NjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgS2V5IEZ1bmN0aW9ucyBhbmQgQ29uZmlndXJhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIHBpbnBvaW50aW5nIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgYW5kIGNvbmZpZ3VyYXRpb25zLiBCYXNlZCBvbiB3aGF0IEkmIzM5O3ZlIHNlZW4sIEkmIzM5O3ZlIGlkZW50aWZpZWQgc2V2ZXJhbCBmdW5jdGlvbnMgdGhhdCBhcmUgY2VudHJhbCB0byB0aGUgd29yayBJJiMzOTttIGRvaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciBzY29wZSBhbmQgaG93IHRoZXkmIzM5O3JlIHVzZWQuIE15IGluaXRpYWwgbGlzdCBpbmNsdWRlczogYHByZXBhcmVfc2Nhbl9jb250cm9sYCwgYHNocmlua19pbmFjdGl2ZV9saXN0YCwgYHNocmlua19hY3RpdmVfbGlzdGAsIGBldmljdF9mb2xpb3NgLCBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCwgYG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWNgLCBhbmQgYHdvcmtpbmdzZXRfcmVmYXVsdGAuCgpOb3csIEkgbmVlZCB0byBjb25maXJtIHRoZSBzY29wZSBvZiB0aGVzZSBmdW5jdGlvbnMuIEFyZSB0aGV5IGdsb2JhbGx5IGFjY2Vzc2libGUsIG9yIGFyZSB0aGV5IHN0YXRpYyB3aXRoaW4gYSBzcGVjaWZpYyBtb2R1bGU/IEl0IGxvb2tzIGxpa2UgYGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pY2AgaXMgZ2xvYmFsbHkgZGVjbGFyZWQgaW4gYG1tL21lbWNvbnRyb2wuY2AgYW5kIGBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaGAgYW5kIGBub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCBpcyBpbiBgbW0vdm1zdGF0LmNgIGFuZCBgaW5jbHVkZS9saW51eC92bXN0YXQuaGAuIEkgY29uZmlybSB0aGF0IGBldmljdF9mb2xpb3NgIGlzIHRoZSBjb3JyZWN0IGZ1bmN0aW9uIG5hbWUgd2l0aGluIGBtbS92bXNjYW4uY2AuIFNpbWlsYXJseSwgYHNocmlua19pbmFjdGl2ZV9saXN0YCBhbmQgYHNocmlua19hY3RpdmVfbGlzdGAsIGFuZCBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgIGFyZSBzdGF0aWMgd2l0aGluIGBtbS92bXNjYW4uY2AuIEFuZCBgd29ya2luZ3NldF9yZWZhdWx0YCBpcyBnbG9iYWwgaW4gYG1tL3dvcmtpbmdzZXQuY2AuIEkgY29uZmlybSBgcGFnZW91dGAgYW5kIGBzaHJpbmtfZm9saW9fbGlzdGAgYXJlIHN0YXRpYyB3aXRoaW4gYG1tL3Ztc2Nhbi5jYC4KCk9rYXksIHNvIG15IGNvbmZpcm1lZCBsaXN0IG9mIEZvY3VzU3ltYm9scyBpczoKYHByZXBhcmVfc2Nhbl9jb250cm9sYApgc2hyaW5rX2luYWN0aXZlX2xpc3RgCmBzaHJpbmtfYWN0aXZlX2xpc3RgCmBldmljdF9mb2xpb3NgCmBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWNgCmBub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYApgd29ya2luZ3NldF9yZWZhdWx0YAoKTmV4dCwgSSBuZWVkIHRvIGNvbnNpZGVyIGFueSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gSSYjMzk7dmUgbm90ZWQgdGhyZWUga2V5IG9uZXM6IGBDT05GSUdfTUVNQ0dgLCBgQ09ORklHX0xSVV9HRU5gLCBhbmQgYENPTkZJR19MUlVfR0VOX0VOQUJMRURgLiBUaGUgcHJlc2VuY2Ugb2YgYENPTkZJR19MUlVfR0VOYCBtZWFucyBgZXZpY3RfZm9saW9zYCAqY291bGQqIGJlIGNvbXBpbGVkLiBCdXQgdGhlIGV4ZWN1dGlvbiBvZiBgZXZpY3RfZm9saW9zYCBtYXkgZGVwZW5kIG9uIHJ1bnRpbWUgb3IgY29tcGlsZS10aW1lIG9wdGlvbnMuIFNvIHRvIGVuc3VyZSBJJiMzOTttIGNvdmVyaW5nIGFsbCBiYXNlcywgSSBzaG91bGQgaW5jbHVkZSBgTFJVX0dFTl9FTkFCTEVEYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExSVV9HRU5fRU5BQkxFRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xNDA5PWNvbmZpZyBMUlVfR0VOXG4tLVxubW0vS2NvbmZpZy0xNDE3LVxubW0vS2NvbmZpZzoxNDE4OmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcbm1tL0tjb25maWctMTQxOS1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJ5IGRlZmF1bHRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkzOTYKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIFN3YXAgYW5kIExSVSBHZW5lcmF0aW9uIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIGBMUlVfR0VOX0VOQUJMRURgIGlzIGluZGVlZCBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCB0aGF0JiMzOTtzIGNsZWFyIGVub3VnaC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFyb3VuZCB0aGlzIGNoYW5nZS4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciBvciBub3Qgd2UgbmVlZCB0byBjb25zaWRlciBgQ09ORklHX1NXQVBgIGluIHRoaXMgZXF1YXRpb24uIFRoZSBwYXRjaCB0b3VjaGVzIGJvdGggYG1tL3N3YXAuY2AgYW5kIGBpbmNsdWRlL2xpbnV4L3N3YXAuaGAuIFRoYXQmIzM5O3MgdGhlIGtleS4gQWx0aG91Z2ggYG1tL3N3YXAuY2AgaXMgYWx3YXlzIGNvbXBpbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwMDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzd2FwLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT01MT1vYmoteVx0XHRcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcbm1tL01ha2VmaWxlLTUyLVx0XHRcdCAgIG1hY2Nlc3MubyBwYWdlLXdyaXRlYmFjay5vIGZvbGlvLWNvbXBhdC5vIFxcXG5tbS9NYWtlZmlsZTo1MzpcdFx0XHQgICByZWFkYWhlYWQubyBzd2FwLm8gdHJ1bmNhdGUubyB2bXNjYW4ubyBzaHJpbmtlci5vIFxcXG5tbS9NYWtlZmlsZS01NC1cdFx0XHQgICBzaG1lbS5vIHV0aWwubyBtbXpvbmUubyB2bXN0YXQubyBiYWNraW5nLWRldi5vIFxcXG4tLVxubW0vTWFrZWZpbGU9Nzg9b2JqLSQoQ09ORklHX1NXQVApXHQmIzQzOz0gcGFnZV9pby5vIHN3YXBfc3RhdGUubyBzd2FwZmlsZS5vXG5tbS9NYWtlZmlsZTo3OTpvYmotJChDT05GSUdfWlNXQVApXHQmIzQzOz0genN3YXAub1xubW0vTWFrZWZpbGUtODAtb2JqLSQoQ09ORklHX0hBU19ETUEpXHQmIzQzOz0gZG1hcG9vbC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5ODIxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNoZWNraW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgYHN3YXAub2AqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYHN3YXAub2AgaXMgaW5kZWVkIGluY2x1ZGVkIGluIGBvYmoteWAuIE15IG5leHQgc3RlcCBpcyB0byBuYWlsIGRvd24gdGhlIGV4YWN0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpbnZvbHZlZCBoZXJlLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYE1FTUNHYCwgYExSVV9HRU5gLCBhbmQgYExSVV9HRU5fRU5BQkxFRGAuIE5vdywgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSBhYm91dCB0aGUgYmVoYXZpb3Igb2YgYGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pY2AuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgbW0vbWVtY29udHJvbC5jYC4KClJpZ2h0LCBpZiBgQ09ORklHX01FTUNHYCAqaXNuJiMzOTt0KiBzZXQsIGBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWNgIGlzIGRlZmluZWQgYXMgYW4gaW5saW5lIGZ1bmN0aW9uIHdpdGhpbiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLiBUaGF0JiMzOTtzIGEgY3J1Y2lhbCBkZXRhaWwgdG8gcmVtZW1iZXIuIEkmIzM5O2xsIG1ha2Ugc3VyZSB0byBub3RlIHRoaXMgZGlmZmVyZW5jZSBpbiBiZWhhdmlvciBkZXBlbmRpbmcgb24gd2hldGhlciBNRU1DRyBpcyBlbmFibGVkIG9yIGRpc2FibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD05MzM9dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjkzNDp1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC05MzUtXHRcdFx0XHRcdCAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTEzNzc9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMzgyLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTM4MzpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEzODQtXHRcdFx0XHRcdFx0XHRlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzODQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGVzZSB0aG91Z2h0cywgcHV0dGluZyBteXNlbGYgaW4gdGhlIHBvc2l0aW9uIG9mIG5lZWRpbmcgdG8gdW5kZXJzdGFuZCB0aGlzIGNvZGU6CgoqKkFuYWx5emluZyBNZW1vcnkgQ29udHJvbCB3aXRoIENPTkZJR19NRU1DRyoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgbWVtb3J5IGNvbnRyb2wgY29kZS4gRmlyc3QsIHRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBgbW0vbWVtY29udHJvbC5jYCBmdW5jdGlvbmFsaXR5IGlubGluZSBvciBvdXQtb2YtbGluZT8gVGhlIG5vdGUgY2xlYXJseSBzdGF0ZXMgdGhhdCBpZiBgIUNPTkZJR19NRU1DR2AgaXMgdHJ1ZSwgdGhlbiBpdCYjMzk7cyBpbmxpbmUuIFRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gVGhlcmVmb3JlLCB0byAqcmVhbGx5KiB0ZXN0IHRoZSBvdXQtb2YtbGluZSBpbXBsZW1lbnRhdGlvbiwgd2UmIzM5O3JlIGdvaW5nIHRvIG5lZWQgdG8gZW5zdXJlIGBNRU1DR2AgaXMgZGVmaW5lZCBhbmQgYWN0aXZlLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZSwgdGhlIGNvcmUgY29uZGl0aW9uLgoKTm93LCB3aGVyZSBkbyB3ZSBnbyBmcm9tIHRoZXJlPyBUaGUgbmV4dCBwbGFjZSB0byBjaGVjayBpcyBgbW0vdm1zdGF0LmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCBmdW5jdGlvbi4gSSBoYXZlIGEgaHVuY2gsIGFuZCB0aGlzIG5lZWRzIHRvIGJlIGNvbmZpcm1lZCwgdGhhdCBpZiBgQ09ORklHX1NNUGAgaXMgKm5vdCogZGVmaW5lZCwgdGhlbiAqdGhhdCogcG9ydGlvbiBvZiB0aGUgY29kZSBpcyBsaWtlbHkgdG8gYmUgaW5saW5lIGFzIHdlbGwuIFRoaXMsIEkgbmVlZCB0byB2ZXJpZnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3Ztc3RhdC5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvdm1zdGF0Lmg9MTg2PXVuc2lnbmVkIGxvbmcgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZV9wYWdlcyhlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW0pXG4tLVxuaW5jbHVkZS9saW51eC92bXN0YXQuaC0yMDMtICovXG5pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oOjIwNDpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMoZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKVxuaW5jbHVkZS9saW51eC92bXN0YXQuaC0yMDUte1xuLS1cbmluY2x1ZGUvbGludXgvdm1zdGF0Lmg9MjcyPWV4dGVybiB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZV9zdGF0ZV9wYWdlcyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuaW5jbHVkZS9saW51eC92bXN0YXQuaC0yNzMtXHRcdFx0XHRcdCAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbSk7XG5pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oOjI3NDpleHRlcm4gdW5zaWduZWQgbG9uZyBub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG5pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oLTI3NS1cdFx0XHRcdFx0ICAgICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbSk7XG5pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oPTI3Nj1leHRlcm4gdm9pZCBmb2xkX3ZtX251bWFfZXZlbnRzKHZvaWQpO1xuLS1cbmluY2x1ZGUvbGludXgvdm1zdGF0LmgtMjgwLSNkZWZpbmUgbm9kZV9wYWdlX3N0YXRlX3BhZ2VzKG5vZGUsIGl0ZW0pIGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGVfcGFnZXMoaXRlbSlcbmluY2x1ZGUvbGludXgvdm1zdGF0Lmg6MjgxOiNkZWZpbmUgbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhub2RlLCBpdGVtKSBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhpdGVtKVxuaW5jbHVkZS9saW51eC92bXN0YXQuaC0yODItc3RhdGljIGlubGluZSB2b2lkIGZvbGRfdm1fbnVtYV9ldmVudHModm9pZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwOTIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA4NjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIExSVSBDb3N0IE1vZGVsIGFuZCBTdGF0aXN0aWNzIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBmaXJzdCB0aGluZyBJJiMzOTttIHNlZWluZyBpcyBob3cgYGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCBpcyBjb25kaXRpb25hbC4gSXQmIzM5O3MgZGVmaW5lZCB3aGVuIGAhQ09ORklHX1NNUGAsIG1lYW5pbmcgdGhhdCB0byB0ZXN0IHRoZSBvdXQtb2YtbGluZSB2ZXJzaW9uIHdpdGhpbiBgbW0vdm1zdGF0LmNgLCBTTVAgKFN5bW1ldHJpYyBNdWx0aXByb2Nlc3NpbmcpIG5lZWRzIHRvIGJlIGVuYWJsZWQuIEhvd2V2ZXIsIFNNUCBpcyBhbG1vc3QgYWx3YXlzIGVuYWJsZWQgdGhlc2UgZGF5cywgc28gd2hldGhlciB3ZSBleHBsaWNpdGx5IGxpc3QgaXQgb3Igbm90IGlzIGVzc2VudGlhbGx5IGlycmVsZXZhbnQgZm9yIGNvdmVyYWdlLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gdGhlIG1lYXQgb2YgdGhlIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBzdW1tYXJpemUgdGhlIGNvcmUgZnVuY3Rpb25zIGFmZmVjdGVkOiBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgLCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYGV2aWN0X2ZvbGlvc2AsIGBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWNgLCBgbm9kZV9wYWdlX3N0YXRlX21vbm90b25pY2AsIGFuZCBgd29ya2luZ3NldF9yZWZhdWx0YC4gVGhlc2UgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFuZCBjb3JlIGxvZ2ljIGltcGFjdGVkIGJ5IHRoZSBjaGFuZ2VzIHRvIHRoZSBMUlUgY29zdCBtb2RlbCBhbmQgc3RhdGlzdGljcy4KCkkgc2hvdWxkIGFsc28gY2hlY2sgaWYgYHNocmlua19mb2xpb19saXN0YCBzaG91bGQgYmUgaW5jbHVkZWQuIEl0IGxvb2tzIGxpa2UgaXQgb25seSBoYXMgYSBtaW5vciBtb2RpZmljYXRpb24sIGp1c3QgcmVtb3ZpbmcgYSBgc3RhdC0mZ3Q7bnJfcGFnZW91dCAmIzQzOz0gbnJfcGFnZXM7YCBzdGF0ZW1lbnQuIFRoaXMgaXNuJiMzOTt0IGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UsIHNvIEkmIzM5O20gbm90IGltbWVkaWF0ZWx5IGNvbmNlcm5lZC4gT24gdGhlIG90aGVyIGhhbmQsIHRoZSBgcGFnZW91dGAgZnVuY3Rpb24gKmRvZXMqIGludm9sdmUgYSBjaGFuZ2UgZnJvbSBhIG5vZGUgc3RhdCB0byBhbiBscnV2ZWMgc3RhdCwgYXMgaW5kaWNhdGVkIGJ5IHRoZSBjaGFuZ2U6CgpgYGBjCi0Jbm9kZV9zdGF0X2FkZF9mb2xpbyhmb2xpbywgTlJfVk1TQ0FOX1dSSVRFKTsKJiM0MzsJbHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9WTVNDQU5fV1JJVEUsIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7CmBgYAoKU28gYHBhZ2VvdXRgIHByb2JhYmx5ICpzaG91bGQqIGJlIGNvbnNpZGVyZWQuCgpMZXQmIzM5O3MgY2hlY2sgYGxydV9yZXBhcmVudF9tZW1jZ2AuIEl0JiMzOTtzIG9ubHkgcmVtb3ZpbmcgbGluZXM6CgpgYGBjCi0JcGFyZW50X2xydXZlYy0mZ3Q7YW5vbl9jb3N0ICYjNDM7PSBjaGlsZF9scnV2ZWMtJmd0O2Fub25fY29zdDsKLQlwYXJlbnRfbHJ1dmVjLSZndDtmaWxlX2Nvc3QgJiM0Mzs9IGNoaWxkX2xydXZlYy0mZ3Q7ZmlsZV9jb3N0OwpgYGAKClNpbWlsYXJseSwgYG1lbWNnMV9zdGF0X2Zvcm1hdGAgaXMganVzdCByZWFkaW5nIGZyb20gYSBuZXcgc3RydWN0OgoKYGBgYwotCQkJYW5vbl9jb3N0ICYjNDM7PSBtei0mZ3Q7bHJ1dmVjLmFub25fY29zdDsKLQkJCWZpbGVfY29zdCAmIzQzOz0gbXotJmd0O2xydXZlYy5maWxlX2Nvc3Q7CiYjNDM7CQkJYW5vbl9jb3N0ICYjNDM7PSBtei0mZ3Q7bHJ1dmVjLmNvc3RbV09SS0lOR1NFVF9BTk9OXS5jb3VudDsKJiM0MzsJCQlmaWxlX2Nvc3QgJiM0Mzs9IG16LSZndDtscnV2ZWMuY29zdFtXT1JLSU5HU0VUX0ZJTEVdLmNvdW50OwpgYGAKClNvIHRoZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIGZvY3VzZWQgaW46IGBwcmVwYXJlX3NjYW5fY29udHJvbGAsIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAsIGBzaHJpbmtfYWN0aXZlX2xpc3RgLCBgZXZpY3RfZm9saW9zYCwgYGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pY2AsIGBub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCwgYHdvcmtpbmdzZXRfcmVmYXVsdGAsIGFuZCBgcGFnZW91dGAuIEkmIzM5O20gdXBkYXRpbmcgbXkgaW5pdGlhbCBsaXN0IHRvIHJlZmxlY3QgdGhpcyBhbmFseXNpczoKCmBgYGpzb24KWwogICYjMzQ7cHJlcGFyZV9zY2FuX2NvbnRyb2wmIzM0OywKICAmIzM0O3Nocmlua19pbmFjdGl2ZV9saXN0JiMzNDssCiAgJiMzNDtzaHJpbmtfYWN0aXZlX2xpc3QmIzM0OywKICAmIzM0O2V2aWN0X2ZvbGlvcyYjMzQ7LAogICYjMzQ7bHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljJiMzNDssCiAgJiMzNDtub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljJiMzNDssCiAgJiMzNDt3b3JraW5nc2V0X3JlZmF1bHQmIzM0OywKICAmIzM0O3BhZ2VvdXQmIzM0OwpdCmBgYAoKRmluYWxseSwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gQmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgaGVyZSBzaG91bGQgaW5jbHVkZSBgTUVNQ0dgLCBgTFJVX0dFTmAsIGFuZCBgTFJVX0dFTl9FTkFCTEVEYC4gVGhlc2Ugc2hvdWxkIGJlIHRoZSBtaW5pbWFsIG5lY2Vzc2FyeSBmb3IgZnV6emluZy4KCmBgYGpzb24KWwogICYjMzQ7TUVNQ0cmIzM0OywKICAmIzM0O0xSVV9HRU4mIzM0OywKICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7Cl0KYGBgCgpJbiBzdW1tYXJ5LCB0aGlzIHBhdGNoIHByb2ZvdW5kbHkgYWx0ZXJzIHRoZSBMUlUgY29zdCBtb2RlbCBhbmQgc3RhdGlzdGljcyB0cmFja2luZyB3aXRoaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQuIEl0IGludHJvZHVjZXMgbW9ub3RvbmljIHBhZ2Ugc3RhdGUgdHJhY2tpbmcgZm9yIGJvdGggTFJVIHZlY3RvcnMgYW5kIG5vZGVzLCBhbmQgY2hhbmdlcyBob3cgYGFub25fY29zdGAgYW5kIGBmaWxlX2Nvc3RgIGFyZSBjb21wdXRlZCBkdXJpbmcgbWVtb3J5IHJlY2xhaW0uIEl0IGFsc28gbW9kaWZpZXMgYm90aCB0cmFkaXRpb25hbCBMUlUgYW5kIE11bHRpLUdlbiBMUlUgKE1HTFJVKSByZWNsYWltIHBhdGhzIHRvIHVzZSB0aGUgdXBkYXRlZCBjb3N0IG1vZGVsIGFuZCBzdGF0aXN0aWNzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHdoaWNoIGNvdmVyIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgbmVlZCB0byBiZSBmdXp6ZWQuIEkmIzM5O3ZlIGRvdWJsZSBjaGVja2VkIHRoYXQgdGhlIGNvbmZpZyBuYW1lcyAoYExSVV9HRU5gLCBgTFJVX0dFTl9FTkFCTEVEYCBhbmQgYE1FTUNHYCkgYXJlIGNvcnJlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA2Mz1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcbi0tXG5pbml0L0tjb25maWctMTA3Mi1cbmluaXQvS2NvbmZpZzoxMDczOmNvbmZpZyBNRU1DR1xuaW5pdC9LY29uZmlnLTEwNzQtXHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4tLVxuaW5pdC9LY29uZmlnLTEwODEtXG5pbml0L0tjb25maWc6MTA4Mjpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuaW5pdC9LY29uZmlnLTEwODMtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTEwODgtXG5pbml0L0tjb25maWc6MTA4OTpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbmluaXQvS2NvbmZpZy0xMDkwLVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMDk1LVxuaW5pdC9LY29uZmlnOjEwOTY6Y29uZmlnIE1FTUNHX1YxXG5pbml0L0tjb25maWctMTA5Ny1cdGJvb2wgXCYjMzQ7TGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzE2MwoJCQkJCQkJb3V0cHV0OiAyMTQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIENvZGUqKgoKWWVzLCB0aGF0JiMzOTtzIGl0ISBMb29raW5nIGJhY2ssIGBNRU1DR2AgaXMgZGVmaW5pdGVseSB0aGUgY29ycmVjdCBjb21wb25lbnQgdG8gYmUgZm9jdXNpbmcgb24uIFRoYXQmIzM5O3MgdGhlIGtleS4gTm93IHRoYXQgSSYjMzk7dmUgZXN0YWJsaXNoZWQgdGhhdCwgbGV0JiMzOTtzIG1vdmUgZm9yd2FyZCBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLiBJdCYjMzk7cyB0aGUgbG9naWNhbCBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ByZXBhcmVfc2Nhbl9jb250cm9sJiMzNDssCiAgICAmIzM0O3Nocmlua19pbmFjdGl2ZV9saXN0JiMzNDssCiAgICAmIzM0O3Nocmlua19hY3RpdmVfbGlzdCYjMzQ7LAogICAgJiMzNDtldmljdF9mb2xpb3MmIzM0OywKICAgICYjMzQ7bHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljJiMzNDssCiAgICAmIzM0O25vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMmIzM0OywKICAgICYjMzQ7d29ya2luZ3NldF9yZWZhdWx0JiMzNDssCiAgICAmIzM0O3BhZ2VvdXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIExSVSBjb3N0IG1vZGVsIGFuZCBzdGF0aXN0aWNzIHRyYWNraW5nIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gSXQgaW50cm9kdWNlcyBtb25vdG9uaWMgcGFnZSBzdGF0ZSB0cmFja2luZyBmb3IgTFJVIHZlY3RvcnMgYW5kIG5vZGVzLCBhbmQgdXBkYXRlcyBob3cgYGFub25fY29zdGAgYW5kIGBmaWxlX2Nvc3RgIGFyZSBjYWxjdWxhdGVkIGR1cmluZyBtZW1vcnkgcmVjbGFpbS4gSXQgYWxzbyBtb2RpZmllcyBib3RoIHRoZSB0cmFkaXRpb25hbCBMUlUgYW5kIE11bHRpLUdlbiBMUlUgKE1HTFJVKSByZWNsYWltIHBhdGhzIHRvIHVzZSB0aGUgbmV3IGNvc3QgbW9kZWwgYW5kIHN0YXRpc3RpY3MuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtMUlVfR0VOX0VOQUJMRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwcmVwYXJlX3NjYW5fY29udHJvbCYjMzQ7LAogICAgJiMzNDtzaHJpbmtfaW5hY3RpdmVfbGlzdCYjMzQ7LAogICAgJiMzNDtzaHJpbmtfYWN0aXZlX2xpc3QmIzM0OywKICAgICYjMzQ7ZXZpY3RfZm9saW9zJiMzNDssCiAgICAmIzM0O2xydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyYjMzQ7LAogICAgJiMzNDtub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljJiMzNDssCiAgICAmIzM0O3dvcmtpbmdzZXRfcmVmYXVsdCYjMzQ7LAogICAgJiMzNDtwYWdlb3V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBMUlUgY29zdCBtb2RlbCBhbmQgc3RhdGlzdGljcyB0cmFja2luZyBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIEl0IGludHJvZHVjZXMgbW9ub3RvbmljIHBhZ2Ugc3RhdGUgdHJhY2tpbmcgZm9yIExSVSB2ZWN0b3JzIGFuZCBub2RlcywgYW5kIHVwZGF0ZXMgaG93IGBhbm9uX2Nvc3RgIGFuZCBgZmlsZV9jb3N0YCBhcmUgY2FsY3VsYXRlZCBkdXJpbmcgbWVtb3J5IHJlY2xhaW0uIEl0IGFsc28gbW9kaWZpZXMgYm90aCB0aGUgdHJhZGl0aW9uYWwgTFJVIGFuZCBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcmVjbGFpbSBwYXRocyB0byB1c2UgdGhlIG5ldyBjb3N0IG1vZGVsIGFuZCBzdGF0aXN0aWNzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwMDowNjo0My4wNzM1MTMyMDhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Njg0MDUxMzE0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHJlcGFyZV9zY2FuX2NvbnRyb2xcIixcbiAgICBcInNocmlua19pbmFjdGl2ZV9saXN0XCIsXG4gICAgXCJzaHJpbmtfYWN0aXZlX2xpc3RcIixcbiAgICBcImV2aWN0X2ZvbGlvc1wiLFxuICAgIFwibHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljXCIsXG4gICAgXCJub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljXCIsXG4gICAgXCJ3b3JraW5nc2V0X3JlZmF1bHRcIixcbiAgICBcInBhZ2VvdXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTFJVIGNvc3QgbW9kZWwgYW5kIHN0YXRpc3RpY3MgdHJhY2tpbmcgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJdCBpbnRyb2R1Y2VzIG1vbm90b25pYyBwYWdlIHN0YXRlIHRyYWNraW5nIGZvciBMUlUgdmVjdG9ycyBhbmQgbm9kZXMsIGFuZCB1cGRhdGVzIGhvdyBgYW5vbl9jb3N0YCBhbmQgYGZpbGVfY29zdGAgYXJlIGNhbGN1bGF0ZWQgZHVyaW5nIG1lbW9yeSByZWNsYWltLiBJdCBhbHNvIG1vZGlmaWVzIGJvdGggdGhlIHRyYWRpdGlvbmFsIExSVSBhbmQgTXVsdGktR2VuIExSVSAoTUdMUlUpIHJlY2xhaW0gcGF0aHMgdG8gdXNlIHRoZSBuZXcgY29zdCBtb2RlbCBhbmQgc3RhdGlzdGljcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwMDowNjo0My4wNzM1NDY1MThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxNDQwNTc1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDFjY2E4NTQ5ZTk3ZGU1ZTM2NzEwOTY5ZTc1OTczMzJjNWQ2NGZlMTVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdWwgMjEgMDA6MDY6NDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxcbmluZGV4IGUxZjQ2YTAwMTZmY2ZkLi5iNDBiYzRmNmZlNGEwZSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuQEAgLTkzMSw2ICs5MzEsOCBAQCB1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pO1xcbiBib29sIG1lbWNnX3N0YXRfaXRlbV92YWxpZChpbnQgaWR4KTtcXG4gYm9vbCBtZW1jZ192bV9ldmVudF9pdGVtX3ZhbGlkKGVudW0gdm1fZXZlbnRfaXRlbSBpZHgpO1xcbiB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpO1xcbit1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpO1xcbiB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gXFx0XFx0XFx0XFx0ICAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpO1xcbiBcXG5AQCAtMTM3OCw2ICsxMzgwLDEyIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdHJldHVybiBub2RlX3BhZ2Vfc3RhdGUobHJ1dmVjX3BnZGF0KGxydXZlYyksIGlkeCk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcXG4re1xcbitcXHRyZXR1cm4gbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhscnV2ZWNfcGdkYXQobHJ1dmVjKSwgaWR4KTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxcbiB7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXFxuaW5kZXggY2EyNzEyMTg3MTQ3NWMuLjg1MzAzYzU4NjdjODRiIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXFxuQEAgLTMyMyw2ICszMjMsOCBAQCBlbnVtIG5vZGVfc3RhdF9pdGVtIHtcXG4gXFx0UEdTQ0FOX1BST0FDVElWRSxcXG4gXFx0UEdTQ0FOX0FOT04sXFxuIFxcdFBHU0NBTl9GSUxFLFxcbitcXHRQR1JPVEFURV9BTk9OLFxcbitcXHRQR1JPVEFURV9GSUxFLFxcbiBcXHRQR1JFRklMTCxcXG4gI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG4gXFx0TlJfSFVHRVRMQixcXG5AQCAtNzU1LDYgKzc1NywxMiBAQCB2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LFxcbiBcXG4gI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxuIFxcbitzdHJ1Y3QgbHJ1X2Nvc3Qge1xcbitcXHR1bnNpZ25lZCBsb25nXFx0XFx0Y291bnQ7XFxuK1xcdHVuc2lnbmVkIGxvbmdcXHRcXHRsYXN0X3JvdGF0ZWQ7XFxuK1xcdHVuc2lnbmVkIGxvbmdcXHRcXHRsYXN0X2lvO1xcbit9O1xcbitcXG4gc3RydWN0IGxydXZlYyB7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRcXHRsaXN0c1tOUl9MUlVfTElTVFNdO1xcbiBcXHQvKiBwZXIgbHJ1dmVjIGxydV9sb2NrIGZvciBtZW1jZyAqL1xcbkBAIC03NjMsOSArNzcxLDEyIEBAIHN0cnVjdCBscnV2ZWMge1xcbiBcXHQgKiBUaGVzZSB0cmFjayB0aGUgY29zdCBvZiByZWNsYWltaW5nIG9uZSBMUlUgLSBmaWxlIG9yIGFub24gLVxcbiBcXHQgKiBvdmVyIHRoZSBvdGhlci4gQXMgdGhlIG9ic2VydmVkIGNvc3Qgb2YgcmVjbGFpbWluZyBvbmUgTFJVXFxuIFxcdCAqIGluY3JlYXNlcywgdGhlIHJlY2xhaW0gc2NhbiBiYWxhbmNlIHRpcHMgdG93YXJkIHRoZSBvdGhlci5cXG4rXFx0ICogVXBkYXRlZCBhbmQgZGVjYXllZCBhdCBwcmVwYXJlX3NjYW5fY29udHJvbCgpIHRpbWU7IGNvc3RfbG9ja1xcbitcXHQgKiBzZXJpYWxpc2VzIHRoYXQgdXBkYXRlLlxcbiBcXHQgKi9cXG4tXFx0dW5zaWduZWQgbG9uZ1xcdFxcdFxcdGFub25fY29zdDtcXG4tXFx0dW5zaWduZWQgbG9uZ1xcdFxcdFxcdGZpbGVfY29zdDtcXG4rXFx0c3RydWN0IGxydV9jb3N0XFx0XFx0XFx0Y29zdFtBTk9OX0FORF9GSUxFXTtcXG4rXFx0LyogUHJvdGVjdHMgY29zdFtdLiAqL1xcbitcXHRzcGlubG9ja190XFx0XFx0XFx0Y29zdF9sb2NrO1xcbiBcXHQvKiBOb24tcmVzaWRlbnQgYWdlLCBkcml2ZW4gYnkgTFJVIG1vdmVtZW50ICovXFxuIFxcdGF0b21pY19sb25nX3RcXHRcXHRcXHRub25yZXNpZGVudF9hZ2U7XFxuIFxcdC8qIFJlZmF1bHRzIGF0IHRoZSB0aW1lIG9mIGxhc3QgcmVjbGFpbSBjeWNsZSAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oXFxuaW5kZXggOGYwZjY4ZTI0NWJhYTMuLmI4ZTJlMWFmMmIxNDI1IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcXG5AQCAtMzA5LDkgKzMwOSw2IEBAIGV4dGVybiB1bnNpZ25lZCBsb25nIHRvdGFscmVzZXJ2ZV9wYWdlcztcXG4gXFxuIFxcbiAvKiBsaW51eC9tbS9zd2FwLmMgKi9cXG4tdm9pZCBscnVfbm90ZV9jb3N0X3VubG9ja19pcnEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBib29sIGZpbGUsXFxuLVxcdFxcdHVuc2lnbmVkIGludCBucl9pbywgdW5zaWduZWQgaW50IG5yX3JvdGF0ZWQpO1xcbi12b2lkIGxydV9ub3RlX2Nvc3RfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKik7XFxuIHZvaWQgZm9saW9fYWRkX2xydShzdHJ1Y3QgZm9saW8gKik7XFxuIHZvaWQgZm9saW9fYWRkX2xydV92bWEoc3RydWN0IGZvbGlvICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTtcXG4gdm9pZCBtYXJrX3BhZ2VfYWNjZXNzZWQoc3RydWN0IHBhZ2UgKik7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdm1zdGF0LmggYi9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oXFxuaW5kZXggM2M5YzI2NmNmNzgyYWQuLjViMzFkOGU3YWU0MDU4IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvdm1zdGF0LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oXFxuQEAgLTIwLDcgKzIwLDYgQEAgc3RydWN0IHJlY2xhaW1fc3RhdCB7XFxuIFxcdHVuc2lnbmVkIG5yX2Nvbmdlc3RlZDtcXG4gXFx0dW5zaWduZWQgbnJfd3JpdGViYWNrO1xcbiBcXHR1bnNpZ25lZCBucl9pbW1lZGlhdGU7XFxuLVxcdHVuc2lnbmVkIG5yX3BhZ2VvdXQ7XFxuIFxcdHVuc2lnbmVkIG5yX2FjdGl2YXRlW0FOT05fQU5EX0ZJTEVdO1xcbiBcXHR1bnNpZ25lZCBucl9yZWZfa2VlcDtcXG4gXFx0dW5zaWduZWQgbnJfdW5tYXBfZmFpbDtcXG5AQCAtMTk0LDYgKzE5MywxOSBAQCB1bnNpZ25lZCBsb25nIGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGVfcGFnZXMoZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKVxcbiBcXHRyZXR1cm4geDtcXG4gfVxcbiBcXG4rLypcXG4rICogTm9uLWNsYW1waW5nIHZhcmlhbnQgb2YgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZSgpIGludGVuZGVkIGZvciBjYWxsZXJzIHRoYXRcXG4rICogc25hcHNob3QgYSBtb25vdG9uaWNhbGx5LWluY3JlbWVudGVkIGNvdW50ZXIgYW5kIHN1YnRyYWN0IHR3byBzYW1wbGVzLlxcbisgKiBSZXR1cm5zIHRoZSByYXcgd3JhcHBpbmcgdmFsdWUgc28gdGhhdCB1bnNpZ25lZCBtb2R1bGFyIHN1YnRyYWN0aW9uIHN0YXlzXFxuKyAqIGNvcnJlY3QgYWNyb3NzIGEgc2lnbmVkLWxvbmcgb3ZlcmZsb3cgKGEgcmVhbCBoYXphcmQgb24gMzItYml0KSB0aGF0IHRoZVxcbisgKiBjbGFtcCBpbiBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKCkgd291bGQgb3RoZXJ3aXNlIHR1cm4gaW50byBhIGh1Z2Ugc3B1cmlvdXNcXG4rICogZGVsdGEuIERvIE5PVCB1c2UgZm9yIG5vbi1tb25vdG9uaWMgcGFnZS1jb3VudCByZWFkcy5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW0pXFxuK3tcXG4rXFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKWF0b21pY19sb25nX3JlYWQoXFx1MDAyNnZtX25vZGVfc3RhdFtpdGVtXSk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbSlcXG4ge1xcbiBcXHRWTV9XQVJOX09OX09OQ0Uodm1zdGF0X2l0ZW1faW5fYnl0ZXMoaXRlbSkpO1xcbkBAIC0yNTksMTEgKzI3MSwxNCBAQCBleHRlcm4gdW5zaWduZWQgbG9uZyBub2RlX3BhZ2Vfc3RhdGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKTtcXG4gZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbm9kZV9wYWdlX3N0YXRlX3BhZ2VzKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbSk7XFxuK2V4dGVybiB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbSk7XFxuIGV4dGVybiB2b2lkIGZvbGRfdm1fbnVtYV9ldmVudHModm9pZCk7XFxuICNlbHNlXFxuICNkZWZpbmUgc3VtX3pvbmVfbm9kZV9wYWdlX3N0YXRlKG5vZGUsIGl0ZW0pIGdsb2JhbF96b25lX3BhZ2Vfc3RhdGUoaXRlbSlcXG4gI2RlZmluZSBub2RlX3BhZ2Vfc3RhdGUobm9kZSwgaXRlbSkgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZShpdGVtKVxcbiAjZGVmaW5lIG5vZGVfcGFnZV9zdGF0ZV9wYWdlcyhub2RlLCBpdGVtKSBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlX3BhZ2VzKGl0ZW0pXFxuKyNkZWZpbmUgbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhub2RlLCBpdGVtKSBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhpdGVtKVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgZm9sZF92bV9udW1hX2V2ZW50cyh2b2lkKVxcbiB7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5jIGIvbW0vbWVtY29udHJvbC12MS5jXFxuaW5kZXggNzY1MDY5MjExNTY3OGMuLjA5MWJjOWZmZWU0NGEwIDEwMDY0NFxcbi0tLSBhL21tL21lbWNvbnRyb2wtdjEuY1xcbisrKyBiL21tL21lbWNvbnRyb2wtdjEuY1xcbkBAIC0xOTg4LDggKzE5ODgsOCBAQCB2b2lkIG1lbWNnMV9zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKVxcbiBcXHRcXHRmb3JfZWFjaF9vbmxpbmVfcGdkYXQocGdkYXQpIHtcXG4gXFx0XFx0XFx0bXogPSBtZW1jZy1cXHUwMDNlbm9kZWluZm9bcGdkYXQtXFx1MDAzZW5vZGVfaWRdO1xcbiBcXG4tXFx0XFx0XFx0YW5vbl9jb3N0ICs9IG16LVxcdTAwM2VscnV2ZWMuYW5vbl9jb3N0O1xcbi1cXHRcXHRcXHRmaWxlX2Nvc3QgKz0gbXotXFx1MDAzZWxydXZlYy5maWxlX2Nvc3Q7XFxuK1xcdFxcdFxcdGFub25fY29zdCArPSBtei1cXHUwMDNlbHJ1dmVjLmNvc3RbV09SS0lOR1NFVF9BTk9OXS5jb3VudDtcXG4rXFx0XFx0XFx0ZmlsZV9jb3N0ICs9IG16LVxcdTAwM2VscnV2ZWMuY29zdFtXT1JLSU5HU0VUX0ZJTEVdLmNvdW50O1xcbiBcXHRcXHR9XFxuIFxcdFxcdHNlcV9idWZfcHJpbnRmKHMsIFxcXCJhbm9uX2Nvc3QgJWx1XFxcXG5cXFwiLCBhbm9uX2Nvc3QpO1xcbiBcXHRcXHRzZXFfYnVmX3ByaW50ZihzLCBcXFwiZmlsZV9jb3N0ICVsdVxcXFxuXFxcIiwgZmlsZV9jb3N0KTtcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXFxuaW5kZXggNmRjNDg4OGE5MGYzZmQuLmM5N2M5YmMzZjhkZGI4IDEwMDY0NFxcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xcbisrKyBiL21tL21lbWNvbnRyb2wuY1xcbkBAIC0zOTMsNiArMzkzLDcgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ19ub2RlX3N0YXRfaXRlbXNbXSA9IHtcXG4gXFx0TlJfU0hNRU1fVEhQUyxcXG4gXFx0TlJfRklMRV9USFBTLFxcbiBcXHROUl9BTk9OX1RIUFMsXFxuK1xcdE5SX1ZNU0NBTl9XUklURSxcXG4gXFx0TlJfVk1BTExPQyxcXG4gXFx0TlJfS0VSTkVMX1NUQUNLX0tCLFxcbiBcXHROUl9QQUdFVEFCTEUsXFxuQEAgLTQxOSw2ICs0MjAsOCBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX25vZGVfc3RhdF9pdGVtc1tdID0ge1xcbiBcXHRQR1NDQU5fUFJPQUNUSVZFLFxcbiBcXHRQR1NDQU5fQU5PTixcXG4gXFx0UEdTQ0FOX0ZJTEUsXFxuK1xcdFBHUk9UQVRFX0FOT04sXFxuK1xcdFBHUk9UQVRFX0ZJTEUsXFxuIFxcdFBHUkVGSUxMLFxcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbiBcXHROUl9IVUdFVExCLFxcbkBAIC01MDIsNiArNTA1LDQyIEBAIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcXG4gXFx0cmV0dXJuIHg7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMgLSBub24tY2xhbXBpbmcgbHJ1dmVjIHN0YXQgcmVhZCBmb3IgZGVsdGEgc2FtcGxpbmdcXG4rICogQGxydXZlYzogdGhlIExSVSB2ZWN0b3IgdG8gcmVhZCBmcm9tXFxuKyAqIEBpZHg6IHRoZSBub2RlX3N0YXRfaXRlbSB0byByZWFkXFxuKyAqXFxuKyAqIFJldHVybnMgdGhlIHJhdyBzdGF0ZVtpZHhdIHZhbHVlIGNhc3QgdG8gdW5zaWduZWQgbG9uZywgc2tpcHBpbmcgdGhlXFxuKyAqIGNsYW1wLW5lZ2F0aXZlLXRvLXplcm8gc3RlcCBpbiBscnV2ZWNfcGFnZV9zdGF0ZSgpLiBJbnRlbmRlZCBmb3IgY2FsbGVyc1xcbisgKiB0aGF0IHNuYXBzaG90IGEgbW9ub3RvbmljYWxseS1pbmNyZW1lbnRlZCBjb3VudGVyIGFuZCBzdWJ0cmFjdCB0d29cXG4rICogc2FtcGxlczogdW5zaWduZWQgbW9kdWxhciBhcml0aG1ldGljIHRoZW4geWllbGRzIHRoZSBjb3JyZWN0IGRlbHRhIGFjcm9zc1xcbisgKiBhIHNpZ25lZC1sb25nIHdyYXBhcm91bmQgKGEgcmVhbCBoYXphcmQgb24gMzItYml0KSB0aGF0IHRoZSBjbGFtcCB3b3VsZFxcbisgKiBvdGhlcndpc2UgdHVybiBpbnRvIGEgaHVnZSBzcHVyaW91cyBkZWx0YS5cXG4rICpcXG4rICogRG8gTk9UIHVzZSBmb3Igbm9uLW1vbm90b25pYyBwYWdlLWNvdW50IHJlYWRzIHdoZXJlIGEgdHJhbnNpZW50IG5lZ2F0aXZlXFxuKyAqIHJlYWRpbmcgZnJvbSBwZXItQ1BVIGRlbHRhIHNrZXcgbXVzdCBwcmVzZW50IGFzIHplcm8uXFxuKyAqXFxuKyAqIFhYWDogVGhpcyBoZWxwZXIgKGFuZCBpdHMgbm9kZS9nbG9iYWwgcGVlcnMpIGV4aXN0cyBiZWNhdXNlIHdlIHBsYWNlXFxuKyAqIG1vbm90b25pY2FsbHktaW5jcmVtZW50ZWQgZXZlbnQgY291bnRlcnMgKE5SX1ZNU0NBTl9XUklURSBhbmQgUEdST1RBVEVfKilcXG4rICogaW50byBlbnVtIG5vZGVfc3RhdF9pdGVtLlxcbisgKi9cXG4rdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbitcXHRcXHRcXHRcXHRcXHQgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxcbit7XFxuK1xcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbjtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbitcXHRcXHRyZXR1cm4gbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhscnV2ZWNfcGdkYXQobHJ1dmVjKSwgaWR4KTtcXG4rXFxuK1xcdGkgPSBtZW1jZ19zdGF0c19pbmRleChpZHgpO1xcbitcXHRpZiAoV0FSTl9PTkNFKEJBRF9TVEFUX0lEWChpKSwgXFxcIiVzOiBtaXNzaW5nIHN0YXQgaXRlbSAlZFxcXFxuXFxcIiwgX19mdW5jX18sIGlkeCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cG4gPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTtcXG4rXFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKVJFQURfT05DRShwbi1cXHUwMDNlbHJ1dmVjX3N0YXRzLVxcdTAwM2VzdGF0ZVtpXSk7XFxuK31cXG4rXFxuIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiBcXHRcXHRcXHRcXHQgICAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcXG4ge1xcbmRpZmYgLS1naXQgYS9tbS9tbXpvbmUuYyBiL21tL21tem9uZS5jXFxuaW5kZXggMGM4ZjE4MWQ5ZDUwMDYuLjE3MTM5ZGI0ZDI5MWNlIDEwMDY0NFxcbi0tLSBhL21tL21tem9uZS5jXFxuKysrIGIvbW0vbW16b25lLmNcXG5AQCAtNzgsNiArNzgsNyBAQCB2b2lkIGxydXZlY19pbml0KHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG4gXFxuIFxcdG1lbXNldChscnV2ZWMsIDAsIHNpemVvZihzdHJ1Y3QgbHJ1dmVjKSk7XFxuIFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydV9sb2NrKTtcXG4rXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmxydXZlYy1cXHUwMDNlY29zdF9sb2NrKTtcXG4gXFx0enN3YXBfbHJ1dmVjX3N0YXRlX2luaXQobHJ1dmVjKTtcXG4gXFxuIFxcdGZvcl9lYWNoX2xydShscnUpXFxuZGlmZiAtLWdpdCBhL21tL3N3YXAuYyBiL21tL3N3YXAuY1xcbmluZGV4IDU4OGY1MGQ4ZjFhOGM5Li43NGIyODE3NzhjYmM5MiAxMDA2NDRcXG4tLS0gYS9tbS9zd2FwLmNcXG4rKysgYi9tbS9zd2FwLmNcXG5AQCAtMjcyLDczICsyNzIsNiBAQCB2b2lkIGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRmb2xpb19iYXRjaF9hZGRfYW5kX21vdmUoZm9saW8sIGxydV9tb3ZlX3RhaWwpO1xcbiB9XFxuIFxcbi12b2lkIGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGJvb2wgZmlsZSxcXG4tXFx0XFx0dW5zaWduZWQgaW50IG5yX2lvLCB1bnNpZ25lZCBpbnQgbnJfcm90YXRlZClcXG4tXFx0XFx0X19yZWxlYXNlcyhscnV2ZWMtXFx1MDAzZWxydV9sb2NrKVxcbi1cXHRcXHRfX3JlbGVhc2VzKHJjdSlcXG4te1xcbi1cXHR1bnNpZ25lZCBsb25nIGNvc3Q7XFxuLVxcbi1cXHQvKlxcbi1cXHQgKiBSZWZsZWN0IHRoZSByZWxhdGl2ZSBjb3N0IG9mIGluY3VycmluZyBJTyBhbmQgc3BlbmRpbmcgQ1BVXFxuLVxcdCAqIHRpbWUgb24gcm90YXRpb25zLiBUaGlzIGRvZXNuJ3QgYXR0ZW1wdCB0byBtYWtlIGEgcHJlY2lzZVxcbi1cXHQgKiBjb21wYXJpc29uLCBpdCBqdXN0IHNheXM6IGlmIHJlbG9hZHMgYXJlIGFib3V0IGNvbXBhcmFibGVcXG4tXFx0ICogYmV0d2VlbiB0aGUgTFJVIGxpc3RzLCBvciByb3RhdGlvbnMgYXJlIG92ZXJ3aGVsbWluZ2x5XFxuLVxcdCAqIGRpZmZlcmVudCBiZXR3ZWVuIHRoZW0sIGFkanVzdCBzY2FuIGJhbGFuY2UgZm9yIENQVSB3b3JrLlxcbi1cXHQgKi9cXG4tXFx0Y29zdCA9IG5yX2lvICogU1dBUF9DTFVTVEVSX01BWCArIG5yX3JvdGF0ZWQ7XFxuLVxcdGlmICghY29zdCkge1xcbi1cXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1X2xvY2spO1xcbi1cXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXHR9XFxuLVxcbi1cXHRmb3IgKDs7KSB7XFxuLVxcdFxcdHVuc2lnbmVkIGxvbmcgbHJ1c2l6ZTtcXG4tXFxuLVxcdFxcdC8qIFJlY29yZCBjb3N0IGV2ZW50ICovXFxuLVxcdFxcdGlmIChmaWxlKVxcbi1cXHRcXHRcXHRscnV2ZWMtXFx1MDAzZWZpbGVfY29zdCArPSBjb3N0O1xcbi1cXHRcXHRlbHNlXFxuLVxcdFxcdFxcdGxydXZlYy1cXHUwMDNlYW5vbl9jb3N0ICs9IGNvc3Q7XFxuLVxcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBEZWNheSBwcmV2aW91cyBldmVudHNcXG4tXFx0XFx0ICpcXG4tXFx0XFx0ICogQmVjYXVzZSB3b3JrbG9hZHMgY2hhbmdlIG92ZXIgdGltZSAoYW5kIHRvIGF2b2lkXFxuLVxcdFxcdCAqIG92ZXJmbG93KSB3ZSBrZWVwIHRoZXNlIHN0YXRpc3RpY3MgYXMgYSBmbG9hdGluZ1xcbi1cXHRcXHQgKiBhdmVyYWdlLCB3aGljaCBlbmRzIHVwIHdlaWdoaW5nIHJlY2VudCByZWZhdWx0c1xcbi1cXHRcXHQgKiBtb3JlIHRoYW4gb2xkIG9uZXMuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRscnVzaXplID0gbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9JTkFDVElWRV9BTk9OKSArXFxuLVxcdFxcdFxcdCAgbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9BQ1RJVkVfQU5PTikgK1xcbi1cXHRcXHRcXHQgIGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfSU5BQ1RJVkVfRklMRSkgK1xcbi1cXHRcXHRcXHQgIGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfQUNUSVZFX0ZJTEUpO1xcbi1cXG4tXFx0XFx0aWYgKGxydXZlYy1cXHUwMDNlZmlsZV9jb3N0ICsgbHJ1dmVjLVxcdTAwM2Vhbm9uX2Nvc3QgXFx1MDAzZSBscnVzaXplIC8gNCkge1xcbi1cXHRcXHRcXHRscnV2ZWMtXFx1MDAzZWZpbGVfY29zdCAvPSAyO1xcbi1cXHRcXHRcXHRscnV2ZWMtXFx1MDAzZWFub25fY29zdCAvPSAyO1xcbi1cXHRcXHR9XFxuLVxcbi1cXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1X2xvY2spO1xcbi1cXHRcXHRscnV2ZWMgPSBwYXJlbnRfbHJ1dmVjKGxydXZlYyk7XFxuLVxcdFxcdGlmICghbHJ1dmVjKSB7XFxuLVxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbi1cXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydV9sb2NrKTtcXG4tXFx0fVxcbi19XFxuLVxcbi12b2lkIGxydV9ub3RlX2Nvc3RfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi17XFxuLVxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcXG4tXFxuLVxcdGxydXZlYyA9IGZvbGlvX2xydXZlY19sb2NrX2lycShmb2xpbyk7XFxuLVxcdGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycShscnV2ZWMsIGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKSxcXG4tXFx0XFx0XFx0XFx0Zm9saW9fbnJfcGFnZXMoZm9saW8pLCAwKTtcXG4tfVxcbi1cXG4gc3RhdGljIHZvaWQgbHJ1X2FjdGl2YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHRsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbkBAIC0xMTY0LDggKzEwOTcsNiBAQCB2b2lkIGxydV9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludFxcbiBcXG4gXFx0Y2hpbGRfbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIE5PREVfREFUQShuaWQpKTtcXG4gXFx0cGFyZW50X2xydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHBhcmVudCwgTk9ERV9EQVRBKG5pZCkpO1xcbi1cXHRwYXJlbnRfbHJ1dmVjLVxcdTAwM2Vhbm9uX2Nvc3QgKz0gY2hpbGRfbHJ1dmVjLVxcdTAwM2Vhbm9uX2Nvc3Q7XFxuLVxcdHBhcmVudF9scnV2ZWMtXFx1MDAzZWZpbGVfY29zdCArPSBjaGlsZF9scnV2ZWMtXFx1MDAzZWZpbGVfY29zdDtcXG4gXFxuIFxcdGZvcl9lYWNoX2xydShscnUpXFxuIFxcdFxcdGxydXZlY19yZXBhcmVudF9scnUoY2hpbGRfbHJ1dmVjLCBwYXJlbnRfbHJ1dmVjLCBscnUsIG5pZCk7XFxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcXG5pbmRleCAzNWMzYmIxNWFlOTZhMy4uMDc1NDUwOTViMzUyY2MgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC02NjgsNyArNjY4LDcgQEAgc3RhdGljIHBhZ2VvdXRfdCBwYWdlb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRcXHRmb2xpb19jbGVhcl9yZWNsYWltKGZvbGlvKTtcXG4gXFxuIFxcdHRyYWNlX21tX3Ztc2Nhbl93cml0ZV9mb2xpbyhmb2xpbyk7XFxuLVxcdG5vZGVfc3RhdF9hZGRfZm9saW8oZm9saW8sIE5SX1ZNU0NBTl9XUklURSk7XFxuK1xcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfVk1TQ0FOX1dSSVRFLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xcbiBcXHRyZXR1cm4gUEFHRV9TVUNDRVNTO1xcbiB9XFxuIFxcbkBAIC0xNDEzLDggKzE0MTMsNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXFxuIFxcdFxcdFxcdFxcdFxcdHNjLVxcdTAwM2Vucl9zY2FubmVkIC09IChucl9wYWdlcyAtIDEpO1xcbiBcXHRcXHRcXHRcXHRcXHRucl9wYWdlcyA9IDE7XFxuIFxcdFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0XFx0c3RhdC1cXHUwMDNlbnJfcGFnZW91dCArPSBucl9wYWdlcztcXG4tXFxuIFxcdFxcdFxcdFxcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpXFxuIFxcdFxcdFxcdFxcdFxcdGdvdG8ga2VlcDtcXG4gXFx0XFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKVxcbkBAIC0yMDM4LDEwICsyMDM2LDEwIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19pbmFjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcXG4gXFx0aXRlbSA9IFBHU1RFQUxfS1NXQVBEICsgcmVjbGFpbWVyX29mZnNldChzYyk7XFxuIFxcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBpdGVtLCBucl9yZWNsYWltZWQpO1xcbiBcXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdTVEVBTF9BTk9OICsgZmlsZSwgbnJfcmVjbGFpbWVkKTtcXG4rXFx0aWYgKG5yX3NjYW5uZWQgXFx1MDAzZSBucl9yZWNsYWltZWQpXFxuK1xcdFxcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JPVEFURV9BTk9OICsgZmlsZSxcXG4rXFx0XFx0XFx0XFx0IG5yX3NjYW5uZWQgLSBucl9yZWNsYWltZWQpO1xcbiBcXG4tXFx0bHJ1dmVjX2xvY2tfaXJxKGxydXZlYyk7XFxuLVxcdGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycShscnV2ZWMsIGZpbGUsIHN0YXQubnJfcGFnZW91dCxcXG4tXFx0XFx0XFx0XFx0XFx0bnJfc2Nhbm5lZCAtIG5yX3JlY2xhaW1lZCk7XFxuIFxcdGhhbmRsZV9yZWNsYWltX3dyaXRlYmFjayhucl90YWtlbiwgcGdkYXQsIHNjLCBcXHUwMDI2c3RhdCk7XFxuIFxcdHRyYWNlX21tX3Ztc2Nhbl9scnVfc2hyaW5rX2luYWN0aXZlKHBnZGF0LVxcdTAwM2Vub2RlX2lkLFxcbiBcXHRcXHRcXHRucl9zY2FubmVkLCBucl9yZWNsYWltZWQsIFxcdTAwMjZzdGF0LCBzYy1cXHUwMDNlcHJpb3JpdHksIGZpbGUpO1xcbkBAIC0yMTQ3LDkgKzIxNDUsOSBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbiBcXHRjb3VudF92bV9ldmVudHMoUEdERUFDVElWQVRFLCBucl9kZWFjdGl2YXRlKTtcXG4gXFx0Y291bnRfbWVtY2dfZXZlbnRzKGxydXZlY19tZW1jZyhscnV2ZWMpLCBQR0RFQUNUSVZBVEUsIG5yX2RlYWN0aXZhdGUpO1xcbiBcXHRtb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICsgZmlsZSwgLW5yX3Rha2VuKTtcXG4rXFx0aWYgKG5yX3JvdGF0ZWQpXFxuK1xcdFxcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JPVEFURV9BTk9OICsgZmlsZSwgbnJfcm90YXRlZCk7XFxuIFxcbi1cXHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcXG4tXFx0bHJ1X25vdGVfY29zdF91bmxvY2tfaXJxKGxydXZlYywgZmlsZSwgMCwgbnJfcm90YXRlZCk7XFxuIFxcdHRyYWNlX21tX3Ztc2Nhbl9scnVfc2hyaW5rX2FjdGl2ZShwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgbnJfdGFrZW4sIG5yX2FjdGl2YXRlLFxcbiBcXHRcXHRcXHRucl9kZWFjdGl2YXRlLCBucl9yb3RhdGVkLCBzYy1cXHUwMDNlcHJpb3JpdHksIGZpbGUpO1xcbiB9XFxuQEAgLTIyODIsOCArMjI4MCwxMCBAQCBlbnVtIHNjYW5fYmFsYW5jZSB7XFxuIFxcbiBzdGF0aWMgdm9pZCBwcmVwYXJlX3NjYW5fY29udHJvbChwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIGZpbGU7XFxuK1xcdHN0cnVjdCBscnVfY29zdCAqYW5vbl9jb3N0LCAqZmlsZV9jb3N0O1xcbiBcXHRzdHJ1Y3QgbHJ1dmVjICp0YXJnZXRfbHJ1dmVjO1xcbitcXHR1bnNpZ25lZCBsb25nIGxydXNpemU7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmlsZTtcXG4gXFxuIFxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiAhbHJ1X2dlbl9zd2l0Y2hpbmcoKSlcXG4gXFx0XFx0cmV0dXJuO1xcbkBAIC0yMjk5LDExICsyMjk5LDY5IEBAIHN0YXRpYyB2b2lkIHByZXBhcmVfc2Nhbl9jb250cm9sKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbiBcXG4gXFx0LypcXG4gXFx0ICogRGV0ZXJtaW5lIHRoZSBzY2FuIGJhbGFuY2UgYmV0d2VlbiBhbm9uIGFuZCBmaWxlIExSVXMuXFxuK1xcdCAqXFxuK1xcdCAqIFRoZSBjb3N0IG1vZGVsIGlzIGJhc2VkIG9uIHJvdGF0aW9ucywgcmVmYXVsdHMgYW5kXFxuK1xcdCAqIHJlY2xhaW0tZHJpdmVuIHdyaXRlcyAoYW5vbiBvbmx5KSBvbiBlYWNoIHNpZGUuXFxuK1xcdCAqXFxuK1xcdCAqIFRoZXNlIGV2ZW50IGNvdW50ZXJzIGFyZSBtb25vdG9uaWMsIHNvIGVhY2ggcmVjbGFpbSBjeWNsZVxcbitcXHQgKiB0aGUgZGVsdGEgc2luY2UgdGhlIGxhc3Qgc2NhbiBpcyBleHRyYWN0ZWQgYW5kIGluY29ycG9yYXRlZFxcbitcXHQgKiBpbnRvIGEgZGVjYXlpbmcgYXZlcmFnZS4gVGhpcyBlbnN1cmVzIGN1cnJlbmN5LCBhcyB3b3JrbG9hZHNcXG4rXFx0ICogY2hhbmdlIG92ZXIgdGltZSwgYW5kIGF2b2lkcyBvdmVyZmxvdyBpbiB0aGUgY2FsY3VsYXRpb25zLlxcbitcXHQgKlxcbitcXHQgKiBVc2UgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKCkgc28gdW5zaWduZWQgc3VidHJhY3Rpb25cXG4rXFx0ICogeWllbGRzIHRoZSBjb3JyZWN0IGRlbHRhIGFjcm9zcyBhIHNpZ25lZC1sb25nIHdyYXBhcm91bmQgb2ZcXG4rXFx0ICogdGhlIHVuZGVybHlpbmcgY291bnRlciAoYSByZWFsIGhhemFyZCBvbiAzMi1iaXQgdGhhdCB0aGVcXG4rXFx0ICogY2xhbXAgaW4gbHJ1dmVjX3BhZ2Vfc3RhdGUoKSB3b3VsZCBvdGhlcndpc2UgdHVybiBpbnRvIGEgaHVnZVxcbitcXHQgKiBzcHVyaW91cyBkZWx0YSkuXFxuIFxcdCAqL1xcbi1cXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZ0YXJnZXRfbHJ1dmVjLVxcdTAwM2VscnVfbG9jayk7XFxuLVxcdHNjLVxcdTAwM2Vhbm9uX2Nvc3QgPSB0YXJnZXRfbHJ1dmVjLVxcdTAwM2Vhbm9uX2Nvc3Q7XFxuLVxcdHNjLVxcdTAwM2VmaWxlX2Nvc3QgPSB0YXJnZXRfbHJ1dmVjLVxcdTAwM2VmaWxlX2Nvc3Q7XFxuLVxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2dGFyZ2V0X2xydXZlYy1cXHUwMDNlbHJ1X2xvY2spO1xcbitcXHRzcGluX2xvY2soXFx1MDAyNnRhcmdldF9scnV2ZWMtXFx1MDAzZWNvc3RfbG9jayk7XFxuK1xcbitcXHRmb3IgKGludCBmID0gMDsgZiBcXHUwMDNjPSAxOyBmKyspIHtcXG4rXFx0XFx0c3RydWN0IGxydV9jb3N0ICpjb3N0ID0gXFx1MDAyNnRhcmdldF9scnV2ZWMtXFx1MDAzZWNvc3RbZl07XFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgcm90YXRlZCwgaW8sIG5yX3JvdGF0ZWQsIG5yX2lvO1xcbitcXG4rXFx0XFx0cm90YXRlZCA9IGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyh0YXJnZXRfbHJ1dmVjLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBQR1JPVEFURV9BTk9OICsgZik7XFxuK1xcdFxcdGlvID0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHRhcmdldF9scnV2ZWMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBXT1JLSU5HU0VUX1JFU1RPUkVfQkFTRSArIGYpO1xcbitcXHRcXHRpZiAoZiA9PSBXT1JLSU5HU0VUX0FOT04pXFxuK1xcdFxcdFxcdGlvICs9IGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyh0YXJnZXRfbHJ1dmVjLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIE5SX1ZNU0NBTl9XUklURSk7XFxuK1xcbitcXHRcXHRucl9yb3RhdGVkID0gcm90YXRlZCAtIGNvc3QtXFx1MDAzZWxhc3Rfcm90YXRlZDtcXG4rXFx0XFx0bnJfaW8gPSBpbyAtIGNvc3QtXFx1MDAzZWxhc3RfaW87XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBSZWZsZWN0IHRoZSByZWxhdGl2ZSBjb3N0IG9mIGluY3VycmluZyBJTyBhbmQgc3BlbmRpbmdcXG4rXFx0XFx0ICogQ1BVIHRpbWUgb24gcm90YXRpb25zLiBUaGlzIGRvZXNuJ3QgYXR0ZW1wdCB0byBtYWtlIGFcXG4rXFx0XFx0ICogcHJlY2lzZSBjb21wYXJpc29uLCBpdCBqdXN0IHNheXM6IGlmIHJlbG9hZHMgYXJlIGFib3V0XFxuK1xcdFxcdCAqIGNvbXBhcmFibGUgYmV0d2VlbiB0aGUgTFJVIGxpc3RzLCBvciByb3RhdGlvbnMgYXJlXFxuK1xcdFxcdCAqIG92ZXJ3aGVsbWluZ2x5IGRpZmZlcmVudCBiZXR3ZWVuIHRoZW0sIGFkanVzdCBzY2FuXFxuK1xcdFxcdCAqIGJhbGFuY2UgZm9yIENQVSB3b3JrLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0Y29zdC1cXHUwMDNlY291bnQgKz0gbnJfaW8gKiBTV0FQX0NMVVNURVJfTUFYICsgbnJfcm90YXRlZDtcXG4rXFxuK1xcdFxcdGNvc3QtXFx1MDAzZWxhc3Rfcm90YXRlZCA9IHJvdGF0ZWQ7XFxuK1xcdFxcdGNvc3QtXFx1MDAzZWxhc3RfaW8gPSBpbztcXG4rXFx0fVxcbitcXG4rXFx0YW5vbl9jb3N0ID0gXFx1MDAyNnRhcmdldF9scnV2ZWMtXFx1MDAzZWNvc3RbV09SS0lOR1NFVF9BTk9OXTtcXG4rXFx0ZmlsZV9jb3N0ID0gXFx1MDAyNnRhcmdldF9scnV2ZWMtXFx1MDAzZWNvc3RbV09SS0lOR1NFVF9GSUxFXTtcXG4rXFxuK1xcdGxydXNpemUgPSBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLCBOUl9JTkFDVElWRV9BTk9OKSArXFxuK1xcdFxcdCAgbHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYywgTlJfQUNUSVZFX0FOT04pICtcXG4rXFx0XFx0ICBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLCBOUl9JTkFDVElWRV9GSUxFKSArXFxuK1xcdFxcdCAgbHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYywgTlJfQUNUSVZFX0ZJTEUpO1xcbitcXG4rXFx0d2hpbGUgKGFub25fY29zdC1cXHUwMDNlY291bnQgKyBmaWxlX2Nvc3QtXFx1MDAzZWNvdW50IFxcdTAwM2UgbHJ1c2l6ZSAvIDQpIHtcXG4rXFx0XFx0YW5vbl9jb3N0LVxcdTAwM2Vjb3VudCAvPSAyO1xcbitcXHRcXHRmaWxlX2Nvc3QtXFx1MDAzZWNvdW50IC89IDI7XFxuK1xcdH1cXG4rXFxuK1xcdHNjLVxcdTAwM2Vhbm9uX2Nvc3QgPSBhbm9uX2Nvc3QtXFx1MDAzZWNvdW50O1xcbitcXHRzYy1cXHUwMDNlZmlsZV9jb3N0ID0gZmlsZV9jb3N0LVxcdTAwM2Vjb3VudDtcXG4rXFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZ0YXJnZXRfbHJ1dmVjLVxcdTAwM2Vjb3N0X2xvY2spO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogVGFyZ2V0IGRlc2lyYWJsZSBpbmFjdGl2ZTphY3RpdmUgbGlzdCByYXRpb3MgZm9yIHRoZSBhbm9uXFxuQEAgLTQ4MTAsNyArNDg2OCw4IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiBcXHRzdHJ1Y3QgcmVjbGFpbV9zdGF0IHN0YXQ7XFxuIFxcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7XFxuIFxcdGludCBzY2FubmVkLCByZWNsYWltZWQ7XFxuLVxcdGludCBpc29sYXRlZCA9IDAsIHR5cGUsIHR5cGVfc2Nhbm5lZDtcXG4rXFx0aW50IGlzb2xhdGVkID0gMCwgbnJfaXNvbGF0ZWQgPSAwLCB0eXBlLCB0eXBlX3NjYW5uZWQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgdG90YWxfcmVjbGFpbWVkID0gMDtcXG4gXFx0Ym9vbCBza2lwX3JldHJ5ID0gZmFsc2U7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xcbiBcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XFxuQEAgLTQ4MjIsNiArNDg4MSw3IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiBcXG4gXFx0c2Nhbm5lZCA9IGlzb2xhdGVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIHN3YXBwaW5lc3MsXFxuIFxcdFxcdFxcdFxcdCBcXHUwMDI2bGlzdCwgXFx1MDAyNmlzb2xhdGVkLCBcXHUwMDI2dHlwZSwgXFx1MDAyNnR5cGVfc2Nhbm5lZCk7XFxuK1xcdG5yX2lzb2xhdGVkID0gaXNvbGF0ZWQ7XFxuIFxcbiBcXHQvKiBTY2FubmluZyBtYXkgaGF2ZSBlbXB0aWVkIHRoZSBvbGRlc3QgZ2VuLCBmbHVzaCBpdCAqL1xcbiBcXHRpZiAoc2Nhbm5lZClcXG5AQCAtNDgzNCw2ICs0ODk0LDcgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIHJldHJ5OlxcbiBcXHRyZWNsYWltZWQgPSBzaHJpbmtfZm9saW9fbGlzdChcXHUwMDI2bGlzdCwgcGdkYXQsIHNjLCBcXHUwMDI2c3RhdCwgZmFsc2UsIG1lbWNnKTtcXG4gXFx0c2MtXFx1MDAzZW5yX3JlY2xhaW1lZCArPSByZWNsYWltZWQ7XFxuK1xcdHRvdGFsX3JlY2xhaW1lZCArPSByZWNsYWltZWQ7XFxuIFxcdC8qIFJldHJ5IHBhc3MgaXMgb25seSBtZWFudCBmb3IgY2xlYW4gZm9saW9zIHdpdGhvdXQgbmV3IGlzb2xhdGlvbiAqL1xcbiBcXHRpZiAoaXNvbGF0ZWQpXFxuIFxcdFxcdGhhbmRsZV9yZWNsYWltX3dyaXRlYmFjayhpc29sYXRlZCwgcGdkYXQsIHNjLCBcXHUwMDI2c3RhdCk7XFxuQEAgLTQ4ODcsNiArNDk0OCwxMCBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gXFx0XFx0Z290byByZXRyeTtcXG4gXFx0fVxcbiBcXG4rXFx0aWYgKG5yX2lzb2xhdGVkIFxcdTAwM2UgdG90YWxfcmVjbGFpbWVkKVxcbitcXHRcXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdST1RBVEVfQU5PTiArIHR5cGUsXFxuK1xcdFxcdFxcdFxcdCBucl9pc29sYXRlZCAtIHRvdGFsX3JlY2xhaW1lZCk7XFxuK1xcbiBcXHRyZXR1cm4gc2Nhbm5lZDtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vdm1zdGF0LmMgYi9tbS92bXN0YXQuY1xcbmluZGV4IGY1MzQ5NzJmNTE3ZGUwLi44N2Q0YTY3ODEzNjc2NyAxMDA2NDRcXG4tLS0gYS9tbS92bXN0YXQuY1xcbisrKyBiL21tL3Ztc3RhdC5jXFxuQEAgLTEwMjQsNiArMTAyNCwxNyBAQCB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZV9zdGF0ZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxcbiBcXG4gXFx0cmV0dXJuIG5vZGVfcGFnZV9zdGF0ZV9wYWdlcyhwZ2RhdCwgaXRlbSk7XFxuIH1cXG4rXFxuKy8qXFxuKyAqIE5vbi1jbGFtcGluZyB2YXJpYW50IG9mIG5vZGVfcGFnZV9zdGF0ZSgpIGludGVuZGVkIGZvciBjYWxsZXJzIHRoYXRcXG4rICogc25hcHNob3QgYSBtb25vdG9uaWNhbGx5LWluY3JlbWVudGVkIGNvdW50ZXIgYW5kIHN1YnRyYWN0IHR3byBzYW1wbGVzLlxcbisgKiBTZWUgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMoKSBmb3IgdGhlIHJhdGlvbmFsZS5cXG4rICovXFxuK3Vuc2lnbmVkIGxvbmcgbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxcbitcXHRcXHRcXHRcXHRcXHRlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW0pXFxuK3tcXG4rXFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKWF0b21pY19sb25nX3JlYWQoXFx1MDAyNnBnZGF0LVxcdTAwM2V2bV9zdGF0W2l0ZW1dKTtcXG4rfVxcbiAjZW5kaWZcXG4gXFxuIC8qXFxuQEAgLTEyODksNiArMTMwMCw4IEBAIGNvbnN0IGNoYXIgKiBjb25zdCB2bXN0YXRfdGV4dFtdID0ge1xcbiBcXHRbSShQR1NDQU5fUFJPQUNUSVZFKV1cXHRcXHRcXHQ9IFxcXCJwZ3NjYW5fcHJvYWN0aXZlXFxcIixcXG4gXFx0W0koUEdTQ0FOX0FOT04pXVxcdFxcdFxcdD0gXFxcInBnc2Nhbl9hbm9uXFxcIixcXG4gXFx0W0koUEdTQ0FOX0ZJTEUpXVxcdFxcdFxcdD0gXFxcInBnc2Nhbl9maWxlXFxcIixcXG4rXFx0W0koUEdST1RBVEVfQU5PTildXFx0XFx0XFx0PSBcXFwicGdyb3RhdGVfYW5vblxcXCIsXFxuK1xcdFtJKFBHUk9UQVRFX0ZJTEUpXVxcdFxcdFxcdD0gXFxcInBncm90YXRlX2ZpbGVcXFwiLFxcbiBcXHRbSShQR1JFRklMTCldXFx0XFx0XFx0XFx0PSBcXFwicGdyZWZpbGxcXFwiLFxcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbiBcXHRbSShOUl9IVUdFVExCKV1cXHRcXHRcXHRcXHQ9IFxcXCJucl9odWdldGxiXFxcIixcXG5kaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jXFxuaW5kZXggZjM1MTc5OGU3MjNhY2QuLjdhYzJiODhjODBhZTU2IDEwMDY0NFxcbi0tLSBhL21tL3dvcmtpbmdzZXQuY1xcbisrKyBiL21tL3dvcmtpbmdzZXQuY1xcbkBAIC01ODQsMTEgKzU4NCw2IEBAIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcXG4gXFx0LyogRm9saW8gd2FzIGFjdGl2ZSBwcmlvciB0byBldmljdGlvbiAqL1xcbiBcXHRpZiAod29ya2luZ3NldCkge1xcbiBcXHRcXHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIFhYWDogTW92ZSB0byBmb2xpb19hZGRfbHJ1KCkgd2hlbiBpdCBzdXBwb3J0cyBuZXcgdnNcXG4tXFx0XFx0ICogcHV0YmFja1xcbi1cXHRcXHQgKi9cXG4tXFx0XFx0bHJ1X25vdGVfY29zdF9yZWZhdWx0KGZvbGlvKTtcXG4gXFx0XFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFdPUktJTkdTRVRfUkVTVE9SRV9CQVNFICsgZmlsZSwgbnIpO1xcbiBcXHR9XFxuIG91dDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDA6MDY6NDMuOTg4OTExMTc2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTU5MjUwOTc2NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInByZXBhcmVfc2Nhbl9jb250cm9sXCIsXG4gICAgXCJzaHJpbmtfaW5hY3RpdmVfbGlzdFwiLFxuICAgIFwic2hyaW5rX2FjdGl2ZV9saXN0XCIsXG4gICAgXCJldmljdF9mb2xpb3NcIixcbiAgICBcImxydXZlY19wYWdlX3N0YXRlX21vbm90b25pY1wiLFxuICAgIFwibm9kZV9wYWdlX3N0YXRlX21vbm90b25pY1wiLFxuICAgIFwid29ya2luZ3NldF9yZWZhdWx0XCIsXG4gICAgXCJwYWdlb3V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIExSVSBjb3N0IG1vZGVsIGFuZCBzdGF0aXN0aWNzIHRyYWNraW5nIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gSXQgaW50cm9kdWNlcyBtb25vdG9uaWMgcGFnZSBzdGF0ZSB0cmFja2luZyBmb3IgTFJVIHZlY3RvcnMgYW5kIG5vZGVzLCBhbmQgdXBkYXRlcyBob3cgYGFub25fY29zdGAgYW5kIGBmaWxlX2Nvc3RgIGFyZSBjYWxjdWxhdGVkIGR1cmluZyBtZW1vcnkgcmVjbGFpbS4gSXQgYWxzbyBtb2RpZmllcyBib3RoIHRoZSB0cmFkaXRpb25hbCBMUlUgYW5kIE11bHRpLUdlbiBMUlUgKE1HTFJVKSByZWNsYWltIHBhdGhzIHRvIHVzZSB0aGUgbmV3IGNvc3QgbW9kZWwgYW5kIHN0YXRpc3RpY3MuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxY2NhODU0OWU5N2RlNWUzNjcxMDk2OWU3NTk3MzMyYzVkNjRmZTE1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMjEgMDA6MDY6NDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5pbmRleCBlMWY0NmEwMDE2ZmNmZC4uYjQwYmM0ZjZmZTRhMGUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC05MzEsNiArOTMxLDggQEAgdW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX291dHB1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKTtcbiBib29sIG1lbWNnX3N0YXRfaXRlbV92YWxpZChpbnQgaWR4KTtcbiBib29sIG1lbWNnX3ZtX2V2ZW50X2l0ZW1fdmFsaWQoZW51bSB2bV9ldmVudF9pdGVtIGlkeCk7XG4gdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KTtcbit1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4rXHRcdFx0XHRcdCAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpO1xuIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRcdFx0ICAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpO1xuIFxuQEAgLTEzNzgsNiArMTM4MCwxMiBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0cmV0dXJuIG5vZGVfcGFnZV9zdGF0ZShscnV2ZWNfcGdkYXQobHJ1dmVjKSwgaWR4KTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4rXHRcdFx0XHRcdFx0XHRlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcbit7XG4rXHRyZXR1cm4gbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhscnV2ZWNfcGdkYXQobHJ1dmVjKSwgaWR4KTtcbit9XG4rXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0XHRcdFx0XHQgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXG4ge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5pbmRleCBjYTI3MTIxODcxNDc1Yy4uODUzMDNjNTg2N2M4NGIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5AQCAtMzIzLDYgKzMyMyw4IEBAIGVudW0gbm9kZV9zdGF0X2l0ZW0ge1xuIFx0UEdTQ0FOX1BST0FDVElWRSxcbiBcdFBHU0NBTl9BTk9OLFxuIFx0UEdTQ0FOX0ZJTEUsXG4rXHRQR1JPVEFURV9BTk9OLFxuK1x0UEdST1RBVEVfRklMRSxcbiBcdFBHUkVGSUxMLFxuICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG4gXHROUl9IVUdFVExCLFxuQEAgLTc1NSw2ICs3NTcsMTIgQEAgdm9pZCBscnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCxcbiBcbiAjZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbiBcbitzdHJ1Y3QgbHJ1X2Nvc3Qge1xuK1x0dW5zaWduZWQgbG9uZ1x0XHRjb3VudDtcbitcdHVuc2lnbmVkIGxvbmdcdFx0bGFzdF9yb3RhdGVkO1xuK1x0dW5zaWduZWQgbG9uZ1x0XHRsYXN0X2lvO1xuK307XG4rXG4gc3RydWN0IGxydXZlYyB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdGxpc3RzW05SX0xSVV9MSVNUU107XG4gXHQvKiBwZXIgbHJ1dmVjIGxydV9sb2NrIGZvciBtZW1jZyAqL1xuQEAgLTc2Myw5ICs3NzEsMTIgQEAgc3RydWN0IGxydXZlYyB7XG4gXHQgKiBUaGVzZSB0cmFjayB0aGUgY29zdCBvZiByZWNsYWltaW5nIG9uZSBMUlUgLSBmaWxlIG9yIGFub24gLVxuIFx0ICogb3ZlciB0aGUgb3RoZXIuIEFzIHRoZSBvYnNlcnZlZCBjb3N0IG9mIHJlY2xhaW1pbmcgb25lIExSVVxuIFx0ICogaW5jcmVhc2VzLCB0aGUgcmVjbGFpbSBzY2FuIGJhbGFuY2UgdGlwcyB0b3dhcmQgdGhlIG90aGVyLlxuK1x0ICogVXBkYXRlZCBhbmQgZGVjYXllZCBhdCBwcmVwYXJlX3NjYW5fY29udHJvbCgpIHRpbWU7IGNvc3RfbG9ja1xuK1x0ICogc2VyaWFsaXNlcyB0aGF0IHVwZGF0ZS5cbiBcdCAqL1xuLVx0dW5zaWduZWQgbG9uZ1x0XHRcdGFub25fY29zdDtcbi1cdHVuc2lnbmVkIGxvbmdcdFx0XHRmaWxlX2Nvc3Q7XG4rXHRzdHJ1Y3QgbHJ1X2Nvc3RcdFx0XHRjb3N0W0FOT05fQU5EX0ZJTEVdO1xuK1x0LyogUHJvdGVjdHMgY29zdFtdLiAqL1xuK1x0c3BpbmxvY2tfdFx0XHRcdGNvc3RfbG9jaztcbiBcdC8qIE5vbi1yZXNpZGVudCBhZ2UsIGRyaXZlbiBieSBMUlUgbW92ZW1lbnQgKi9cbiBcdGF0b21pY19sb25nX3RcdFx0XHRub25yZXNpZGVudF9hZ2U7XG4gXHQvKiBSZWZhdWx0cyBhdCB0aGUgdGltZSBvZiBsYXN0IHJlY2xhaW0gY3ljbGUgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5pbmRleCA4ZjBmNjhlMjQ1YmFhMy4uYjhlMmUxYWYyYjE0MjUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcbkBAIC0zMDksOSArMzA5LDYgQEAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdG90YWxyZXNlcnZlX3BhZ2VzO1xuIFxuIFxuIC8qIGxpbnV4L21tL3N3YXAuYyAqL1xuLXZvaWQgbHJ1X25vdGVfY29zdF91bmxvY2tfaXJxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgYm9vbCBmaWxlLFxuLVx0XHR1bnNpZ25lZCBpbnQgbnJfaW8sIHVuc2lnbmVkIGludCBucl9yb3RhdGVkKTtcbi12b2lkIGxydV9ub3RlX2Nvc3RfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKik7XG4gdm9pZCBmb2xpb19hZGRfbHJ1KHN0cnVjdCBmb2xpbyAqKTtcbiB2b2lkIGZvbGlvX2FkZF9scnVfdm1hKHN0cnVjdCBmb2xpbyAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7XG4gdm9pZCBtYXJrX3BhZ2VfYWNjZXNzZWQoc3RydWN0IHBhZ2UgKik7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92bXN0YXQuaCBiL2luY2x1ZGUvbGludXgvdm1zdGF0LmhcbmluZGV4IDNjOWMyNjZjZjc4MmFkLi41YjMxZDhlN2FlNDA1OCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvdm1zdGF0LmhcbisrKyBiL2luY2x1ZGUvbGludXgvdm1zdGF0LmhcbkBAIC0yMCw3ICsyMCw2IEBAIHN0cnVjdCByZWNsYWltX3N0YXQge1xuIFx0dW5zaWduZWQgbnJfY29uZ2VzdGVkO1xuIFx0dW5zaWduZWQgbnJfd3JpdGViYWNrO1xuIFx0dW5zaWduZWQgbnJfaW1tZWRpYXRlO1xuLVx0dW5zaWduZWQgbnJfcGFnZW91dDtcbiBcdHVuc2lnbmVkIG5yX2FjdGl2YXRlW0FOT05fQU5EX0ZJTEVdO1xuIFx0dW5zaWduZWQgbnJfcmVmX2tlZXA7XG4gXHR1bnNpZ25lZCBucl91bm1hcF9mYWlsO1xuQEAgLTE5NCw2ICsxOTMsMTkgQEAgdW5zaWduZWQgbG9uZyBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlX3BhZ2VzKGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbSlcbiBcdHJldHVybiB4O1xuIH1cbiBcbisvKlxuKyAqIE5vbi1jbGFtcGluZyB2YXJpYW50IG9mIGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoKSBpbnRlbmRlZCBmb3IgY2FsbGVycyB0aGF0XG4rICogc25hcHNob3QgYSBtb25vdG9uaWNhbGx5LWluY3JlbWVudGVkIGNvdW50ZXIgYW5kIHN1YnRyYWN0IHR3byBzYW1wbGVzLlxuKyAqIFJldHVybnMgdGhlIHJhdyB3cmFwcGluZyB2YWx1ZSBzbyB0aGF0IHVuc2lnbmVkIG1vZHVsYXIgc3VidHJhY3Rpb24gc3RheXNcbisgKiBjb3JyZWN0IGFjcm9zcyBhIHNpZ25lZC1sb25nIG92ZXJmbG93IChhIHJlYWwgaGF6YXJkIG9uIDMyLWJpdCkgdGhhdCB0aGVcbisgKiBjbGFtcCBpbiBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKCkgd291bGQgb3RoZXJ3aXNlIHR1cm4gaW50byBhIGh1Z2Ugc3B1cmlvdXNcbisgKiBkZWx0YS4gRG8gTk9UIHVzZSBmb3Igbm9uLW1vbm90b25pYyBwYWdlLWNvdW50IHJlYWRzLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW0pXG4re1xuK1x0cmV0dXJuICh1bnNpZ25lZCBsb25nKWF0b21pY19sb25nX3JlYWQoXHUwMDI2dm1fbm9kZV9zdGF0W2l0ZW1dKTtcbit9XG4rXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKVxuIHtcbiBcdFZNX1dBUk5fT05fT05DRSh2bXN0YXRfaXRlbV9pbl9ieXRlcyhpdGVtKSk7XG5AQCAtMjU5LDExICsyNzEsMTQgQEAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbm9kZV9wYWdlX3N0YXRlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4gXHRcdFx0XHRcdFx0ZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKTtcbiBleHRlcm4gdW5zaWduZWQgbG9uZyBub2RlX3BhZ2Vfc3RhdGVfcGFnZXMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbiBcdFx0XHRcdFx0ICAgZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKTtcbitleHRlcm4gdW5zaWduZWQgbG9uZyBub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4rXHRcdFx0XHRcdCAgICAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW0pO1xuIGV4dGVybiB2b2lkIGZvbGRfdm1fbnVtYV9ldmVudHModm9pZCk7XG4gI2Vsc2VcbiAjZGVmaW5lIHN1bV96b25lX25vZGVfcGFnZV9zdGF0ZShub2RlLCBpdGVtKSBnbG9iYWxfem9uZV9wYWdlX3N0YXRlKGl0ZW0pXG4gI2RlZmluZSBub2RlX3BhZ2Vfc3RhdGUobm9kZSwgaXRlbSkgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZShpdGVtKVxuICNkZWZpbmUgbm9kZV9wYWdlX3N0YXRlX3BhZ2VzKG5vZGUsIGl0ZW0pIGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGVfcGFnZXMoaXRlbSlcbisjZGVmaW5lIG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMobm9kZSwgaXRlbSkgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMoaXRlbSlcbiBzdGF0aWMgaW5saW5lIHZvaWQgZm9sZF92bV9udW1hX2V2ZW50cyh2b2lkKVxuIHtcbiB9XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5jIGIvbW0vbWVtY29udHJvbC12MS5jXG5pbmRleCA3NjUwNjkyMTE1Njc4Yy4uMDkxYmM5ZmZlZTQ0YTAgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLXYxLmNcbisrKyBiL21tL21lbWNvbnRyb2wtdjEuY1xuQEAgLTE5ODgsOCArMTk4OCw4IEBAIHZvaWQgbWVtY2cxX3N0YXRfZm9ybWF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHNlcV9idWYgKnMpXG4gXHRcdGZvcl9lYWNoX29ubGluZV9wZ2RhdChwZ2RhdCkge1xuIFx0XHRcdG16ID0gbWVtY2ctXHUwMDNlbm9kZWluZm9bcGdkYXQtXHUwMDNlbm9kZV9pZF07XG4gXG4tXHRcdFx0YW5vbl9jb3N0ICs9IG16LVx1MDAzZWxydXZlYy5hbm9uX2Nvc3Q7XG4tXHRcdFx0ZmlsZV9jb3N0ICs9IG16LVx1MDAzZWxydXZlYy5maWxlX2Nvc3Q7XG4rXHRcdFx0YW5vbl9jb3N0ICs9IG16LVx1MDAzZWxydXZlYy5jb3N0W1dPUktJTkdTRVRfQU5PTl0uY291bnQ7XG4rXHRcdFx0ZmlsZV9jb3N0ICs9IG16LVx1MDAzZWxydXZlYy5jb3N0W1dPUktJTkdTRVRfRklMRV0uY291bnQ7XG4gXHRcdH1cbiBcdFx0c2VxX2J1Zl9wcmludGYocywgXCJhbm9uX2Nvc3QgJWx1XFxuXCIsIGFub25fY29zdCk7XG4gXHRcdHNlcV9idWZfcHJpbnRmKHMsIFwiZmlsZV9jb3N0ICVsdVxcblwiLCBmaWxlX2Nvc3QpO1xuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggNmRjNDg4OGE5MGYzZmQuLmM5N2M5YmMzZjhkZGI4IDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC0zOTMsNiArMzkzLDcgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ19ub2RlX3N0YXRfaXRlbXNbXSA9IHtcbiBcdE5SX1NITUVNX1RIUFMsXG4gXHROUl9GSUxFX1RIUFMsXG4gXHROUl9BTk9OX1RIUFMsXG4rXHROUl9WTVNDQU5fV1JJVEUsXG4gXHROUl9WTUFMTE9DLFxuIFx0TlJfS0VSTkVMX1NUQUNLX0tCLFxuIFx0TlJfUEFHRVRBQkxFLFxuQEAgLTQxOSw2ICs0MjAsOCBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX25vZGVfc3RhdF9pdGVtc1tdID0ge1xuIFx0UEdTQ0FOX1BST0FDVElWRSxcbiBcdFBHU0NBTl9BTk9OLFxuIFx0UEdTQ0FOX0ZJTEUsXG4rXHRQR1JPVEFURV9BTk9OLFxuK1x0UEdST1RBVEVfRklMRSxcbiBcdFBHUkVGSUxMLFxuICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG4gXHROUl9IVUdFVExCLFxuQEAgLTUwMiw2ICs1MDUsNDIgQEAgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxuIFx0cmV0dXJuIHg7XG4gfVxuIFxuKy8qKlxuKyAqIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyAtIG5vbi1jbGFtcGluZyBscnV2ZWMgc3RhdCByZWFkIGZvciBkZWx0YSBzYW1wbGluZ1xuKyAqIEBscnV2ZWM6IHRoZSBMUlUgdmVjdG9yIHRvIHJlYWQgZnJvbVxuKyAqIEBpZHg6IHRoZSBub2RlX3N0YXRfaXRlbSB0byByZWFkXG4rICpcbisgKiBSZXR1cm5zIHRoZSByYXcgc3RhdGVbaWR4XSB2YWx1ZSBjYXN0IHRvIHVuc2lnbmVkIGxvbmcsIHNraXBwaW5nIHRoZVxuKyAqIGNsYW1wLW5lZ2F0aXZlLXRvLXplcm8gc3RlcCBpbiBscnV2ZWNfcGFnZV9zdGF0ZSgpLiBJbnRlbmRlZCBmb3IgY2FsbGVyc1xuKyAqIHRoYXQgc25hcHNob3QgYSBtb25vdG9uaWNhbGx5LWluY3JlbWVudGVkIGNvdW50ZXIgYW5kIHN1YnRyYWN0IHR3b1xuKyAqIHNhbXBsZXM6IHVuc2lnbmVkIG1vZHVsYXIgYXJpdGhtZXRpYyB0aGVuIHlpZWxkcyB0aGUgY29ycmVjdCBkZWx0YSBhY3Jvc3NcbisgKiBhIHNpZ25lZC1sb25nIHdyYXBhcm91bmQgKGEgcmVhbCBoYXphcmQgb24gMzItYml0KSB0aGF0IHRoZSBjbGFtcCB3b3VsZFxuKyAqIG90aGVyd2lzZSB0dXJuIGludG8gYSBodWdlIHNwdXJpb3VzIGRlbHRhLlxuKyAqXG4rICogRG8gTk9UIHVzZSBmb3Igbm9uLW1vbm90b25pYyBwYWdlLWNvdW50IHJlYWRzIHdoZXJlIGEgdHJhbnNpZW50IG5lZ2F0aXZlXG4rICogcmVhZGluZyBmcm9tIHBlci1DUFUgZGVsdGEgc2tldyBtdXN0IHByZXNlbnQgYXMgemVyby5cbisgKlxuKyAqIFhYWDogVGhpcyBoZWxwZXIgKGFuZCBpdHMgbm9kZS9nbG9iYWwgcGVlcnMpIGV4aXN0cyBiZWNhdXNlIHdlIHBsYWNlXG4rICogbW9ub3RvbmljYWxseS1pbmNyZW1lbnRlZCBldmVudCBjb3VudGVycyAoTlJfVk1TQ0FOX1dSSVRFIGFuZCBQR1JPVEFURV8qKVxuKyAqIGludG8gZW51bSBub2RlX3N0YXRfaXRlbS5cbisgKi9cbit1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4rXHRcdFx0XHRcdCAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXG4re1xuK1x0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuO1xuK1x0aW50IGk7XG4rXG4rXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuK1x0XHRyZXR1cm4gbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhscnV2ZWNfcGdkYXQobHJ1dmVjKSwgaWR4KTtcbitcbitcdGkgPSBtZW1jZ19zdGF0c19pbmRleChpZHgpO1xuK1x0aWYgKFdBUk5fT05DRShCQURfU1RBVF9JRFgoaSksIFwiJXM6IG1pc3Npbmcgc3RhdCBpdGVtICVkXFxuXCIsIF9fZnVuY19fLCBpZHgpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHBuID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7XG4rXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpUkVBRF9PTkNFKHBuLVx1MDAzZWxydXZlY19zdGF0cy1cdTAwM2VzdGF0ZVtpXSk7XG4rfVxuK1xuIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRcdFx0ICAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXG4ge1xuZGlmZiAtLWdpdCBhL21tL21tem9uZS5jIGIvbW0vbW16b25lLmNcbmluZGV4IDBjOGYxODFkOWQ1MDA2Li4xNzEzOWRiNGQyOTFjZSAxMDA2NDRcbi0tLSBhL21tL21tem9uZS5jXG4rKysgYi9tbS9tbXpvbmUuY1xuQEAgLTc4LDYgKzc4LDcgQEAgdm9pZCBscnV2ZWNfaW5pdChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4gXG4gXHRtZW1zZXQobHJ1dmVjLCAwLCBzaXplb2Yoc3RydWN0IGxydXZlYykpO1xuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2bHJ1dmVjLVx1MDAzZWxydV9sb2NrKTtcbitcdHNwaW5fbG9ja19pbml0KFx1MDAyNmxydXZlYy1cdTAwM2Vjb3N0X2xvY2spO1xuIFx0enN3YXBfbHJ1dmVjX3N0YXRlX2luaXQobHJ1dmVjKTtcbiBcbiBcdGZvcl9lYWNoX2xydShscnUpXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcC5jIGIvbW0vc3dhcC5jXG5pbmRleCA1ODhmNTBkOGYxYThjOS4uNzRiMjgxNzc4Y2JjOTIgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwLmNcbisrKyBiL21tL3N3YXAuY1xuQEAgLTI3Miw3MyArMjcyLDYgQEAgdm9pZCBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGZvbGlvX2JhdGNoX2FkZF9hbmRfbW92ZShmb2xpbywgbHJ1X21vdmVfdGFpbCk7XG4gfVxuIFxuLXZvaWQgbHJ1X25vdGVfY29zdF91bmxvY2tfaXJxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgYm9vbCBmaWxlLFxuLVx0XHR1bnNpZ25lZCBpbnQgbnJfaW8sIHVuc2lnbmVkIGludCBucl9yb3RhdGVkKVxuLVx0XHRfX3JlbGVhc2VzKGxydXZlYy1cdTAwM2VscnVfbG9jaylcbi1cdFx0X19yZWxlYXNlcyhyY3UpXG4te1xuLVx0dW5zaWduZWQgbG9uZyBjb3N0O1xuLVxuLVx0Lypcbi1cdCAqIFJlZmxlY3QgdGhlIHJlbGF0aXZlIGNvc3Qgb2YgaW5jdXJyaW5nIElPIGFuZCBzcGVuZGluZyBDUFVcbi1cdCAqIHRpbWUgb24gcm90YXRpb25zLiBUaGlzIGRvZXNuJ3QgYXR0ZW1wdCB0byBtYWtlIGEgcHJlY2lzZVxuLVx0ICogY29tcGFyaXNvbiwgaXQganVzdCBzYXlzOiBpZiByZWxvYWRzIGFyZSBhYm91dCBjb21wYXJhYmxlXG4tXHQgKiBiZXR3ZWVuIHRoZSBMUlUgbGlzdHMsIG9yIHJvdGF0aW9ucyBhcmUgb3ZlcndoZWxtaW5nbHlcbi1cdCAqIGRpZmZlcmVudCBiZXR3ZWVuIHRoZW0sIGFkanVzdCBzY2FuIGJhbGFuY2UgZm9yIENQVSB3b3JrLlxuLVx0ICovXG4tXHRjb3N0ID0gbnJfaW8gKiBTV0FQX0NMVVNURVJfTUFYICsgbnJfcm90YXRlZDtcbi1cdGlmICghY29zdCkge1xuLVx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2bHJ1dmVjLVx1MDAzZWxydV9sb2NrKTtcbi1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXHRcdHJldHVybjtcbi1cdH1cbi1cbi1cdGZvciAoOzspIHtcbi1cdFx0dW5zaWduZWQgbG9uZyBscnVzaXplO1xuLVxuLVx0XHQvKiBSZWNvcmQgY29zdCBldmVudCAqL1xuLVx0XHRpZiAoZmlsZSlcbi1cdFx0XHRscnV2ZWMtXHUwMDNlZmlsZV9jb3N0ICs9IGNvc3Q7XG4tXHRcdGVsc2Vcbi1cdFx0XHRscnV2ZWMtXHUwMDNlYW5vbl9jb3N0ICs9IGNvc3Q7XG4tXG4tXHRcdC8qXG4tXHRcdCAqIERlY2F5IHByZXZpb3VzIGV2ZW50c1xuLVx0XHQgKlxuLVx0XHQgKiBCZWNhdXNlIHdvcmtsb2FkcyBjaGFuZ2Ugb3ZlciB0aW1lIChhbmQgdG8gYXZvaWRcbi1cdFx0ICogb3ZlcmZsb3cpIHdlIGtlZXAgdGhlc2Ugc3RhdGlzdGljcyBhcyBhIGZsb2F0aW5nXG4tXHRcdCAqIGF2ZXJhZ2UsIHdoaWNoIGVuZHMgdXAgd2VpZ2hpbmcgcmVjZW50IHJlZmF1bHRzXG4tXHRcdCAqIG1vcmUgdGhhbiBvbGQgb25lcy5cbi1cdFx0ICovXG4tXHRcdGxydXNpemUgPSBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0lOQUNUSVZFX0FOT04pICtcbi1cdFx0XHQgIGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfQUNUSVZFX0FOT04pICtcbi1cdFx0XHQgIGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfSU5BQ1RJVkVfRklMRSkgK1xuLVx0XHRcdCAgbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9BQ1RJVkVfRklMRSk7XG4tXG4tXHRcdGlmIChscnV2ZWMtXHUwMDNlZmlsZV9jb3N0ICsgbHJ1dmVjLVx1MDAzZWFub25fY29zdCBcdTAwM2UgbHJ1c2l6ZSAvIDQpIHtcbi1cdFx0XHRscnV2ZWMtXHUwMDNlZmlsZV9jb3N0IC89IDI7XG4tXHRcdFx0bHJ1dmVjLVx1MDAzZWFub25fY29zdCAvPSAyO1xuLVx0XHR9XG4tXG4tXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1X2xvY2spO1xuLVx0XHRscnV2ZWMgPSBwYXJlbnRfbHJ1dmVjKGxydXZlYyk7XG4tXHRcdGlmICghbHJ1dmVjKSB7XG4tXHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1X2xvY2spO1xuLVx0fVxuLX1cbi1cbi12b2lkIGxydV9ub3RlX2Nvc3RfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLXtcbi1cdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcbi1cbi1cdGxydXZlYyA9IGZvbGlvX2xydXZlY19sb2NrX2lycShmb2xpbyk7XG4tXHRscnVfbm90ZV9jb3N0X3VubG9ja19pcnEobHJ1dmVjLCBmb2xpb19pc19maWxlX2xydShmb2xpbyksXG4tXHRcdFx0XHRmb2xpb19ucl9wYWdlcyhmb2xpbyksIDApO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCBscnVfYWN0aXZhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG5AQCAtMTE2NCw4ICsxMDk3LDYgQEAgdm9pZCBscnVfcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnRcbiBcbiBcdGNoaWxkX2xydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBOT0RFX0RBVEEobmlkKSk7XG4gXHRwYXJlbnRfbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMocGFyZW50LCBOT0RFX0RBVEEobmlkKSk7XG4tXHRwYXJlbnRfbHJ1dmVjLVx1MDAzZWFub25fY29zdCArPSBjaGlsZF9scnV2ZWMtXHUwMDNlYW5vbl9jb3N0O1xuLVx0cGFyZW50X2xydXZlYy1cdTAwM2VmaWxlX2Nvc3QgKz0gY2hpbGRfbHJ1dmVjLVx1MDAzZWZpbGVfY29zdDtcbiBcbiBcdGZvcl9lYWNoX2xydShscnUpXG4gXHRcdGxydXZlY19yZXBhcmVudF9scnUoY2hpbGRfbHJ1dmVjLCBwYXJlbnRfbHJ1dmVjLCBscnUsIG5pZCk7XG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggMzVjM2JiMTVhZTk2YTMuLjA3NTQ1MDk1YjM1MmNjIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtNjY4LDcgKzY2OCw3IEBAIHN0YXRpYyBwYWdlb3V0X3QgcGFnZW91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdFx0Zm9saW9fY2xlYXJfcmVjbGFpbShmb2xpbyk7XG4gXG4gXHR0cmFjZV9tbV92bXNjYW5fd3JpdGVfZm9saW8oZm9saW8pO1xuLVx0bm9kZV9zdGF0X2FkZF9mb2xpbyhmb2xpbywgTlJfVk1TQ0FOX1dSSVRFKTtcbitcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfVk1TQ0FOX1dSSVRFLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xuIFx0cmV0dXJuIFBBR0VfU1VDQ0VTUztcbiB9XG4gXG5AQCAtMTQxMyw4ICsxNDEzLDYgQEAgc3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuIFx0XHRcdFx0XHRzYy1cdTAwM2Vucl9zY2FubmVkIC09IChucl9wYWdlcyAtIDEpO1xuIFx0XHRcdFx0XHRucl9wYWdlcyA9IDE7XG4gXHRcdFx0XHR9XG4tXHRcdFx0XHRzdGF0LVx1MDAzZW5yX3BhZ2VvdXQgKz0gbnJfcGFnZXM7XG4tXG4gXHRcdFx0XHRpZiAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKVxuIFx0XHRcdFx0XHRnb3RvIGtlZXA7XG4gXHRcdFx0XHRpZiAoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpXG5AQCAtMjAzOCwxMCArMjAzNiwxMCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4gXHRpdGVtID0gUEdTVEVBTF9LU1dBUEQgKyByZWNsYWltZXJfb2Zmc2V0KHNjKTtcbiBcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBpdGVtLCBucl9yZWNsYWltZWQpO1xuIFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHU1RFQUxfQU5PTiArIGZpbGUsIG5yX3JlY2xhaW1lZCk7XG4rXHRpZiAobnJfc2Nhbm5lZCBcdTAwM2UgbnJfcmVjbGFpbWVkKVxuK1x0XHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdST1RBVEVfQU5PTiArIGZpbGUsXG4rXHRcdFx0XHQgbnJfc2Nhbm5lZCAtIG5yX3JlY2xhaW1lZCk7XG4gXG4tXHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcbi1cdGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycShscnV2ZWMsIGZpbGUsIHN0YXQubnJfcGFnZW91dCxcbi1cdFx0XHRcdFx0bnJfc2Nhbm5lZCAtIG5yX3JlY2xhaW1lZCk7XG4gXHRoYW5kbGVfcmVjbGFpbV93cml0ZWJhY2sobnJfdGFrZW4sIHBnZGF0LCBzYywgXHUwMDI2c3RhdCk7XG4gXHR0cmFjZV9tbV92bXNjYW5fbHJ1X3Nocmlua19pbmFjdGl2ZShwZ2RhdC1cdTAwM2Vub2RlX2lkLFxuIFx0XHRcdG5yX3NjYW5uZWQsIG5yX3JlY2xhaW1lZCwgXHUwMDI2c3RhdCwgc2MtXHUwMDNlcHJpb3JpdHksIGZpbGUpO1xuQEAgLTIxNDcsOSArMjE0NSw5IEBAIHN0YXRpYyB2b2lkIHNocmlua19hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4gXHRjb3VudF92bV9ldmVudHMoUEdERUFDVElWQVRFLCBucl9kZWFjdGl2YXRlKTtcbiBcdGNvdW50X21lbWNnX2V2ZW50cyhscnV2ZWNfbWVtY2cobHJ1dmVjKSwgUEdERUFDVElWQVRFLCBucl9kZWFjdGl2YXRlKTtcbiBcdG1vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gKyBmaWxlLCAtbnJfdGFrZW4pO1xuK1x0aWYgKG5yX3JvdGF0ZWQpXG4rXHRcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JPVEFURV9BTk9OICsgZmlsZSwgbnJfcm90YXRlZCk7XG4gXG4tXHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcbi1cdGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycShscnV2ZWMsIGZpbGUsIDAsIG5yX3JvdGF0ZWQpO1xuIFx0dHJhY2VfbW1fdm1zY2FuX2xydV9zaHJpbmtfYWN0aXZlKHBnZGF0LVx1MDAzZW5vZGVfaWQsIG5yX3Rha2VuLCBucl9hY3RpdmF0ZSxcbiBcdFx0XHRucl9kZWFjdGl2YXRlLCBucl9yb3RhdGVkLCBzYy1cdTAwM2Vwcmlvcml0eSwgZmlsZSk7XG4gfVxuQEAgLTIyODIsOCArMjI4MCwxMCBAQCBlbnVtIHNjYW5fYmFsYW5jZSB7XG4gXG4gc3RhdGljIHZvaWQgcHJlcGFyZV9zY2FuX2NvbnRyb2wocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBmaWxlO1xuK1x0c3RydWN0IGxydV9jb3N0ICphbm9uX2Nvc3QsICpmaWxlX2Nvc3Q7XG4gXHRzdHJ1Y3QgbHJ1dmVjICp0YXJnZXRfbHJ1dmVjO1xuK1x0dW5zaWduZWQgbG9uZyBscnVzaXplO1xuK1x0dW5zaWduZWQgbG9uZyBmaWxlO1xuIFxuIFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiAhbHJ1X2dlbl9zd2l0Y2hpbmcoKSlcbiBcdFx0cmV0dXJuO1xuQEAgLTIyOTksMTEgKzIyOTksNjkgQEAgc3RhdGljIHZvaWQgcHJlcGFyZV9zY2FuX2NvbnRyb2wocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4gXG4gXHQvKlxuIFx0ICogRGV0ZXJtaW5lIHRoZSBzY2FuIGJhbGFuY2UgYmV0d2VlbiBhbm9uIGFuZCBmaWxlIExSVXMuXG4rXHQgKlxuK1x0ICogVGhlIGNvc3QgbW9kZWwgaXMgYmFzZWQgb24gcm90YXRpb25zLCByZWZhdWx0cyBhbmRcbitcdCAqIHJlY2xhaW0tZHJpdmVuIHdyaXRlcyAoYW5vbiBvbmx5KSBvbiBlYWNoIHNpZGUuXG4rXHQgKlxuK1x0ICogVGhlc2UgZXZlbnQgY291bnRlcnMgYXJlIG1vbm90b25pYywgc28gZWFjaCByZWNsYWltIGN5Y2xlXG4rXHQgKiB0aGUgZGVsdGEgc2luY2UgdGhlIGxhc3Qgc2NhbiBpcyBleHRyYWN0ZWQgYW5kIGluY29ycG9yYXRlZFxuK1x0ICogaW50byBhIGRlY2F5aW5nIGF2ZXJhZ2UuIFRoaXMgZW5zdXJlcyBjdXJyZW5jeSwgYXMgd29ya2xvYWRzXG4rXHQgKiBjaGFuZ2Ugb3ZlciB0aW1lLCBhbmQgYXZvaWRzIG92ZXJmbG93IGluIHRoZSBjYWxjdWxhdGlvbnMuXG4rXHQgKlxuK1x0ICogVXNlIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYygpIHNvIHVuc2lnbmVkIHN1YnRyYWN0aW9uXG4rXHQgKiB5aWVsZHMgdGhlIGNvcnJlY3QgZGVsdGEgYWNyb3NzIGEgc2lnbmVkLWxvbmcgd3JhcGFyb3VuZCBvZlxuK1x0ICogdGhlIHVuZGVybHlpbmcgY291bnRlciAoYSByZWFsIGhhemFyZCBvbiAzMi1iaXQgdGhhdCB0aGVcbitcdCAqIGNsYW1wIGluIGxydXZlY19wYWdlX3N0YXRlKCkgd291bGQgb3RoZXJ3aXNlIHR1cm4gaW50byBhIGh1Z2VcbitcdCAqIHNwdXJpb3VzIGRlbHRhKS5cbiBcdCAqL1xuLVx0c3Bpbl9sb2NrX2lycShcdTAwMjZ0YXJnZXRfbHJ1dmVjLVx1MDAzZWxydV9sb2NrKTtcbi1cdHNjLVx1MDAzZWFub25fY29zdCA9IHRhcmdldF9scnV2ZWMtXHUwMDNlYW5vbl9jb3N0O1xuLVx0c2MtXHUwMDNlZmlsZV9jb3N0ID0gdGFyZ2V0X2xydXZlYy1cdTAwM2VmaWxlX2Nvc3Q7XG4tXHRzcGluX3VubG9ja19pcnEoXHUwMDI2dGFyZ2V0X2xydXZlYy1cdTAwM2VscnVfbG9jayk7XG4rXHRzcGluX2xvY2soXHUwMDI2dGFyZ2V0X2xydXZlYy1cdTAwM2Vjb3N0X2xvY2spO1xuK1xuK1x0Zm9yIChpbnQgZiA9IDA7IGYgXHUwMDNjPSAxOyBmKyspIHtcbitcdFx0c3RydWN0IGxydV9jb3N0ICpjb3N0ID0gXHUwMDI2dGFyZ2V0X2xydXZlYy1cdTAwM2Vjb3N0W2ZdO1xuK1x0XHR1bnNpZ25lZCBsb25nIHJvdGF0ZWQsIGlvLCBucl9yb3RhdGVkLCBucl9pbztcbitcbitcdFx0cm90YXRlZCA9IGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyh0YXJnZXRfbHJ1dmVjLFxuK1x0XHRcdFx0XHRcdCAgICAgIFBHUk9UQVRFX0FOT04gKyBmKTtcbitcdFx0aW8gPSBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWModGFyZ2V0X2xydXZlYyxcbitcdFx0XHRcdFx0XHQgV09SS0lOR1NFVF9SRVNUT1JFX0JBU0UgKyBmKTtcbitcdFx0aWYgKGYgPT0gV09SS0lOR1NFVF9BTk9OKVxuK1x0XHRcdGlvICs9IGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyh0YXJnZXRfbHJ1dmVjLFxuK1x0XHRcdFx0XHRcdFx0ICBOUl9WTVNDQU5fV1JJVEUpO1xuK1xuK1x0XHRucl9yb3RhdGVkID0gcm90YXRlZCAtIGNvc3QtXHUwMDNlbGFzdF9yb3RhdGVkO1xuK1x0XHRucl9pbyA9IGlvIC0gY29zdC1cdTAwM2VsYXN0X2lvO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBSZWZsZWN0IHRoZSByZWxhdGl2ZSBjb3N0IG9mIGluY3VycmluZyBJTyBhbmQgc3BlbmRpbmdcbitcdFx0ICogQ1BVIHRpbWUgb24gcm90YXRpb25zLiBUaGlzIGRvZXNuJ3QgYXR0ZW1wdCB0byBtYWtlIGFcbitcdFx0ICogcHJlY2lzZSBjb21wYXJpc29uLCBpdCBqdXN0IHNheXM6IGlmIHJlbG9hZHMgYXJlIGFib3V0XG4rXHRcdCAqIGNvbXBhcmFibGUgYmV0d2VlbiB0aGUgTFJVIGxpc3RzLCBvciByb3RhdGlvbnMgYXJlXG4rXHRcdCAqIG92ZXJ3aGVsbWluZ2x5IGRpZmZlcmVudCBiZXR3ZWVuIHRoZW0sIGFkanVzdCBzY2FuXG4rXHRcdCAqIGJhbGFuY2UgZm9yIENQVSB3b3JrLlxuK1x0XHQgKi9cbitcdFx0Y29zdC1cdTAwM2Vjb3VudCArPSBucl9pbyAqIFNXQVBfQ0xVU1RFUl9NQVggKyBucl9yb3RhdGVkO1xuK1xuK1x0XHRjb3N0LVx1MDAzZWxhc3Rfcm90YXRlZCA9IHJvdGF0ZWQ7XG4rXHRcdGNvc3QtXHUwMDNlbGFzdF9pbyA9IGlvO1xuK1x0fVxuK1xuK1x0YW5vbl9jb3N0ID0gXHUwMDI2dGFyZ2V0X2xydXZlYy1cdTAwM2Vjb3N0W1dPUktJTkdTRVRfQU5PTl07XG4rXHRmaWxlX2Nvc3QgPSBcdTAwMjZ0YXJnZXRfbHJ1dmVjLVx1MDAzZWNvc3RbV09SS0lOR1NFVF9GSUxFXTtcbitcbitcdGxydXNpemUgPSBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLCBOUl9JTkFDVElWRV9BTk9OKSArXG4rXHRcdCAgbHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYywgTlJfQUNUSVZFX0FOT04pICtcbitcdFx0ICBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLCBOUl9JTkFDVElWRV9GSUxFKSArXG4rXHRcdCAgbHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYywgTlJfQUNUSVZFX0ZJTEUpO1xuK1xuK1x0d2hpbGUgKGFub25fY29zdC1cdTAwM2Vjb3VudCArIGZpbGVfY29zdC1cdTAwM2Vjb3VudCBcdTAwM2UgbHJ1c2l6ZSAvIDQpIHtcbitcdFx0YW5vbl9jb3N0LVx1MDAzZWNvdW50IC89IDI7XG4rXHRcdGZpbGVfY29zdC1cdTAwM2Vjb3VudCAvPSAyO1xuK1x0fVxuK1xuK1x0c2MtXHUwMDNlYW5vbl9jb3N0ID0gYW5vbl9jb3N0LVx1MDAzZWNvdW50O1xuK1x0c2MtXHUwMDNlZmlsZV9jb3N0ID0gZmlsZV9jb3N0LVx1MDAzZWNvdW50O1xuK1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2dGFyZ2V0X2xydXZlYy1cdTAwM2Vjb3N0X2xvY2spO1xuIFxuIFx0LypcbiBcdCAqIFRhcmdldCBkZXNpcmFibGUgaW5hY3RpdmU6YWN0aXZlIGxpc3QgcmF0aW9zIGZvciB0aGUgYW5vblxuQEAgLTQ4MTAsNyArNDg2OCw4IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0c3RydWN0IHJlY2xhaW1fc3RhdCBzdGF0O1xuIFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaztcbiBcdGludCBzY2FubmVkLCByZWNsYWltZWQ7XG4tXHRpbnQgaXNvbGF0ZWQgPSAwLCB0eXBlLCB0eXBlX3NjYW5uZWQ7XG4rXHRpbnQgaXNvbGF0ZWQgPSAwLCBucl9pc29sYXRlZCA9IDAsIHR5cGUsIHR5cGVfc2Nhbm5lZDtcbitcdHVuc2lnbmVkIGxvbmcgdG90YWxfcmVjbGFpbWVkID0gMDtcbiBcdGJvb2wgc2tpcF9yZXRyeSA9IGZhbHNlO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XG5AQCAtNDgyMiw2ICs0ODgxLDcgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXG4gXHRzY2FubmVkID0gaXNvbGF0ZV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyxcbiBcdFx0XHRcdCBcdTAwMjZsaXN0LCBcdTAwMjZpc29sYXRlZCwgXHUwMDI2dHlwZSwgXHUwMDI2dHlwZV9zY2FubmVkKTtcbitcdG5yX2lzb2xhdGVkID0gaXNvbGF0ZWQ7XG4gXG4gXHQvKiBTY2FubmluZyBtYXkgaGF2ZSBlbXB0aWVkIHRoZSBvbGRlc3QgZ2VuLCBmbHVzaCBpdCAqL1xuIFx0aWYgKHNjYW5uZWQpXG5AQCAtNDgzNCw2ICs0ODk0LDcgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gcmV0cnk6XG4gXHRyZWNsYWltZWQgPSBzaHJpbmtfZm9saW9fbGlzdChcdTAwMjZsaXN0LCBwZ2RhdCwgc2MsIFx1MDAyNnN0YXQsIGZhbHNlLCBtZW1jZyk7XG4gXHRzYy1cdTAwM2Vucl9yZWNsYWltZWQgKz0gcmVjbGFpbWVkO1xuK1x0dG90YWxfcmVjbGFpbWVkICs9IHJlY2xhaW1lZDtcbiBcdC8qIFJldHJ5IHBhc3MgaXMgb25seSBtZWFudCBmb3IgY2xlYW4gZm9saW9zIHdpdGhvdXQgbmV3IGlzb2xhdGlvbiAqL1xuIFx0aWYgKGlzb2xhdGVkKVxuIFx0XHRoYW5kbGVfcmVjbGFpbV93cml0ZWJhY2soaXNvbGF0ZWQsIHBnZGF0LCBzYywgXHUwMDI2c3RhdCk7XG5AQCAtNDg4Nyw2ICs0OTQ4LDEwIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRnb3RvIHJldHJ5O1xuIFx0fVxuIFxuK1x0aWYgKG5yX2lzb2xhdGVkIFx1MDAzZSB0b3RhbF9yZWNsYWltZWQpXG4rXHRcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JPVEFURV9BTk9OICsgdHlwZSxcbitcdFx0XHRcdCBucl9pc29sYXRlZCAtIHRvdGFsX3JlY2xhaW1lZCk7XG4rXG4gXHRyZXR1cm4gc2Nhbm5lZDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbW0vdm1zdGF0LmMgYi9tbS92bXN0YXQuY1xuaW5kZXggZjUzNDk3MmY1MTdkZTAuLjg3ZDRhNjc4MTM2NzY3IDEwMDY0NFxuLS0tIGEvbW0vdm1zdGF0LmNcbisrKyBiL21tL3Ztc3RhdC5jXG5AQCAtMTAyNCw2ICsxMDI0LDE3IEBAIHVuc2lnbmVkIGxvbmcgbm9kZV9wYWdlX3N0YXRlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4gXG4gXHRyZXR1cm4gbm9kZV9wYWdlX3N0YXRlX3BhZ2VzKHBnZGF0LCBpdGVtKTtcbiB9XG4rXG4rLypcbisgKiBOb24tY2xhbXBpbmcgdmFyaWFudCBvZiBub2RlX3BhZ2Vfc3RhdGUoKSBpbnRlbmRlZCBmb3IgY2FsbGVycyB0aGF0XG4rICogc25hcHNob3QgYSBtb25vdG9uaWNhbGx5LWluY3JlbWVudGVkIGNvdW50ZXIgYW5kIHN1YnRyYWN0IHR3byBzYW1wbGVzLlxuKyAqIFNlZSBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYygpIGZvciB0aGUgcmF0aW9uYWxlLlxuKyAqL1xuK3Vuc2lnbmVkIGxvbmcgbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuK1x0XHRcdFx0XHRlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW0pXG4re1xuK1x0cmV0dXJuICh1bnNpZ25lZCBsb25nKWF0b21pY19sb25nX3JlYWQoXHUwMDI2cGdkYXQtXHUwMDNldm1fc3RhdFtpdGVtXSk7XG4rfVxuICNlbmRpZlxuIFxuIC8qXG5AQCAtMTI4OSw2ICsxMzAwLDggQEAgY29uc3QgY2hhciAqIGNvbnN0IHZtc3RhdF90ZXh0W10gPSB7XG4gXHRbSShQR1NDQU5fUFJPQUNUSVZFKV1cdFx0XHQ9IFwicGdzY2FuX3Byb2FjdGl2ZVwiLFxuIFx0W0koUEdTQ0FOX0FOT04pXVx0XHRcdD0gXCJwZ3NjYW5fYW5vblwiLFxuIFx0W0koUEdTQ0FOX0ZJTEUpXVx0XHRcdD0gXCJwZ3NjYW5fZmlsZVwiLFxuK1x0W0koUEdST1RBVEVfQU5PTildXHRcdFx0PSBcInBncm90YXRlX2Fub25cIixcbitcdFtJKFBHUk9UQVRFX0ZJTEUpXVx0XHRcdD0gXCJwZ3JvdGF0ZV9maWxlXCIsXG4gXHRbSShQR1JFRklMTCldXHRcdFx0XHQ9IFwicGdyZWZpbGxcIixcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuIFx0W0koTlJfSFVHRVRMQildXHRcdFx0XHQ9IFwibnJfaHVnZXRsYlwiLFxuZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuY1xuaW5kZXggZjM1MTc5OGU3MjNhY2QuLjdhYzJiODhjODBhZTU2IDEwMDY0NFxuLS0tIGEvbW0vd29ya2luZ3NldC5jXG4rKysgYi9tbS93b3JraW5nc2V0LmNcbkBAIC01ODQsMTEgKzU4NCw2IEBAIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcbiBcdC8qIEZvbGlvIHdhcyBhY3RpdmUgcHJpb3IgdG8gZXZpY3Rpb24gKi9cbiBcdGlmICh3b3JraW5nc2V0KSB7XG4gXHRcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcbi1cdFx0Lypcbi1cdFx0ICogWFhYOiBNb3ZlIHRvIGZvbGlvX2FkZF9scnUoKSB3aGVuIGl0IHN1cHBvcnRzIG5ldyB2c1xuLVx0XHQgKiBwdXRiYWNrXG4tXHRcdCAqL1xuLVx0XHRscnVfbm90ZV9jb3N0X3JlZmF1bHQoZm9saW8pO1xuIFx0XHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgV09SS0lOR1NFVF9SRVNUT1JFX0JBU0UgKyBmaWxlLCBucik7XG4gXHR9XG4gb3V0OlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDA6MDY6NDMuOTg4OTM3Nzk2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM5ODA2NDg1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSB0aGF0J3MgdHdlYWtpbmcgdGhlIExSVSBjb3N0IG1vZGVsIGFuZCBpdHMgYXNzb2NpYXRlZCBzdGF0cyDigJMgdGhhdCdzIHNvbWUgc2VyaW91cyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN0dWZmLiBJdCdzIGludHJvZHVjaW5nIHRoZXNlIG5ldyBtb25vdG9uaWMgY291bnRlcnMsIGBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWNgIGFuZCBgbm9kZV9wYWdlX3N0YXRlX21vbm90b25pY2AuIEFuZCBpdCdzIGFsc28gbWFraW5nIHNvbWUgY2hhbmdlcyB0byBob3cgYHByZXBhcmVfc2Nhbl9jb250cm9sYCBjYWxjdWxhdGVzIHRoZSBjb3N0IG9mIHNjYW5uaW5nIGFub255bW91cyBhbmQgZmlsZSBwYWdlcy4gRXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcgdGhlIHJlY2xhaW0gcGF0aCwgc3BlY2lmaWNhbGx5IHRoZSBiYWxhbmNlIGJldHdlZW4gc2Nhbm5pbmcgYW5vbiBhbmQgZmlsZSBMUlVzLCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy5cblxuVGhlIHBhdGNoIGFsc28gc2VlbXMgdG8gYmUgY2xlYW5pbmcgdXAgc29tZSBvbGRlciBmdW5jdGlvbnMsIGxpa2UgcmVtb3ZpbmcgYGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycWAgYW5kIGBscnVfbm90ZV9jb3N0X3JlZmF1bHRgLCBhbmQgYWRkaW5nIHR3byBuZXcgaXRlbXMgYFBHUk9UQVRFX0FOT05gIGFuZCBgUEdST1RBVEVfRklMRWAuIEl0IGxvb2tzIGxpa2UgYHNocmlua19pbmFjdGl2ZV9saXN0YCwgYHNocmlua19hY3RpdmVfbGlzdGAsIGFuZCBgZXZpY3RfZm9saW9zYCBhcmUgYWxsIGJlaW5nIHVwZGF0ZWQgdG8gYWNjb3VudCBmb3IgdGhlIG5ldyBpdGVtcy4gVGhpcyBpcyBhbGwgY2VudGVyZWQgb24gaG93IHRoZSBrZXJuZWwgZGVjaWRlcyB3aGF0IHRvIGV2aWN0LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhpcyBmdXJ0aGVyLlxuXG5UaGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSBhIGtleSB0YXJnZXQ6IGBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWNgLCBgbm9kZV9wYWdlX3N0YXRlX21vbm90b25pY2AsIGBwcmVwYXJlX3NjYW5fY29udHJvbGAsIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAsIGBzaHJpbmtfYWN0aXZlX2xpc3RgLCBgZXZpY3RfZm9saW9zYCwgYHBhZ2VvdXRgLCBhbmQgYHNocmlua19mb2xpb19saXN0YC4gTG9va3MgbGlrZSBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgLCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYW5kIGBldmljdF9mb2xpb3NgIGFyZSBhbGwgcGFydCBvZiB0aGUgcmVjbGFpbSBwYXRoLiBUaGVzZSBhcmUgZGVmaW5pdGVseSB3aGVyZSBJIHNob3VsZCBmb2N1cyB0aGUgZnV6emluZyBlZmZvcnRzLlxuXG5JJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhlIGNvZGUgaXMgaW4gdGhlIG1haW4gTU0gc3Vic3lzdGVtczogYG1tL3Ztc2Nhbi5jYCwgYG1tL3N3YXAuY2AsIGBtbS93b3JraW5nc2V0LmNgLCBgbW0vbWVtY29udHJvbC5jYCwgYW5kIGBtbS92bXN0YXQuY2AsIHNvIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG9uIGBDT05GSUdfTUVNQ0dgIHdoaWNoIGlzIHJlbGF0ZWQgdG8gYG1tL21lbWNvbnRyb2wuY2AuIEkgbmVlZCB0byByZXZpZXcgYG1tL01ha2VmaWxlYCBhbmQgYG1tL0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHRoYXQgY291bGQgaW5mbHVlbmNlIGhvdyB0aGlzIGNvZGUgYmVoYXZlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTEzNiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA2OjUwLjM4NzAxMjE2NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTM4MTE3NzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByZXBhcmVfc2Nhbl9jb250cm9sXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbW16b25lLmg9NzY2PXN0cnVjdCBscnV2ZWMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03NzMtXFx0ICogaW5jcmVhc2VzLCB0aGUgcmVjbGFpbSBzY2FuIGJhbGFuY2UgdGlwcyB0b3dhcmQgdGhlIG90aGVyLlxcbmluY2x1ZGUvbGludXgvbW16b25lLmg6Nzc0OlxcdCAqIFVwZGF0ZWQgYW5kIGRlY2F5ZWQgYXQgcHJlcGFyZV9zY2FuX2NvbnRyb2woKSB0aW1lOyBjb3N0X2xvY2tcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTc3NS1cXHQgKiBzZXJpYWxpc2VzIHRoYXQgdXBkYXRlLlxcbi0tXFxubW0vdm1zY2FuLmM9MjI3ND1lbnVtIHNjYW5fYmFsYW5jZSB7XFxuLS1cXG5tbS92bXNjYW4uYy0yMjgwLVxcbm1tL3Ztc2Nhbi5jOjIyODE6c3RhdGljIHZvaWQgcHJlcGFyZV9zY2FuX2NvbnRyb2wocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtMjI4Mi17XFxuLS1cXG5tbS92bXNjYW4uYz02MjExPXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjIzMy1cXG5tbS92bXNjYW4uYzo2MjM0OlxcdHByZXBhcmVfc2Nhbl9jb250cm9sKHBnZGF0LCBzYyk7XFxubW0vdm1zY2FuLmMtNjIzNS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDA6MDY6NTUuNTI1MTQ0OTg4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUyOTk4Mjc1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIE1lbW9yeSBNYW5hZ2VtZW50IENvZGUqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgZGVmaW5pdGVseSBjZW50ZXJlZCBpbiBgbW0vdm1zY2FuLmNgLiBUaGF0J3MgZ29vZCwgYXQgbGVhc3QgaXQncyBhIGtub3duIGFyZWEuIFRoYXQgZmlsZSBpcyBhbHdheXMgY29tcGlsZWQsIHdoaWNoIGlzIHVzZWZ1bCB3aGVuIHRyYWNraW5nIGRvd24gYSBzcGVjaWZpYyBpc3N1ZS4gSSBjYW4gdXNlIG15IGV4cGVyaWVuY2UgdG8gaW1tZWRpYXRlbHkgdGhpbmsgYWJvdXQgdGhlIGNoYW5nZXMgbWFkZSB0aGVyZSBhbmQgaG93IHRoZXkgbWF5IGluZmx1ZW5jZSBteSB3b3JrLlxuXG5Ob3csIGlmIG1lbW9yeSBzZXJ2ZXMsIGBDT05GSUdfTUVNQ0dgIGNvbWVzIGludG8gcGxheSB3aXRoIGBtbS9tZW1jb250cm9sLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgY2xvc2VseSB0aGUgY3VycmVudCBtb2RpZmljYXRpb24gaXMgdGllZCB0byBtZW1vcnkgY29udHJvbCBncm91cHMuIFRvIHZlcmlmeSB0aGUgcmVsYXRpb25zaGlwLCBsZXQncyB0YWtlIGEgcXVpY2sgbG9vayBhdCBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGNvbXBpbGF0aW9uIG9mIGBtZW1jb250cm9sLmNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhbiB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGlzIGZpbGUgYW5kIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzLCBoZWxwaW5nIG1lIGJ1aWxkIGEgbWVudGFsIG1vZGVsIG9mIHRoZSBjaGFuZ2VzLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzYzLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDA6MDY6NTkuMDU1MTMzODc3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMDU0ODYxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1jb250cm9sLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9Mjc9S0NPVl9JTlNUUlVNRU5UX2ttZW1sZWFrLm8gOj0gblxcbm1tL01ha2VmaWxlOjI4OktDT1ZfSU5TVFJVTUVOVF9tZW1jb250cm9sLm8gOj0gblxcbm1tL01ha2VmaWxlLTI5LUtDT1ZfSU5TVFJVTUVOVF9tZW1jb250cm9sLXYxLm8gOj0gblxcbi0tXFxubW0vTWFrZWZpbGU9MTA0PW9iai0kKENPTkZJR19NRU1DR19WMSkgKz0gbWVtY29udHJvbC12MS5vXFxubW0vTWFrZWZpbGU6MTA1Om9iai0kKENPTkZJR19NRU1DRykgKz0gbWVtY29udHJvbC5vIHZtcHJlc3N1cmUub1xcbm1tL01ha2VmaWxlLTEwNi1pZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5tbS9NYWtlZmlsZToxMDc6b2JqLSQoQ09ORklHX01FTUNHKSArPSBicGZfbWVtY29udHJvbC5vXFxubW0vTWFrZWZpbGUtMTA4LWVuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA2OjU5LjU1NTY5NjExNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjMwNzI2MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBJbnF1aXJ5OiBNZW1vcnkgTWFuYWdlbWVudCBhbmQgTFJVIEdlbmVyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBhbmQgaXQgbG9va3MgbGlrZSBgQ09ORklHX01FTUNHYCBpcyBkZWZpbml0ZWx5IGEgcHJlcmVxdWlzaXRlIGZvciBgbWVtY29udHJvbC5jYC4gVGhhdCdzIG5vdCBzdXJwcmlzaW5nLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uIHRvIGBDT05GSUdfTFJVX0dFTmAuIExldCdzIHNlZS4uLiBsb29raW5nIGF0IGBtbS92bXNjYW4uY2AsIEkgc3BvdCB0aGlzIGZ1bmN0aW9uLCBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgLiBIbW0sIGluc2lkZSBpdCwgdGhlcmUncyBhIGNoZWNrOiBgbHJ1X2dlbl9lbmFibGVkKClgLiBUaGlzIGlzIGludGVyZXN0aW5nOyBpdCBzdWdnZXN0cyB0aGF0IExSVSBnZW5lcmF0aW9uIGlzIHNvbWVob3cgaW50ZWdyYXRlZCBpbnRvIHRoZSBzY2FubmluZyBwcm9jZXNzIGl0c2VsZi4gVGhlIGxvZ2ljIHN1Z2dlc3RzLCB0aGF0LCBpZiBMUlUgZ2VuZXJhdGlvbiBpcyBlbmFibGVkIGFuZCBpdCBpcyBub3Qgc3dpdGNoaW5nLCB0aGVuIHRoZSBmdW5jdGlvbiBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgIGlzIGdvaW5nIHRvIHJldHVybi4gQWxyaWdodCwgc2VlbXMgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdC4gTm93LCBsZXQncyBsb29rIGF0IHdoZXJlIGBldmljdF9mb2xpb3NgIGZpdHMgaW50byBhbGwgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4MzgsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDA6MDc6MDMuMjc4NzczMTQ0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNDE4NDA0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXZpY3RfZm9saW9zXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTQ4MjY9c3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ4NTktXFxubW0vdm1zY2FuLmM6NDg2MDpzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5tbS92bXNjYW4uYy00ODYxLVxcdFxcdFxcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUwMjQ9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUwNDctXFx0XFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fc2NhbiwgTUlOX0xSVV9CQVRDSCk7XFxubW0vdm1zY2FuLmM6NTA0ODpcXHRcXHRkZWx0YSA9IGV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyk7XFxubW0vdm1zY2FuLmMtNTA0OS1cXHRcXHRpZiAoIWRlbHRhKVxcbi0tXFxubW0vdm1zY2FuLmM9NTY1MT1zdGF0aWMgaW50IHJ1bl9ldmljdGlvbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU2NzEtXFx0XFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fcmVjbGFpbSAtIHNjLVxcdTAwM2Vucl9yZWNsYWltZWQsIE1BWF9MUlVfQkFUQ0gpO1xcbm1tL3Ztc2Nhbi5jOjU2NzI6XFx0XFx0aWYgKCFldmljdF9mb2xpb3MobnJfYmF0Y2gsIGxydXZlYywgc2MsIHN3YXBwaW5lc3MpKVxcbm1tL3Ztc2Nhbi5jLTU2NzMtXFx0XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA3OjA4LjMyMDYyMjUxM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3MTI0NDgwNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzpcblxuKipDaGVja2luZyB0aGUgTUdMUlUgQ29ubmVjdGlvbiB0byBFdmljdGlvbiBMb2dpYyoqXG5cbkFscmlnaHQsIHNvIGBldmljdF9mb2xpb3NgIGlzIHBhcnQgb2YgdGhlIE1HTFJVIGltcGxlbWVudGF0aW9uLiBNeSBpbml0aWFsIGNvbmNlcm4gaXMgdG8gdW5kZXJzdGFuZCBpdHMgcGxhY2Ugd2l0aGluIHRoZSBicm9hZGVyIHBpY3R1cmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGlmIHRoaXMgZnVuY3Rpb24gaXMgb25seSBjb21waWxlZCBpZiB0aGUgYENPTkZJR19MUlVfR0VOYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBlbmFibGVkLiBUaGF0J3MgYSBjcml0aWNhbCBkZXRhaWwgYmVjYXVzZSBpdCB0aWVzIGBldmljdF9mb2xpb3NgIGRpcmVjdGx5IHRvIHRoZSBtdWx0aS1nZW5lcmF0aW9uYWwgTFJVIG1lY2hhbmlzbS4gRW5zdXJpbmcgdGhpcyBkZXBlbmRlbmN5IHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBiZWhhdmlvciBpbiB0aGUgbGFyZ2VyIGNvbnRleHQgb2YgbWVtb3J5IG1hbmFnZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjI0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDA6MDc6MTEuMDMzMDc1NTc5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDcwNDc5MjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0xSVV9HRU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9ODI0PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XFxuLS1cXG5tbS92bXNjYW4uYy04MzAtXFxubW0vdm1zY2FuLmM6ODMxOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3Ztc2Nhbi5jLTgzMi0vKlxcbi0tXFxubW0vdm1zY2FuLmM9ODU0PXN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTg1Ny19XFxubW0vdm1zY2FuLmM6ODU4OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3Ztc2Nhbi5jLTg1OS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTI2NzE9c3RhdGljIGJvb2wgY2FuX2FnZV9hbm9uX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI2ODItXFxubW0vdm1zY2FuLmM6MjY4MzojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS92bXNjYW4uYy0yNjg0LVxcbm1tL3Ztc2Nhbi5jPTI2ODU9REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UobHJ1X3N3aXRjaCk7XFxubW0vdm1zY2FuLmM6MjY4NjojaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxcbm1tL3Ztc2Nhbi5jLTI2ODctREVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfVFJVRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XFxuLS1cXG5tbS92bXNjYW4uYz0yODY3PXN0YXRpYyB2b2lkIHJlc2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxcbi0tXFxubW0vdm1zY2FuLmMtMjg4Ni1cXG5tbS92bXNjYW4uYzoyODg3OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcXG5tbS92bXNjYW4uYy0yODg4LVxcbi0tXFxubW0vdm1zY2FuLmM9Mjk5Nj12b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwMjQtXFxubW0vdm1zY2FuLmM6MzAyNTojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VICovXFxubW0vdm1zY2FuLmMtMzAyNi1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTU5MjA9bGF0ZV9pbml0Y2FsbChpbml0X2xydV9nZW4pO1xcbm1tL3Ztc2Nhbi5jLTU5MjEtXFxubW0vdm1zY2FuLmM6NTkyMjojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cXG5tbS92bXNjYW4uYy01OTIzLVxcbi0tXFxubW0vdm1zY2FuLmM9NTkzND1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTkzOC1cXG5tbS92bXNjYW4uYzo1OTM5OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3Ztc2Nhbi5jLTU5NDAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA3OjExLjQ0MDEzNzAyMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzgxMTU5Mzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVk1zY2FuIFBhdGNoKipcblxuT2theSwgc28gSSdtIHNlZWluZyB0aGF0IGBldmljdF9mb2xpb3NgIGlzIGRlZmluaXRlbHkgbmVzdGxlZCB3aXRoaW4gdGhhdCBgI2lmZGVmIENPTkZJR19MUlVfR0VOYCBibG9jay4gVGhhdCdzIGEga2V5IG9ic2VydmF0aW9uLiBOb3csIGxldCdzIGp1c3QgbWFrZSBzdXJlIEkgaGF2ZSB0aGlzIHJpZ2h0Li4uIHdhaXQgYSBzZWNvbmQsIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAsIGBzaHJpbmtfYWN0aXZlX2xpc3RgLCBhbmQgYHByZXBhcmVfc2Nhbl9jb250cm9sYCBhcmUgYWxsIGNvcmUgY29tcG9uZW50cyBvZiB0aGUgdHJhZGl0aW9uYWwgYWN0aXZlL2luYWN0aXZlIExSVSBtZWNoYW5pc20uIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYm90aCB0aGUgTUdMUlUgdmlhIGBldmljdF9mb2xpb3NgLCBhbmQgdGhlIGNsYXNzaWMgTFJVIHdpdGggdGhvc2UgdGhyZWUgZnVuY3Rpb25zLiBTbyBpdCdzIGFmZmVjdGluZyAqYm90aCogaW1wbGVtZW50YXRpb25zLCBub3QganVzdCB0aGUgbmV3IG9uZS4gSSBzaG91bGQgcHJvYmFibHkganVzdCBkb3VibGUtY2hlY2sgdGhhdCBieSBsb29raW5nIGF0IGBtbS92bXNjYW4uY2AgdG8gY29uZmlybS4gSXQgaXMgbm90IGp1c3Qgb25lIExSVSB0aGF0IGlzIGJlaW5nIG1vZGlmaWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjUwNSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwMDowNzoxNS4yMjEzMDA5NDhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTc3OTU2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJldmljdF9mb2xpb3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NDgyNj1zdGF0aWMgaW50IGlzb2xhdGVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vdm1zY2FuLmMtNDg1OS1cXG5tbS92bXNjYW4uYzo0ODYwOnN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbm1tL3Ztc2Nhbi5jLTQ4NjEtXFx0XFx0XFx0c3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKVxcbi0tXFxubW0vdm1zY2FuLmM9NTAyND1zdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTA0Ny1cXHRcXHRucl9iYXRjaCA9IG1pbihucl90b19zY2FuLCBNSU5fTFJVX0JBVENIKTtcXG5tbS92bXNjYW4uYzo1MDQ4OlxcdFxcdGRlbHRhID0gZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKTtcXG5tbS92bXNjYW4uYy01MDQ5LVxcdFxcdGlmICghZGVsdGEpXFxuLS1cXG5tbS92bXNjYW4uYz01NjUxPXN0YXRpYyBpbnQgcnVuX2V2aWN0aW9uKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbi0tXFxubW0vdm1zY2FuLmMtNTY3MS1cXHRcXHRucl9iYXRjaCA9IG1pbihucl90b19yZWNsYWltIC0gc2MtXFx1MDAzZW5yX3JlY2xhaW1lZCwgTUFYX0xSVV9CQVRDSCk7XFxubW0vdm1zY2FuLmM6NTY3MjpcXHRcXHRpZiAoIWV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcykpXFxubW0vdm1zY2FuLmMtNTY3My1cXHRcXHRcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDA6MDc6MTUuMzc3MDkwNzkyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNzQ0ODY3NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuIEhlcmUncyB3aGF0IEknbSB0aGlua2luZyBhcyBJIGFuYWx5emUgdGhlc2UgZnVuY3Rpb25zOlxuXG4qKkFuYWx5emluZyBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGFuZCBgc2hyaW5rX2FjdGl2ZV9saXN0YCoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGxpc3RzIGFyZSBiZWluZyBtYW5hZ2VkIGFuZCBob3cgbWVtb3J5IGlzIHBvdGVudGlhbGx5IGJlaW5nIG9wdGltaXplZC4gU28sIEknbSBnb2luZyB0byBzdGFydCBieSBsb29raW5nIGF0IGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgYW5kIGBzaHJpbmtfYWN0aXZlX2xpc3RgLiBUaGVzZSBmdW5jdGlvbiBuYW1lcyBhcmUgcHJldHR5IGRlc2NyaXB0aXZlLCBzbyBteSBpbml0aWFsIGh5cG90aGVzaXMgaXMgdGhhdCB0aGV5J3JlIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHByb2JhYmx5IGludm9sdmUgcmVkdWNpbmcgdGhlIHNpemUgb2Ygc29tZSBkYXRhIHN0cnVjdHVyZXMgdG8gcmVjbGFpbSByZXNvdXJjZXMuIEkgbmVlZCB0byBzZWUgKmhvdyogdGhpcyBzaHJpbmtpbmcgaXMgYWNjb21wbGlzaGVkIOKAkyBhcmUgd2UgZnJlZWluZyBtZW1vcnksIGNvYWxlc2Npbmcgc2VnbWVudHMsIG9yIGp1c3QgcmVhbGxvY2F0aW5nIHRvIHNtYWxsZXIgYmxvY2tzPyBXaGF0IGFyZSB0aGUgY3JpdGVyaWEgZm9yIHRyaWdnZXJpbmcgdGhpcyBzaHJpbmthZ2U/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhlIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgYW5kIGBzaHJpbmtfYWN0aXZlX2xpc3RgIG9uIHBlcmZvcm1hbmNlLCBwYXJ0aWN1bGFybHkgdGhlIHRyYWRlLW9mZiBiZXR3ZWVuIG1lbW9yeSBmb290cHJpbnQgYW5kIGV4ZWN1dGlvbiBzcGVlZC4gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzIEkgc2hvdWxkIGJlIGF3YXJlIG9mLCBlc3BlY2lhbGx5IGlmIHRoZSBsaXN0cyBhcmUgYmVpbmcgYWNjZXNzZWQgYnkgbXVsdGlwbGUgdGhyZWFkcz8gVWx0aW1hdGVseSwgSSBuZWVkIGEgdmVyeSBjbGVhciBwaWN0dXJlIG9mIHRoZWlyIGZ1bmN0aW9uYWxpdHkgYW5kIHRoZSBpbnZhcmlhbnRzIHRoZXkgbWFpbnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjUzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDA6MDc6MTkuNjUxNTgyMzlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MDkxNzgxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaHJpbmtfaW5hY3RpdmVfbGlzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz0xOTQyPXN0YXRpYyB2b2lkIGhhbmRsZV9yZWNsYWltX3dyaXRlYmFjayh1bnNpZ25lZCBsb25nIG5yX3Rha2VuLFxcbi0tXFxubW0vdm1zY2FuLmMtMTk4MC0vKlxcbm1tL3Ztc2Nhbi5jOjE5ODE6ICogc2hyaW5rX2luYWN0aXZlX2xpc3QoKSBpcyBhIGhlbHBlciBmb3Igc2hyaW5rX25vZGUoKS4gIEl0IHJldHVybnMgdGhlIG51bWJlclxcbm1tL3Ztc2Nhbi5jLTE5ODItICogb2YgcmVjbGFpbWVkIHBhZ2VzXFxubW0vdm1zY2FuLmMtMTk4My0gKi9cXG5tbS92bXNjYW4uYzoxOTg0OnN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19pbmFjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcXG5tbS92bXNjYW4uYy0xOTg1LVxcdFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuLS1cXG5tbS92bXNjYW4uYz0yMjEzPXN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19saXN0KGVudW0gbHJ1X2xpc3QgbHJ1LCB1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXFxuLS1cXG5tbS92bXNjYW4uYy0yMjIzLVxcbm1tL3Ztc2Nhbi5jOjIyMjQ6XFx0cmV0dXJuIHNocmlua19pbmFjdGl2ZV9saXN0KG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIGxydSk7XFxubW0vdm1zY2FuLmMtMjIyNS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA3OjE5Ljg0MjUxMDM2MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTQ0ODY3NzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2gncyBJbXBhY3Qgb24gTFJVIGFuZCBNR0xSVSBJbXBsZW1lbnRhdGlvbnMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgYml0IG1vcmUgaW52b2x2ZWQgdGhhbiBJIGluaXRpYWxseSB0aG91Z2h0LiBJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2VzIHRvdWNoIGJvdGggdGhlIHRyYWRpdGlvbmFsIExSVSBhbGdvcml0aG0gKmFuZCogdGhlIE1HTFJVIChNdWx0aS1HZW5lcmF0aW9uYWwgTFJVKSBpbXBsZW1lbnRhdGlvbi4gVGhlIGNsYXNzaWMgTFJVIGlzIGFsd2F5cyBiYWtlZCBpbnRvIHRoZSBrZXJuZWwsIHRoYXTigJlzIG5vIHN1cnByaXNlLCBidXQgTUdMUlUgaXMgY29uZGl0aW9uYWwsIGJhc2VkIG9uIHRoZSBgQ09ORklHX0xSVV9HRU5gIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGVyZWZvcmUsIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBlZmZlY3Qgb2YgdGhpcyBjb2RlLCBJJ20gdGhpbmtpbmcgd2UgbmVlZCB0byBleHBsaWNpdGx5IGVuYWJsZSBgQ09ORklHX0xSVV9HRU5gLlxuXG5Ib2xkIG9uIGEgc2Vjb25kLCB0aG91Z2guIEknbSBhbHNvIHNlZWluZyBzb21lIHBvdGVudGlhbCBpbnRlcmFjdGlvbiB3aXRoIGBDT05GSUdfTUVNQ0dgLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCBmdW5jdGlvbi4gVGhhdCBmdW5jdGlvbiBoYXMgc3BlY2lmaWMgbG9naWMgdGhhdCBoaW5nZXMgb24gYG1lbV9jZ3JvdXBfZGlzYWJsZWQoKWAuIFRoaXMgaXMgZ29pbmcgdG8gbWF0dGVyLCBzbyBJIHJlYWxseSBuZWVkIHRvIGV4YW1pbmUgdGhlIGRldGFpbHMgdGhlcmUuIEnigJlsbCBuYXZpZ2F0ZSB0byBgbW0vbWVtY29udHJvbC5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGFsbCBmaXRzIHRvZ2V0aGVyIGFuZCBob3cgdGhlIG1lbW9yeSBjZ3JvdXAgc2V0dGluZyBjaGFuZ2VzIHRoZSBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4MzgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDA6MDc6MjMuNzg3MzgzODE5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDc3MTczNzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9NDg2PXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MDgtLyoqXFxubW0vbWVtY29udHJvbC5jOjUwOTogKiBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMgLSBub24tY2xhbXBpbmcgbHJ1dmVjIHN0YXQgcmVhZCBmb3IgZGVsdGEgc2FtcGxpbmdcXG5tbS9tZW1jb250cm9sLmMtNTEwLSAqIEBscnV2ZWM6IHRoZSBMUlUgdmVjdG9yIHRvIHJlYWQgZnJvbVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyNi0gKi9cXG5tbS9tZW1jb250cm9sLmM6NTI3OnVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5tbS9tZW1jb250cm9sLmMtNTI4LVxcdFxcdFxcdFxcdFxcdCAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA3OjIzLjk5NTExNTg5M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNTg4MjExNzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczpcblxuKipLY29uZmlnIERlcGVuZGVuY3kgQ29uZmlybWF0aW9uKipcblxuUmlnaHQsIHNvIHdlJ3JlIGFic29sdXRlbHkgZ29pbmcgdG8gbmVlZCBgQ09ORklHX01FTUNHYC4gTm8gcXVlc3Rpb24gYWJvdXQgdGhhdC4gTm93LCBsZXQncyBzZWUsIHdoYXQncyBuZXh0PyBIbW0sIHRoZSBwcm9ibGVtIEknbSB0cnlpbmcgdG8gc29sdmUgc2VlbXMgdG8gaGluZ2Ugb24gc29tZXRoaW5nIHJlbGF0ZWQgdG8gYExSVV9HRU5gLiBJIHNob3VsZCBnbyBkaXJlY3RseSB0byBgbW0vS2NvbmZpZ2AgdG8gc2VlIGlmIHRoYXQgb3B0aW9uIGlzIGVuYWJsZWQsIGFuZCB1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXMuIEdvdHRhIG1ha2Ugc3VyZSB3ZSdyZSBub3QgbWlzc2luZyBhIGNyaXRpY2FsIGRlcGVuZGVuY3kgb3Igc29tZXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQzOSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA3OjI2LjU4MzMzMTU0NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE2MzgxMTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBMUlVfR0VOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xNDA2PWVuZGlmICMgVVNFUkZBVUxURkRcXG4tLVxcbm1tL0tjb25maWctMTQwOC0jIG11bHRpLWdlbiBMUlUge1xcbm1tL0tjb25maWc6MTQwOTpjb25maWcgTFJVX0dFTlxcbm1tL0tjb25maWctMTQxMC1cXHRib29sIFxcXCJNdWx0aS1HZW4gTFJVXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDE3LVxcbm1tL0tjb25maWc6MTQxODpjb25maWcgTFJVX0dFTl9FTkFCTEVEXFxubW0vS2NvbmZpZy0xNDE5LVxcdGJvb2wgXFxcIkVuYWJsZSBieSBkZWZhdWx0XFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDIzLVxcbm1tL0tjb25maWc6MTQyNDpjb25maWcgTFJVX0dFTl9TVEFUU1xcbm1tL0tjb25maWctMTQyNS1cXHRib29sIFxcXCJGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MzItXFxubW0vS2NvbmZpZzoxNDMzOmNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxcbm1tL0tjb25maWctMTQzNC1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA3OjI2Ljg5OTcyNDI5OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzAyNzA3MTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE1HTFJVIFRlc3RpbmcgXHUwMDI2IEtleSBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIHRvIHJlYWxseSBwdXQgdGhlIE1HTFJVIHBhdGggdGhyb3VnaCBpdHMgcGFjZXMsIGVuYWJsaW5nIGBDT05GSUdfTFJVX0dFTmAgYW5kIGBDT05GSUdfTFJVX0dFTl9FTkFCTEVEYCBzZWVtcyBsaWtlIHRoZSByaWdodCBtb3ZlLiBIb3dldmVyLCB3YWl0IGEgbWludXRlLCBpZiB3ZSBlbmFibGUgYENPTkZJR19MUlVfR0VOX0VOQUJMRURgIG91dHJpZ2h0LCB3ZSBtaWdodCBpbmFkdmVydGVudGx5IGJ5cGFzcyB0aGUgdHJhZGl0aW9uYWwgTFJVIHBhdGggaW4gZGVmYXVsdCBjb25maWd1cmF0aW9ucywgdW5sZXNzIHdlIGV4cGxpY2l0bHkgZm9yY2UgYSBydW50aW1lIHN3aXRjaC4gVGhhdCdzIG5vdCBpZGVhbCwgc2luY2UgdGhlIHBhdGNoIG1vZGlmaWVzIGJvdGggYXBwcm9hY2hlcy4gU28sIEknbGwgYmUgc3VyZSB0byBtYWtlIG5vdGUgb2YgdGhlc2UgY29uY2VybnMuIEkgY2FuIHNpbXBsaWZ5IHRoaW5ncyBieSBsaXN0aW5nIGBNRU1DR2AgYW5kIGBMUlVfR0VOYC5cblxuTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB3aGVyZSB0aGlzIHBhdGNoIHdpbGwgaGF2ZSB0aGUgZ3JlYXRlc3QgaW1wYWN0IGFuZCB3aGVyZSB0ZXN0aW5nIHNob3VsZCBiZSBmb2N1c2VkLiBJJ3ZlIGdvdCB0byBjb25zaWRlcjpcblxuKiAgIGBwcmVwYXJlX3NjYW5fY29udHJvbGBcbiogICBgc2hyaW5rX2luYWN0aXZlX2xpc3RgXG4qICAgYHNocmlua19hY3RpdmVfbGlzdGBcbiogICBgZXZpY3RfZm9saW9zYFxuKiAgIGBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWNgXG4qICAgYG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWNgXG5cbkknbSBldmFsdWF0aW5nIHdoZXRoZXIgYHNocmlua19pbmFjdGl2ZV9saXN0YCBhbmQgYHNocmlua19hY3RpdmVfbGlzdGAgYXJlIGhvdCwgY3JpdGljYWwgcGF0aHMuIEkga25vdyB0aGV5J3JlIGludm9rZWQgZHVyaW5nIG1lbW9yeSByZWNsYWltLCB3aGljaCBjYW4gaGFwcGVuIGZyZXF1ZW50bHkgd2hlbiB0aGUgc3lzdGVtIGlzIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSwgYnV0IHRoZXkncmUgbm90IHF1aXRlIGFzIHViaXF1aXRvdXMgYXMgZnVuY3Rpb25zIGxpa2UgYGttYWxsb2NgIG9yIGBzY2hlZHVsZWAuIGBwcmVwYXJlX3NjYW5fY29udHJvbGAgaXMgYWxzbyBwYXJ0IG9mIHRoYXQgcmVjbGFpbSBwcm9jZXNzLiBgZXZpY3RfZm9saW9zYCBkZWZpbml0ZWx5IGxvb2tzIGtleSBzaW5jZSBpdCdzIGRpcmVjdGx5IGludm9sdmVkIGluIHRoZSBNR0xSVSByZWNsYWltIHByb2Nlc3MuIGBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWNgIGlzIGNhbGxlZCBmcm9tIGBwcmVwYXJlX3NjYW5fY29udHJvbGAsIGFuZCBgbm9kZV9wYWdlX3N0YXRlX21vbm90b25pY2AgaXMgaW4gdHVybiBjYWxsZWQgZnJvbSBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYC4gSSdsbCB3YW50IHRvIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBwcmVwYXJlX3NjYW5fY29udHJvbGAgbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4NTEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDA6MDc6MzIuNjAyNDM1NDU5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzY1NzQ0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJlcGFyZV9zY2FuX2NvbnRyb2xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9MjI3ND1lbnVtIHNjYW5fYmFsYW5jZSB7XFxuLS1cXG5tbS92bXNjYW4uYy0yMjgwLVxcbm1tL3Ztc2Nhbi5jOjIyODE6c3RhdGljIHZvaWQgcHJlcGFyZV9zY2FuX2NvbnRyb2wocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtMjI4Mi17XFxuLS1cXG5tbS92bXNjYW4uYz02MjExPXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjIzMy1cXG5tbS92bXNjYW4uYzo2MjM0OlxcdHByZXBhcmVfc2Nhbl9jb250cm9sKHBnZGF0LCBzYyk7XFxubW0vdm1zY2FuLmMtNjIzNS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDA6MDc6MzIuODc5MDIxNjA4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MTc3NDI3OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgTWVtb3J5IFNocmlua2FnZSBQcm9jZXNzKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgZW50cnkgcG9pbnQgd2UncmUgd29ya2luZyB3aXRoIGhlcmUgaXMgYHNocmlua19ub2RlYC4gVGhhdCdzIHdoZXJlIGl0IGFsbCBiZWdpbnMuIEFuZCBmcm9tIG15IGV4cGVyaWVuY2UsIGBzaHJpbmtfbm9kZWAgZ2V0cyBpbnZva2VkIGZyb20gYSBmZXcga2V5IHBsYWNlczogYGRvX3RyeV90b19mcmVlX3BhZ2VzYCwgYGtzd2FwZF9zaHJpbmtfbm9kZWAsIGBzaHJpbmtfYWxsX21lbW9yeWAsIGFsbCBjb3JlIGNvbXBvbmVudHMgb2YgdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbS4gS25vd2luZyB0aGF0LCBmb2N1c2luZyBpbiBvbiBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgLCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYW5kIGBldmljdF9mb2xpb3NgIHNlZW1zIGxpa2UgdGhlIHJpZ2h0IGFwcHJvYWNoLiBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgd29yayBvZiByZWNsYW1hdGlvbiBpcyBoYXBwZW5pbmcuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgdGhlIGFjdGl2ZSBhbmQgaW5hY3RpdmUgbGlzdCBtYW5pcHVsYXRpb24uIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gYGV2aWN0X2ZvbGlvc2AsIGJlY2F1c2UgdGhhdCB0b3VjaGVzIGRpcmVjdGx5IG9uIHRoZSBkYXRhIHN0cnVjdHVyZXMuIEkgdGhpbmsgaXQgaXMgaW1wb3J0YW50IHRvIGJlIGNvbXByZWhlbnNpdmUgaGVyZS5cblxuQmVmb3JlIEkgZ28gZnVydGhlciwgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGhvdyBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCB3b3JrcyBhZ2Fpbi4gSXQncyBvZnRlbiB0aGUgcm9vdCBvZiBzdWJ0bGUgYnVncyByZWxhdGVkIHRvIHRoZSBib29ra2VlcGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4MTIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDA6MDc6MzYuNjk2NzcxNTIyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc4ODE3MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9NDg2PXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MDgtLyoqXFxubW0vbWVtY29udHJvbC5jOjUwOTogKiBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMgLSBub24tY2xhbXBpbmcgbHJ1dmVjIHN0YXQgcmVhZCBmb3IgZGVsdGEgc2FtcGxpbmdcXG5tbS9tZW1jb250cm9sLmMtNTEwLSAqIEBscnV2ZWM6IHRoZSBMUlUgdmVjdG9yIHRvIHJlYWQgZnJvbVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyNi0gKi9cXG5tbS9tZW1jb250cm9sLmM6NTI3OnVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5tbS9tZW1jb250cm9sLmMtNTI4LVxcdFxcdFxcdFxcdFxcdCAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA3OjM2Ljg2NDY2MjIwMVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTYzNTk2NDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIE5ldyBGdW5jdGlvbioqXG5cbkFscmlnaHQsIGEgbmV3IGZ1bmN0aW9uLCBnb3QgaXQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGluIGFuZCB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMuIEZpcnN0LCBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIHF1aWNrIGNoZWNrIG9uIGBub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYC4gVGhhdCBzcGVjaWZpYyBmdW5jdGlvbiBvciB2YXJpYWJsZSBuYW1lIGltbWVkaWF0ZWx5IHJpbmdzIGEgYmVsbCDigJMgaXQncyBsaWtlbHkgYSBrZXkgZWxlbWVudCBvciBkZXBlbmRlbmN5IGhlcmUuIEknbGwgbmVlZCB0byBhc3Nlc3MgaG93IHRoaXMgbmV3IGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoLCBvciBtb2RpZmllcywgd2hhdGV2ZXIgYmVoYXZpb3IgYG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWNgIGlzIHJlc3BvbnNpYmxlIGZvci4gVW5kZXJzdGFuZGluZyB0aGF0IHJlbGF0aW9uc2hpcCBpcyBjcnVjaWFsIGJlZm9yZSBJIGNhbiBmdWxseSBncmFzcCB0aGUgaW50ZW50IGFuZCBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoZSBpbnRyb2R1Y3Rpb24uIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGF0IHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoaXMgY29yZSBjb25jZXB0IHdpbGwgcmV2ZWFsIHRoZSBmdW5jdGlvbidzIHRydWUgcHVycG9zZSBhbmQgbGlrZWx5IGFyZWFzIGZvciBwb3RlbnRpYWwgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjM5NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA3OjM5LjgyODI2NjQ0NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE0MDU0ODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zdGF0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zdGF0LmM9MTAyMD11bnNpZ25lZCBsb25nIG5vZGVfcGFnZV9zdGF0ZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxcbi0tXFxubW0vdm1zdGF0LmMtMTAzMC0gKiBzbmFwc2hvdCBhIG1vbm90b25pY2FsbHktaW5jcmVtZW50ZWQgY291bnRlciBhbmQgc3VidHJhY3QgdHdvIHNhbXBsZXMuXFxubW0vdm1zdGF0LmM6MTAzMTogKiBTZWUgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMoKSBmb3IgdGhlIHJhdGlvbmFsZS5cXG5tbS92bXN0YXQuYy0xMDMyLSAqL1xcbm1tL3Ztc3RhdC5jOjEwMzM6dW5zaWduZWQgbG9uZyBub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxubW0vdm1zdGF0LmMtMTAzNC1cXHRcXHRcXHRcXHRcXHRlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW0pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA3OjQwLjA0MjMzMTY0OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjgyMzIxNzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBSZWNlbnQgS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50IENoYW5nZXMqKlxuXG5Pa2F5LCBzbyB0aGlzIGlzIG5ldyBpbmZvcm1hdGlvbi4gSSdtIGZvY3VzaW5nIG9uIHRoZSByZWNlbnQgbW9kaWZpY2F0aW9ucywgYW5kIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBiZWVuIHRvdWNoZWQgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS5cblxuSXQgc2VlbXMgd2UndmUgZ290IGEgbGlzdCBvZiBtb2RpZmllZCBmdW5jdGlvbnMuIEFscmlnaHQsIGxldCdzIHNlZSwgd2UgaGF2ZSBgcGFnZW91dGAgaW4gYG1tL3Ztc2Nhbi5jYCwgYHNocmlua19mb2xpb19saXN0YCBpbiBgbW0vdm1zY2FuLmNgLCBgd29ya2luZ3NldF9yZWZhdWx0YCBpbiBgbW0vd29ya2luZ3NldC5jYCwgYGxydV9yZXBhcmVudF9tZW1jZ2AgaW4gYG1tL3N3YXAuY2AsIGFuZCBgbWVtY2cxX3N0YXRfZm9ybWF0YCBpbiBgbW0vbWVtY29udHJvbC12MS5jYC5cblxuUmlnaHQuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlc2UuIEknbGwgYmVnaW4gYnkgZm9jdXNpbmcgb24gYHBhZ2VvdXRgLiBJdCdzIGFsd2F5cyBhIGNyaXRpY2FsIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjc4OCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwMDowNzo0My43MjQ2NTgzMjFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NjM4Mzg4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWdlb3V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTU4Mj12b2lkIF9fYWNjdF9yZWNsYWltX3dyaXRlYmFjayhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vdm1zY2FuLmMtNjAyLVxcbm1tL3Ztc2Nhbi5jOjYwMzovKiBwb3NzaWJsZSBvdXRjb21lIG9mIHBhZ2VvdXQoKSAqL1xcbm1tL3Ztc2Nhbi5jLTYwNC10eXBlZGVmIGVudW0ge1xcbi0tXFxubW0vdm1zY2FuLmMtNjEyLVxcdFBBR0VfQ0xFQU4sXFxubW0vdm1zY2FuLmM6NjEzOn0gcGFnZW91dF90O1xcbm1tL3Ztc2Nhbi5jLTYxNC1cXG5tbS92bXNjYW4uYy02MTUtLypcXG5tbS92bXNjYW4uYzo2MTY6ICogcGFnZW91dCBpcyBjYWxsZWQgYnkgc2hyaW5rX2ZvbGlvX2xpc3QoKSBmb3IgZWFjaCBkaXJ0eSBmb2xpby5cXG5tbS92bXNjYW4uYy02MTctICovXFxubW0vdm1zY2FuLmM6NjE4OnN0YXRpYyBwYWdlb3V0X3QgcGFnZW91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG5tbS92bXNjYW4uYy02MTktXFx0XFx0XFx0IHN0cnVjdCBzd2FwX2lvY2IgKipwbHVnLCBzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KVxcbi0tXFxubW0vdm1zY2FuLmM9MTA1NT1zdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXFxuLS1cXG5tbS92bXNjYW4uYy0xMzk2LVxcdFxcdFxcdHRyeV90b191bm1hcF9mbHVzaF9kaXJ0eSgpO1xcbm1tL3Ztc2Nhbi5jOjEzOTc6XFx0XFx0XFx0c3dpdGNoIChwYWdlb3V0KGZvbGlvLCBtYXBwaW5nLCBcXHUwMDI2cGx1ZywgZm9saW9fbGlzdCkpIHtcXG5tbS92bXNjYW4uYy0xMzk4LVxcdFxcdFxcdGNhc2UgUEFHRV9LRUVQOlxcbi0tXFxubW0vdm1zY2FuLmM9MjIxMz1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfbGlzdChlbnVtIGxydV9saXN0IGxydSwgdW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbi0tXFxubW0vdm1zY2FuLmMtMjI0MC0gKiBUaGUgaW5hY3RpdmVfcmF0aW8gaXMgdGhlIHRhcmdldCByYXRpbyBvZiBBQ1RJVkUgdG8gSU5BQ1RJVkUgZm9saW9zXFxubW0vdm1zY2FuLmM6MjI0MTogKiBvbiB0aGlzIExSVSwgbWFpbnRhaW5lZCBieSB0aGUgcGFnZW91dCBjb2RlLiBBbiBpbmFjdGl2ZV9yYXRpb1xcbm1tL3Ztc2Nhbi5jLTIyNDItICogb2YgMyBtZWFucyAzOjEgb3IgMjUlIG9mIHRoZSBmb2xpb3MgYXJlIGtlcHQgb24gdGhlIGluYWN0aXZlIGxpc3QuXFxuLS1cXG5tbS92bXNjYW4uYz03MzY3PXN0YXRpYyB2b2lkIGtzd2FwZF90cnlfdG9fc2xlZXAocGdfZGF0YV90ICpwZ2RhdCwgaW50IGFsbG9jX29yZGVyLCBpbnQgcmVjbGFpbV9vcmRlcixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc0NTEtLypcXG5tbS92bXNjYW4uYzo3NDUyOiAqIFRoZSBiYWNrZ3JvdW5kIHBhZ2VvdXQgZGFlbW9uLCBzdGFydGVkIGFzIGEga2VybmVsIHRocmVhZFxcbm1tL3Ztc2Nhbi5jLTc0NTMtICogZnJvbSB0aGUgaW5pdCBwcm9jZXNzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwMDowNzo0My45MTEwNTEzNzNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA5NTU3NTI4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zIGhlcmUuIEludGVyZXN0aW5nLCBgcGFnZW91dGAgaXMgZGVmaW5lZCBhcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCB1c3VhbGx5IG1lYW5zIGl0J3MgbGltaXRlZCBpbiBzY29wZSBhbmQgY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBzYW1lIHNvdXJjZSBmaWxlLiBHb29kIHRvIGtub3cgZm9yIHVuZGVyc3RhbmRpbmcgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLiBUaGVuIHRoZXJlJ3MgYHNocmlua19mb2xpb19saXN0YCwgYWxzbyBzdGF0aWMuIEFnYWluLCByZWluZm9yY2VzIHRoZSBpZGVhIG9mIGxpbWl0ZWQgdmlzaWJpbGl0eSBhbmQgYSBzcGVjaWZpYyBwdXJwb3NlIHdpdGhpbiBpdHMgY29tcGlsYXRpb24gdW5pdC5cblxuQnV0IG5vdywgYHdvcmtpbmdzZXRfcmVmYXVsdGAgaGFzIGJlZW4gZXhwb3J0ZWQuIFRoYXQgc3VnZ2VzdHMgaXQncyBkZXNpZ25lZCB0byBiZSB1c2VkIGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0sIHBvdGVudGlhbGx5IGJ5IHRoZSBrZXJuZWwgaXRzZWxmIG9yIG1heWJlIGV2ZW4gdXNlci1zcGFjZSBwcm9jZXNzZXMgaWYgdGhlIEFQSSBpcyBleHBvc2VkIGNvcnJlY3RseS4gVGhhdCdzIHRoZSBvbmUgSSBuZWVkIHRvIGZvY3VzIG9uLiBMZXQncyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgaG93IGB3b3JraW5nc2V0X3JlZmF1bHRgIGlzIHVzZWQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgc3RhdGljIGBwYWdlb3V0YCBhbmQgYHNocmlua19mb2xpb19saXN0YC4gVGhpcyBpcyB3aGVyZSB0aGUgaW50ZXJlc3Rpbmcgc3R1ZmYgdXN1YWxseSBpcy4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzc0NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA3OjQ3LjAwNjYzMTE1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDk1OTA1MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid29ya2luZ3NldF9yZWZhdWx0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3dvcmtpbmdzZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS93b3JraW5nc2V0LmM9NDMwPWJvb2wgd29ya2luZ3NldF90ZXN0X3JlY2VudCh2b2lkICpzaGFkb3csIGJvb2wgZmlsZSwgYm9vbCAqd29ya2luZ3NldCxcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy01MzktLyoqXFxubW0vd29ya2luZ3NldC5jOjU0MDogKiB3b3JraW5nc2V0X3JlZmF1bHQgLSBFdmFsdWF0ZSB0aGUgcmVmYXVsdCBvZiBhIHByZXZpb3VzbHkgZXZpY3RlZCBmb2xpby5cXG5tbS93b3JraW5nc2V0LmMtNTQxLSAqIEBmb2xpbzogVGhlIGZyZXNobHkgYWxsb2NhdGVkIHJlcGxhY2VtZW50IGZvbGlvLlxcbi0tXFxubW0vd29ya2luZ3NldC5jLTU0Ny0gKi9cXG5tbS93b3JraW5nc2V0LmM6NTQ4OnZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcXG5tbS93b3JraW5nc2V0LmMtNTQ5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDA6MDc6NDcuMTU2MjMxMTY1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxMTY5ODMyMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgS2V5IEZ1bmN0aW9ucyBhbmQgQ29uZmlndXJhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGZvY3VzIHJpZ2h0IG5vdyBpcyBwaW5wb2ludGluZyB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIGFuZCBjb25maWd1cmF0aW9ucy4gQmFzZWQgb24gd2hhdCBJJ3ZlIHNlZW4sIEkndmUgaWRlbnRpZmllZCBzZXZlcmFsIGZ1bmN0aW9ucyB0aGF0IGFyZSBjZW50cmFsIHRvIHRoZSB3b3JrIEknbSBkb2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgc2NvcGUgYW5kIGhvdyB0aGV5J3JlIHVzZWQuIE15IGluaXRpYWwgbGlzdCBpbmNsdWRlczogYHByZXBhcmVfc2Nhbl9jb250cm9sYCwgYHNocmlua19pbmFjdGl2ZV9saXN0YCwgYHNocmlua19hY3RpdmVfbGlzdGAsIGBldmljdF9mb2xpb3NgLCBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCwgYG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWNgLCBhbmQgYHdvcmtpbmdzZXRfcmVmYXVsdGAuXG5cbk5vdywgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHNjb3BlIG9mIHRoZXNlIGZ1bmN0aW9ucy4gQXJlIHRoZXkgZ2xvYmFsbHkgYWNjZXNzaWJsZSwgb3IgYXJlIHRoZXkgc3RhdGljIHdpdGhpbiBhIHNwZWNpZmljIG1vZHVsZT8gSXQgbG9va3MgbGlrZSBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCBpcyBnbG9iYWxseSBkZWNsYXJlZCBpbiBgbW0vbWVtY29udHJvbC5jYCBhbmQgYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYCBhbmQgYG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWNgIGlzIGluIGBtbS92bXN0YXQuY2AgYW5kIGBpbmNsdWRlL2xpbnV4L3Ztc3RhdC5oYC4gSSBjb25maXJtIHRoYXQgYGV2aWN0X2ZvbGlvc2AgaXMgdGhlIGNvcnJlY3QgZnVuY3Rpb24gbmFtZSB3aXRoaW4gYG1tL3Ztc2Nhbi5jYC4gU2ltaWxhcmx5LCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGFuZCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYW5kIGBwcmVwYXJlX3NjYW5fY29udHJvbGAgYXJlIHN0YXRpYyB3aXRoaW4gYG1tL3Ztc2Nhbi5jYC4gQW5kIGB3b3JraW5nc2V0X3JlZmF1bHRgIGlzIGdsb2JhbCBpbiBgbW0vd29ya2luZ3NldC5jYC4gSSBjb25maXJtIGBwYWdlb3V0YCBhbmQgYHNocmlua19mb2xpb19saXN0YCBhcmUgc3RhdGljIHdpdGhpbiBgbW0vdm1zY2FuLmNgLlxuXG5Pa2F5LCBzbyBteSBjb25maXJtZWQgbGlzdCBvZiBGb2N1c1N5bWJvbHMgaXM6XG5gcHJlcGFyZV9zY2FuX2NvbnRyb2xgXG5gc2hyaW5rX2luYWN0aXZlX2xpc3RgXG5gc2hyaW5rX2FjdGl2ZV9saXN0YFxuYGV2aWN0X2ZvbGlvc2BcbmBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWNgXG5gbm9kZV9wYWdlX3N0YXRlX21vbm90b25pY2BcbmB3b3JraW5nc2V0X3JlZmF1bHRgXG5cbk5leHQsIEkgbmVlZCB0byBjb25zaWRlciBhbnkgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEkndmUgbm90ZWQgdGhyZWUga2V5IG9uZXM6IGBDT05GSUdfTUVNQ0dgLCBgQ09ORklHX0xSVV9HRU5gLCBhbmQgYENPTkZJR19MUlVfR0VOX0VOQUJMRURgLiBUaGUgcHJlc2VuY2Ugb2YgYENPTkZJR19MUlVfR0VOYCBtZWFucyBgZXZpY3RfZm9saW9zYCAqY291bGQqIGJlIGNvbXBpbGVkLiBCdXQgdGhlIGV4ZWN1dGlvbiBvZiBgZXZpY3RfZm9saW9zYCBtYXkgZGVwZW5kIG9uIHJ1bnRpbWUgb3IgY29tcGlsZS10aW1lIG9wdGlvbnMuIFNvIHRvIGVuc3VyZSBJJ20gY292ZXJpbmcgYWxsIGJhc2VzLCBJIHNob3VsZCBpbmNsdWRlIGBMUlVfR0VOX0VOQUJMRURgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODIxMSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwMDowNzo1NC4yNzMyMjAzNjFaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjI5NjkzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTFJVX0dFTl9FTkFCTEVEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xNDA5PWNvbmZpZyBMUlVfR0VOXFxuLS1cXG5tbS9LY29uZmlnLTE0MTctXFxubW0vS2NvbmZpZzoxNDE4OmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcXG5tbS9LY29uZmlnLTE0MTktXFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA3OjU0Ljc2NTUyNjY0M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTY3NjcxODkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIFN3YXAgYW5kIExSVSBHZW5lcmF0aW9uIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gYExSVV9HRU5fRU5BQkxFRGAgaXMgaW5kZWVkIGEgY29uZmlndXJhdGlvbiBvcHRpb24sIHRoYXQncyBjbGVhciBlbm91Z2guIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhcm91bmQgdGhpcyBjaGFuZ2UuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdoZXRoZXIgb3Igbm90IHdlIG5lZWQgdG8gY29uc2lkZXIgYENPTkZJR19TV0FQYCBpbiB0aGlzIGVxdWF0aW9uLiBUaGUgcGF0Y2ggdG91Y2hlcyBib3RoIGBtbS9zd2FwLmNgIGFuZCBgaW5jbHVkZS9saW51eC9zd2FwLmhgLiBUaGF0J3MgdGhlIGtleS4gQWx0aG91Z2ggYG1tL3N3YXAuY2AgaXMgYWx3YXlzIGNvbXBpbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTM5NiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA3OjU3LjczMzIwNDM5NloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM2MDc0NDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN3YXAub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT01MT1vYmoteVxcdFxcdFxcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcXFxcbm1tL01ha2VmaWxlLTUyLVxcdFxcdFxcdCAgIG1hY2Nlc3MubyBwYWdlLXdyaXRlYmFjay5vIGZvbGlvLWNvbXBhdC5vIFxcXFxcXG5tbS9NYWtlZmlsZTo1MzpcXHRcXHRcXHQgICByZWFkYWhlYWQubyBzd2FwLm8gdHJ1bmNhdGUubyB2bXNjYW4ubyBzaHJpbmtlci5vIFxcXFxcXG5tbS9NYWtlZmlsZS01NC1cXHRcXHRcXHQgICBzaG1lbS5vIHV0aWwubyBtbXpvbmUubyB2bXN0YXQubyBiYWNraW5nLWRldi5vIFxcXFxcXG4tLVxcbm1tL01ha2VmaWxlPTc4PW9iai0kKENPTkZJR19TV0FQKVxcdCs9IHBhZ2VfaW8ubyBzd2FwX3N0YXRlLm8gc3dhcGZpbGUub1xcbm1tL01ha2VmaWxlOjc5Om9iai0kKENPTkZJR19aU1dBUClcXHQrPSB6c3dhcC5vXFxubW0vTWFrZWZpbGUtODAtb2JqLSQoQ09ORklHX0hBU19ETUEpXFx0Kz0gZG1hcG9vbC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA3OjU3Ljk2OTI4ODlaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMyMjMxNDYxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyB0aGUgRGVwZW5kZW5jaWVzIG9mIGBzd2FwLm9gKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgc3dhcC5vYCBpcyBpbmRlZWQgaW5jbHVkZWQgaW4gYG9iai15YC4gTXkgbmV4dCBzdGVwIGlzIHRvIG5haWwgZG93biB0aGUgZXhhY3QgY29uZmlndXJhdGlvbiBvcHRpb25zIGludm9sdmVkIGhlcmUuIEl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIGBNRU1DR2AsIGBMUlVfR0VOYCwgYW5kIGBMUlVfR0VOX0VOQUJMRURgLiBOb3csIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgdGhlIGJlaGF2aW9yIG9mIGBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWNgLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgbW0vbWVtY29udHJvbC5jYC5cblxuUmlnaHQsIGlmIGBDT05GSUdfTUVNQ0dgICppc24ndCogc2V0LCBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCBpcyBkZWZpbmVkIGFzIGFuIGlubGluZSBmdW5jdGlvbiB3aXRoaW4gYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYC4gVGhhdCdzIGEgY3J1Y2lhbCBkZXRhaWwgdG8gcmVtZW1iZXIuIEknbGwgbWFrZSBzdXJlIHRvIG5vdGUgdGhpcyBkaWZmZXJlbmNlIGluIGJlaGF2aW9yIGRlcGVuZGluZyBvbiB3aGV0aGVyIE1FTUNHIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODIxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA4OjAxLjI5MTYwODMyNFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzcxNTE5Mjk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxydXZlY19wYWdlX3N0YXRlX21vbm90b25pY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD05MzM9dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo5MzQ6dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTkzNS1cXHRcXHRcXHRcXHRcXHQgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTEzNzc9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEzODItXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTM4MzpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMzg0LVxcdFxcdFxcdFxcdFxcdFxcdFxcdGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwMDowODowMS42NjMxNDYyODlaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ5NjI4NTE0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoZXNlIHRob3VnaHRzLCBwdXR0aW5nIG15c2VsZiBpbiB0aGUgcG9zaXRpb24gb2YgbmVlZGluZyB0byB1bmRlcnN0YW5kIHRoaXMgY29kZTpcblxuKipBbmFseXppbmcgTWVtb3J5IENvbnRyb2wgd2l0aCBDT05GSUdfTUVNQ0cqKlxuXG5SaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBtZW1vcnkgY29udHJvbCBjb2RlLiBGaXJzdCwgdGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGBtbS9tZW1jb250cm9sLmNgIGZ1bmN0aW9uYWxpdHkgaW5saW5lIG9yIG91dC1vZi1saW5lPyBUaGUgbm90ZSBjbGVhcmx5IHN0YXRlcyB0aGF0IGlmIGAhQ09ORklHX01FTUNHYCBpcyB0cnVlLCB0aGVuIGl0J3MgaW5saW5lLiBUaGF0J3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gVGhlcmVmb3JlLCB0byAqcmVhbGx5KiB0ZXN0IHRoZSBvdXQtb2YtbGluZSBpbXBsZW1lbnRhdGlvbiwgd2UncmUgZ29pbmcgdG8gbmVlZCB0byBlbnN1cmUgYE1FTUNHYCBpcyBkZWZpbmVkIGFuZCBhY3RpdmUuIFRoYXQncyB0aGUgYmFzZWxpbmUsIHRoZSBjb3JlIGNvbmRpdGlvbi5cblxuTm93LCB3aGVyZSBkbyB3ZSBnbyBmcm9tIHRoZXJlPyBUaGUgbmV4dCBwbGFjZSB0byBjaGVjayBpcyBgbW0vdm1zdGF0LmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCBmdW5jdGlvbi4gSSBoYXZlIGEgaHVuY2gsIGFuZCB0aGlzIG5lZWRzIHRvIGJlIGNvbmZpcm1lZCwgdGhhdCBpZiBgQ09ORklHX1NNUGAgaXMgKm5vdCogZGVmaW5lZCwgdGhlbiAqdGhhdCogcG9ydGlvbiBvZiB0aGUgY29kZSBpcyBsaWtlbHkgdG8gYmUgaW5saW5lIGFzIHdlbGwuIFRoaXMsIEkgbmVlZCB0byB2ZXJpZnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMzg0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDA6MDg6MDUuMTU5NDM3NDhaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4Mjg2OTc4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvdm1zdGF0LmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC92bXN0YXQuaD0xODY9dW5zaWduZWQgbG9uZyBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlX3BhZ2VzKGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbSlcXG4tLVxcbmluY2x1ZGUvbGludXgvdm1zdGF0LmgtMjAzLSAqL1xcbmluY2x1ZGUvbGludXgvdm1zdGF0Lmg6MjA0OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW0pXFxuaW5jbHVkZS9saW51eC92bXN0YXQuaC0yMDUte1xcbi0tXFxuaW5jbHVkZS9saW51eC92bXN0YXQuaD0yNzI9ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbm9kZV9wYWdlX3N0YXRlX3BhZ2VzKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuaW5jbHVkZS9saW51eC92bXN0YXQuaC0yNzMtXFx0XFx0XFx0XFx0XFx0ICAgZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKTtcXG5pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oOjI3NDpleHRlcm4gdW5zaWduZWQgbG9uZyBub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuaW5jbHVkZS9saW51eC92bXN0YXQuaC0yNzUtXFx0XFx0XFx0XFx0XFx0ICAgICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbSk7XFxuaW5jbHVkZS9saW51eC92bXN0YXQuaD0yNzY9ZXh0ZXJuIHZvaWQgZm9sZF92bV9udW1hX2V2ZW50cyh2b2lkKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvdm1zdGF0LmgtMjgwLSNkZWZpbmUgbm9kZV9wYWdlX3N0YXRlX3BhZ2VzKG5vZGUsIGl0ZW0pIGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGVfcGFnZXMoaXRlbSlcXG5pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oOjI4MTojZGVmaW5lIG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMobm9kZSwgaXRlbSkgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMoaXRlbSlcXG5pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oLTI4Mi1zdGF0aWMgaW5saW5lIHZvaWQgZm9sZF92bV9udW1hX2V2ZW50cyh2b2lkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwMDowODowNS40NDIzMTgwMzdaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA2MTI5NDM5NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIExSVSBDb3N0IE1vZGVsIGFuZCBTdGF0aXN0aWNzIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgZmlyc3QgdGhpbmcgSSdtIHNlZWluZyBpcyBob3cgYGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCBpcyBjb25kaXRpb25hbC4gSXQncyBkZWZpbmVkIHdoZW4gYCFDT05GSUdfU01QYCwgbWVhbmluZyB0aGF0IHRvIHRlc3QgdGhlIG91dC1vZi1saW5lIHZlcnNpb24gd2l0aGluIGBtbS92bXN0YXQuY2AsIFNNUCAoU3ltbWV0cmljIE11bHRpcHJvY2Vzc2luZykgbmVlZHMgdG8gYmUgZW5hYmxlZC4gSG93ZXZlciwgU01QIGlzIGFsbW9zdCBhbHdheXMgZW5hYmxlZCB0aGVzZSBkYXlzLCBzbyB3aGV0aGVyIHdlIGV4cGxpY2l0bHkgbGlzdCBpdCBvciBub3QgaXMgZXNzZW50aWFsbHkgaXJyZWxldmFudCBmb3IgY292ZXJhZ2UuXG5cbk5vdywgbGV0J3MgZ2V0IGRvd24gdG8gdGhlIG1lYXQgb2YgdGhlIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBzdW1tYXJpemUgdGhlIGNvcmUgZnVuY3Rpb25zIGFmZmVjdGVkOiBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgLCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYGV2aWN0X2ZvbGlvc2AsIGBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWNgLCBgbm9kZV9wYWdlX3N0YXRlX21vbm90b25pY2AsIGFuZCBgd29ya2luZ3NldF9yZWZhdWx0YC4gVGhlc2UgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFuZCBjb3JlIGxvZ2ljIGltcGFjdGVkIGJ5IHRoZSBjaGFuZ2VzIHRvIHRoZSBMUlUgY29zdCBtb2RlbCBhbmQgc3RhdGlzdGljcy5cblxuSSBzaG91bGQgYWxzbyBjaGVjayBpZiBgc2hyaW5rX2ZvbGlvX2xpc3RgIHNob3VsZCBiZSBpbmNsdWRlZC4gSXQgbG9va3MgbGlrZSBpdCBvbmx5IGhhcyBhIG1pbm9yIG1vZGlmaWNhdGlvbiwganVzdCByZW1vdmluZyBhIGBzdGF0LVx1MDAzZW5yX3BhZ2VvdXQgKz0gbnJfcGFnZXM7YCBzdGF0ZW1lbnQuIFRoaXMgaXNuJ3QgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSwgc28gSSdtIG5vdCBpbW1lZGlhdGVseSBjb25jZXJuZWQuIE9uIHRoZSBvdGhlciBoYW5kLCB0aGUgYHBhZ2VvdXRgIGZ1bmN0aW9uICpkb2VzKiBpbnZvbHZlIGEgY2hhbmdlIGZyb20gYSBub2RlIHN0YXQgdG8gYW4gbHJ1dmVjIHN0YXQsIGFzIGluZGljYXRlZCBieSB0aGUgY2hhbmdlOlxuXG5gYGBjXG4tXHRub2RlX3N0YXRfYWRkX2ZvbGlvKGZvbGlvLCBOUl9WTVNDQU5fV1JJVEUpO1xuK1x0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9WTVNDQU5fV1JJVEUsIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG5gYGBcblxuU28gYHBhZ2VvdXRgIHByb2JhYmx5ICpzaG91bGQqIGJlIGNvbnNpZGVyZWQuXG5cbkxldCdzIGNoZWNrIGBscnVfcmVwYXJlbnRfbWVtY2dgLiBJdCdzIG9ubHkgcmVtb3ZpbmcgbGluZXM6XG5cbmBgYGNcbi1cdHBhcmVudF9scnV2ZWMtXHUwMDNlYW5vbl9jb3N0ICs9IGNoaWxkX2xydXZlYy1cdTAwM2Vhbm9uX2Nvc3Q7XG4tXHRwYXJlbnRfbHJ1dmVjLVx1MDAzZWZpbGVfY29zdCArPSBjaGlsZF9scnV2ZWMtXHUwMDNlZmlsZV9jb3N0O1xuYGBgXG5cblNpbWlsYXJseSwgYG1lbWNnMV9zdGF0X2Zvcm1hdGAgaXMganVzdCByZWFkaW5nIGZyb20gYSBuZXcgc3RydWN0OlxuXG5gYGBjXG4tXHRcdFx0YW5vbl9jb3N0ICs9IG16LVx1MDAzZWxydXZlYy5hbm9uX2Nvc3Q7XG4tXHRcdFx0ZmlsZV9jb3N0ICs9IG16LVx1MDAzZWxydXZlYy5maWxlX2Nvc3Q7XG4rXHRcdFx0YW5vbl9jb3N0ICs9IG16LVx1MDAzZWxydXZlYy5jb3N0W1dPUktJTkdTRVRfQU5PTl0uY291bnQ7XG4rXHRcdFx0ZmlsZV9jb3N0ICs9IG16LVx1MDAzZWxydXZlYy5jb3N0W1dPUktJTkdTRVRfRklMRV0uY291bnQ7XG5gYGBcblxuU28gdGhlIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgZm9jdXNlZCBpbjogYHByZXBhcmVfc2Nhbl9jb250cm9sYCwgYHNocmlua19pbmFjdGl2ZV9saXN0YCwgYHNocmlua19hY3RpdmVfbGlzdGAsIGBldmljdF9mb2xpb3NgLCBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCwgYG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWNgLCBgd29ya2luZ3NldF9yZWZhdWx0YCwgYW5kIGBwYWdlb3V0YC4gSSdtIHVwZGF0aW5nIG15IGluaXRpYWwgbGlzdCB0byByZWZsZWN0IHRoaXMgYW5hbHlzaXM6XG5cbmBgYGpzb25cbltcbiAgXCJwcmVwYXJlX3NjYW5fY29udHJvbFwiLFxuICBcInNocmlua19pbmFjdGl2ZV9saXN0XCIsXG4gIFwic2hyaW5rX2FjdGl2ZV9saXN0XCIsXG4gIFwiZXZpY3RfZm9saW9zXCIsXG4gIFwibHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljXCIsXG4gIFwibm9kZV9wYWdlX3N0YXRlX21vbm90b25pY1wiLFxuICBcIndvcmtpbmdzZXRfcmVmYXVsdFwiLFxuICBcInBhZ2VvdXRcIlxuXVxuYGBgXG5cbkZpbmFsbHksIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGhlcmUgc2hvdWxkIGluY2x1ZGUgYE1FTUNHYCwgYExSVV9HRU5gLCBhbmQgYExSVV9HRU5fRU5BQkxFRGAuIFRoZXNlIHNob3VsZCBiZSB0aGUgbWluaW1hbCBuZWNlc3NhcnkgZm9yIGZ1enppbmcuXG5cbmBgYGpzb25cbltcbiAgXCJNRU1DR1wiLFxuICBcIkxSVV9HRU5cIixcbiAgXCJMUlVfR0VOX0VOQUJMRURcIlxuXVxuYGBgXG5cbkluIHN1bW1hcnksIHRoaXMgcGF0Y2ggcHJvZm91bmRseSBhbHRlcnMgdGhlIExSVSBjb3N0IG1vZGVsIGFuZCBzdGF0aXN0aWNzIHRyYWNraW5nIHdpdGhpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudC4gSXQgaW50cm9kdWNlcyBtb25vdG9uaWMgcGFnZSBzdGF0ZSB0cmFja2luZyBmb3IgYm90aCBMUlUgdmVjdG9ycyBhbmQgbm9kZXMsIGFuZCBjaGFuZ2VzIGhvdyBgYW5vbl9jb3N0YCBhbmQgYGZpbGVfY29zdGAgYXJlIGNvbXB1dGVkIGR1cmluZyBtZW1vcnkgcmVjbGFpbS4gSXQgYWxzbyBtb2RpZmllcyBib3RoIHRyYWRpdGlvbmFsIExSVSBhbmQgTXVsdGktR2VuIExSVSAoTUdMUlUpIHJlY2xhaW0gcGF0aHMgdG8gdXNlIHRoZSB1cGRhdGVkIGNvc3QgbW9kZWwgYW5kIHN0YXRpc3RpY3MuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgd2hpY2ggY292ZXIgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBuZWVkIHRvIGJlIGZ1enplZC4gSSd2ZSBkb3VibGUgY2hlY2tlZCB0aGF0IHRoZSBjb25maWcgbmFtZXMgKGBMUlVfR0VOYCwgYExSVV9HRU5fRU5BQkxFRGAgYW5kIGBNRU1DR2ApIGFyZSBjb3JyZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTA5MiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwMDowODoxNi4wNTUyNjc0MjRaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxODgxNTE4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNQ0dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDYzPWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xcbi0tXFxuaW5pdC9LY29uZmlnLTEwNzItXFxuaW5pdC9LY29uZmlnOjEwNzM6Y29uZmlnIE1FTUNHXFxuaW5pdC9LY29uZmlnLTEwNzQtXFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5pbml0L0tjb25maWctMTA4MS1cXG5pbml0L0tjb25maWc6MTA4Mjpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbmluaXQvS2NvbmZpZy0xMDgzLVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDg4LVxcbmluaXQvS2NvbmZpZzoxMDg5OmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluaXQvS2NvbmZpZy0xMDkwLVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDk1LVxcbmluaXQvS2NvbmZpZzoxMDk2OmNvbmZpZyBNRU1DR19WMVxcbmluaXQvS2NvbmZpZy0xMDk3LVxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA4OjE2LjM3NDA5Mjg5OFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzAyMjA0NDExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIENvZGUqKlxuXG5ZZXMsIHRoYXQncyBpdCEgTG9va2luZyBiYWNrLCBgTUVNQ0dgIGlzIGRlZmluaXRlbHkgdGhlIGNvcnJlY3QgY29tcG9uZW50IHRvIGJlIGZvY3VzaW5nIG9uLiBUaGF0J3MgdGhlIGtleS4gTm93IHRoYXQgSSd2ZSBlc3RhYmxpc2hlZCB0aGF0LCBsZXQncyBtb3ZlIGZvcndhcmQgYW5kIGNhbGwgYHNldC1yZXN1bHRzYC4gSXQncyB0aGUgbG9naWNhbCBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMTYzLCJPdXRwdXRUb2tlbnMiOjIxNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA4OjE5LjY3NjMwMjMzOVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNzY5NzEyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInByZXBhcmVfc2Nhbl9jb250cm9sXCIsXG4gICAgXCJzaHJpbmtfaW5hY3RpdmVfbGlzdFwiLFxuICAgIFwic2hyaW5rX2FjdGl2ZV9saXN0XCIsXG4gICAgXCJldmljdF9mb2xpb3NcIixcbiAgICBcImxydXZlY19wYWdlX3N0YXRlX21vbm90b25pY1wiLFxuICAgIFwibm9kZV9wYWdlX3N0YXRlX21vbm90b25pY1wiLFxuICAgIFwid29ya2luZ3NldF9yZWZhdWx0XCIsXG4gICAgXCJwYWdlb3V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIExSVSBjb3N0IG1vZGVsIGFuZCBzdGF0aXN0aWNzIHRyYWNraW5nIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gSXQgaW50cm9kdWNlcyBtb25vdG9uaWMgcGFnZSBzdGF0ZSB0cmFja2luZyBmb3IgTFJVIHZlY3RvcnMgYW5kIG5vZGVzLCBhbmQgdXBkYXRlcyBob3cgYGFub25fY29zdGAgYW5kIGBmaWxlX2Nvc3RgIGFyZSBjYWxjdWxhdGVkIGR1cmluZyBtZW1vcnkgcmVjbGFpbS4gSXQgYWxzbyBtb2RpZmllcyBib3RoIHRoZSB0cmFkaXRpb25hbCBMUlUgYW5kIE11bHRpLUdlbiBMUlUgKE1HTFJVKSByZWNsYWltIHBhdGhzIHRvIHVzZSB0aGUgbmV3IGNvc3QgbW9kZWwgYW5kIHN0YXRpc3RpY3MuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHJlcGFyZV9zY2FuX2NvbnRyb2xcIixcbiAgICBcInNocmlua19pbmFjdGl2ZV9saXN0XCIsXG4gICAgXCJzaHJpbmtfYWN0aXZlX2xpc3RcIixcbiAgICBcImV2aWN0X2ZvbGlvc1wiLFxuICAgIFwibHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljXCIsXG4gICAgXCJub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljXCIsXG4gICAgXCJ3b3JraW5nc2V0X3JlZmF1bHRcIixcbiAgICBcInBhZ2VvdXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTFJVIGNvc3QgbW9kZWwgYW5kIHN0YXRpc3RpY3MgdHJhY2tpbmcgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJdCBpbnRyb2R1Y2VzIG1vbm90b25pYyBwYWdlIHN0YXRlIHRyYWNraW5nIGZvciBMUlUgdmVjdG9ycyBhbmQgbm9kZXMsIGFuZCB1cGRhdGVzIGhvdyBgYW5vbl9jb3N0YCBhbmQgYGZpbGVfY29zdGAgYXJlIGNhbGN1bGF0ZWQgZHVyaW5nIG1lbW9yeSByZWNsYWltLiBJdCBhbHNvIG1vZGlmaWVzIGJvdGggdGhlIHRyYWRpdGlvbmFsIExSVSBhbmQgTXVsdGktR2VuIExSVSAoTUdMUlUpIHJlY2xhaW0gcGF0aHMgdG8gdXNlIHRoZSBuZXcgY29zdCBtb2RlbCBhbmQgc3RhdGlzdGljcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4j2wn[1] Phase: Succeeded StartedAt: 2026-07-21 00:08:32 +0000 UTC FinishedAt: 2026-07-21 00:08:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4j2wn[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-21 00:08:32 +0000 UTC FinishedAt: 2026-07-21 00:08:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4j2wn[2] Phase: Succeeded StartedAt: 2026-07-21 00:08:32 +0000 UTC FinishedAt: 2026-07-21 04:30:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4j2wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","evict_folios","lruvec_page_state_monotonic","node_page_state_monotonic","workingset_refault","pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"026d81ec-4fb6-4448-8a9f-d50e7df373d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-21 00:08:32 +0000 UTC FinishedAt: 2026-07-21 04:30:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","evict_folios","lruvec_page_state_monotonic","node_page_state_monotonic","workingset_refault","pageout"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"026d81ec-4fb6-4448-8a9f-d50e7df373d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow4j2wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","evict_folios","lruvec_page_state_monotonic","node_page_state_monotonic","workingset_refault","pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"026d81ec-4fb6-4448-8a9f-d50e7df373d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-21 00:08:32 +0000 UTC FinishedAt: 2026-07-21 00:09:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4j2wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","evict_folios","lruvec_page_state_monotonic","node_page_state_monotonic","workingset_refault","pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"026d81ec-4fb6-4448-8a9f-d50e7df373d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-21 00:08:32 +0000 UTC FinishedAt: 2026-07-21 00:09:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4j2wn/series-workflow4j2wn-convert-artifact-2886180915/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4j2wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","evict_folios","lruvec_page_state_monotonic","node_page_state_monotonic","workingset_refault","pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"026d81ec-4fb6-4448-8a9f-d50e7df373d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-21 00:09:15 +0000 UTC FinishedAt: 2026-07-21 00:44:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4j2wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","evict_folios","lruvec_page_state_monotonic","node_page_state_monotonic","workingset_refault","pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"026d81ec-4fb6-4448-8a9f-d50e7df373d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-21 00:09:15 +0000 UTC FinishedAt: 2026-07-21 00:44:40 +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:*ae365145-4cbb-4f0f-8eb2-d6653b08af73,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-workflow4j2wn/series-workflow4j2wn-convert-artifact-2886180915/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": "ff5ac2a5-b487-4a21-85dd-7209874b82ca", "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-workflow4j2wn/series-workflow4j2wn-build-action-1735248609/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4j2wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","evict_folios","lruvec_page_state_monotonic","node_page_state_monotonic","workingset_refault","pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"026d81ec-4fb6-4448-8a9f-d50e7df373d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-21 00:09:15 +0000 UTC FinishedAt: 2026-07-21 00:44:30 +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:*ae365145-4cbb-4f0f-8eb2-d6653b08af73,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-workflow4j2wn/series-workflow4j2wn-convert-artifact-2886180915/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": "ff5ac2a5-b487-4a21-85dd-7209874b82ca", "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-workflow4j2wn/series-workflow4j2wn-build-action-1735248609/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4j2wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","evict_folios","lruvec_page_state_monotonic","node_page_state_monotonic","workingset_refault","pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"026d81ec-4fb6-4448-8a9f-d50e7df373d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-21 00:44:40 +0000 UTC FinishedAt: 2026-07-21 00:44:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4j2wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","evict_folios","lruvec_page_state_monotonic","node_page_state_monotonic","workingset_refault","pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"026d81ec-4fb6-4448-8a9f-d50e7df373d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-21 00:44:40 +0000 UTC FinishedAt: 2026-07-21 00:44:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4j2wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","evict_folios","lruvec_page_state_monotonic","node_page_state_monotonic","workingset_refault","pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"026d81ec-4fb6-4448-8a9f-d50e7df373d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-21 00:44:40 +0000 UTC FinishedAt: 2026-07-21 00:45:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4j2wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","evict_folios","lruvec_page_state_monotonic","node_page_state_monotonic","workingset_refault","pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"026d81ec-4fb6-4448-8a9f-d50e7df373d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-21 00:44:40 +0000 UTC FinishedAt: 2026-07-21 00:44:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"026d81ec-4fb6-4448-8a9f-d50e7df373d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4j2wn/series-workflow4j2wn-convert-artifact-772796714/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4j2wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","evict_folios","lruvec_page_state_monotonic","node_page_state_monotonic","workingset_refault","pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"026d81ec-4fb6-4448-8a9f-d50e7df373d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-21 00:45:01 +0000 UTC FinishedAt: 2026-07-21 00:47:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4j2wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","evict_folios","lruvec_page_state_monotonic","node_page_state_monotonic","workingset_refault","pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"026d81ec-4fb6-4448-8a9f-d50e7df373d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-21 00:45:01 +0000 UTC FinishedAt: 2026-07-21 00:46:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ff5ac2a5-b487-4a21-85dd-7209874b82ca,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-workflow4j2wn/series-workflow4j2wn-build-action-1735248609/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-workflow4j2wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","evict_folios","lruvec_page_state_monotonic","node_page_state_monotonic","workingset_refault","pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"026d81ec-4fb6-4448-8a9f-d50e7df373d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-21 00:47:09 +0000 UTC FinishedAt: 2026-07-21 00:47:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4j2wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","evict_folios","lruvec_page_state_monotonic","node_page_state_monotonic","workingset_refault","pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"026d81ec-4fb6-4448-8a9f-d50e7df373d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-21 00:47:09 +0000 UTC FinishedAt: 2026-07-21 00:47:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4j2wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","evict_folios","lruvec_page_state_monotonic","node_page_state_monotonic","workingset_refault","pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"026d81ec-4fb6-4448-8a9f-d50e7df373d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-21 00:47:09 +0000 UTC FinishedAt: 2026-07-21 01:25:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4j2wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","evict_folios","lruvec_page_state_monotonic","node_page_state_monotonic","workingset_refault","pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"026d81ec-4fb6-4448-8a9f-d50e7df373d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-21 00:47:09 +0000 UTC FinishedAt: 2026-07-21 01:25:22 +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:*ae365145-4cbb-4f0f-8eb2-d6653b08af73,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-workflow4j2wn/series-workflow4j2wn-convert-artifact-772796714/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": "583ff9ce-035b-4720-bd02-1b6c85a75ca5", "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-workflow4j2wn/series-workflow4j2wn-build-action-3088386126/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4j2wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","evict_folios","lruvec_page_state_monotonic","node_page_state_monotonic","workingset_refault","pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"026d81ec-4fb6-4448-8a9f-d50e7df373d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-21 00:47:10 +0000 UTC FinishedAt: 2026-07-21 01:25:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*ae365145-4cbb-4f0f-8eb2-d6653b08af73,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-workflow4j2wn/series-workflow4j2wn-convert-artifact-772796714/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": "583ff9ce-035b-4720-bd02-1b6c85a75ca5", "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-workflow4j2wn/series-workflow4j2wn-build-action-3088386126/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4j2wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","evict_folios","lruvec_page_state_monotonic","node_page_state_monotonic","workingset_refault","pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"026d81ec-4fb6-4448-8a9f-d50e7df373d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-21 01:25:22 +0000 UTC FinishedAt: 2026-07-21 01:25:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4j2wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","evict_folios","lruvec_page_state_monotonic","node_page_state_monotonic","workingset_refault","pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"026d81ec-4fb6-4448-8a9f-d50e7df373d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-21 01:25:22 +0000 UTC FinishedAt: 2026-07-21 01:25:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4j2wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","evict_folios","lruvec_page_state_monotonic","node_page_state_monotonic","workingset_refault","pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"026d81ec-4fb6-4448-8a9f-d50e7df373d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-21 01:25:22 +0000 UTC FinishedAt: 2026-07-21 01:27:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4j2wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","evict_folios","lruvec_page_state_monotonic","node_page_state_monotonic","workingset_refault","pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"026d81ec-4fb6-4448-8a9f-d50e7df373d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-21 01:25:22 +0000 UTC FinishedAt: 2026-07-21 01:27:10 +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:*583ff9ce-035b-4720-bd02-1b6c85a75ca5,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-workflow4j2wn/series-workflow4j2wn-build-action-3088386126/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-workflow4j2wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","evict_folios","lruvec_page_state_monotonic","node_page_state_monotonic","workingset_refault","pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"026d81ec-4fb6-4448-8a9f-d50e7df373d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-21 01:27:20 +0000 UTC FinishedAt: 2026-07-21 04:30:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4j2wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","evict_folios","lruvec_page_state_monotonic","node_page_state_monotonic","workingset_refault","pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"026d81ec-4fb6-4448-8a9f-d50e7df373d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-21 01:27:20 +0000 UTC FinishedAt: 2026-07-21 04:30:21 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","evict_folios","lruvec_page_state_monotonic","node_page_state_monotonic","workingset_refault","pageout"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*ff5ac2a5-b487-4a21-85dd-7209874b82ca,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*583ff9ce-035b-4720-bd02-1b6c85a75ca5,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-workflow4j2wn/series-workflow4j2wn-build-action-1735248609/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-workflow4j2wn/series-workflow4j2wn-build-action-3088386126/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow4j2wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","evict_folios","lruvec_page_state_monotonic","node_page_state_monotonic","workingset_refault","pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"026d81ec-4fb6-4448-8a9f-d50e7df373d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-21 01:27:20 +0000 UTC FinishedAt: 2026-07-21 01:27:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4j2wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","evict_folios","lruvec_page_state_monotonic","node_page_state_monotonic","workingset_refault","pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"026d81ec-4fb6-4448-8a9f-d50e7df373d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-21 01:27:20 +0000 UTC FinishedAt: 2026-07-21 01:27:25 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","evict_folios","lruvec_page_state_monotonic","node_page_state_monotonic","workingset_refault","pageout"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4j2wn/series-workflow4j2wn-convert-artifact-193113535/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4j2wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","evict_folios","lruvec_page_state_monotonic","node_page_state_monotonic","workingset_refault","pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"026d81ec-4fb6-4448-8a9f-d50e7df373d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-21 01:27:20 +0000 UTC FinishedAt: 2026-07-21 01:27:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4j2wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","evict_folios","lruvec_page_state_monotonic","node_page_state_monotonic","workingset_refault","pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"026d81ec-4fb6-4448-8a9f-d50e7df373d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-21 01:27:20 +0000 UTC FinishedAt: 2026-07-21 01:27:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4j2wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","evict_folios","lruvec_page_state_monotonic","node_page_state_monotonic","workingset_refault","pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"026d81ec-4fb6-4448-8a9f-d50e7df373d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-21 01:27:20 +0000 UTC FinishedAt: 2026-07-21 01:27:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4j2wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","evict_folios","lruvec_page_state_monotonic","node_page_state_monotonic","workingset_refault","pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"026d81ec-4fb6-4448-8a9f-d50e7df373d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-21 01:27:31 +0000 UTC FinishedAt: 2026-07-21 04:30:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4j2wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","evict_folios","lruvec_page_state_monotonic","node_page_state_monotonic","workingset_refault","pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"026d81ec-4fb6-4448-8a9f-d50e7df373d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-21 01:27:31 +0000 UTC FinishedAt: 2026-07-21 04:30:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ff5ac2a5-b487-4a21-85dd-7209874b82ca,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*583ff9ce-035b-4720-bd02-1b6c85a75ca5,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-workflow4j2wn/series-workflow4j2wn-build-action-1735248609/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-workflow4j2wn/series-workflow4j2wn-build-action-3088386126/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-workflow4j2wn/series-workflow4j2wn-convert-artifact-193113535/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,}