Name: series-workflowr4kvc Phase: Succeeded StartedAt: 2026-08-13 09:26:03 +0000 UTC FinishedAt: 2026-08-13 13:30:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4kvc[0] Phase: Succeeded StartedAt: 2026-08-13 09:26:03 +0000 UTC FinishedAt: 2026-08-13 09:48:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4kvc[0].run-triage Phase: Succeeded StartedAt: 2026-08-13 09:26:03 +0000 UTC FinishedAt: 2026-08-13 09:48: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": "3d6d817622b0a9721e3cc404df3469171582be13", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "MAC80211", "MAC80211_HWSIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "3d6d817622b0a9721e3cc404df3469171582be13", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "MAC80211", "MAC80211_HWSIM" ], "series_id": "256a0130-8f99-4e7d-8116-32518d856b6f" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nl80211_new_station" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmw4MDIxMV9uZXdfc3RhdGlvbiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB2dWxuZXJhYmlsaXR5IGluIGBubDgwMjExX25ld19zdGF0aW9uKClgLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgYGxpbmtfaWRgIGV4dHJhY3RlZCBmcm9tIG5ldGxpbmsgYXR0cmlidXRlcyB3YXMgbm90IHZhbGlkYXRlZCBhZ2FpbnN0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBsaW5rcyBvciBjaGVja2VkIGZvciBuZWdhdGl2ZSB2YWx1ZXMgYmVmb3JlIGJlaW5nIHVzZWQgYXMgYW4gaW5kZXggdG8gYWNjZXNzIHRoZSBgd2Rldi1cdTAwM2VsaW5rc1tsaW5rX2lkXWAgYXJyYXkuIFRoaXMgYWxsb3dlZCBhbiBhdHRhY2tlciB0byB0cmlnZ2VyIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB3aGVuIGNoZWNraW5nIGB3ZGV2LVx1MDAzZWxpbmtzW2xpbmtfaWRdLmFwLmJlYWNvbl9pbnRlcnZhbGAuXG5cbk91dC1vZi1ib3VuZHMgYWNjZXNzZXMgKGJvdGggcmVhZHMgYW5kIHdyaXRlcykgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgYHBhcmFtc2Agc3RydWN0dXJlIGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgdmlhIGBtZW1zZXQoXHUwMDI2cGFyYW1zLCAwLCBzaXplb2YocGFyYW1zKSk7YCwgYW5kIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZXMgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBpbnZvbHZlZCBpbiB0aGlzIGJ1Zy4gU2luY2UgS0FTQU4gaXMgZnVsbHkgY2FwYWJsZSBvZiBjYXRjaGluZyB0aGlzIG91dC1vZi1ib3VuZHMgcmVhZCwgdGhlcmUgaXMgbm8gbmVlZCB0byBydW4gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0bGluayBjYWxsYmFjayBgbmw4MDIxMV9uZXdfc3RhdGlvbmAgaW4gY2ZnODAyMTEsIGNoYW5naW5nIHRoZSB2YWxpZGF0aW9uIGxvZ2ljIGZvciBgbGlua19pZGAgYW5kIGFkZGluZyBhIGNoZWNrIGZvciBgYmVhY29uX2ludGVydmFsYCB3aGVuIGFkZGluZyBhIG5ldyBzdGF0aW9uIHRvIGFuIEFQIG9yIFAyUF9HTyBpbnRlcmZhY2UuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgd2lyZWxlc3MgbG9naWMgdGhhdCBjYW4gYmUgdGVzdGVkIHVzaW5nIHRoZSBtYWM4MDIxMV9od3NpbSBkcml2ZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6NDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwMTA5ZjBlZmFlN2FmZTFiOTc0NjZmNjQzNjQzYWIxNjBhMzcxYzcyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMDk6NDY6NTEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmNcbmluZGV4IDVhZGNiNmJkMGZjNTYuLjc1YmJkNzhmOTFiYTMgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG5AQCAtOTE3NCw3ICYjNDM7OTE3NCw3IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfc3RhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIHN0YXRpYyBpbnQgbmw4MDIxMV9uZXdfc3RhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IGluZm8tXHUwMDNldXNlcl9wdHJbMF07XG4tXHRpbnQgZXJyO1xuJiM0MztcdGludCBlcnIsIGxpbmtfaWQ7XG4gXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clsxXTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB3ZGV2LVx1MDAzZW5ldGRldjtcbiBcdHN0cnVjdCBzdGF0aW9uX3BhcmFtZXRlcnMgcGFyYW1zO1xuQEAgLTkyMjIsNiAmIzQzOzkyMjIsMTYgQEAgc3RhdGljIGludCBubDgwMjExX25ld19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWQgPVxuIFx0XHRubDgwMjExX2xpbmtfaWRfb3JfaW52YWxpZChpbmZvLVx1MDAzZWF0dHJzKTtcbiBcbiYjNDM7XHRpZiAod2Rldi1cdTAwM2V2YWxpZF9saW5rcykge1xuJiM0MztcdFx0aWYgKHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19pZCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRpZiAoISh3ZGV2LVx1MDAzZXZhbGlkX2xpbmtzIFx1MDAyNiBCSVQocGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkKSkpXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PTElOSztcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0aWYgKHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19pZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUxEX0FERFJdKSB7XG4gXHRcdG1hY19hZGRyID0gbmxhX2RhdGEoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUxEX0FERFJdKTtcbiBcdFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5tbGRfbWFjID0gbWFjX2FkZHI7XG5AQCAtOTQwMiw4ICYjNDM7OTQxMiwxMiBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcbiBcdHN3aXRjaCAod2Rldi1cdTAwM2VpZnR5cGUpIHtcbiBcdGNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6XG4tXHRjYXNlIE5MODAyMTFfSUZUWVBFX0FQX1ZMQU46XG4gXHRjYXNlIE5MODAyMTFfSUZUWVBFX1AyUF9HTzpcbiYjNDM7XHRcdC8qIEFkZCBhIG5ldyBzdGF0aW9uIG9ubHkgYWZ0ZXIgdGhlIEFQIGFuZCBsaW5rIGhhcyBiZWVuIHN0YXJ0ZWQgKi9cbiYjNDM7XHRcdGxpbmtfaWQgPSB3ZGV2LVx1MDAzZXZhbGlkX2xpbmtzID8gcGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkIDogMDtcbiYjNDM7XHRcdGlmICghd2Rldi1cdTAwM2VsaW5rc1tsaW5rX2lkXS5hcC5iZWFjb25faW50ZXJ2YWwpXG4mIzQzO1x0XHRcdHJldHVybiAtRU5FVERPV047XG4mIzQzO1xuIFx0XHQvKiBpZ25vcmUgV01FIGF0dHJpYnV0ZXMgaWYgaWZhY2Uvc3RhIGlzIG5vdCBjYXBhYmxlICovXG4gXHRcdGlmICghKHJkZXYtXHUwMDNld2lwaHkuZmxhZ3MgXHUwMDI2IFdJUEhZX0ZMQUdfQVBfVUFQU0QpIHx8XG4gXHRcdCAgICAhKHBhcmFtcy5zdGFfZmxhZ3Nfc2V0IFx1MDAyNiBCSVQoTkw4MDIxMV9TVEFfRkxBR19XTUUpKSlcbkBAIC05NDk1LDI3ICYjNDM7OTUwOSwxMCBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcbiBcdC8qIGJlIGF3YXJlIG9mIHBhcmFtcy52bGFuIHdoZW4gY2hhbmdpbmcgY29kZSBoZXJlICovXG4gXG4tXHRpZiAod2Rldi1cdTAwM2V2YWxpZF9saW5rcykge1xuLVx0XHRpZiAocGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkIFx1MDAzYyAwKSB7XG4tXHRcdFx0ZXJyID0gLUVJTlZBTDtcbi1cdFx0XHRnb3RvIG91dDtcbi1cdFx0fVxuLVx0XHRpZiAoISh3ZGV2LVx1MDAzZXZhbGlkX2xpbmtzIFx1MDAyNiBCSVQocGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkKSkpIHtcbi1cdFx0XHRlcnIgPSAtRU5PTElOSztcbi1cdFx0XHRnb3RvIG91dDtcbi1cdFx0fVxuLVx0fSBlbHNlIHtcbi1cdFx0aWYgKHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19pZCBcdTAwM2U9IDApIHtcbi1cdFx0XHRlcnIgPSAtRUlOVkFMO1xuLVx0XHRcdGdvdG8gb3V0O1xuLVx0XHR9XG4tXHR9XG4tXG4gXHRwYXJhbXMuZXBwX3BlZXIgPVxuIFx0XHRubGFfZ2V0X2ZsYWcoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfRVBQX1BFRVJdKTtcbiBcbiBcdGVyciA9IHJkZXZfYWRkX3N0YXRpb24ocmRldiwgd2RldiwgbWFjX2FkZHIsIFx1MDAyNnBhcmFtcyk7XG4tb3V0OlxuIFx0ZGV2X3B1dChwYXJhbXMudmxhbik7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTo0NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtubDgwMjExX25ld19zdGF0aW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRsaW5rIGNhbGxiYWNrIGBubDgwMjExX25ld19zdGF0aW9uYCBpbiBjZmc4MDIxMSwgY2hhbmdpbmcgdGhlIHZhbGlkYXRpb24gbG9naWMgZm9yIGBsaW5rX2lkYCBhbmQgYWRkaW5nIGEgY2hlY2sgZm9yIGBiZWFjb25faW50ZXJ2YWxgIHdoZW4gYWRkaW5nIGEgbmV3IHN0YXRpb24gdG8gYW4gQVAgb3IgUDJQX0dPIGludGVyZmFjZS4gVGhpcyBpcyByZWFjaGFibGUgY29yZSB3aXJlbGVzcyBsb2dpYyB0aGF0IGNhbiBiZSB0ZXN0ZWQgdXNpbmcgdGhlIG1hYzgwMjExX2h3c2ltIGRyaXZlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDAxMDlmMGVmYWU3YWZlMWI5NzQ2NmY2NDM2NDNhYjE2MGEzNzFjNzIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAwOTo0Njo1MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCmluZGV4IDVhZGNiNmJkMGZjNTYuLjc1YmJkNzhmOTFiYTMgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL25sODAyMTEuYwpAQCAtOTE3NCw3ICYjNDM7OTE3NCw3IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfc3RhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogc3RhdGljIGludCBubDgwMjExX25ld19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby0mZ3Q7dXNlcl9wdHJbMF07Ci0JaW50IGVycjsKJiM0MzsJaW50IGVyciwgbGlua19pZDsKIAlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gaW5mby0mZ3Q7dXNlcl9wdHJbMV07CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHdkZXYtJmd0O25ldGRldjsKIAlzdHJ1Y3Qgc3RhdGlvbl9wYXJhbWV0ZXJzIHBhcmFtczsKQEAgLTkyMjIsNiAmIzQzOzkyMjIsMTYgQEAgc3RhdGljIGludCBubDgwMjExX25ld19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJcGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkID0KIAkJbmw4MDIxMV9saW5rX2lkX29yX2ludmFsaWQoaW5mby0mZ3Q7YXR0cnMpOwogCiYjNDM7CWlmICh3ZGV2LSZndDt2YWxpZF9saW5rcykgewomIzQzOwkJaWYgKHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19pZCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQlpZiAoISh3ZGV2LSZndDt2YWxpZF9saW5rcyAmYW1wOyBCSVQocGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkKSkpCiYjNDM7CQkJcmV0dXJuIC1FTk9MSU5LOwomIzQzOwl9IGVsc2UgewomIzQzOwkJaWYgKHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19pZCAmZ3Q7PSAwKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiAJaWYgKGluZm8tJmd0O2F0dHJzW05MODAyMTFfQVRUUl9NTERfQUREUl0pIHsKIAkJbWFjX2FkZHIgPSBubGFfZGF0YShpbmZvLSZndDthdHRyc1tOTDgwMjExX0FUVFJfTUxEX0FERFJdKTsKIAkJcGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5tbGRfbWFjID0gbWFjX2FkZHI7CkBAIC05NDAyLDggJiM0Mzs5NDEyLDEyIEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9uZXdfc3RhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCiAJc3dpdGNoICh3ZGV2LSZndDtpZnR5cGUpIHsKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgotCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVBfVkxBTjoKIAljYXNlIE5MODAyMTFfSUZUWVBFX1AyUF9HTzoKJiM0MzsJCS8qIEFkZCBhIG5ldyBzdGF0aW9uIG9ubHkgYWZ0ZXIgdGhlIEFQIGFuZCBsaW5rIGhhcyBiZWVuIHN0YXJ0ZWQgKi8KJiM0MzsJCWxpbmtfaWQgPSB3ZGV2LSZndDt2YWxpZF9saW5rcyA/IHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19pZCA6IDA7CiYjNDM7CQlpZiAoIXdkZXYtJmd0O2xpbmtzW2xpbmtfaWRdLmFwLmJlYWNvbl9pbnRlcnZhbCkKJiM0MzsJCQlyZXR1cm4gLUVORVRET1dOOwomIzQzOwogCQkvKiBpZ25vcmUgV01FIGF0dHJpYnV0ZXMgaWYgaWZhY2Uvc3RhIGlzIG5vdCBjYXBhYmxlICovCiAJCWlmICghKHJkZXYtJmd0O3dpcGh5LmZsYWdzICZhbXA7IFdJUEhZX0ZMQUdfQVBfVUFQU0QpIHx8CiAJCSAgICAhKHBhcmFtcy5zdGFfZmxhZ3Nfc2V0ICZhbXA7IEJJVChOTDgwMjExX1NUQV9GTEFHX1dNRSkpKQpAQCAtOTQ5NSwyNyAmIzQzOzk1MDksMTAgQEAgc3RhdGljIGludCBubDgwMjExX25ld19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAKIAkvKiBiZSBhd2FyZSBvZiBwYXJhbXMudmxhbiB3aGVuIGNoYW5naW5nIGNvZGUgaGVyZSAqLwogCi0JaWYgKHdkZXYtJmd0O3ZhbGlkX2xpbmtzKSB7Ci0JCWlmIChwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWQgJmx0OyAwKSB7Ci0JCQllcnIgPSAtRUlOVkFMOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJaWYgKCEod2Rldi0mZ3Q7dmFsaWRfbGlua3MgJmFtcDsgQklUKHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19pZCkpKSB7Ci0JCQllcnIgPSAtRU5PTElOSzsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19pZCAmZ3Q7PSAwKSB7Ci0JCQllcnIgPSAtRUlOVkFMOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9Ci0KIAlwYXJhbXMuZXBwX3BlZXIgPQogCQlubGFfZ2V0X2ZsYWcoaW5mby0mZ3Q7YXR0cnNbTkw4MDIxMV9BVFRSX0VQUF9QRUVSXSk7CiAKIAllcnIgPSByZGV2X2FkZF9zdGF0aW9uKHJkZXYsIHdkZXYsIG1hY19hZGRyLCAmYW1wO3BhcmFtcyk7Ci1vdXQ6CiAJZGV2X3B1dChwYXJhbXMudmxhbik7CiAJcmV0dXJuIGVycjsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg4OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDUxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBgbmV0L3dpcmVsZXNzL25sODAyMTEuY2AgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyB0d2Vha2luZyB0aGUgYG5sODAyMTFfbmV3X3N0YXRpb25gIGZ1bmN0aW9uIGluIGBuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhYm91dCBtb3Zpbmcgc29tZSB2YWxpZGF0aW9uIGxvZ2ljIGVhcmxpZXIgaW4gdGhlIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIGB3ZGV2LSZndDt2YWxpZF9saW5rc2AgYW5kIGBwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWRgLiBNYWtlcyBzZW5zZSwgb3B0aW1pemluZyB0aGUgZmxvdywgcG90ZW50aWFsbHkgY2F0Y2hpbmcgZXJyb3JzIHNvb25lci4KCk5vdywgdGhlIGludGVyZXN0aW5nIGJpdC4gSXQgYWRkcyBhIGNoZWNrIGZvciBgd2Rldi0mZ3Q7bGlua3NbbGlua19pZF0uYXAuYmVhY29uX2ludGVydmFsYCB3aXRoaW4gdGhlIGBOTDgwMjExX0lGVFlQRV9BUGAgYW5kIGBOTDgwMjExX0lGVFlQRV9QMlBfR09gIGNhc2VzLiBBaCwgYnV0IHRoZXJlJiMzOTtzIGEgcmVtb3ZhbCBpbiBoZXJlIHRvby4uLiBpdCBhcHBlYXJzIHRoZXkmIzM5O3ZlIHJlbW92ZWQgYE5MODAyMTFfSUZUWVBFX0FQX1ZMQU5gIGZyb20gdGhlIHN3aXRjaCBzdGF0ZW1lbnQuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZGlmZiB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIFllcCwgaXQgcmVtb3ZlcyBgTkw4MDIxMV9JRlRZUEVfQVBfVkxBTmAgZnJvbSB0aGUgc3dpdGNoIGNhc2UuCgpUaGlzIGlzIGEgZ29vZCBzcG90IHRvIGV2YWx1YXRlIHRoaXMsIGJlY2F1c2UgaXQmIzM5O3MgYSBuZXRsaW5rIEFQSSBlbnRyeXBvaW50LCB3aGljaCBtZWFucyBpdCYjMzk7cyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IGNhbiBiZSB0ZXN0ZWQgYW5kIGV4ZXJjaXNlZCB1c2luZyBzb21ldGhpbmcgbGlrZSBtYWM4MDIxMV9od3NpbSwgbm8gcXVlc3Rpb24uIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGUgY29uZmlnIG9wdGlvbnMgZm9yIGBubDgwMjExLmNgLCBiZWNhdXNlIGl0JiMzOTtzIHBhcnQgb2YgYGNmZzgwMjExYC4gU28gdGhhdCBtZWFucyBgQ09ORklHX0NGRzgwMjExYCwgYENPTkZJR19NQUM4MDIxMWAsIGFuZCBgQ09ORklHX01BQzgwMjExX0hXU0lNYCBhcmUgdGhlIG9uZXMgdG8gdmVyaWZ5LiBMZXQgbWUgcGVlayBpbiBgbmV0L3dpcmVsZXNzL0tjb25maWdgIGFuZCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGNvbmZpZ3VyYXRpb25zIHJlbGV2YW50IHRvIHRoaXMgbW9kaWZpY2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDRkc4MDIxMSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9LY29uZmlnPTE0PWNvbmZpZyBXRVhUX1BSSVZcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNi1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3OmNvbmZpZyBDRkc4MDIxMVxubmV0L3dpcmVsZXNzL0tjb25maWctMTgtXHR0cmlzdGF0ZSBcJiMzNDtjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWc9Mzg9Y29uZmlnIE5MODAyMTFfVEVTVE1PREVcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy01MS1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjUyOmNvbmZpZyBDRkc4MDIxMV9ERVZFTE9QRVJfV0FSTklOR1Ncbm5ldC93aXJlbGVzcy9LY29uZmlnLTUzLVx0Ym9vbCBcJiMzNDtlbmFibGUgZGV2ZWxvcGVyIHdhcm5pbmdzXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctNjctXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo2ODpjb25maWcgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgY2VydGlmaWNhdGlvbiBvbnVzXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctODgtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo4OTpjb25maWcgQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREJcbm5ldC93aXJlbGVzcy9LY29uZmlnLTkwLVx0Ym9vbCBcJiMzNDtyZXF1aXJlIHJlZ2RiIHNpZ25hdHVyZVwmIzM0OyBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy05OC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjk5OmNvbmZpZyBDRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEwMC1cdGJvb2wgXCYjMzQ7YWxsb3cgcmVnZGIga2V5cyBzaGlwcGVkIHdpdGggdGhlIGtlcm5lbFwmIzM0OyBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTAtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMTE6Y29uZmlnIENGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUlxubmV0L3dpcmVsZXNzL0tjb25maWctMTEyLVx0c3RyaW5nIFwmIzM0O2FkZGl0aW9uYWwgcmVnZGIga2V5IGRpcmVjdG9yeVwmIzM0OyBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMjEtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMjI6Y29uZmlnIENGRzgwMjExX1JFR19DRUxMVUxBUl9ISU5UU1xubmV0L3dpcmVsZXNzL0tjb25maWctMTIzLVx0Ym9vbCBcJiMzNDtjZmc4MDIxMSByZWd1bGF0b3J5IHN1cHBvcnQgZm9yIGNlbGx1bGFyIGJhc2Ugc3RhdGlvbiBoaW50c1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTEzNC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjEzNTpjb25maWcgQ0ZHODAyMTFfUkVHX1JFTEFYX05PX0lSXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzYtXHRib29sIFwmIzM0O2NmZzgwMjExIHN1cHBvcnQgZm9yIE5PX0lSIHJlbGF4YXRpb25cJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNTgtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNTk6Y29uZmlnIENGRzgwMjExX0RFRkFVTFRfUFNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2MC1cdGJvb2wgXCYjMzQ7ZW5hYmxlIHBvd2Vyc2F2ZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTY4LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTY5OmNvbmZpZyBDRkc4MDIxMV9ERUJVR0ZTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzAtXHRib29sIFwmIzM0O2NmZzgwMjExIERlYnVnRlMgZW50cmllc1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3Ni1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3Nzpjb25maWcgQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzgtXHRib29sIFwmIzM0O3N1cHBvcnQgQ1JEQVwmIzM0OyBpZiBFWFBFUlRcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODYtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxODc6Y29uZmlnIENGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4OC1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgd2lyZWxlc3MgZXh0ZW5zaW9ucyBjb21wYXRpYmlsaXR5XCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTkzLVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTk0OmNvbmZpZyBDRkc4MDIxMV9LVU5JVF9URVNUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOTUtXHR0cmlzdGF0ZSBcJiMzNDtLVW5pdCB0ZXN0cyBmb3IgY2ZnODAyMTFcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NjUKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgbmw4MDIxMV9uZXdfc3RhdGlvbmAgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIGBubDgwMjExX25ld19zdGF0aW9uYCB3aXRoaW4gYG5ldC93aXJlbGVzcy9ubDgwMjExLmNgLiAgR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgbmV0bGluayBpbnRlcmZhY2UsIHRoYXQmIzM5O3MgYWJzb2x1dGVseSByZWFjaGFibGUgdmlhIGNmZzgwMjExIGNvbW1hbmRzLCB3aGljaCBtZWFucyBpdCYjMzk7cyBwcmV0dHkgaW1wb3J0YW50LiBJJiMzOTt2ZSBnb3QgdG8gbG9vayBjbG9zZWx5IGF0IHdoYXQmIzM5O3MgY2hhbmdlZCBoZXJlLgoKVGhlIGZpcnN0IHRoaW5nIEkgc2VlIGlzIHRoYXQgdGhleSYjMzk7dmUgcmVvcmRlcmVkIHRoaW5ncywgbW92aW5nIHRoZSBgd2Rldi0mZ3Q7dmFsaWRfbGlua3NgIGNoZWNrIGVhcmxpZXIgaW4gdGhlIHByb2Nlc3MuIE9rYXksIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIFBlcmhhcHMgdGhleSYjMzk7cmUgdHJ5aW5nIHRvIG9wdGltaXplIHRoZSBmbG93IG9yIGhhbmRsZSBhbiBlZGdlIGNhc2UgdXBmcm9udC4gVGhlIHJlYWwga2lja2VyIGlzIHRoZSBuZXcgY2hlY2sgZm9yIGB3ZGV2LSZndDtsaW5rc1tsaW5rX2lkXS5hcC5iZWFjb25faW50ZXJ2YWxgLCBidXQgb25seSBmb3IgQVAgYW5kIFAyUF9HTy4gVGhhdCBpbW1lZGlhdGVseSBzdWdnZXN0cyB0aGV5JiMzOTtyZSBsaWtlbHkgdGFyZ2V0aW5nIHNwZWNpZmljIFNUQSBjb25uZWN0aW9uIHNjZW5hcmlvcyBhbmQgcG90ZW50aWFsbHkgYWRkcmVzc2luZyBhbiBpc3N1ZSByZWxhdGVkIHRvIGJlYWNvbiBoYW5kbGluZywgcGVyaGFwcyBkdXJpbmcgYXNzb2NpYXRpb24gb3IgcmUtYXNzb2NpYXRpb24uCgpGaW5hbGx5LCB0aGUgcmVtb3ZhbCBvZiBgTkw4MDIxMV9JRlRZUEVfQVBfVkxBTmAgZnJvbSB0aGUgc3dpdGNoIGNhc2UuLi4gSG1tbSwgbm93IHRoYXQmIzM5O3MgY3VyaW91cy4gIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoeSB0aGV54oCZcmUgdGFraW5nIHRoYXQgb3V0IG9mIHRoZSBwaWN0dXJlLiAgSXMgaXQgZGVwcmVjYXRlZD8gSXMgdGhlIFZMQU4gaW50ZXJmYWNlIHR5cGUgYmVpbmcgaGFuZGxlZCBlbHNld2hlcmUgbm93PyBUaGlzIG5lZWRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBhcyByZW1vdmluZyBhbiBpbnRlcmZhY2UgdHlwZSBjYW4gaGF2ZSBzZXJpb3VzIHJhbWlmaWNhdGlvbnMuIEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHNlZSBpZiBJIGNhbiBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IG9mIHRoYXQgcmVtb3ZhbCwgYW5kIHdoYXQgaXQgbWlnaHQgYWZmZWN0LiBJJiMzOTtsbCBzdGFydCBieSB0YWtpbmcgYSBnb29kIGxvb2sgYXQgYG5sODAyMTFfbmV3X3N0YXRpb25gIGFuZCBzZWUgd2hhdCB0aGUgZmxvdyBpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtubDgwMjExX25ld19zdGF0aW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL25sODAyMTEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTkwMDI9c3RhdGljIGludCBubDgwMjExX3NldF9zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy05MTczLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo5MTc0OnN0YXRpYyBpbnQgbmw4MDIxMV9uZXdfc3RhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy05MTc1LXtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE5NTQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgbmw4MDIxMV9zbWFsbF9vcHNbXSA9IHtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE5NjU3LVx0XHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE5NjU4Olx0XHQuZG9pdCA9IG5sODAyMTFfbmV3X3N0YXRpb24sXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE5NjU5LVx0XHQuZmxhZ3MgPSBHRU5MX1VOU19BRE1JTl9QRVJNLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MjYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBgbmw4MDIxMV9uZXdfc3RhdGlvbmAqKgoKT2theSwgc28gYG5sODAyMTFfbmV3X3N0YXRpb25gLCB0aGF0JiMzOTtzIGEgbmV0bGluayBjYWxsYmFjaywgcmlnaHQ/IFllYWgsIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vayBmb3IgZnV6emluZyBvcHBvcnR1bml0aWVzLiBUaGlua2luZyB0aHJvdWdoIHRoZSBzZXR1cCwgSSYjMzk7bGwgbmVlZCBgQ0ZHODAyMTFgLCBgTUFDODAyMTFgLCBhbmQgaWRlYWxseSBgTUFDODAyMTFfSFdTSU1gIHRvIGhhdmUgYW4gYWN0dWFsIGRldmljZSB0byB0ZXN0IGFnYWluc3QuIFNlZW1zIHNlbnNpYmxlLiBUaGUgY29yZSB0YXJnZXQgc3ltYm9sIGhlcmUgaXMsIG9mIGNvdXJzZSwgYG5sODAyMTFfbmV3X3N0YXRpb25gLgoKTm93LCBiZWZvcmUgSSBkaXZlIGluLCBsZXQgbWUganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGx1cmtpbmcgYWJvdXQuIEkgc2VlbSB0byByZWNhbGwgYENGRzgwMjExYCBtaWdodCBiZSB0aWVkIHRvIGBSRktJTExgLiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5IOKAkyBsZXQmIzM5O3MgdmVyaWZ5IHRoYXQgcXVpY2tseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL0tjb25maWc9NT1jb25maWcgV0VYVF9DT1JFXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy02LVx0ZGVmX2Jvb2wgeVxubmV0L3dpcmVsZXNzL0tjb25maWc6NzpcdGRlcGVuZHMgb24gQ0ZHODAyMTFfV0VYVCB8fCBXSVJFTEVTU19FWFRcbm5ldC93aXJlbGVzcy9LY29uZmlnLTgtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZz05PWNvbmZpZyBXRVhUX1BST0Ncbm5ldC93aXJlbGVzcy9LY29uZmlnLTEwLVx0ZGVmX2Jvb2wgeVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTE6XHRkZXBlbmRzIG9uIFBST0NfRlNcbm5ldC93aXJlbGVzcy9LY29uZmlnOjEyOlx0ZGVwZW5kcyBvbiBXRVhUX0NPUkVcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEzLVxuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnPTE3PWNvbmZpZyBDRkc4MDIxMVxubmV0L3dpcmVsZXNzL0tjb25maWctMTgtXHR0cmlzdGF0ZSBcJiMzNDtjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXCYjMzQ7XG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxOTpcdGRlcGVuZHMgb24gUkZLSUxMIHx8ICFSRktJTExcbm5ldC93aXJlbGVzcy9LY29uZmlnLTIwLVx0c2VsZWN0IEZXX0xPQURFUlxuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnPTY4PWNvbmZpZyBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTY5LVx0Ym9vbCBcJiMzNDtjZmc4MDIxMSBjZXJ0aWZpY2F0aW9uIG9udXNcJiMzNDtcbm5ldC93aXJlbGVzcy9LY29uZmlnOjcwOlx0ZGVwZW5kcyBvbiBFWFBFUlRcbm5ldC93aXJlbGVzcy9LY29uZmlnLTcxLVx0ZGVmYXVsdCBuXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWc9OTk9Y29uZmlnIENGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTEwMS1cdGRlZmF1bHQgeVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTAyOlx0ZGVwZW5kcyBvbiBDRkc4MDIxMV9SRVFVSVJFX1NJR05FRF9SRUdEQlxubmV0L3dpcmVsZXNzL0tjb25maWctMTAzLVx0aGVscFxuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnPTExMT1jb25maWcgQ0ZHODAyMTFfRVhUUkFfUkVHREJfS0VZRElSXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTItXHRzdHJpbmcgXCYjMzQ7YWRkaXRpb25hbCByZWdkYiBrZXkgZGlyZWN0b3J5XCYjMzQ7IGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xubmV0L3dpcmVsZXNzL0tjb25maWc6MTEzOlx0ZGVwZW5kcyBvbiBDRkc4MDIxMV9SRVFVSVJFX1NJR05FRF9SRUdEQlxubmV0L3dpcmVsZXNzL0tjb25maWctMTE0LVx0aGVscFxuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnPTEyMj1jb25maWcgQ0ZHODAyMTFfUkVHX0NFTExVTEFSX0hJTlRTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMjMtXHRib29sIFwmIzM0O2NmZzgwMjExIHJlZ3VsYXRvcnkgc3VwcG9ydCBmb3IgY2VsbHVsYXIgYmFzZSBzdGF0aW9uIGhpbnRzXCYjMzQ7XG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMjQ6XHRkZXBlbmRzIG9uIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xubmV0L3dpcmVsZXNzL0tjb25maWctMTI1LVx0aGVscFxuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnPTEzNT1jb25maWcgQ0ZHODAyMTFfUkVHX1JFTEFYX05PX0lSXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzYtXHRib29sIFwmIzM0O2NmZzgwMjExIHN1cHBvcnQgZm9yIE5PX0lSIHJlbGF4YXRpb25cJiMzNDtcbm5ldC93aXJlbGVzcy9LY29uZmlnOjEzNzpcdGRlcGVuZHMgb24gQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzgtXHRoZWxwXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWc9MTY5PWNvbmZpZyBDRkc4MDIxMV9ERUJVR0ZTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzAtXHRib29sIFwmIzM0O2NmZzgwMjExIERlYnVnRlMgZW50cmllc1wmIzM0O1xubmV0L3dpcmVsZXNzL0tjb25maWc6MTcxOlx0ZGVwZW5kcyBvbiBERUJVR19GU1xubmV0L3dpcmVsZXNzL0tjb25maWctMTcyLVx0aGVscFxuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnPTE5ND1jb25maWcgQ0ZHODAyMTFfS1VOSVRfVEVTVFxubmV0L3dpcmVsZXNzL0tjb25maWctMTk1LVx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdHMgZm9yIGNmZzgwMjExXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE5NjpcdGRlcGVuZHMgb24gS1VOSVRcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE5NzpcdGRlcGVuZHMgb24gQ0ZHODAyMTFcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE5OC1cdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg5MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZGVwZW5kZW5jaWVzOgoKKipBbmFseXppbmcgdGhlIFdpcmVsZXNzIFN0YWNrIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIHdpcmVsZXNzIHN0YWNrIGNvbmZpZ3VyYXRpb24uIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQgb24gdGhlIHN1cmZhY2UsIGJ1dCBpdCYjMzk7cyBhbHdheXMgd29ydGggYSBkb3VibGUtY2hlY2suIGBDRkc4MDIxMWAgaXMgaW50ZXJlc3Rpbmc7IGl0JiMzOTtzIGdvdCB0aGF0IGBSRktJTEwgfHwgIVJGS0lMTGAgZGVwZW5kZW5jeS4gRXNzZW50aWFsbHksIGl0JiMzOTtzIGFsd2F5cyBlbmFibGVkLCB3aGljaCBpcyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGNhc2Ugb2YgYSBkZXBlbmRlbmN5IHRoYXQgZXhpc3RzIGNvbmNlcHR1YWxseSBidXQgZG9lc24mIzM5O3QgYWN0dWFsbHkgbGltaXQgdGhlIGJ1aWxkLiBNb3Zpbmcgb24sIGBNQUM4MDIxMWAgaXMgYnVpbHQgZGlyZWN0bHkgb24gdG9wIG9mIGBDRkc4MDIxMWAg4oCTIGFzIGV4cGVjdGVkLCB0aGF0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZSA4MDIuMTEgc3RhY2suIFRoZW4sIHdlIHNlZSBgTUFDODAyMTFfSFdTSU1gIGRlcGVuZHMgb24gYE1BQzgwMjExYCwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZS4gSGFyZHdhcmUgc2ltdWxhdGlvbiBmdW5jdGlvbmFsaXR5IG5lZWRzIHRoZSBiYXNlIE1BQzgwMjExIGxheWVyIHRvIGZ1bmN0aW9uLiBJIHNob3VsZCBwcm9iYWJseSBkaWcgaW50byB0aGUgYG5ldC9tYWM4MDIxMS9LY29uZmlnYCBmaWxlIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgaW4gdGhlcmUsIGp1c3QgdG8gYmUgc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBzdWJ0bGUgZ290Y2hhcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9LY29uZmlnPTI9Y29uZmlnIE1BQzgwMjExXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7R2VuZXJpYyBJRUVFIDgwMi4xMSBOZXR3b3JraW5nIFN0YWNrIChtYWM4MDIxMSlcJiMzNDtcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjQ6XHRkZXBlbmRzIG9uIENGRzgwMjExXG5uZXQvbWFjODAyMTEvS2NvbmZpZy01LVx0c2VsZWN0IENSWVBUT1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE2PWNvbW1lbnQgXCYjMzQ7Q0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTFcJiMzNDtcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE3Olx0ZGVwZW5kcyBvbiBDRkc4MDIxMT1uXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xOC1cbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz0zMT1jaG9pY2Vcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMyLVx0cHJvbXB0IFwmIzM0O0RlZmF1bHQgcmF0ZSBjb250cm9sIGFsZ29yaXRobVwmIzM0O1xubmV0L21hYzgwMjExL0tjb25maWc6MzM6XHRkZXBlbmRzIG9uIE1BQzgwMjExX0hBU19SQ1xubmV0L21hYzgwMjExL0tjb25maWctMzQtXHRkZWZhdWx0IE1BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUxcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz00MT1jb25maWcgTUFDODAyMTFfUkNfREVGQVVMVF9NSU5TVFJFTFxubmV0L21hYzgwMjExL0tjb25maWctNDItXHRib29sIFwmIzM0O01pbnN0cmVsXCYjMzQ7XG5uZXQvbWFjODAyMTEvS2NvbmZpZzo0MzpcdGRlcGVuZHMgb24gTUFDODAyMTFfUkNfTUlOU1RSRUxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQ0LVx0aGVscFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTU3PWNvbW1lbnQgXCYjMzQ7U29tZSB3aXJlbGVzcyBkcml2ZXJzIHJlcXVpcmUgYSByYXRlIGNvbnRyb2wgYWxnb3JpdGhtXCYjMzQ7XG5uZXQvbWFjODAyMTEvS2NvbmZpZzo1ODpcdGRlcGVuZHMgb24gTUFDODAyMTEgXHUwMDI2XHUwMDI2IE1BQzgwMjExX0hBU19SQz1uXG5uZXQvbWFjODAyMTEvS2NvbmZpZy01OS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTYwPWNvbmZpZyBNQUM4MDIxMV9LVU5JVF9URVNUXG5uZXQvbWFjODAyMTEvS2NvbmZpZy02MS1cdHRyaXN0YXRlIFwmIzM0O0tVbml0IHRlc3RzIGZvciBtYWM4MDIxMVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo2MjpcdGRlcGVuZHMgb24gS1VOSVRcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjYzOlx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxubmV0L21hYzgwMjExL0tjb25maWctNjQtXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTcwPWNvbmZpZyBNQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03MS1cdGJvb2wgXCYjMzQ7RW5hYmxlIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyBzdXBwb3J0XCYjMzQ7XG5uZXQvbWFjODAyMTEvS2NvbmZpZzo3MjpcdGRlcGVuZHMgb24gTUFDODAyMTFcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTczLVx0aGVscFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTc5PWNvbmZpZyBNQUM4MDIxMV9MRURTXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04MC1cdGJvb2wgXCYjMzQ7RW5hYmxlIExFRCB0cmlnZ2Vyc1wmIzM0O1xubmV0L21hYzgwMjExL0tjb25maWc6ODE6XHRkZXBlbmRzIG9uIE1BQzgwMjExXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo4MjpcdGRlcGVuZHMgb24gTEVEU19DTEFTUz15IHx8IExFRFNfQ0xBU1M9TUFDODAyMTFcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTgzLVx0c2VsZWN0IExFRFNfVFJJR0dFUlNcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz04OD1jb25maWcgTUFDODAyMTFfREVCVUdGU1xubmV0L21hYzgwMjExL0tjb25maWctODktXHRib29sIFwmIzM0O0V4cG9ydCBtYWM4MDIxMSBpbnRlcm5hbHMgaW4gRGVidWdGU1wmIzM0O1xubmV0L21hYzgwMjExL0tjb25maWc6OTA6XHRkZXBlbmRzIG9uIE1BQzgwMjExIFx1MDAyNlx1MDAyNiBDRkc4MDIxMV9ERUJVR0ZTXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05MS1cdGhlbHBcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz05Nz1jb25maWcgTUFDODAyMTFfTUVTU0FHRV9UUkFDSU5HXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05OC1cdGJvb2wgXCYjMzQ7VHJhY2UgYWxsIG1hYzgwMjExIGRlYnVnIG1lc3NhZ2VzXCYjMzQ7XG5uZXQvbWFjODAyMTEvS2NvbmZpZzo5OTpcdGRlcGVuZHMgb24gTUFDODAyMTEgXHUwMDI2XHUwMDI2IFRSQUNJTkdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEwMC1cdGhlbHBcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz0xMTA9bWVudWNvbmZpZyBNQUM4MDIxMV9ERUJVR19NRU5VXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTEtXHRib29sIFwmIzM0O1NlbGVjdCBtYWM4MDIxMSBkZWJ1Z2dpbmcgZmVhdHVyZXNcJiMzNDtcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExMjpcdGRlcGVuZHMgb24gTUFDODAyMTFcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExMy1cdGhlbHBcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz0xMTY9Y29uZmlnIE1BQzgwMjExX05PSU5MSU5FXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTctXHRib29sIFwmIzM0O0RvIG5vdCBpbmxpbmUgVFgvUlggaGFuZGxlcnNcJiMzNDtcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExODpcdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWctMTE5LVx0aGVscFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTEzMj1jb25maWcgTUFDODAyMTFfVkVSQk9TRV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTMzLVx0Ym9vbCBcJiMzNDtWZXJib3NlIGRlYnVnZ2luZyBvdXRwdXRcJiMzNDtcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjEzNDpcdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWctMTM1LVx0aGVscFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE0Mz1jb25maWcgTUFDODAyMTFfTUxNRV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTQ0LVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1hbmFnZWQgTUxNRSBvdXRwdXRcJiMzNDtcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE0NTpcdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWctMTQ2LVx0aGVscFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE1ND1jb25maWcgTUFDODAyMTFfU1RBX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTUtXHRib29sIFwmIzM0O1ZlcmJvc2Ugc3RhdGlvbiBkZWJ1Z2dpbmdcJiMzNDtcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE1NjpcdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWctMTU3LVx0aGVscFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE2Mz1jb25maWcgTUFDODAyMTFfSFRfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE2NC1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBIVCBkZWJ1Z2dpbmdcJiMzNDtcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE2NTpcdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWctMTY2LVx0aGVscFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE3NT1jb25maWcgTUFDODAyMTFfT0NCX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNzYtXHRib29sIFwmIzM0O1ZlcmJvc2UgT0NCIGRlYnVnZ2luZ1wmIzM0O1xubmV0L21hYzgwMjExL0tjb25maWc6MTc3Olx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNzgtXHRoZWxwXG4tLVxubmV0L21hYzgwMjExL0tjb25maWc9MTg2PWNvbmZpZyBNQUM4MDIxMV9JQlNTX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xODctXHRib29sIFwmIzM0O1ZlcmJvc2UgSUJTUyBkZWJ1Z2dpbmdcJiMzNDtcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE4ODpcdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWctMTg5LVx0aGVscFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE5Nz1jb25maWcgTUFDODAyMTFfUFNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE5OC1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBwb3dlcnNhdmUgbW9kZSBkZWJ1Z2dpbmdcJiMzNDtcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE5OTpcdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWctMjAwLVx0aGVscFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTIwOT1jb25maWcgTUFDODAyMTFfTVBMX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMTAtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBwZWVyIGxpbmsgZGVidWdnaW5nXCYjMzQ7XG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMTE6XHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIxMjpcdGRlcGVuZHMgb24gTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL0tjb25maWctMjEzLVx0aGVscFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTIyMj1jb25maWcgTUFDODAyMTFfTVBBVEhfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIyMy1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHBhdGggZGVidWdnaW5nXCYjMzQ7XG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMjQ6XHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIyNTpcdGRlcGVuZHMgb24gTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL0tjb25maWctMjI2LVx0aGVscFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTIzNT1jb25maWcgTUFDODAyMTFfTUhXTVBfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzNi1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIEhXTVAgcm91dGluZyBkZWJ1Z2dpbmdcJiMzNDtcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIzNzpcdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWc6MjM4Olx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzktXHRoZWxwXG4tLVxubmV0L21hYzgwMjExL0tjb25maWc9MjQ4PWNvbmZpZyBNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0OS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHN5bmNocm9uaXphdGlvbiBkZWJ1Z2dpbmdcJiMzNDtcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI1MDpcdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWc6MjUxOlx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNTItXHRoZWxwXG4tLVxubmV0L21hYzgwMjExL0tjb25maWc9MjU5PWNvbmZpZyBNQUM4MDIxMV9NRVNIX0NTQV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjYwLVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggY2hhbm5lbCBzd2l0Y2ggZGVidWdnaW5nXCYjMzQ7XG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNjE6XHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI2MjpcdGRlcGVuZHMgb24gTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL0tjb25maWctMjYzLVx0aGVscFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTI3MD1jb25maWcgTUFDODAyMTFfTUVTSF9QU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjcxLVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggcG93ZXJzYXZlIGRlYnVnZ2luZ1wmIzM0O1xubmV0L21hYzgwMjExL0tjb25maWc6MjcyOlx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNzM6XHRkZXBlbmRzIG9uIE1BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI3NC1cdGhlbHBcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz0yODE9Y29uZmlnIE1BQzgwMjExX1RETFNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI4Mi1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBURExTIGRlYnVnZ2luZ1wmIzM0O1xubmV0L21hYzgwMjExL0tjb25maWc6MjgzOlx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODQtXHRoZWxwXG4tLVxubmV0L21hYzgwMjExL0tjb25maWc9MjkzPWNvbmZpZyBNQUM4MDIxMV9ERUJVR19DT1VOVEVSU1xubmV0L21hYzgwMjExL0tjb25maWctMjk0LVx0Ym9vbCBcJiMzNDtFeHRyYSBzdGF0aXN0aWNzIGZvciBUWC9SWCBkZWJ1Z2dpbmdcJiMzNDtcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI5NTpcdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWc6Mjk2Olx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR0ZTXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yOTctXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzM0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBjb25zaWRlcmF0aW9uczoKCioqTUFDODAyMTEgRGVwZW5kZW5jeSBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBkZXBlbmRlbmN5IHJlbGF0aW9uc2hpcHMgaGVyZS4gSXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYWN0dWFsbHkuIFdlJiMzOTt2ZSBnb3QgYE1BQzgwMjExYCwgYW5kIGl0IHJlbGllcyBvbiBgQ0ZHODAyMTFgLiBUaGF0JiMzOTtzIHRoZSBjb3JlLiBUaGVuLCB3aGVuIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaGFyZHdhcmUgc2ltdWxhdGlvbiwgbGlrZSB3aXRoIGBNQUM4MDIxMV9IV1NJTWAsIHRoYXQgYnVpbGRzICp1cG9uKiBgTUFDODAyMTFgLiBTbywgYE1BQzgwMjExX0hXU0lNYCBuYXR1cmFsbHkgaGFzIGBNQUM4MDIxMWAgYXMgYSBkZXBlbmRlbmN5IGFzIHdlbGwuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBkcmlsbCBkb3duIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4gSSYjMzk7bSBnb2luZyB0byBjaGVjayBvdXQgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21hYzgwMjExX2h3c2ltL0tjb25maWdgIChvciBzb21ld2hlcmUgc2ltaWxhciwgZGVwZW5kaW5nIG9uIHRoZSBleGFjdCBzb3VyY2UgdHJlZSkuIEkgbmVlZCB0byBjb25maXJtIHRob3NlIGRlcGVuZGVuY2llcyBhcmUgY29ycmVjdGx5IHJlZmxlY3RlZCBpbiB0aGUgS2NvbmZpZy4gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgc3RydWN0dXJlIGlzIHNvdW5kIGFuZCB0aGVyZSBhcmVuJiMzOTt0IGFueSBzbmVha3kgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIG9yIG1pc3NpbmcgcmVxdWlyZW1lbnRzIGx1cmtpbmcuIEdvdHRhIGtlZXAgZXZlcnl0aGluZyBjbGVhbiBhbmQgY29uc2lzdGVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1BQzgwMjExX0hXU0lNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZzoxOmNvbmZpZyBNQUM4MDIxMV9IV1NJTVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnLTItXHR0cmlzdGF0ZSBcJiMzNDtTaW11bGF0ZWQgcmFkaW8gdGVzdGluZyB0b29sIGZvciBtYWM4MDIxMVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc1NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgVmlydHVhbCBXaXJlbGVzcyBLY29uZmlnKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUgdmlydHVhbCB3aXJlbGVzcyBzZXR1cCBpbiB0aGlzIGtlcm5lbC4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQsIGFzIGFsd2F5cywgaXMgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgdGV4dCBtZW50aW9ucyBgZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnYC4gUmlnaHQsIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhpcyBzdWJzeXN0ZW0uIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgYEtjb25maWdgIG5vdyB0byBzZWUgd2hhdCYjMzk7cyBkZWZpbmVkLCB3aGF0IGRlcGVuZGVuY2llcyBleGlzdCwgYW5kIGhvdyB0aGlzIGFsbCBwaWVjZXMgdG9nZXRoZXIuIFRoYXQmIzM5O2xsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSByZXN0IG9mIHRoZSBjb2RlLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZz0xPWNvbmZpZyBNQUM4MDIxMV9IV1NJTVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnLTItXHR0cmlzdGF0ZSBcJiMzNDtTaW11bGF0ZWQgcmFkaW8gdGVzdGluZyB0b29sIGZvciBtYWM4MDIxMVwmIzM0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnOjM6XHRkZXBlbmRzIG9uIE1BQzgwMjExXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWctNC1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWc9MTQ9Y29uZmlnIFZJUlRfV0lGSVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnLTE1LVx0dHJpc3RhdGUgXCYjMzQ7V2lmaSB3cmFwcGVyIGZvciBldGhlcm5ldCBkcml2ZXJzXCYjMzQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWc6MTY6XHRkZXBlbmRzIG9uIENGRzgwMjExXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWctMTctXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTU3CgkJCQkJCQlvdXRwdXQ6IDE2MAoJCQkJCQkJdGhvdWdodHM6IDU2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFN0cmF0ZWd5IGZvciBNQUM4MDIxMV9IV1NJTSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCByZWxhdGVkIHRvIGBNQUM4MDIxMV9IV1NJTWAuIEl0IGxvb2tzIGxpa2UgdGhpcyBmb2N1c2VzIG9uIHRoZSBgbmw4MDIxMV9uZXdfc3RhdGlvbmAgZnVuY3Rpb24sIHdoaWNoIGlzIGFuIEFQSSBlbnRyeXBvaW50LiBUaGUgcGF0Y2ggaXMgY2hhbmdpbmcgc29tZSBmdW5jdGlvbmFsIGxvZ2ljIHdpdGhpbiBpdCDigJMgbW92aW5nIHZhbGlkYXRpb24sIGFkZGluZyBhIGNoZWNrIGZvciBgYmVhY29uX2ludGVydmFsYCwgYW5kIHJlbW92aW5nIGBOTDgwMjExX0lGVFlQRV9BUF9WTEFOYC4gRGVmaW5pdGVseSB3b3J0aCBhIGZ1enppbmcgZWZmb3J0IGhlcmUuCgpJIGluaXRpYWxseSBxdWVzdGlvbmVkIHdoZXRoZXIgd2UgY291bGQgdXNlIGBubDgwMjExX25ld19zdGF0aW9uYCBmb3IgZnV6emluZywgc2luY2UgaXQmIzM5O3MgZGVmaW5lZCBhcyBhIHN0YXRpYyBmdW5jdGlvbi4gQnV0IHRoZW4gSSByZW1lbWJlcmVkIHRoYXQgd2hpbGUgaXQgaXMgc3RhdGljLCBpdCYjMzk7cyBhIG5ldGxpbmsgY2FsbGJhY2ssIHNvIGl0cyBhZGRyZXNzIGlzIHRha2VuIGFuZCB1c2VkIGluIGBubDgwMjExX3NtYWxsX29wc2AuIFRoaXMgbWVhbnMgaXQgKndvbiYjMzk7dCogYmUgaW5saW5lZCwgYW5kIFN5emthbGxlciBzaG91bGQgYmUgYWJsZSB0byBoYW5kbGUgaXQuIFRoZSBwcm9tcHQmIzM5O3MgcHJlZmVyZW5jZSBpcyBmb3Igbm9uLXN0YXRpYyBlbnRyeXBvaW50cywgYnV0IGluIHRoZSBuZXRsaW5rIGNhc2UgdGhpcyAqaXMqIHRoZSBzdGFuZGFyZCBhcHByb2FjaC4gTm8gcmVhc29uIHRvIGdvIGh1bnRpbmcgZm9yIGFsdGVybmF0aXZlcywgZXNwZWNpYWxseSBzaW5jZSBJIGRvbiYjMzk7dCBzZWUgYW55IG90aGVyIGZ1bmN0aW9ucyBiZWluZyB0b3VjaGVkIGJ5IHRoaXMgcGF0Y2guCgpTbywgdGhlIGtleSBjb25maWdzIGZvciB0aGlzIGFyZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBgQ0ZHODAyMTFgLCBgTUFDODAyMTFgLCBhbmQgYE1BQzgwMjExX0hXU0lNYC4gTm8gbmVlZCBmb3IgYE5MODAyMTFfVEVTVE1PREVgIHNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBzdGFuZGFyZCBuZXRsaW5rIGNvbW1hbmQsIGBOTDgwMjExX0NNRF9ORVdfU1RBVElPTmAuCgpJJiMzOTttIHJlYWR5IHRvIHNldCB1cCB0aGUgZnV6emluZyB3aXRoIGBubDgwMjExX25ld19zdGF0aW9uYCBhcyB0aGUgdGFyZ2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtubDgwMjExX25ld19zdGF0aW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRsaW5rIGNhbGxiYWNrIGBubDgwMjExX25ld19zdGF0aW9uYCBpbiBjZmc4MDIxMSwgY2hhbmdpbmcgdGhlIHZhbGlkYXRpb24gbG9naWMgZm9yIGBsaW5rX2lkYCBhbmQgYWRkaW5nIGEgY2hlY2sgZm9yIGBiZWFjb25faW50ZXJ2YWxgIHdoZW4gYWRkaW5nIGEgbmV3IHN0YXRpb24gdG8gYW4gQVAgb3IgUDJQX0dPIGludGVyZmFjZS4gVGhpcyBpcyByZWFjaGFibGUgY29yZSB3aXJlbGVzcyBsb2dpYyB0aGF0IGNhbiBiZSB0ZXN0ZWQgdXNpbmcgdGhlIG1hYzgwMjExX2h3c2ltIGRyaXZlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtubDgwMjExX25ld19zdGF0aW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRsaW5rIGNhbGxiYWNrIGBubDgwMjExX25ld19zdGF0aW9uYCBpbiBjZmc4MDIxMSwgY2hhbmdpbmcgdGhlIHZhbGlkYXRpb24gbG9naWMgZm9yIGBsaW5rX2lkYCBhbmQgYWRkaW5nIGEgY2hlY2sgZm9yIGBiZWFjb25faW50ZXJ2YWxgIHdoZW4gYWRkaW5nIGEgbmV3IHN0YXRpb24gdG8gYW4gQVAgb3IgUDJQX0dPIGludGVyZmFjZS4gVGhpcyBpcyByZWFjaGFibGUgY29yZSB3aXJlbGVzcyBsb2dpYyB0aGF0IGNhbiBiZSB0ZXN0ZWQgdXNpbmcgdGhlIG1hYzgwMjExX2h3c2ltIGRyaXZlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6NDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTo0NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eSBpbiBgbmw4MDIxMV9uZXdfc3RhdGlvbigpYC4gQmVmb3JlIHRoZSBwYXRjaCwgdGhlIGBsaW5rX2lkYCBleHRyYWN0ZWQgZnJvbSBuZXRsaW5rIGF0dHJpYnV0ZXMgd2FzIG5vdCB2YWxpZGF0ZWQgYWdhaW5zdCB0aGUgbWF4aW11bSBudW1iZXIgb2YgbGlua3Mgb3IgY2hlY2tlZCBmb3IgbmVnYXRpdmUgdmFsdWVzIGJlZm9yZSBiZWluZyB1c2VkIGFzIGFuIGluZGV4IHRvIGFjY2VzcyB0aGUgYHdkZXYtXHUwMDNlbGlua3NbbGlua19pZF1gIGFycmF5LiBUaGlzIGFsbG93ZWQgYW4gYXR0YWNrZXIgdG8gdHJpZ2dlciBhbiBvdXQtb2YtYm91bmRzIHJlYWQgd2hlbiBjaGVja2luZyBgd2Rldi1cdTAwM2VsaW5rc1tsaW5rX2lkXS5hcC5iZWFjb25faW50ZXJ2YWxgLlxuXG5PdXQtb2YtYm91bmRzIGFjY2Vzc2VzIChib3RoIHJlYWRzIGFuZCB3cml0ZXMpIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIGBwYXJhbXNgIHN0cnVjdHVyZSBpcyBmdWxseSB6ZXJvLWluaXRpYWxpemVkIHZpYSBgbWVtc2V0KFx1MDAyNnBhcmFtcywgMCwgc2l6ZW9mKHBhcmFtcykpO2AsIGFuZCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2VzIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MgaW52b2x2ZWQgaW4gdGhpcyBidWcuIFNpbmNlIEtBU0FOIGlzIGZ1bGx5IGNhcGFibGUgb2YgY2F0Y2hpbmcgdGhpcyBvdXQtb2YtYm91bmRzIHJlYWQsIHRoZXJlIGlzIG5vIG5lZWQgdG8gcnVuIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDEwOWYwZWZhZTdhZmUxYjk3NDY2ZjY0MzY0M2FiMTYwYTM3MWM3MgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDA5OjQ2OjUxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmMKaW5kZXggNWFkY2I2YmQwZmM1Ni4uNzViYmQ3OGY5MWJhMyAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCkBAIC05MTc0LDcgJiM0Mzs5MTc0LDcgQEAgc3RhdGljIGludCBubDgwMjExX3NldF9zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiBzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLSZndDt1c2VyX3B0clswXTsKLQlpbnQgZXJyOwomIzQzOwlpbnQgZXJyLCBsaW5rX2lkOwogCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBpbmZvLSZndDt1c2VyX3B0clsxXTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gd2Rldi0mZ3Q7bmV0ZGV2OwogCXN0cnVjdCBzdGF0aW9uX3BhcmFtZXRlcnMgcGFyYW1zOwpAQCAtOTIyMiw2ICYjNDM7OTIyMiwxNiBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAlwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWQgPQogCQlubDgwMjExX2xpbmtfaWRfb3JfaW52YWxpZChpbmZvLSZndDthdHRycyk7CiAKJiM0MzsJaWYgKHdkZXYtJmd0O3ZhbGlkX2xpbmtzKSB7CiYjNDM7CQlpZiAocGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCWlmICghKHdkZXYtJmd0O3ZhbGlkX2xpbmtzICZhbXA7IEJJVChwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWQpKSkKJiM0MzsJCQlyZXR1cm4gLUVOT0xJTks7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlpZiAocGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkICZndDs9IDApCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKIAlpZiAoaW5mby0mZ3Q7YXR0cnNbTkw4MDIxMV9BVFRSX01MRF9BRERSXSkgewogCQltYWNfYWRkciA9IG5sYV9kYXRhKGluZm8tJmd0O2F0dHJzW05MODAyMTFfQVRUUl9NTERfQUREUl0pOwogCQlwYXJhbXMubGlua19zdGFfcGFyYW1zLm1sZF9tYWMgPSBtYWNfYWRkcjsKQEAgLTk0MDIsOCAmIzQzOzk0MTIsMTIgQEAgc3RhdGljIGludCBubDgwMjExX25ld19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAKIAlzd2l0Y2ggKHdkZXYtJmd0O2lmdHlwZSkgewogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6Ci0JY2FzZSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOOgogCWNhc2UgTkw4MDIxMV9JRlRZUEVfUDJQX0dPOgomIzQzOwkJLyogQWRkIGEgbmV3IHN0YXRpb24gb25seSBhZnRlciB0aGUgQVAgYW5kIGxpbmsgaGFzIGJlZW4gc3RhcnRlZCAqLwomIzQzOwkJbGlua19pZCA9IHdkZXYtJmd0O3ZhbGlkX2xpbmtzID8gcGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkIDogMDsKJiM0MzsJCWlmICghd2Rldi0mZ3Q7bGlua3NbbGlua19pZF0uYXAuYmVhY29uX2ludGVydmFsKQomIzQzOwkJCXJldHVybiAtRU5FVERPV047CiYjNDM7CiAJCS8qIGlnbm9yZSBXTUUgYXR0cmlidXRlcyBpZiBpZmFjZS9zdGEgaXMgbm90IGNhcGFibGUgKi8KIAkJaWYgKCEocmRldi0mZ3Q7d2lwaHkuZmxhZ3MgJmFtcDsgV0lQSFlfRkxBR19BUF9VQVBTRCkgfHwKIAkJICAgICEocGFyYW1zLnN0YV9mbGFnc19zZXQgJmFtcDsgQklUKE5MODAyMTFfU1RBX0ZMQUdfV01FKSkpCkBAIC05NDk1LDI3ICYjNDM7OTUwOSwxMCBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAogCS8qIGJlIGF3YXJlIG9mIHBhcmFtcy52bGFuIHdoZW4gY2hhbmdpbmcgY29kZSBoZXJlICovCiAKLQlpZiAod2Rldi0mZ3Q7dmFsaWRfbGlua3MpIHsKLQkJaWYgKHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19pZCAmbHQ7IDApIHsKLQkJCWVyciA9IC1FSU5WQUw7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlpZiAoISh3ZGV2LSZndDt2YWxpZF9saW5rcyAmYW1wOyBCSVQocGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkKSkpIHsKLQkJCWVyciA9IC1FTk9MSU5LOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAocGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkICZndDs9IDApIHsKLQkJCWVyciA9IC1FSU5WQUw7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQogCXBhcmFtcy5lcHBfcGVlciA9CiAJCW5sYV9nZXRfZmxhZyhpbmZvLSZndDthdHRyc1tOTDgwMjExX0FUVFJfRVBQX1BFRVJdKTsKIAogCWVyciA9IHJkZXZfYWRkX3N0YXRpb24ocmRldiwgd2RldiwgbWFjX2FkZHIsICZhbXA7cGFyYW1zKTsKLW91dDoKIAlkZXZfcHV0KHBhcmFtcy52bGFuKTsKIAlyZXR1cm4gZXJyOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg4NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFByb3Bvc2VkIFBhdGNoOiBQb3RlbnRpYWwgSXNzdWVzIHdpdGggTGluayBJRCBWYWxpZGF0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG5sODAyMTFfbmV3X3N0YXRpb25gIHdpdGhpbiBgbmV0L3dpcmVsZXNzL25sODAyMTEuY2AsIGFuZCBpdCYjMzk7cyBwcmltYXJpbHkgYWJvdXQgbW92aW5nIGFyb3VuZCBhbmQgYWRkaW5nIHNvbWUgdmFsaWRhdGlvbiBmb3IgYHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19pZGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBsb2dpYyBpcyBjaGVja2luZyB3aGV0aGVyIHRoZSBBUCBhbmQgbGluayBoYXZlIGJlZW4gc3RhcnRlZC4KClRoZSBmaXJzdCB0aGluZyB0aGF0IGNhdWdodCBteSBleWUgaXMgdGhlIGFkZGVkIGNoZWNrIGZvciBgd2Rldi0mZ3Q7bGlua3NbbGlua19pZF0uYXAuYmVhY29uX2ludGVydmFsYCBmb3IgYEFQYCBhbmQgYFAyUF9HT2AgaW50ZXJmYWNlcy4gVGhlIGNvZGUgYXR0ZW1wdHMgdG8gdmFsaWRhdGUgdGhlIEFQIGxpbmsgYnkgY2hlY2tpbmcgdGhhdCB0aGUgYmVhY29uIGludGVydmFsIGlzIG5vbi16ZXJvIGJlZm9yZSBhZGRpbmcgYSBuZXcgc3RhdGlvbi4gRmFpciBlbm91Z2gsIHRoYXQgbWFrZXMgc2Vuc2UuIEhvd2V2ZXIsIEkgbmVlZCB0byBjaGVjayBob3cgaXQmIzM5O3MgZG9uZS4KClRoZW4gSSByZWFsaXplZCB0aGF0IGBsaW5rX2lkYCBpcyAqdXNlZCBhcyBhbiBpbmRleCBpbnRvKiBgd2Rldi0mZ3Q7bGlua3NgLiBIbW0sIGlzIGBsaW5rX2lkYCBwcm9wZXJseSBib3VuZGVkPyBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlLCBzaW5jZSBpbmRleGluZyBhbiBhcnJheSBvdXQgb2YgYm91bmRzIGlzIGEgY2xhc3NpYyBidWcuIE5vdywgaXQgbG9va3MgbGlrZSB0aGV5JiMzOTt2ZSBtb3ZlZCBzb21lIHZhbGlkYXRpb24gbG9naWMgZWFybGllciBpbiB0aGUgZnVuY3Rpb24uCgpJIHNlZSB0aGlzIGNvZGU6CmBgYGMKCWlmICh3ZGV2LSZndDt2YWxpZF9saW5rcykgewoJCWlmIChwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWQgJmx0OyAwKQoJCQlyZXR1cm4gLUVJTlZBTDsKCQlpZiAoISh3ZGV2LSZndDt2YWxpZF9saW5rcyAmYW1wOyBCSVQocGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkKSkpCgkJCXJldHVybiAtRU5PTElOSzsKCX0gZWxzZSB7CgkJaWYgKHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19pZCAmZ3Q7PSAwKQoJCQlyZXR1cm4gLUVJTlZBTDsKCX0KYGBgCklmIGB3ZGV2LSZndDt2YWxpZF9saW5rc2AgaXMgbm9uLXplcm8sIHRoaXMgY2hlY2tzIHRoYXQgdGhlIGBsaW5rX2lkYCBpcyBub24tbmVnYXRpdmUgYW5kIGlzIHZhbGlkLiBUaGUgYGxpbmtfaWRgIGlzIHRoZW4gdXNlZCB0byBjaGVjayB0aGUgdmFsaWQgbGluayBtYXNrLiBUaGlzIHNlZW1zIGxpa2UgaXQgd291bGQgcHJldmVudCBvdXQtb2YtYm91bmRzIGFjY2VzcyAqaWYqIHRoZSBgQklUKGxpbmtfaWQpYCBvcGVyYXRpb24gaXMgc2FmZS4gTm93LCB0aGlzIGBCSVQobGlua19pZClgIGlzIHRoZSByaXNreSBwYXJ0LiBJZiBgbGlua19pZGAgaXMgbGFyZ2UsIHVzaW5nIGJpdCBzaGlmdGluZyBvbiBhIDE2LWJpdCBmaWVsZCBtYXkgbGVhZCB0byBpc3N1ZXMuCgpHaXZlbiB0aGF0IGB3ZGV2LSZndDt2YWxpZF9saW5rc2AgaXMgYSBgdTE2YCwgYWNjb3JkaW5nIHRvIHRoZSBtYWM4MDIxMS9jZmc4MDIxMSBzdGFuZGFyZCwgaXQgc2VlbXMgdG8gbWUgdGhhdCB1c2luZyBhIGBsaW5rX2lkYCB2YWx1ZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMTYsIHdoaWxlIG5vdCAqZGlyZWN0bHkqIG91dCBvZiBib3VuZHMgZHVlIHRvIHRoZSBjb21wYXJpc29uIGxvZ2ljLCBjb3VsZCBzdGlsbCByZXN1bHQgaW4gdW5kZWZpbmVkIGJlaGF2aW9yIGJlY2F1c2UgYEJJVChsaW5rX2lkKWAgd2lsbCBzaGlmdCBhIHNpbmdsZSBiaXQgcGFzdCB0aGUgYm91bmRhcmllcyBvZiB0aGUgYHUxNmAuIFdlIGNvdWxkIGhhdmUgYW4gdW5leHBlY3RlZCByZXN1bHQgZHVlIHRvIHRoZSBiaXQgc2hpZnRpbmcuCgpJIG5lZWQgdG8gY29uZmlybSB0aGlzLiBJIHdpbGwgbG9vayBhdCBgc3RydWN0IHdpcmVsZXNzX2RldmAgZGVmaW5pdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3Qgd2lyZWxlc3NfZGV2IFxceyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L21hYzgwMjExLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDQxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gY2ZnODAyMTEuaCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgd2lyZWxlc3MgY29uZmlndXJhdGlvbiBmcmFtZXdvcmsuIGBjZmc4MDIxMWAgaXMgYWxtb3N0IGFsd2F5cyB0aGUgZmlyc3QgcGxhY2UgdG8gc3RhcnQgd2hlbiBJJiMzOTttIGRlYWxpbmcgd2l0aCBrZXJuZWwtbGV2ZWwgV2ktRmkgc3R1ZmYuIEl0JiMzOTtzIHRoZSBjZW50cmFsIGh1YiBmb3IgdXNlci1zcGFjZSBpbnRlcmFjdGlvbiB3aXRoIHdpcmVsZXNzIGRldmljZXMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzLCBkZWZpbml0aW9ucywgYW5kIGZ1bmN0aW9uIHByb3RvdHlwZXMgdGhhdCBkZWZpbmUgdGhlIGludGVyZmFjZSBiZXR3ZWVuIHRoZSB3aXJlbGVzcyBkcml2ZXJzIGFuZCB0aGUgZ2VuZXJpYyBuZXR3b3JraW5nIHN0YWNrLiBIb3BlZnVsbHksIHRoZSBpc3N1ZSBJJiMzOTttIGNoYXNpbmcgaXMgZXhwb3NlZCBoZXJlLiBJdCYjMzk7cyBvZnRlbiB0aGUgc2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBmb3IgYWxsIG9mIHRob3NlIGVsZW1lbnRzIG9mIHRoZSBXaS1GaSBzdGFjay4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBkaWcgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCB3aXJlbGVzc19kZXYgXFx7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvY2ZnODAyMTEuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9jZmc4MDIxMS5oPTcxMjA9ZW51bSBpZWVlODAyMTFfYXBfcmVnX3Bvd2VyIHtcbi0tXG5pbmNsdWRlL25ldC9jZmc4MDIxMS5oLTcyMDctICovXG5pbmNsdWRlL25ldC9jZmc4MDIxMS5oOjcyMDg6c3RydWN0IHdpcmVsZXNzX2RldiB7XG5pbmNsdWRlL25ldC9jZmc4MDIxMS5oLTcyMDktXHRzdHJ1Y3Qgd2lwaHkgKndpcGh5O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzgwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoYXQgY29kZToKCioqRGl2aW5nIGludG8gdGhlIFdpcmVsZXNzIERldmljZSBTdHJ1Y3R1cmUqKgoKT2theSwgdGltZSB0byBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIHdpcmVsZXNzIG5ldHdvcmtpbmcgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwuIE15IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGNvcmUgcmVwcmVzZW50YXRpb24gb2YgYSB3aXJlbGVzcyBkZXZpY2UuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IGBzdHJ1Y3Qgd2lyZWxlc3NfZGV2YCBpbiBgaW5jbHVkZS9uZXQvY2ZnODAyMTEuaGAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZnVuZGFtZW50YWwgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBmb3JtcyB0aGUgYmFja2JvbmUgb2YgY2ZnODAyMTEmIzM5O3MgaW50ZXJhY3Rpb24gd2l0aCB3aXJlbGVzcyBkcml2ZXJzLgoKSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbWVtYmVycyBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIuIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgZWxlbWVudHMgcmVsYXRlZCB0bzoKCiogICAqKkRyaXZlciBJbnRlcmZhY2U6KiogSG93IHRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhpcyBzdHJ1Y3R1cmUgdG8gY29uZmlndXJlIGFuZCByZXBvcnQgdGhlIHN0YXRlIG9mIHRoZSB3aXJlbGVzcyBkZXZpY2UuIEFyZSB0aGVyZSBmdW5jdGlvbiBwb2ludGVycyBmb3Igc3BlY2lmaWMgb3BlcmF0aW9ucyAoZS5nLiwgc2V0dGluZyB0aGUgbW9kZSwgdHJhbnNtaXR0aW5nIGZyYW1lcywgc2Nhbm5pbmcpPwoqICAgKipTdGF0ZSBNYW5hZ2VtZW50OioqIEZsYWdzIGFuZCB2YXJpYWJsZXMgaW5kaWNhdGluZyB0aGUgY3VycmVudCBvcGVyYXRpb25hbCBzdGF0ZSAoZS5nLiwgc2Nhbm5pbmcsIGNvbm5lY3RlZCwgZGlzY29ubmVjdGVkKS4gSSYjMzk7bGwgd2FudCB0byBzZWUgaG93IHRoZXNlIHRyYW5zaXRpb25zIGFyZSBtYW5hZ2VkLgoqICAgKipDb25maWd1cmF0aW9uOioqIFBhcmFtZXRlcnMgdGhhdCBkZWZpbmUgdGhlIHdpcmVsZXNzIHNldHRpbmdzLCBzdWNoIGFzIHRoZSBvcGVyYXRpbmcgY2hhbm5lbCwgQlNTSUQsIGFuZCBuZXR3b3JrIG1vZGUuCiogICAqKlNlY3VyaXR5OioqIEFueSByZWxhdGVkIHBvaW50ZXJzIHRvIHNlY3VyaXR5IGtleXMgYW5kIGNvbmZpZ3VyYXRpb24gZWxlbWVudHMuCiogICAqKkludGVyZmFjZToqKiBJJiMzOTtsbCBiZSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgYHdpcmVsZXNzX2RldmAgaXMgbGlua2VkIHRvIHRoZSBuZXR3b3JrIGludGVyZmFjZXMgKGUuZy4sIGBuZXRfZGV2aWNlYCkuCgpJIGV4cGVjdCB0aGUgc3RydWN0dXJlIHRvIGJlIHF1aXRlIGNvbXByZWhlbnNpdmUsIGFzIGl0IG5lZWRzIHRvIGFic3RyYWN0IGFuZCBoYW5kbGUgdGhlIHZhcmlvdXMgY29tcGxleGl0aWVzIG9mIG1vZGVybiB3aXJlbGVzcyBwcm90b2NvbHMuIFRoaXMgaXMgdGhlIGNlbnRyYWwgcG9pbnQgZm9yIGV2ZXJ5dGhpbmcgY2ZnODAyMTEgZG9lcywgc28gYSB0aG9yb3VnaCB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgc3RydWN0dXJlIGlzIGVzc2VudGlhbCB0byBncmFzcCB0aGUgZnJhbWV3b3JrJiMzOTtzIG92ZXJhbGwgbG9naWMuIExldCYjMzk7cyBzZWUgaG93IHRoZXkmIzM5O3ZlIG9yZ2FuaXplZCB0aGUgY29tcG9uZW50cyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9jZmc4MDIxMS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzIwOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NzIwODpcdHN0cnVjdCB3aXJlbGVzc19kZXYge1xuNzIwOTpcdFx0c3RydWN0IHdpcGh5ICp3aXBoeTtcbjcyMTA6XHRcdGVudW0gbmw4MDIxMV9pZnR5cGUgaWZ0eXBlO1xuNzIxMTpcdFxuNzIxMjpcdFx0LyogdGhlIHJlbWFpbmRlciBvZiB0aGlzIHN0cnVjdCBzaG91bGQgYmUgcHJpdmF0ZSB0byBjZmc4MDIxMSAqL1xuNzIxMzpcdFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuNzIxNDpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbjcyMTU6XHRcbjcyMTY6XHRcdHUzMiBpZGVudGlmaWVyO1xuNzIxNzpcdFxuNzIxODpcdFx0c3RydWN0IGxpc3RfaGVhZCBtZ210X3JlZ2lzdHJhdGlvbnM7XG43MjE5Olx0XHR1OCBtZ210X3JlZ2lzdHJhdGlvbnNfbmVlZF91cGRhdGU6MTtcbjcyMjA6XHRcbjcyMjE6XHRcdGJvb2wgdXNlXzRhZGRyLCBpc19ydW5uaW5nLCByZWdpc3RlcmVkLCByZWdpc3RlcmluZztcbjcyMjI6XHRcbjcyMjM6XHRcdHU4IGFkZHJlc3NbRVRIX0FMRU5dIF9fYWxpZ25lZChzaXplb2YodTE2KSk7XG43MjI0Olx0XG43MjI1Olx0XHQvKiBjdXJyZW50bHkgdXNlZCBmb3IgSUJTUyBhbmQgU01FIC0gbWlnaHQgYmUgcmVhcnJhbmdlZCBsYXRlciAqL1xuNzIyNjpcdFx0c3RydWN0IGNmZzgwMjExX2Nvbm4gKmNvbm47XG43MjI3Olx0XHRzdHJ1Y3QgY2ZnODAyMTFfY2FjaGVkX2tleXMgKmNvbm5lY3Rfa2V5cztcbjcyMjg6XHRcdGVudW0gaWVlZTgwMjExX2Jzc190eXBlIGNvbm5fYnNzX3R5cGU7XG43MjI5Olx0XHR1MzIgY29ubl9vd25lcl9ubHBvcnRpZDtcbjcyMzA6XHRcbjcyMzE6XHRcdHN0cnVjdCB3aXBoeV93b3JrIGRpc2Nvbm5lY3Rfd2s7XG43MjMyOlx0XHR1OCBkaXNjb25uZWN0X2Jzc2lkW0VUSF9BTEVOXTtcbjcyMzM6XHRcbjcyMzQ6XHRcdHN0cnVjdCBsaXN0X2hlYWQgZXZlbnRfbGlzdDtcbjcyMzU6XHRcdHNwaW5sb2NrX3QgZXZlbnRfbG9jaztcbjcyMzY6XHRcbjcyMzc6XHRcdHU4IGNvbm5lY3RlZDoxO1xuNzIzODpcdFxuNzIzOTpcdFx0Ym9vbCBwcztcbjcyNDA6XHRcdGludCBwc190aW1lb3V0O1xuNzI0MTpcdFxuNzI0MjpcdFx0dTMyIHVuZXhwZWN0ZWRfbmxwb3J0aWQ7XG43MjQzOlx0XG43MjQ0Olx0XHR1MzIgb3duZXJfbmxwb3J0aWQ7XG43MjQ1Olx0XHRib29sIG5sX293bmVyX2RlYWQ7XG43MjQ2Olx0XG43MjQ3Olx0I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG43MjQ4Olx0XHQvKiB3ZXh0IGRhdGEgKi9cbjcyNDk6XHRcdHN0cnVjdCB7XG43MjUwOlx0XHRcdHN0cnVjdCBjZmc4MDIxMV9pYnNzX3BhcmFtcyBpYnNzO1xuNzI1MTpcdFx0XHRzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgY29ubmVjdDtcbjcyNTI6XHRcdFx0c3RydWN0IGNmZzgwMjExX2NhY2hlZF9rZXlzICprZXlzO1xuNzI1MzpcdFx0XHRjb25zdCB1OCAqaWU7XG43MjU0Olx0XHRcdHNpemVfdCBpZV9sZW47XG43MjU1Olx0XHRcdHU4IGJzc2lkW0VUSF9BTEVOXTtcbjcyNTY6XHRcdFx0dTggcHJldl9ic3NpZFtFVEhfQUxFTl07XG43MjU3Olx0XHRcdHU4IHNzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTl07XG43MjU4Olx0XHRcdHM4IGRlZmF1bHRfa2V5LCBkZWZhdWx0X21nbXRfa2V5O1xuNzI1OTpcdFx0XHRib29sIHByZXZfYnNzaWRfdmFsaWQ7XG43MjYwOlx0XHR9IHdleHQ7XG43MjYxOlx0I2VuZGlmXG43MjYyOlx0XG43MjYzOlx0XHRzdHJ1Y3Qgd2lwaHlfd29yayBjcW1fcnNzaV93b3JrO1xuNzI2NDpcdFx0c3RydWN0IGNmZzgwMjExX2NxbV9jb25maWcgX19yY3UgKmNxbV9jb25maWc7XG43MjY1Olx0XG43MjY2Olx0XHRzdHJ1Y3QgbGlzdF9oZWFkIHBtc3JfbGlzdDtcbjcyNjc6XHRcdHNwaW5sb2NrX3QgcG1zcl9sb2NrO1xuNzI2ODpcdFx0c3RydWN0IHdpcGh5X3dvcmsgcG1zcl9mcmVlX3drO1xuNzI2OTpcdFxuNzI3MDpcdFx0dW5zaWduZWQgbG9uZyB1bnByb3RfYmVhY29uX3JlcG9ydGVkO1xuNzI3MTpcdFxuNzI3MjpcdFx0dW5pb24ge1xuNzI3MzpcdFx0XHRzdHJ1Y3Qge1xuNzI3NDpcdFx0XHRcdHU4IGNvbm5lY3RlZF9hZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7XG43Mjc1Olx0XHRcdFx0dTggc3NpZFtJRUVFODAyMTFfTUFYX1NTSURfTEVOXTtcbjcyNzY6XHRcdFx0XHR1OCBzc2lkX2xlbjtcbjcyNzc6XHRcdFx0fSBjbGllbnQ7XG43Mjc4Olx0XHRcdHN0cnVjdCB7XG43Mjc5Olx0XHRcdFx0aW50IGJlYWNvbl9pbnRlcnZhbDtcbjcyODA6XHRcdFx0XHRzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgcHJlc2V0X2NoYW5kZWY7XG43MjgxOlx0XHRcdFx0c3RydWN0IGNmZzgwMjExX2NoYW5fZGVmIGNoYW5kZWY7XG43MjgyOlx0XHRcdFx0dTggaWRbSUVFRTgwMjExX01BWF9NRVNIX0lEX0xFTl07XG43MjgzOlx0XHRcdFx0dTggaWRfbGVuLCBpZF91cF9sZW47XG43Mjg0Olx0XHRcdH0gbWVzaDtcbjcyODU6XHRcdFx0c3RydWN0IHtcbjcyODY6XHRcdFx0XHRzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgcHJlc2V0X2NoYW5kZWY7XG43Mjg3Olx0XHRcdFx0dTggc3NpZFtJRUVFODAyMTFfTUFYX1NTSURfTEVOXTtcbjcyODg6XHRcdFx0XHR1OCBzc2lkX2xlbjtcbjcyODk6XHRcdFx0fSBhcDtcbjcyOTA6XHRcdFx0c3RydWN0IHtcbjcyOTE6XHRcdFx0XHRzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpjdXJyZW50X2JzcztcbjcyOTI6XHRcdFx0XHRzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgY2hhbmRlZjtcbjcyOTM6XHRcdFx0XHRpbnQgYmVhY29uX2ludGVydmFsO1xuNzI5NDpcdFx0XHRcdHU4IHNzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTl07XG43Mjk1Olx0XHRcdFx0dTggc3NpZF9sZW47XG43Mjk2Olx0XHRcdH0gaWJzcztcbjcyOTc6XHRcdFx0c3RydWN0IHtcbjcyOTg6XHRcdFx0XHRzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgY2hhbmRlZjtcbjcyOTk6XHRcdFx0fSBvY2I7XG43MzAwOlx0XHRcdHN0cnVjdCB7XG43MzAxOlx0XHRcdFx0dTggY2x1c3Rlcl9pZFtFVEhfQUxFTl0gX19hbGlnbmVkKDIpO1xuNzMwMjpcdFx0XHRcdHU4IG5fY2hhbm5lbHM7XG43MzAzOlx0XHRcdFx0c3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmcztcbjczMDQ6XHRcdFx0XHRib29sIHNjaGVkX3VwZGF0ZV9wZW5kaW5nO1xuNzMwNTpcdFx0XHR9IG5hbjtcbjczMDY6XHRcdH0gdTtcbjczMDc6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjMyMQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlIHdlIGdvLiBIZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyB0aGUgcHJvdmlkZWQgdGV4dCBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzOgoKKipNaXNzaW5nIFZhcmlhYmxlPyBUaW1lIHRvIEludmVzdGlnYXRlLioqCgpIbW0sIHNvbWV0aGluZyBzZWVtcyBvZmYuIEkgd2FzIGV4cGVjdGluZyB0byBzZWUgYHZhbGlkX2xpbmtzYCBkZWZpbmVkIGluIHRoaXMgY29udGV4dCwgYnV0IGl0JiMzOTtzIG5vdCBpbW1lZGlhdGVseSBhcHBhcmVudC4gVGhhdCYjMzk7cyBhIHJlZCBmbGFnLiBCZWZvcmUganVtcGluZyB0byBjb25jbHVzaW9ucywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbi4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgYW5kIGdldCBtb3JlIGNvbnRleHQuIEkmIzM5O2xsIHJlYWQgZnVydGhlciB0byBzZWUgd2hlcmUgYHZhbGlkX2xpbmtzYCBtaWdodCBiZSwgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQsIG9yIGlmIGl0IGhhcyBhbm90aGVyIG5hbWUgYWx0b2dldGhlci4gQSBxdWljayBzY2FuIHdvbiYjMzk7dCBkbzsgSSBuZWVkIHRoZSBmdWxsIHBpY3R1cmUgYmVmb3JlIEkgbWFrZSBhbnkganVkZ21lbnRzLiBUaGUgY29kZSYjMzk7cyBwcm9iYWJseSBqdXN0IG5vdCBvYnZpb3VzIGZyb20gdGhpcyBvbmUgc25pcHBldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9jZmc4MDIxMS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzMwOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NzMwODpcdFx0c3RydWN0IHtcbjczMDk6XHRcdFx0dTggYWRkcltFVEhfQUxFTl0gX19hbGlnbmVkKDIpO1xuNzMxMDpcdFx0XHR1bmlvbiB7XG43MzExOlx0XHRcdFx0c3RydWN0IHtcbjczMTI6XHRcdFx0XHRcdHVuc2lnbmVkIGludCBiZWFjb25faW50ZXJ2YWw7XG43MzEzOlx0XHRcdFx0XHRzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgY2hhbmRlZjtcbjczMTQ6XHRcdFx0XHR9IGFwO1xuNzMxNTpcdFx0XHRcdHN0cnVjdCB7XG43MzE2Olx0XHRcdFx0XHRzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpjdXJyZW50X2JzcztcbjczMTc6XHRcdFx0XHR9IGNsaWVudDtcbjczMTg6XHRcdFx0fTtcbjczMTk6XHRcbjczMjA6XHRcdFx0Ym9vbCBjYWNfc3RhcnRlZDtcbjczMjE6XHRcdFx0dW5zaWduZWQgbG9uZyBjYWNfc3RhcnRfdGltZTtcbjczMjI6XHRcdFx0dW5zaWduZWQgaW50IGNhY190aW1lX21zO1xuNzMyMzpcdFx0fSBsaW5rc1tJRUVFODAyMTFfTUxEX01BWF9OVU1fTElOS1NdO1xuNzMyNDpcdFx0dTE2IHZhbGlkX2xpbmtzO1xuNzMyNTpcdFxuNzMyNjpcdFx0dTMyIHJhZGlvX21hc2s7XG43MzI3Olx0fTtcbjczMjg6XHRcbjczMjk6XHRzdGF0aWMgaW5saW5lIGNvbnN0IHU4ICp3ZGV2X2FkZHJlc3Moc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldilcbjczMzA6XHR7XG43MzMxOlx0XHRpZiAod2Rldi1cdTAwM2VuZXRkZXYpXG43MzMyOlx0XHRcdHJldHVybiB3ZGV2LVx1MDAzZW5ldGRldi1cdTAwM2VkZXZfYWRkcjtcbjczMzM6XHRcdHJldHVybiB3ZGV2LVx1MDAzZWFkZHJlc3M7XG43MzM0Olx0fVxuNzMzNTpcdFxuNzMzNjpcdHN0YXRpYyBpbmxpbmUgYm9vbCB3ZGV2X3J1bm5pbmcoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldilcbjczMzc6XHR7XG43MzM4Olx0XHRpZiAod2Rldi1cdTAwM2VuZXRkZXYpXG43MzM5Olx0XHRcdHJldHVybiBuZXRpZl9ydW5uaW5nKHdkZXYtXHUwMDNlbmV0ZGV2KTtcbjczNDA6XHRcdHJldHVybiB3ZGV2LVx1MDAzZWlzX3J1bm5pbmc7XG43MzQxOlx0fVxuNzM0MjpcdFxuNzM0MzpcdC8qKlxuNzM0NDpcdCAqIHdkZXZfcHJpdiAtIHJldHVybiB3aXBoeSBwcml2IGZyb20gd2lyZWxlc3NfZGV2XG43MzQ1Olx0ICpcbjczNDY6XHQgKiBAd2RldjogVGhlIHdpcmVsZXNzIGRldmljZSB3aG9zZSB3aXBoeSYjMzk7cyBwcml2IHBvaW50ZXIgdG8gcmV0dXJuXG43MzQ3Olx0ICogUmV0dXJuOiBUaGUgd2lwaHkgcHJpdiBvZiBAd2Rldi5cbjczNDg6XHQgKi9cbjczNDk6XHRzdGF0aWMgaW5saW5lIHZvaWQgKndkZXZfcHJpdihzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxuNzM1MDpcdHtcbjczNTE6XHRcdEJVR19PTighd2Rldik7XG43MzUyOlx0XHRyZXR1cm4gd2lwaHlfcHJpdih3ZGV2LVx1MDAzZXdpcGh5KTtcbjczNTM6XHR9XG43MzU0Olx0XG43MzU1Olx0LyoqXG43MzU2Olx0ICogd2Rldl9jaGFuZGVmIC0gcmV0dXJuIGNoYW5kZWYgcG9pbnRlciBmcm9tIHdpcmVsZXNzX2RldlxuNzM1NzpcdCAqIEB3ZGV2OiB0aGUgd2RldlxuNzM1ODpcdCAqIEBsaW5rX2lkOiB0aGUgbGluayBJRCBmb3IgTUxPXG43MzU5Olx0ICpcbjczNjA6XHQgKiBSZXR1cm46IFRoZSBjaGFuZGVmIGRlcGVuZGluZyBvbiB0aGUgbW9kZSwgb3IgJU5VTEwuXG43MzYxOlx0ICovXG43MzYyOlx0c3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICp3ZGV2X2NoYW5kZWYoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbjczNjM6XHRcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgbGlua19pZCk7XG43MzY0Olx0XG43MzY1Olx0c3RhdGljIGlubGluZSB2b2lkIFdBUk5fSU5WQUxJRF9MSU5LX0lEKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG43MzY2Olx0XHRcdFx0XHRcdHVuc2lnbmVkIGludCBsaW5rX2lkKVxuNzM2NzpcdHtcbjczNjg6XHRcdFdBUk5fT04obGlua19pZCBcdTAwMjZcdTAwMjYgIXdkZXYtXHUwMDNldmFsaWRfbGlua3MpO1xuNzM2OTpcdFx0V0FSTl9PTih3ZGV2LVx1MDAzZXZhbGlkX2xpbmtzIFx1MDAyNlx1MDAyNlxuNzM3MDpcdFx0XHQhKHdkZXYtXHUwMDNldmFsaWRfbGlua3MgXHUwMDI2IEJJVChsaW5rX2lkKSkpO1xuNzM3MTpcdH1cbjczNzI6XHRcbjczNzM6XHQjZGVmaW5lIGZvcl9lYWNoX3ZhbGlkX2xpbmsobGlua19pbmZvLCBsaW5rX2lkKVx0XHRcdFxcXG43Mzc0Olx0XHRmb3IgKGxpbmtfaWQgPSAwO1x0XHRcdFx0XHRcXFxuNzM3NTpcdFx0ICAgICBsaW5rX2lkIFx1MDAzYyAoKGxpbmtfaW5mbyktXHUwMDNldmFsaWRfbGlua3MgP1x0XHRcXFxuNzM3NjpcdFx0XHRcdEFSUkFZX1NJWkUoKGxpbmtfaW5mbyktXHUwMDNlbGlua3MpIDogMSk7XHRcXFxuNzM3NzpcdFx0ICAgICBsaW5rX2lkJiM0MzsmIzQzOylcdFx0XHRcdFx0XHRcXFxuNzM3ODpcdFx0XHRpZiAoIShsaW5rX2luZm8pLVx1MDAzZXZhbGlkX2xpbmtzIHx8XHRcdFxcXG43Mzc5Olx0XHRcdCAgICAoKGxpbmtfaW5mbyktXHUwMDNldmFsaWRfbGlua3MgXHUwMDI2IEJJVChsaW5rX2lkKSkpXG43MzgwOlx0XG43MzgxOlx0LyoqXG43MzgyOlx0ICogRE9DOiBVdGlsaXR5IGZ1bmN0aW9uc1xuNzM4MzpcdCAqXG43Mzg0Olx0ICogY2ZnODAyMTEgb2ZmZXJzIGEgbnVtYmVyIG9mIHV0aWxpdHkgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWZ1bC5cbjczODU6XHQgKi9cbjczODY6XHRcbjczODc6XHQvKipcbjczODg6XHQgKiBpZWVlODAyMTFfY2hhbm5lbF9lcXVhbCAtIGNvbXBhcmUgdHdvIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbFxuNzM4OTpcdCAqXG43MzkwOlx0ICogQGE6IDFzdCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWxcbjczOTE6XHQgKiBAYjogMm5kIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbFxuNzM5MjpcdCAqIFJldHVybjogdHJ1ZSBpZiBjZW50ZXIgZnJlcXVlbmN5IG9mIEBhID09IEBiXG43MzkzOlx0ICovXG43Mzk0Olx0c3RhdGljIGlubGluZSBib29sXG43Mzk1Olx0aWVlZTgwMjExX2NoYW5uZWxfZXF1YWwoc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICphLFxuNzM5NjpcdFx0XHRcdHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqYilcbjczOTc6XHR7XG43Mzk4Olx0XHRyZXR1cm4gKGEtXHUwMDNlY2VudGVyX2ZyZXEgPT0gYi1cdTAwM2VjZW50ZXJfZnJlcSBcdTAwMjZcdTAwMjZcbjczOTk6XHRcdFx0YS1cdTAwM2VmcmVxX29mZnNldCA9PSBiLVx1MDAzZWZyZXFfb2Zmc2V0KTtcbjc0MDA6XHR9XG43NDAxOlx0XG43NDAyOlx0LyoqXG43NDAzOlx0ICogaWVlZTgwMjExX2NoYW5uZWxfdG9fa2h6IC0gY29udmVydCBpZWVlODAyMTFfY2hhbm5lbCB0byBmcmVxdWVuY3kgaW4gS0h6XG43NDA0Olx0ICogQGNoYW46IHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCB0byBjb252ZXJ0XG43NDA1Olx0ICogUmV0dXJuOiBUaGUgY29ycmVzcG9uZGluZyBmcmVxdWVuY3kgKGluIEtIeilcbjc0MDY6XHQgKi9cbjc0MDc6XHRzdGF0aWMgaW5saW5lIHUzMlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDM5CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVGhpbmtpbmcgVGhyb3VnaCBMaW5rIE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgSSBzZWUgYHZhbGlkX2xpbmtzYCBkZWNsYXJlZCBhcyBhIGB1MTZgLiBTZWVtcyBzdGFuZGFyZCBlbm91Z2g7IHVzaW5nIGEgMTYtYml0IHVuc2lnbmVkIGludGVnZXIgdG8gcmVwcmVzZW50IGEgY291bnQgb3IgYW4gaW5kZXggaXMgcHJldHR5IGNvbW1vbiBhbmQgcHJvYmFibHkgZWZmaWNpZW50IGZvciB3aGF0ZXZlciB0aGlzIGFwcGxpY2F0aW9uIGlzLiBUaGVuLCBJIHNlZSBgbGlua3NgIGlzIGFuIGFycmF5IGFuZCBpdHMgc2l6ZSBpcyBkZWZpbmVkIGJ5IGBJRUVFODAyMTFfTUxEX01BWF9OVU1fTElOS1NgLiBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24gbm93OiBXaGF0IGV4YWN0bHkgKmlzKiBgSUVFRTgwMjExX01MRF9NQVhfTlVNX0xJTktTYD8gSSBuZWVkIHRvIGtub3cgdGhlIG1heGltdW0gbnVtYmVyIG9mIGxpbmtzIHRoaXMgc3lzdGVtIGlzIGRlc2lnbmVkIHRvIGhhbmRsZS4gVGhhdCB2YWx1ZSBpcyBjcnVjaWFsOyBpdCBkaWN0YXRlcyB0aGUgdXBwZXIgYm91bmQgZm9yIHdoYXQgY2FuIGJlIHN0b3JlZCBpbiB0aGUgYGxpbmtzYCBhcnJheS4gV2l0aG91dCBrbm93aW5nIHRoYXQgY29uc3RhbnQsIEkgY2FuJiMzOTt0IGRldGVybWluZSB0aGUgbWVtb3J5IGZvb3RwcmludCwgb3IgYXNzZXNzIGhvdyBlZmZpY2llbnRseSB0aGUgc3lzdGVtIHdpbGwgYmVoYXZlIHVuZGVyIGhlYXZ5IGxvYWQuIEkmIzM5O20gZ29pbmcgdG8gdHJhY2sgdGhhdCBkb3duIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBJRUVFODAyMTFfTUxEX01BWF9OVU1fTElOS1MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2llZWU4MDIxMS1laHQuaD00NDU9ZW51bSBpZWVlODAyMTFfcHJvdGVjdGVkX2VodF9hY3Rpb25jb2RlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS1laHQuaC00NjEtLyogbXVsdGktbGluayBkZXZpY2UgKi9cbmluY2x1ZGUvbGludXgvaWVlZTgwMjExLWVodC5oOjQ2MjojZGVmaW5lIElFRUU4MDIxMV9NTERfTUFYX05VTV9MSU5LU1x0MTVcbmluY2x1ZGUvbGludXgvaWVlZTgwMjExLWVodC5oLTQ2My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ5MQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDEyNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBPdXQtb2YtQm91bmRzIFJlYWQgaW4gV2lyZWxlc3MgRGV2aWNlIExpbmsgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIHdpcmVsZXNzIGRyaXZlciBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgYGxpbmtfaWRgIGlzIGxpbWl0ZWQgdG8gMTUgd2hlbiBgd2Rldi0mZ3Q7dmFsaWRfbGlua3NgIGlzIHVzZWQgYmVjYXVzZSBvZiB0aGUgYEJJVChsaW5rX2lkKWAgY2hlY2ssIHJpZ2h0PyAgQnV0IHRoZW4gSSByZW1lbWJlcmVkIHRoYXQgYEJJVGAgdXNlcyBhbiB1bnNpZ25lZCBsb25nLCB3aGljaCBjYW4gaGFuZGxlIHNoaWZ0cyB1cCB0byA2Mywgbm90IGp1c3QgMzIuIFNvIGEgYGxpbmtfaWRgIG9mIDE2IG1lYW5zIGBCSVQoMTYpYCBpcyBgMHgxMDAwMGAuIFNpbmNlIGB2YWxpZF9saW5rc2AgaXMgYSBgdTE2YCwgdGhlIGJpdHdpc2UgQU5EIG9wZXJhdGlvbiBgdmFsaWRfbGlua3MgJmFtcDsgQklUKDE2KWAgd291bGQgYWx3YXlzIHJlc3VsdCBpbiB6ZXJvLiBDb25zZXF1ZW50bHksIHRoZSBmdW5jdGlvbiB3b3VsZCByZXR1cm4gYC1FTk9MSU5LYC4KClRoZW4gaXQgaGl0IG1lOiB0aGUgUkVBTCBidWcgaXMgdGhhdCB0aGUgYGxpbmtfaWRgIGlzIHVzZWQgdG8gaW5kZXggdGhlIGB3ZGV2LSZndDtsaW5rc2AgYXJyYXksIHdoaWNoIG9ubHkgaGFzIGEgc2l6ZSBvZiAxNSEgQmVmb3JlIHRoZSBwYXRjaCwgdGhlIGBsaW5rX2lkYCB3YXNuJiMzOTt0IHZhbGlkYXRlZCAqYmVmb3JlKiB0aGUgc3dpdGNoIHN0YXRlbWVudC4gSW5zdGVhZCwgdGhlIHZhbGlkYXRpb24gY2FtZSBsYXRlciBpbiB0aGUgZnVuY3Rpb24sIEFGVEVSIHRoZSBhcnJheSBpbmRleCB3YXMgYmVpbmcgdXNlZC4KClRoZSBjb2RlIHJldmVhbHMgdGhlIHByb2JsZW06IHdoZW4gYHdkZXYtJmd0O3ZhbGlkX2xpbmtzYCBpcyB6ZXJvLCBgbGlua19pZGAgaXMgemVyby4gV2hlbiBgd2Rldi0mZ3Q7dmFsaWRfbGlua3NgIGlzIG5vdCB6ZXJvLCBgbGlua19pZGAgYmVjb21lcyBgcGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkYC4gSW1wb3J0YW50bHksIGJlZm9yZSB0aGUgcGF0Y2gsIHRoZXJlIHdhcyBubyB2YWxpZGF0aW9uIG9mIGBwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWRgICpiZWZvcmUqIGl0IHdhcyB1c2VkIHRvIGluZGV4IHRoZSBhcnJheS4gVGhlIHZhbGlkYXRpb24gd2FzIGRvbmUgYXQgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24sIHRvbyBsYXRlLiBTbyBgbGlua19pZGAgY291bGQgYmUgYW55dGhpbmchIEl0JiMzOTtzIHBhcnNlZCBmcm9tIGBpbmZvLSZndDthdHRyc2AgdmlhIGBubDgwMjExX2xpbmtfaWRfb3JfaW52YWxpZChpbmZvLSZndDthdHRycylgLiBJZiBpdCYjMzk7cyBpbnZhbGlkLCBpdCYjMzk7cyAtMS4gSWYgaXQmIzM5O3MgdmFsaWQsIGl0JiMzOTtzIGEgYHU4YCwgd2hpY2ggbWVhbnMgaXQgY2FuIGJlIGFueXRoaW5nIGZyb20gMCB0byAyNTUuCgpTbyBpZiBgbGlua19pZGAgaXMgdXAgdG8gMjU1LCB1c2luZyBpdCB0byBpbmRleCBgd2Rldi0mZ3Q7bGlua3NbbGlua19pZF1gIHdpbGwgY2F1c2UgYW4gb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3MhIGB3ZGV2LSZndDtsaW5rc2AgaXMgc2l6ZSAxNSEgVGhpcyBpcyBhIHRleHRib29rIG91dC1vZi1ib3VuZHMgcmVhZCEKClRoZSBjb2RlIHJlYWRzIHRoZSBgYmVhY29uX2ludGVydmFsYCBmaWVsZDogYGlmICghd2Rldi0mZ3Q7bGlua3NbbGlua19pZF0uYXAuYmVhY29uX2ludGVydmFsKWAuIEFuZCBzaW5jZSBgc3RydWN0IHdpcmVsZXNzX2RldmAgaXMgdXN1YWxseSBhbGxvY2F0ZWQgb24gdGhlIGhlYXAgKHBlcmhhcHMgYXMgcGFydCBvZiBgc3RydWN0IG5ldF9kZXZpY2VgIG9yIHNpbWlsYXIsIG9yIGJ5IGBremFsbG9jYCksIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBjb3VsZCBwb3RlbnRpYWxseSBsZWFkIHRvIHJlYWRpbmcgb3RoZXIgaGVhcCBkYXRhLCBhbHRob3VnaCwgaW4gdGhpcyBjYXNlLCBpdCYjMzk7cyBqdXN0IGNoZWNraW5nIGlmIGl0JiMzOTtzIHplcm8uIElmIGl0JiMzOTtzIHplcm8sIGl0IHJldHVybnMgYC1FTkVURE9XTmA7IG90aGVyd2lzZSwgaXQgY29udGludWVzLgoKVGhhbmtmdWxseSwgdGhpcyBpcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQsIGFuZCBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBzaG91bGQgY2F0Y2ggaXQuIEl0IGRldGVjdHMgZXhhY3RseSB0aGVzZSB0eXBlcyBvZiBtZW1vcnkgdmlvbGF0aW9ucy4gSSBkb24mIzM5O3QgdGhpbmsgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYSBwcmltYXJ5IGlzc3VlIGhlcmU7IGl0JiMzOTtzIHRoZSBvdXQtb2YtYm91bmRzIHJlYWQgaXRzZWxmLgoKV2FpdCwgd2hhdCBpZiBgbGlua19pZGAgaXMgbmVnYXRpdmU/IFNpbmNlIGBwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWRgIGlzIGFuIGBpbnRgLCBpZiBpdCYjMzk7cyAtMSAoaW52YWxpZCksIGFuZCBpZiBgd2Rldi0mZ3Q7dmFsaWRfbGlua3NgIGlzIG5vdCB6ZXJvLCB0aGVuIGBsaW5rX2lkYCBiZWNvbWVzIC0xLiBUaGUgc3Vic2VxdWVudCBhY2Nlc3MgYHdkZXYtJmd0O2xpbmtzWy0xXWAgaXMgYW5vdGhlciBvdXQtb2YtYm91bmRzIHJlYWQsIHRoaXMgdGltZSBhbiB1bmRlcmZsb3cuIEtBU0FOIGNhdGNoZXMgaXQuCgpUaGUgcGF0Y2ggZml4ZXMgdGhpcyBieSBtb3ZpbmcgdGhlIHZhbGlkYXRpb24gb2YgYGxpbmtfaWRgICpiZWZvcmUqIHRoZSBzd2l0Y2ggc3RhdGVtZW50LiBTbyBub3cgYGxpbmtfaWRgIGlzIHZhbGlkYXRlZCB0byBiZSBgJmd0Oz0gMGAgYW5kIGBCSVQobGlua19pZClgIGlzIGluIGB2YWxpZF9saW5rc2AuIFNpbmNlIGB2YWxpZF9saW5rc2AgaXMgYSBgdTE2YCwgYEJJVChsaW5rX2lkKWAgY2FuIG9ubHkgYmUgbm9uLXplcm8gaWYgYGxpbmtfaWRgIGlzIGxlc3MgdGhhbiAxNi4gU28gYGxpbmtfaWRgIGlzIG5vdyBib3VuZCBmcm9tIDAgdG8gMTUuIFRoaXMgcGVyZmVjdGx5IGFkZHJlc3NlcyB0aGUgb3V0LW9mLWJvdW5kcyByZWFkLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkgbmVlZCB0byBjaGVjayBpZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnZvbHZlZC4gSXMgdGhlIGBwYXJhbXNgIHZhcmlhYmxlIGluaXRpYWxpemVkPyBgcGFyYW1zYCBpcyBhIGxvY2FsIHZhcmlhYmxlOiBgc3RydWN0IHN0YXRpb25fcGFyYW1ldGVycyBwYXJhbXM7YC4gQW5kIEkgbmVlZCB0byBrbm93IHdoZXRoZXIgdGhlIHZhcmlhYmxlIGlzIGluaXRpYWxpemVkLiBJIHRoaW5rIEkgaGF2ZSBhY2NvdW50ZWQgZm9yIGFsbCBzY2VuYXJpb3Mgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9ubDgwMjExLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MTc0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzkxNzQ6XHRzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbjkxNzU6XHR7XG45MTc2Olx0XHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzBdO1xuOTE3NzpcdFx0aW50IGVyciwgbGlua19pZDtcbjkxNzg6XHRcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzFdO1xuOTE3OTpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHdkZXYtXHUwMDNlbmV0ZGV2O1xuOTE4MDpcdFx0c3RydWN0IHN0YXRpb25fcGFyYW1ldGVycyBwYXJhbXM7XG45MTgxOlx0XHR1OCAqbWFjX2FkZHIgPSBOVUxMO1xuOTE4MjpcdFx0dTMyIGF1dGhfYXNzb2MgPSBCSVQoTkw4MDIxMV9TVEFfRkxBR19BVVRIRU5USUNBVEVEKSB8XG45MTgzOlx0XHRcdFx0IEJJVChOTDgwMjExX1NUQV9GTEFHX0FTU09DSUFURUQpO1xuOTE4NDpcdFxuOTE4NTpcdFx0bWVtc2V0KFx1MDAyNnBhcmFtcywgMCwgc2l6ZW9mKHBhcmFtcykpO1xuOTE4NjpcdFxuOTE4NzpcdFx0aWYgKCFkZXYgXHUwMDI2XHUwMDI2IHdkZXYtXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX05BTilcbjkxODg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG45MTg5Olx0XG45MTkwOlx0XHRpZiAoIXJkZXYtXHUwMDNlb3BzLVx1MDAzZWFkZF9zdGF0aW9uKVxuOTE5MTpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG45MTkyOlx0XG45MTkzOlx0XHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pXG45MTk0Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuOTE5NTpcdFxuOTE5NjpcdFx0aWYgKHdkZXYtXHUwMDNlaWZ0eXBlID09IE5MODAyMTFfSUZUWVBFX05BTiB8fFxuOTE5NzpcdFx0ICAgIHdkZXYtXHUwMDNlaWZ0eXBlID09IE5MODAyMTFfSUZUWVBFX05BTl9EQVRBKSB7XG45MTk4Olx0XHRcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfU1VQUE9SVEVEX1JBVEVTXSlcbjkxOTk6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjkyMDA6XHRcdFx0aWYgKHdkZXYtXHUwMDNlaWZ0eXBlID09IE5MODAyMTFfSUZUWVBFX05BTl9EQVRBKSB7XG45MjAxOlx0XHRcdFx0aWYgKCFpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9OQU5fTk1JX01BQ10pXG45MjAyOlx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjkyMDM6XHRcbjkyMDQ6XHRcdFx0XHQvKiBPbmx5IE5NSSBzdGF0aW9ucyByZWNlaXZlIHRoZSBIVC9WSFQvSEUgY2FwYWJpbGl0aWVzICovXG45MjA1Olx0XHRcdFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0hUX0NBUEFCSUxJVFldIHx8XG45MjA2Olx0XHRcdFx0ICAgIGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1ZIVF9DQVBBQklMSVRZXSB8fFxuOTIwNzpcdFx0XHRcdCAgICBpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9IRV9DQVBBQklMSVRZXSlcbjkyMDg6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuOTIwOTpcdFx0XHR9XG45MjEwOlx0XHR9IGVsc2Uge1xuOTIxMTpcdFx0XHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9MSVNURU5fSU5URVJWQUxdKVxuOTIxMjpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuOTIxMzpcdFxuOTIxNDpcdFx0XHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9TVVBQT1JURURfUkFURVNdKVxuOTIxNTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuOTIxNjpcdFxuOTIxNzpcdFx0XHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9BSURdIFx1MDAyNlx1MDAyNlxuOTIxODpcdFx0XHQgICAgIWluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1BFRVJfQUlEXSlcbjkyMTk6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjkyMjA6XHRcdH1cbjkyMjE6XHRcbjkyMjI6XHRcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19pZCA9XG45MjIzOlx0XHRcdG5sODAyMTFfbGlua19pZF9vcl9pbnZhbGlkKGluZm8tXHUwMDNlYXR0cnMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY2NQoJCQkJCQkJb3V0cHV0OiAyMzEKCQkJCQkJCXRob3VnaHRzOiA1MTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBTZXNzaW9uIE5vdCBOZWVkZWQqKgoKT2theSwgc28gaGVyZSYjMzk7cyB0aGUgYnJlYWtkb3duIG9mIG15IHRoaW5raW5nLiBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IGFkZHJlc3NlcyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5LiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNvbnNpZGVyIEtNU0FOLCBidXQgbGV0JiMzOTtzIGJlIG1ldGhvZGljYWwuCgpGaXJzdCwgSSBzZWUgYHBhcmFtc2AgaXMgaW5pdGlhbGl6ZWQgd2l0aCBgbWVtc2V0YCwgc28gdGhlcmUmIzM5O3MgYWJzb2x1dGVseSBubyBpc3N1ZSB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmUuIFRoYXQgcnVsZXMgb3V0IG9uZSBwb3RlbnRpYWwgYXJlYSB3aGVyZSBLTVNBTiBzaGluZXMuCgpUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBib2lscyBkb3duIHRvIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBmcm9tIGB3ZGV2LSZndDtsaW5rc1tsaW5rX2lkXWAuIFRoaXMgaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIHRoaW5nIEtBU0FOIGlzIGJ1aWx0IHRvIGNhdGNoLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhY2Nlc3NpbmcgbWVtb3J5IG91dHNpZGUgdGhlIGFsbG9jYXRlZCBib3VuZGFyaWVzIG9mIGFuIGFycmF5LCB3aGljaCBpcyBhIGNsYXNzaWMgS0FTQU4gc2NlbmFyaW8uCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBLTVNBTiB2cy4gS0FTQU4gcnVsZXM6IEtBU0FOIG5haWxzIGRvd24gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgdXNlLWFmdGVyLWZyZWUsIHdoaWxlIEtNU0FOIGZvY3VzZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYW5kIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MuIFRoaXMgdnVsbmVyYWJpbGl0eSBkb2VzbiYjMzk7dCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGEgd2F5IEtBU0FOIG1pc3Nlcywgbm9yIGlzIHRoZXJlIGEga2VybmVsIGluZm9ybWF0aW9uIGxlYWsuIEl0JiMzOTtzIGEgc3RyYWlnaHQtdXAgaW5kZXggb3V0IG9mIGJvdW5kcy4KCkluIG15IHZpZXcsIEtBU0FOIHdpbGwgZGV0ZWN0IHRoaXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3MganVzdCBmaW5lLiBUaGUgcGF0Y2gmIzM5O3MgaW1wYWN0IGlzIHRoYXQgaXQgZml4ZXMgYSBzaXR1YXRpb24gd2hlcmUgYGxpbmtfaWRgIGlzIG5vdCB2YWxpZGF0ZWQgYW5kIGNhbiBiZSB1c2VkIHRvIHJlYWQgYmV5b25kIHRoZSBib3VuZGFyaWVzIG9mIHRoZSBgd2Rldi0mZ3Q7bGlua3NgIGFycmF5LiBObyBgSUVFRTgwMjExX01MRF9NQVhfTlVNX0xJTktTYCBjaGVjayBvciBuZWdhdGl2ZSB2YWx1ZSBjaGVjayBvbiBsaW5rX2lkLiBUaGlzIGlzIGEgY2xhc3NpYyBleGFtcGxlIG9mIGFuIG91dC1vZi1ib3VuZHMgcmVhZC4gVGhlIGZhY3QgdGhhdCBgcGFyYW1zYCBpcyBmdWxseSBpbml0aWFsaXplZCBtYWtlcyB0aGlzIGV2ZW4gbW9yZSBjbGVhci4KCk15IGNvbmNsdXNpb24/IFRoZXJlJiMzOTtzIG5vIHZhbHVlIGluIGRlZGljYXRpbmcgdGltZSB0byBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBoZXJlLiBLQVNBTiBpcyB0aGUgcmlnaHQgdG9vbCBmb3IgdGhlIGpvYi4gTm8gTmVlZCBmb3IgS01TQU4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB2dWxuZXJhYmlsaXR5IGluIGBubDgwMjExX25ld19zdGF0aW9uKClgLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgYGxpbmtfaWRgIGV4dHJhY3RlZCBmcm9tIG5ldGxpbmsgYXR0cmlidXRlcyB3YXMgbm90IHZhbGlkYXRlZCBhZ2FpbnN0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBsaW5rcyBvciBjaGVja2VkIGZvciBuZWdhdGl2ZSB2YWx1ZXMgYmVmb3JlIGJlaW5nIHVzZWQgYXMgYW4gaW5kZXggdG8gYWNjZXNzIHRoZSBgd2Rldi1cdTAwM2VsaW5rc1tsaW5rX2lkXWAgYXJyYXkuIFRoaXMgYWxsb3dlZCBhbiBhdHRhY2tlciB0byB0cmlnZ2VyIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB3aGVuIGNoZWNraW5nIGB3ZGV2LVx1MDAzZWxpbmtzW2xpbmtfaWRdLmFwLmJlYWNvbl9pbnRlcnZhbGAuXG5cbk91dC1vZi1ib3VuZHMgYWNjZXNzZXMgKGJvdGggcmVhZHMgYW5kIHdyaXRlcykgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgYHBhcmFtc2Agc3RydWN0dXJlIGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgdmlhIGBtZW1zZXQoXHUwMDI2cGFyYW1zLCAwLCBzaXplb2YocGFyYW1zKSk7YCwgYW5kIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZXMgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBpbnZvbHZlZCBpbiB0aGlzIGJ1Zy4gU2luY2UgS0FTQU4gaXMgZnVsbHkgY2FwYWJsZSBvZiBjYXRjaGluZyB0aGlzIG91dC1vZi1ib3VuZHMgcmVhZCwgdGhlcmUgaXMgbm8gbmVlZCB0byBydW4gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHZ1bG5lcmFiaWxpdHkgaW4gYG5sODAyMTFfbmV3X3N0YXRpb24oKWAuIEJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBgbGlua19pZGAgZXh0cmFjdGVkIGZyb20gbmV0bGluayBhdHRyaWJ1dGVzIHdhcyBub3QgdmFsaWRhdGVkIGFnYWluc3QgdGhlIG1heGltdW0gbnVtYmVyIG9mIGxpbmtzIG9yIGNoZWNrZWQgZm9yIG5lZ2F0aXZlIHZhbHVlcyBiZWZvcmUgYmVpbmcgdXNlZCBhcyBhbiBpbmRleCB0byBhY2Nlc3MgdGhlIGB3ZGV2LVx1MDAzZWxpbmtzW2xpbmtfaWRdYCBhcnJheS4gVGhpcyBhbGxvd2VkIGFuIGF0dGFja2VyIHRvIHRyaWdnZXIgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHdoZW4gY2hlY2tpbmcgYHdkZXYtXHUwMDNlbGlua3NbbGlua19pZF0uYXAuYmVhY29uX2ludGVydmFsYC5cblxuT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyAoYm90aCByZWFkcyBhbmQgd3JpdGVzKSBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBgcGFyYW1zYCBzdHJ1Y3R1cmUgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZCB2aWEgYG1lbXNldChcdTAwMjZwYXJhbXMsIDAsIHNpemVvZihwYXJhbXMpKTtgLCBhbmQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIGludm9sdmVkIGluIHRoaXMgYnVnLiBTaW5jZSBLQVNBTiBpcyBmdWxseSBjYXBhYmxlIG9mIGNhdGNoaW5nIHRoaXMgb3V0LW9mLWJvdW5kcyByZWFkLCB0aGVyZSBpcyBubyBuZWVkIHRvIHJ1biBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjQ2OjUyLjAyMzg4MTU4NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5ODcyNTY5MDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJubDgwMjExX25ld19zdGF0aW9uXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eSBpbiBgbmw4MDIxMV9uZXdfc3RhdGlvbigpYC4gQmVmb3JlIHRoZSBwYXRjaCwgdGhlIGBsaW5rX2lkYCBleHRyYWN0ZWQgZnJvbSBuZXRsaW5rIGF0dHJpYnV0ZXMgd2FzIG5vdCB2YWxpZGF0ZWQgYWdhaW5zdCB0aGUgbWF4aW11bSBudW1iZXIgb2YgbGlua3Mgb3IgY2hlY2tlZCBmb3IgbmVnYXRpdmUgdmFsdWVzIGJlZm9yZSBiZWluZyB1c2VkIGFzIGFuIGluZGV4IHRvIGFjY2VzcyB0aGUgYHdkZXYtXFx1MDAzZWxpbmtzW2xpbmtfaWRdYCBhcnJheS4gVGhpcyBhbGxvd2VkIGFuIGF0dGFja2VyIHRvIHRyaWdnZXIgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHdoZW4gY2hlY2tpbmcgYHdkZXYtXFx1MDAzZWxpbmtzW2xpbmtfaWRdLmFwLmJlYWNvbl9pbnRlcnZhbGAuXFxuXFxuT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyAoYm90aCByZWFkcyBhbmQgd3JpdGVzKSBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBgcGFyYW1zYCBzdHJ1Y3R1cmUgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZCB2aWEgYG1lbXNldChcXHUwMDI2cGFyYW1zLCAwLCBzaXplb2YocGFyYW1zKSk7YCwgYW5kIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZXMgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBpbnZvbHZlZCBpbiB0aGlzIGJ1Zy4gU2luY2UgS0FTQU4gaXMgZnVsbHkgY2FwYWJsZSBvZiBjYXRjaGluZyB0aGlzIG91dC1vZi1ib3VuZHMgcmVhZCwgdGhlcmUgaXMgbm8gbmVlZCB0byBydW4gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRsaW5rIGNhbGxiYWNrIGBubDgwMjExX25ld19zdGF0aW9uYCBpbiBjZmc4MDIxMSwgY2hhbmdpbmcgdGhlIHZhbGlkYXRpb24gbG9naWMgZm9yIGBsaW5rX2lkYCBhbmQgYWRkaW5nIGEgY2hlY2sgZm9yIGBiZWFjb25faW50ZXJ2YWxgIHdoZW4gYWRkaW5nIGEgbmV3IHN0YXRpb24gdG8gYW4gQVAgb3IgUDJQX0dPIGludGVyZmFjZS4gVGhpcyBpcyByZWFjaGFibGUgY29yZSB3aXJlbGVzcyBsb2dpYyB0aGF0IGNhbiBiZSB0ZXN0ZWQgdXNpbmcgdGhlIG1hYzgwMjExX2h3c2ltIGRyaXZlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6NDY6NTIuMDIzODg2Nzk0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mjk4ODQ1NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwMTA5ZjBlZmFlN2FmZTFiOTc0NjZmNjQzNjQzYWIxNjBhMzcxYzcyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDEzIDA5OjQ2OjUxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXFxuaW5kZXggNWFkY2I2YmQwZmM1Ni4uNzViYmQ3OGY5MWJhMyAxMDA2NDRcXG4tLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXFxuKysrIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xcbkBAIC05MTc0LDcgKzkxNzQsNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfc2V0X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gc3RhdGljIGludCBubDgwMjExX25ld19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIHtcXG4gXFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby1cXHUwMDNldXNlcl9wdHJbMF07XFxuLVxcdGludCBlcnI7XFxuK1xcdGludCBlcnIsIGxpbmtfaWQ7XFxuIFxcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBpbmZvLVxcdTAwM2V1c2VyX3B0clsxXTtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHdkZXYtXFx1MDAzZW5ldGRldjtcXG4gXFx0c3RydWN0IHN0YXRpb25fcGFyYW1ldGVycyBwYXJhbXM7XFxuQEAgLTkyMjIsNiArOTIyMiwxNiBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkID1cXG4gXFx0XFx0bmw4MDIxMV9saW5rX2lkX29yX2ludmFsaWQoaW5mby1cXHUwMDNlYXR0cnMpO1xcbiBcXG4rXFx0aWYgKHdkZXYtXFx1MDAzZXZhbGlkX2xpbmtzKSB7XFxuK1xcdFxcdGlmIChwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0aWYgKCEod2Rldi1cXHUwMDNldmFsaWRfbGlua3MgXFx1MDAyNiBCSVQocGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkKSkpXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PTElOSztcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0aWYgKHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19pZCBcXHUwMDNlPSAwKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9NTERfQUREUl0pIHtcXG4gXFx0XFx0bWFjX2FkZHIgPSBubGFfZGF0YShpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUxEX0FERFJdKTtcXG4gXFx0XFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5tbGRfbWFjID0gbWFjX2FkZHI7XFxuQEAgLTk0MDIsOCArOTQxMiwxMiBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFxuIFxcdHN3aXRjaCAod2Rldi1cXHUwMDNlaWZ0eXBlKSB7XFxuIFxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6XFxuLVxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfQVBfVkxBTjpcXG4gXFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9QMlBfR086XFxuK1xcdFxcdC8qIEFkZCBhIG5ldyBzdGF0aW9uIG9ubHkgYWZ0ZXIgdGhlIEFQIGFuZCBsaW5rIGhhcyBiZWVuIHN0YXJ0ZWQgKi9cXG4rXFx0XFx0bGlua19pZCA9IHdkZXYtXFx1MDAzZXZhbGlkX2xpbmtzID8gcGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkIDogMDtcXG4rXFx0XFx0aWYgKCF3ZGV2LVxcdTAwM2VsaW5rc1tsaW5rX2lkXS5hcC5iZWFjb25faW50ZXJ2YWwpXFxuK1xcdFxcdFxcdHJldHVybiAtRU5FVERPV047XFxuK1xcbiBcXHRcXHQvKiBpZ25vcmUgV01FIGF0dHJpYnV0ZXMgaWYgaWZhY2Uvc3RhIGlzIG5vdCBjYXBhYmxlICovXFxuIFxcdFxcdGlmICghKHJkZXYtXFx1MDAzZXdpcGh5LmZsYWdzIFxcdTAwMjYgV0lQSFlfRkxBR19BUF9VQVBTRCkgfHxcXG4gXFx0XFx0ICAgICEocGFyYW1zLnN0YV9mbGFnc19zZXQgXFx1MDAyNiBCSVQoTkw4MDIxMV9TVEFfRkxBR19XTUUpKSlcXG5AQCAtOTQ5NSwyNyArOTUwOSwxMCBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFxuIFxcdC8qIGJlIGF3YXJlIG9mIHBhcmFtcy52bGFuIHdoZW4gY2hhbmdpbmcgY29kZSBoZXJlICovXFxuIFxcbi1cXHRpZiAod2Rldi1cXHUwMDNldmFsaWRfbGlua3MpIHtcXG4tXFx0XFx0aWYgKHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19pZCBcXHUwMDNjIDApIHtcXG4tXFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4tXFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcdFxcdH1cXG4tXFx0XFx0aWYgKCEod2Rldi1cXHUwMDNldmFsaWRfbGlua3MgXFx1MDAyNiBCSVQocGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkKSkpIHtcXG4tXFx0XFx0XFx0ZXJyID0gLUVOT0xJTks7XFxuLVxcdFxcdFxcdGdvdG8gb3V0O1xcbi1cXHRcXHR9XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdGlmIChwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWQgXFx1MDAzZT0gMCkge1xcbi1cXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbi1cXHRcXHRcXHRnb3RvIG91dDtcXG4tXFx0XFx0fVxcbi1cXHR9XFxuLVxcbiBcXHRwYXJhbXMuZXBwX3BlZXIgPVxcbiBcXHRcXHRubGFfZ2V0X2ZsYWcoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0VQUF9QRUVSXSk7XFxuIFxcbiBcXHRlcnIgPSByZGV2X2FkZF9zdGF0aW9uKHJkZXYsIHdkZXYsIG1hY19hZGRyLCBcXHUwMDI2cGFyYW1zKTtcXG4tb3V0OlxcbiBcXHRkZXZfcHV0KHBhcmFtcy52bGFuKTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTo0Njo1Mi40NTQ1MDQ1MTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozNzkwODk1ODE5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIk1BQzgwMjExX0hXU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmw4MDIxMV9uZXdfc3RhdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRsaW5rIGNhbGxiYWNrIGBubDgwMjExX25ld19zdGF0aW9uYCBpbiBjZmc4MDIxMSwgY2hhbmdpbmcgdGhlIHZhbGlkYXRpb24gbG9naWMgZm9yIGBsaW5rX2lkYCBhbmQgYWRkaW5nIGEgY2hlY2sgZm9yIGBiZWFjb25faW50ZXJ2YWxgIHdoZW4gYWRkaW5nIGEgbmV3IHN0YXRpb24gdG8gYW4gQVAgb3IgUDJQX0dPIGludGVyZmFjZS4gVGhpcyBpcyByZWFjaGFibGUgY29yZSB3aXJlbGVzcyBsb2dpYyB0aGF0IGNhbiBiZSB0ZXN0ZWQgdXNpbmcgdGhlIG1hYzgwMjExX2h3c2ltIGRyaXZlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDEwOWYwZWZhZTdhZmUxYjk3NDY2ZjY0MzY0M2FiMTYwYTM3MWM3MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDA5OjQ2OjUxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmNcbmluZGV4IDVhZGNiNmJkMGZjNTYuLjc1YmJkNzhmOTFiYTMgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG4rKysgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG5AQCAtOTE3NCw3ICs5MTc0LDcgQEAgc3RhdGljIGludCBubDgwMjExX3NldF9zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gc3RhdGljIGludCBubDgwMjExX25ld19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4ge1xuIFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clswXTtcbi1cdGludCBlcnI7XG4rXHRpbnQgZXJyLCBsaW5rX2lkO1xuIFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGluZm8tXHUwMDNldXNlcl9wdHJbMV07XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gd2Rldi1cdTAwM2VuZXRkZXY7XG4gXHRzdHJ1Y3Qgc3RhdGlvbl9wYXJhbWV0ZXJzIHBhcmFtcztcbkBAIC05MjIyLDYgKzkyMjIsMTYgQEAgc3RhdGljIGludCBubDgwMjExX25ld19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWQgPVxuIFx0XHRubDgwMjExX2xpbmtfaWRfb3JfaW52YWxpZChpbmZvLVx1MDAzZWF0dHJzKTtcbiBcbitcdGlmICh3ZGV2LVx1MDAzZXZhbGlkX2xpbmtzKSB7XG4rXHRcdGlmIChwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdGlmICghKHdkZXYtXHUwMDNldmFsaWRfbGlua3MgXHUwMDI2IEJJVChwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWQpKSlcbitcdFx0XHRyZXR1cm4gLUVOT0xJTks7XG4rXHR9IGVsc2Uge1xuK1x0XHRpZiAocGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkIFx1MDAzZT0gMClcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbiBcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9NTERfQUREUl0pIHtcbiBcdFx0bWFjX2FkZHIgPSBubGFfZGF0YShpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9NTERfQUREUl0pO1xuIFx0XHRwYXJhbXMubGlua19zdGFfcGFyYW1zLm1sZF9tYWMgPSBtYWNfYWRkcjtcbkBAIC05NDAyLDggKzk0MTIsMTIgQEAgc3RhdGljIGludCBubDgwMjExX25ld19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXG4gXHRzd2l0Y2ggKHdkZXYtXHUwMDNlaWZ0eXBlKSB7XG4gXHRjYXNlIE5MODAyMTFfSUZUWVBFX0FQOlxuLVx0Y2FzZSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOOlxuIFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9QMlBfR086XG4rXHRcdC8qIEFkZCBhIG5ldyBzdGF0aW9uIG9ubHkgYWZ0ZXIgdGhlIEFQIGFuZCBsaW5rIGhhcyBiZWVuIHN0YXJ0ZWQgKi9cbitcdFx0bGlua19pZCA9IHdkZXYtXHUwMDNldmFsaWRfbGlua3MgPyBwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWQgOiAwO1xuK1x0XHRpZiAoIXdkZXYtXHUwMDNlbGlua3NbbGlua19pZF0uYXAuYmVhY29uX2ludGVydmFsKVxuK1x0XHRcdHJldHVybiAtRU5FVERPV047XG4rXG4gXHRcdC8qIGlnbm9yZSBXTUUgYXR0cmlidXRlcyBpZiBpZmFjZS9zdGEgaXMgbm90IGNhcGFibGUgKi9cbiBcdFx0aWYgKCEocmRldi1cdTAwM2V3aXBoeS5mbGFncyBcdTAwMjYgV0lQSFlfRkxBR19BUF9VQVBTRCkgfHxcbiBcdFx0ICAgICEocGFyYW1zLnN0YV9mbGFnc19zZXQgXHUwMDI2IEJJVChOTDgwMjExX1NUQV9GTEFHX1dNRSkpKVxuQEAgLTk0OTUsMjcgKzk1MDksMTAgQEAgc3RhdGljIGludCBubDgwMjExX25ld19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXG4gXHQvKiBiZSBhd2FyZSBvZiBwYXJhbXMudmxhbiB3aGVuIGNoYW5naW5nIGNvZGUgaGVyZSAqL1xuIFxuLVx0aWYgKHdkZXYtXHUwMDNldmFsaWRfbGlua3MpIHtcbi1cdFx0aWYgKHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19pZCBcdTAwM2MgMCkge1xuLVx0XHRcdGVyciA9IC1FSU5WQUw7XG4tXHRcdFx0Z290byBvdXQ7XG4tXHRcdH1cbi1cdFx0aWYgKCEod2Rldi1cdTAwM2V2YWxpZF9saW5rcyBcdTAwMjYgQklUKHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19pZCkpKSB7XG4tXHRcdFx0ZXJyID0gLUVOT0xJTks7XG4tXHRcdFx0Z290byBvdXQ7XG4tXHRcdH1cbi1cdH0gZWxzZSB7XG4tXHRcdGlmIChwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWQgXHUwMDNlPSAwKSB7XG4tXHRcdFx0ZXJyID0gLUVJTlZBTDtcbi1cdFx0XHRnb3RvIG91dDtcbi1cdFx0fVxuLVx0fVxuLVxuIFx0cGFyYW1zLmVwcF9wZWVyID1cbiBcdFx0bmxhX2dldF9mbGFnKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0VQUF9QRUVSXSk7XG4gXG4gXHRlcnIgPSByZGV2X2FkZF9zdGF0aW9uKHJkZXYsIHdkZXYsIG1hY19hZGRyLCBcdTAwMjZwYXJhbXMpO1xuLW91dDpcbiBcdGRldl9wdXQocGFyYW1zLnZsYW4pO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTo0Njo1Mi40NTQ1MDU2NzFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzQ2NzU3ODQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIGBuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jYCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCdzIHR3ZWFraW5nIHRoZSBgbmw4MDIxMV9uZXdfc3RhdGlvbmAgZnVuY3Rpb24gaW4gYG5ldC93aXJlbGVzcy9ubDgwMjExLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGFib3V0IG1vdmluZyBzb21lIHZhbGlkYXRpb24gbG9naWMgZWFybGllciBpbiB0aGUgZnVuY3Rpb24sIHNwZWNpZmljYWxseSByZWdhcmRpbmcgYHdkZXYtXHUwMDNldmFsaWRfbGlua3NgIGFuZCBgcGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkYC4gTWFrZXMgc2Vuc2UsIG9wdGltaXppbmcgdGhlIGZsb3csIHBvdGVudGlhbGx5IGNhdGNoaW5nIGVycm9ycyBzb29uZXIuXG5cbk5vdywgdGhlIGludGVyZXN0aW5nIGJpdC4gSXQgYWRkcyBhIGNoZWNrIGZvciBgd2Rldi1cdTAwM2VsaW5rc1tsaW5rX2lkXS5hcC5iZWFjb25faW50ZXJ2YWxgIHdpdGhpbiB0aGUgYE5MODAyMTFfSUZUWVBFX0FQYCBhbmQgYE5MODAyMTFfSUZUWVBFX1AyUF9HT2AgY2FzZXMuIEFoLCBidXQgdGhlcmUncyBhIHJlbW92YWwgaW4gaGVyZSB0b28uLi4gaXQgYXBwZWFycyB0aGV5J3ZlIHJlbW92ZWQgYE5MODAyMTFfSUZUWVBFX0FQX1ZMQU5gIGZyb20gdGhlIHN3aXRjaCBzdGF0ZW1lbnQuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZGlmZiB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIFllcCwgaXQgcmVtb3ZlcyBgTkw4MDIxMV9JRlRZUEVfQVBfVkxBTmAgZnJvbSB0aGUgc3dpdGNoIGNhc2UuXG5cblRoaXMgaXMgYSBnb29kIHNwb3QgdG8gZXZhbHVhdGUgdGhpcywgYmVjYXVzZSBpdCdzIGEgbmV0bGluayBBUEkgZW50cnlwb2ludCwgd2hpY2ggbWVhbnMgaXQncyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IGNhbiBiZSB0ZXN0ZWQgYW5kIGV4ZXJjaXNlZCB1c2luZyBzb21ldGhpbmcgbGlrZSBtYWM4MDIxMV9od3NpbSwgbm8gcXVlc3Rpb24uIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGUgY29uZmlnIG9wdGlvbnMgZm9yIGBubDgwMjExLmNgLCBiZWNhdXNlIGl0J3MgcGFydCBvZiBgY2ZnODAyMTFgLiBTbyB0aGF0IG1lYW5zIGBDT05GSUdfQ0ZHODAyMTFgLCBgQ09ORklHX01BQzgwMjExYCwgYW5kIGBDT05GSUdfTUFDODAyMTFfSFdTSU1gIGFyZSB0aGUgb25lcyB0byB2ZXJpZnkuIExldCBtZSBwZWVrIGluIGBuZXQvd2lyZWxlc3MvS2NvbmZpZ2AgYW5kIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgY29uZmlndXJhdGlvbnMgcmVsZXZhbnQgdG8gdGhpcyBtb2RpZmljYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4ODksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTo0NzowMC4yMDEyNjczN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTgzOTIyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ0ZHODAyMTFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL0tjb25maWc9MTQ9Y29uZmlnIFdFWFRfUFJJVlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTYtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTc6Y29uZmlnIENGRzgwMjExXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTgtXFx0dHJpc3RhdGUgXFxcImNmZzgwMjExIC0gd2lyZWxlc3MgY29uZmlndXJhdGlvbiBBUElcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZz0zOD1jb25maWcgTkw4MDIxMV9URVNUTU9ERVxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctNTEtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6NTI6Y29uZmlnIENGRzgwMjExX0RFVkVMT1BFUl9XQVJOSU5HU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTUzLVxcdGJvb2wgXFxcImVuYWJsZSBkZXZlbG9wZXIgd2FybmluZ3NcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy02Ny1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo2ODpjb25maWcgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXFxubmV0L3dpcmVsZXNzL0tjb25maWctNjktXFx0Ym9vbCBcXFwiY2ZnODAyMTEgY2VydGlmaWNhdGlvbiBvbnVzXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctODgtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6ODk6Y29uZmlnIENGRzgwMjExX1JFUVVJUkVfU0lHTkVEX1JFR0RCXFxubmV0L3dpcmVsZXNzL0tjb25maWctOTAtXFx0Ym9vbCBcXFwicmVxdWlyZSByZWdkYiBzaWduYXR1cmVcXFwiIGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctOTgtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6OTk6Y29uZmlnIENGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEwMC1cXHRib29sIFxcXCJhbGxvdyByZWdkYiBrZXlzIHNoaXBwZWQgd2l0aCB0aGUga2VybmVsXFxcIiBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTExMC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMTE6Y29uZmlnIENGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUlxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTExMi1cXHRzdHJpbmcgXFxcImFkZGl0aW9uYWwgcmVnZGIga2V5IGRpcmVjdG9yeVxcXCIgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMjEtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTIyOmNvbmZpZyBDRkc4MDIxMV9SRUdfQ0VMTFVMQVJfSElOVFNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMjMtXFx0Ym9vbCBcXFwiY2ZnODAyMTEgcmVndWxhdG9yeSBzdXBwb3J0IGZvciBjZWxsdWxhciBiYXNlIHN0YXRpb24gaGludHNcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzQtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTM1OmNvbmZpZyBDRkc4MDIxMV9SRUdfUkVMQVhfTk9fSVJcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzYtXFx0Ym9vbCBcXFwiY2ZnODAyMTEgc3VwcG9ydCBmb3IgTk9fSVIgcmVsYXhhdGlvblxcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE1OC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNTk6Y29uZmlnIENGRzgwMjExX0RFRkFVTFRfUFNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNjAtXFx0Ym9vbCBcXFwiZW5hYmxlIHBvd2Vyc2F2ZSBieSBkZWZhdWx0XFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTY4LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE2OTpjb25maWcgQ0ZHODAyMTFfREVCVUdGU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3MC1cXHRib29sIFxcXCJjZmc4MDIxMSBEZWJ1Z0ZTIGVudHJpZXNcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzYtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTc3OmNvbmZpZyBDRkc4MDIxMV9DUkRBX1NVUFBPUlRcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzgtXFx0Ym9vbCBcXFwic3VwcG9ydCBDUkRBXFxcIiBpZiBFWFBFUlRcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4Ni1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxODc6Y29uZmlnIENGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODgtXFx0Ym9vbCBcXFwiY2ZnODAyMTEgd2lyZWxlc3MgZXh0ZW5zaW9ucyBjb21wYXRpYmlsaXR5XFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTkzLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE5NDpjb25maWcgQ0ZHODAyMTFfS1VOSVRfVEVTVFxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE5NS1cXHR0cmlzdGF0ZSBcXFwiS1VuaXQgdGVzdHMgZm9yIGNmZzgwMjExXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjQ3OjAwLjI1MTExMTY2OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNjQzMzk4NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgbmw4MDIxMV9uZXdfc3RhdGlvbmAgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYG5sODAyMTFfbmV3X3N0YXRpb25gIHdpdGhpbiBgbmV0L3dpcmVsZXNzL25sODAyMTEuY2AuICBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBuZXRsaW5rIGludGVyZmFjZSwgdGhhdCdzIGFic29sdXRlbHkgcmVhY2hhYmxlIHZpYSBjZmc4MDIxMSBjb21tYW5kcywgd2hpY2ggbWVhbnMgaXQncyBwcmV0dHkgaW1wb3J0YW50LiBJJ3ZlIGdvdCB0byBsb29rIGNsb3NlbHkgYXQgd2hhdCdzIGNoYW5nZWQgaGVyZS5cblxuVGhlIGZpcnN0IHRoaW5nIEkgc2VlIGlzIHRoYXQgdGhleSd2ZSByZW9yZGVyZWQgdGhpbmdzLCBtb3ZpbmcgdGhlIGB3ZGV2LVx1MDAzZXZhbGlkX2xpbmtzYCBjaGVjayBlYXJsaWVyIGluIHRoZSBwcm9jZXNzLiBPa2F5LCB0aGF0J3MgaW50ZXJlc3RpbmcuIFBlcmhhcHMgdGhleSdyZSB0cnlpbmcgdG8gb3B0aW1pemUgdGhlIGZsb3cgb3IgaGFuZGxlIGFuIGVkZ2UgY2FzZSB1cGZyb250LiBUaGUgcmVhbCBraWNrZXIgaXMgdGhlIG5ldyBjaGVjayBmb3IgYHdkZXYtXHUwMDNlbGlua3NbbGlua19pZF0uYXAuYmVhY29uX2ludGVydmFsYCwgYnV0IG9ubHkgZm9yIEFQIGFuZCBQMlBfR08uIFRoYXQgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgdGhleSdyZSBsaWtlbHkgdGFyZ2V0aW5nIHNwZWNpZmljIFNUQSBjb25uZWN0aW9uIHNjZW5hcmlvcyBhbmQgcG90ZW50aWFsbHkgYWRkcmVzc2luZyBhbiBpc3N1ZSByZWxhdGVkIHRvIGJlYWNvbiBoYW5kbGluZywgcGVyaGFwcyBkdXJpbmcgYXNzb2NpYXRpb24gb3IgcmUtYXNzb2NpYXRpb24uXG5cbkZpbmFsbHksIHRoZSByZW1vdmFsIG9mIGBOTDgwMjExX0lGVFlQRV9BUF9WTEFOYCBmcm9tIHRoZSBzd2l0Y2ggY2FzZS4uLiBIbW1tLCBub3cgdGhhdCdzIGN1cmlvdXMuICBJIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgdGhleeKAmXJlIHRha2luZyB0aGF0IG91dCBvZiB0aGUgcGljdHVyZS4gIElzIGl0IGRlcHJlY2F0ZWQ/IElzIHRoZSBWTEFOIGludGVyZmFjZSB0eXBlIGJlaW5nIGhhbmRsZWQgZWxzZXdoZXJlIG5vdz8gVGhpcyBuZWVkcyBmdXJ0aGVyIGludmVzdGlnYXRpb24gYXMgcmVtb3ZpbmcgYW4gaW50ZXJmYWNlIHR5cGUgY2FuIGhhdmUgc2VyaW91cyByYW1pZmljYXRpb25zLiBJJ20gZ29pbmcgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHNlZSBpZiBJIGNhbiBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IG9mIHRoYXQgcmVtb3ZhbCwgYW5kIHdoYXQgaXQgbWlnaHQgYWZmZWN0LiBJJ2xsIHN0YXJ0IGJ5IHRha2luZyBhIGdvb2QgbG9vayBhdCBgbmw4MDIxMV9uZXdfc3RhdGlvbmAgYW5kIHNlZSB3aGF0IHRoZSBmbG93IGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzY1LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjQ3OjA1LjQxNTQ1NDQ4NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzU0ODM1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJubDgwMjExX25ld19zdGF0aW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzcy9ubDgwMjExLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL25sODAyMTEuYz05MDAyPXN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfc3RhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy05MTczLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6OTE3NDpzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTkxNzUte1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xOTU0ND1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIG5sODAyMTFfc21hbGxfb3BzW10gPSB7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE5NjU3LVxcdFxcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE5NjU4OlxcdFxcdC5kb2l0ID0gbmw4MDIxMV9uZXdfc3RhdGlvbixcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE5NjU5LVxcdFxcdC5mbGFncyA9IEdFTkxfVU5TX0FETUlOX1BFUk0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjQ3OjA1LjQ2MzAwNzM3M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMTYwNjc5MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBgbmw4MDIxMV9uZXdfc3RhdGlvbmAqKlxuXG5Pa2F5LCBzbyBgbmw4MDIxMV9uZXdfc3RhdGlvbmAsIHRoYXQncyBhIG5ldGxpbmsgY2FsbGJhY2ssIHJpZ2h0PyBZZWFoLCBkZWZpbml0ZWx5IHdvcnRoIGEgY2xvc2VyIGxvb2sgZm9yIGZ1enppbmcgb3Bwb3J0dW5pdGllcy4gVGhpbmtpbmcgdGhyb3VnaCB0aGUgc2V0dXAsIEknbGwgbmVlZCBgQ0ZHODAyMTFgLCBgTUFDODAyMTFgLCBhbmQgaWRlYWxseSBgTUFDODAyMTFfSFdTSU1gIHRvIGhhdmUgYW4gYWN0dWFsIGRldmljZSB0byB0ZXN0IGFnYWluc3QuIFNlZW1zIHNlbnNpYmxlLiBUaGUgY29yZSB0YXJnZXQgc3ltYm9sIGhlcmUgaXMsIG9mIGNvdXJzZSwgYG5sODAyMTFfbmV3X3N0YXRpb25gLlxuXG5Ob3csIGJlZm9yZSBJIGRpdmUgaW4sIGxldCBtZSBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgbHVya2luZyBhYm91dC4gSSBzZWVtIHRvIHJlY2FsbCBgQ0ZHODAyMTFgIG1pZ2h0IGJlIHRpZWQgdG8gYFJGS0lMTGAuIEJldHRlciBzYWZlIHRoYW4gc29ycnkg4oCTIGxldCdzIHZlcmlmeSB0aGF0IHF1aWNrbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MjYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6NDc6MDkuNjc5MDg3NzA4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MTYwMjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL0tjb25maWc9NT1jb25maWcgV0VYVF9DT1JFXFxubmV0L3dpcmVsZXNzL0tjb25maWctNi1cXHRkZWZfYm9vbCB5XFxubmV0L3dpcmVsZXNzL0tjb25maWc6NzpcXHRkZXBlbmRzIG9uIENGRzgwMjExX1dFWFQgfHwgV0lSRUxFU1NfRVhUXFxubmV0L3dpcmVsZXNzL0tjb25maWctOC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZz05PWNvbmZpZyBXRVhUX1BST0NcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMC1cXHRkZWZfYm9vbCB5XFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTE6XFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTI6XFx0ZGVwZW5kcyBvbiBXRVhUX0NPUkVcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMy1cXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnPTE3PWNvbmZpZyBDRkc4MDIxMVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4LVxcdHRyaXN0YXRlIFxcXCJjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXFxcIlxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE5OlxcdGRlcGVuZHMgb24gUkZLSUxMIHx8ICFSRktJTExcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0yMC1cXHRzZWxlY3QgRldfTE9BREVSXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZz02OD1jb25maWcgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXFxubmV0L3dpcmVsZXNzL0tjb25maWctNjktXFx0Ym9vbCBcXFwiY2ZnODAyMTEgY2VydGlmaWNhdGlvbiBvbnVzXFxcIlxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjcwOlxcdGRlcGVuZHMgb24gRVhQRVJUXFxubmV0L3dpcmVsZXNzL0tjb25maWctNzEtXFx0ZGVmYXVsdCBuXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZz05OT1jb25maWcgQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMDEtXFx0ZGVmYXVsdCB5XFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTAyOlxcdGRlcGVuZHMgb24gQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREJcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMDMtXFx0aGVscFxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWc9MTExPWNvbmZpZyBDRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVJcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTItXFx0c3RyaW5nIFxcXCJhZGRpdGlvbmFsIHJlZ2RiIGtleSBkaXJlY3RvcnlcXFwiIGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnOjExMzpcXHRkZXBlbmRzIG9uIENGRzgwMjExX1JFUVVJUkVfU0lHTkVEX1JFR0RCXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTE0LVxcdGhlbHBcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnPTEyMj1jb25maWcgQ0ZHODAyMTFfUkVHX0NFTExVTEFSX0hJTlRTXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTIzLVxcdGJvb2wgXFxcImNmZzgwMjExIHJlZ3VsYXRvcnkgc3VwcG9ydCBmb3IgY2VsbHVsYXIgYmFzZSBzdGF0aW9uIGhpbnRzXFxcIlxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjEyNDpcXHRkZXBlbmRzIG9uIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEyNS1cXHRoZWxwXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZz0xMzU9Y29uZmlnIENGRzgwMjExX1JFR19SRUxBWF9OT19JUlxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEzNi1cXHRib29sIFxcXCJjZmc4MDIxMSBzdXBwb3J0IGZvciBOT19JUiByZWxheGF0aW9uXFxcIlxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjEzNzpcXHRkZXBlbmRzIG9uIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEzOC1cXHRoZWxwXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZz0xNjk9Y29uZmlnIENGRzgwMjExX0RFQlVHRlNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzAtXFx0Ym9vbCBcXFwiY2ZnODAyMTEgRGVidWdGUyBlbnRyaWVzXFxcIlxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3MTpcXHRkZXBlbmRzIG9uIERFQlVHX0ZTXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTcyLVxcdGhlbHBcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnPTE5ND1jb25maWcgQ0ZHODAyMTFfS1VOSVRfVEVTVFxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE5NS1cXHR0cmlzdGF0ZSBcXFwiS1VuaXQgdGVzdHMgZm9yIGNmZzgwMjExXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTk2OlxcdGRlcGVuZHMgb24gS1VOSVRcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxOTc6XFx0ZGVwZW5kcyBvbiBDRkc4MDIxMVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE5OC1cXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTo0NzowOS43MjYyNTI4NjZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjgxOTI2MzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBkZXBlbmRlbmNpZXM6XG5cbioqQW5hbHl6aW5nIHRoZSBXaXJlbGVzcyBTdGFjayBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgd2lyZWxlc3Mgc3RhY2sgY29uZmlndXJhdGlvbi4gSXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBvbiB0aGUgc3VyZmFjZSwgYnV0IGl0J3MgYWx3YXlzIHdvcnRoIGEgZG91YmxlLWNoZWNrLiBgQ0ZHODAyMTFgIGlzIGludGVyZXN0aW5nOyBpdCdzIGdvdCB0aGF0IGBSRktJTEwgfHwgIVJGS0lMTGAgZGVwZW5kZW5jeS4gRXNzZW50aWFsbHksIGl0J3MgYWx3YXlzIGVuYWJsZWQsIHdoaWNoIGlzIHRoZSBleHBlY3RlZCBiZWhhdmlvci4gVGhhdCdzIGEgY2xhc3NpYyBjYXNlIG9mIGEgZGVwZW5kZW5jeSB0aGF0IGV4aXN0cyBjb25jZXB0dWFsbHkgYnV0IGRvZXNuJ3QgYWN0dWFsbHkgbGltaXQgdGhlIGJ1aWxkLiBNb3Zpbmcgb24sIGBNQUM4MDIxMWAgaXMgYnVpbHQgZGlyZWN0bHkgb24gdG9wIG9mIGBDRkc4MDIxMWAg4oCTIGFzIGV4cGVjdGVkLCB0aGF0J3MgdGhlIGNvcmUgb2YgdGhlIDgwMi4xMSBzdGFjay4gVGhlbiwgd2Ugc2VlIGBNQUM4MDIxMV9IV1NJTWAgZGVwZW5kcyBvbiBgTUFDODAyMTFgLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBIYXJkd2FyZSBzaW11bGF0aW9uIGZ1bmN0aW9uYWxpdHkgbmVlZHMgdGhlIGJhc2UgTUFDODAyMTEgbGF5ZXIgdG8gZnVuY3Rpb24uIEkgc2hvdWxkIHByb2JhYmx5IGRpZyBpbnRvIHRoZSBgbmV0L21hYzgwMjExL0tjb25maWdgIGZpbGUgYW5kIHRha2UgYSBsb29rIGF0IHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBpbiB0aGVyZSwganVzdCB0byBiZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgc3VidGxlIGdvdGNoYXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4OTIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTo0NzoxMy40MDgxODI3MzZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MTc4MDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL0tjb25maWc9Mj1jb25maWcgTUFDODAyMTFcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVxcXCJcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo0OlxcdGRlcGVuZHMgb24gQ0ZHODAyMTFcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy01LVxcdHNlbGVjdCBDUllQVE9cXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE2PWNvbW1lbnQgXFxcIkNGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExXFxcIlxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE3OlxcdGRlcGVuZHMgb24gQ0ZHODAyMTE9blxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE4LVxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9MzE9Y2hvaWNlXFxubmV0L21hYzgwMjExL0tjb25maWctMzItXFx0cHJvbXB0IFxcXCJEZWZhdWx0IHJhdGUgY29udHJvbCBhbGdvcml0aG1cXFwiXFxubmV0L21hYzgwMjExL0tjb25maWc6MzM6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9IQVNfUkNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zNC1cXHRkZWZhdWx0IE1BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUxcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTQxPWNvbmZpZyBNQUM4MDIxMV9SQ19ERUZBVUxUX01JTlNUUkVMXFxubmV0L21hYzgwMjExL0tjb25maWctNDItXFx0Ym9vbCBcXFwiTWluc3RyZWxcXFwiXFxubmV0L21hYzgwMjExL0tjb25maWc6NDM6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9SQ19NSU5TVFJFTFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQ0LVxcdGhlbHBcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTU3PWNvbW1lbnQgXFxcIlNvbWUgd2lyZWxlc3MgZHJpdmVycyByZXF1aXJlIGEgcmF0ZSBjb250cm9sIGFsZ29yaXRobVxcXCJcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo1ODpcXHRkZXBlbmRzIG9uIE1BQzgwMjExIFxcdTAwMjZcXHUwMDI2IE1BQzgwMjExX0hBU19SQz1uXFxubmV0L21hYzgwMjExL0tjb25maWctNTktXFxubmV0L21hYzgwMjExL0tjb25maWc9NjA9Y29uZmlnIE1BQzgwMjExX0tVTklUX1RFU1RcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy02MS1cXHR0cmlzdGF0ZSBcXFwiS1VuaXQgdGVzdHMgZm9yIG1hYzgwMjExXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxubmV0L21hYzgwMjExL0tjb25maWc6NjI6XFx0ZGVwZW5kcyBvbiBLVU5JVFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjYzOlxcdGRlcGVuZHMgb24gTUFDODAyMTFcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy02NC1cXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9NzA9Y29uZmlnIE1BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03MS1cXHRib29sIFxcXCJFbmFibGUgbWFjODAyMTEgbWVzaCBuZXR3b3JraW5nIHN1cHBvcnRcXFwiXFxubmV0L21hYzgwMjExL0tjb25maWc6NzI6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTczLVxcdGhlbHBcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTc5PWNvbmZpZyBNQUM4MDIxMV9MRURTXFxubmV0L21hYzgwMjExL0tjb25maWctODAtXFx0Ym9vbCBcXFwiRW5hYmxlIExFRCB0cmlnZ2Vyc1xcXCJcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo4MTpcXHRkZXBlbmRzIG9uIE1BQzgwMjExXFxubmV0L21hYzgwMjExL0tjb25maWc6ODI6XFx0ZGVwZW5kcyBvbiBMRURTX0NMQVNTPXkgfHwgTEVEU19DTEFTUz1NQUM4MDIxMVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTgzLVxcdHNlbGVjdCBMRURTX1RSSUdHRVJTXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZz04OD1jb25maWcgTUFDODAyMTFfREVCVUdGU1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTg5LVxcdGJvb2wgXFxcIkV4cG9ydCBtYWM4MDIxMSBpbnRlcm5hbHMgaW4gRGVidWdGU1xcXCJcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo5MDpcXHRkZXBlbmRzIG9uIE1BQzgwMjExIFxcdTAwMjZcXHUwMDI2IENGRzgwMjExX0RFQlVHRlNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05MS1cXHRoZWxwXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZz05Nz1jb25maWcgTUFDODAyMTFfTUVTU0FHRV9UUkFDSU5HXFxubmV0L21hYzgwMjExL0tjb25maWctOTgtXFx0Ym9vbCBcXFwiVHJhY2UgYWxsIG1hYzgwMjExIGRlYnVnIG1lc3NhZ2VzXFxcIlxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjk5OlxcdGRlcGVuZHMgb24gTUFDODAyMTEgXFx1MDAyNlxcdTAwMjYgVFJBQ0lOR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEwMC1cXHRoZWxwXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZz0xMTA9bWVudWNvbmZpZyBNQUM4MDIxMV9ERUJVR19NRU5VXFxubmV0L21hYzgwMjExL0tjb25maWctMTExLVxcdGJvb2wgXFxcIlNlbGVjdCBtYWM4MDIxMSBkZWJ1Z2dpbmcgZmVhdHVyZXNcXFwiXFxubmV0L21hYzgwMjExL0tjb25maWc6MTEyOlxcdGRlcGVuZHMgb24gTUFDODAyMTFcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTMtXFx0aGVscFxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9MTE2PWNvbmZpZyBNQUM4MDIxMV9OT0lOTElORVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExNy1cXHRib29sIFxcXCJEbyBub3QgaW5saW5lIFRYL1JYIGhhbmRsZXJzXFxcIlxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExODpcXHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTktXFx0aGVscFxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9MTMyPWNvbmZpZyBNQUM4MDIxMV9WRVJCT1NFX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTMzLVxcdGJvb2wgXFxcIlZlcmJvc2UgZGVidWdnaW5nIG91dHB1dFxcXCJcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxMzQ6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VXFxubmV0L21hYzgwMjExL0tjb25maWctMTM1LVxcdGhlbHBcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE0Mz1jb25maWcgTUFDODAyMTFfTUxNRV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0NC1cXHRib29sIFxcXCJWZXJib3NlIG1hbmFnZWQgTUxNRSBvdXRwdXRcXFwiXFxubmV0L21hYzgwMjExL0tjb25maWc6MTQ1OlxcdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0Ni1cXHRoZWxwXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZz0xNTQ9Y29uZmlnIE1BQzgwMjExX1NUQV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE1NS1cXHRib29sIFxcXCJWZXJib3NlIHN0YXRpb24gZGVidWdnaW5nXFxcIlxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE1NjpcXHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTctXFx0aGVscFxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9MTYzPWNvbmZpZyBNQUM4MDIxMV9IVF9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE2NC1cXHRib29sIFxcXCJWZXJib3NlIEhUIGRlYnVnZ2luZ1xcXCJcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNjU6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VXFxubmV0L21hYzgwMjExL0tjb25maWctMTY2LVxcdGhlbHBcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE3NT1jb25maWcgTUFDODAyMTFfT0NCX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTc2LVxcdGJvb2wgXFxcIlZlcmJvc2UgT0NCIGRlYnVnZ2luZ1xcXCJcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNzc6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VXFxubmV0L21hYzgwMjExL0tjb25maWctMTc4LVxcdGhlbHBcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE4Nj1jb25maWcgTUFDODAyMTFfSUJTU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE4Ny1cXHRib29sIFxcXCJWZXJib3NlIElCU1MgZGVidWdnaW5nXFxcIlxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE4ODpcXHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xODktXFx0aGVscFxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9MTk3PWNvbmZpZyBNQUM4MDIxMV9QU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE5OC1cXHRib29sIFxcXCJWZXJib3NlIHBvd2Vyc2F2ZSBtb2RlIGRlYnVnZ2luZ1xcXCJcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxOTk6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VXFxubmV0L21hYzgwMjExL0tjb25maWctMjAwLVxcdGhlbHBcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTIwOT1jb25maWcgTUFDODAyMTFfTVBMX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjEwLVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBwZWVyIGxpbmsgZGVidWdnaW5nXFxcIlxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIxMTpcXHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMTI6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL0tjb25maWctMjEzLVxcdGhlbHBcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTIyMj1jb25maWcgTUFDODAyMTFfTVBBVEhfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMjMtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHBhdGggZGVidWdnaW5nXFxcIlxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIyNDpcXHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMjU6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL0tjb25maWctMjI2LVxcdGhlbHBcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTIzNT1jb25maWcgTUFDODAyMTFfTUhXTVBfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzYtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIEhXTVAgcm91dGluZyBkZWJ1Z2dpbmdcXFwiXFxubmV0L21hYzgwMjExL0tjb25maWc6MjM3OlxcdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIzODpcXHRkZXBlbmRzIG9uIE1BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzktXFx0aGVscFxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9MjQ4PWNvbmZpZyBNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNDktXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHN5bmNocm9uaXphdGlvbiBkZWJ1Z2dpbmdcXFwiXFxubmV0L21hYzgwMjExL0tjb25maWc6MjUwOlxcdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI1MTpcXHRkZXBlbmRzIG9uIE1BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNTItXFx0aGVscFxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9MjU5PWNvbmZpZyBNQUM4MDIxMV9NRVNIX0NTQV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2MC1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggY2hhbm5lbCBzd2l0Y2ggZGVidWdnaW5nXFxcIlxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI2MTpcXHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNjI6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL0tjb25maWctMjYzLVxcdGhlbHBcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTI3MD1jb25maWcgTUFDODAyMTFfTUVTSF9QU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI3MS1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggcG93ZXJzYXZlIGRlYnVnZ2luZ1xcXCJcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNzI6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VXFxubmV0L21hYzgwMjExL0tjb25maWc6MjczOlxcdGRlcGVuZHMgb24gTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI3NC1cXHRoZWxwXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZz0yODE9Y29uZmlnIE1BQzgwMjExX1RETFNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODItXFx0Ym9vbCBcXFwiVmVyYm9zZSBURExTIGRlYnVnZ2luZ1xcXCJcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyODM6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VXFxubmV0L21hYzgwMjExL0tjb25maWctMjg0LVxcdGhlbHBcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTI5Mz1jb25maWcgTUFDODAyMTFfREVCVUdfQ09VTlRFUlNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yOTQtXFx0Ym9vbCBcXFwiRXh0cmEgc3RhdGlzdGljcyBmb3IgVFgvUlggZGVidWdnaW5nXFxcIlxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI5NTpcXHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyOTY6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR0ZTXFxubmV0L21hYzgwMjExL0tjb25maWctMjk3LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6NDc6MTMuNDU2MzY3OTU1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MzU4MzEyOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIGNvbnNpZGVyYXRpb25zOlxuXG4qKk1BQzgwMjExIERlcGVuZGVuY3kgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGRlcGVuZGVuY3kgcmVsYXRpb25zaGlwcyBoZXJlLiBJdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGFjdHVhbGx5LiBXZSd2ZSBnb3QgYE1BQzgwMjExYCwgYW5kIGl0IHJlbGllcyBvbiBgQ0ZHODAyMTFgLiBUaGF0J3MgdGhlIGNvcmUuIFRoZW4sIHdoZW4gd2UncmUgZGVhbGluZyB3aXRoIGhhcmR3YXJlIHNpbXVsYXRpb24sIGxpa2Ugd2l0aCBgTUFDODAyMTFfSFdTSU1gLCB0aGF0IGJ1aWxkcyAqdXBvbiogYE1BQzgwMjExYC4gU28sIGBNQUM4MDIxMV9IV1NJTWAgbmF0dXJhbGx5IGhhcyBgTUFDODAyMTFgIGFzIGEgZGVwZW5kZW5jeSBhcyB3ZWxsLiBNYWtlcyBwZXJmZWN0IHNlbnNlLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBkcmlsbCBkb3duIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4gSSdtIGdvaW5nIHRvIGNoZWNrIG91dCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTFfaHdzaW0vS2NvbmZpZ2AgKG9yIHNvbWV3aGVyZSBzaW1pbGFyLCBkZXBlbmRpbmcgb24gdGhlIGV4YWN0IHNvdXJjZSB0cmVlKS4gSSBuZWVkIHRvIGNvbmZpcm0gdGhvc2UgZGVwZW5kZW5jaWVzIGFyZSBjb3JyZWN0bHkgcmVmbGVjdGVkIGluIHRoZSBLY29uZmlnLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBzdHJ1Y3R1cmUgaXMgc291bmQgYW5kIHRoZXJlIGFyZW4ndCBhbnkgc25lYWt5IGNpcmN1bGFyIGRlcGVuZGVuY2llcyBvciBtaXNzaW5nIHJlcXVpcmVtZW50cyBsdXJraW5nLiBHb3R0YSBrZWVwIGV2ZXJ5dGhpbmcgY2xlYW4gYW5kIGNvbnNpc3RlbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzM0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6NDc6MTcuMjkyMjAxNTAxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDI3MjQ4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUFDODAyMTFfSFdTSU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZzoxOmNvbmZpZyBNQUM4MDIxMV9IV1NJTVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZy0yLVxcdHRyaXN0YXRlIFxcXCJTaW11bGF0ZWQgcmFkaW8gdGVzdGluZyB0b29sIGZvciBtYWM4MDIxMVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6NDc6MTcuMzY2NDc4OTU4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NTE4Nzk1NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBWaXJ0dWFsIFdpcmVsZXNzIEtjb25maWcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgYWJvdXQgdGhlIHZpcnR1YWwgd2lyZWxlc3Mgc2V0dXAgaW4gdGhpcyBrZXJuZWwuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LCBhcyBhbHdheXMsIGlzIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuIExldCdzIHNlZS4uLiB0aGUgdGV4dCBtZW50aW9ucyBgZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnYC4gUmlnaHQsIHRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoaXMgc3Vic3lzdGVtLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgYEtjb25maWdgIG5vdyB0byBzZWUgd2hhdCdzIGRlZmluZWQsIHdoYXQgZGVwZW5kZW5jaWVzIGV4aXN0LCBhbmQgaG93IHRoaXMgYWxsIHBpZWNlcyB0b2dldGhlci4gVGhhdCdsbCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgcmVzdCBvZiB0aGUgY29kZS4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc1NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjQ3OjIxLjExODM2MjExN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4NTgwMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnPTE9Y29uZmlnIE1BQzgwMjExX0hXU0lNXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnLTItXFx0dHJpc3RhdGUgXFxcIlNpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjExXFxcIlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZzozOlxcdGRlcGVuZHMgb24gTUFDODAyMTFcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWctNC1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWc9MTQ9Y29uZmlnIFZJUlRfV0lGSVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZy0xNS1cXHR0cmlzdGF0ZSBcXFwiV2lmaSB3cmFwcGVyIGZvciBldGhlcm5ldCBkcml2ZXJzXFxcIlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZzoxNjpcXHRkZXBlbmRzIG9uIENGRzgwMjExXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnLTE3LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6NDc6MjEuMTY1MjI0Mzc2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkxMTkwOTM0NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBTdHJhdGVneSBmb3IgTUFDODAyMTFfSFdTSU0qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gYE1BQzgwMjExX0hXU0lNYC4gSXQgbG9va3MgbGlrZSB0aGlzIGZvY3VzZXMgb24gdGhlIGBubDgwMjExX25ld19zdGF0aW9uYCBmdW5jdGlvbiwgd2hpY2ggaXMgYW4gQVBJIGVudHJ5cG9pbnQuIFRoZSBwYXRjaCBpcyBjaGFuZ2luZyBzb21lIGZ1bmN0aW9uYWwgbG9naWMgd2l0aGluIGl0IOKAkyBtb3ZpbmcgdmFsaWRhdGlvbiwgYWRkaW5nIGEgY2hlY2sgZm9yIGBiZWFjb25faW50ZXJ2YWxgLCBhbmQgcmVtb3ZpbmcgYE5MODAyMTFfSUZUWVBFX0FQX1ZMQU5gLiBEZWZpbml0ZWx5IHdvcnRoIGEgZnV6emluZyBlZmZvcnQgaGVyZS5cblxuSSBpbml0aWFsbHkgcXVlc3Rpb25lZCB3aGV0aGVyIHdlIGNvdWxkIHVzZSBgbmw4MDIxMV9uZXdfc3RhdGlvbmAgZm9yIGZ1enppbmcsIHNpbmNlIGl0J3MgZGVmaW5lZCBhcyBhIHN0YXRpYyBmdW5jdGlvbi4gQnV0IHRoZW4gSSByZW1lbWJlcmVkIHRoYXQgd2hpbGUgaXQgaXMgc3RhdGljLCBpdCdzIGEgbmV0bGluayBjYWxsYmFjaywgc28gaXRzIGFkZHJlc3MgaXMgdGFrZW4gYW5kIHVzZWQgaW4gYG5sODAyMTFfc21hbGxfb3BzYC4gVGhpcyBtZWFucyBpdCAqd29uJ3QqIGJlIGlubGluZWQsIGFuZCBTeXprYWxsZXIgc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIGl0LiBUaGUgcHJvbXB0J3MgcHJlZmVyZW5jZSBpcyBmb3Igbm9uLXN0YXRpYyBlbnRyeXBvaW50cywgYnV0IGluIHRoZSBuZXRsaW5rIGNhc2UgdGhpcyAqaXMqIHRoZSBzdGFuZGFyZCBhcHByb2FjaC4gTm8gcmVhc29uIHRvIGdvIGh1bnRpbmcgZm9yIGFsdGVybmF0aXZlcywgZXNwZWNpYWxseSBzaW5jZSBJIGRvbid0IHNlZSBhbnkgb3RoZXIgZnVuY3Rpb25zIGJlaW5nIHRvdWNoZWQgYnkgdGhpcyBwYXRjaC5cblxuU28sIHRoZSBrZXkgY29uZmlncyBmb3IgdGhpcyBhcmUgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogYENGRzgwMjExYCwgYE1BQzgwMjExYCwgYW5kIGBNQUM4MDIxMV9IV1NJTWAuIE5vIG5lZWQgZm9yIGBOTDgwMjExX1RFU1RNT0RFYCBzaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggYSBzdGFuZGFyZCBuZXRsaW5rIGNvbW1hbmQsIGBOTDgwMjExX0NNRF9ORVdfU1RBVElPTmAuXG5cbkknbSByZWFkeSB0byBzZXQgdXAgdGhlIGZ1enppbmcgd2l0aCBgbmw4MDIxMV9uZXdfc3RhdGlvbmAgYXMgdGhlIHRhcmdldC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExNTcsIk91dHB1dFRva2VucyI6MTYwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjQ3OjMwLjI4NDMyMDg3M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MTM4OTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIk1BQzgwMjExX0hXU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmw4MDIxMV9uZXdfc3RhdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRsaW5rIGNhbGxiYWNrIGBubDgwMjExX25ld19zdGF0aW9uYCBpbiBjZmc4MDIxMSwgY2hhbmdpbmcgdGhlIHZhbGlkYXRpb24gbG9naWMgZm9yIGBsaW5rX2lkYCBhbmQgYWRkaW5nIGEgY2hlY2sgZm9yIGBiZWFjb25faW50ZXJ2YWxgIHdoZW4gYWRkaW5nIGEgbmV3IHN0YXRpb24gdG8gYW4gQVAgb3IgUDJQX0dPIGludGVyZmFjZS4gVGhpcyBpcyByZWFjaGFibGUgY29yZSB3aXJlbGVzcyBsb2dpYyB0aGF0IGNhbiBiZSB0ZXN0ZWQgdXNpbmcgdGhlIG1hYzgwMjExX2h3c2ltIGRyaXZlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIk1BQzgwMjExX0hXU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmw4MDIxMV9uZXdfc3RhdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRsaW5rIGNhbGxiYWNrIGBubDgwMjExX25ld19zdGF0aW9uYCBpbiBjZmc4MDIxMSwgY2hhbmdpbmcgdGhlIHZhbGlkYXRpb24gbG9naWMgZm9yIGBsaW5rX2lkYCBhbmQgYWRkaW5nIGEgY2hlY2sgZm9yIGBiZWFjb25faW50ZXJ2YWxgIHdoZW4gYWRkaW5nIGEgbmV3IHN0YXRpb24gdG8gYW4gQVAgb3IgUDJQX0dPIGludGVyZmFjZS4gVGhpcyBpcyByZWFjaGFibGUgY29yZSB3aXJlbGVzcyBsb2dpYyB0aGF0IGNhbiBiZSB0ZXN0ZWQgdXNpbmcgdGhlIG1hYzgwMjExX2h3c2ltIGRyaXZlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6NDc6MzAuMzYzNDY3MzhaIiwiU2VxIjoxNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNTMyOTY1OTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6NDc6MzAuMzY0MDEyMDZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTE1MzI0MTUxNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB2dWxuZXJhYmlsaXR5IGluIGBubDgwMjExX25ld19zdGF0aW9uKClgLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgYGxpbmtfaWRgIGV4dHJhY3RlZCBmcm9tIG5ldGxpbmsgYXR0cmlidXRlcyB3YXMgbm90IHZhbGlkYXRlZCBhZ2FpbnN0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBsaW5rcyBvciBjaGVja2VkIGZvciBuZWdhdGl2ZSB2YWx1ZXMgYmVmb3JlIGJlaW5nIHVzZWQgYXMgYW4gaW5kZXggdG8gYWNjZXNzIHRoZSBgd2Rldi1cXHUwMDNlbGlua3NbbGlua19pZF1gIGFycmF5LiBUaGlzIGFsbG93ZWQgYW4gYXR0YWNrZXIgdG8gdHJpZ2dlciBhbiBvdXQtb2YtYm91bmRzIHJlYWQgd2hlbiBjaGVja2luZyBgd2Rldi1cXHUwMDNlbGlua3NbbGlua19pZF0uYXAuYmVhY29uX2ludGVydmFsYC5cXG5cXG5PdXQtb2YtYm91bmRzIGFjY2Vzc2VzIChib3RoIHJlYWRzIGFuZCB3cml0ZXMpIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIGBwYXJhbXNgIHN0cnVjdHVyZSBpcyBmdWxseSB6ZXJvLWluaXRpYWxpemVkIHZpYSBgbWVtc2V0KFxcdTAwMjZwYXJhbXMsIDAsIHNpemVvZihwYXJhbXMpKTtgLCBhbmQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIGludm9sdmVkIGluIHRoaXMgYnVnLiBTaW5jZSBLQVNBTiBpcyBmdWxseSBjYXBhYmxlIG9mIGNhdGNoaW5nIHRoaXMgb3V0LW9mLWJvdW5kcyByZWFkLCB0aGVyZSBpcyBubyBuZWVkIHRvIHJ1biBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDEwOWYwZWZhZTdhZmUxYjk3NDY2ZjY0MzY0M2FiMTYwYTM3MWM3MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDA5OjQ2OjUxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmNcbmluZGV4IDVhZGNiNmJkMGZjNTYuLjc1YmJkNzhmOTFiYTMgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG4rKysgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG5AQCAtOTE3NCw3ICs5MTc0LDcgQEAgc3RhdGljIGludCBubDgwMjExX3NldF9zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gc3RhdGljIGludCBubDgwMjExX25ld19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4ge1xuIFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clswXTtcbi1cdGludCBlcnI7XG4rXHRpbnQgZXJyLCBsaW5rX2lkO1xuIFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGluZm8tXHUwMDNldXNlcl9wdHJbMV07XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gd2Rldi1cdTAwM2VuZXRkZXY7XG4gXHRzdHJ1Y3Qgc3RhdGlvbl9wYXJhbWV0ZXJzIHBhcmFtcztcbkBAIC05MjIyLDYgKzkyMjIsMTYgQEAgc3RhdGljIGludCBubDgwMjExX25ld19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWQgPVxuIFx0XHRubDgwMjExX2xpbmtfaWRfb3JfaW52YWxpZChpbmZvLVx1MDAzZWF0dHJzKTtcbiBcbitcdGlmICh3ZGV2LVx1MDAzZXZhbGlkX2xpbmtzKSB7XG4rXHRcdGlmIChwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdGlmICghKHdkZXYtXHUwMDNldmFsaWRfbGlua3MgXHUwMDI2IEJJVChwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWQpKSlcbitcdFx0XHRyZXR1cm4gLUVOT0xJTks7XG4rXHR9IGVsc2Uge1xuK1x0XHRpZiAocGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkIFx1MDAzZT0gMClcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbiBcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9NTERfQUREUl0pIHtcbiBcdFx0bWFjX2FkZHIgPSBubGFfZGF0YShpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9NTERfQUREUl0pO1xuIFx0XHRwYXJhbXMubGlua19zdGFfcGFyYW1zLm1sZF9tYWMgPSBtYWNfYWRkcjtcbkBAIC05NDAyLDggKzk0MTIsMTIgQEAgc3RhdGljIGludCBubDgwMjExX25ld19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXG4gXHRzd2l0Y2ggKHdkZXYtXHUwMDNlaWZ0eXBlKSB7XG4gXHRjYXNlIE5MODAyMTFfSUZUWVBFX0FQOlxuLVx0Y2FzZSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOOlxuIFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9QMlBfR086XG4rXHRcdC8qIEFkZCBhIG5ldyBzdGF0aW9uIG9ubHkgYWZ0ZXIgdGhlIEFQIGFuZCBsaW5rIGhhcyBiZWVuIHN0YXJ0ZWQgKi9cbitcdFx0bGlua19pZCA9IHdkZXYtXHUwMDNldmFsaWRfbGlua3MgPyBwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWQgOiAwO1xuK1x0XHRpZiAoIXdkZXYtXHUwMDNlbGlua3NbbGlua19pZF0uYXAuYmVhY29uX2ludGVydmFsKVxuK1x0XHRcdHJldHVybiAtRU5FVERPV047XG4rXG4gXHRcdC8qIGlnbm9yZSBXTUUgYXR0cmlidXRlcyBpZiBpZmFjZS9zdGEgaXMgbm90IGNhcGFibGUgKi9cbiBcdFx0aWYgKCEocmRldi1cdTAwM2V3aXBoeS5mbGFncyBcdTAwMjYgV0lQSFlfRkxBR19BUF9VQVBTRCkgfHxcbiBcdFx0ICAgICEocGFyYW1zLnN0YV9mbGFnc19zZXQgXHUwMDI2IEJJVChOTDgwMjExX1NUQV9GTEFHX1dNRSkpKVxuQEAgLTk0OTUsMjcgKzk1MDksMTAgQEAgc3RhdGljIGludCBubDgwMjExX25ld19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXG4gXHQvKiBiZSBhd2FyZSBvZiBwYXJhbXMudmxhbiB3aGVuIGNoYW5naW5nIGNvZGUgaGVyZSAqL1xuIFxuLVx0aWYgKHdkZXYtXHUwMDNldmFsaWRfbGlua3MpIHtcbi1cdFx0aWYgKHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19pZCBcdTAwM2MgMCkge1xuLVx0XHRcdGVyciA9IC1FSU5WQUw7XG4tXHRcdFx0Z290byBvdXQ7XG4tXHRcdH1cbi1cdFx0aWYgKCEod2Rldi1cdTAwM2V2YWxpZF9saW5rcyBcdTAwMjYgQklUKHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19pZCkpKSB7XG4tXHRcdFx0ZXJyID0gLUVOT0xJTks7XG4tXHRcdFx0Z290byBvdXQ7XG4tXHRcdH1cbi1cdH0gZWxzZSB7XG4tXHRcdGlmIChwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWQgXHUwMDNlPSAwKSB7XG4tXHRcdFx0ZXJyID0gLUVJTlZBTDtcbi1cdFx0XHRnb3RvIG91dDtcbi1cdFx0fVxuLVx0fVxuLVxuIFx0cGFyYW1zLmVwcF9wZWVyID1cbiBcdFx0bmxhX2dldF9mbGFnKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0VQUF9QRUVSXSk7XG4gXG4gXHRlcnIgPSByZGV2X2FkZF9zdGF0aW9uKHJkZXYsIHdkZXYsIG1hY19hZGRyLCBcdTAwMjZwYXJhbXMpO1xuLW91dDpcbiBcdGRldl9wdXQocGFyYW1zLnZsYW4pO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTo0NzozMC4zNjQwMTMwNTFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTAyNjA1NDY2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFByb3Bvc2VkIFBhdGNoOiBQb3RlbnRpYWwgSXNzdWVzIHdpdGggTGluayBJRCBWYWxpZGF0aW9uKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbmw4MDIxMV9uZXdfc3RhdGlvbmAgd2l0aGluIGBuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jYCwgYW5kIGl0J3MgcHJpbWFyaWx5IGFib3V0IG1vdmluZyBhcm91bmQgYW5kIGFkZGluZyBzb21lIHZhbGlkYXRpb24gZm9yIGBwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWRgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgbG9naWMgaXMgY2hlY2tpbmcgd2hldGhlciB0aGUgQVAgYW5kIGxpbmsgaGF2ZSBiZWVuIHN0YXJ0ZWQuXG5cblRoZSBmaXJzdCB0aGluZyB0aGF0IGNhdWdodCBteSBleWUgaXMgdGhlIGFkZGVkIGNoZWNrIGZvciBgd2Rldi1cdTAwM2VsaW5rc1tsaW5rX2lkXS5hcC5iZWFjb25faW50ZXJ2YWxgIGZvciBgQVBgIGFuZCBgUDJQX0dPYCBpbnRlcmZhY2VzLiBUaGUgY29kZSBhdHRlbXB0cyB0byB2YWxpZGF0ZSB0aGUgQVAgbGluayBieSBjaGVja2luZyB0aGF0IHRoZSBiZWFjb24gaW50ZXJ2YWwgaXMgbm9uLXplcm8gYmVmb3JlIGFkZGluZyBhIG5ldyBzdGF0aW9uLiBGYWlyIGVub3VnaCwgdGhhdCBtYWtlcyBzZW5zZS4gSG93ZXZlciwgSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCdzIGRvbmUuXG5cblRoZW4gSSByZWFsaXplZCB0aGF0IGBsaW5rX2lkYCBpcyAqdXNlZCBhcyBhbiBpbmRleCBpbnRvKiBgd2Rldi1cdTAwM2VsaW5rc2AuIEhtbSwgaXMgYGxpbmtfaWRgIHByb3Blcmx5IGJvdW5kZWQ/IFRoYXQncyB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaGVyZSwgc2luY2UgaW5kZXhpbmcgYW4gYXJyYXkgb3V0IG9mIGJvdW5kcyBpcyBhIGNsYXNzaWMgYnVnLiBOb3csIGl0IGxvb2tzIGxpa2UgdGhleSd2ZSBtb3ZlZCBzb21lIHZhbGlkYXRpb24gbG9naWMgZWFybGllciBpbiB0aGUgZnVuY3Rpb24uXG5cbkkgc2VlIHRoaXMgY29kZTpcbmBgYGNcblx0aWYgKHdkZXYtXHUwMDNldmFsaWRfbGlua3MpIHtcblx0XHRpZiAocGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkIFx1MDAzYyAwKVxuXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5cdFx0aWYgKCEod2Rldi1cdTAwM2V2YWxpZF9saW5rcyBcdTAwMjYgQklUKHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19pZCkpKVxuXHRcdFx0cmV0dXJuIC1FTk9MSU5LO1xuXHR9IGVsc2Uge1xuXHRcdGlmIChwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWQgXHUwMDNlPSAwKVxuXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5cdH1cbmBgYFxuSWYgYHdkZXYtXHUwMDNldmFsaWRfbGlua3NgIGlzIG5vbi16ZXJvLCB0aGlzIGNoZWNrcyB0aGF0IHRoZSBgbGlua19pZGAgaXMgbm9uLW5lZ2F0aXZlIGFuZCBpcyB2YWxpZC4gVGhlIGBsaW5rX2lkYCBpcyB0aGVuIHVzZWQgdG8gY2hlY2sgdGhlIHZhbGlkIGxpbmsgbWFzay4gVGhpcyBzZWVtcyBsaWtlIGl0IHdvdWxkIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3MgKmlmKiB0aGUgYEJJVChsaW5rX2lkKWAgb3BlcmF0aW9uIGlzIHNhZmUuIE5vdywgdGhpcyBgQklUKGxpbmtfaWQpYCBpcyB0aGUgcmlza3kgcGFydC4gSWYgYGxpbmtfaWRgIGlzIGxhcmdlLCB1c2luZyBiaXQgc2hpZnRpbmcgb24gYSAxNi1iaXQgZmllbGQgbWF5IGxlYWQgdG8gaXNzdWVzLlxuXG5HaXZlbiB0aGF0IGB3ZGV2LVx1MDAzZXZhbGlkX2xpbmtzYCBpcyBhIGB1MTZgLCBhY2NvcmRpbmcgdG8gdGhlIG1hYzgwMjExL2NmZzgwMjExIHN0YW5kYXJkLCBpdCBzZWVtcyB0byBtZSB0aGF0IHVzaW5nIGEgYGxpbmtfaWRgIHZhbHVlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAxNiwgd2hpbGUgbm90ICpkaXJlY3RseSogb3V0IG9mIGJvdW5kcyBkdWUgdG8gdGhlIGNvbXBhcmlzb24gbG9naWMsIGNvdWxkIHN0aWxsIHJlc3VsdCBpbiB1bmRlZmluZWQgYmVoYXZpb3IgYmVjYXVzZSBgQklUKGxpbmtfaWQpYCB3aWxsIHNoaWZ0IGEgc2luZ2xlIGJpdCBwYXN0IHRoZSBib3VuZGFyaWVzIG9mIHRoZSBgdTE2YC4gV2UgY291bGQgaGF2ZSBhbiB1bmV4cGVjdGVkIHJlc3VsdCBkdWUgdG8gdGhlIGJpdCBzaGlmdGluZy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4gSSB3aWxsIGxvb2sgYXQgYHN0cnVjdCB3aXJlbGVzc19kZXZgIGRlZmluaXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4ODYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTo0NzozOS4zOTAwNzIxNjNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMzM2NDU1MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHdpcmVsZXNzX2RldiBcXFxce1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL25ldC9tYWM4MDIxMS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTo0NzozOS43MTM0NTA5MTNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA4MzA5MjQxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gY2ZnODAyMTEuaCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSB3aXJlbGVzcyBjb25maWd1cmF0aW9uIGZyYW1ld29yay4gYGNmZzgwMjExYCBpcyBhbG1vc3QgYWx3YXlzIHRoZSBmaXJzdCBwbGFjZSB0byBzdGFydCB3aGVuIEknbSBkZWFsaW5nIHdpdGgga2VybmVsLWxldmVsIFdpLUZpIHN0dWZmLiBJdCdzIHRoZSBjZW50cmFsIGh1YiBmb3IgdXNlci1zcGFjZSBpbnRlcmFjdGlvbiB3aXRoIHdpcmVsZXNzIGRldmljZXMuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMsIGRlZmluaXRpb25zLCBhbmQgZnVuY3Rpb24gcHJvdG90eXBlcyB0aGF0IGRlZmluZSB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlIHdpcmVsZXNzIGRyaXZlcnMgYW5kIHRoZSBnZW5lcmljIG5ldHdvcmtpbmcgc3RhY2suIEhvcGVmdWxseSwgdGhlIGlzc3VlIEknbSBjaGFzaW5nIGlzIGV4cG9zZWQgaGVyZS4gSXQncyBvZnRlbiB0aGUgc2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBmb3IgYWxsIG9mIHRob3NlIGVsZW1lbnRzIG9mIHRoZSBXaS1GaSBzdGFjay4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGRpZyB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA0MSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjQ3OjQyLjc5NjU0NjMyMloiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5NTIzNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHdpcmVsZXNzX2RldiBcXFxce1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL25ldC9jZmc4MDIxMS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2NmZzgwMjExLmg9NzEyMD1lbnVtIGllZWU4MDIxMV9hcF9yZWdfcG93ZXIge1xcbi0tXFxuaW5jbHVkZS9uZXQvY2ZnODAyMTEuaC03MjA3LSAqL1xcbmluY2x1ZGUvbmV0L2NmZzgwMjExLmg6NzIwODpzdHJ1Y3Qgd2lyZWxlc3NfZGV2IHtcXG5pbmNsdWRlL25ldC9jZmc4MDIxMS5oLTcyMDktXFx0c3RydWN0IHdpcGh5ICp3aXBoeTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6NDc6NDIuODQyNTAzNzQxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNDc0OTQ3NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhhdCBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBXaXJlbGVzcyBEZXZpY2UgU3RydWN0dXJlKipcblxuT2theSwgdGltZSB0byBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIHdpcmVsZXNzIG5ldHdvcmtpbmcgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwuIE15IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGNvcmUgcmVwcmVzZW50YXRpb24gb2YgYSB3aXJlbGVzcyBkZXZpY2UuIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYHN0cnVjdCB3aXJlbGVzc19kZXZgIGluIGBpbmNsdWRlL25ldC9jZmc4MDIxMS5oYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBmdW5kYW1lbnRhbCBkYXRhIHN0cnVjdHVyZSB0aGF0IGZvcm1zIHRoZSBiYWNrYm9uZSBvZiBjZmc4MDIxMSdzIGludGVyYWN0aW9uIHdpdGggd2lyZWxlc3MgZHJpdmVycy5cblxuSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBtZW1iZXJzIGFuZCBob3cgdGhleSByZWxhdGUgdG8gZWFjaCBvdGhlci4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIGVsZW1lbnRzIHJlbGF0ZWQgdG86XG5cbiogICAqKkRyaXZlciBJbnRlcmZhY2U6KiogSG93IHRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhpcyBzdHJ1Y3R1cmUgdG8gY29uZmlndXJlIGFuZCByZXBvcnQgdGhlIHN0YXRlIG9mIHRoZSB3aXJlbGVzcyBkZXZpY2UuIEFyZSB0aGVyZSBmdW5jdGlvbiBwb2ludGVycyBmb3Igc3BlY2lmaWMgb3BlcmF0aW9ucyAoZS5nLiwgc2V0dGluZyB0aGUgbW9kZSwgdHJhbnNtaXR0aW5nIGZyYW1lcywgc2Nhbm5pbmcpP1xuKiAgICoqU3RhdGUgTWFuYWdlbWVudDoqKiBGbGFncyBhbmQgdmFyaWFibGVzIGluZGljYXRpbmcgdGhlIGN1cnJlbnQgb3BlcmF0aW9uYWwgc3RhdGUgKGUuZy4sIHNjYW5uaW5nLCBjb25uZWN0ZWQsIGRpc2Nvbm5lY3RlZCkuIEknbGwgd2FudCB0byBzZWUgaG93IHRoZXNlIHRyYW5zaXRpb25zIGFyZSBtYW5hZ2VkLlxuKiAgICoqQ29uZmlndXJhdGlvbjoqKiBQYXJhbWV0ZXJzIHRoYXQgZGVmaW5lIHRoZSB3aXJlbGVzcyBzZXR0aW5ncywgc3VjaCBhcyB0aGUgb3BlcmF0aW5nIGNoYW5uZWwsIEJTU0lELCBhbmQgbmV0d29yayBtb2RlLlxuKiAgICoqU2VjdXJpdHk6KiogQW55IHJlbGF0ZWQgcG9pbnRlcnMgdG8gc2VjdXJpdHkga2V5cyBhbmQgY29uZmlndXJhdGlvbiBlbGVtZW50cy5cbiogICAqKkludGVyZmFjZToqKiBJJ2xsIGJlIGludGVyZXN0ZWQgaW4gaG93IHRoZSBgd2lyZWxlc3NfZGV2YCBpcyBsaW5rZWQgdG8gdGhlIG5ldHdvcmsgaW50ZXJmYWNlcyAoZS5nLiwgYG5ldF9kZXZpY2VgKS5cblxuSSBleHBlY3QgdGhlIHN0cnVjdHVyZSB0byBiZSBxdWl0ZSBjb21wcmVoZW5zaXZlLCBhcyBpdCBuZWVkcyB0byBhYnN0cmFjdCBhbmQgaGFuZGxlIHRoZSB2YXJpb3VzIGNvbXBsZXhpdGllcyBvZiBtb2Rlcm4gd2lyZWxlc3MgcHJvdG9jb2xzLiBUaGlzIGlzIHRoZSBjZW50cmFsIHBvaW50IGZvciBldmVyeXRoaW5nIGNmZzgwMjExIGRvZXMsIHNvIGEgdGhvcm91Z2ggdW5kZXJzdGFuZGluZyBvZiB0aGlzIHN0cnVjdHVyZSBpcyBlc3NlbnRpYWwgdG8gZ3Jhc3AgdGhlIGZyYW1ld29yaydzIG92ZXJhbGwgbG9naWMuIExldCdzIHNlZSBob3cgdGhleSd2ZSBvcmdhbml6ZWQgdGhlIGNvbXBvbmVudHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzODAsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTo0Nzo0Ny4xOTAwMDI1ODJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE3MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L2NmZzgwMjExLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNzIwOCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjcyMDg6XFx0c3RydWN0IHdpcmVsZXNzX2RldiB7XFxuNzIwOTpcXHRcXHRzdHJ1Y3Qgd2lwaHkgKndpcGh5O1xcbjcyMTA6XFx0XFx0ZW51bSBubDgwMjExX2lmdHlwZSBpZnR5cGU7XFxuNzIxMTpcXHRcXG43MjEyOlxcdFxcdC8qIHRoZSByZW1haW5kZXIgb2YgdGhpcyBzdHJ1Y3Qgc2hvdWxkIGJlIHByaXZhdGUgdG8gY2ZnODAyMTEgKi9cXG43MjEzOlxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG43MjE0OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XFxuNzIxNTpcXHRcXG43MjE2OlxcdFxcdHUzMiBpZGVudGlmaWVyO1xcbjcyMTc6XFx0XFxuNzIxODpcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkIG1nbXRfcmVnaXN0cmF0aW9ucztcXG43MjE5OlxcdFxcdHU4IG1nbXRfcmVnaXN0cmF0aW9uc19uZWVkX3VwZGF0ZToxO1xcbjcyMjA6XFx0XFxuNzIyMTpcXHRcXHRib29sIHVzZV80YWRkciwgaXNfcnVubmluZywgcmVnaXN0ZXJlZCwgcmVnaXN0ZXJpbmc7XFxuNzIyMjpcXHRcXG43MjIzOlxcdFxcdHU4IGFkZHJlc3NbRVRIX0FMRU5dIF9fYWxpZ25lZChzaXplb2YodTE2KSk7XFxuNzIyNDpcXHRcXG43MjI1OlxcdFxcdC8qIGN1cnJlbnRseSB1c2VkIGZvciBJQlNTIGFuZCBTTUUgLSBtaWdodCBiZSByZWFycmFuZ2VkIGxhdGVyICovXFxuNzIyNjpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfY29ubiAqY29ubjtcXG43MjI3OlxcdFxcdHN0cnVjdCBjZmc4MDIxMV9jYWNoZWRfa2V5cyAqY29ubmVjdF9rZXlzO1xcbjcyMjg6XFx0XFx0ZW51bSBpZWVlODAyMTFfYnNzX3R5cGUgY29ubl9ic3NfdHlwZTtcXG43MjI5OlxcdFxcdHUzMiBjb25uX293bmVyX25scG9ydGlkO1xcbjcyMzA6XFx0XFxuNzIzMTpcXHRcXHRzdHJ1Y3Qgd2lwaHlfd29yayBkaXNjb25uZWN0X3drO1xcbjcyMzI6XFx0XFx0dTggZGlzY29ubmVjdF9ic3NpZFtFVEhfQUxFTl07XFxuNzIzMzpcXHRcXG43MjM0OlxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgZXZlbnRfbGlzdDtcXG43MjM1OlxcdFxcdHNwaW5sb2NrX3QgZXZlbnRfbG9jaztcXG43MjM2OlxcdFxcbjcyMzc6XFx0XFx0dTggY29ubmVjdGVkOjE7XFxuNzIzODpcXHRcXG43MjM5OlxcdFxcdGJvb2wgcHM7XFxuNzI0MDpcXHRcXHRpbnQgcHNfdGltZW91dDtcXG43MjQxOlxcdFxcbjcyNDI6XFx0XFx0dTMyIHVuZXhwZWN0ZWRfbmxwb3J0aWQ7XFxuNzI0MzpcXHRcXG43MjQ0OlxcdFxcdHUzMiBvd25lcl9ubHBvcnRpZDtcXG43MjQ1OlxcdFxcdGJvb2wgbmxfb3duZXJfZGVhZDtcXG43MjQ2OlxcdFxcbjcyNDc6XFx0I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxuNzI0ODpcXHRcXHQvKiB3ZXh0IGRhdGEgKi9cXG43MjQ5OlxcdFxcdHN0cnVjdCB7XFxuNzI1MDpcXHRcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfaWJzc19wYXJhbXMgaWJzcztcXG43MjUxOlxcdFxcdFxcdHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyBjb25uZWN0O1xcbjcyNTI6XFx0XFx0XFx0c3RydWN0IGNmZzgwMjExX2NhY2hlZF9rZXlzICprZXlzO1xcbjcyNTM6XFx0XFx0XFx0Y29uc3QgdTggKmllO1xcbjcyNTQ6XFx0XFx0XFx0c2l6ZV90IGllX2xlbjtcXG43MjU1OlxcdFxcdFxcdHU4IGJzc2lkW0VUSF9BTEVOXTtcXG43MjU2OlxcdFxcdFxcdHU4IHByZXZfYnNzaWRbRVRIX0FMRU5dO1xcbjcyNTc6XFx0XFx0XFx0dTggc3NpZFtJRUVFODAyMTFfTUFYX1NTSURfTEVOXTtcXG43MjU4OlxcdFxcdFxcdHM4IGRlZmF1bHRfa2V5LCBkZWZhdWx0X21nbXRfa2V5O1xcbjcyNTk6XFx0XFx0XFx0Ym9vbCBwcmV2X2Jzc2lkX3ZhbGlkO1xcbjcyNjA6XFx0XFx0fSB3ZXh0O1xcbjcyNjE6XFx0I2VuZGlmXFxuNzI2MjpcXHRcXG43MjYzOlxcdFxcdHN0cnVjdCB3aXBoeV93b3JrIGNxbV9yc3NpX3dvcms7XFxuNzI2NDpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfY3FtX2NvbmZpZyBfX3JjdSAqY3FtX2NvbmZpZztcXG43MjY1OlxcdFxcbjcyNjY6XFx0XFx0c3RydWN0IGxpc3RfaGVhZCBwbXNyX2xpc3Q7XFxuNzI2NzpcXHRcXHRzcGlubG9ja190IHBtc3JfbG9jaztcXG43MjY4OlxcdFxcdHN0cnVjdCB3aXBoeV93b3JrIHBtc3JfZnJlZV93aztcXG43MjY5OlxcdFxcbjcyNzA6XFx0XFx0dW5zaWduZWQgbG9uZyB1bnByb3RfYmVhY29uX3JlcG9ydGVkO1xcbjcyNzE6XFx0XFxuNzI3MjpcXHRcXHR1bmlvbiB7XFxuNzI3MzpcXHRcXHRcXHRzdHJ1Y3Qge1xcbjcyNzQ6XFx0XFx0XFx0XFx0dTggY29ubmVjdGVkX2FkZHJbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTtcXG43Mjc1OlxcdFxcdFxcdFxcdHU4IHNzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTl07XFxuNzI3NjpcXHRcXHRcXHRcXHR1OCBzc2lkX2xlbjtcXG43Mjc3OlxcdFxcdFxcdH0gY2xpZW50O1xcbjcyNzg6XFx0XFx0XFx0c3RydWN0IHtcXG43Mjc5OlxcdFxcdFxcdFxcdGludCBiZWFjb25faW50ZXJ2YWw7XFxuNzI4MDpcXHRcXHRcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgcHJlc2V0X2NoYW5kZWY7XFxuNzI4MTpcXHRcXHRcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgY2hhbmRlZjtcXG43MjgyOlxcdFxcdFxcdFxcdHU4IGlkW0lFRUU4MDIxMV9NQVhfTUVTSF9JRF9MRU5dO1xcbjcyODM6XFx0XFx0XFx0XFx0dTggaWRfbGVuLCBpZF91cF9sZW47XFxuNzI4NDpcXHRcXHRcXHR9IG1lc2g7XFxuNzI4NTpcXHRcXHRcXHRzdHJ1Y3Qge1xcbjcyODY6XFx0XFx0XFx0XFx0c3RydWN0IGNmZzgwMjExX2NoYW5fZGVmIHByZXNldF9jaGFuZGVmO1xcbjcyODc6XFx0XFx0XFx0XFx0dTggc3NpZFtJRUVFODAyMTFfTUFYX1NTSURfTEVOXTtcXG43Mjg4OlxcdFxcdFxcdFxcdHU4IHNzaWRfbGVuO1xcbjcyODk6XFx0XFx0XFx0fSBhcDtcXG43MjkwOlxcdFxcdFxcdHN0cnVjdCB7XFxuNzI5MTpcXHRcXHRcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpjdXJyZW50X2JzcztcXG43MjkyOlxcdFxcdFxcdFxcdHN0cnVjdCBjZmc4MDIxMV9jaGFuX2RlZiBjaGFuZGVmO1xcbjcyOTM6XFx0XFx0XFx0XFx0aW50IGJlYWNvbl9pbnRlcnZhbDtcXG43Mjk0OlxcdFxcdFxcdFxcdHU4IHNzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTl07XFxuNzI5NTpcXHRcXHRcXHRcXHR1OCBzc2lkX2xlbjtcXG43Mjk2OlxcdFxcdFxcdH0gaWJzcztcXG43Mjk3OlxcdFxcdFxcdHN0cnVjdCB7XFxuNzI5ODpcXHRcXHRcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgY2hhbmRlZjtcXG43Mjk5OlxcdFxcdFxcdH0gb2NiO1xcbjczMDA6XFx0XFx0XFx0c3RydWN0IHtcXG43MzAxOlxcdFxcdFxcdFxcdHU4IGNsdXN0ZXJfaWRbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTtcXG43MzAyOlxcdFxcdFxcdFxcdHU4IG5fY2hhbm5lbHM7XFxuNzMwMzpcXHRcXHRcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgKmNoYW5kZWZzO1xcbjczMDQ6XFx0XFx0XFx0XFx0Ym9vbCBzY2hlZF91cGRhdGVfcGVuZGluZztcXG43MzA1OlxcdFxcdFxcdH0gbmFuO1xcbjczMDY6XFx0XFx0fSB1O1xcbjczMDc6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjQ3OjQ3LjE5MDQyMTc2MloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDI4ODI3MDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlIHdlIGdvLiBIZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBwcm92aWRlZCB0ZXh0IGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqTWlzc2luZyBWYXJpYWJsZT8gVGltZSB0byBJbnZlc3RpZ2F0ZS4qKlxuXG5IbW0sIHNvbWV0aGluZyBzZWVtcyBvZmYuIEkgd2FzIGV4cGVjdGluZyB0byBzZWUgYHZhbGlkX2xpbmtzYCBkZWZpbmVkIGluIHRoaXMgY29udGV4dCwgYnV0IGl0J3Mgbm90IGltbWVkaWF0ZWx5IGFwcGFyZW50LiBUaGF0J3MgYSByZWQgZmxhZy4gQmVmb3JlIGp1bXBpbmcgdG8gY29uY2x1c2lvbnMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbi4gTGV0J3MgZGlnIGRlZXBlciBhbmQgZ2V0IG1vcmUgY29udGV4dC4gSSdsbCByZWFkIGZ1cnRoZXIgdG8gc2VlIHdoZXJlIGB2YWxpZF9saW5rc2AgbWlnaHQgYmUsIGhvdyBpdCdzIGJlaW5nIHVzZWQsIG9yIGlmIGl0IGhhcyBhbm90aGVyIG5hbWUgYWx0b2dldGhlci4gQSBxdWljayBzY2FuIHdvbid0IGRvOyBJIG5lZWQgdGhlIGZ1bGwgcGljdHVyZSBiZWZvcmUgSSBtYWtlIGFueSBqdWRnbWVudHMuIFRoZSBjb2RlJ3MgcHJvYmFibHkganVzdCBub3Qgb2J2aW91cyBmcm9tIHRoaXMgb25lIHNuaXBwZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzMjEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjQ3OjUwLjYxOTI1MThaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc2ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L2NmZzgwMjExLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNzMwOCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjczMDg6XFx0XFx0c3RydWN0IHtcXG43MzA5OlxcdFxcdFxcdHU4IGFkZHJbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTtcXG43MzEwOlxcdFxcdFxcdHVuaW9uIHtcXG43MzExOlxcdFxcdFxcdFxcdHN0cnVjdCB7XFxuNzMxMjpcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgYmVhY29uX2ludGVydmFsO1xcbjczMTM6XFx0XFx0XFx0XFx0XFx0c3RydWN0IGNmZzgwMjExX2NoYW5fZGVmIGNoYW5kZWY7XFxuNzMxNDpcXHRcXHRcXHRcXHR9IGFwO1xcbjczMTU6XFx0XFx0XFx0XFx0c3RydWN0IHtcXG43MzE2OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmN1cnJlbnRfYnNzO1xcbjczMTc6XFx0XFx0XFx0XFx0fSBjbGllbnQ7XFxuNzMxODpcXHRcXHRcXHR9O1xcbjczMTk6XFx0XFxuNzMyMDpcXHRcXHRcXHRib29sIGNhY19zdGFydGVkO1xcbjczMjE6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBjYWNfc3RhcnRfdGltZTtcXG43MzIyOlxcdFxcdFxcdHVuc2lnbmVkIGludCBjYWNfdGltZV9tcztcXG43MzIzOlxcdFxcdH0gbGlua3NbSUVFRTgwMjExX01MRF9NQVhfTlVNX0xJTktTXTtcXG43MzI0OlxcdFxcdHUxNiB2YWxpZF9saW5rcztcXG43MzI1OlxcdFxcbjczMjY6XFx0XFx0dTMyIHJhZGlvX21hc2s7XFxuNzMyNzpcXHR9O1xcbjczMjg6XFx0XFxuNzMyOTpcXHRzdGF0aWMgaW5saW5lIGNvbnN0IHU4ICp3ZGV2X2FkZHJlc3Moc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldilcXG43MzMwOlxcdHtcXG43MzMxOlxcdFxcdGlmICh3ZGV2LVxcdTAwM2VuZXRkZXYpXFxuNzMzMjpcXHRcXHRcXHRyZXR1cm4gd2Rldi1cXHUwMDNlbmV0ZGV2LVxcdTAwM2VkZXZfYWRkcjtcXG43MzMzOlxcdFxcdHJldHVybiB3ZGV2LVxcdTAwM2VhZGRyZXNzO1xcbjczMzQ6XFx0fVxcbjczMzU6XFx0XFxuNzMzNjpcXHRzdGF0aWMgaW5saW5lIGJvb2wgd2Rldl9ydW5uaW5nKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpXFxuNzMzNzpcXHR7XFxuNzMzODpcXHRcXHRpZiAod2Rldi1cXHUwMDNlbmV0ZGV2KVxcbjczMzk6XFx0XFx0XFx0cmV0dXJuIG5ldGlmX3J1bm5pbmcod2Rldi1cXHUwMDNlbmV0ZGV2KTtcXG43MzQwOlxcdFxcdHJldHVybiB3ZGV2LVxcdTAwM2Vpc19ydW5uaW5nO1xcbjczNDE6XFx0fVxcbjczNDI6XFx0XFxuNzM0MzpcXHQvKipcXG43MzQ0OlxcdCAqIHdkZXZfcHJpdiAtIHJldHVybiB3aXBoeSBwcml2IGZyb20gd2lyZWxlc3NfZGV2XFxuNzM0NTpcXHQgKlxcbjczNDY6XFx0ICogQHdkZXY6IFRoZSB3aXJlbGVzcyBkZXZpY2Ugd2hvc2Ugd2lwaHkncyBwcml2IHBvaW50ZXIgdG8gcmV0dXJuXFxuNzM0NzpcXHQgKiBSZXR1cm46IFRoZSB3aXBoeSBwcml2IG9mIEB3ZGV2LlxcbjczNDg6XFx0ICovXFxuNzM0OTpcXHRzdGF0aWMgaW5saW5lIHZvaWQgKndkZXZfcHJpdihzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxcbjczNTA6XFx0e1xcbjczNTE6XFx0XFx0QlVHX09OKCF3ZGV2KTtcXG43MzUyOlxcdFxcdHJldHVybiB3aXBoeV9wcml2KHdkZXYtXFx1MDAzZXdpcGh5KTtcXG43MzUzOlxcdH1cXG43MzU0OlxcdFxcbjczNTU6XFx0LyoqXFxuNzM1NjpcXHQgKiB3ZGV2X2NoYW5kZWYgLSByZXR1cm4gY2hhbmRlZiBwb2ludGVyIGZyb20gd2lyZWxlc3NfZGV2XFxuNzM1NzpcXHQgKiBAd2RldjogdGhlIHdkZXZcXG43MzU4OlxcdCAqIEBsaW5rX2lkOiB0aGUgbGluayBJRCBmb3IgTUxPXFxuNzM1OTpcXHQgKlxcbjczNjA6XFx0ICogUmV0dXJuOiBUaGUgY2hhbmRlZiBkZXBlbmRpbmcgb24gdGhlIG1vZGUsIG9yICVOVUxMLlxcbjczNjE6XFx0ICovXFxuNzM2MjpcXHRzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgKndkZXZfY2hhbmRlZihzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbjczNjM6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBsaW5rX2lkKTtcXG43MzY0OlxcdFxcbjczNjU6XFx0c3RhdGljIGlubGluZSB2b2lkIFdBUk5fSU5WQUxJRF9MSU5LX0lEKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuNzM2NjpcXHRcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgbGlua19pZClcXG43MzY3OlxcdHtcXG43MzY4OlxcdFxcdFdBUk5fT04obGlua19pZCBcXHUwMDI2XFx1MDAyNiAhd2Rldi1cXHUwMDNldmFsaWRfbGlua3MpO1xcbjczNjk6XFx0XFx0V0FSTl9PTih3ZGV2LVxcdTAwM2V2YWxpZF9saW5rcyBcXHUwMDI2XFx1MDAyNlxcbjczNzA6XFx0XFx0XFx0ISh3ZGV2LVxcdTAwM2V2YWxpZF9saW5rcyBcXHUwMDI2IEJJVChsaW5rX2lkKSkpO1xcbjczNzE6XFx0fVxcbjczNzI6XFx0XFxuNzM3MzpcXHQjZGVmaW5lIGZvcl9lYWNoX3ZhbGlkX2xpbmsobGlua19pbmZvLCBsaW5rX2lkKVxcdFxcdFxcdFxcXFxcXG43Mzc0OlxcdFxcdGZvciAobGlua19pZCA9IDA7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbjczNzU6XFx0XFx0ICAgICBsaW5rX2lkIFxcdTAwM2MgKChsaW5rX2luZm8pLVxcdTAwM2V2YWxpZF9saW5rcyA/XFx0XFx0XFxcXFxcbjczNzY6XFx0XFx0XFx0XFx0QVJSQVlfU0laRSgobGlua19pbmZvKS1cXHUwMDNlbGlua3MpIDogMSk7XFx0XFxcXFxcbjczNzc6XFx0XFx0ICAgICBsaW5rX2lkKyspXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbjczNzg6XFx0XFx0XFx0aWYgKCEobGlua19pbmZvKS1cXHUwMDNldmFsaWRfbGlua3MgfHxcXHRcXHRcXFxcXFxuNzM3OTpcXHRcXHRcXHQgICAgKChsaW5rX2luZm8pLVxcdTAwM2V2YWxpZF9saW5rcyBcXHUwMDI2IEJJVChsaW5rX2lkKSkpXFxuNzM4MDpcXHRcXG43MzgxOlxcdC8qKlxcbjczODI6XFx0ICogRE9DOiBVdGlsaXR5IGZ1bmN0aW9uc1xcbjczODM6XFx0ICpcXG43Mzg0OlxcdCAqIGNmZzgwMjExIG9mZmVycyBhIG51bWJlciBvZiB1dGlsaXR5IGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSB1c2VmdWwuXFxuNzM4NTpcXHQgKi9cXG43Mzg2OlxcdFxcbjczODc6XFx0LyoqXFxuNzM4ODpcXHQgKiBpZWVlODAyMTFfY2hhbm5lbF9lcXVhbCAtIGNvbXBhcmUgdHdvIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbFxcbjczODk6XFx0ICpcXG43MzkwOlxcdCAqIEBhOiAxc3Qgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsXFxuNzM5MTpcXHQgKiBAYjogMm5kIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbFxcbjczOTI6XFx0ICogUmV0dXJuOiB0cnVlIGlmIGNlbnRlciBmcmVxdWVuY3kgb2YgQGEgPT0gQGJcXG43MzkzOlxcdCAqL1xcbjczOTQ6XFx0c3RhdGljIGlubGluZSBib29sXFxuNzM5NTpcXHRpZWVlODAyMTFfY2hhbm5lbF9lcXVhbChzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmEsXFxuNzM5NjpcXHRcXHRcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmIpXFxuNzM5NzpcXHR7XFxuNzM5ODpcXHRcXHRyZXR1cm4gKGEtXFx1MDAzZWNlbnRlcl9mcmVxID09IGItXFx1MDAzZWNlbnRlcl9mcmVxIFxcdTAwMjZcXHUwMDI2XFxuNzM5OTpcXHRcXHRcXHRhLVxcdTAwM2VmcmVxX29mZnNldCA9PSBiLVxcdTAwM2VmcmVxX29mZnNldCk7XFxuNzQwMDpcXHR9XFxuNzQwMTpcXHRcXG43NDAyOlxcdC8qKlxcbjc0MDM6XFx0ICogaWVlZTgwMjExX2NoYW5uZWxfdG9fa2h6IC0gY29udmVydCBpZWVlODAyMTFfY2hhbm5lbCB0byBmcmVxdWVuY3kgaW4gS0h6XFxuNzQwNDpcXHQgKiBAY2hhbjogc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIHRvIGNvbnZlcnRcXG43NDA1OlxcdCAqIFJldHVybjogVGhlIGNvcnJlc3BvbmRpbmcgZnJlcXVlbmN5IChpbiBLSHopXFxuNzQwNjpcXHQgKi9cXG43NDA3OlxcdHN0YXRpYyBpbmxpbmUgdTMyXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjQ3OjUwLjYxOTYzMjE1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMTUxNDY5OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVGhpbmtpbmcgVGhyb3VnaCBMaW5rIE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIEkgc2VlIGB2YWxpZF9saW5rc2AgZGVjbGFyZWQgYXMgYSBgdTE2YC4gU2VlbXMgc3RhbmRhcmQgZW5vdWdoOyB1c2luZyBhIDE2LWJpdCB1bnNpZ25lZCBpbnRlZ2VyIHRvIHJlcHJlc2VudCBhIGNvdW50IG9yIGFuIGluZGV4IGlzIHByZXR0eSBjb21tb24gYW5kIHByb2JhYmx5IGVmZmljaWVudCBmb3Igd2hhdGV2ZXIgdGhpcyBhcHBsaWNhdGlvbiBpcy4gVGhlbiwgSSBzZWUgYGxpbmtzYCBpcyBhbiBhcnJheSBhbmQgaXRzIHNpemUgaXMgZGVmaW5lZCBieSBgSUVFRTgwMjExX01MRF9NQVhfTlVNX0xJTktTYC4gVGhhdCdzIHRoZSBrZXkgcXVlc3Rpb24gbm93OiBXaGF0IGV4YWN0bHkgKmlzKiBgSUVFRTgwMjExX01MRF9NQVhfTlVNX0xJTktTYD8gSSBuZWVkIHRvIGtub3cgdGhlIG1heGltdW0gbnVtYmVyIG9mIGxpbmtzIHRoaXMgc3lzdGVtIGlzIGRlc2lnbmVkIHRvIGhhbmRsZS4gVGhhdCB2YWx1ZSBpcyBjcnVjaWFsOyBpdCBkaWN0YXRlcyB0aGUgdXBwZXIgYm91bmQgZm9yIHdoYXQgY2FuIGJlIHN0b3JlZCBpbiB0aGUgYGxpbmtzYCBhcnJheS4gV2l0aG91dCBrbm93aW5nIHRoYXQgY29uc3RhbnQsIEkgY2FuJ3QgZGV0ZXJtaW5lIHRoZSBtZW1vcnkgZm9vdHByaW50LCBvciBhc3Nlc3MgaG93IGVmZmljaWVudGx5IHRoZSBzeXN0ZW0gd2lsbCBiZWhhdmUgdW5kZXIgaGVhdnkgbG9hZC4gSSdtIGdvaW5nIHRvIHRyYWNrIHRoYXQgZG93biBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMzksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjQ3OjU0LjYzNDc4MjMyMloiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzOTEwMDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmUgSUVFRTgwMjExX01MRF9NQVhfTlVNX0xJTktTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaWVlZTgwMjExLWVodC5oPTQ0NT1lbnVtIGllZWU4MDIxMV9wcm90ZWN0ZWRfZWh0X2FjdGlvbmNvZGUge1xcbi0tXFxuaW5jbHVkZS9saW51eC9pZWVlODAyMTEtZWh0LmgtNDYxLS8qIG11bHRpLWxpbmsgZGV2aWNlICovXFxuaW5jbHVkZS9saW51eC9pZWVlODAyMTEtZWh0Lmg6NDYyOiNkZWZpbmUgSUVFRTgwMjExX01MRF9NQVhfTlVNX0xJTktTXFx0MTVcXG5pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS1laHQuaC00NjMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjQ3OjU0Ljc3ODY5OTU3N1oiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTkwMDYwNDM1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE91dC1vZi1Cb3VuZHMgUmVhZCBpbiBXaXJlbGVzcyBEZXZpY2UgTGluayBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIHdpcmVsZXNzIGRyaXZlciBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgYGxpbmtfaWRgIGlzIGxpbWl0ZWQgdG8gMTUgd2hlbiBgd2Rldi1cdTAwM2V2YWxpZF9saW5rc2AgaXMgdXNlZCBiZWNhdXNlIG9mIHRoZSBgQklUKGxpbmtfaWQpYCBjaGVjaywgcmlnaHQ/ICBCdXQgdGhlbiBJIHJlbWVtYmVyZWQgdGhhdCBgQklUYCB1c2VzIGFuIHVuc2lnbmVkIGxvbmcsIHdoaWNoIGNhbiBoYW5kbGUgc2hpZnRzIHVwIHRvIDYzLCBub3QganVzdCAzMi4gU28gYSBgbGlua19pZGAgb2YgMTYgbWVhbnMgYEJJVCgxNilgIGlzIGAweDEwMDAwYC4gU2luY2UgYHZhbGlkX2xpbmtzYCBpcyBhIGB1MTZgLCB0aGUgYml0d2lzZSBBTkQgb3BlcmF0aW9uIGB2YWxpZF9saW5rcyBcdTAwMjYgQklUKDE2KWAgd291bGQgYWx3YXlzIHJlc3VsdCBpbiB6ZXJvLiBDb25zZXF1ZW50bHksIHRoZSBmdW5jdGlvbiB3b3VsZCByZXR1cm4gYC1FTk9MSU5LYC5cblxuVGhlbiBpdCBoaXQgbWU6IHRoZSBSRUFMIGJ1ZyBpcyB0aGF0IHRoZSBgbGlua19pZGAgaXMgdXNlZCB0byBpbmRleCB0aGUgYHdkZXYtXHUwMDNlbGlua3NgIGFycmF5LCB3aGljaCBvbmx5IGhhcyBhIHNpemUgb2YgMTUhIEJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBgbGlua19pZGAgd2Fzbid0IHZhbGlkYXRlZCAqYmVmb3JlKiB0aGUgc3dpdGNoIHN0YXRlbWVudC4gSW5zdGVhZCwgdGhlIHZhbGlkYXRpb24gY2FtZSBsYXRlciBpbiB0aGUgZnVuY3Rpb24sIEFGVEVSIHRoZSBhcnJheSBpbmRleCB3YXMgYmVpbmcgdXNlZC5cblxuVGhlIGNvZGUgcmV2ZWFscyB0aGUgcHJvYmxlbTogd2hlbiBgd2Rldi1cdTAwM2V2YWxpZF9saW5rc2AgaXMgemVybywgYGxpbmtfaWRgIGlzIHplcm8uIFdoZW4gYHdkZXYtXHUwMDNldmFsaWRfbGlua3NgIGlzIG5vdCB6ZXJvLCBgbGlua19pZGAgYmVjb21lcyBgcGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkYC4gSW1wb3J0YW50bHksIGJlZm9yZSB0aGUgcGF0Y2gsIHRoZXJlIHdhcyBubyB2YWxpZGF0aW9uIG9mIGBwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWRgICpiZWZvcmUqIGl0IHdhcyB1c2VkIHRvIGluZGV4IHRoZSBhcnJheS4gVGhlIHZhbGlkYXRpb24gd2FzIGRvbmUgYXQgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24sIHRvbyBsYXRlLiBTbyBgbGlua19pZGAgY291bGQgYmUgYW55dGhpbmchIEl0J3MgcGFyc2VkIGZyb20gYGluZm8tXHUwMDNlYXR0cnNgIHZpYSBgbmw4MDIxMV9saW5rX2lkX29yX2ludmFsaWQoaW5mby1cdTAwM2VhdHRycylgLiBJZiBpdCdzIGludmFsaWQsIGl0J3MgLTEuIElmIGl0J3MgdmFsaWQsIGl0J3MgYSBgdThgLCB3aGljaCBtZWFucyBpdCBjYW4gYmUgYW55dGhpbmcgZnJvbSAwIHRvIDI1NS5cblxuU28gaWYgYGxpbmtfaWRgIGlzIHVwIHRvIDI1NSwgdXNpbmcgaXQgdG8gaW5kZXggYHdkZXYtXHUwMDNlbGlua3NbbGlua19pZF1gIHdpbGwgY2F1c2UgYW4gb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3MhIGB3ZGV2LVx1MDAzZWxpbmtzYCBpcyBzaXplIDE1ISBUaGlzIGlzIGEgdGV4dGJvb2sgb3V0LW9mLWJvdW5kcyByZWFkIVxuXG5UaGUgY29kZSByZWFkcyB0aGUgYGJlYWNvbl9pbnRlcnZhbGAgZmllbGQ6IGBpZiAoIXdkZXYtXHUwMDNlbGlua3NbbGlua19pZF0uYXAuYmVhY29uX2ludGVydmFsKWAuIEFuZCBzaW5jZSBgc3RydWN0IHdpcmVsZXNzX2RldmAgaXMgdXN1YWxseSBhbGxvY2F0ZWQgb24gdGhlIGhlYXAgKHBlcmhhcHMgYXMgcGFydCBvZiBgc3RydWN0IG5ldF9kZXZpY2VgIG9yIHNpbWlsYXIsIG9yIGJ5IGBremFsbG9jYCksIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBjb3VsZCBwb3RlbnRpYWxseSBsZWFkIHRvIHJlYWRpbmcgb3RoZXIgaGVhcCBkYXRhLCBhbHRob3VnaCwgaW4gdGhpcyBjYXNlLCBpdCdzIGp1c3QgY2hlY2tpbmcgaWYgaXQncyB6ZXJvLiBJZiBpdCdzIHplcm8sIGl0IHJldHVybnMgYC1FTkVURE9XTmA7IG90aGVyd2lzZSwgaXQgY29udGludWVzLlxuXG5UaGFua2Z1bGx5LCB0aGlzIGlzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCwgYW5kIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIHNob3VsZCBjYXRjaCBpdC4gSXQgZGV0ZWN0cyBleGFjdGx5IHRoZXNlIHR5cGVzIG9mIG1lbW9yeSB2aW9sYXRpb25zLiBJIGRvbid0IHRoaW5rIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGEgcHJpbWFyeSBpc3N1ZSBoZXJlOyBpdCdzIHRoZSBvdXQtb2YtYm91bmRzIHJlYWQgaXRzZWxmLlxuXG5XYWl0LCB3aGF0IGlmIGBsaW5rX2lkYCBpcyBuZWdhdGl2ZT8gU2luY2UgYHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19pZGAgaXMgYW4gYGludGAsIGlmIGl0J3MgLTEgKGludmFsaWQpLCBhbmQgaWYgYHdkZXYtXHUwMDNldmFsaWRfbGlua3NgIGlzIG5vdCB6ZXJvLCB0aGVuIGBsaW5rX2lkYCBiZWNvbWVzIC0xLiBUaGUgc3Vic2VxdWVudCBhY2Nlc3MgYHdkZXYtXHUwMDNlbGlua3NbLTFdYCBpcyBhbm90aGVyIG91dC1vZi1ib3VuZHMgcmVhZCwgdGhpcyB0aW1lIGFuIHVuZGVyZmxvdy4gS0FTQU4gY2F0Y2hlcyBpdC5cblxuVGhlIHBhdGNoIGZpeGVzIHRoaXMgYnkgbW92aW5nIHRoZSB2YWxpZGF0aW9uIG9mIGBsaW5rX2lkYCAqYmVmb3JlKiB0aGUgc3dpdGNoIHN0YXRlbWVudC4gU28gbm93IGBsaW5rX2lkYCBpcyB2YWxpZGF0ZWQgdG8gYmUgYFx1MDAzZT0gMGAgYW5kIGBCSVQobGlua19pZClgIGlzIGluIGB2YWxpZF9saW5rc2AuIFNpbmNlIGB2YWxpZF9saW5rc2AgaXMgYSBgdTE2YCwgYEJJVChsaW5rX2lkKWAgY2FuIG9ubHkgYmUgbm9uLXplcm8gaWYgYGxpbmtfaWRgIGlzIGxlc3MgdGhhbiAxNi4gU28gYGxpbmtfaWRgIGlzIG5vdyBib3VuZCBmcm9tIDAgdG8gMTUuIFRoaXMgcGVyZmVjdGx5IGFkZHJlc3NlcyB0aGUgb3V0LW9mLWJvdW5kcyByZWFkLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSBuZWVkIHRvIGNoZWNrIGlmIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludm9sdmVkLiBJcyB0aGUgYHBhcmFtc2AgdmFyaWFibGUgaW5pdGlhbGl6ZWQ/IGBwYXJhbXNgIGlzIGEgbG9jYWwgdmFyaWFibGU6IGBzdHJ1Y3Qgc3RhdGlvbl9wYXJhbWV0ZXJzIHBhcmFtcztgLiBBbmQgSSBuZWVkIHRvIGtub3cgd2hldGhlciB0aGUgdmFyaWFibGUgaXMgaW5pdGlhbGl6ZWQuIEkgdGhpbmsgSSBoYXZlIGFjY291bnRlZCBmb3IgYWxsIHNjZW5hcmlvcyBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0OTEsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjQ4OjEwLjY3OTMwNzgwNloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjI0NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3dpcmVsZXNzL25sODAyMTEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MTc0LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI5MTc0OlxcdHN0YXRpYyBpbnQgbmw4MDIxMV9uZXdfc3RhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbjkxNzU6XFx0e1xcbjkxNzY6XFx0XFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby1cXHUwMDNldXNlcl9wdHJbMF07XFxuOTE3NzpcXHRcXHRpbnQgZXJyLCBsaW5rX2lkO1xcbjkxNzg6XFx0XFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGluZm8tXFx1MDAzZXVzZXJfcHRyWzFdO1xcbjkxNzk6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHdkZXYtXFx1MDAzZW5ldGRldjtcXG45MTgwOlxcdFxcdHN0cnVjdCBzdGF0aW9uX3BhcmFtZXRlcnMgcGFyYW1zO1xcbjkxODE6XFx0XFx0dTggKm1hY19hZGRyID0gTlVMTDtcXG45MTgyOlxcdFxcdHUzMiBhdXRoX2Fzc29jID0gQklUKE5MODAyMTFfU1RBX0ZMQUdfQVVUSEVOVElDQVRFRCkgfFxcbjkxODM6XFx0XFx0XFx0XFx0IEJJVChOTDgwMjExX1NUQV9GTEFHX0FTU09DSUFURUQpO1xcbjkxODQ6XFx0XFxuOTE4NTpcXHRcXHRtZW1zZXQoXFx1MDAyNnBhcmFtcywgMCwgc2l6ZW9mKHBhcmFtcykpO1xcbjkxODY6XFx0XFxuOTE4NzpcXHRcXHRpZiAoIWRldiBcXHUwMDI2XFx1MDAyNiB3ZGV2LVxcdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTkFOKVxcbjkxODg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuOTE4OTpcXHRcXG45MTkwOlxcdFxcdGlmICghcmRldi1cXHUwMDNlb3BzLVxcdTAwM2VhZGRfc3RhdGlvbilcXG45MTkxOlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG45MTkyOlxcdFxcbjkxOTM6XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUFDXSlcXG45MTk0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjkxOTU6XFx0XFxuOTE5NjpcXHRcXHRpZiAod2Rldi1cXHUwMDNlaWZ0eXBlID09IE5MODAyMTFfSUZUWVBFX05BTiB8fFxcbjkxOTc6XFx0XFx0ICAgIHdkZXYtXFx1MDAzZWlmdHlwZSA9PSBOTDgwMjExX0lGVFlQRV9OQU5fREFUQSkge1xcbjkxOTg6XFx0XFx0XFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfU1VQUE9SVEVEX1JBVEVTXSlcXG45MTk5OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjkyMDA6XFx0XFx0XFx0aWYgKHdkZXYtXFx1MDAzZWlmdHlwZSA9PSBOTDgwMjExX0lGVFlQRV9OQU5fREFUQSkge1xcbjkyMDE6XFx0XFx0XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTkFOX05NSV9NQUNdKVxcbjkyMDI6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuOTIwMzpcXHRcXG45MjA0OlxcdFxcdFxcdFxcdC8qIE9ubHkgTk1JIHN0YXRpb25zIHJlY2VpdmUgdGhlIEhUL1ZIVC9IRSBjYXBhYmlsaXRpZXMgKi9cXG45MjA1OlxcdFxcdFxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfSFRfQ0FQQUJJTElUWV0gfHxcXG45MjA2OlxcdFxcdFxcdFxcdCAgICBpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfVkhUX0NBUEFCSUxJVFldIHx8XFxuOTIwNzpcXHRcXHRcXHRcXHQgICAgaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0hFX0NBUEFCSUxJVFldKVxcbjkyMDg6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuOTIwOTpcXHRcXHRcXHR9XFxuOTIxMDpcXHRcXHR9IGVsc2Uge1xcbjkyMTE6XFx0XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX0xJU1RFTl9JTlRFUlZBTF0pXFxuOTIxMjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG45MjEzOlxcdFxcbjkyMTQ6XFx0XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX1NVUFBPUlRFRF9SQVRFU10pXFxuOTIxNTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG45MjE2OlxcdFxcbjkyMTc6XFx0XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX0FJRF0gXFx1MDAyNlxcdTAwMjZcXG45MjE4OlxcdFxcdFxcdCAgICAhaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1BFRVJfQUlEXSlcXG45MjE5OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjkyMjA6XFx0XFx0fVxcbjkyMjE6XFx0XFxuOTIyMjpcXHRcXHRwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWQgPVxcbjkyMjM6XFx0XFx0XFx0bmw4MDIxMV9saW5rX2lkX29yX2ludmFsaWQoaW5mby1cXHUwMDNlYXR0cnMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTo0ODoxMC42ODAwMzM0MzdaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEyMTYzNDcxOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBTZXNzaW9uIE5vdCBOZWVkZWQqKlxuXG5Pa2F5LCBzbyBoZXJlJ3MgdGhlIGJyZWFrZG93biBvZiBteSB0aGlua2luZy4gSSd2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IGFkZHJlc3NlcyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5LiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNvbnNpZGVyIEtNU0FOLCBidXQgbGV0J3MgYmUgbWV0aG9kaWNhbC5cblxuRmlyc3QsIEkgc2VlIGBwYXJhbXNgIGlzIGluaXRpYWxpemVkIHdpdGggYG1lbXNldGAsIHNvIHRoZXJlJ3MgYWJzb2x1dGVseSBubyBpc3N1ZSB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmUuIFRoYXQgcnVsZXMgb3V0IG9uZSBwb3RlbnRpYWwgYXJlYSB3aGVyZSBLTVNBTiBzaGluZXMuXG5cblRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIGJvaWxzIGRvd24gdG8gYW4gb3V0LW9mLWJvdW5kcyByZWFkIGZyb20gYHdkZXYtXHUwMDNlbGlua3NbbGlua19pZF1gLiBUaGlzIGlzIHByZWNpc2VseSB0aGUga2luZCBvZiB0aGluZyBLQVNBTiBpcyBidWlsdCB0byBjYXRjaC4gV2UncmUgdGFsa2luZyBhYm91dCBhY2Nlc3NpbmcgbWVtb3J5IG91dHNpZGUgdGhlIGFsbG9jYXRlZCBib3VuZGFyaWVzIG9mIGFuIGFycmF5LCB3aGljaCBpcyBhIGNsYXNzaWMgS0FTQU4gc2NlbmFyaW8uXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgS01TQU4gdnMuIEtBU0FOIHJ1bGVzOiBLQVNBTiBuYWlscyBkb3duIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIHVzZS1hZnRlci1mcmVlLCB3aGlsZSBLTVNBTiBmb2N1c2VzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLiBUaGlzIHZ1bG5lcmFiaWxpdHkgZG9lc24ndCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGEgd2F5IEtBU0FOIG1pc3Nlcywgbm9yIGlzIHRoZXJlIGEga2VybmVsIGluZm9ybWF0aW9uIGxlYWsuIEl0J3MgYSBzdHJhaWdodC11cCBpbmRleCBvdXQgb2YgYm91bmRzLlxuXG5JbiBteSB2aWV3LCBLQVNBTiB3aWxsIGRldGVjdCB0aGlzIG91dC1vZi1ib3VuZHMgYWNjZXNzIGp1c3QgZmluZS4gVGhlIHBhdGNoJ3MgaW1wYWN0IGlzIHRoYXQgaXQgZml4ZXMgYSBzaXR1YXRpb24gd2hlcmUgYGxpbmtfaWRgIGlzIG5vdCB2YWxpZGF0ZWQgYW5kIGNhbiBiZSB1c2VkIHRvIHJlYWQgYmV5b25kIHRoZSBib3VuZGFyaWVzIG9mIHRoZSBgd2Rldi1cdTAwM2VsaW5rc2AgYXJyYXkuIE5vIGBJRUVFODAyMTFfTUxEX01BWF9OVU1fTElOS1NgIGNoZWNrIG9yIG5lZ2F0aXZlIHZhbHVlIGNoZWNrIG9uIGxpbmtfaWQuIFRoaXMgaXMgYSBjbGFzc2ljIGV4YW1wbGUgb2YgYW4gb3V0LW9mLWJvdW5kcyByZWFkLiBUaGUgZmFjdCB0aGF0IGBwYXJhbXNgIGlzIGZ1bGx5IGluaXRpYWxpemVkIG1ha2VzIHRoaXMgZXZlbiBtb3JlIGNsZWFyLlxuXG5NeSBjb25jbHVzaW9uPyBUaGVyZSdzIG5vIHZhbHVlIGluIGRlZGljYXRpbmcgdGltZSB0byBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBoZXJlLiBLQVNBTiBpcyB0aGUgcmlnaHQgdG9vbCBmb3IgdGhlIGpvYi4gTm8gTmVlZCBmb3IgS01TQU4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjY1LCJPdXRwdXRUb2tlbnMiOjIzMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjQ4OjIxLjg5NjM4NDQ0M1oiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHZ1bG5lcmFiaWxpdHkgaW4gYG5sODAyMTFfbmV3X3N0YXRpb24oKWAuIEJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBgbGlua19pZGAgZXh0cmFjdGVkIGZyb20gbmV0bGluayBhdHRyaWJ1dGVzIHdhcyBub3QgdmFsaWRhdGVkIGFnYWluc3QgdGhlIG1heGltdW0gbnVtYmVyIG9mIGxpbmtzIG9yIGNoZWNrZWQgZm9yIG5lZ2F0aXZlIHZhbHVlcyBiZWZvcmUgYmVpbmcgdXNlZCBhcyBhbiBpbmRleCB0byBhY2Nlc3MgdGhlIGB3ZGV2LVxcdTAwM2VsaW5rc1tsaW5rX2lkXWAgYXJyYXkuIFRoaXMgYWxsb3dlZCBhbiBhdHRhY2tlciB0byB0cmlnZ2VyIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB3aGVuIGNoZWNraW5nIGB3ZGV2LVxcdTAwM2VsaW5rc1tsaW5rX2lkXS5hcC5iZWFjb25faW50ZXJ2YWxgLlxcblxcbk91dC1vZi1ib3VuZHMgYWNjZXNzZXMgKGJvdGggcmVhZHMgYW5kIHdyaXRlcykgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgYHBhcmFtc2Agc3RydWN0dXJlIGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgdmlhIGBtZW1zZXQoXFx1MDAyNnBhcmFtcywgMCwgc2l6ZW9mKHBhcmFtcykpO2AsIGFuZCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2VzIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MgaW52b2x2ZWQgaW4gdGhpcyBidWcuIFNpbmNlIEtBU0FOIGlzIGZ1bGx5IGNhcGFibGUgb2YgY2F0Y2hpbmcgdGhpcyBvdXQtb2YtYm91bmRzIHJlYWQsIHRoZXJlIGlzIG5vIG5lZWQgdG8gcnVuIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eSBpbiBgbmw4MDIxMV9uZXdfc3RhdGlvbigpYC4gQmVmb3JlIHRoZSBwYXRjaCwgdGhlIGBsaW5rX2lkYCBleHRyYWN0ZWQgZnJvbSBuZXRsaW5rIGF0dHJpYnV0ZXMgd2FzIG5vdCB2YWxpZGF0ZWQgYWdhaW5zdCB0aGUgbWF4aW11bSBudW1iZXIgb2YgbGlua3Mgb3IgY2hlY2tlZCBmb3IgbmVnYXRpdmUgdmFsdWVzIGJlZm9yZSBiZWluZyB1c2VkIGFzIGFuIGluZGV4IHRvIGFjY2VzcyB0aGUgYHdkZXYtXFx1MDAzZWxpbmtzW2xpbmtfaWRdYCBhcnJheS4gVGhpcyBhbGxvd2VkIGFuIGF0dGFja2VyIHRvIHRyaWdnZXIgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHdoZW4gY2hlY2tpbmcgYHdkZXYtXFx1MDAzZWxpbmtzW2xpbmtfaWRdLmFwLmJlYWNvbl9pbnRlcnZhbGAuXFxuXFxuT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyAoYm90aCByZWFkcyBhbmQgd3JpdGVzKSBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBgcGFyYW1zYCBzdHJ1Y3R1cmUgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZCB2aWEgYG1lbXNldChcXHUwMDI2cGFyYW1zLCAwLCBzaXplb2YocGFyYW1zKSk7YCwgYW5kIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZXMgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBpbnZvbHZlZCBpbiB0aGlzIGJ1Zy4gU2luY2UgS0FTQU4gaXMgZnVsbHkgY2FwYWJsZSBvZiBjYXRjaGluZyB0aGlzIG91dC1vZi1ib3VuZHMgcmVhZCwgdGhlcmUgaXMgbm8gbmVlZCB0byBydW4gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowr4kvc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-13 09:26:03 +0000 UTC FinishedAt: 2026-08-13 09:48: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": "3d6d817622b0a9721e3cc404df3469171582be13", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "MAC80211", "MAC80211_HWSIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "3d6d817622b0a9721e3cc404df3469171582be13", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "MAC80211", "MAC80211_HWSIM" ], "series_id": "256a0130-8f99-4e7d-8116-32518d856b6f" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nl80211_new_station" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmw4MDIxMV9uZXdfc3RhdGlvbiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB2dWxuZXJhYmlsaXR5IGluIGBubDgwMjExX25ld19zdGF0aW9uKClgLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgYGxpbmtfaWRgIGV4dHJhY3RlZCBmcm9tIG5ldGxpbmsgYXR0cmlidXRlcyB3YXMgbm90IHZhbGlkYXRlZCBhZ2FpbnN0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBsaW5rcyBvciBjaGVja2VkIGZvciBuZWdhdGl2ZSB2YWx1ZXMgYmVmb3JlIGJlaW5nIHVzZWQgYXMgYW4gaW5kZXggdG8gYWNjZXNzIHRoZSBgd2Rldi1cdTAwM2VsaW5rc1tsaW5rX2lkXWAgYXJyYXkuIFRoaXMgYWxsb3dlZCBhbiBhdHRhY2tlciB0byB0cmlnZ2VyIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB3aGVuIGNoZWNraW5nIGB3ZGV2LVx1MDAzZWxpbmtzW2xpbmtfaWRdLmFwLmJlYWNvbl9pbnRlcnZhbGAuXG5cbk91dC1vZi1ib3VuZHMgYWNjZXNzZXMgKGJvdGggcmVhZHMgYW5kIHdyaXRlcykgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgYHBhcmFtc2Agc3RydWN0dXJlIGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgdmlhIGBtZW1zZXQoXHUwMDI2cGFyYW1zLCAwLCBzaXplb2YocGFyYW1zKSk7YCwgYW5kIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZXMgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBpbnZvbHZlZCBpbiB0aGlzIGJ1Zy4gU2luY2UgS0FTQU4gaXMgZnVsbHkgY2FwYWJsZSBvZiBjYXRjaGluZyB0aGlzIG91dC1vZi1ib3VuZHMgcmVhZCwgdGhlcmUgaXMgbm8gbmVlZCB0byBydW4gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0bGluayBjYWxsYmFjayBgbmw4MDIxMV9uZXdfc3RhdGlvbmAgaW4gY2ZnODAyMTEsIGNoYW5naW5nIHRoZSB2YWxpZGF0aW9uIGxvZ2ljIGZvciBgbGlua19pZGAgYW5kIGFkZGluZyBhIGNoZWNrIGZvciBgYmVhY29uX2ludGVydmFsYCB3aGVuIGFkZGluZyBhIG5ldyBzdGF0aW9uIHRvIGFuIEFQIG9yIFAyUF9HTyBpbnRlcmZhY2UuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgd2lyZWxlc3MgbG9naWMgdGhhdCBjYW4gYmUgdGVzdGVkIHVzaW5nIHRoZSBtYWM4MDIxMV9od3NpbSBkcml2ZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6NDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwMTA5ZjBlZmFlN2FmZTFiOTc0NjZmNjQzNjQzYWIxNjBhMzcxYzcyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMDk6NDY6NTEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmNcbmluZGV4IDVhZGNiNmJkMGZjNTYuLjc1YmJkNzhmOTFiYTMgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG5AQCAtOTE3NCw3ICYjNDM7OTE3NCw3IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfc3RhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIHN0YXRpYyBpbnQgbmw4MDIxMV9uZXdfc3RhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IGluZm8tXHUwMDNldXNlcl9wdHJbMF07XG4tXHRpbnQgZXJyO1xuJiM0MztcdGludCBlcnIsIGxpbmtfaWQ7XG4gXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clsxXTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB3ZGV2LVx1MDAzZW5ldGRldjtcbiBcdHN0cnVjdCBzdGF0aW9uX3BhcmFtZXRlcnMgcGFyYW1zO1xuQEAgLTkyMjIsNiAmIzQzOzkyMjIsMTYgQEAgc3RhdGljIGludCBubDgwMjExX25ld19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWQgPVxuIFx0XHRubDgwMjExX2xpbmtfaWRfb3JfaW52YWxpZChpbmZvLVx1MDAzZWF0dHJzKTtcbiBcbiYjNDM7XHRpZiAod2Rldi1cdTAwM2V2YWxpZF9saW5rcykge1xuJiM0MztcdFx0aWYgKHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19pZCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRpZiAoISh3ZGV2LVx1MDAzZXZhbGlkX2xpbmtzIFx1MDAyNiBCSVQocGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkKSkpXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PTElOSztcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0aWYgKHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19pZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUxEX0FERFJdKSB7XG4gXHRcdG1hY19hZGRyID0gbmxhX2RhdGEoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUxEX0FERFJdKTtcbiBcdFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5tbGRfbWFjID0gbWFjX2FkZHI7XG5AQCAtOTQwMiw4ICYjNDM7OTQxMiwxMiBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcbiBcdHN3aXRjaCAod2Rldi1cdTAwM2VpZnR5cGUpIHtcbiBcdGNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6XG4tXHRjYXNlIE5MODAyMTFfSUZUWVBFX0FQX1ZMQU46XG4gXHRjYXNlIE5MODAyMTFfSUZUWVBFX1AyUF9HTzpcbiYjNDM7XHRcdC8qIEFkZCBhIG5ldyBzdGF0aW9uIG9ubHkgYWZ0ZXIgdGhlIEFQIGFuZCBsaW5rIGhhcyBiZWVuIHN0YXJ0ZWQgKi9cbiYjNDM7XHRcdGxpbmtfaWQgPSB3ZGV2LVx1MDAzZXZhbGlkX2xpbmtzID8gcGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkIDogMDtcbiYjNDM7XHRcdGlmICghd2Rldi1cdTAwM2VsaW5rc1tsaW5rX2lkXS5hcC5iZWFjb25faW50ZXJ2YWwpXG4mIzQzO1x0XHRcdHJldHVybiAtRU5FVERPV047XG4mIzQzO1xuIFx0XHQvKiBpZ25vcmUgV01FIGF0dHJpYnV0ZXMgaWYgaWZhY2Uvc3RhIGlzIG5vdCBjYXBhYmxlICovXG4gXHRcdGlmICghKHJkZXYtXHUwMDNld2lwaHkuZmxhZ3MgXHUwMDI2IFdJUEhZX0ZMQUdfQVBfVUFQU0QpIHx8XG4gXHRcdCAgICAhKHBhcmFtcy5zdGFfZmxhZ3Nfc2V0IFx1MDAyNiBCSVQoTkw4MDIxMV9TVEFfRkxBR19XTUUpKSlcbkBAIC05NDk1LDI3ICYjNDM7OTUwOSwxMCBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcbiBcdC8qIGJlIGF3YXJlIG9mIHBhcmFtcy52bGFuIHdoZW4gY2hhbmdpbmcgY29kZSBoZXJlICovXG4gXG4tXHRpZiAod2Rldi1cdTAwM2V2YWxpZF9saW5rcykge1xuLVx0XHRpZiAocGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkIFx1MDAzYyAwKSB7XG4tXHRcdFx0ZXJyID0gLUVJTlZBTDtcbi1cdFx0XHRnb3RvIG91dDtcbi1cdFx0fVxuLVx0XHRpZiAoISh3ZGV2LVx1MDAzZXZhbGlkX2xpbmtzIFx1MDAyNiBCSVQocGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkKSkpIHtcbi1cdFx0XHRlcnIgPSAtRU5PTElOSztcbi1cdFx0XHRnb3RvIG91dDtcbi1cdFx0fVxuLVx0fSBlbHNlIHtcbi1cdFx0aWYgKHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19pZCBcdTAwM2U9IDApIHtcbi1cdFx0XHRlcnIgPSAtRUlOVkFMO1xuLVx0XHRcdGdvdG8gb3V0O1xuLVx0XHR9XG4tXHR9XG4tXG4gXHRwYXJhbXMuZXBwX3BlZXIgPVxuIFx0XHRubGFfZ2V0X2ZsYWcoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfRVBQX1BFRVJdKTtcbiBcbiBcdGVyciA9IHJkZXZfYWRkX3N0YXRpb24ocmRldiwgd2RldiwgbWFjX2FkZHIsIFx1MDAyNnBhcmFtcyk7XG4tb3V0OlxuIFx0ZGV2X3B1dChwYXJhbXMudmxhbik7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTo0NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtubDgwMjExX25ld19zdGF0aW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRsaW5rIGNhbGxiYWNrIGBubDgwMjExX25ld19zdGF0aW9uYCBpbiBjZmc4MDIxMSwgY2hhbmdpbmcgdGhlIHZhbGlkYXRpb24gbG9naWMgZm9yIGBsaW5rX2lkYCBhbmQgYWRkaW5nIGEgY2hlY2sgZm9yIGBiZWFjb25faW50ZXJ2YWxgIHdoZW4gYWRkaW5nIGEgbmV3IHN0YXRpb24gdG8gYW4gQVAgb3IgUDJQX0dPIGludGVyZmFjZS4gVGhpcyBpcyByZWFjaGFibGUgY29yZSB3aXJlbGVzcyBsb2dpYyB0aGF0IGNhbiBiZSB0ZXN0ZWQgdXNpbmcgdGhlIG1hYzgwMjExX2h3c2ltIGRyaXZlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDAxMDlmMGVmYWU3YWZlMWI5NzQ2NmY2NDM2NDNhYjE2MGEzNzFjNzIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAwOTo0Njo1MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCmluZGV4IDVhZGNiNmJkMGZjNTYuLjc1YmJkNzhmOTFiYTMgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL25sODAyMTEuYwpAQCAtOTE3NCw3ICYjNDM7OTE3NCw3IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfc3RhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogc3RhdGljIGludCBubDgwMjExX25ld19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby0mZ3Q7dXNlcl9wdHJbMF07Ci0JaW50IGVycjsKJiM0MzsJaW50IGVyciwgbGlua19pZDsKIAlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gaW5mby0mZ3Q7dXNlcl9wdHJbMV07CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHdkZXYtJmd0O25ldGRldjsKIAlzdHJ1Y3Qgc3RhdGlvbl9wYXJhbWV0ZXJzIHBhcmFtczsKQEAgLTkyMjIsNiAmIzQzOzkyMjIsMTYgQEAgc3RhdGljIGludCBubDgwMjExX25ld19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJcGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkID0KIAkJbmw4MDIxMV9saW5rX2lkX29yX2ludmFsaWQoaW5mby0mZ3Q7YXR0cnMpOwogCiYjNDM7CWlmICh3ZGV2LSZndDt2YWxpZF9saW5rcykgewomIzQzOwkJaWYgKHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19pZCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQlpZiAoISh3ZGV2LSZndDt2YWxpZF9saW5rcyAmYW1wOyBCSVQocGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkKSkpCiYjNDM7CQkJcmV0dXJuIC1FTk9MSU5LOwomIzQzOwl9IGVsc2UgewomIzQzOwkJaWYgKHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19pZCAmZ3Q7PSAwKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiAJaWYgKGluZm8tJmd0O2F0dHJzW05MODAyMTFfQVRUUl9NTERfQUREUl0pIHsKIAkJbWFjX2FkZHIgPSBubGFfZGF0YShpbmZvLSZndDthdHRyc1tOTDgwMjExX0FUVFJfTUxEX0FERFJdKTsKIAkJcGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5tbGRfbWFjID0gbWFjX2FkZHI7CkBAIC05NDAyLDggJiM0Mzs5NDEyLDEyIEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9uZXdfc3RhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCiAJc3dpdGNoICh3ZGV2LSZndDtpZnR5cGUpIHsKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgotCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVBfVkxBTjoKIAljYXNlIE5MODAyMTFfSUZUWVBFX1AyUF9HTzoKJiM0MzsJCS8qIEFkZCBhIG5ldyBzdGF0aW9uIG9ubHkgYWZ0ZXIgdGhlIEFQIGFuZCBsaW5rIGhhcyBiZWVuIHN0YXJ0ZWQgKi8KJiM0MzsJCWxpbmtfaWQgPSB3ZGV2LSZndDt2YWxpZF9saW5rcyA/IHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19pZCA6IDA7CiYjNDM7CQlpZiAoIXdkZXYtJmd0O2xpbmtzW2xpbmtfaWRdLmFwLmJlYWNvbl9pbnRlcnZhbCkKJiM0MzsJCQlyZXR1cm4gLUVORVRET1dOOwomIzQzOwogCQkvKiBpZ25vcmUgV01FIGF0dHJpYnV0ZXMgaWYgaWZhY2Uvc3RhIGlzIG5vdCBjYXBhYmxlICovCiAJCWlmICghKHJkZXYtJmd0O3dpcGh5LmZsYWdzICZhbXA7IFdJUEhZX0ZMQUdfQVBfVUFQU0QpIHx8CiAJCSAgICAhKHBhcmFtcy5zdGFfZmxhZ3Nfc2V0ICZhbXA7IEJJVChOTDgwMjExX1NUQV9GTEFHX1dNRSkpKQpAQCAtOTQ5NSwyNyAmIzQzOzk1MDksMTAgQEAgc3RhdGljIGludCBubDgwMjExX25ld19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAKIAkvKiBiZSBhd2FyZSBvZiBwYXJhbXMudmxhbiB3aGVuIGNoYW5naW5nIGNvZGUgaGVyZSAqLwogCi0JaWYgKHdkZXYtJmd0O3ZhbGlkX2xpbmtzKSB7Ci0JCWlmIChwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWQgJmx0OyAwKSB7Ci0JCQllcnIgPSAtRUlOVkFMOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJaWYgKCEod2Rldi0mZ3Q7dmFsaWRfbGlua3MgJmFtcDsgQklUKHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19pZCkpKSB7Ci0JCQllcnIgPSAtRU5PTElOSzsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19pZCAmZ3Q7PSAwKSB7Ci0JCQllcnIgPSAtRUlOVkFMOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9Ci0KIAlwYXJhbXMuZXBwX3BlZXIgPQogCQlubGFfZ2V0X2ZsYWcoaW5mby0mZ3Q7YXR0cnNbTkw4MDIxMV9BVFRSX0VQUF9QRUVSXSk7CiAKIAllcnIgPSByZGV2X2FkZF9zdGF0aW9uKHJkZXYsIHdkZXYsIG1hY19hZGRyLCAmYW1wO3BhcmFtcyk7Ci1vdXQ6CiAJZGV2X3B1dChwYXJhbXMudmxhbik7CiAJcmV0dXJuIGVycjsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg4OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDUxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBgbmV0L3dpcmVsZXNzL25sODAyMTEuY2AgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyB0d2Vha2luZyB0aGUgYG5sODAyMTFfbmV3X3N0YXRpb25gIGZ1bmN0aW9uIGluIGBuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhYm91dCBtb3Zpbmcgc29tZSB2YWxpZGF0aW9uIGxvZ2ljIGVhcmxpZXIgaW4gdGhlIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIGB3ZGV2LSZndDt2YWxpZF9saW5rc2AgYW5kIGBwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWRgLiBNYWtlcyBzZW5zZSwgb3B0aW1pemluZyB0aGUgZmxvdywgcG90ZW50aWFsbHkgY2F0Y2hpbmcgZXJyb3JzIHNvb25lci4KCk5vdywgdGhlIGludGVyZXN0aW5nIGJpdC4gSXQgYWRkcyBhIGNoZWNrIGZvciBgd2Rldi0mZ3Q7bGlua3NbbGlua19pZF0uYXAuYmVhY29uX2ludGVydmFsYCB3aXRoaW4gdGhlIGBOTDgwMjExX0lGVFlQRV9BUGAgYW5kIGBOTDgwMjExX0lGVFlQRV9QMlBfR09gIGNhc2VzLiBBaCwgYnV0IHRoZXJlJiMzOTtzIGEgcmVtb3ZhbCBpbiBoZXJlIHRvby4uLiBpdCBhcHBlYXJzIHRoZXkmIzM5O3ZlIHJlbW92ZWQgYE5MODAyMTFfSUZUWVBFX0FQX1ZMQU5gIGZyb20gdGhlIHN3aXRjaCBzdGF0ZW1lbnQuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZGlmZiB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIFllcCwgaXQgcmVtb3ZlcyBgTkw4MDIxMV9JRlRZUEVfQVBfVkxBTmAgZnJvbSB0aGUgc3dpdGNoIGNhc2UuCgpUaGlzIGlzIGEgZ29vZCBzcG90IHRvIGV2YWx1YXRlIHRoaXMsIGJlY2F1c2UgaXQmIzM5O3MgYSBuZXRsaW5rIEFQSSBlbnRyeXBvaW50LCB3aGljaCBtZWFucyBpdCYjMzk7cyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IGNhbiBiZSB0ZXN0ZWQgYW5kIGV4ZXJjaXNlZCB1c2luZyBzb21ldGhpbmcgbGlrZSBtYWM4MDIxMV9od3NpbSwgbm8gcXVlc3Rpb24uIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGUgY29uZmlnIG9wdGlvbnMgZm9yIGBubDgwMjExLmNgLCBiZWNhdXNlIGl0JiMzOTtzIHBhcnQgb2YgYGNmZzgwMjExYC4gU28gdGhhdCBtZWFucyBgQ09ORklHX0NGRzgwMjExYCwgYENPTkZJR19NQUM4MDIxMWAsIGFuZCBgQ09ORklHX01BQzgwMjExX0hXU0lNYCBhcmUgdGhlIG9uZXMgdG8gdmVyaWZ5LiBMZXQgbWUgcGVlayBpbiBgbmV0L3dpcmVsZXNzL0tjb25maWdgIGFuZCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGNvbmZpZ3VyYXRpb25zIHJlbGV2YW50IHRvIHRoaXMgbW9kaWZpY2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDRkc4MDIxMSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9LY29uZmlnPTE0PWNvbmZpZyBXRVhUX1BSSVZcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNi1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3OmNvbmZpZyBDRkc4MDIxMVxubmV0L3dpcmVsZXNzL0tjb25maWctMTgtXHR0cmlzdGF0ZSBcJiMzNDtjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWc9Mzg9Y29uZmlnIE5MODAyMTFfVEVTVE1PREVcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy01MS1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjUyOmNvbmZpZyBDRkc4MDIxMV9ERVZFTE9QRVJfV0FSTklOR1Ncbm5ldC93aXJlbGVzcy9LY29uZmlnLTUzLVx0Ym9vbCBcJiMzNDtlbmFibGUgZGV2ZWxvcGVyIHdhcm5pbmdzXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctNjctXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo2ODpjb25maWcgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgY2VydGlmaWNhdGlvbiBvbnVzXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctODgtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo4OTpjb25maWcgQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREJcbm5ldC93aXJlbGVzcy9LY29uZmlnLTkwLVx0Ym9vbCBcJiMzNDtyZXF1aXJlIHJlZ2RiIHNpZ25hdHVyZVwmIzM0OyBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy05OC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjk5OmNvbmZpZyBDRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEwMC1cdGJvb2wgXCYjMzQ7YWxsb3cgcmVnZGIga2V5cyBzaGlwcGVkIHdpdGggdGhlIGtlcm5lbFwmIzM0OyBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTAtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMTE6Y29uZmlnIENGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUlxubmV0L3dpcmVsZXNzL0tjb25maWctMTEyLVx0c3RyaW5nIFwmIzM0O2FkZGl0aW9uYWwgcmVnZGIga2V5IGRpcmVjdG9yeVwmIzM0OyBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMjEtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMjI6Y29uZmlnIENGRzgwMjExX1JFR19DRUxMVUxBUl9ISU5UU1xubmV0L3dpcmVsZXNzL0tjb25maWctMTIzLVx0Ym9vbCBcJiMzNDtjZmc4MDIxMSByZWd1bGF0b3J5IHN1cHBvcnQgZm9yIGNlbGx1bGFyIGJhc2Ugc3RhdGlvbiBoaW50c1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTEzNC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjEzNTpjb25maWcgQ0ZHODAyMTFfUkVHX1JFTEFYX05PX0lSXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzYtXHRib29sIFwmIzM0O2NmZzgwMjExIHN1cHBvcnQgZm9yIE5PX0lSIHJlbGF4YXRpb25cJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNTgtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNTk6Y29uZmlnIENGRzgwMjExX0RFRkFVTFRfUFNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2MC1cdGJvb2wgXCYjMzQ7ZW5hYmxlIHBvd2Vyc2F2ZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTY4LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTY5OmNvbmZpZyBDRkc4MDIxMV9ERUJVR0ZTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzAtXHRib29sIFwmIzM0O2NmZzgwMjExIERlYnVnRlMgZW50cmllc1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3Ni1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3Nzpjb25maWcgQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzgtXHRib29sIFwmIzM0O3N1cHBvcnQgQ1JEQVwmIzM0OyBpZiBFWFBFUlRcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODYtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxODc6Y29uZmlnIENGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4OC1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgd2lyZWxlc3MgZXh0ZW5zaW9ucyBjb21wYXRpYmlsaXR5XCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTkzLVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTk0OmNvbmZpZyBDRkc4MDIxMV9LVU5JVF9URVNUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOTUtXHR0cmlzdGF0ZSBcJiMzNDtLVW5pdCB0ZXN0cyBmb3IgY2ZnODAyMTFcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NjUKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgbmw4MDIxMV9uZXdfc3RhdGlvbmAgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIGBubDgwMjExX25ld19zdGF0aW9uYCB3aXRoaW4gYG5ldC93aXJlbGVzcy9ubDgwMjExLmNgLiAgR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgbmV0bGluayBpbnRlcmZhY2UsIHRoYXQmIzM5O3MgYWJzb2x1dGVseSByZWFjaGFibGUgdmlhIGNmZzgwMjExIGNvbW1hbmRzLCB3aGljaCBtZWFucyBpdCYjMzk7cyBwcmV0dHkgaW1wb3J0YW50LiBJJiMzOTt2ZSBnb3QgdG8gbG9vayBjbG9zZWx5IGF0IHdoYXQmIzM5O3MgY2hhbmdlZCBoZXJlLgoKVGhlIGZpcnN0IHRoaW5nIEkgc2VlIGlzIHRoYXQgdGhleSYjMzk7dmUgcmVvcmRlcmVkIHRoaW5ncywgbW92aW5nIHRoZSBgd2Rldi0mZ3Q7dmFsaWRfbGlua3NgIGNoZWNrIGVhcmxpZXIgaW4gdGhlIHByb2Nlc3MuIE9rYXksIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIFBlcmhhcHMgdGhleSYjMzk7cmUgdHJ5aW5nIHRvIG9wdGltaXplIHRoZSBmbG93IG9yIGhhbmRsZSBhbiBlZGdlIGNhc2UgdXBmcm9udC4gVGhlIHJlYWwga2lja2VyIGlzIHRoZSBuZXcgY2hlY2sgZm9yIGB3ZGV2LSZndDtsaW5rc1tsaW5rX2lkXS5hcC5iZWFjb25faW50ZXJ2YWxgLCBidXQgb25seSBmb3IgQVAgYW5kIFAyUF9HTy4gVGhhdCBpbW1lZGlhdGVseSBzdWdnZXN0cyB0aGV5JiMzOTtyZSBsaWtlbHkgdGFyZ2V0aW5nIHNwZWNpZmljIFNUQSBjb25uZWN0aW9uIHNjZW5hcmlvcyBhbmQgcG90ZW50aWFsbHkgYWRkcmVzc2luZyBhbiBpc3N1ZSByZWxhdGVkIHRvIGJlYWNvbiBoYW5kbGluZywgcGVyaGFwcyBkdXJpbmcgYXNzb2NpYXRpb24gb3IgcmUtYXNzb2NpYXRpb24uCgpGaW5hbGx5LCB0aGUgcmVtb3ZhbCBvZiBgTkw4MDIxMV9JRlRZUEVfQVBfVkxBTmAgZnJvbSB0aGUgc3dpdGNoIGNhc2UuLi4gSG1tbSwgbm93IHRoYXQmIzM5O3MgY3VyaW91cy4gIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoeSB0aGV54oCZcmUgdGFraW5nIHRoYXQgb3V0IG9mIHRoZSBwaWN0dXJlLiAgSXMgaXQgZGVwcmVjYXRlZD8gSXMgdGhlIFZMQU4gaW50ZXJmYWNlIHR5cGUgYmVpbmcgaGFuZGxlZCBlbHNld2hlcmUgbm93PyBUaGlzIG5lZWRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBhcyByZW1vdmluZyBhbiBpbnRlcmZhY2UgdHlwZSBjYW4gaGF2ZSBzZXJpb3VzIHJhbWlmaWNhdGlvbnMuIEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHNlZSBpZiBJIGNhbiBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IG9mIHRoYXQgcmVtb3ZhbCwgYW5kIHdoYXQgaXQgbWlnaHQgYWZmZWN0LiBJJiMzOTtsbCBzdGFydCBieSB0YWtpbmcgYSBnb29kIGxvb2sgYXQgYG5sODAyMTFfbmV3X3N0YXRpb25gIGFuZCBzZWUgd2hhdCB0aGUgZmxvdyBpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtubDgwMjExX25ld19zdGF0aW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL25sODAyMTEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTkwMDI9c3RhdGljIGludCBubDgwMjExX3NldF9zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy05MTczLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo5MTc0OnN0YXRpYyBpbnQgbmw4MDIxMV9uZXdfc3RhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy05MTc1LXtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE5NTQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgbmw4MDIxMV9zbWFsbF9vcHNbXSA9IHtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE5NjU3LVx0XHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE5NjU4Olx0XHQuZG9pdCA9IG5sODAyMTFfbmV3X3N0YXRpb24sXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE5NjU5LVx0XHQuZmxhZ3MgPSBHRU5MX1VOU19BRE1JTl9QRVJNLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MjYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBgbmw4MDIxMV9uZXdfc3RhdGlvbmAqKgoKT2theSwgc28gYG5sODAyMTFfbmV3X3N0YXRpb25gLCB0aGF0JiMzOTtzIGEgbmV0bGluayBjYWxsYmFjaywgcmlnaHQ/IFllYWgsIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vayBmb3IgZnV6emluZyBvcHBvcnR1bml0aWVzLiBUaGlua2luZyB0aHJvdWdoIHRoZSBzZXR1cCwgSSYjMzk7bGwgbmVlZCBgQ0ZHODAyMTFgLCBgTUFDODAyMTFgLCBhbmQgaWRlYWxseSBgTUFDODAyMTFfSFdTSU1gIHRvIGhhdmUgYW4gYWN0dWFsIGRldmljZSB0byB0ZXN0IGFnYWluc3QuIFNlZW1zIHNlbnNpYmxlLiBUaGUgY29yZSB0YXJnZXQgc3ltYm9sIGhlcmUgaXMsIG9mIGNvdXJzZSwgYG5sODAyMTFfbmV3X3N0YXRpb25gLgoKTm93LCBiZWZvcmUgSSBkaXZlIGluLCBsZXQgbWUganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGx1cmtpbmcgYWJvdXQuIEkgc2VlbSB0byByZWNhbGwgYENGRzgwMjExYCBtaWdodCBiZSB0aWVkIHRvIGBSRktJTExgLiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5IOKAkyBsZXQmIzM5O3MgdmVyaWZ5IHRoYXQgcXVpY2tseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL0tjb25maWc9NT1jb25maWcgV0VYVF9DT1JFXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy02LVx0ZGVmX2Jvb2wgeVxubmV0L3dpcmVsZXNzL0tjb25maWc6NzpcdGRlcGVuZHMgb24gQ0ZHODAyMTFfV0VYVCB8fCBXSVJFTEVTU19FWFRcbm5ldC93aXJlbGVzcy9LY29uZmlnLTgtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZz05PWNvbmZpZyBXRVhUX1BST0Ncbm5ldC93aXJlbGVzcy9LY29uZmlnLTEwLVx0ZGVmX2Jvb2wgeVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTE6XHRkZXBlbmRzIG9uIFBST0NfRlNcbm5ldC93aXJlbGVzcy9LY29uZmlnOjEyOlx0ZGVwZW5kcyBvbiBXRVhUX0NPUkVcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEzLVxuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnPTE3PWNvbmZpZyBDRkc4MDIxMVxubmV0L3dpcmVsZXNzL0tjb25maWctMTgtXHR0cmlzdGF0ZSBcJiMzNDtjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXCYjMzQ7XG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxOTpcdGRlcGVuZHMgb24gUkZLSUxMIHx8ICFSRktJTExcbm5ldC93aXJlbGVzcy9LY29uZmlnLTIwLVx0c2VsZWN0IEZXX0xPQURFUlxuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnPTY4PWNvbmZpZyBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTY5LVx0Ym9vbCBcJiMzNDtjZmc4MDIxMSBjZXJ0aWZpY2F0aW9uIG9udXNcJiMzNDtcbm5ldC93aXJlbGVzcy9LY29uZmlnOjcwOlx0ZGVwZW5kcyBvbiBFWFBFUlRcbm5ldC93aXJlbGVzcy9LY29uZmlnLTcxLVx0ZGVmYXVsdCBuXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWc9OTk9Y29uZmlnIENGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTEwMS1cdGRlZmF1bHQgeVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTAyOlx0ZGVwZW5kcyBvbiBDRkc4MDIxMV9SRVFVSVJFX1NJR05FRF9SRUdEQlxubmV0L3dpcmVsZXNzL0tjb25maWctMTAzLVx0aGVscFxuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnPTExMT1jb25maWcgQ0ZHODAyMTFfRVhUUkFfUkVHREJfS0VZRElSXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTItXHRzdHJpbmcgXCYjMzQ7YWRkaXRpb25hbCByZWdkYiBrZXkgZGlyZWN0b3J5XCYjMzQ7IGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xubmV0L3dpcmVsZXNzL0tjb25maWc6MTEzOlx0ZGVwZW5kcyBvbiBDRkc4MDIxMV9SRVFVSVJFX1NJR05FRF9SRUdEQlxubmV0L3dpcmVsZXNzL0tjb25maWctMTE0LVx0aGVscFxuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnPTEyMj1jb25maWcgQ0ZHODAyMTFfUkVHX0NFTExVTEFSX0hJTlRTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMjMtXHRib29sIFwmIzM0O2NmZzgwMjExIHJlZ3VsYXRvcnkgc3VwcG9ydCBmb3IgY2VsbHVsYXIgYmFzZSBzdGF0aW9uIGhpbnRzXCYjMzQ7XG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMjQ6XHRkZXBlbmRzIG9uIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xubmV0L3dpcmVsZXNzL0tjb25maWctMTI1LVx0aGVscFxuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnPTEzNT1jb25maWcgQ0ZHODAyMTFfUkVHX1JFTEFYX05PX0lSXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzYtXHRib29sIFwmIzM0O2NmZzgwMjExIHN1cHBvcnQgZm9yIE5PX0lSIHJlbGF4YXRpb25cJiMzNDtcbm5ldC93aXJlbGVzcy9LY29uZmlnOjEzNzpcdGRlcGVuZHMgb24gQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzgtXHRoZWxwXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWc9MTY5PWNvbmZpZyBDRkc4MDIxMV9ERUJVR0ZTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzAtXHRib29sIFwmIzM0O2NmZzgwMjExIERlYnVnRlMgZW50cmllc1wmIzM0O1xubmV0L3dpcmVsZXNzL0tjb25maWc6MTcxOlx0ZGVwZW5kcyBvbiBERUJVR19GU1xubmV0L3dpcmVsZXNzL0tjb25maWctMTcyLVx0aGVscFxuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnPTE5ND1jb25maWcgQ0ZHODAyMTFfS1VOSVRfVEVTVFxubmV0L3dpcmVsZXNzL0tjb25maWctMTk1LVx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdHMgZm9yIGNmZzgwMjExXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE5NjpcdGRlcGVuZHMgb24gS1VOSVRcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE5NzpcdGRlcGVuZHMgb24gQ0ZHODAyMTFcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE5OC1cdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg5MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZGVwZW5kZW5jaWVzOgoKKipBbmFseXppbmcgdGhlIFdpcmVsZXNzIFN0YWNrIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIHdpcmVsZXNzIHN0YWNrIGNvbmZpZ3VyYXRpb24uIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQgb24gdGhlIHN1cmZhY2UsIGJ1dCBpdCYjMzk7cyBhbHdheXMgd29ydGggYSBkb3VibGUtY2hlY2suIGBDRkc4MDIxMWAgaXMgaW50ZXJlc3Rpbmc7IGl0JiMzOTtzIGdvdCB0aGF0IGBSRktJTEwgfHwgIVJGS0lMTGAgZGVwZW5kZW5jeS4gRXNzZW50aWFsbHksIGl0JiMzOTtzIGFsd2F5cyBlbmFibGVkLCB3aGljaCBpcyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGNhc2Ugb2YgYSBkZXBlbmRlbmN5IHRoYXQgZXhpc3RzIGNvbmNlcHR1YWxseSBidXQgZG9lc24mIzM5O3QgYWN0dWFsbHkgbGltaXQgdGhlIGJ1aWxkLiBNb3Zpbmcgb24sIGBNQUM4MDIxMWAgaXMgYnVpbHQgZGlyZWN0bHkgb24gdG9wIG9mIGBDRkc4MDIxMWAg4oCTIGFzIGV4cGVjdGVkLCB0aGF0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZSA4MDIuMTEgc3RhY2suIFRoZW4sIHdlIHNlZSBgTUFDODAyMTFfSFdTSU1gIGRlcGVuZHMgb24gYE1BQzgwMjExYCwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZS4gSGFyZHdhcmUgc2ltdWxhdGlvbiBmdW5jdGlvbmFsaXR5IG5lZWRzIHRoZSBiYXNlIE1BQzgwMjExIGxheWVyIHRvIGZ1bmN0aW9uLiBJIHNob3VsZCBwcm9iYWJseSBkaWcgaW50byB0aGUgYG5ldC9tYWM4MDIxMS9LY29uZmlnYCBmaWxlIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgaW4gdGhlcmUsIGp1c3QgdG8gYmUgc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBzdWJ0bGUgZ290Y2hhcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9LY29uZmlnPTI9Y29uZmlnIE1BQzgwMjExXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7R2VuZXJpYyBJRUVFIDgwMi4xMSBOZXR3b3JraW5nIFN0YWNrIChtYWM4MDIxMSlcJiMzNDtcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjQ6XHRkZXBlbmRzIG9uIENGRzgwMjExXG5uZXQvbWFjODAyMTEvS2NvbmZpZy01LVx0c2VsZWN0IENSWVBUT1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE2PWNvbW1lbnQgXCYjMzQ7Q0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTFcJiMzNDtcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE3Olx0ZGVwZW5kcyBvbiBDRkc4MDIxMT1uXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xOC1cbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz0zMT1jaG9pY2Vcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMyLVx0cHJvbXB0IFwmIzM0O0RlZmF1bHQgcmF0ZSBjb250cm9sIGFsZ29yaXRobVwmIzM0O1xubmV0L21hYzgwMjExL0tjb25maWc6MzM6XHRkZXBlbmRzIG9uIE1BQzgwMjExX0hBU19SQ1xubmV0L21hYzgwMjExL0tjb25maWctMzQtXHRkZWZhdWx0IE1BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUxcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz00MT1jb25maWcgTUFDODAyMTFfUkNfREVGQVVMVF9NSU5TVFJFTFxubmV0L21hYzgwMjExL0tjb25maWctNDItXHRib29sIFwmIzM0O01pbnN0cmVsXCYjMzQ7XG5uZXQvbWFjODAyMTEvS2NvbmZpZzo0MzpcdGRlcGVuZHMgb24gTUFDODAyMTFfUkNfTUlOU1RSRUxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQ0LVx0aGVscFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTU3PWNvbW1lbnQgXCYjMzQ7U29tZSB3aXJlbGVzcyBkcml2ZXJzIHJlcXVpcmUgYSByYXRlIGNvbnRyb2wgYWxnb3JpdGhtXCYjMzQ7XG5uZXQvbWFjODAyMTEvS2NvbmZpZzo1ODpcdGRlcGVuZHMgb24gTUFDODAyMTEgXHUwMDI2XHUwMDI2IE1BQzgwMjExX0hBU19SQz1uXG5uZXQvbWFjODAyMTEvS2NvbmZpZy01OS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTYwPWNvbmZpZyBNQUM4MDIxMV9LVU5JVF9URVNUXG5uZXQvbWFjODAyMTEvS2NvbmZpZy02MS1cdHRyaXN0YXRlIFwmIzM0O0tVbml0IHRlc3RzIGZvciBtYWM4MDIxMVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo2MjpcdGRlcGVuZHMgb24gS1VOSVRcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjYzOlx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxubmV0L21hYzgwMjExL0tjb25maWctNjQtXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTcwPWNvbmZpZyBNQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03MS1cdGJvb2wgXCYjMzQ7RW5hYmxlIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyBzdXBwb3J0XCYjMzQ7XG5uZXQvbWFjODAyMTEvS2NvbmZpZzo3MjpcdGRlcGVuZHMgb24gTUFDODAyMTFcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTczLVx0aGVscFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTc5PWNvbmZpZyBNQUM4MDIxMV9MRURTXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04MC1cdGJvb2wgXCYjMzQ7RW5hYmxlIExFRCB0cmlnZ2Vyc1wmIzM0O1xubmV0L21hYzgwMjExL0tjb25maWc6ODE6XHRkZXBlbmRzIG9uIE1BQzgwMjExXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo4MjpcdGRlcGVuZHMgb24gTEVEU19DTEFTUz15IHx8IExFRFNfQ0xBU1M9TUFDODAyMTFcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTgzLVx0c2VsZWN0IExFRFNfVFJJR0dFUlNcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz04OD1jb25maWcgTUFDODAyMTFfREVCVUdGU1xubmV0L21hYzgwMjExL0tjb25maWctODktXHRib29sIFwmIzM0O0V4cG9ydCBtYWM4MDIxMSBpbnRlcm5hbHMgaW4gRGVidWdGU1wmIzM0O1xubmV0L21hYzgwMjExL0tjb25maWc6OTA6XHRkZXBlbmRzIG9uIE1BQzgwMjExIFx1MDAyNlx1MDAyNiBDRkc4MDIxMV9ERUJVR0ZTXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05MS1cdGhlbHBcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz05Nz1jb25maWcgTUFDODAyMTFfTUVTU0FHRV9UUkFDSU5HXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05OC1cdGJvb2wgXCYjMzQ7VHJhY2UgYWxsIG1hYzgwMjExIGRlYnVnIG1lc3NhZ2VzXCYjMzQ7XG5uZXQvbWFjODAyMTEvS2NvbmZpZzo5OTpcdGRlcGVuZHMgb24gTUFDODAyMTEgXHUwMDI2XHUwMDI2IFRSQUNJTkdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEwMC1cdGhlbHBcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz0xMTA9bWVudWNvbmZpZyBNQUM4MDIxMV9ERUJVR19NRU5VXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTEtXHRib29sIFwmIzM0O1NlbGVjdCBtYWM4MDIxMSBkZWJ1Z2dpbmcgZmVhdHVyZXNcJiMzNDtcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExMjpcdGRlcGVuZHMgb24gTUFDODAyMTFcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExMy1cdGhlbHBcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz0xMTY9Y29uZmlnIE1BQzgwMjExX05PSU5MSU5FXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTctXHRib29sIFwmIzM0O0RvIG5vdCBpbmxpbmUgVFgvUlggaGFuZGxlcnNcJiMzNDtcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExODpcdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWctMTE5LVx0aGVscFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTEzMj1jb25maWcgTUFDODAyMTFfVkVSQk9TRV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTMzLVx0Ym9vbCBcJiMzNDtWZXJib3NlIGRlYnVnZ2luZyBvdXRwdXRcJiMzNDtcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjEzNDpcdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWctMTM1LVx0aGVscFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE0Mz1jb25maWcgTUFDODAyMTFfTUxNRV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTQ0LVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1hbmFnZWQgTUxNRSBvdXRwdXRcJiMzNDtcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE0NTpcdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWctMTQ2LVx0aGVscFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE1ND1jb25maWcgTUFDODAyMTFfU1RBX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTUtXHRib29sIFwmIzM0O1ZlcmJvc2Ugc3RhdGlvbiBkZWJ1Z2dpbmdcJiMzNDtcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE1NjpcdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWctMTU3LVx0aGVscFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE2Mz1jb25maWcgTUFDODAyMTFfSFRfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE2NC1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBIVCBkZWJ1Z2dpbmdcJiMzNDtcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE2NTpcdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWctMTY2LVx0aGVscFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE3NT1jb25maWcgTUFDODAyMTFfT0NCX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNzYtXHRib29sIFwmIzM0O1ZlcmJvc2UgT0NCIGRlYnVnZ2luZ1wmIzM0O1xubmV0L21hYzgwMjExL0tjb25maWc6MTc3Olx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNzgtXHRoZWxwXG4tLVxubmV0L21hYzgwMjExL0tjb25maWc9MTg2PWNvbmZpZyBNQUM4MDIxMV9JQlNTX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xODctXHRib29sIFwmIzM0O1ZlcmJvc2UgSUJTUyBkZWJ1Z2dpbmdcJiMzNDtcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE4ODpcdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWctMTg5LVx0aGVscFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE5Nz1jb25maWcgTUFDODAyMTFfUFNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE5OC1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBwb3dlcnNhdmUgbW9kZSBkZWJ1Z2dpbmdcJiMzNDtcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE5OTpcdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWctMjAwLVx0aGVscFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTIwOT1jb25maWcgTUFDODAyMTFfTVBMX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMTAtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBwZWVyIGxpbmsgZGVidWdnaW5nXCYjMzQ7XG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMTE6XHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIxMjpcdGRlcGVuZHMgb24gTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL0tjb25maWctMjEzLVx0aGVscFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTIyMj1jb25maWcgTUFDODAyMTFfTVBBVEhfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIyMy1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHBhdGggZGVidWdnaW5nXCYjMzQ7XG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMjQ6XHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIyNTpcdGRlcGVuZHMgb24gTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL0tjb25maWctMjI2LVx0aGVscFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTIzNT1jb25maWcgTUFDODAyMTFfTUhXTVBfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzNi1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIEhXTVAgcm91dGluZyBkZWJ1Z2dpbmdcJiMzNDtcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIzNzpcdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWc6MjM4Olx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzktXHRoZWxwXG4tLVxubmV0L21hYzgwMjExL0tjb25maWc9MjQ4PWNvbmZpZyBNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0OS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHN5bmNocm9uaXphdGlvbiBkZWJ1Z2dpbmdcJiMzNDtcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI1MDpcdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWc6MjUxOlx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNTItXHRoZWxwXG4tLVxubmV0L21hYzgwMjExL0tjb25maWc9MjU5PWNvbmZpZyBNQUM4MDIxMV9NRVNIX0NTQV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjYwLVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggY2hhbm5lbCBzd2l0Y2ggZGVidWdnaW5nXCYjMzQ7XG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNjE6XHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI2MjpcdGRlcGVuZHMgb24gTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL0tjb25maWctMjYzLVx0aGVscFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTI3MD1jb25maWcgTUFDODAyMTFfTUVTSF9QU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjcxLVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggcG93ZXJzYXZlIGRlYnVnZ2luZ1wmIzM0O1xubmV0L21hYzgwMjExL0tjb25maWc6MjcyOlx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNzM6XHRkZXBlbmRzIG9uIE1BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI3NC1cdGhlbHBcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz0yODE9Y29uZmlnIE1BQzgwMjExX1RETFNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI4Mi1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBURExTIGRlYnVnZ2luZ1wmIzM0O1xubmV0L21hYzgwMjExL0tjb25maWc6MjgzOlx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODQtXHRoZWxwXG4tLVxubmV0L21hYzgwMjExL0tjb25maWc9MjkzPWNvbmZpZyBNQUM4MDIxMV9ERUJVR19DT1VOVEVSU1xubmV0L21hYzgwMjExL0tjb25maWctMjk0LVx0Ym9vbCBcJiMzNDtFeHRyYSBzdGF0aXN0aWNzIGZvciBUWC9SWCBkZWJ1Z2dpbmdcJiMzNDtcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI5NTpcdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWc6Mjk2Olx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR0ZTXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yOTctXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzM0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBjb25zaWRlcmF0aW9uczoKCioqTUFDODAyMTEgRGVwZW5kZW5jeSBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBkZXBlbmRlbmN5IHJlbGF0aW9uc2hpcHMgaGVyZS4gSXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYWN0dWFsbHkuIFdlJiMzOTt2ZSBnb3QgYE1BQzgwMjExYCwgYW5kIGl0IHJlbGllcyBvbiBgQ0ZHODAyMTFgLiBUaGF0JiMzOTtzIHRoZSBjb3JlLiBUaGVuLCB3aGVuIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaGFyZHdhcmUgc2ltdWxhdGlvbiwgbGlrZSB3aXRoIGBNQUM4MDIxMV9IV1NJTWAsIHRoYXQgYnVpbGRzICp1cG9uKiBgTUFDODAyMTFgLiBTbywgYE1BQzgwMjExX0hXU0lNYCBuYXR1cmFsbHkgaGFzIGBNQUM4MDIxMWAgYXMgYSBkZXBlbmRlbmN5IGFzIHdlbGwuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBkcmlsbCBkb3duIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4gSSYjMzk7bSBnb2luZyB0byBjaGVjayBvdXQgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21hYzgwMjExX2h3c2ltL0tjb25maWdgIChvciBzb21ld2hlcmUgc2ltaWxhciwgZGVwZW5kaW5nIG9uIHRoZSBleGFjdCBzb3VyY2UgdHJlZSkuIEkgbmVlZCB0byBjb25maXJtIHRob3NlIGRlcGVuZGVuY2llcyBhcmUgY29ycmVjdGx5IHJlZmxlY3RlZCBpbiB0aGUgS2NvbmZpZy4gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgc3RydWN0dXJlIGlzIHNvdW5kIGFuZCB0aGVyZSBhcmVuJiMzOTt0IGFueSBzbmVha3kgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIG9yIG1pc3NpbmcgcmVxdWlyZW1lbnRzIGx1cmtpbmcuIEdvdHRhIGtlZXAgZXZlcnl0aGluZyBjbGVhbiBhbmQgY29uc2lzdGVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1BQzgwMjExX0hXU0lNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZzoxOmNvbmZpZyBNQUM4MDIxMV9IV1NJTVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnLTItXHR0cmlzdGF0ZSBcJiMzNDtTaW11bGF0ZWQgcmFkaW8gdGVzdGluZyB0b29sIGZvciBtYWM4MDIxMVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc1NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgVmlydHVhbCBXaXJlbGVzcyBLY29uZmlnKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUgdmlydHVhbCB3aXJlbGVzcyBzZXR1cCBpbiB0aGlzIGtlcm5lbC4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQsIGFzIGFsd2F5cywgaXMgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgdGV4dCBtZW50aW9ucyBgZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnYC4gUmlnaHQsIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhpcyBzdWJzeXN0ZW0uIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgYEtjb25maWdgIG5vdyB0byBzZWUgd2hhdCYjMzk7cyBkZWZpbmVkLCB3aGF0IGRlcGVuZGVuY2llcyBleGlzdCwgYW5kIGhvdyB0aGlzIGFsbCBwaWVjZXMgdG9nZXRoZXIuIFRoYXQmIzM5O2xsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSByZXN0IG9mIHRoZSBjb2RlLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZz0xPWNvbmZpZyBNQUM4MDIxMV9IV1NJTVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnLTItXHR0cmlzdGF0ZSBcJiMzNDtTaW11bGF0ZWQgcmFkaW8gdGVzdGluZyB0b29sIGZvciBtYWM4MDIxMVwmIzM0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnOjM6XHRkZXBlbmRzIG9uIE1BQzgwMjExXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWctNC1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWc9MTQ9Y29uZmlnIFZJUlRfV0lGSVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnLTE1LVx0dHJpc3RhdGUgXCYjMzQ7V2lmaSB3cmFwcGVyIGZvciBldGhlcm5ldCBkcml2ZXJzXCYjMzQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWc6MTY6XHRkZXBlbmRzIG9uIENGRzgwMjExXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWctMTctXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTU3CgkJCQkJCQlvdXRwdXQ6IDE2MAoJCQkJCQkJdGhvdWdodHM6IDU2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFN0cmF0ZWd5IGZvciBNQUM4MDIxMV9IV1NJTSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCByZWxhdGVkIHRvIGBNQUM4MDIxMV9IV1NJTWAuIEl0IGxvb2tzIGxpa2UgdGhpcyBmb2N1c2VzIG9uIHRoZSBgbmw4MDIxMV9uZXdfc3RhdGlvbmAgZnVuY3Rpb24sIHdoaWNoIGlzIGFuIEFQSSBlbnRyeXBvaW50LiBUaGUgcGF0Y2ggaXMgY2hhbmdpbmcgc29tZSBmdW5jdGlvbmFsIGxvZ2ljIHdpdGhpbiBpdCDigJMgbW92aW5nIHZhbGlkYXRpb24sIGFkZGluZyBhIGNoZWNrIGZvciBgYmVhY29uX2ludGVydmFsYCwgYW5kIHJlbW92aW5nIGBOTDgwMjExX0lGVFlQRV9BUF9WTEFOYC4gRGVmaW5pdGVseSB3b3J0aCBhIGZ1enppbmcgZWZmb3J0IGhlcmUuCgpJIGluaXRpYWxseSBxdWVzdGlvbmVkIHdoZXRoZXIgd2UgY291bGQgdXNlIGBubDgwMjExX25ld19zdGF0aW9uYCBmb3IgZnV6emluZywgc2luY2UgaXQmIzM5O3MgZGVmaW5lZCBhcyBhIHN0YXRpYyBmdW5jdGlvbi4gQnV0IHRoZW4gSSByZW1lbWJlcmVkIHRoYXQgd2hpbGUgaXQgaXMgc3RhdGljLCBpdCYjMzk7cyBhIG5ldGxpbmsgY2FsbGJhY2ssIHNvIGl0cyBhZGRyZXNzIGlzIHRha2VuIGFuZCB1c2VkIGluIGBubDgwMjExX3NtYWxsX29wc2AuIFRoaXMgbWVhbnMgaXQgKndvbiYjMzk7dCogYmUgaW5saW5lZCwgYW5kIFN5emthbGxlciBzaG91bGQgYmUgYWJsZSB0byBoYW5kbGUgaXQuIFRoZSBwcm9tcHQmIzM5O3MgcHJlZmVyZW5jZSBpcyBmb3Igbm9uLXN0YXRpYyBlbnRyeXBvaW50cywgYnV0IGluIHRoZSBuZXRsaW5rIGNhc2UgdGhpcyAqaXMqIHRoZSBzdGFuZGFyZCBhcHByb2FjaC4gTm8gcmVhc29uIHRvIGdvIGh1bnRpbmcgZm9yIGFsdGVybmF0aXZlcywgZXNwZWNpYWxseSBzaW5jZSBJIGRvbiYjMzk7dCBzZWUgYW55IG90aGVyIGZ1bmN0aW9ucyBiZWluZyB0b3VjaGVkIGJ5IHRoaXMgcGF0Y2guCgpTbywgdGhlIGtleSBjb25maWdzIGZvciB0aGlzIGFyZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBgQ0ZHODAyMTFgLCBgTUFDODAyMTFgLCBhbmQgYE1BQzgwMjExX0hXU0lNYC4gTm8gbmVlZCBmb3IgYE5MODAyMTFfVEVTVE1PREVgIHNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBzdGFuZGFyZCBuZXRsaW5rIGNvbW1hbmQsIGBOTDgwMjExX0NNRF9ORVdfU1RBVElPTmAuCgpJJiMzOTttIHJlYWR5IHRvIHNldCB1cCB0aGUgZnV6emluZyB3aXRoIGBubDgwMjExX25ld19zdGF0aW9uYCBhcyB0aGUgdGFyZ2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtubDgwMjExX25ld19zdGF0aW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRsaW5rIGNhbGxiYWNrIGBubDgwMjExX25ld19zdGF0aW9uYCBpbiBjZmc4MDIxMSwgY2hhbmdpbmcgdGhlIHZhbGlkYXRpb24gbG9naWMgZm9yIGBsaW5rX2lkYCBhbmQgYWRkaW5nIGEgY2hlY2sgZm9yIGBiZWFjb25faW50ZXJ2YWxgIHdoZW4gYWRkaW5nIGEgbmV3IHN0YXRpb24gdG8gYW4gQVAgb3IgUDJQX0dPIGludGVyZmFjZS4gVGhpcyBpcyByZWFjaGFibGUgY29yZSB3aXJlbGVzcyBsb2dpYyB0aGF0IGNhbiBiZSB0ZXN0ZWQgdXNpbmcgdGhlIG1hYzgwMjExX2h3c2ltIGRyaXZlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtubDgwMjExX25ld19zdGF0aW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRsaW5rIGNhbGxiYWNrIGBubDgwMjExX25ld19zdGF0aW9uYCBpbiBjZmc4MDIxMSwgY2hhbmdpbmcgdGhlIHZhbGlkYXRpb24gbG9naWMgZm9yIGBsaW5rX2lkYCBhbmQgYWRkaW5nIGEgY2hlY2sgZm9yIGBiZWFjb25faW50ZXJ2YWxgIHdoZW4gYWRkaW5nIGEgbmV3IHN0YXRpb24gdG8gYW4gQVAgb3IgUDJQX0dPIGludGVyZmFjZS4gVGhpcyBpcyByZWFjaGFibGUgY29yZSB3aXJlbGVzcyBsb2dpYyB0aGF0IGNhbiBiZSB0ZXN0ZWQgdXNpbmcgdGhlIG1hYzgwMjExX2h3c2ltIGRyaXZlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6NDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTo0NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eSBpbiBgbmw4MDIxMV9uZXdfc3RhdGlvbigpYC4gQmVmb3JlIHRoZSBwYXRjaCwgdGhlIGBsaW5rX2lkYCBleHRyYWN0ZWQgZnJvbSBuZXRsaW5rIGF0dHJpYnV0ZXMgd2FzIG5vdCB2YWxpZGF0ZWQgYWdhaW5zdCB0aGUgbWF4aW11bSBudW1iZXIgb2YgbGlua3Mgb3IgY2hlY2tlZCBmb3IgbmVnYXRpdmUgdmFsdWVzIGJlZm9yZSBiZWluZyB1c2VkIGFzIGFuIGluZGV4IHRvIGFjY2VzcyB0aGUgYHdkZXYtXHUwMDNlbGlua3NbbGlua19pZF1gIGFycmF5LiBUaGlzIGFsbG93ZWQgYW4gYXR0YWNrZXIgdG8gdHJpZ2dlciBhbiBvdXQtb2YtYm91bmRzIHJlYWQgd2hlbiBjaGVja2luZyBgd2Rldi1cdTAwM2VsaW5rc1tsaW5rX2lkXS5hcC5iZWFjb25faW50ZXJ2YWxgLlxuXG5PdXQtb2YtYm91bmRzIGFjY2Vzc2VzIChib3RoIHJlYWRzIGFuZCB3cml0ZXMpIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIGBwYXJhbXNgIHN0cnVjdHVyZSBpcyBmdWxseSB6ZXJvLWluaXRpYWxpemVkIHZpYSBgbWVtc2V0KFx1MDAyNnBhcmFtcywgMCwgc2l6ZW9mKHBhcmFtcykpO2AsIGFuZCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2VzIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MgaW52b2x2ZWQgaW4gdGhpcyBidWcuIFNpbmNlIEtBU0FOIGlzIGZ1bGx5IGNhcGFibGUgb2YgY2F0Y2hpbmcgdGhpcyBvdXQtb2YtYm91bmRzIHJlYWQsIHRoZXJlIGlzIG5vIG5lZWQgdG8gcnVuIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDEwOWYwZWZhZTdhZmUxYjk3NDY2ZjY0MzY0M2FiMTYwYTM3MWM3MgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDA5OjQ2OjUxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmMKaW5kZXggNWFkY2I2YmQwZmM1Ni4uNzViYmQ3OGY5MWJhMyAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCkBAIC05MTc0LDcgJiM0Mzs5MTc0LDcgQEAgc3RhdGljIGludCBubDgwMjExX3NldF9zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiBzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLSZndDt1c2VyX3B0clswXTsKLQlpbnQgZXJyOwomIzQzOwlpbnQgZXJyLCBsaW5rX2lkOwogCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBpbmZvLSZndDt1c2VyX3B0clsxXTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gd2Rldi0mZ3Q7bmV0ZGV2OwogCXN0cnVjdCBzdGF0aW9uX3BhcmFtZXRlcnMgcGFyYW1zOwpAQCAtOTIyMiw2ICYjNDM7OTIyMiwxNiBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAlwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWQgPQogCQlubDgwMjExX2xpbmtfaWRfb3JfaW52YWxpZChpbmZvLSZndDthdHRycyk7CiAKJiM0MzsJaWYgKHdkZXYtJmd0O3ZhbGlkX2xpbmtzKSB7CiYjNDM7CQlpZiAocGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCWlmICghKHdkZXYtJmd0O3ZhbGlkX2xpbmtzICZhbXA7IEJJVChwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWQpKSkKJiM0MzsJCQlyZXR1cm4gLUVOT0xJTks7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlpZiAocGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkICZndDs9IDApCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKIAlpZiAoaW5mby0mZ3Q7YXR0cnNbTkw4MDIxMV9BVFRSX01MRF9BRERSXSkgewogCQltYWNfYWRkciA9IG5sYV9kYXRhKGluZm8tJmd0O2F0dHJzW05MODAyMTFfQVRUUl9NTERfQUREUl0pOwogCQlwYXJhbXMubGlua19zdGFfcGFyYW1zLm1sZF9tYWMgPSBtYWNfYWRkcjsKQEAgLTk0MDIsOCAmIzQzOzk0MTIsMTIgQEAgc3RhdGljIGludCBubDgwMjExX25ld19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAKIAlzd2l0Y2ggKHdkZXYtJmd0O2lmdHlwZSkgewogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6Ci0JY2FzZSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOOgogCWNhc2UgTkw4MDIxMV9JRlRZUEVfUDJQX0dPOgomIzQzOwkJLyogQWRkIGEgbmV3IHN0YXRpb24gb25seSBhZnRlciB0aGUgQVAgYW5kIGxpbmsgaGFzIGJlZW4gc3RhcnRlZCAqLwomIzQzOwkJbGlua19pZCA9IHdkZXYtJmd0O3ZhbGlkX2xpbmtzID8gcGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkIDogMDsKJiM0MzsJCWlmICghd2Rldi0mZ3Q7bGlua3NbbGlua19pZF0uYXAuYmVhY29uX2ludGVydmFsKQomIzQzOwkJCXJldHVybiAtRU5FVERPV047CiYjNDM7CiAJCS8qIGlnbm9yZSBXTUUgYXR0cmlidXRlcyBpZiBpZmFjZS9zdGEgaXMgbm90IGNhcGFibGUgKi8KIAkJaWYgKCEocmRldi0mZ3Q7d2lwaHkuZmxhZ3MgJmFtcDsgV0lQSFlfRkxBR19BUF9VQVBTRCkgfHwKIAkJICAgICEocGFyYW1zLnN0YV9mbGFnc19zZXQgJmFtcDsgQklUKE5MODAyMTFfU1RBX0ZMQUdfV01FKSkpCkBAIC05NDk1LDI3ICYjNDM7OTUwOSwxMCBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAogCS8qIGJlIGF3YXJlIG9mIHBhcmFtcy52bGFuIHdoZW4gY2hhbmdpbmcgY29kZSBoZXJlICovCiAKLQlpZiAod2Rldi0mZ3Q7dmFsaWRfbGlua3MpIHsKLQkJaWYgKHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19pZCAmbHQ7IDApIHsKLQkJCWVyciA9IC1FSU5WQUw7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlpZiAoISh3ZGV2LSZndDt2YWxpZF9saW5rcyAmYW1wOyBCSVQocGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkKSkpIHsKLQkJCWVyciA9IC1FTk9MSU5LOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAocGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkICZndDs9IDApIHsKLQkJCWVyciA9IC1FSU5WQUw7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQogCXBhcmFtcy5lcHBfcGVlciA9CiAJCW5sYV9nZXRfZmxhZyhpbmZvLSZndDthdHRyc1tOTDgwMjExX0FUVFJfRVBQX1BFRVJdKTsKIAogCWVyciA9IHJkZXZfYWRkX3N0YXRpb24ocmRldiwgd2RldiwgbWFjX2FkZHIsICZhbXA7cGFyYW1zKTsKLW91dDoKIAlkZXZfcHV0KHBhcmFtcy52bGFuKTsKIAlyZXR1cm4gZXJyOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg4NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFByb3Bvc2VkIFBhdGNoOiBQb3RlbnRpYWwgSXNzdWVzIHdpdGggTGluayBJRCBWYWxpZGF0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG5sODAyMTFfbmV3X3N0YXRpb25gIHdpdGhpbiBgbmV0L3dpcmVsZXNzL25sODAyMTEuY2AsIGFuZCBpdCYjMzk7cyBwcmltYXJpbHkgYWJvdXQgbW92aW5nIGFyb3VuZCBhbmQgYWRkaW5nIHNvbWUgdmFsaWRhdGlvbiBmb3IgYHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19pZGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBsb2dpYyBpcyBjaGVja2luZyB3aGV0aGVyIHRoZSBBUCBhbmQgbGluayBoYXZlIGJlZW4gc3RhcnRlZC4KClRoZSBmaXJzdCB0aGluZyB0aGF0IGNhdWdodCBteSBleWUgaXMgdGhlIGFkZGVkIGNoZWNrIGZvciBgd2Rldi0mZ3Q7bGlua3NbbGlua19pZF0uYXAuYmVhY29uX2ludGVydmFsYCBmb3IgYEFQYCBhbmQgYFAyUF9HT2AgaW50ZXJmYWNlcy4gVGhlIGNvZGUgYXR0ZW1wdHMgdG8gdmFsaWRhdGUgdGhlIEFQIGxpbmsgYnkgY2hlY2tpbmcgdGhhdCB0aGUgYmVhY29uIGludGVydmFsIGlzIG5vbi16ZXJvIGJlZm9yZSBhZGRpbmcgYSBuZXcgc3RhdGlvbi4gRmFpciBlbm91Z2gsIHRoYXQgbWFrZXMgc2Vuc2UuIEhvd2V2ZXIsIEkgbmVlZCB0byBjaGVjayBob3cgaXQmIzM5O3MgZG9uZS4KClRoZW4gSSByZWFsaXplZCB0aGF0IGBsaW5rX2lkYCBpcyAqdXNlZCBhcyBhbiBpbmRleCBpbnRvKiBgd2Rldi0mZ3Q7bGlua3NgLiBIbW0sIGlzIGBsaW5rX2lkYCBwcm9wZXJseSBib3VuZGVkPyBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlLCBzaW5jZSBpbmRleGluZyBhbiBhcnJheSBvdXQgb2YgYm91bmRzIGlzIGEgY2xhc3NpYyBidWcuIE5vdywgaXQgbG9va3MgbGlrZSB0aGV5JiMzOTt2ZSBtb3ZlZCBzb21lIHZhbGlkYXRpb24gbG9naWMgZWFybGllciBpbiB0aGUgZnVuY3Rpb24uCgpJIHNlZSB0aGlzIGNvZGU6CmBgYGMKCWlmICh3ZGV2LSZndDt2YWxpZF9saW5rcykgewoJCWlmIChwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWQgJmx0OyAwKQoJCQlyZXR1cm4gLUVJTlZBTDsKCQlpZiAoISh3ZGV2LSZndDt2YWxpZF9saW5rcyAmYW1wOyBCSVQocGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkKSkpCgkJCXJldHVybiAtRU5PTElOSzsKCX0gZWxzZSB7CgkJaWYgKHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19pZCAmZ3Q7PSAwKQoJCQlyZXR1cm4gLUVJTlZBTDsKCX0KYGBgCklmIGB3ZGV2LSZndDt2YWxpZF9saW5rc2AgaXMgbm9uLXplcm8sIHRoaXMgY2hlY2tzIHRoYXQgdGhlIGBsaW5rX2lkYCBpcyBub24tbmVnYXRpdmUgYW5kIGlzIHZhbGlkLiBUaGUgYGxpbmtfaWRgIGlzIHRoZW4gdXNlZCB0byBjaGVjayB0aGUgdmFsaWQgbGluayBtYXNrLiBUaGlzIHNlZW1zIGxpa2UgaXQgd291bGQgcHJldmVudCBvdXQtb2YtYm91bmRzIGFjY2VzcyAqaWYqIHRoZSBgQklUKGxpbmtfaWQpYCBvcGVyYXRpb24gaXMgc2FmZS4gTm93LCB0aGlzIGBCSVQobGlua19pZClgIGlzIHRoZSByaXNreSBwYXJ0LiBJZiBgbGlua19pZGAgaXMgbGFyZ2UsIHVzaW5nIGJpdCBzaGlmdGluZyBvbiBhIDE2LWJpdCBmaWVsZCBtYXkgbGVhZCB0byBpc3N1ZXMuCgpHaXZlbiB0aGF0IGB3ZGV2LSZndDt2YWxpZF9saW5rc2AgaXMgYSBgdTE2YCwgYWNjb3JkaW5nIHRvIHRoZSBtYWM4MDIxMS9jZmc4MDIxMSBzdGFuZGFyZCwgaXQgc2VlbXMgdG8gbWUgdGhhdCB1c2luZyBhIGBsaW5rX2lkYCB2YWx1ZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMTYsIHdoaWxlIG5vdCAqZGlyZWN0bHkqIG91dCBvZiBib3VuZHMgZHVlIHRvIHRoZSBjb21wYXJpc29uIGxvZ2ljLCBjb3VsZCBzdGlsbCByZXN1bHQgaW4gdW5kZWZpbmVkIGJlaGF2aW9yIGJlY2F1c2UgYEJJVChsaW5rX2lkKWAgd2lsbCBzaGlmdCBhIHNpbmdsZSBiaXQgcGFzdCB0aGUgYm91bmRhcmllcyBvZiB0aGUgYHUxNmAuIFdlIGNvdWxkIGhhdmUgYW4gdW5leHBlY3RlZCByZXN1bHQgZHVlIHRvIHRoZSBiaXQgc2hpZnRpbmcuCgpJIG5lZWQgdG8gY29uZmlybSB0aGlzLiBJIHdpbGwgbG9vayBhdCBgc3RydWN0IHdpcmVsZXNzX2RldmAgZGVmaW5pdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3Qgd2lyZWxlc3NfZGV2IFxceyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L21hYzgwMjExLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDQxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gY2ZnODAyMTEuaCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgd2lyZWxlc3MgY29uZmlndXJhdGlvbiBmcmFtZXdvcmsuIGBjZmc4MDIxMWAgaXMgYWxtb3N0IGFsd2F5cyB0aGUgZmlyc3QgcGxhY2UgdG8gc3RhcnQgd2hlbiBJJiMzOTttIGRlYWxpbmcgd2l0aCBrZXJuZWwtbGV2ZWwgV2ktRmkgc3R1ZmYuIEl0JiMzOTtzIHRoZSBjZW50cmFsIGh1YiBmb3IgdXNlci1zcGFjZSBpbnRlcmFjdGlvbiB3aXRoIHdpcmVsZXNzIGRldmljZXMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzLCBkZWZpbml0aW9ucywgYW5kIGZ1bmN0aW9uIHByb3RvdHlwZXMgdGhhdCBkZWZpbmUgdGhlIGludGVyZmFjZSBiZXR3ZWVuIHRoZSB3aXJlbGVzcyBkcml2ZXJzIGFuZCB0aGUgZ2VuZXJpYyBuZXR3b3JraW5nIHN0YWNrLiBIb3BlZnVsbHksIHRoZSBpc3N1ZSBJJiMzOTttIGNoYXNpbmcgaXMgZXhwb3NlZCBoZXJlLiBJdCYjMzk7cyBvZnRlbiB0aGUgc2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBmb3IgYWxsIG9mIHRob3NlIGVsZW1lbnRzIG9mIHRoZSBXaS1GaSBzdGFjay4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBkaWcgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCB3aXJlbGVzc19kZXYgXFx7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvY2ZnODAyMTEuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9jZmc4MDIxMS5oPTcxMjA9ZW51bSBpZWVlODAyMTFfYXBfcmVnX3Bvd2VyIHtcbi0tXG5pbmNsdWRlL25ldC9jZmc4MDIxMS5oLTcyMDctICovXG5pbmNsdWRlL25ldC9jZmc4MDIxMS5oOjcyMDg6c3RydWN0IHdpcmVsZXNzX2RldiB7XG5pbmNsdWRlL25ldC9jZmc4MDIxMS5oLTcyMDktXHRzdHJ1Y3Qgd2lwaHkgKndpcGh5O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzgwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoYXQgY29kZToKCioqRGl2aW5nIGludG8gdGhlIFdpcmVsZXNzIERldmljZSBTdHJ1Y3R1cmUqKgoKT2theSwgdGltZSB0byBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIHdpcmVsZXNzIG5ldHdvcmtpbmcgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwuIE15IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGNvcmUgcmVwcmVzZW50YXRpb24gb2YgYSB3aXJlbGVzcyBkZXZpY2UuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IGBzdHJ1Y3Qgd2lyZWxlc3NfZGV2YCBpbiBgaW5jbHVkZS9uZXQvY2ZnODAyMTEuaGAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZnVuZGFtZW50YWwgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBmb3JtcyB0aGUgYmFja2JvbmUgb2YgY2ZnODAyMTEmIzM5O3MgaW50ZXJhY3Rpb24gd2l0aCB3aXJlbGVzcyBkcml2ZXJzLgoKSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbWVtYmVycyBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIuIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgZWxlbWVudHMgcmVsYXRlZCB0bzoKCiogICAqKkRyaXZlciBJbnRlcmZhY2U6KiogSG93IHRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhpcyBzdHJ1Y3R1cmUgdG8gY29uZmlndXJlIGFuZCByZXBvcnQgdGhlIHN0YXRlIG9mIHRoZSB3aXJlbGVzcyBkZXZpY2UuIEFyZSB0aGVyZSBmdW5jdGlvbiBwb2ludGVycyBmb3Igc3BlY2lmaWMgb3BlcmF0aW9ucyAoZS5nLiwgc2V0dGluZyB0aGUgbW9kZSwgdHJhbnNtaXR0aW5nIGZyYW1lcywgc2Nhbm5pbmcpPwoqICAgKipTdGF0ZSBNYW5hZ2VtZW50OioqIEZsYWdzIGFuZCB2YXJpYWJsZXMgaW5kaWNhdGluZyB0aGUgY3VycmVudCBvcGVyYXRpb25hbCBzdGF0ZSAoZS5nLiwgc2Nhbm5pbmcsIGNvbm5lY3RlZCwgZGlzY29ubmVjdGVkKS4gSSYjMzk7bGwgd2FudCB0byBzZWUgaG93IHRoZXNlIHRyYW5zaXRpb25zIGFyZSBtYW5hZ2VkLgoqICAgKipDb25maWd1cmF0aW9uOioqIFBhcmFtZXRlcnMgdGhhdCBkZWZpbmUgdGhlIHdpcmVsZXNzIHNldHRpbmdzLCBzdWNoIGFzIHRoZSBvcGVyYXRpbmcgY2hhbm5lbCwgQlNTSUQsIGFuZCBuZXR3b3JrIG1vZGUuCiogICAqKlNlY3VyaXR5OioqIEFueSByZWxhdGVkIHBvaW50ZXJzIHRvIHNlY3VyaXR5IGtleXMgYW5kIGNvbmZpZ3VyYXRpb24gZWxlbWVudHMuCiogICAqKkludGVyZmFjZToqKiBJJiMzOTtsbCBiZSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgYHdpcmVsZXNzX2RldmAgaXMgbGlua2VkIHRvIHRoZSBuZXR3b3JrIGludGVyZmFjZXMgKGUuZy4sIGBuZXRfZGV2aWNlYCkuCgpJIGV4cGVjdCB0aGUgc3RydWN0dXJlIHRvIGJlIHF1aXRlIGNvbXByZWhlbnNpdmUsIGFzIGl0IG5lZWRzIHRvIGFic3RyYWN0IGFuZCBoYW5kbGUgdGhlIHZhcmlvdXMgY29tcGxleGl0aWVzIG9mIG1vZGVybiB3aXJlbGVzcyBwcm90b2NvbHMuIFRoaXMgaXMgdGhlIGNlbnRyYWwgcG9pbnQgZm9yIGV2ZXJ5dGhpbmcgY2ZnODAyMTEgZG9lcywgc28gYSB0aG9yb3VnaCB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgc3RydWN0dXJlIGlzIGVzc2VudGlhbCB0byBncmFzcCB0aGUgZnJhbWV3b3JrJiMzOTtzIG92ZXJhbGwgbG9naWMuIExldCYjMzk7cyBzZWUgaG93IHRoZXkmIzM5O3ZlIG9yZ2FuaXplZCB0aGUgY29tcG9uZW50cyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9jZmc4MDIxMS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzIwOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NzIwODpcdHN0cnVjdCB3aXJlbGVzc19kZXYge1xuNzIwOTpcdFx0c3RydWN0IHdpcGh5ICp3aXBoeTtcbjcyMTA6XHRcdGVudW0gbmw4MDIxMV9pZnR5cGUgaWZ0eXBlO1xuNzIxMTpcdFxuNzIxMjpcdFx0LyogdGhlIHJlbWFpbmRlciBvZiB0aGlzIHN0cnVjdCBzaG91bGQgYmUgcHJpdmF0ZSB0byBjZmc4MDIxMSAqL1xuNzIxMzpcdFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuNzIxNDpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbjcyMTU6XHRcbjcyMTY6XHRcdHUzMiBpZGVudGlmaWVyO1xuNzIxNzpcdFxuNzIxODpcdFx0c3RydWN0IGxpc3RfaGVhZCBtZ210X3JlZ2lzdHJhdGlvbnM7XG43MjE5Olx0XHR1OCBtZ210X3JlZ2lzdHJhdGlvbnNfbmVlZF91cGRhdGU6MTtcbjcyMjA6XHRcbjcyMjE6XHRcdGJvb2wgdXNlXzRhZGRyLCBpc19ydW5uaW5nLCByZWdpc3RlcmVkLCByZWdpc3RlcmluZztcbjcyMjI6XHRcbjcyMjM6XHRcdHU4IGFkZHJlc3NbRVRIX0FMRU5dIF9fYWxpZ25lZChzaXplb2YodTE2KSk7XG43MjI0Olx0XG43MjI1Olx0XHQvKiBjdXJyZW50bHkgdXNlZCBmb3IgSUJTUyBhbmQgU01FIC0gbWlnaHQgYmUgcmVhcnJhbmdlZCBsYXRlciAqL1xuNzIyNjpcdFx0c3RydWN0IGNmZzgwMjExX2Nvbm4gKmNvbm47XG43MjI3Olx0XHRzdHJ1Y3QgY2ZnODAyMTFfY2FjaGVkX2tleXMgKmNvbm5lY3Rfa2V5cztcbjcyMjg6XHRcdGVudW0gaWVlZTgwMjExX2Jzc190eXBlIGNvbm5fYnNzX3R5cGU7XG43MjI5Olx0XHR1MzIgY29ubl9vd25lcl9ubHBvcnRpZDtcbjcyMzA6XHRcbjcyMzE6XHRcdHN0cnVjdCB3aXBoeV93b3JrIGRpc2Nvbm5lY3Rfd2s7XG43MjMyOlx0XHR1OCBkaXNjb25uZWN0X2Jzc2lkW0VUSF9BTEVOXTtcbjcyMzM6XHRcbjcyMzQ6XHRcdHN0cnVjdCBsaXN0X2hlYWQgZXZlbnRfbGlzdDtcbjcyMzU6XHRcdHNwaW5sb2NrX3QgZXZlbnRfbG9jaztcbjcyMzY6XHRcbjcyMzc6XHRcdHU4IGNvbm5lY3RlZDoxO1xuNzIzODpcdFxuNzIzOTpcdFx0Ym9vbCBwcztcbjcyNDA6XHRcdGludCBwc190aW1lb3V0O1xuNzI0MTpcdFxuNzI0MjpcdFx0dTMyIHVuZXhwZWN0ZWRfbmxwb3J0aWQ7XG43MjQzOlx0XG43MjQ0Olx0XHR1MzIgb3duZXJfbmxwb3J0aWQ7XG43MjQ1Olx0XHRib29sIG5sX293bmVyX2RlYWQ7XG43MjQ2Olx0XG43MjQ3Olx0I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG43MjQ4Olx0XHQvKiB3ZXh0IGRhdGEgKi9cbjcyNDk6XHRcdHN0cnVjdCB7XG43MjUwOlx0XHRcdHN0cnVjdCBjZmc4MDIxMV9pYnNzX3BhcmFtcyBpYnNzO1xuNzI1MTpcdFx0XHRzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgY29ubmVjdDtcbjcyNTI6XHRcdFx0c3RydWN0IGNmZzgwMjExX2NhY2hlZF9rZXlzICprZXlzO1xuNzI1MzpcdFx0XHRjb25zdCB1OCAqaWU7XG43MjU0Olx0XHRcdHNpemVfdCBpZV9sZW47XG43MjU1Olx0XHRcdHU4IGJzc2lkW0VUSF9BTEVOXTtcbjcyNTY6XHRcdFx0dTggcHJldl9ic3NpZFtFVEhfQUxFTl07XG43MjU3Olx0XHRcdHU4IHNzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTl07XG43MjU4Olx0XHRcdHM4IGRlZmF1bHRfa2V5LCBkZWZhdWx0X21nbXRfa2V5O1xuNzI1OTpcdFx0XHRib29sIHByZXZfYnNzaWRfdmFsaWQ7XG43MjYwOlx0XHR9IHdleHQ7XG43MjYxOlx0I2VuZGlmXG43MjYyOlx0XG43MjYzOlx0XHRzdHJ1Y3Qgd2lwaHlfd29yayBjcW1fcnNzaV93b3JrO1xuNzI2NDpcdFx0c3RydWN0IGNmZzgwMjExX2NxbV9jb25maWcgX19yY3UgKmNxbV9jb25maWc7XG43MjY1Olx0XG43MjY2Olx0XHRzdHJ1Y3QgbGlzdF9oZWFkIHBtc3JfbGlzdDtcbjcyNjc6XHRcdHNwaW5sb2NrX3QgcG1zcl9sb2NrO1xuNzI2ODpcdFx0c3RydWN0IHdpcGh5X3dvcmsgcG1zcl9mcmVlX3drO1xuNzI2OTpcdFxuNzI3MDpcdFx0dW5zaWduZWQgbG9uZyB1bnByb3RfYmVhY29uX3JlcG9ydGVkO1xuNzI3MTpcdFxuNzI3MjpcdFx0dW5pb24ge1xuNzI3MzpcdFx0XHRzdHJ1Y3Qge1xuNzI3NDpcdFx0XHRcdHU4IGNvbm5lY3RlZF9hZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7XG43Mjc1Olx0XHRcdFx0dTggc3NpZFtJRUVFODAyMTFfTUFYX1NTSURfTEVOXTtcbjcyNzY6XHRcdFx0XHR1OCBzc2lkX2xlbjtcbjcyNzc6XHRcdFx0fSBjbGllbnQ7XG43Mjc4Olx0XHRcdHN0cnVjdCB7XG43Mjc5Olx0XHRcdFx0aW50IGJlYWNvbl9pbnRlcnZhbDtcbjcyODA6XHRcdFx0XHRzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgcHJlc2V0X2NoYW5kZWY7XG43MjgxOlx0XHRcdFx0c3RydWN0IGNmZzgwMjExX2NoYW5fZGVmIGNoYW5kZWY7XG43MjgyOlx0XHRcdFx0dTggaWRbSUVFRTgwMjExX01BWF9NRVNIX0lEX0xFTl07XG43MjgzOlx0XHRcdFx0dTggaWRfbGVuLCBpZF91cF9sZW47XG43Mjg0Olx0XHRcdH0gbWVzaDtcbjcyODU6XHRcdFx0c3RydWN0IHtcbjcyODY6XHRcdFx0XHRzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgcHJlc2V0X2NoYW5kZWY7XG43Mjg3Olx0XHRcdFx0dTggc3NpZFtJRUVFODAyMTFfTUFYX1NTSURfTEVOXTtcbjcyODg6XHRcdFx0XHR1OCBzc2lkX2xlbjtcbjcyODk6XHRcdFx0fSBhcDtcbjcyOTA6XHRcdFx0c3RydWN0IHtcbjcyOTE6XHRcdFx0XHRzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpjdXJyZW50X2JzcztcbjcyOTI6XHRcdFx0XHRzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgY2hhbmRlZjtcbjcyOTM6XHRcdFx0XHRpbnQgYmVhY29uX2ludGVydmFsO1xuNzI5NDpcdFx0XHRcdHU4IHNzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTl07XG43Mjk1Olx0XHRcdFx0dTggc3NpZF9sZW47XG43Mjk2Olx0XHRcdH0gaWJzcztcbjcyOTc6XHRcdFx0c3RydWN0IHtcbjcyOTg6XHRcdFx0XHRzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgY2hhbmRlZjtcbjcyOTk6XHRcdFx0fSBvY2I7XG43MzAwOlx0XHRcdHN0cnVjdCB7XG43MzAxOlx0XHRcdFx0dTggY2x1c3Rlcl9pZFtFVEhfQUxFTl0gX19hbGlnbmVkKDIpO1xuNzMwMjpcdFx0XHRcdHU4IG5fY2hhbm5lbHM7XG43MzAzOlx0XHRcdFx0c3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmcztcbjczMDQ6XHRcdFx0XHRib29sIHNjaGVkX3VwZGF0ZV9wZW5kaW5nO1xuNzMwNTpcdFx0XHR9IG5hbjtcbjczMDY6XHRcdH0gdTtcbjczMDc6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjMyMQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlIHdlIGdvLiBIZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyB0aGUgcHJvdmlkZWQgdGV4dCBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzOgoKKipNaXNzaW5nIFZhcmlhYmxlPyBUaW1lIHRvIEludmVzdGlnYXRlLioqCgpIbW0sIHNvbWV0aGluZyBzZWVtcyBvZmYuIEkgd2FzIGV4cGVjdGluZyB0byBzZWUgYHZhbGlkX2xpbmtzYCBkZWZpbmVkIGluIHRoaXMgY29udGV4dCwgYnV0IGl0JiMzOTtzIG5vdCBpbW1lZGlhdGVseSBhcHBhcmVudC4gVGhhdCYjMzk7cyBhIHJlZCBmbGFnLiBCZWZvcmUganVtcGluZyB0byBjb25jbHVzaW9ucywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbi4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgYW5kIGdldCBtb3JlIGNvbnRleHQuIEkmIzM5O2xsIHJlYWQgZnVydGhlciB0byBzZWUgd2hlcmUgYHZhbGlkX2xpbmtzYCBtaWdodCBiZSwgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQsIG9yIGlmIGl0IGhhcyBhbm90aGVyIG5hbWUgYWx0b2dldGhlci4gQSBxdWljayBzY2FuIHdvbiYjMzk7dCBkbzsgSSBuZWVkIHRoZSBmdWxsIHBpY3R1cmUgYmVmb3JlIEkgbWFrZSBhbnkganVkZ21lbnRzLiBUaGUgY29kZSYjMzk7cyBwcm9iYWJseSBqdXN0IG5vdCBvYnZpb3VzIGZyb20gdGhpcyBvbmUgc25pcHBldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9jZmc4MDIxMS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzMwOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NzMwODpcdFx0c3RydWN0IHtcbjczMDk6XHRcdFx0dTggYWRkcltFVEhfQUxFTl0gX19hbGlnbmVkKDIpO1xuNzMxMDpcdFx0XHR1bmlvbiB7XG43MzExOlx0XHRcdFx0c3RydWN0IHtcbjczMTI6XHRcdFx0XHRcdHVuc2lnbmVkIGludCBiZWFjb25faW50ZXJ2YWw7XG43MzEzOlx0XHRcdFx0XHRzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgY2hhbmRlZjtcbjczMTQ6XHRcdFx0XHR9IGFwO1xuNzMxNTpcdFx0XHRcdHN0cnVjdCB7XG43MzE2Olx0XHRcdFx0XHRzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpjdXJyZW50X2JzcztcbjczMTc6XHRcdFx0XHR9IGNsaWVudDtcbjczMTg6XHRcdFx0fTtcbjczMTk6XHRcbjczMjA6XHRcdFx0Ym9vbCBjYWNfc3RhcnRlZDtcbjczMjE6XHRcdFx0dW5zaWduZWQgbG9uZyBjYWNfc3RhcnRfdGltZTtcbjczMjI6XHRcdFx0dW5zaWduZWQgaW50IGNhY190aW1lX21zO1xuNzMyMzpcdFx0fSBsaW5rc1tJRUVFODAyMTFfTUxEX01BWF9OVU1fTElOS1NdO1xuNzMyNDpcdFx0dTE2IHZhbGlkX2xpbmtzO1xuNzMyNTpcdFxuNzMyNjpcdFx0dTMyIHJhZGlvX21hc2s7XG43MzI3Olx0fTtcbjczMjg6XHRcbjczMjk6XHRzdGF0aWMgaW5saW5lIGNvbnN0IHU4ICp3ZGV2X2FkZHJlc3Moc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldilcbjczMzA6XHR7XG43MzMxOlx0XHRpZiAod2Rldi1cdTAwM2VuZXRkZXYpXG43MzMyOlx0XHRcdHJldHVybiB3ZGV2LVx1MDAzZW5ldGRldi1cdTAwM2VkZXZfYWRkcjtcbjczMzM6XHRcdHJldHVybiB3ZGV2LVx1MDAzZWFkZHJlc3M7XG43MzM0Olx0fVxuNzMzNTpcdFxuNzMzNjpcdHN0YXRpYyBpbmxpbmUgYm9vbCB3ZGV2X3J1bm5pbmcoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldilcbjczMzc6XHR7XG43MzM4Olx0XHRpZiAod2Rldi1cdTAwM2VuZXRkZXYpXG43MzM5Olx0XHRcdHJldHVybiBuZXRpZl9ydW5uaW5nKHdkZXYtXHUwMDNlbmV0ZGV2KTtcbjczNDA6XHRcdHJldHVybiB3ZGV2LVx1MDAzZWlzX3J1bm5pbmc7XG43MzQxOlx0fVxuNzM0MjpcdFxuNzM0MzpcdC8qKlxuNzM0NDpcdCAqIHdkZXZfcHJpdiAtIHJldHVybiB3aXBoeSBwcml2IGZyb20gd2lyZWxlc3NfZGV2XG43MzQ1Olx0ICpcbjczNDY6XHQgKiBAd2RldjogVGhlIHdpcmVsZXNzIGRldmljZSB3aG9zZSB3aXBoeSYjMzk7cyBwcml2IHBvaW50ZXIgdG8gcmV0dXJuXG43MzQ3Olx0ICogUmV0dXJuOiBUaGUgd2lwaHkgcHJpdiBvZiBAd2Rldi5cbjczNDg6XHQgKi9cbjczNDk6XHRzdGF0aWMgaW5saW5lIHZvaWQgKndkZXZfcHJpdihzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxuNzM1MDpcdHtcbjczNTE6XHRcdEJVR19PTighd2Rldik7XG43MzUyOlx0XHRyZXR1cm4gd2lwaHlfcHJpdih3ZGV2LVx1MDAzZXdpcGh5KTtcbjczNTM6XHR9XG43MzU0Olx0XG43MzU1Olx0LyoqXG43MzU2Olx0ICogd2Rldl9jaGFuZGVmIC0gcmV0dXJuIGNoYW5kZWYgcG9pbnRlciBmcm9tIHdpcmVsZXNzX2RldlxuNzM1NzpcdCAqIEB3ZGV2OiB0aGUgd2RldlxuNzM1ODpcdCAqIEBsaW5rX2lkOiB0aGUgbGluayBJRCBmb3IgTUxPXG43MzU5Olx0ICpcbjczNjA6XHQgKiBSZXR1cm46IFRoZSBjaGFuZGVmIGRlcGVuZGluZyBvbiB0aGUgbW9kZSwgb3IgJU5VTEwuXG43MzYxOlx0ICovXG43MzYyOlx0c3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICp3ZGV2X2NoYW5kZWYoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbjczNjM6XHRcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgbGlua19pZCk7XG43MzY0Olx0XG43MzY1Olx0c3RhdGljIGlubGluZSB2b2lkIFdBUk5fSU5WQUxJRF9MSU5LX0lEKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG43MzY2Olx0XHRcdFx0XHRcdHVuc2lnbmVkIGludCBsaW5rX2lkKVxuNzM2NzpcdHtcbjczNjg6XHRcdFdBUk5fT04obGlua19pZCBcdTAwMjZcdTAwMjYgIXdkZXYtXHUwMDNldmFsaWRfbGlua3MpO1xuNzM2OTpcdFx0V0FSTl9PTih3ZGV2LVx1MDAzZXZhbGlkX2xpbmtzIFx1MDAyNlx1MDAyNlxuNzM3MDpcdFx0XHQhKHdkZXYtXHUwMDNldmFsaWRfbGlua3MgXHUwMDI2IEJJVChsaW5rX2lkKSkpO1xuNzM3MTpcdH1cbjczNzI6XHRcbjczNzM6XHQjZGVmaW5lIGZvcl9lYWNoX3ZhbGlkX2xpbmsobGlua19pbmZvLCBsaW5rX2lkKVx0XHRcdFxcXG43Mzc0Olx0XHRmb3IgKGxpbmtfaWQgPSAwO1x0XHRcdFx0XHRcXFxuNzM3NTpcdFx0ICAgICBsaW5rX2lkIFx1MDAzYyAoKGxpbmtfaW5mbyktXHUwMDNldmFsaWRfbGlua3MgP1x0XHRcXFxuNzM3NjpcdFx0XHRcdEFSUkFZX1NJWkUoKGxpbmtfaW5mbyktXHUwMDNlbGlua3MpIDogMSk7XHRcXFxuNzM3NzpcdFx0ICAgICBsaW5rX2lkJiM0MzsmIzQzOylcdFx0XHRcdFx0XHRcXFxuNzM3ODpcdFx0XHRpZiAoIShsaW5rX2luZm8pLVx1MDAzZXZhbGlkX2xpbmtzIHx8XHRcdFxcXG43Mzc5Olx0XHRcdCAgICAoKGxpbmtfaW5mbyktXHUwMDNldmFsaWRfbGlua3MgXHUwMDI2IEJJVChsaW5rX2lkKSkpXG43MzgwOlx0XG43MzgxOlx0LyoqXG43MzgyOlx0ICogRE9DOiBVdGlsaXR5IGZ1bmN0aW9uc1xuNzM4MzpcdCAqXG43Mzg0Olx0ICogY2ZnODAyMTEgb2ZmZXJzIGEgbnVtYmVyIG9mIHV0aWxpdHkgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWZ1bC5cbjczODU6XHQgKi9cbjczODY6XHRcbjczODc6XHQvKipcbjczODg6XHQgKiBpZWVlODAyMTFfY2hhbm5lbF9lcXVhbCAtIGNvbXBhcmUgdHdvIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbFxuNzM4OTpcdCAqXG43MzkwOlx0ICogQGE6IDFzdCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWxcbjczOTE6XHQgKiBAYjogMm5kIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbFxuNzM5MjpcdCAqIFJldHVybjogdHJ1ZSBpZiBjZW50ZXIgZnJlcXVlbmN5IG9mIEBhID09IEBiXG43MzkzOlx0ICovXG43Mzk0Olx0c3RhdGljIGlubGluZSBib29sXG43Mzk1Olx0aWVlZTgwMjExX2NoYW5uZWxfZXF1YWwoc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICphLFxuNzM5NjpcdFx0XHRcdHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqYilcbjczOTc6XHR7XG43Mzk4Olx0XHRyZXR1cm4gKGEtXHUwMDNlY2VudGVyX2ZyZXEgPT0gYi1cdTAwM2VjZW50ZXJfZnJlcSBcdTAwMjZcdTAwMjZcbjczOTk6XHRcdFx0YS1cdTAwM2VmcmVxX29mZnNldCA9PSBiLVx1MDAzZWZyZXFfb2Zmc2V0KTtcbjc0MDA6XHR9XG43NDAxOlx0XG43NDAyOlx0LyoqXG43NDAzOlx0ICogaWVlZTgwMjExX2NoYW5uZWxfdG9fa2h6IC0gY29udmVydCBpZWVlODAyMTFfY2hhbm5lbCB0byBmcmVxdWVuY3kgaW4gS0h6XG43NDA0Olx0ICogQGNoYW46IHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCB0byBjb252ZXJ0XG43NDA1Olx0ICogUmV0dXJuOiBUaGUgY29ycmVzcG9uZGluZyBmcmVxdWVuY3kgKGluIEtIeilcbjc0MDY6XHQgKi9cbjc0MDc6XHRzdGF0aWMgaW5saW5lIHUzMlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDM5CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVGhpbmtpbmcgVGhyb3VnaCBMaW5rIE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgSSBzZWUgYHZhbGlkX2xpbmtzYCBkZWNsYXJlZCBhcyBhIGB1MTZgLiBTZWVtcyBzdGFuZGFyZCBlbm91Z2g7IHVzaW5nIGEgMTYtYml0IHVuc2lnbmVkIGludGVnZXIgdG8gcmVwcmVzZW50IGEgY291bnQgb3IgYW4gaW5kZXggaXMgcHJldHR5IGNvbW1vbiBhbmQgcHJvYmFibHkgZWZmaWNpZW50IGZvciB3aGF0ZXZlciB0aGlzIGFwcGxpY2F0aW9uIGlzLiBUaGVuLCBJIHNlZSBgbGlua3NgIGlzIGFuIGFycmF5IGFuZCBpdHMgc2l6ZSBpcyBkZWZpbmVkIGJ5IGBJRUVFODAyMTFfTUxEX01BWF9OVU1fTElOS1NgLiBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24gbm93OiBXaGF0IGV4YWN0bHkgKmlzKiBgSUVFRTgwMjExX01MRF9NQVhfTlVNX0xJTktTYD8gSSBuZWVkIHRvIGtub3cgdGhlIG1heGltdW0gbnVtYmVyIG9mIGxpbmtzIHRoaXMgc3lzdGVtIGlzIGRlc2lnbmVkIHRvIGhhbmRsZS4gVGhhdCB2YWx1ZSBpcyBjcnVjaWFsOyBpdCBkaWN0YXRlcyB0aGUgdXBwZXIgYm91bmQgZm9yIHdoYXQgY2FuIGJlIHN0b3JlZCBpbiB0aGUgYGxpbmtzYCBhcnJheS4gV2l0aG91dCBrbm93aW5nIHRoYXQgY29uc3RhbnQsIEkgY2FuJiMzOTt0IGRldGVybWluZSB0aGUgbWVtb3J5IGZvb3RwcmludCwgb3IgYXNzZXNzIGhvdyBlZmZpY2llbnRseSB0aGUgc3lzdGVtIHdpbGwgYmVoYXZlIHVuZGVyIGhlYXZ5IGxvYWQuIEkmIzM5O20gZ29pbmcgdG8gdHJhY2sgdGhhdCBkb3duIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBJRUVFODAyMTFfTUxEX01BWF9OVU1fTElOS1MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2llZWU4MDIxMS1laHQuaD00NDU9ZW51bSBpZWVlODAyMTFfcHJvdGVjdGVkX2VodF9hY3Rpb25jb2RlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS1laHQuaC00NjEtLyogbXVsdGktbGluayBkZXZpY2UgKi9cbmluY2x1ZGUvbGludXgvaWVlZTgwMjExLWVodC5oOjQ2MjojZGVmaW5lIElFRUU4MDIxMV9NTERfTUFYX05VTV9MSU5LU1x0MTVcbmluY2x1ZGUvbGludXgvaWVlZTgwMjExLWVodC5oLTQ2My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ5MQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDEyNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBPdXQtb2YtQm91bmRzIFJlYWQgaW4gV2lyZWxlc3MgRGV2aWNlIExpbmsgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIHdpcmVsZXNzIGRyaXZlciBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgYGxpbmtfaWRgIGlzIGxpbWl0ZWQgdG8gMTUgd2hlbiBgd2Rldi0mZ3Q7dmFsaWRfbGlua3NgIGlzIHVzZWQgYmVjYXVzZSBvZiB0aGUgYEJJVChsaW5rX2lkKWAgY2hlY2ssIHJpZ2h0PyAgQnV0IHRoZW4gSSByZW1lbWJlcmVkIHRoYXQgYEJJVGAgdXNlcyBhbiB1bnNpZ25lZCBsb25nLCB3aGljaCBjYW4gaGFuZGxlIHNoaWZ0cyB1cCB0byA2Mywgbm90IGp1c3QgMzIuIFNvIGEgYGxpbmtfaWRgIG9mIDE2IG1lYW5zIGBCSVQoMTYpYCBpcyBgMHgxMDAwMGAuIFNpbmNlIGB2YWxpZF9saW5rc2AgaXMgYSBgdTE2YCwgdGhlIGJpdHdpc2UgQU5EIG9wZXJhdGlvbiBgdmFsaWRfbGlua3MgJmFtcDsgQklUKDE2KWAgd291bGQgYWx3YXlzIHJlc3VsdCBpbiB6ZXJvLiBDb25zZXF1ZW50bHksIHRoZSBmdW5jdGlvbiB3b3VsZCByZXR1cm4gYC1FTk9MSU5LYC4KClRoZW4gaXQgaGl0IG1lOiB0aGUgUkVBTCBidWcgaXMgdGhhdCB0aGUgYGxpbmtfaWRgIGlzIHVzZWQgdG8gaW5kZXggdGhlIGB3ZGV2LSZndDtsaW5rc2AgYXJyYXksIHdoaWNoIG9ubHkgaGFzIGEgc2l6ZSBvZiAxNSEgQmVmb3JlIHRoZSBwYXRjaCwgdGhlIGBsaW5rX2lkYCB3YXNuJiMzOTt0IHZhbGlkYXRlZCAqYmVmb3JlKiB0aGUgc3dpdGNoIHN0YXRlbWVudC4gSW5zdGVhZCwgdGhlIHZhbGlkYXRpb24gY2FtZSBsYXRlciBpbiB0aGUgZnVuY3Rpb24sIEFGVEVSIHRoZSBhcnJheSBpbmRleCB3YXMgYmVpbmcgdXNlZC4KClRoZSBjb2RlIHJldmVhbHMgdGhlIHByb2JsZW06IHdoZW4gYHdkZXYtJmd0O3ZhbGlkX2xpbmtzYCBpcyB6ZXJvLCBgbGlua19pZGAgaXMgemVyby4gV2hlbiBgd2Rldi0mZ3Q7dmFsaWRfbGlua3NgIGlzIG5vdCB6ZXJvLCBgbGlua19pZGAgYmVjb21lcyBgcGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkYC4gSW1wb3J0YW50bHksIGJlZm9yZSB0aGUgcGF0Y2gsIHRoZXJlIHdhcyBubyB2YWxpZGF0aW9uIG9mIGBwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWRgICpiZWZvcmUqIGl0IHdhcyB1c2VkIHRvIGluZGV4IHRoZSBhcnJheS4gVGhlIHZhbGlkYXRpb24gd2FzIGRvbmUgYXQgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24sIHRvbyBsYXRlLiBTbyBgbGlua19pZGAgY291bGQgYmUgYW55dGhpbmchIEl0JiMzOTtzIHBhcnNlZCBmcm9tIGBpbmZvLSZndDthdHRyc2AgdmlhIGBubDgwMjExX2xpbmtfaWRfb3JfaW52YWxpZChpbmZvLSZndDthdHRycylgLiBJZiBpdCYjMzk7cyBpbnZhbGlkLCBpdCYjMzk7cyAtMS4gSWYgaXQmIzM5O3MgdmFsaWQsIGl0JiMzOTtzIGEgYHU4YCwgd2hpY2ggbWVhbnMgaXQgY2FuIGJlIGFueXRoaW5nIGZyb20gMCB0byAyNTUuCgpTbyBpZiBgbGlua19pZGAgaXMgdXAgdG8gMjU1LCB1c2luZyBpdCB0byBpbmRleCBgd2Rldi0mZ3Q7bGlua3NbbGlua19pZF1gIHdpbGwgY2F1c2UgYW4gb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3MhIGB3ZGV2LSZndDtsaW5rc2AgaXMgc2l6ZSAxNSEgVGhpcyBpcyBhIHRleHRib29rIG91dC1vZi1ib3VuZHMgcmVhZCEKClRoZSBjb2RlIHJlYWRzIHRoZSBgYmVhY29uX2ludGVydmFsYCBmaWVsZDogYGlmICghd2Rldi0mZ3Q7bGlua3NbbGlua19pZF0uYXAuYmVhY29uX2ludGVydmFsKWAuIEFuZCBzaW5jZSBgc3RydWN0IHdpcmVsZXNzX2RldmAgaXMgdXN1YWxseSBhbGxvY2F0ZWQgb24gdGhlIGhlYXAgKHBlcmhhcHMgYXMgcGFydCBvZiBgc3RydWN0IG5ldF9kZXZpY2VgIG9yIHNpbWlsYXIsIG9yIGJ5IGBremFsbG9jYCksIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBjb3VsZCBwb3RlbnRpYWxseSBsZWFkIHRvIHJlYWRpbmcgb3RoZXIgaGVhcCBkYXRhLCBhbHRob3VnaCwgaW4gdGhpcyBjYXNlLCBpdCYjMzk7cyBqdXN0IGNoZWNraW5nIGlmIGl0JiMzOTtzIHplcm8uIElmIGl0JiMzOTtzIHplcm8sIGl0IHJldHVybnMgYC1FTkVURE9XTmA7IG90aGVyd2lzZSwgaXQgY29udGludWVzLgoKVGhhbmtmdWxseSwgdGhpcyBpcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQsIGFuZCBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBzaG91bGQgY2F0Y2ggaXQuIEl0IGRldGVjdHMgZXhhY3RseSB0aGVzZSB0eXBlcyBvZiBtZW1vcnkgdmlvbGF0aW9ucy4gSSBkb24mIzM5O3QgdGhpbmsgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYSBwcmltYXJ5IGlzc3VlIGhlcmU7IGl0JiMzOTtzIHRoZSBvdXQtb2YtYm91bmRzIHJlYWQgaXRzZWxmLgoKV2FpdCwgd2hhdCBpZiBgbGlua19pZGAgaXMgbmVnYXRpdmU/IFNpbmNlIGBwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWRgIGlzIGFuIGBpbnRgLCBpZiBpdCYjMzk7cyAtMSAoaW52YWxpZCksIGFuZCBpZiBgd2Rldi0mZ3Q7dmFsaWRfbGlua3NgIGlzIG5vdCB6ZXJvLCB0aGVuIGBsaW5rX2lkYCBiZWNvbWVzIC0xLiBUaGUgc3Vic2VxdWVudCBhY2Nlc3MgYHdkZXYtJmd0O2xpbmtzWy0xXWAgaXMgYW5vdGhlciBvdXQtb2YtYm91bmRzIHJlYWQsIHRoaXMgdGltZSBhbiB1bmRlcmZsb3cuIEtBU0FOIGNhdGNoZXMgaXQuCgpUaGUgcGF0Y2ggZml4ZXMgdGhpcyBieSBtb3ZpbmcgdGhlIHZhbGlkYXRpb24gb2YgYGxpbmtfaWRgICpiZWZvcmUqIHRoZSBzd2l0Y2ggc3RhdGVtZW50LiBTbyBub3cgYGxpbmtfaWRgIGlzIHZhbGlkYXRlZCB0byBiZSBgJmd0Oz0gMGAgYW5kIGBCSVQobGlua19pZClgIGlzIGluIGB2YWxpZF9saW5rc2AuIFNpbmNlIGB2YWxpZF9saW5rc2AgaXMgYSBgdTE2YCwgYEJJVChsaW5rX2lkKWAgY2FuIG9ubHkgYmUgbm9uLXplcm8gaWYgYGxpbmtfaWRgIGlzIGxlc3MgdGhhbiAxNi4gU28gYGxpbmtfaWRgIGlzIG5vdyBib3VuZCBmcm9tIDAgdG8gMTUuIFRoaXMgcGVyZmVjdGx5IGFkZHJlc3NlcyB0aGUgb3V0LW9mLWJvdW5kcyByZWFkLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkgbmVlZCB0byBjaGVjayBpZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnZvbHZlZC4gSXMgdGhlIGBwYXJhbXNgIHZhcmlhYmxlIGluaXRpYWxpemVkPyBgcGFyYW1zYCBpcyBhIGxvY2FsIHZhcmlhYmxlOiBgc3RydWN0IHN0YXRpb25fcGFyYW1ldGVycyBwYXJhbXM7YC4gQW5kIEkgbmVlZCB0byBrbm93IHdoZXRoZXIgdGhlIHZhcmlhYmxlIGlzIGluaXRpYWxpemVkLiBJIHRoaW5rIEkgaGF2ZSBhY2NvdW50ZWQgZm9yIGFsbCBzY2VuYXJpb3Mgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9ubDgwMjExLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MTc0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzkxNzQ6XHRzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbjkxNzU6XHR7XG45MTc2Olx0XHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzBdO1xuOTE3NzpcdFx0aW50IGVyciwgbGlua19pZDtcbjkxNzg6XHRcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzFdO1xuOTE3OTpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHdkZXYtXHUwMDNlbmV0ZGV2O1xuOTE4MDpcdFx0c3RydWN0IHN0YXRpb25fcGFyYW1ldGVycyBwYXJhbXM7XG45MTgxOlx0XHR1OCAqbWFjX2FkZHIgPSBOVUxMO1xuOTE4MjpcdFx0dTMyIGF1dGhfYXNzb2MgPSBCSVQoTkw4MDIxMV9TVEFfRkxBR19BVVRIRU5USUNBVEVEKSB8XG45MTgzOlx0XHRcdFx0IEJJVChOTDgwMjExX1NUQV9GTEFHX0FTU09DSUFURUQpO1xuOTE4NDpcdFxuOTE4NTpcdFx0bWVtc2V0KFx1MDAyNnBhcmFtcywgMCwgc2l6ZW9mKHBhcmFtcykpO1xuOTE4NjpcdFxuOTE4NzpcdFx0aWYgKCFkZXYgXHUwMDI2XHUwMDI2IHdkZXYtXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX05BTilcbjkxODg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG45MTg5Olx0XG45MTkwOlx0XHRpZiAoIXJkZXYtXHUwMDNlb3BzLVx1MDAzZWFkZF9zdGF0aW9uKVxuOTE5MTpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG45MTkyOlx0XG45MTkzOlx0XHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pXG45MTk0Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuOTE5NTpcdFxuOTE5NjpcdFx0aWYgKHdkZXYtXHUwMDNlaWZ0eXBlID09IE5MODAyMTFfSUZUWVBFX05BTiB8fFxuOTE5NzpcdFx0ICAgIHdkZXYtXHUwMDNlaWZ0eXBlID09IE5MODAyMTFfSUZUWVBFX05BTl9EQVRBKSB7XG45MTk4Olx0XHRcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfU1VQUE9SVEVEX1JBVEVTXSlcbjkxOTk6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjkyMDA6XHRcdFx0aWYgKHdkZXYtXHUwMDNlaWZ0eXBlID09IE5MODAyMTFfSUZUWVBFX05BTl9EQVRBKSB7XG45MjAxOlx0XHRcdFx0aWYgKCFpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9OQU5fTk1JX01BQ10pXG45MjAyOlx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjkyMDM6XHRcbjkyMDQ6XHRcdFx0XHQvKiBPbmx5IE5NSSBzdGF0aW9ucyByZWNlaXZlIHRoZSBIVC9WSFQvSEUgY2FwYWJpbGl0aWVzICovXG45MjA1Olx0XHRcdFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0hUX0NBUEFCSUxJVFldIHx8XG45MjA2Olx0XHRcdFx0ICAgIGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1ZIVF9DQVBBQklMSVRZXSB8fFxuOTIwNzpcdFx0XHRcdCAgICBpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9IRV9DQVBBQklMSVRZXSlcbjkyMDg6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuOTIwOTpcdFx0XHR9XG45MjEwOlx0XHR9IGVsc2Uge1xuOTIxMTpcdFx0XHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9MSVNURU5fSU5URVJWQUxdKVxuOTIxMjpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuOTIxMzpcdFxuOTIxNDpcdFx0XHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9TVVBQT1JURURfUkFURVNdKVxuOTIxNTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuOTIxNjpcdFxuOTIxNzpcdFx0XHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9BSURdIFx1MDAyNlx1MDAyNlxuOTIxODpcdFx0XHQgICAgIWluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1BFRVJfQUlEXSlcbjkyMTk6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjkyMjA6XHRcdH1cbjkyMjE6XHRcbjkyMjI6XHRcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19pZCA9XG45MjIzOlx0XHRcdG5sODAyMTFfbGlua19pZF9vcl9pbnZhbGlkKGluZm8tXHUwMDNlYXR0cnMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY2NQoJCQkJCQkJb3V0cHV0OiAyMzEKCQkJCQkJCXRob3VnaHRzOiA1MTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBTZXNzaW9uIE5vdCBOZWVkZWQqKgoKT2theSwgc28gaGVyZSYjMzk7cyB0aGUgYnJlYWtkb3duIG9mIG15IHRoaW5raW5nLiBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IGFkZHJlc3NlcyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5LiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNvbnNpZGVyIEtNU0FOLCBidXQgbGV0JiMzOTtzIGJlIG1ldGhvZGljYWwuCgpGaXJzdCwgSSBzZWUgYHBhcmFtc2AgaXMgaW5pdGlhbGl6ZWQgd2l0aCBgbWVtc2V0YCwgc28gdGhlcmUmIzM5O3MgYWJzb2x1dGVseSBubyBpc3N1ZSB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmUuIFRoYXQgcnVsZXMgb3V0IG9uZSBwb3RlbnRpYWwgYXJlYSB3aGVyZSBLTVNBTiBzaGluZXMuCgpUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBib2lscyBkb3duIHRvIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBmcm9tIGB3ZGV2LSZndDtsaW5rc1tsaW5rX2lkXWAuIFRoaXMgaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIHRoaW5nIEtBU0FOIGlzIGJ1aWx0IHRvIGNhdGNoLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhY2Nlc3NpbmcgbWVtb3J5IG91dHNpZGUgdGhlIGFsbG9jYXRlZCBib3VuZGFyaWVzIG9mIGFuIGFycmF5LCB3aGljaCBpcyBhIGNsYXNzaWMgS0FTQU4gc2NlbmFyaW8uCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBLTVNBTiB2cy4gS0FTQU4gcnVsZXM6IEtBU0FOIG5haWxzIGRvd24gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgdXNlLWFmdGVyLWZyZWUsIHdoaWxlIEtNU0FOIGZvY3VzZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYW5kIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MuIFRoaXMgdnVsbmVyYWJpbGl0eSBkb2VzbiYjMzk7dCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGEgd2F5IEtBU0FOIG1pc3Nlcywgbm9yIGlzIHRoZXJlIGEga2VybmVsIGluZm9ybWF0aW9uIGxlYWsuIEl0JiMzOTtzIGEgc3RyYWlnaHQtdXAgaW5kZXggb3V0IG9mIGJvdW5kcy4KCkluIG15IHZpZXcsIEtBU0FOIHdpbGwgZGV0ZWN0IHRoaXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3MganVzdCBmaW5lLiBUaGUgcGF0Y2gmIzM5O3MgaW1wYWN0IGlzIHRoYXQgaXQgZml4ZXMgYSBzaXR1YXRpb24gd2hlcmUgYGxpbmtfaWRgIGlzIG5vdCB2YWxpZGF0ZWQgYW5kIGNhbiBiZSB1c2VkIHRvIHJlYWQgYmV5b25kIHRoZSBib3VuZGFyaWVzIG9mIHRoZSBgd2Rldi0mZ3Q7bGlua3NgIGFycmF5LiBObyBgSUVFRTgwMjExX01MRF9NQVhfTlVNX0xJTktTYCBjaGVjayBvciBuZWdhdGl2ZSB2YWx1ZSBjaGVjayBvbiBsaW5rX2lkLiBUaGlzIGlzIGEgY2xhc3NpYyBleGFtcGxlIG9mIGFuIG91dC1vZi1ib3VuZHMgcmVhZC4gVGhlIGZhY3QgdGhhdCBgcGFyYW1zYCBpcyBmdWxseSBpbml0aWFsaXplZCBtYWtlcyB0aGlzIGV2ZW4gbW9yZSBjbGVhci4KCk15IGNvbmNsdXNpb24/IFRoZXJlJiMzOTtzIG5vIHZhbHVlIGluIGRlZGljYXRpbmcgdGltZSB0byBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBoZXJlLiBLQVNBTiBpcyB0aGUgcmlnaHQgdG9vbCBmb3IgdGhlIGpvYi4gTm8gTmVlZCBmb3IgS01TQU4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB2dWxuZXJhYmlsaXR5IGluIGBubDgwMjExX25ld19zdGF0aW9uKClgLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgYGxpbmtfaWRgIGV4dHJhY3RlZCBmcm9tIG5ldGxpbmsgYXR0cmlidXRlcyB3YXMgbm90IHZhbGlkYXRlZCBhZ2FpbnN0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBsaW5rcyBvciBjaGVja2VkIGZvciBuZWdhdGl2ZSB2YWx1ZXMgYmVmb3JlIGJlaW5nIHVzZWQgYXMgYW4gaW5kZXggdG8gYWNjZXNzIHRoZSBgd2Rldi1cdTAwM2VsaW5rc1tsaW5rX2lkXWAgYXJyYXkuIFRoaXMgYWxsb3dlZCBhbiBhdHRhY2tlciB0byB0cmlnZ2VyIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB3aGVuIGNoZWNraW5nIGB3ZGV2LVx1MDAzZWxpbmtzW2xpbmtfaWRdLmFwLmJlYWNvbl9pbnRlcnZhbGAuXG5cbk91dC1vZi1ib3VuZHMgYWNjZXNzZXMgKGJvdGggcmVhZHMgYW5kIHdyaXRlcykgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgYHBhcmFtc2Agc3RydWN0dXJlIGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgdmlhIGBtZW1zZXQoXHUwMDI2cGFyYW1zLCAwLCBzaXplb2YocGFyYW1zKSk7YCwgYW5kIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZXMgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBpbnZvbHZlZCBpbiB0aGlzIGJ1Zy4gU2luY2UgS0FTQU4gaXMgZnVsbHkgY2FwYWJsZSBvZiBjYXRjaGluZyB0aGlzIG91dC1vZi1ib3VuZHMgcmVhZCwgdGhlcmUgaXMgbm8gbmVlZCB0byBydW4gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHZ1bG5lcmFiaWxpdHkgaW4gYG5sODAyMTFfbmV3X3N0YXRpb24oKWAuIEJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBgbGlua19pZGAgZXh0cmFjdGVkIGZyb20gbmV0bGluayBhdHRyaWJ1dGVzIHdhcyBub3QgdmFsaWRhdGVkIGFnYWluc3QgdGhlIG1heGltdW0gbnVtYmVyIG9mIGxpbmtzIG9yIGNoZWNrZWQgZm9yIG5lZ2F0aXZlIHZhbHVlcyBiZWZvcmUgYmVpbmcgdXNlZCBhcyBhbiBpbmRleCB0byBhY2Nlc3MgdGhlIGB3ZGV2LVx1MDAzZWxpbmtzW2xpbmtfaWRdYCBhcnJheS4gVGhpcyBhbGxvd2VkIGFuIGF0dGFja2VyIHRvIHRyaWdnZXIgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHdoZW4gY2hlY2tpbmcgYHdkZXYtXHUwMDNlbGlua3NbbGlua19pZF0uYXAuYmVhY29uX2ludGVydmFsYC5cblxuT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyAoYm90aCByZWFkcyBhbmQgd3JpdGVzKSBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBgcGFyYW1zYCBzdHJ1Y3R1cmUgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZCB2aWEgYG1lbXNldChcdTAwMjZwYXJhbXMsIDAsIHNpemVvZihwYXJhbXMpKTtgLCBhbmQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIGludm9sdmVkIGluIHRoaXMgYnVnLiBTaW5jZSBLQVNBTiBpcyBmdWxseSBjYXBhYmxlIG9mIGNhdGNoaW5nIHRoaXMgb3V0LW9mLWJvdW5kcyByZWFkLCB0aGVyZSBpcyBubyBuZWVkIHRvIHJ1biBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjQ2OjUyLjAyMzg4MTU4NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5ODcyNTY5MDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJubDgwMjExX25ld19zdGF0aW9uXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eSBpbiBgbmw4MDIxMV9uZXdfc3RhdGlvbigpYC4gQmVmb3JlIHRoZSBwYXRjaCwgdGhlIGBsaW5rX2lkYCBleHRyYWN0ZWQgZnJvbSBuZXRsaW5rIGF0dHJpYnV0ZXMgd2FzIG5vdCB2YWxpZGF0ZWQgYWdhaW5zdCB0aGUgbWF4aW11bSBudW1iZXIgb2YgbGlua3Mgb3IgY2hlY2tlZCBmb3IgbmVnYXRpdmUgdmFsdWVzIGJlZm9yZSBiZWluZyB1c2VkIGFzIGFuIGluZGV4IHRvIGFjY2VzcyB0aGUgYHdkZXYtXFx1MDAzZWxpbmtzW2xpbmtfaWRdYCBhcnJheS4gVGhpcyBhbGxvd2VkIGFuIGF0dGFja2VyIHRvIHRyaWdnZXIgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHdoZW4gY2hlY2tpbmcgYHdkZXYtXFx1MDAzZWxpbmtzW2xpbmtfaWRdLmFwLmJlYWNvbl9pbnRlcnZhbGAuXFxuXFxuT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyAoYm90aCByZWFkcyBhbmQgd3JpdGVzKSBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBgcGFyYW1zYCBzdHJ1Y3R1cmUgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZCB2aWEgYG1lbXNldChcXHUwMDI2cGFyYW1zLCAwLCBzaXplb2YocGFyYW1zKSk7YCwgYW5kIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZXMgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBpbnZvbHZlZCBpbiB0aGlzIGJ1Zy4gU2luY2UgS0FTQU4gaXMgZnVsbHkgY2FwYWJsZSBvZiBjYXRjaGluZyB0aGlzIG91dC1vZi1ib3VuZHMgcmVhZCwgdGhlcmUgaXMgbm8gbmVlZCB0byBydW4gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRsaW5rIGNhbGxiYWNrIGBubDgwMjExX25ld19zdGF0aW9uYCBpbiBjZmc4MDIxMSwgY2hhbmdpbmcgdGhlIHZhbGlkYXRpb24gbG9naWMgZm9yIGBsaW5rX2lkYCBhbmQgYWRkaW5nIGEgY2hlY2sgZm9yIGBiZWFjb25faW50ZXJ2YWxgIHdoZW4gYWRkaW5nIGEgbmV3IHN0YXRpb24gdG8gYW4gQVAgb3IgUDJQX0dPIGludGVyZmFjZS4gVGhpcyBpcyByZWFjaGFibGUgY29yZSB3aXJlbGVzcyBsb2dpYyB0aGF0IGNhbiBiZSB0ZXN0ZWQgdXNpbmcgdGhlIG1hYzgwMjExX2h3c2ltIGRyaXZlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6NDY6NTIuMDIzODg2Nzk0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mjk4ODQ1NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwMTA5ZjBlZmFlN2FmZTFiOTc0NjZmNjQzNjQzYWIxNjBhMzcxYzcyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDEzIDA5OjQ2OjUxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXFxuaW5kZXggNWFkY2I2YmQwZmM1Ni4uNzViYmQ3OGY5MWJhMyAxMDA2NDRcXG4tLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXFxuKysrIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xcbkBAIC05MTc0LDcgKzkxNzQsNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfc2V0X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gc3RhdGljIGludCBubDgwMjExX25ld19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIHtcXG4gXFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby1cXHUwMDNldXNlcl9wdHJbMF07XFxuLVxcdGludCBlcnI7XFxuK1xcdGludCBlcnIsIGxpbmtfaWQ7XFxuIFxcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBpbmZvLVxcdTAwM2V1c2VyX3B0clsxXTtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHdkZXYtXFx1MDAzZW5ldGRldjtcXG4gXFx0c3RydWN0IHN0YXRpb25fcGFyYW1ldGVycyBwYXJhbXM7XFxuQEAgLTkyMjIsNiArOTIyMiwxNiBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkID1cXG4gXFx0XFx0bmw4MDIxMV9saW5rX2lkX29yX2ludmFsaWQoaW5mby1cXHUwMDNlYXR0cnMpO1xcbiBcXG4rXFx0aWYgKHdkZXYtXFx1MDAzZXZhbGlkX2xpbmtzKSB7XFxuK1xcdFxcdGlmIChwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0aWYgKCEod2Rldi1cXHUwMDNldmFsaWRfbGlua3MgXFx1MDAyNiBCSVQocGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkKSkpXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PTElOSztcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0aWYgKHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19pZCBcXHUwMDNlPSAwKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9NTERfQUREUl0pIHtcXG4gXFx0XFx0bWFjX2FkZHIgPSBubGFfZGF0YShpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUxEX0FERFJdKTtcXG4gXFx0XFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5tbGRfbWFjID0gbWFjX2FkZHI7XFxuQEAgLTk0MDIsOCArOTQxMiwxMiBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFxuIFxcdHN3aXRjaCAod2Rldi1cXHUwMDNlaWZ0eXBlKSB7XFxuIFxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6XFxuLVxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfQVBfVkxBTjpcXG4gXFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9QMlBfR086XFxuK1xcdFxcdC8qIEFkZCBhIG5ldyBzdGF0aW9uIG9ubHkgYWZ0ZXIgdGhlIEFQIGFuZCBsaW5rIGhhcyBiZWVuIHN0YXJ0ZWQgKi9cXG4rXFx0XFx0bGlua19pZCA9IHdkZXYtXFx1MDAzZXZhbGlkX2xpbmtzID8gcGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkIDogMDtcXG4rXFx0XFx0aWYgKCF3ZGV2LVxcdTAwM2VsaW5rc1tsaW5rX2lkXS5hcC5iZWFjb25faW50ZXJ2YWwpXFxuK1xcdFxcdFxcdHJldHVybiAtRU5FVERPV047XFxuK1xcbiBcXHRcXHQvKiBpZ25vcmUgV01FIGF0dHJpYnV0ZXMgaWYgaWZhY2Uvc3RhIGlzIG5vdCBjYXBhYmxlICovXFxuIFxcdFxcdGlmICghKHJkZXYtXFx1MDAzZXdpcGh5LmZsYWdzIFxcdTAwMjYgV0lQSFlfRkxBR19BUF9VQVBTRCkgfHxcXG4gXFx0XFx0ICAgICEocGFyYW1zLnN0YV9mbGFnc19zZXQgXFx1MDAyNiBCSVQoTkw4MDIxMV9TVEFfRkxBR19XTUUpKSlcXG5AQCAtOTQ5NSwyNyArOTUwOSwxMCBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFxuIFxcdC8qIGJlIGF3YXJlIG9mIHBhcmFtcy52bGFuIHdoZW4gY2hhbmdpbmcgY29kZSBoZXJlICovXFxuIFxcbi1cXHRpZiAod2Rldi1cXHUwMDNldmFsaWRfbGlua3MpIHtcXG4tXFx0XFx0aWYgKHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19pZCBcXHUwMDNjIDApIHtcXG4tXFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4tXFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcdFxcdH1cXG4tXFx0XFx0aWYgKCEod2Rldi1cXHUwMDNldmFsaWRfbGlua3MgXFx1MDAyNiBCSVQocGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkKSkpIHtcXG4tXFx0XFx0XFx0ZXJyID0gLUVOT0xJTks7XFxuLVxcdFxcdFxcdGdvdG8gb3V0O1xcbi1cXHRcXHR9XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdGlmIChwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWQgXFx1MDAzZT0gMCkge1xcbi1cXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbi1cXHRcXHRcXHRnb3RvIG91dDtcXG4tXFx0XFx0fVxcbi1cXHR9XFxuLVxcbiBcXHRwYXJhbXMuZXBwX3BlZXIgPVxcbiBcXHRcXHRubGFfZ2V0X2ZsYWcoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0VQUF9QRUVSXSk7XFxuIFxcbiBcXHRlcnIgPSByZGV2X2FkZF9zdGF0aW9uKHJkZXYsIHdkZXYsIG1hY19hZGRyLCBcXHUwMDI2cGFyYW1zKTtcXG4tb3V0OlxcbiBcXHRkZXZfcHV0KHBhcmFtcy52bGFuKTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTo0Njo1Mi40NTQ1MDQ1MTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozNzkwODk1ODE5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIk1BQzgwMjExX0hXU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmw4MDIxMV9uZXdfc3RhdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRsaW5rIGNhbGxiYWNrIGBubDgwMjExX25ld19zdGF0aW9uYCBpbiBjZmc4MDIxMSwgY2hhbmdpbmcgdGhlIHZhbGlkYXRpb24gbG9naWMgZm9yIGBsaW5rX2lkYCBhbmQgYWRkaW5nIGEgY2hlY2sgZm9yIGBiZWFjb25faW50ZXJ2YWxgIHdoZW4gYWRkaW5nIGEgbmV3IHN0YXRpb24gdG8gYW4gQVAgb3IgUDJQX0dPIGludGVyZmFjZS4gVGhpcyBpcyByZWFjaGFibGUgY29yZSB3aXJlbGVzcyBsb2dpYyB0aGF0IGNhbiBiZSB0ZXN0ZWQgdXNpbmcgdGhlIG1hYzgwMjExX2h3c2ltIGRyaXZlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDEwOWYwZWZhZTdhZmUxYjk3NDY2ZjY0MzY0M2FiMTYwYTM3MWM3MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDA5OjQ2OjUxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmNcbmluZGV4IDVhZGNiNmJkMGZjNTYuLjc1YmJkNzhmOTFiYTMgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG4rKysgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG5AQCAtOTE3NCw3ICs5MTc0LDcgQEAgc3RhdGljIGludCBubDgwMjExX3NldF9zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gc3RhdGljIGludCBubDgwMjExX25ld19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4ge1xuIFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clswXTtcbi1cdGludCBlcnI7XG4rXHRpbnQgZXJyLCBsaW5rX2lkO1xuIFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGluZm8tXHUwMDNldXNlcl9wdHJbMV07XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gd2Rldi1cdTAwM2VuZXRkZXY7XG4gXHRzdHJ1Y3Qgc3RhdGlvbl9wYXJhbWV0ZXJzIHBhcmFtcztcbkBAIC05MjIyLDYgKzkyMjIsMTYgQEAgc3RhdGljIGludCBubDgwMjExX25ld19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWQgPVxuIFx0XHRubDgwMjExX2xpbmtfaWRfb3JfaW52YWxpZChpbmZvLVx1MDAzZWF0dHJzKTtcbiBcbitcdGlmICh3ZGV2LVx1MDAzZXZhbGlkX2xpbmtzKSB7XG4rXHRcdGlmIChwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdGlmICghKHdkZXYtXHUwMDNldmFsaWRfbGlua3MgXHUwMDI2IEJJVChwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWQpKSlcbitcdFx0XHRyZXR1cm4gLUVOT0xJTks7XG4rXHR9IGVsc2Uge1xuK1x0XHRpZiAocGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkIFx1MDAzZT0gMClcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbiBcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9NTERfQUREUl0pIHtcbiBcdFx0bWFjX2FkZHIgPSBubGFfZGF0YShpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9NTERfQUREUl0pO1xuIFx0XHRwYXJhbXMubGlua19zdGFfcGFyYW1zLm1sZF9tYWMgPSBtYWNfYWRkcjtcbkBAIC05NDAyLDggKzk0MTIsMTIgQEAgc3RhdGljIGludCBubDgwMjExX25ld19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXG4gXHRzd2l0Y2ggKHdkZXYtXHUwMDNlaWZ0eXBlKSB7XG4gXHRjYXNlIE5MODAyMTFfSUZUWVBFX0FQOlxuLVx0Y2FzZSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOOlxuIFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9QMlBfR086XG4rXHRcdC8qIEFkZCBhIG5ldyBzdGF0aW9uIG9ubHkgYWZ0ZXIgdGhlIEFQIGFuZCBsaW5rIGhhcyBiZWVuIHN0YXJ0ZWQgKi9cbitcdFx0bGlua19pZCA9IHdkZXYtXHUwMDNldmFsaWRfbGlua3MgPyBwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWQgOiAwO1xuK1x0XHRpZiAoIXdkZXYtXHUwMDNlbGlua3NbbGlua19pZF0uYXAuYmVhY29uX2ludGVydmFsKVxuK1x0XHRcdHJldHVybiAtRU5FVERPV047XG4rXG4gXHRcdC8qIGlnbm9yZSBXTUUgYXR0cmlidXRlcyBpZiBpZmFjZS9zdGEgaXMgbm90IGNhcGFibGUgKi9cbiBcdFx0aWYgKCEocmRldi1cdTAwM2V3aXBoeS5mbGFncyBcdTAwMjYgV0lQSFlfRkxBR19BUF9VQVBTRCkgfHxcbiBcdFx0ICAgICEocGFyYW1zLnN0YV9mbGFnc19zZXQgXHUwMDI2IEJJVChOTDgwMjExX1NUQV9GTEFHX1dNRSkpKVxuQEAgLTk0OTUsMjcgKzk1MDksMTAgQEAgc3RhdGljIGludCBubDgwMjExX25ld19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXG4gXHQvKiBiZSBhd2FyZSBvZiBwYXJhbXMudmxhbiB3aGVuIGNoYW5naW5nIGNvZGUgaGVyZSAqL1xuIFxuLVx0aWYgKHdkZXYtXHUwMDNldmFsaWRfbGlua3MpIHtcbi1cdFx0aWYgKHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19pZCBcdTAwM2MgMCkge1xuLVx0XHRcdGVyciA9IC1FSU5WQUw7XG4tXHRcdFx0Z290byBvdXQ7XG4tXHRcdH1cbi1cdFx0aWYgKCEod2Rldi1cdTAwM2V2YWxpZF9saW5rcyBcdTAwMjYgQklUKHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19pZCkpKSB7XG4tXHRcdFx0ZXJyID0gLUVOT0xJTks7XG4tXHRcdFx0Z290byBvdXQ7XG4tXHRcdH1cbi1cdH0gZWxzZSB7XG4tXHRcdGlmIChwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWQgXHUwMDNlPSAwKSB7XG4tXHRcdFx0ZXJyID0gLUVJTlZBTDtcbi1cdFx0XHRnb3RvIG91dDtcbi1cdFx0fVxuLVx0fVxuLVxuIFx0cGFyYW1zLmVwcF9wZWVyID1cbiBcdFx0bmxhX2dldF9mbGFnKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0VQUF9QRUVSXSk7XG4gXG4gXHRlcnIgPSByZGV2X2FkZF9zdGF0aW9uKHJkZXYsIHdkZXYsIG1hY19hZGRyLCBcdTAwMjZwYXJhbXMpO1xuLW91dDpcbiBcdGRldl9wdXQocGFyYW1zLnZsYW4pO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTo0Njo1Mi40NTQ1MDU2NzFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzQ2NzU3ODQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIGBuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jYCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCdzIHR3ZWFraW5nIHRoZSBgbmw4MDIxMV9uZXdfc3RhdGlvbmAgZnVuY3Rpb24gaW4gYG5ldC93aXJlbGVzcy9ubDgwMjExLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGFib3V0IG1vdmluZyBzb21lIHZhbGlkYXRpb24gbG9naWMgZWFybGllciBpbiB0aGUgZnVuY3Rpb24sIHNwZWNpZmljYWxseSByZWdhcmRpbmcgYHdkZXYtXHUwMDNldmFsaWRfbGlua3NgIGFuZCBgcGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkYC4gTWFrZXMgc2Vuc2UsIG9wdGltaXppbmcgdGhlIGZsb3csIHBvdGVudGlhbGx5IGNhdGNoaW5nIGVycm9ycyBzb29uZXIuXG5cbk5vdywgdGhlIGludGVyZXN0aW5nIGJpdC4gSXQgYWRkcyBhIGNoZWNrIGZvciBgd2Rldi1cdTAwM2VsaW5rc1tsaW5rX2lkXS5hcC5iZWFjb25faW50ZXJ2YWxgIHdpdGhpbiB0aGUgYE5MODAyMTFfSUZUWVBFX0FQYCBhbmQgYE5MODAyMTFfSUZUWVBFX1AyUF9HT2AgY2FzZXMuIEFoLCBidXQgdGhlcmUncyBhIHJlbW92YWwgaW4gaGVyZSB0b28uLi4gaXQgYXBwZWFycyB0aGV5J3ZlIHJlbW92ZWQgYE5MODAyMTFfSUZUWVBFX0FQX1ZMQU5gIGZyb20gdGhlIHN3aXRjaCBzdGF0ZW1lbnQuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZGlmZiB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIFllcCwgaXQgcmVtb3ZlcyBgTkw4MDIxMV9JRlRZUEVfQVBfVkxBTmAgZnJvbSB0aGUgc3dpdGNoIGNhc2UuXG5cblRoaXMgaXMgYSBnb29kIHNwb3QgdG8gZXZhbHVhdGUgdGhpcywgYmVjYXVzZSBpdCdzIGEgbmV0bGluayBBUEkgZW50cnlwb2ludCwgd2hpY2ggbWVhbnMgaXQncyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IGNhbiBiZSB0ZXN0ZWQgYW5kIGV4ZXJjaXNlZCB1c2luZyBzb21ldGhpbmcgbGlrZSBtYWM4MDIxMV9od3NpbSwgbm8gcXVlc3Rpb24uIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGUgY29uZmlnIG9wdGlvbnMgZm9yIGBubDgwMjExLmNgLCBiZWNhdXNlIGl0J3MgcGFydCBvZiBgY2ZnODAyMTFgLiBTbyB0aGF0IG1lYW5zIGBDT05GSUdfQ0ZHODAyMTFgLCBgQ09ORklHX01BQzgwMjExYCwgYW5kIGBDT05GSUdfTUFDODAyMTFfSFdTSU1gIGFyZSB0aGUgb25lcyB0byB2ZXJpZnkuIExldCBtZSBwZWVrIGluIGBuZXQvd2lyZWxlc3MvS2NvbmZpZ2AgYW5kIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgY29uZmlndXJhdGlvbnMgcmVsZXZhbnQgdG8gdGhpcyBtb2RpZmljYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4ODksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTo0NzowMC4yMDEyNjczN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTgzOTIyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ0ZHODAyMTFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL0tjb25maWc9MTQ9Y29uZmlnIFdFWFRfUFJJVlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTYtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTc6Y29uZmlnIENGRzgwMjExXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTgtXFx0dHJpc3RhdGUgXFxcImNmZzgwMjExIC0gd2lyZWxlc3MgY29uZmlndXJhdGlvbiBBUElcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZz0zOD1jb25maWcgTkw4MDIxMV9URVNUTU9ERVxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctNTEtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6NTI6Y29uZmlnIENGRzgwMjExX0RFVkVMT1BFUl9XQVJOSU5HU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTUzLVxcdGJvb2wgXFxcImVuYWJsZSBkZXZlbG9wZXIgd2FybmluZ3NcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy02Ny1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo2ODpjb25maWcgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXFxubmV0L3dpcmVsZXNzL0tjb25maWctNjktXFx0Ym9vbCBcXFwiY2ZnODAyMTEgY2VydGlmaWNhdGlvbiBvbnVzXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctODgtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6ODk6Y29uZmlnIENGRzgwMjExX1JFUVVJUkVfU0lHTkVEX1JFR0RCXFxubmV0L3dpcmVsZXNzL0tjb25maWctOTAtXFx0Ym9vbCBcXFwicmVxdWlyZSByZWdkYiBzaWduYXR1cmVcXFwiIGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctOTgtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6OTk6Y29uZmlnIENGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEwMC1cXHRib29sIFxcXCJhbGxvdyByZWdkYiBrZXlzIHNoaXBwZWQgd2l0aCB0aGUga2VybmVsXFxcIiBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTExMC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMTE6Y29uZmlnIENGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUlxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTExMi1cXHRzdHJpbmcgXFxcImFkZGl0aW9uYWwgcmVnZGIga2V5IGRpcmVjdG9yeVxcXCIgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMjEtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTIyOmNvbmZpZyBDRkc4MDIxMV9SRUdfQ0VMTFVMQVJfSElOVFNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMjMtXFx0Ym9vbCBcXFwiY2ZnODAyMTEgcmVndWxhdG9yeSBzdXBwb3J0IGZvciBjZWxsdWxhciBiYXNlIHN0YXRpb24gaGludHNcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzQtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTM1OmNvbmZpZyBDRkc4MDIxMV9SRUdfUkVMQVhfTk9fSVJcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzYtXFx0Ym9vbCBcXFwiY2ZnODAyMTEgc3VwcG9ydCBmb3IgTk9fSVIgcmVsYXhhdGlvblxcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE1OC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNTk6Y29uZmlnIENGRzgwMjExX0RFRkFVTFRfUFNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNjAtXFx0Ym9vbCBcXFwiZW5hYmxlIHBvd2Vyc2F2ZSBieSBkZWZhdWx0XFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTY4LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE2OTpjb25maWcgQ0ZHODAyMTFfREVCVUdGU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3MC1cXHRib29sIFxcXCJjZmc4MDIxMSBEZWJ1Z0ZTIGVudHJpZXNcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzYtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTc3OmNvbmZpZyBDRkc4MDIxMV9DUkRBX1NVUFBPUlRcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzgtXFx0Ym9vbCBcXFwic3VwcG9ydCBDUkRBXFxcIiBpZiBFWFBFUlRcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4Ni1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxODc6Y29uZmlnIENGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODgtXFx0Ym9vbCBcXFwiY2ZnODAyMTEgd2lyZWxlc3MgZXh0ZW5zaW9ucyBjb21wYXRpYmlsaXR5XFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTkzLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE5NDpjb25maWcgQ0ZHODAyMTFfS1VOSVRfVEVTVFxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE5NS1cXHR0cmlzdGF0ZSBcXFwiS1VuaXQgdGVzdHMgZm9yIGNmZzgwMjExXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjQ3OjAwLjI1MTExMTY2OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNjQzMzk4NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgbmw4MDIxMV9uZXdfc3RhdGlvbmAgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYG5sODAyMTFfbmV3X3N0YXRpb25gIHdpdGhpbiBgbmV0L3dpcmVsZXNzL25sODAyMTEuY2AuICBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBuZXRsaW5rIGludGVyZmFjZSwgdGhhdCdzIGFic29sdXRlbHkgcmVhY2hhYmxlIHZpYSBjZmc4MDIxMSBjb21tYW5kcywgd2hpY2ggbWVhbnMgaXQncyBwcmV0dHkgaW1wb3J0YW50LiBJJ3ZlIGdvdCB0byBsb29rIGNsb3NlbHkgYXQgd2hhdCdzIGNoYW5nZWQgaGVyZS5cblxuVGhlIGZpcnN0IHRoaW5nIEkgc2VlIGlzIHRoYXQgdGhleSd2ZSByZW9yZGVyZWQgdGhpbmdzLCBtb3ZpbmcgdGhlIGB3ZGV2LVx1MDAzZXZhbGlkX2xpbmtzYCBjaGVjayBlYXJsaWVyIGluIHRoZSBwcm9jZXNzLiBPa2F5LCB0aGF0J3MgaW50ZXJlc3RpbmcuIFBlcmhhcHMgdGhleSdyZSB0cnlpbmcgdG8gb3B0aW1pemUgdGhlIGZsb3cgb3IgaGFuZGxlIGFuIGVkZ2UgY2FzZSB1cGZyb250LiBUaGUgcmVhbCBraWNrZXIgaXMgdGhlIG5ldyBjaGVjayBmb3IgYHdkZXYtXHUwMDNlbGlua3NbbGlua19pZF0uYXAuYmVhY29uX2ludGVydmFsYCwgYnV0IG9ubHkgZm9yIEFQIGFuZCBQMlBfR08uIFRoYXQgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgdGhleSdyZSBsaWtlbHkgdGFyZ2V0aW5nIHNwZWNpZmljIFNUQSBjb25uZWN0aW9uIHNjZW5hcmlvcyBhbmQgcG90ZW50aWFsbHkgYWRkcmVzc2luZyBhbiBpc3N1ZSByZWxhdGVkIHRvIGJlYWNvbiBoYW5kbGluZywgcGVyaGFwcyBkdXJpbmcgYXNzb2NpYXRpb24gb3IgcmUtYXNzb2NpYXRpb24uXG5cbkZpbmFsbHksIHRoZSByZW1vdmFsIG9mIGBOTDgwMjExX0lGVFlQRV9BUF9WTEFOYCBmcm9tIHRoZSBzd2l0Y2ggY2FzZS4uLiBIbW1tLCBub3cgdGhhdCdzIGN1cmlvdXMuICBJIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgdGhleeKAmXJlIHRha2luZyB0aGF0IG91dCBvZiB0aGUgcGljdHVyZS4gIElzIGl0IGRlcHJlY2F0ZWQ/IElzIHRoZSBWTEFOIGludGVyZmFjZSB0eXBlIGJlaW5nIGhhbmRsZWQgZWxzZXdoZXJlIG5vdz8gVGhpcyBuZWVkcyBmdXJ0aGVyIGludmVzdGlnYXRpb24gYXMgcmVtb3ZpbmcgYW4gaW50ZXJmYWNlIHR5cGUgY2FuIGhhdmUgc2VyaW91cyByYW1pZmljYXRpb25zLiBJJ20gZ29pbmcgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHNlZSBpZiBJIGNhbiBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IG9mIHRoYXQgcmVtb3ZhbCwgYW5kIHdoYXQgaXQgbWlnaHQgYWZmZWN0LiBJJ2xsIHN0YXJ0IGJ5IHRha2luZyBhIGdvb2QgbG9vayBhdCBgbmw4MDIxMV9uZXdfc3RhdGlvbmAgYW5kIHNlZSB3aGF0IHRoZSBmbG93IGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzY1LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjQ3OjA1LjQxNTQ1NDQ4NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzU0ODM1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJubDgwMjExX25ld19zdGF0aW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzcy9ubDgwMjExLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL25sODAyMTEuYz05MDAyPXN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfc3RhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy05MTczLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6OTE3NDpzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTkxNzUte1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xOTU0ND1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIG5sODAyMTFfc21hbGxfb3BzW10gPSB7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE5NjU3LVxcdFxcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE5NjU4OlxcdFxcdC5kb2l0ID0gbmw4MDIxMV9uZXdfc3RhdGlvbixcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE5NjU5LVxcdFxcdC5mbGFncyA9IEdFTkxfVU5TX0FETUlOX1BFUk0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjQ3OjA1LjQ2MzAwNzM3M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMTYwNjc5MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBgbmw4MDIxMV9uZXdfc3RhdGlvbmAqKlxuXG5Pa2F5LCBzbyBgbmw4MDIxMV9uZXdfc3RhdGlvbmAsIHRoYXQncyBhIG5ldGxpbmsgY2FsbGJhY2ssIHJpZ2h0PyBZZWFoLCBkZWZpbml0ZWx5IHdvcnRoIGEgY2xvc2VyIGxvb2sgZm9yIGZ1enppbmcgb3Bwb3J0dW5pdGllcy4gVGhpbmtpbmcgdGhyb3VnaCB0aGUgc2V0dXAsIEknbGwgbmVlZCBgQ0ZHODAyMTFgLCBgTUFDODAyMTFgLCBhbmQgaWRlYWxseSBgTUFDODAyMTFfSFdTSU1gIHRvIGhhdmUgYW4gYWN0dWFsIGRldmljZSB0byB0ZXN0IGFnYWluc3QuIFNlZW1zIHNlbnNpYmxlLiBUaGUgY29yZSB0YXJnZXQgc3ltYm9sIGhlcmUgaXMsIG9mIGNvdXJzZSwgYG5sODAyMTFfbmV3X3N0YXRpb25gLlxuXG5Ob3csIGJlZm9yZSBJIGRpdmUgaW4sIGxldCBtZSBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgbHVya2luZyBhYm91dC4gSSBzZWVtIHRvIHJlY2FsbCBgQ0ZHODAyMTFgIG1pZ2h0IGJlIHRpZWQgdG8gYFJGS0lMTGAuIEJldHRlciBzYWZlIHRoYW4gc29ycnkg4oCTIGxldCdzIHZlcmlmeSB0aGF0IHF1aWNrbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MjYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6NDc6MDkuNjc5MDg3NzA4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MTYwMjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL0tjb25maWc9NT1jb25maWcgV0VYVF9DT1JFXFxubmV0L3dpcmVsZXNzL0tjb25maWctNi1cXHRkZWZfYm9vbCB5XFxubmV0L3dpcmVsZXNzL0tjb25maWc6NzpcXHRkZXBlbmRzIG9uIENGRzgwMjExX1dFWFQgfHwgV0lSRUxFU1NfRVhUXFxubmV0L3dpcmVsZXNzL0tjb25maWctOC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZz05PWNvbmZpZyBXRVhUX1BST0NcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMC1cXHRkZWZfYm9vbCB5XFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTE6XFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTI6XFx0ZGVwZW5kcyBvbiBXRVhUX0NPUkVcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMy1cXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnPTE3PWNvbmZpZyBDRkc4MDIxMVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4LVxcdHRyaXN0YXRlIFxcXCJjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXFxcIlxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE5OlxcdGRlcGVuZHMgb24gUkZLSUxMIHx8ICFSRktJTExcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0yMC1cXHRzZWxlY3QgRldfTE9BREVSXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZz02OD1jb25maWcgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXFxubmV0L3dpcmVsZXNzL0tjb25maWctNjktXFx0Ym9vbCBcXFwiY2ZnODAyMTEgY2VydGlmaWNhdGlvbiBvbnVzXFxcIlxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjcwOlxcdGRlcGVuZHMgb24gRVhQRVJUXFxubmV0L3dpcmVsZXNzL0tjb25maWctNzEtXFx0ZGVmYXVsdCBuXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZz05OT1jb25maWcgQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMDEtXFx0ZGVmYXVsdCB5XFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTAyOlxcdGRlcGVuZHMgb24gQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREJcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMDMtXFx0aGVscFxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWc9MTExPWNvbmZpZyBDRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVJcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTItXFx0c3RyaW5nIFxcXCJhZGRpdGlvbmFsIHJlZ2RiIGtleSBkaXJlY3RvcnlcXFwiIGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnOjExMzpcXHRkZXBlbmRzIG9uIENGRzgwMjExX1JFUVVJUkVfU0lHTkVEX1JFR0RCXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTE0LVxcdGhlbHBcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnPTEyMj1jb25maWcgQ0ZHODAyMTFfUkVHX0NFTExVTEFSX0hJTlRTXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTIzLVxcdGJvb2wgXFxcImNmZzgwMjExIHJlZ3VsYXRvcnkgc3VwcG9ydCBmb3IgY2VsbHVsYXIgYmFzZSBzdGF0aW9uIGhpbnRzXFxcIlxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjEyNDpcXHRkZXBlbmRzIG9uIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEyNS1cXHRoZWxwXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZz0xMzU9Y29uZmlnIENGRzgwMjExX1JFR19SRUxBWF9OT19JUlxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEzNi1cXHRib29sIFxcXCJjZmc4MDIxMSBzdXBwb3J0IGZvciBOT19JUiByZWxheGF0aW9uXFxcIlxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjEzNzpcXHRkZXBlbmRzIG9uIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEzOC1cXHRoZWxwXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZz0xNjk9Y29uZmlnIENGRzgwMjExX0RFQlVHRlNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzAtXFx0Ym9vbCBcXFwiY2ZnODAyMTEgRGVidWdGUyBlbnRyaWVzXFxcIlxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3MTpcXHRkZXBlbmRzIG9uIERFQlVHX0ZTXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTcyLVxcdGhlbHBcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnPTE5ND1jb25maWcgQ0ZHODAyMTFfS1VOSVRfVEVTVFxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE5NS1cXHR0cmlzdGF0ZSBcXFwiS1VuaXQgdGVzdHMgZm9yIGNmZzgwMjExXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTk2OlxcdGRlcGVuZHMgb24gS1VOSVRcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxOTc6XFx0ZGVwZW5kcyBvbiBDRkc4MDIxMVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE5OC1cXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTo0NzowOS43MjYyNTI4NjZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjgxOTI2MzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBkZXBlbmRlbmNpZXM6XG5cbioqQW5hbHl6aW5nIHRoZSBXaXJlbGVzcyBTdGFjayBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgd2lyZWxlc3Mgc3RhY2sgY29uZmlndXJhdGlvbi4gSXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBvbiB0aGUgc3VyZmFjZSwgYnV0IGl0J3MgYWx3YXlzIHdvcnRoIGEgZG91YmxlLWNoZWNrLiBgQ0ZHODAyMTFgIGlzIGludGVyZXN0aW5nOyBpdCdzIGdvdCB0aGF0IGBSRktJTEwgfHwgIVJGS0lMTGAgZGVwZW5kZW5jeS4gRXNzZW50aWFsbHksIGl0J3MgYWx3YXlzIGVuYWJsZWQsIHdoaWNoIGlzIHRoZSBleHBlY3RlZCBiZWhhdmlvci4gVGhhdCdzIGEgY2xhc3NpYyBjYXNlIG9mIGEgZGVwZW5kZW5jeSB0aGF0IGV4aXN0cyBjb25jZXB0dWFsbHkgYnV0IGRvZXNuJ3QgYWN0dWFsbHkgbGltaXQgdGhlIGJ1aWxkLiBNb3Zpbmcgb24sIGBNQUM4MDIxMWAgaXMgYnVpbHQgZGlyZWN0bHkgb24gdG9wIG9mIGBDRkc4MDIxMWAg4oCTIGFzIGV4cGVjdGVkLCB0aGF0J3MgdGhlIGNvcmUgb2YgdGhlIDgwMi4xMSBzdGFjay4gVGhlbiwgd2Ugc2VlIGBNQUM4MDIxMV9IV1NJTWAgZGVwZW5kcyBvbiBgTUFDODAyMTFgLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBIYXJkd2FyZSBzaW11bGF0aW9uIGZ1bmN0aW9uYWxpdHkgbmVlZHMgdGhlIGJhc2UgTUFDODAyMTEgbGF5ZXIgdG8gZnVuY3Rpb24uIEkgc2hvdWxkIHByb2JhYmx5IGRpZyBpbnRvIHRoZSBgbmV0L21hYzgwMjExL0tjb25maWdgIGZpbGUgYW5kIHRha2UgYSBsb29rIGF0IHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBpbiB0aGVyZSwganVzdCB0byBiZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgc3VidGxlIGdvdGNoYXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4OTIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTo0NzoxMy40MDgxODI3MzZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MTc4MDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL0tjb25maWc9Mj1jb25maWcgTUFDODAyMTFcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVxcXCJcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo0OlxcdGRlcGVuZHMgb24gQ0ZHODAyMTFcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy01LVxcdHNlbGVjdCBDUllQVE9cXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE2PWNvbW1lbnQgXFxcIkNGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExXFxcIlxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE3OlxcdGRlcGVuZHMgb24gQ0ZHODAyMTE9blxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE4LVxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9MzE9Y2hvaWNlXFxubmV0L21hYzgwMjExL0tjb25maWctMzItXFx0cHJvbXB0IFxcXCJEZWZhdWx0IHJhdGUgY29udHJvbCBhbGdvcml0aG1cXFwiXFxubmV0L21hYzgwMjExL0tjb25maWc6MzM6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9IQVNfUkNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zNC1cXHRkZWZhdWx0IE1BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUxcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTQxPWNvbmZpZyBNQUM4MDIxMV9SQ19ERUZBVUxUX01JTlNUUkVMXFxubmV0L21hYzgwMjExL0tjb25maWctNDItXFx0Ym9vbCBcXFwiTWluc3RyZWxcXFwiXFxubmV0L21hYzgwMjExL0tjb25maWc6NDM6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9SQ19NSU5TVFJFTFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQ0LVxcdGhlbHBcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTU3PWNvbW1lbnQgXFxcIlNvbWUgd2lyZWxlc3MgZHJpdmVycyByZXF1aXJlIGEgcmF0ZSBjb250cm9sIGFsZ29yaXRobVxcXCJcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo1ODpcXHRkZXBlbmRzIG9uIE1BQzgwMjExIFxcdTAwMjZcXHUwMDI2IE1BQzgwMjExX0hBU19SQz1uXFxubmV0L21hYzgwMjExL0tjb25maWctNTktXFxubmV0L21hYzgwMjExL0tjb25maWc9NjA9Y29uZmlnIE1BQzgwMjExX0tVTklUX1RFU1RcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy02MS1cXHR0cmlzdGF0ZSBcXFwiS1VuaXQgdGVzdHMgZm9yIG1hYzgwMjExXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxubmV0L21hYzgwMjExL0tjb25maWc6NjI6XFx0ZGVwZW5kcyBvbiBLVU5JVFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjYzOlxcdGRlcGVuZHMgb24gTUFDODAyMTFcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy02NC1cXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9NzA9Y29uZmlnIE1BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03MS1cXHRib29sIFxcXCJFbmFibGUgbWFjODAyMTEgbWVzaCBuZXR3b3JraW5nIHN1cHBvcnRcXFwiXFxubmV0L21hYzgwMjExL0tjb25maWc6NzI6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTczLVxcdGhlbHBcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTc5PWNvbmZpZyBNQUM4MDIxMV9MRURTXFxubmV0L21hYzgwMjExL0tjb25maWctODAtXFx0Ym9vbCBcXFwiRW5hYmxlIExFRCB0cmlnZ2Vyc1xcXCJcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo4MTpcXHRkZXBlbmRzIG9uIE1BQzgwMjExXFxubmV0L21hYzgwMjExL0tjb25maWc6ODI6XFx0ZGVwZW5kcyBvbiBMRURTX0NMQVNTPXkgfHwgTEVEU19DTEFTUz1NQUM4MDIxMVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTgzLVxcdHNlbGVjdCBMRURTX1RSSUdHRVJTXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZz04OD1jb25maWcgTUFDODAyMTFfREVCVUdGU1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTg5LVxcdGJvb2wgXFxcIkV4cG9ydCBtYWM4MDIxMSBpbnRlcm5hbHMgaW4gRGVidWdGU1xcXCJcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo5MDpcXHRkZXBlbmRzIG9uIE1BQzgwMjExIFxcdTAwMjZcXHUwMDI2IENGRzgwMjExX0RFQlVHRlNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05MS1cXHRoZWxwXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZz05Nz1jb25maWcgTUFDODAyMTFfTUVTU0FHRV9UUkFDSU5HXFxubmV0L21hYzgwMjExL0tjb25maWctOTgtXFx0Ym9vbCBcXFwiVHJhY2UgYWxsIG1hYzgwMjExIGRlYnVnIG1lc3NhZ2VzXFxcIlxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjk5OlxcdGRlcGVuZHMgb24gTUFDODAyMTEgXFx1MDAyNlxcdTAwMjYgVFJBQ0lOR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEwMC1cXHRoZWxwXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZz0xMTA9bWVudWNvbmZpZyBNQUM4MDIxMV9ERUJVR19NRU5VXFxubmV0L21hYzgwMjExL0tjb25maWctMTExLVxcdGJvb2wgXFxcIlNlbGVjdCBtYWM4MDIxMSBkZWJ1Z2dpbmcgZmVhdHVyZXNcXFwiXFxubmV0L21hYzgwMjExL0tjb25maWc6MTEyOlxcdGRlcGVuZHMgb24gTUFDODAyMTFcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTMtXFx0aGVscFxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9MTE2PWNvbmZpZyBNQUM4MDIxMV9OT0lOTElORVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExNy1cXHRib29sIFxcXCJEbyBub3QgaW5saW5lIFRYL1JYIGhhbmRsZXJzXFxcIlxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExODpcXHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTktXFx0aGVscFxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9MTMyPWNvbmZpZyBNQUM4MDIxMV9WRVJCT1NFX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTMzLVxcdGJvb2wgXFxcIlZlcmJvc2UgZGVidWdnaW5nIG91dHB1dFxcXCJcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxMzQ6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VXFxubmV0L21hYzgwMjExL0tjb25maWctMTM1LVxcdGhlbHBcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE0Mz1jb25maWcgTUFDODAyMTFfTUxNRV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0NC1cXHRib29sIFxcXCJWZXJib3NlIG1hbmFnZWQgTUxNRSBvdXRwdXRcXFwiXFxubmV0L21hYzgwMjExL0tjb25maWc6MTQ1OlxcdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0Ni1cXHRoZWxwXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZz0xNTQ9Y29uZmlnIE1BQzgwMjExX1NUQV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE1NS1cXHRib29sIFxcXCJWZXJib3NlIHN0YXRpb24gZGVidWdnaW5nXFxcIlxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE1NjpcXHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTctXFx0aGVscFxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9MTYzPWNvbmZpZyBNQUM4MDIxMV9IVF9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE2NC1cXHRib29sIFxcXCJWZXJib3NlIEhUIGRlYnVnZ2luZ1xcXCJcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNjU6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VXFxubmV0L21hYzgwMjExL0tjb25maWctMTY2LVxcdGhlbHBcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE3NT1jb25maWcgTUFDODAyMTFfT0NCX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTc2LVxcdGJvb2wgXFxcIlZlcmJvc2UgT0NCIGRlYnVnZ2luZ1xcXCJcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNzc6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VXFxubmV0L21hYzgwMjExL0tjb25maWctMTc4LVxcdGhlbHBcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE4Nj1jb25maWcgTUFDODAyMTFfSUJTU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE4Ny1cXHRib29sIFxcXCJWZXJib3NlIElCU1MgZGVidWdnaW5nXFxcIlxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE4ODpcXHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xODktXFx0aGVscFxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9MTk3PWNvbmZpZyBNQUM4MDIxMV9QU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE5OC1cXHRib29sIFxcXCJWZXJib3NlIHBvd2Vyc2F2ZSBtb2RlIGRlYnVnZ2luZ1xcXCJcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxOTk6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VXFxubmV0L21hYzgwMjExL0tjb25maWctMjAwLVxcdGhlbHBcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTIwOT1jb25maWcgTUFDODAyMTFfTVBMX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjEwLVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBwZWVyIGxpbmsgZGVidWdnaW5nXFxcIlxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIxMTpcXHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMTI6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL0tjb25maWctMjEzLVxcdGhlbHBcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTIyMj1jb25maWcgTUFDODAyMTFfTVBBVEhfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMjMtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHBhdGggZGVidWdnaW5nXFxcIlxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIyNDpcXHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMjU6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL0tjb25maWctMjI2LVxcdGhlbHBcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTIzNT1jb25maWcgTUFDODAyMTFfTUhXTVBfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzYtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIEhXTVAgcm91dGluZyBkZWJ1Z2dpbmdcXFwiXFxubmV0L21hYzgwMjExL0tjb25maWc6MjM3OlxcdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIzODpcXHRkZXBlbmRzIG9uIE1BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzktXFx0aGVscFxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9MjQ4PWNvbmZpZyBNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNDktXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHN5bmNocm9uaXphdGlvbiBkZWJ1Z2dpbmdcXFwiXFxubmV0L21hYzgwMjExL0tjb25maWc6MjUwOlxcdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI1MTpcXHRkZXBlbmRzIG9uIE1BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNTItXFx0aGVscFxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9MjU5PWNvbmZpZyBNQUM4MDIxMV9NRVNIX0NTQV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2MC1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggY2hhbm5lbCBzd2l0Y2ggZGVidWdnaW5nXFxcIlxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI2MTpcXHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNjI6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL0tjb25maWctMjYzLVxcdGhlbHBcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTI3MD1jb25maWcgTUFDODAyMTFfTUVTSF9QU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI3MS1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggcG93ZXJzYXZlIGRlYnVnZ2luZ1xcXCJcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNzI6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VXFxubmV0L21hYzgwMjExL0tjb25maWc6MjczOlxcdGRlcGVuZHMgb24gTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI3NC1cXHRoZWxwXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZz0yODE9Y29uZmlnIE1BQzgwMjExX1RETFNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODItXFx0Ym9vbCBcXFwiVmVyYm9zZSBURExTIGRlYnVnZ2luZ1xcXCJcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyODM6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VXFxubmV0L21hYzgwMjExL0tjb25maWctMjg0LVxcdGhlbHBcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTI5Mz1jb25maWcgTUFDODAyMTFfREVCVUdfQ09VTlRFUlNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yOTQtXFx0Ym9vbCBcXFwiRXh0cmEgc3RhdGlzdGljcyBmb3IgVFgvUlggZGVidWdnaW5nXFxcIlxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI5NTpcXHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyOTY6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR0ZTXFxubmV0L21hYzgwMjExL0tjb25maWctMjk3LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6NDc6MTMuNDU2MzY3OTU1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MzU4MzEyOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIGNvbnNpZGVyYXRpb25zOlxuXG4qKk1BQzgwMjExIERlcGVuZGVuY3kgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGRlcGVuZGVuY3kgcmVsYXRpb25zaGlwcyBoZXJlLiBJdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGFjdHVhbGx5LiBXZSd2ZSBnb3QgYE1BQzgwMjExYCwgYW5kIGl0IHJlbGllcyBvbiBgQ0ZHODAyMTFgLiBUaGF0J3MgdGhlIGNvcmUuIFRoZW4sIHdoZW4gd2UncmUgZGVhbGluZyB3aXRoIGhhcmR3YXJlIHNpbXVsYXRpb24sIGxpa2Ugd2l0aCBgTUFDODAyMTFfSFdTSU1gLCB0aGF0IGJ1aWxkcyAqdXBvbiogYE1BQzgwMjExYC4gU28sIGBNQUM4MDIxMV9IV1NJTWAgbmF0dXJhbGx5IGhhcyBgTUFDODAyMTFgIGFzIGEgZGVwZW5kZW5jeSBhcyB3ZWxsLiBNYWtlcyBwZXJmZWN0IHNlbnNlLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBkcmlsbCBkb3duIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4gSSdtIGdvaW5nIHRvIGNoZWNrIG91dCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTFfaHdzaW0vS2NvbmZpZ2AgKG9yIHNvbWV3aGVyZSBzaW1pbGFyLCBkZXBlbmRpbmcgb24gdGhlIGV4YWN0IHNvdXJjZSB0cmVlKS4gSSBuZWVkIHRvIGNvbmZpcm0gdGhvc2UgZGVwZW5kZW5jaWVzIGFyZSBjb3JyZWN0bHkgcmVmbGVjdGVkIGluIHRoZSBLY29uZmlnLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBzdHJ1Y3R1cmUgaXMgc291bmQgYW5kIHRoZXJlIGFyZW4ndCBhbnkgc25lYWt5IGNpcmN1bGFyIGRlcGVuZGVuY2llcyBvciBtaXNzaW5nIHJlcXVpcmVtZW50cyBsdXJraW5nLiBHb3R0YSBrZWVwIGV2ZXJ5dGhpbmcgY2xlYW4gYW5kIGNvbnNpc3RlbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzM0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6NDc6MTcuMjkyMjAxNTAxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDI3MjQ4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUFDODAyMTFfSFdTSU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZzoxOmNvbmZpZyBNQUM4MDIxMV9IV1NJTVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZy0yLVxcdHRyaXN0YXRlIFxcXCJTaW11bGF0ZWQgcmFkaW8gdGVzdGluZyB0b29sIGZvciBtYWM4MDIxMVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6NDc6MTcuMzY2NDc4OTU4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NTE4Nzk1NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBWaXJ0dWFsIFdpcmVsZXNzIEtjb25maWcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgYWJvdXQgdGhlIHZpcnR1YWwgd2lyZWxlc3Mgc2V0dXAgaW4gdGhpcyBrZXJuZWwuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LCBhcyBhbHdheXMsIGlzIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuIExldCdzIHNlZS4uLiB0aGUgdGV4dCBtZW50aW9ucyBgZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnYC4gUmlnaHQsIHRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoaXMgc3Vic3lzdGVtLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgYEtjb25maWdgIG5vdyB0byBzZWUgd2hhdCdzIGRlZmluZWQsIHdoYXQgZGVwZW5kZW5jaWVzIGV4aXN0LCBhbmQgaG93IHRoaXMgYWxsIHBpZWNlcyB0b2dldGhlci4gVGhhdCdsbCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgcmVzdCBvZiB0aGUgY29kZS4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc1NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjQ3OjIxLjExODM2MjExN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4NTgwMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnPTE9Y29uZmlnIE1BQzgwMjExX0hXU0lNXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnLTItXFx0dHJpc3RhdGUgXFxcIlNpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjExXFxcIlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZzozOlxcdGRlcGVuZHMgb24gTUFDODAyMTFcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWctNC1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWc9MTQ9Y29uZmlnIFZJUlRfV0lGSVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZy0xNS1cXHR0cmlzdGF0ZSBcXFwiV2lmaSB3cmFwcGVyIGZvciBldGhlcm5ldCBkcml2ZXJzXFxcIlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZzoxNjpcXHRkZXBlbmRzIG9uIENGRzgwMjExXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnLTE3LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6NDc6MjEuMTY1MjI0Mzc2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkxMTkwOTM0NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBTdHJhdGVneSBmb3IgTUFDODAyMTFfSFdTSU0qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gYE1BQzgwMjExX0hXU0lNYC4gSXQgbG9va3MgbGlrZSB0aGlzIGZvY3VzZXMgb24gdGhlIGBubDgwMjExX25ld19zdGF0aW9uYCBmdW5jdGlvbiwgd2hpY2ggaXMgYW4gQVBJIGVudHJ5cG9pbnQuIFRoZSBwYXRjaCBpcyBjaGFuZ2luZyBzb21lIGZ1bmN0aW9uYWwgbG9naWMgd2l0aGluIGl0IOKAkyBtb3ZpbmcgdmFsaWRhdGlvbiwgYWRkaW5nIGEgY2hlY2sgZm9yIGBiZWFjb25faW50ZXJ2YWxgLCBhbmQgcmVtb3ZpbmcgYE5MODAyMTFfSUZUWVBFX0FQX1ZMQU5gLiBEZWZpbml0ZWx5IHdvcnRoIGEgZnV6emluZyBlZmZvcnQgaGVyZS5cblxuSSBpbml0aWFsbHkgcXVlc3Rpb25lZCB3aGV0aGVyIHdlIGNvdWxkIHVzZSBgbmw4MDIxMV9uZXdfc3RhdGlvbmAgZm9yIGZ1enppbmcsIHNpbmNlIGl0J3MgZGVmaW5lZCBhcyBhIHN0YXRpYyBmdW5jdGlvbi4gQnV0IHRoZW4gSSByZW1lbWJlcmVkIHRoYXQgd2hpbGUgaXQgaXMgc3RhdGljLCBpdCdzIGEgbmV0bGluayBjYWxsYmFjaywgc28gaXRzIGFkZHJlc3MgaXMgdGFrZW4gYW5kIHVzZWQgaW4gYG5sODAyMTFfc21hbGxfb3BzYC4gVGhpcyBtZWFucyBpdCAqd29uJ3QqIGJlIGlubGluZWQsIGFuZCBTeXprYWxsZXIgc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIGl0LiBUaGUgcHJvbXB0J3MgcHJlZmVyZW5jZSBpcyBmb3Igbm9uLXN0YXRpYyBlbnRyeXBvaW50cywgYnV0IGluIHRoZSBuZXRsaW5rIGNhc2UgdGhpcyAqaXMqIHRoZSBzdGFuZGFyZCBhcHByb2FjaC4gTm8gcmVhc29uIHRvIGdvIGh1bnRpbmcgZm9yIGFsdGVybmF0aXZlcywgZXNwZWNpYWxseSBzaW5jZSBJIGRvbid0IHNlZSBhbnkgb3RoZXIgZnVuY3Rpb25zIGJlaW5nIHRvdWNoZWQgYnkgdGhpcyBwYXRjaC5cblxuU28sIHRoZSBrZXkgY29uZmlncyBmb3IgdGhpcyBhcmUgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogYENGRzgwMjExYCwgYE1BQzgwMjExYCwgYW5kIGBNQUM4MDIxMV9IV1NJTWAuIE5vIG5lZWQgZm9yIGBOTDgwMjExX1RFU1RNT0RFYCBzaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggYSBzdGFuZGFyZCBuZXRsaW5rIGNvbW1hbmQsIGBOTDgwMjExX0NNRF9ORVdfU1RBVElPTmAuXG5cbkknbSByZWFkeSB0byBzZXQgdXAgdGhlIGZ1enppbmcgd2l0aCBgbmw4MDIxMV9uZXdfc3RhdGlvbmAgYXMgdGhlIHRhcmdldC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExNTcsIk91dHB1dFRva2VucyI6MTYwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjQ3OjMwLjI4NDMyMDg3M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MTM4OTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIk1BQzgwMjExX0hXU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmw4MDIxMV9uZXdfc3RhdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRsaW5rIGNhbGxiYWNrIGBubDgwMjExX25ld19zdGF0aW9uYCBpbiBjZmc4MDIxMSwgY2hhbmdpbmcgdGhlIHZhbGlkYXRpb24gbG9naWMgZm9yIGBsaW5rX2lkYCBhbmQgYWRkaW5nIGEgY2hlY2sgZm9yIGBiZWFjb25faW50ZXJ2YWxgIHdoZW4gYWRkaW5nIGEgbmV3IHN0YXRpb24gdG8gYW4gQVAgb3IgUDJQX0dPIGludGVyZmFjZS4gVGhpcyBpcyByZWFjaGFibGUgY29yZSB3aXJlbGVzcyBsb2dpYyB0aGF0IGNhbiBiZSB0ZXN0ZWQgdXNpbmcgdGhlIG1hYzgwMjExX2h3c2ltIGRyaXZlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIk1BQzgwMjExX0hXU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmw4MDIxMV9uZXdfc3RhdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRsaW5rIGNhbGxiYWNrIGBubDgwMjExX25ld19zdGF0aW9uYCBpbiBjZmc4MDIxMSwgY2hhbmdpbmcgdGhlIHZhbGlkYXRpb24gbG9naWMgZm9yIGBsaW5rX2lkYCBhbmQgYWRkaW5nIGEgY2hlY2sgZm9yIGBiZWFjb25faW50ZXJ2YWxgIHdoZW4gYWRkaW5nIGEgbmV3IHN0YXRpb24gdG8gYW4gQVAgb3IgUDJQX0dPIGludGVyZmFjZS4gVGhpcyBpcyByZWFjaGFibGUgY29yZSB3aXJlbGVzcyBsb2dpYyB0aGF0IGNhbiBiZSB0ZXN0ZWQgdXNpbmcgdGhlIG1hYzgwMjExX2h3c2ltIGRyaXZlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6NDc6MzAuMzYzNDY3MzhaIiwiU2VxIjoxNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNTMyOTY1OTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6NDc6MzAuMzY0MDEyMDZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTE1MzI0MTUxNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB2dWxuZXJhYmlsaXR5IGluIGBubDgwMjExX25ld19zdGF0aW9uKClgLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgYGxpbmtfaWRgIGV4dHJhY3RlZCBmcm9tIG5ldGxpbmsgYXR0cmlidXRlcyB3YXMgbm90IHZhbGlkYXRlZCBhZ2FpbnN0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBsaW5rcyBvciBjaGVja2VkIGZvciBuZWdhdGl2ZSB2YWx1ZXMgYmVmb3JlIGJlaW5nIHVzZWQgYXMgYW4gaW5kZXggdG8gYWNjZXNzIHRoZSBgd2Rldi1cXHUwMDNlbGlua3NbbGlua19pZF1gIGFycmF5LiBUaGlzIGFsbG93ZWQgYW4gYXR0YWNrZXIgdG8gdHJpZ2dlciBhbiBvdXQtb2YtYm91bmRzIHJlYWQgd2hlbiBjaGVja2luZyBgd2Rldi1cXHUwMDNlbGlua3NbbGlua19pZF0uYXAuYmVhY29uX2ludGVydmFsYC5cXG5cXG5PdXQtb2YtYm91bmRzIGFjY2Vzc2VzIChib3RoIHJlYWRzIGFuZCB3cml0ZXMpIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIGBwYXJhbXNgIHN0cnVjdHVyZSBpcyBmdWxseSB6ZXJvLWluaXRpYWxpemVkIHZpYSBgbWVtc2V0KFxcdTAwMjZwYXJhbXMsIDAsIHNpemVvZihwYXJhbXMpKTtgLCBhbmQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIGludm9sdmVkIGluIHRoaXMgYnVnLiBTaW5jZSBLQVNBTiBpcyBmdWxseSBjYXBhYmxlIG9mIGNhdGNoaW5nIHRoaXMgb3V0LW9mLWJvdW5kcyByZWFkLCB0aGVyZSBpcyBubyBuZWVkIHRvIHJ1biBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDEwOWYwZWZhZTdhZmUxYjk3NDY2ZjY0MzY0M2FiMTYwYTM3MWM3MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDA5OjQ2OjUxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmNcbmluZGV4IDVhZGNiNmJkMGZjNTYuLjc1YmJkNzhmOTFiYTMgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG4rKysgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG5AQCAtOTE3NCw3ICs5MTc0LDcgQEAgc3RhdGljIGludCBubDgwMjExX3NldF9zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gc3RhdGljIGludCBubDgwMjExX25ld19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4ge1xuIFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clswXTtcbi1cdGludCBlcnI7XG4rXHRpbnQgZXJyLCBsaW5rX2lkO1xuIFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGluZm8tXHUwMDNldXNlcl9wdHJbMV07XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gd2Rldi1cdTAwM2VuZXRkZXY7XG4gXHRzdHJ1Y3Qgc3RhdGlvbl9wYXJhbWV0ZXJzIHBhcmFtcztcbkBAIC05MjIyLDYgKzkyMjIsMTYgQEAgc3RhdGljIGludCBubDgwMjExX25ld19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWQgPVxuIFx0XHRubDgwMjExX2xpbmtfaWRfb3JfaW52YWxpZChpbmZvLVx1MDAzZWF0dHJzKTtcbiBcbitcdGlmICh3ZGV2LVx1MDAzZXZhbGlkX2xpbmtzKSB7XG4rXHRcdGlmIChwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdGlmICghKHdkZXYtXHUwMDNldmFsaWRfbGlua3MgXHUwMDI2IEJJVChwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWQpKSlcbitcdFx0XHRyZXR1cm4gLUVOT0xJTks7XG4rXHR9IGVsc2Uge1xuK1x0XHRpZiAocGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkIFx1MDAzZT0gMClcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbiBcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9NTERfQUREUl0pIHtcbiBcdFx0bWFjX2FkZHIgPSBubGFfZGF0YShpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9NTERfQUREUl0pO1xuIFx0XHRwYXJhbXMubGlua19zdGFfcGFyYW1zLm1sZF9tYWMgPSBtYWNfYWRkcjtcbkBAIC05NDAyLDggKzk0MTIsMTIgQEAgc3RhdGljIGludCBubDgwMjExX25ld19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXG4gXHRzd2l0Y2ggKHdkZXYtXHUwMDNlaWZ0eXBlKSB7XG4gXHRjYXNlIE5MODAyMTFfSUZUWVBFX0FQOlxuLVx0Y2FzZSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOOlxuIFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9QMlBfR086XG4rXHRcdC8qIEFkZCBhIG5ldyBzdGF0aW9uIG9ubHkgYWZ0ZXIgdGhlIEFQIGFuZCBsaW5rIGhhcyBiZWVuIHN0YXJ0ZWQgKi9cbitcdFx0bGlua19pZCA9IHdkZXYtXHUwMDNldmFsaWRfbGlua3MgPyBwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWQgOiAwO1xuK1x0XHRpZiAoIXdkZXYtXHUwMDNlbGlua3NbbGlua19pZF0uYXAuYmVhY29uX2ludGVydmFsKVxuK1x0XHRcdHJldHVybiAtRU5FVERPV047XG4rXG4gXHRcdC8qIGlnbm9yZSBXTUUgYXR0cmlidXRlcyBpZiBpZmFjZS9zdGEgaXMgbm90IGNhcGFibGUgKi9cbiBcdFx0aWYgKCEocmRldi1cdTAwM2V3aXBoeS5mbGFncyBcdTAwMjYgV0lQSFlfRkxBR19BUF9VQVBTRCkgfHxcbiBcdFx0ICAgICEocGFyYW1zLnN0YV9mbGFnc19zZXQgXHUwMDI2IEJJVChOTDgwMjExX1NUQV9GTEFHX1dNRSkpKVxuQEAgLTk0OTUsMjcgKzk1MDksMTAgQEAgc3RhdGljIGludCBubDgwMjExX25ld19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXG4gXHQvKiBiZSBhd2FyZSBvZiBwYXJhbXMudmxhbiB3aGVuIGNoYW5naW5nIGNvZGUgaGVyZSAqL1xuIFxuLVx0aWYgKHdkZXYtXHUwMDNldmFsaWRfbGlua3MpIHtcbi1cdFx0aWYgKHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19pZCBcdTAwM2MgMCkge1xuLVx0XHRcdGVyciA9IC1FSU5WQUw7XG4tXHRcdFx0Z290byBvdXQ7XG4tXHRcdH1cbi1cdFx0aWYgKCEod2Rldi1cdTAwM2V2YWxpZF9saW5rcyBcdTAwMjYgQklUKHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19pZCkpKSB7XG4tXHRcdFx0ZXJyID0gLUVOT0xJTks7XG4tXHRcdFx0Z290byBvdXQ7XG4tXHRcdH1cbi1cdH0gZWxzZSB7XG4tXHRcdGlmIChwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWQgXHUwMDNlPSAwKSB7XG4tXHRcdFx0ZXJyID0gLUVJTlZBTDtcbi1cdFx0XHRnb3RvIG91dDtcbi1cdFx0fVxuLVx0fVxuLVxuIFx0cGFyYW1zLmVwcF9wZWVyID1cbiBcdFx0bmxhX2dldF9mbGFnKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0VQUF9QRUVSXSk7XG4gXG4gXHRlcnIgPSByZGV2X2FkZF9zdGF0aW9uKHJkZXYsIHdkZXYsIG1hY19hZGRyLCBcdTAwMjZwYXJhbXMpO1xuLW91dDpcbiBcdGRldl9wdXQocGFyYW1zLnZsYW4pO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTo0NzozMC4zNjQwMTMwNTFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTAyNjA1NDY2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFByb3Bvc2VkIFBhdGNoOiBQb3RlbnRpYWwgSXNzdWVzIHdpdGggTGluayBJRCBWYWxpZGF0aW9uKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbmw4MDIxMV9uZXdfc3RhdGlvbmAgd2l0aGluIGBuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jYCwgYW5kIGl0J3MgcHJpbWFyaWx5IGFib3V0IG1vdmluZyBhcm91bmQgYW5kIGFkZGluZyBzb21lIHZhbGlkYXRpb24gZm9yIGBwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWRgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgbG9naWMgaXMgY2hlY2tpbmcgd2hldGhlciB0aGUgQVAgYW5kIGxpbmsgaGF2ZSBiZWVuIHN0YXJ0ZWQuXG5cblRoZSBmaXJzdCB0aGluZyB0aGF0IGNhdWdodCBteSBleWUgaXMgdGhlIGFkZGVkIGNoZWNrIGZvciBgd2Rldi1cdTAwM2VsaW5rc1tsaW5rX2lkXS5hcC5iZWFjb25faW50ZXJ2YWxgIGZvciBgQVBgIGFuZCBgUDJQX0dPYCBpbnRlcmZhY2VzLiBUaGUgY29kZSBhdHRlbXB0cyB0byB2YWxpZGF0ZSB0aGUgQVAgbGluayBieSBjaGVja2luZyB0aGF0IHRoZSBiZWFjb24gaW50ZXJ2YWwgaXMgbm9uLXplcm8gYmVmb3JlIGFkZGluZyBhIG5ldyBzdGF0aW9uLiBGYWlyIGVub3VnaCwgdGhhdCBtYWtlcyBzZW5zZS4gSG93ZXZlciwgSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCdzIGRvbmUuXG5cblRoZW4gSSByZWFsaXplZCB0aGF0IGBsaW5rX2lkYCBpcyAqdXNlZCBhcyBhbiBpbmRleCBpbnRvKiBgd2Rldi1cdTAwM2VsaW5rc2AuIEhtbSwgaXMgYGxpbmtfaWRgIHByb3Blcmx5IGJvdW5kZWQ/IFRoYXQncyB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaGVyZSwgc2luY2UgaW5kZXhpbmcgYW4gYXJyYXkgb3V0IG9mIGJvdW5kcyBpcyBhIGNsYXNzaWMgYnVnLiBOb3csIGl0IGxvb2tzIGxpa2UgdGhleSd2ZSBtb3ZlZCBzb21lIHZhbGlkYXRpb24gbG9naWMgZWFybGllciBpbiB0aGUgZnVuY3Rpb24uXG5cbkkgc2VlIHRoaXMgY29kZTpcbmBgYGNcblx0aWYgKHdkZXYtXHUwMDNldmFsaWRfbGlua3MpIHtcblx0XHRpZiAocGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkIFx1MDAzYyAwKVxuXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5cdFx0aWYgKCEod2Rldi1cdTAwM2V2YWxpZF9saW5rcyBcdTAwMjYgQklUKHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19pZCkpKVxuXHRcdFx0cmV0dXJuIC1FTk9MSU5LO1xuXHR9IGVsc2Uge1xuXHRcdGlmIChwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWQgXHUwMDNlPSAwKVxuXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5cdH1cbmBgYFxuSWYgYHdkZXYtXHUwMDNldmFsaWRfbGlua3NgIGlzIG5vbi16ZXJvLCB0aGlzIGNoZWNrcyB0aGF0IHRoZSBgbGlua19pZGAgaXMgbm9uLW5lZ2F0aXZlIGFuZCBpcyB2YWxpZC4gVGhlIGBsaW5rX2lkYCBpcyB0aGVuIHVzZWQgdG8gY2hlY2sgdGhlIHZhbGlkIGxpbmsgbWFzay4gVGhpcyBzZWVtcyBsaWtlIGl0IHdvdWxkIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3MgKmlmKiB0aGUgYEJJVChsaW5rX2lkKWAgb3BlcmF0aW9uIGlzIHNhZmUuIE5vdywgdGhpcyBgQklUKGxpbmtfaWQpYCBpcyB0aGUgcmlza3kgcGFydC4gSWYgYGxpbmtfaWRgIGlzIGxhcmdlLCB1c2luZyBiaXQgc2hpZnRpbmcgb24gYSAxNi1iaXQgZmllbGQgbWF5IGxlYWQgdG8gaXNzdWVzLlxuXG5HaXZlbiB0aGF0IGB3ZGV2LVx1MDAzZXZhbGlkX2xpbmtzYCBpcyBhIGB1MTZgLCBhY2NvcmRpbmcgdG8gdGhlIG1hYzgwMjExL2NmZzgwMjExIHN0YW5kYXJkLCBpdCBzZWVtcyB0byBtZSB0aGF0IHVzaW5nIGEgYGxpbmtfaWRgIHZhbHVlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAxNiwgd2hpbGUgbm90ICpkaXJlY3RseSogb3V0IG9mIGJvdW5kcyBkdWUgdG8gdGhlIGNvbXBhcmlzb24gbG9naWMsIGNvdWxkIHN0aWxsIHJlc3VsdCBpbiB1bmRlZmluZWQgYmVoYXZpb3IgYmVjYXVzZSBgQklUKGxpbmtfaWQpYCB3aWxsIHNoaWZ0IGEgc2luZ2xlIGJpdCBwYXN0IHRoZSBib3VuZGFyaWVzIG9mIHRoZSBgdTE2YC4gV2UgY291bGQgaGF2ZSBhbiB1bmV4cGVjdGVkIHJlc3VsdCBkdWUgdG8gdGhlIGJpdCBzaGlmdGluZy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4gSSB3aWxsIGxvb2sgYXQgYHN0cnVjdCB3aXJlbGVzc19kZXZgIGRlZmluaXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4ODYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTo0NzozOS4zOTAwNzIxNjNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMzM2NDU1MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHdpcmVsZXNzX2RldiBcXFxce1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL25ldC9tYWM4MDIxMS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTo0NzozOS43MTM0NTA5MTNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA4MzA5MjQxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gY2ZnODAyMTEuaCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSB3aXJlbGVzcyBjb25maWd1cmF0aW9uIGZyYW1ld29yay4gYGNmZzgwMjExYCBpcyBhbG1vc3QgYWx3YXlzIHRoZSBmaXJzdCBwbGFjZSB0byBzdGFydCB3aGVuIEknbSBkZWFsaW5nIHdpdGgga2VybmVsLWxldmVsIFdpLUZpIHN0dWZmLiBJdCdzIHRoZSBjZW50cmFsIGh1YiBmb3IgdXNlci1zcGFjZSBpbnRlcmFjdGlvbiB3aXRoIHdpcmVsZXNzIGRldmljZXMuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMsIGRlZmluaXRpb25zLCBhbmQgZnVuY3Rpb24gcHJvdG90eXBlcyB0aGF0IGRlZmluZSB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlIHdpcmVsZXNzIGRyaXZlcnMgYW5kIHRoZSBnZW5lcmljIG5ldHdvcmtpbmcgc3RhY2suIEhvcGVmdWxseSwgdGhlIGlzc3VlIEknbSBjaGFzaW5nIGlzIGV4cG9zZWQgaGVyZS4gSXQncyBvZnRlbiB0aGUgc2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBmb3IgYWxsIG9mIHRob3NlIGVsZW1lbnRzIG9mIHRoZSBXaS1GaSBzdGFjay4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGRpZyB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA0MSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjQ3OjQyLjc5NjU0NjMyMloiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5NTIzNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHdpcmVsZXNzX2RldiBcXFxce1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL25ldC9jZmc4MDIxMS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2NmZzgwMjExLmg9NzEyMD1lbnVtIGllZWU4MDIxMV9hcF9yZWdfcG93ZXIge1xcbi0tXFxuaW5jbHVkZS9uZXQvY2ZnODAyMTEuaC03MjA3LSAqL1xcbmluY2x1ZGUvbmV0L2NmZzgwMjExLmg6NzIwODpzdHJ1Y3Qgd2lyZWxlc3NfZGV2IHtcXG5pbmNsdWRlL25ldC9jZmc4MDIxMS5oLTcyMDktXFx0c3RydWN0IHdpcGh5ICp3aXBoeTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6NDc6NDIuODQyNTAzNzQxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNDc0OTQ3NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhhdCBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBXaXJlbGVzcyBEZXZpY2UgU3RydWN0dXJlKipcblxuT2theSwgdGltZSB0byBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIHdpcmVsZXNzIG5ldHdvcmtpbmcgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwuIE15IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGNvcmUgcmVwcmVzZW50YXRpb24gb2YgYSB3aXJlbGVzcyBkZXZpY2UuIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYHN0cnVjdCB3aXJlbGVzc19kZXZgIGluIGBpbmNsdWRlL25ldC9jZmc4MDIxMS5oYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBmdW5kYW1lbnRhbCBkYXRhIHN0cnVjdHVyZSB0aGF0IGZvcm1zIHRoZSBiYWNrYm9uZSBvZiBjZmc4MDIxMSdzIGludGVyYWN0aW9uIHdpdGggd2lyZWxlc3MgZHJpdmVycy5cblxuSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBtZW1iZXJzIGFuZCBob3cgdGhleSByZWxhdGUgdG8gZWFjaCBvdGhlci4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIGVsZW1lbnRzIHJlbGF0ZWQgdG86XG5cbiogICAqKkRyaXZlciBJbnRlcmZhY2U6KiogSG93IHRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhpcyBzdHJ1Y3R1cmUgdG8gY29uZmlndXJlIGFuZCByZXBvcnQgdGhlIHN0YXRlIG9mIHRoZSB3aXJlbGVzcyBkZXZpY2UuIEFyZSB0aGVyZSBmdW5jdGlvbiBwb2ludGVycyBmb3Igc3BlY2lmaWMgb3BlcmF0aW9ucyAoZS5nLiwgc2V0dGluZyB0aGUgbW9kZSwgdHJhbnNtaXR0aW5nIGZyYW1lcywgc2Nhbm5pbmcpP1xuKiAgICoqU3RhdGUgTWFuYWdlbWVudDoqKiBGbGFncyBhbmQgdmFyaWFibGVzIGluZGljYXRpbmcgdGhlIGN1cnJlbnQgb3BlcmF0aW9uYWwgc3RhdGUgKGUuZy4sIHNjYW5uaW5nLCBjb25uZWN0ZWQsIGRpc2Nvbm5lY3RlZCkuIEknbGwgd2FudCB0byBzZWUgaG93IHRoZXNlIHRyYW5zaXRpb25zIGFyZSBtYW5hZ2VkLlxuKiAgICoqQ29uZmlndXJhdGlvbjoqKiBQYXJhbWV0ZXJzIHRoYXQgZGVmaW5lIHRoZSB3aXJlbGVzcyBzZXR0aW5ncywgc3VjaCBhcyB0aGUgb3BlcmF0aW5nIGNoYW5uZWwsIEJTU0lELCBhbmQgbmV0d29yayBtb2RlLlxuKiAgICoqU2VjdXJpdHk6KiogQW55IHJlbGF0ZWQgcG9pbnRlcnMgdG8gc2VjdXJpdHkga2V5cyBhbmQgY29uZmlndXJhdGlvbiBlbGVtZW50cy5cbiogICAqKkludGVyZmFjZToqKiBJJ2xsIGJlIGludGVyZXN0ZWQgaW4gaG93IHRoZSBgd2lyZWxlc3NfZGV2YCBpcyBsaW5rZWQgdG8gdGhlIG5ldHdvcmsgaW50ZXJmYWNlcyAoZS5nLiwgYG5ldF9kZXZpY2VgKS5cblxuSSBleHBlY3QgdGhlIHN0cnVjdHVyZSB0byBiZSBxdWl0ZSBjb21wcmVoZW5zaXZlLCBhcyBpdCBuZWVkcyB0byBhYnN0cmFjdCBhbmQgaGFuZGxlIHRoZSB2YXJpb3VzIGNvbXBsZXhpdGllcyBvZiBtb2Rlcm4gd2lyZWxlc3MgcHJvdG9jb2xzLiBUaGlzIGlzIHRoZSBjZW50cmFsIHBvaW50IGZvciBldmVyeXRoaW5nIGNmZzgwMjExIGRvZXMsIHNvIGEgdGhvcm91Z2ggdW5kZXJzdGFuZGluZyBvZiB0aGlzIHN0cnVjdHVyZSBpcyBlc3NlbnRpYWwgdG8gZ3Jhc3AgdGhlIGZyYW1ld29yaydzIG92ZXJhbGwgbG9naWMuIExldCdzIHNlZSBob3cgdGhleSd2ZSBvcmdhbml6ZWQgdGhlIGNvbXBvbmVudHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzODAsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTo0Nzo0Ny4xOTAwMDI1ODJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE3MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L2NmZzgwMjExLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNzIwOCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjcyMDg6XFx0c3RydWN0IHdpcmVsZXNzX2RldiB7XFxuNzIwOTpcXHRcXHRzdHJ1Y3Qgd2lwaHkgKndpcGh5O1xcbjcyMTA6XFx0XFx0ZW51bSBubDgwMjExX2lmdHlwZSBpZnR5cGU7XFxuNzIxMTpcXHRcXG43MjEyOlxcdFxcdC8qIHRoZSByZW1haW5kZXIgb2YgdGhpcyBzdHJ1Y3Qgc2hvdWxkIGJlIHByaXZhdGUgdG8gY2ZnODAyMTEgKi9cXG43MjEzOlxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG43MjE0OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XFxuNzIxNTpcXHRcXG43MjE2OlxcdFxcdHUzMiBpZGVudGlmaWVyO1xcbjcyMTc6XFx0XFxuNzIxODpcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkIG1nbXRfcmVnaXN0cmF0aW9ucztcXG43MjE5OlxcdFxcdHU4IG1nbXRfcmVnaXN0cmF0aW9uc19uZWVkX3VwZGF0ZToxO1xcbjcyMjA6XFx0XFxuNzIyMTpcXHRcXHRib29sIHVzZV80YWRkciwgaXNfcnVubmluZywgcmVnaXN0ZXJlZCwgcmVnaXN0ZXJpbmc7XFxuNzIyMjpcXHRcXG43MjIzOlxcdFxcdHU4IGFkZHJlc3NbRVRIX0FMRU5dIF9fYWxpZ25lZChzaXplb2YodTE2KSk7XFxuNzIyNDpcXHRcXG43MjI1OlxcdFxcdC8qIGN1cnJlbnRseSB1c2VkIGZvciBJQlNTIGFuZCBTTUUgLSBtaWdodCBiZSByZWFycmFuZ2VkIGxhdGVyICovXFxuNzIyNjpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfY29ubiAqY29ubjtcXG43MjI3OlxcdFxcdHN0cnVjdCBjZmc4MDIxMV9jYWNoZWRfa2V5cyAqY29ubmVjdF9rZXlzO1xcbjcyMjg6XFx0XFx0ZW51bSBpZWVlODAyMTFfYnNzX3R5cGUgY29ubl9ic3NfdHlwZTtcXG43MjI5OlxcdFxcdHUzMiBjb25uX293bmVyX25scG9ydGlkO1xcbjcyMzA6XFx0XFxuNzIzMTpcXHRcXHRzdHJ1Y3Qgd2lwaHlfd29yayBkaXNjb25uZWN0X3drO1xcbjcyMzI6XFx0XFx0dTggZGlzY29ubmVjdF9ic3NpZFtFVEhfQUxFTl07XFxuNzIzMzpcXHRcXG43MjM0OlxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgZXZlbnRfbGlzdDtcXG43MjM1OlxcdFxcdHNwaW5sb2NrX3QgZXZlbnRfbG9jaztcXG43MjM2OlxcdFxcbjcyMzc6XFx0XFx0dTggY29ubmVjdGVkOjE7XFxuNzIzODpcXHRcXG43MjM5OlxcdFxcdGJvb2wgcHM7XFxuNzI0MDpcXHRcXHRpbnQgcHNfdGltZW91dDtcXG43MjQxOlxcdFxcbjcyNDI6XFx0XFx0dTMyIHVuZXhwZWN0ZWRfbmxwb3J0aWQ7XFxuNzI0MzpcXHRcXG43MjQ0OlxcdFxcdHUzMiBvd25lcl9ubHBvcnRpZDtcXG43MjQ1OlxcdFxcdGJvb2wgbmxfb3duZXJfZGVhZDtcXG43MjQ2OlxcdFxcbjcyNDc6XFx0I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxuNzI0ODpcXHRcXHQvKiB3ZXh0IGRhdGEgKi9cXG43MjQ5OlxcdFxcdHN0cnVjdCB7XFxuNzI1MDpcXHRcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfaWJzc19wYXJhbXMgaWJzcztcXG43MjUxOlxcdFxcdFxcdHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyBjb25uZWN0O1xcbjcyNTI6XFx0XFx0XFx0c3RydWN0IGNmZzgwMjExX2NhY2hlZF9rZXlzICprZXlzO1xcbjcyNTM6XFx0XFx0XFx0Y29uc3QgdTggKmllO1xcbjcyNTQ6XFx0XFx0XFx0c2l6ZV90IGllX2xlbjtcXG43MjU1OlxcdFxcdFxcdHU4IGJzc2lkW0VUSF9BTEVOXTtcXG43MjU2OlxcdFxcdFxcdHU4IHByZXZfYnNzaWRbRVRIX0FMRU5dO1xcbjcyNTc6XFx0XFx0XFx0dTggc3NpZFtJRUVFODAyMTFfTUFYX1NTSURfTEVOXTtcXG43MjU4OlxcdFxcdFxcdHM4IGRlZmF1bHRfa2V5LCBkZWZhdWx0X21nbXRfa2V5O1xcbjcyNTk6XFx0XFx0XFx0Ym9vbCBwcmV2X2Jzc2lkX3ZhbGlkO1xcbjcyNjA6XFx0XFx0fSB3ZXh0O1xcbjcyNjE6XFx0I2VuZGlmXFxuNzI2MjpcXHRcXG43MjYzOlxcdFxcdHN0cnVjdCB3aXBoeV93b3JrIGNxbV9yc3NpX3dvcms7XFxuNzI2NDpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfY3FtX2NvbmZpZyBfX3JjdSAqY3FtX2NvbmZpZztcXG43MjY1OlxcdFxcbjcyNjY6XFx0XFx0c3RydWN0IGxpc3RfaGVhZCBwbXNyX2xpc3Q7XFxuNzI2NzpcXHRcXHRzcGlubG9ja190IHBtc3JfbG9jaztcXG43MjY4OlxcdFxcdHN0cnVjdCB3aXBoeV93b3JrIHBtc3JfZnJlZV93aztcXG43MjY5OlxcdFxcbjcyNzA6XFx0XFx0dW5zaWduZWQgbG9uZyB1bnByb3RfYmVhY29uX3JlcG9ydGVkO1xcbjcyNzE6XFx0XFxuNzI3MjpcXHRcXHR1bmlvbiB7XFxuNzI3MzpcXHRcXHRcXHRzdHJ1Y3Qge1xcbjcyNzQ6XFx0XFx0XFx0XFx0dTggY29ubmVjdGVkX2FkZHJbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTtcXG43Mjc1OlxcdFxcdFxcdFxcdHU4IHNzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTl07XFxuNzI3NjpcXHRcXHRcXHRcXHR1OCBzc2lkX2xlbjtcXG43Mjc3OlxcdFxcdFxcdH0gY2xpZW50O1xcbjcyNzg6XFx0XFx0XFx0c3RydWN0IHtcXG43Mjc5OlxcdFxcdFxcdFxcdGludCBiZWFjb25faW50ZXJ2YWw7XFxuNzI4MDpcXHRcXHRcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgcHJlc2V0X2NoYW5kZWY7XFxuNzI4MTpcXHRcXHRcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgY2hhbmRlZjtcXG43MjgyOlxcdFxcdFxcdFxcdHU4IGlkW0lFRUU4MDIxMV9NQVhfTUVTSF9JRF9MRU5dO1xcbjcyODM6XFx0XFx0XFx0XFx0dTggaWRfbGVuLCBpZF91cF9sZW47XFxuNzI4NDpcXHRcXHRcXHR9IG1lc2g7XFxuNzI4NTpcXHRcXHRcXHRzdHJ1Y3Qge1xcbjcyODY6XFx0XFx0XFx0XFx0c3RydWN0IGNmZzgwMjExX2NoYW5fZGVmIHByZXNldF9jaGFuZGVmO1xcbjcyODc6XFx0XFx0XFx0XFx0dTggc3NpZFtJRUVFODAyMTFfTUFYX1NTSURfTEVOXTtcXG43Mjg4OlxcdFxcdFxcdFxcdHU4IHNzaWRfbGVuO1xcbjcyODk6XFx0XFx0XFx0fSBhcDtcXG43MjkwOlxcdFxcdFxcdHN0cnVjdCB7XFxuNzI5MTpcXHRcXHRcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpjdXJyZW50X2JzcztcXG43MjkyOlxcdFxcdFxcdFxcdHN0cnVjdCBjZmc4MDIxMV9jaGFuX2RlZiBjaGFuZGVmO1xcbjcyOTM6XFx0XFx0XFx0XFx0aW50IGJlYWNvbl9pbnRlcnZhbDtcXG43Mjk0OlxcdFxcdFxcdFxcdHU4IHNzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTl07XFxuNzI5NTpcXHRcXHRcXHRcXHR1OCBzc2lkX2xlbjtcXG43Mjk2OlxcdFxcdFxcdH0gaWJzcztcXG43Mjk3OlxcdFxcdFxcdHN0cnVjdCB7XFxuNzI5ODpcXHRcXHRcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgY2hhbmRlZjtcXG43Mjk5OlxcdFxcdFxcdH0gb2NiO1xcbjczMDA6XFx0XFx0XFx0c3RydWN0IHtcXG43MzAxOlxcdFxcdFxcdFxcdHU4IGNsdXN0ZXJfaWRbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTtcXG43MzAyOlxcdFxcdFxcdFxcdHU4IG5fY2hhbm5lbHM7XFxuNzMwMzpcXHRcXHRcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgKmNoYW5kZWZzO1xcbjczMDQ6XFx0XFx0XFx0XFx0Ym9vbCBzY2hlZF91cGRhdGVfcGVuZGluZztcXG43MzA1OlxcdFxcdFxcdH0gbmFuO1xcbjczMDY6XFx0XFx0fSB1O1xcbjczMDc6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjQ3OjQ3LjE5MDQyMTc2MloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDI4ODI3MDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlIHdlIGdvLiBIZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBwcm92aWRlZCB0ZXh0IGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqTWlzc2luZyBWYXJpYWJsZT8gVGltZSB0byBJbnZlc3RpZ2F0ZS4qKlxuXG5IbW0sIHNvbWV0aGluZyBzZWVtcyBvZmYuIEkgd2FzIGV4cGVjdGluZyB0byBzZWUgYHZhbGlkX2xpbmtzYCBkZWZpbmVkIGluIHRoaXMgY29udGV4dCwgYnV0IGl0J3Mgbm90IGltbWVkaWF0ZWx5IGFwcGFyZW50LiBUaGF0J3MgYSByZWQgZmxhZy4gQmVmb3JlIGp1bXBpbmcgdG8gY29uY2x1c2lvbnMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbi4gTGV0J3MgZGlnIGRlZXBlciBhbmQgZ2V0IG1vcmUgY29udGV4dC4gSSdsbCByZWFkIGZ1cnRoZXIgdG8gc2VlIHdoZXJlIGB2YWxpZF9saW5rc2AgbWlnaHQgYmUsIGhvdyBpdCdzIGJlaW5nIHVzZWQsIG9yIGlmIGl0IGhhcyBhbm90aGVyIG5hbWUgYWx0b2dldGhlci4gQSBxdWljayBzY2FuIHdvbid0IGRvOyBJIG5lZWQgdGhlIGZ1bGwgcGljdHVyZSBiZWZvcmUgSSBtYWtlIGFueSBqdWRnbWVudHMuIFRoZSBjb2RlJ3MgcHJvYmFibHkganVzdCBub3Qgb2J2aW91cyBmcm9tIHRoaXMgb25lIHNuaXBwZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzMjEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjQ3OjUwLjYxOTI1MThaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc2ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L2NmZzgwMjExLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNzMwOCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjczMDg6XFx0XFx0c3RydWN0IHtcXG43MzA5OlxcdFxcdFxcdHU4IGFkZHJbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTtcXG43MzEwOlxcdFxcdFxcdHVuaW9uIHtcXG43MzExOlxcdFxcdFxcdFxcdHN0cnVjdCB7XFxuNzMxMjpcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgYmVhY29uX2ludGVydmFsO1xcbjczMTM6XFx0XFx0XFx0XFx0XFx0c3RydWN0IGNmZzgwMjExX2NoYW5fZGVmIGNoYW5kZWY7XFxuNzMxNDpcXHRcXHRcXHRcXHR9IGFwO1xcbjczMTU6XFx0XFx0XFx0XFx0c3RydWN0IHtcXG43MzE2OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmN1cnJlbnRfYnNzO1xcbjczMTc6XFx0XFx0XFx0XFx0fSBjbGllbnQ7XFxuNzMxODpcXHRcXHRcXHR9O1xcbjczMTk6XFx0XFxuNzMyMDpcXHRcXHRcXHRib29sIGNhY19zdGFydGVkO1xcbjczMjE6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBjYWNfc3RhcnRfdGltZTtcXG43MzIyOlxcdFxcdFxcdHVuc2lnbmVkIGludCBjYWNfdGltZV9tcztcXG43MzIzOlxcdFxcdH0gbGlua3NbSUVFRTgwMjExX01MRF9NQVhfTlVNX0xJTktTXTtcXG43MzI0OlxcdFxcdHUxNiB2YWxpZF9saW5rcztcXG43MzI1OlxcdFxcbjczMjY6XFx0XFx0dTMyIHJhZGlvX21hc2s7XFxuNzMyNzpcXHR9O1xcbjczMjg6XFx0XFxuNzMyOTpcXHRzdGF0aWMgaW5saW5lIGNvbnN0IHU4ICp3ZGV2X2FkZHJlc3Moc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldilcXG43MzMwOlxcdHtcXG43MzMxOlxcdFxcdGlmICh3ZGV2LVxcdTAwM2VuZXRkZXYpXFxuNzMzMjpcXHRcXHRcXHRyZXR1cm4gd2Rldi1cXHUwMDNlbmV0ZGV2LVxcdTAwM2VkZXZfYWRkcjtcXG43MzMzOlxcdFxcdHJldHVybiB3ZGV2LVxcdTAwM2VhZGRyZXNzO1xcbjczMzQ6XFx0fVxcbjczMzU6XFx0XFxuNzMzNjpcXHRzdGF0aWMgaW5saW5lIGJvb2wgd2Rldl9ydW5uaW5nKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpXFxuNzMzNzpcXHR7XFxuNzMzODpcXHRcXHRpZiAod2Rldi1cXHUwMDNlbmV0ZGV2KVxcbjczMzk6XFx0XFx0XFx0cmV0dXJuIG5ldGlmX3J1bm5pbmcod2Rldi1cXHUwMDNlbmV0ZGV2KTtcXG43MzQwOlxcdFxcdHJldHVybiB3ZGV2LVxcdTAwM2Vpc19ydW5uaW5nO1xcbjczNDE6XFx0fVxcbjczNDI6XFx0XFxuNzM0MzpcXHQvKipcXG43MzQ0OlxcdCAqIHdkZXZfcHJpdiAtIHJldHVybiB3aXBoeSBwcml2IGZyb20gd2lyZWxlc3NfZGV2XFxuNzM0NTpcXHQgKlxcbjczNDY6XFx0ICogQHdkZXY6IFRoZSB3aXJlbGVzcyBkZXZpY2Ugd2hvc2Ugd2lwaHkncyBwcml2IHBvaW50ZXIgdG8gcmV0dXJuXFxuNzM0NzpcXHQgKiBSZXR1cm46IFRoZSB3aXBoeSBwcml2IG9mIEB3ZGV2LlxcbjczNDg6XFx0ICovXFxuNzM0OTpcXHRzdGF0aWMgaW5saW5lIHZvaWQgKndkZXZfcHJpdihzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxcbjczNTA6XFx0e1xcbjczNTE6XFx0XFx0QlVHX09OKCF3ZGV2KTtcXG43MzUyOlxcdFxcdHJldHVybiB3aXBoeV9wcml2KHdkZXYtXFx1MDAzZXdpcGh5KTtcXG43MzUzOlxcdH1cXG43MzU0OlxcdFxcbjczNTU6XFx0LyoqXFxuNzM1NjpcXHQgKiB3ZGV2X2NoYW5kZWYgLSByZXR1cm4gY2hhbmRlZiBwb2ludGVyIGZyb20gd2lyZWxlc3NfZGV2XFxuNzM1NzpcXHQgKiBAd2RldjogdGhlIHdkZXZcXG43MzU4OlxcdCAqIEBsaW5rX2lkOiB0aGUgbGluayBJRCBmb3IgTUxPXFxuNzM1OTpcXHQgKlxcbjczNjA6XFx0ICogUmV0dXJuOiBUaGUgY2hhbmRlZiBkZXBlbmRpbmcgb24gdGhlIG1vZGUsIG9yICVOVUxMLlxcbjczNjE6XFx0ICovXFxuNzM2MjpcXHRzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgKndkZXZfY2hhbmRlZihzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbjczNjM6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBsaW5rX2lkKTtcXG43MzY0OlxcdFxcbjczNjU6XFx0c3RhdGljIGlubGluZSB2b2lkIFdBUk5fSU5WQUxJRF9MSU5LX0lEKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuNzM2NjpcXHRcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgbGlua19pZClcXG43MzY3OlxcdHtcXG43MzY4OlxcdFxcdFdBUk5fT04obGlua19pZCBcXHUwMDI2XFx1MDAyNiAhd2Rldi1cXHUwMDNldmFsaWRfbGlua3MpO1xcbjczNjk6XFx0XFx0V0FSTl9PTih3ZGV2LVxcdTAwM2V2YWxpZF9saW5rcyBcXHUwMDI2XFx1MDAyNlxcbjczNzA6XFx0XFx0XFx0ISh3ZGV2LVxcdTAwM2V2YWxpZF9saW5rcyBcXHUwMDI2IEJJVChsaW5rX2lkKSkpO1xcbjczNzE6XFx0fVxcbjczNzI6XFx0XFxuNzM3MzpcXHQjZGVmaW5lIGZvcl9lYWNoX3ZhbGlkX2xpbmsobGlua19pbmZvLCBsaW5rX2lkKVxcdFxcdFxcdFxcXFxcXG43Mzc0OlxcdFxcdGZvciAobGlua19pZCA9IDA7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbjczNzU6XFx0XFx0ICAgICBsaW5rX2lkIFxcdTAwM2MgKChsaW5rX2luZm8pLVxcdTAwM2V2YWxpZF9saW5rcyA/XFx0XFx0XFxcXFxcbjczNzY6XFx0XFx0XFx0XFx0QVJSQVlfU0laRSgobGlua19pbmZvKS1cXHUwMDNlbGlua3MpIDogMSk7XFx0XFxcXFxcbjczNzc6XFx0XFx0ICAgICBsaW5rX2lkKyspXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbjczNzg6XFx0XFx0XFx0aWYgKCEobGlua19pbmZvKS1cXHUwMDNldmFsaWRfbGlua3MgfHxcXHRcXHRcXFxcXFxuNzM3OTpcXHRcXHRcXHQgICAgKChsaW5rX2luZm8pLVxcdTAwM2V2YWxpZF9saW5rcyBcXHUwMDI2IEJJVChsaW5rX2lkKSkpXFxuNzM4MDpcXHRcXG43MzgxOlxcdC8qKlxcbjczODI6XFx0ICogRE9DOiBVdGlsaXR5IGZ1bmN0aW9uc1xcbjczODM6XFx0ICpcXG43Mzg0OlxcdCAqIGNmZzgwMjExIG9mZmVycyBhIG51bWJlciBvZiB1dGlsaXR5IGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSB1c2VmdWwuXFxuNzM4NTpcXHQgKi9cXG43Mzg2OlxcdFxcbjczODc6XFx0LyoqXFxuNzM4ODpcXHQgKiBpZWVlODAyMTFfY2hhbm5lbF9lcXVhbCAtIGNvbXBhcmUgdHdvIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbFxcbjczODk6XFx0ICpcXG43MzkwOlxcdCAqIEBhOiAxc3Qgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsXFxuNzM5MTpcXHQgKiBAYjogMm5kIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbFxcbjczOTI6XFx0ICogUmV0dXJuOiB0cnVlIGlmIGNlbnRlciBmcmVxdWVuY3kgb2YgQGEgPT0gQGJcXG43MzkzOlxcdCAqL1xcbjczOTQ6XFx0c3RhdGljIGlubGluZSBib29sXFxuNzM5NTpcXHRpZWVlODAyMTFfY2hhbm5lbF9lcXVhbChzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmEsXFxuNzM5NjpcXHRcXHRcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmIpXFxuNzM5NzpcXHR7XFxuNzM5ODpcXHRcXHRyZXR1cm4gKGEtXFx1MDAzZWNlbnRlcl9mcmVxID09IGItXFx1MDAzZWNlbnRlcl9mcmVxIFxcdTAwMjZcXHUwMDI2XFxuNzM5OTpcXHRcXHRcXHRhLVxcdTAwM2VmcmVxX29mZnNldCA9PSBiLVxcdTAwM2VmcmVxX29mZnNldCk7XFxuNzQwMDpcXHR9XFxuNzQwMTpcXHRcXG43NDAyOlxcdC8qKlxcbjc0MDM6XFx0ICogaWVlZTgwMjExX2NoYW5uZWxfdG9fa2h6IC0gY29udmVydCBpZWVlODAyMTFfY2hhbm5lbCB0byBmcmVxdWVuY3kgaW4gS0h6XFxuNzQwNDpcXHQgKiBAY2hhbjogc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIHRvIGNvbnZlcnRcXG43NDA1OlxcdCAqIFJldHVybjogVGhlIGNvcnJlc3BvbmRpbmcgZnJlcXVlbmN5IChpbiBLSHopXFxuNzQwNjpcXHQgKi9cXG43NDA3OlxcdHN0YXRpYyBpbmxpbmUgdTMyXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjQ3OjUwLjYxOTYzMjE1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMTUxNDY5OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVGhpbmtpbmcgVGhyb3VnaCBMaW5rIE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIEkgc2VlIGB2YWxpZF9saW5rc2AgZGVjbGFyZWQgYXMgYSBgdTE2YC4gU2VlbXMgc3RhbmRhcmQgZW5vdWdoOyB1c2luZyBhIDE2LWJpdCB1bnNpZ25lZCBpbnRlZ2VyIHRvIHJlcHJlc2VudCBhIGNvdW50IG9yIGFuIGluZGV4IGlzIHByZXR0eSBjb21tb24gYW5kIHByb2JhYmx5IGVmZmljaWVudCBmb3Igd2hhdGV2ZXIgdGhpcyBhcHBsaWNhdGlvbiBpcy4gVGhlbiwgSSBzZWUgYGxpbmtzYCBpcyBhbiBhcnJheSBhbmQgaXRzIHNpemUgaXMgZGVmaW5lZCBieSBgSUVFRTgwMjExX01MRF9NQVhfTlVNX0xJTktTYC4gVGhhdCdzIHRoZSBrZXkgcXVlc3Rpb24gbm93OiBXaGF0IGV4YWN0bHkgKmlzKiBgSUVFRTgwMjExX01MRF9NQVhfTlVNX0xJTktTYD8gSSBuZWVkIHRvIGtub3cgdGhlIG1heGltdW0gbnVtYmVyIG9mIGxpbmtzIHRoaXMgc3lzdGVtIGlzIGRlc2lnbmVkIHRvIGhhbmRsZS4gVGhhdCB2YWx1ZSBpcyBjcnVjaWFsOyBpdCBkaWN0YXRlcyB0aGUgdXBwZXIgYm91bmQgZm9yIHdoYXQgY2FuIGJlIHN0b3JlZCBpbiB0aGUgYGxpbmtzYCBhcnJheS4gV2l0aG91dCBrbm93aW5nIHRoYXQgY29uc3RhbnQsIEkgY2FuJ3QgZGV0ZXJtaW5lIHRoZSBtZW1vcnkgZm9vdHByaW50LCBvciBhc3Nlc3MgaG93IGVmZmljaWVudGx5IHRoZSBzeXN0ZW0gd2lsbCBiZWhhdmUgdW5kZXIgaGVhdnkgbG9hZC4gSSdtIGdvaW5nIHRvIHRyYWNrIHRoYXQgZG93biBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMzksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjQ3OjU0LjYzNDc4MjMyMloiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzOTEwMDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmUgSUVFRTgwMjExX01MRF9NQVhfTlVNX0xJTktTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaWVlZTgwMjExLWVodC5oPTQ0NT1lbnVtIGllZWU4MDIxMV9wcm90ZWN0ZWRfZWh0X2FjdGlvbmNvZGUge1xcbi0tXFxuaW5jbHVkZS9saW51eC9pZWVlODAyMTEtZWh0LmgtNDYxLS8qIG11bHRpLWxpbmsgZGV2aWNlICovXFxuaW5jbHVkZS9saW51eC9pZWVlODAyMTEtZWh0Lmg6NDYyOiNkZWZpbmUgSUVFRTgwMjExX01MRF9NQVhfTlVNX0xJTktTXFx0MTVcXG5pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS1laHQuaC00NjMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjQ3OjU0Ljc3ODY5OTU3N1oiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTkwMDYwNDM1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE91dC1vZi1Cb3VuZHMgUmVhZCBpbiBXaXJlbGVzcyBEZXZpY2UgTGluayBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIHdpcmVsZXNzIGRyaXZlciBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgYGxpbmtfaWRgIGlzIGxpbWl0ZWQgdG8gMTUgd2hlbiBgd2Rldi1cdTAwM2V2YWxpZF9saW5rc2AgaXMgdXNlZCBiZWNhdXNlIG9mIHRoZSBgQklUKGxpbmtfaWQpYCBjaGVjaywgcmlnaHQ/ICBCdXQgdGhlbiBJIHJlbWVtYmVyZWQgdGhhdCBgQklUYCB1c2VzIGFuIHVuc2lnbmVkIGxvbmcsIHdoaWNoIGNhbiBoYW5kbGUgc2hpZnRzIHVwIHRvIDYzLCBub3QganVzdCAzMi4gU28gYSBgbGlua19pZGAgb2YgMTYgbWVhbnMgYEJJVCgxNilgIGlzIGAweDEwMDAwYC4gU2luY2UgYHZhbGlkX2xpbmtzYCBpcyBhIGB1MTZgLCB0aGUgYml0d2lzZSBBTkQgb3BlcmF0aW9uIGB2YWxpZF9saW5rcyBcdTAwMjYgQklUKDE2KWAgd291bGQgYWx3YXlzIHJlc3VsdCBpbiB6ZXJvLiBDb25zZXF1ZW50bHksIHRoZSBmdW5jdGlvbiB3b3VsZCByZXR1cm4gYC1FTk9MSU5LYC5cblxuVGhlbiBpdCBoaXQgbWU6IHRoZSBSRUFMIGJ1ZyBpcyB0aGF0IHRoZSBgbGlua19pZGAgaXMgdXNlZCB0byBpbmRleCB0aGUgYHdkZXYtXHUwMDNlbGlua3NgIGFycmF5LCB3aGljaCBvbmx5IGhhcyBhIHNpemUgb2YgMTUhIEJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBgbGlua19pZGAgd2Fzbid0IHZhbGlkYXRlZCAqYmVmb3JlKiB0aGUgc3dpdGNoIHN0YXRlbWVudC4gSW5zdGVhZCwgdGhlIHZhbGlkYXRpb24gY2FtZSBsYXRlciBpbiB0aGUgZnVuY3Rpb24sIEFGVEVSIHRoZSBhcnJheSBpbmRleCB3YXMgYmVpbmcgdXNlZC5cblxuVGhlIGNvZGUgcmV2ZWFscyB0aGUgcHJvYmxlbTogd2hlbiBgd2Rldi1cdTAwM2V2YWxpZF9saW5rc2AgaXMgemVybywgYGxpbmtfaWRgIGlzIHplcm8uIFdoZW4gYHdkZXYtXHUwMDNldmFsaWRfbGlua3NgIGlzIG5vdCB6ZXJvLCBgbGlua19pZGAgYmVjb21lcyBgcGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5saW5rX2lkYC4gSW1wb3J0YW50bHksIGJlZm9yZSB0aGUgcGF0Y2gsIHRoZXJlIHdhcyBubyB2YWxpZGF0aW9uIG9mIGBwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWRgICpiZWZvcmUqIGl0IHdhcyB1c2VkIHRvIGluZGV4IHRoZSBhcnJheS4gVGhlIHZhbGlkYXRpb24gd2FzIGRvbmUgYXQgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24sIHRvbyBsYXRlLiBTbyBgbGlua19pZGAgY291bGQgYmUgYW55dGhpbmchIEl0J3MgcGFyc2VkIGZyb20gYGluZm8tXHUwMDNlYXR0cnNgIHZpYSBgbmw4MDIxMV9saW5rX2lkX29yX2ludmFsaWQoaW5mby1cdTAwM2VhdHRycylgLiBJZiBpdCdzIGludmFsaWQsIGl0J3MgLTEuIElmIGl0J3MgdmFsaWQsIGl0J3MgYSBgdThgLCB3aGljaCBtZWFucyBpdCBjYW4gYmUgYW55dGhpbmcgZnJvbSAwIHRvIDI1NS5cblxuU28gaWYgYGxpbmtfaWRgIGlzIHVwIHRvIDI1NSwgdXNpbmcgaXQgdG8gaW5kZXggYHdkZXYtXHUwMDNlbGlua3NbbGlua19pZF1gIHdpbGwgY2F1c2UgYW4gb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3MhIGB3ZGV2LVx1MDAzZWxpbmtzYCBpcyBzaXplIDE1ISBUaGlzIGlzIGEgdGV4dGJvb2sgb3V0LW9mLWJvdW5kcyByZWFkIVxuXG5UaGUgY29kZSByZWFkcyB0aGUgYGJlYWNvbl9pbnRlcnZhbGAgZmllbGQ6IGBpZiAoIXdkZXYtXHUwMDNlbGlua3NbbGlua19pZF0uYXAuYmVhY29uX2ludGVydmFsKWAuIEFuZCBzaW5jZSBgc3RydWN0IHdpcmVsZXNzX2RldmAgaXMgdXN1YWxseSBhbGxvY2F0ZWQgb24gdGhlIGhlYXAgKHBlcmhhcHMgYXMgcGFydCBvZiBgc3RydWN0IG5ldF9kZXZpY2VgIG9yIHNpbWlsYXIsIG9yIGJ5IGBremFsbG9jYCksIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBjb3VsZCBwb3RlbnRpYWxseSBsZWFkIHRvIHJlYWRpbmcgb3RoZXIgaGVhcCBkYXRhLCBhbHRob3VnaCwgaW4gdGhpcyBjYXNlLCBpdCdzIGp1c3QgY2hlY2tpbmcgaWYgaXQncyB6ZXJvLiBJZiBpdCdzIHplcm8sIGl0IHJldHVybnMgYC1FTkVURE9XTmA7IG90aGVyd2lzZSwgaXQgY29udGludWVzLlxuXG5UaGFua2Z1bGx5LCB0aGlzIGlzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCwgYW5kIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIHNob3VsZCBjYXRjaCBpdC4gSXQgZGV0ZWN0cyBleGFjdGx5IHRoZXNlIHR5cGVzIG9mIG1lbW9yeSB2aW9sYXRpb25zLiBJIGRvbid0IHRoaW5rIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGEgcHJpbWFyeSBpc3N1ZSBoZXJlOyBpdCdzIHRoZSBvdXQtb2YtYm91bmRzIHJlYWQgaXRzZWxmLlxuXG5XYWl0LCB3aGF0IGlmIGBsaW5rX2lkYCBpcyBuZWdhdGl2ZT8gU2luY2UgYHBhcmFtcy5saW5rX3N0YV9wYXJhbXMubGlua19pZGAgaXMgYW4gYGludGAsIGlmIGl0J3MgLTEgKGludmFsaWQpLCBhbmQgaWYgYHdkZXYtXHUwMDNldmFsaWRfbGlua3NgIGlzIG5vdCB6ZXJvLCB0aGVuIGBsaW5rX2lkYCBiZWNvbWVzIC0xLiBUaGUgc3Vic2VxdWVudCBhY2Nlc3MgYHdkZXYtXHUwMDNlbGlua3NbLTFdYCBpcyBhbm90aGVyIG91dC1vZi1ib3VuZHMgcmVhZCwgdGhpcyB0aW1lIGFuIHVuZGVyZmxvdy4gS0FTQU4gY2F0Y2hlcyBpdC5cblxuVGhlIHBhdGNoIGZpeGVzIHRoaXMgYnkgbW92aW5nIHRoZSB2YWxpZGF0aW9uIG9mIGBsaW5rX2lkYCAqYmVmb3JlKiB0aGUgc3dpdGNoIHN0YXRlbWVudC4gU28gbm93IGBsaW5rX2lkYCBpcyB2YWxpZGF0ZWQgdG8gYmUgYFx1MDAzZT0gMGAgYW5kIGBCSVQobGlua19pZClgIGlzIGluIGB2YWxpZF9saW5rc2AuIFNpbmNlIGB2YWxpZF9saW5rc2AgaXMgYSBgdTE2YCwgYEJJVChsaW5rX2lkKWAgY2FuIG9ubHkgYmUgbm9uLXplcm8gaWYgYGxpbmtfaWRgIGlzIGxlc3MgdGhhbiAxNi4gU28gYGxpbmtfaWRgIGlzIG5vdyBib3VuZCBmcm9tIDAgdG8gMTUuIFRoaXMgcGVyZmVjdGx5IGFkZHJlc3NlcyB0aGUgb3V0LW9mLWJvdW5kcyByZWFkLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSBuZWVkIHRvIGNoZWNrIGlmIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludm9sdmVkLiBJcyB0aGUgYHBhcmFtc2AgdmFyaWFibGUgaW5pdGlhbGl6ZWQ/IGBwYXJhbXNgIGlzIGEgbG9jYWwgdmFyaWFibGU6IGBzdHJ1Y3Qgc3RhdGlvbl9wYXJhbWV0ZXJzIHBhcmFtcztgLiBBbmQgSSBuZWVkIHRvIGtub3cgd2hldGhlciB0aGUgdmFyaWFibGUgaXMgaW5pdGlhbGl6ZWQuIEkgdGhpbmsgSSBoYXZlIGFjY291bnRlZCBmb3IgYWxsIHNjZW5hcmlvcyBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0OTEsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjQ4OjEwLjY3OTMwNzgwNloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjI0NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3dpcmVsZXNzL25sODAyMTEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MTc0LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI5MTc0OlxcdHN0YXRpYyBpbnQgbmw4MDIxMV9uZXdfc3RhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbjkxNzU6XFx0e1xcbjkxNzY6XFx0XFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby1cXHUwMDNldXNlcl9wdHJbMF07XFxuOTE3NzpcXHRcXHRpbnQgZXJyLCBsaW5rX2lkO1xcbjkxNzg6XFx0XFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGluZm8tXFx1MDAzZXVzZXJfcHRyWzFdO1xcbjkxNzk6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHdkZXYtXFx1MDAzZW5ldGRldjtcXG45MTgwOlxcdFxcdHN0cnVjdCBzdGF0aW9uX3BhcmFtZXRlcnMgcGFyYW1zO1xcbjkxODE6XFx0XFx0dTggKm1hY19hZGRyID0gTlVMTDtcXG45MTgyOlxcdFxcdHUzMiBhdXRoX2Fzc29jID0gQklUKE5MODAyMTFfU1RBX0ZMQUdfQVVUSEVOVElDQVRFRCkgfFxcbjkxODM6XFx0XFx0XFx0XFx0IEJJVChOTDgwMjExX1NUQV9GTEFHX0FTU09DSUFURUQpO1xcbjkxODQ6XFx0XFxuOTE4NTpcXHRcXHRtZW1zZXQoXFx1MDAyNnBhcmFtcywgMCwgc2l6ZW9mKHBhcmFtcykpO1xcbjkxODY6XFx0XFxuOTE4NzpcXHRcXHRpZiAoIWRldiBcXHUwMDI2XFx1MDAyNiB3ZGV2LVxcdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTkFOKVxcbjkxODg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuOTE4OTpcXHRcXG45MTkwOlxcdFxcdGlmICghcmRldi1cXHUwMDNlb3BzLVxcdTAwM2VhZGRfc3RhdGlvbilcXG45MTkxOlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG45MTkyOlxcdFxcbjkxOTM6XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUFDXSlcXG45MTk0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjkxOTU6XFx0XFxuOTE5NjpcXHRcXHRpZiAod2Rldi1cXHUwMDNlaWZ0eXBlID09IE5MODAyMTFfSUZUWVBFX05BTiB8fFxcbjkxOTc6XFx0XFx0ICAgIHdkZXYtXFx1MDAzZWlmdHlwZSA9PSBOTDgwMjExX0lGVFlQRV9OQU5fREFUQSkge1xcbjkxOTg6XFx0XFx0XFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFfU1VQUE9SVEVEX1JBVEVTXSlcXG45MTk5OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjkyMDA6XFx0XFx0XFx0aWYgKHdkZXYtXFx1MDAzZWlmdHlwZSA9PSBOTDgwMjExX0lGVFlQRV9OQU5fREFUQSkge1xcbjkyMDE6XFx0XFx0XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTkFOX05NSV9NQUNdKVxcbjkyMDI6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuOTIwMzpcXHRcXG45MjA0OlxcdFxcdFxcdFxcdC8qIE9ubHkgTk1JIHN0YXRpb25zIHJlY2VpdmUgdGhlIEhUL1ZIVC9IRSBjYXBhYmlsaXRpZXMgKi9cXG45MjA1OlxcdFxcdFxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfSFRfQ0FQQUJJTElUWV0gfHxcXG45MjA2OlxcdFxcdFxcdFxcdCAgICBpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfVkhUX0NBUEFCSUxJVFldIHx8XFxuOTIwNzpcXHRcXHRcXHRcXHQgICAgaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0hFX0NBUEFCSUxJVFldKVxcbjkyMDg6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuOTIwOTpcXHRcXHRcXHR9XFxuOTIxMDpcXHRcXHR9IGVsc2Uge1xcbjkyMTE6XFx0XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX0xJU1RFTl9JTlRFUlZBTF0pXFxuOTIxMjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG45MjEzOlxcdFxcbjkyMTQ6XFx0XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX1NVUFBPUlRFRF9SQVRFU10pXFxuOTIxNTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG45MjE2OlxcdFxcbjkyMTc6XFx0XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1RBX0FJRF0gXFx1MDAyNlxcdTAwMjZcXG45MjE4OlxcdFxcdFxcdCAgICAhaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1BFRVJfQUlEXSlcXG45MjE5OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjkyMjA6XFx0XFx0fVxcbjkyMjE6XFx0XFxuOTIyMjpcXHRcXHRwYXJhbXMubGlua19zdGFfcGFyYW1zLmxpbmtfaWQgPVxcbjkyMjM6XFx0XFx0XFx0bmw4MDIxMV9saW5rX2lkX29yX2ludmFsaWQoaW5mby1cXHUwMDNlYXR0cnMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTo0ODoxMC42ODAwMzM0MzdaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEyMTYzNDcxOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBTZXNzaW9uIE5vdCBOZWVkZWQqKlxuXG5Pa2F5LCBzbyBoZXJlJ3MgdGhlIGJyZWFrZG93biBvZiBteSB0aGlua2luZy4gSSd2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IGFkZHJlc3NlcyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5LiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNvbnNpZGVyIEtNU0FOLCBidXQgbGV0J3MgYmUgbWV0aG9kaWNhbC5cblxuRmlyc3QsIEkgc2VlIGBwYXJhbXNgIGlzIGluaXRpYWxpemVkIHdpdGggYG1lbXNldGAsIHNvIHRoZXJlJ3MgYWJzb2x1dGVseSBubyBpc3N1ZSB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmUuIFRoYXQgcnVsZXMgb3V0IG9uZSBwb3RlbnRpYWwgYXJlYSB3aGVyZSBLTVNBTiBzaGluZXMuXG5cblRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIGJvaWxzIGRvd24gdG8gYW4gb3V0LW9mLWJvdW5kcyByZWFkIGZyb20gYHdkZXYtXHUwMDNlbGlua3NbbGlua19pZF1gLiBUaGlzIGlzIHByZWNpc2VseSB0aGUga2luZCBvZiB0aGluZyBLQVNBTiBpcyBidWlsdCB0byBjYXRjaC4gV2UncmUgdGFsa2luZyBhYm91dCBhY2Nlc3NpbmcgbWVtb3J5IG91dHNpZGUgdGhlIGFsbG9jYXRlZCBib3VuZGFyaWVzIG9mIGFuIGFycmF5LCB3aGljaCBpcyBhIGNsYXNzaWMgS0FTQU4gc2NlbmFyaW8uXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgS01TQU4gdnMuIEtBU0FOIHJ1bGVzOiBLQVNBTiBuYWlscyBkb3duIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIHVzZS1hZnRlci1mcmVlLCB3aGlsZSBLTVNBTiBmb2N1c2VzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLiBUaGlzIHZ1bG5lcmFiaWxpdHkgZG9lc24ndCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGEgd2F5IEtBU0FOIG1pc3Nlcywgbm9yIGlzIHRoZXJlIGEga2VybmVsIGluZm9ybWF0aW9uIGxlYWsuIEl0J3MgYSBzdHJhaWdodC11cCBpbmRleCBvdXQgb2YgYm91bmRzLlxuXG5JbiBteSB2aWV3LCBLQVNBTiB3aWxsIGRldGVjdCB0aGlzIG91dC1vZi1ib3VuZHMgYWNjZXNzIGp1c3QgZmluZS4gVGhlIHBhdGNoJ3MgaW1wYWN0IGlzIHRoYXQgaXQgZml4ZXMgYSBzaXR1YXRpb24gd2hlcmUgYGxpbmtfaWRgIGlzIG5vdCB2YWxpZGF0ZWQgYW5kIGNhbiBiZSB1c2VkIHRvIHJlYWQgYmV5b25kIHRoZSBib3VuZGFyaWVzIG9mIHRoZSBgd2Rldi1cdTAwM2VsaW5rc2AgYXJyYXkuIE5vIGBJRUVFODAyMTFfTUxEX01BWF9OVU1fTElOS1NgIGNoZWNrIG9yIG5lZ2F0aXZlIHZhbHVlIGNoZWNrIG9uIGxpbmtfaWQuIFRoaXMgaXMgYSBjbGFzc2ljIGV4YW1wbGUgb2YgYW4gb3V0LW9mLWJvdW5kcyByZWFkLiBUaGUgZmFjdCB0aGF0IGBwYXJhbXNgIGlzIGZ1bGx5IGluaXRpYWxpemVkIG1ha2VzIHRoaXMgZXZlbiBtb3JlIGNsZWFyLlxuXG5NeSBjb25jbHVzaW9uPyBUaGVyZSdzIG5vIHZhbHVlIGluIGRlZGljYXRpbmcgdGltZSB0byBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBoZXJlLiBLQVNBTiBpcyB0aGUgcmlnaHQgdG9vbCBmb3IgdGhlIGpvYi4gTm8gTmVlZCBmb3IgS01TQU4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjY1LCJPdXRwdXRUb2tlbnMiOjIzMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjQ4OjIxLjg5NjM4NDQ0M1oiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHZ1bG5lcmFiaWxpdHkgaW4gYG5sODAyMTFfbmV3X3N0YXRpb24oKWAuIEJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBgbGlua19pZGAgZXh0cmFjdGVkIGZyb20gbmV0bGluayBhdHRyaWJ1dGVzIHdhcyBub3QgdmFsaWRhdGVkIGFnYWluc3QgdGhlIG1heGltdW0gbnVtYmVyIG9mIGxpbmtzIG9yIGNoZWNrZWQgZm9yIG5lZ2F0aXZlIHZhbHVlcyBiZWZvcmUgYmVpbmcgdXNlZCBhcyBhbiBpbmRleCB0byBhY2Nlc3MgdGhlIGB3ZGV2LVxcdTAwM2VsaW5rc1tsaW5rX2lkXWAgYXJyYXkuIFRoaXMgYWxsb3dlZCBhbiBhdHRhY2tlciB0byB0cmlnZ2VyIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB3aGVuIGNoZWNraW5nIGB3ZGV2LVxcdTAwM2VsaW5rc1tsaW5rX2lkXS5hcC5iZWFjb25faW50ZXJ2YWxgLlxcblxcbk91dC1vZi1ib3VuZHMgYWNjZXNzZXMgKGJvdGggcmVhZHMgYW5kIHdyaXRlcykgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgYHBhcmFtc2Agc3RydWN0dXJlIGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgdmlhIGBtZW1zZXQoXFx1MDAyNnBhcmFtcywgMCwgc2l6ZW9mKHBhcmFtcykpO2AsIGFuZCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2VzIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MgaW52b2x2ZWQgaW4gdGhpcyBidWcuIFNpbmNlIEtBU0FOIGlzIGZ1bGx5IGNhcGFibGUgb2YgY2F0Y2hpbmcgdGhpcyBvdXQtb2YtYm91bmRzIHJlYWQsIHRoZXJlIGlzIG5vIG5lZWQgdG8gcnVuIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eSBpbiBgbmw4MDIxMV9uZXdfc3RhdGlvbigpYC4gQmVmb3JlIHRoZSBwYXRjaCwgdGhlIGBsaW5rX2lkYCBleHRyYWN0ZWQgZnJvbSBuZXRsaW5rIGF0dHJpYnV0ZXMgd2FzIG5vdCB2YWxpZGF0ZWQgYWdhaW5zdCB0aGUgbWF4aW11bSBudW1iZXIgb2YgbGlua3Mgb3IgY2hlY2tlZCBmb3IgbmVnYXRpdmUgdmFsdWVzIGJlZm9yZSBiZWluZyB1c2VkIGFzIGFuIGluZGV4IHRvIGFjY2VzcyB0aGUgYHdkZXYtXFx1MDAzZWxpbmtzW2xpbmtfaWRdYCBhcnJheS4gVGhpcyBhbGxvd2VkIGFuIGF0dGFja2VyIHRvIHRyaWdnZXIgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHdoZW4gY2hlY2tpbmcgYHdkZXYtXFx1MDAzZWxpbmtzW2xpbmtfaWRdLmFwLmJlYWNvbl9pbnRlcnZhbGAuXFxuXFxuT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyAoYm90aCByZWFkcyBhbmQgd3JpdGVzKSBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBgcGFyYW1zYCBzdHJ1Y3R1cmUgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZCB2aWEgYG1lbXNldChcXHUwMDI2cGFyYW1zLCAwLCBzaXplb2YocGFyYW1zKSk7YCwgYW5kIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZXMgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBpbnZvbHZlZCBpbiB0aGlzIGJ1Zy4gU2luY2UgS0FTQU4gaXMgZnVsbHkgY2FwYWJsZSBvZiBjYXRjaGluZyB0aGlzIG91dC1vZi1ib3VuZHMgcmVhZCwgdGhlcmUgaXMgbm8gbmVlZCB0byBydW4gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowr4kvc[1] Phase: Succeeded StartedAt: 2026-08-13 09:48:32 +0000 UTC FinishedAt: 2026-08-13 09:48:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4kvc[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-13 09:48:32 +0000 UTC FinishedAt: 2026-08-13 09:48:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4kvc[2] Phase: Succeeded StartedAt: 2026-08-13 09:48:32 +0000 UTC FinishedAt: 2026-08-13 13:30:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4kvc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"256a0130-8f99-4e7d-8116-32518d856b6f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-13 09:48:32 +0000 UTC FinishedAt: 2026-08-13 13:30:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_station"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"256a0130-8f99-4e7d-8116-32518d856b6f","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-workflowr4kvc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"256a0130-8f99-4e7d-8116-32518d856b6f","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-08-13 09:48:32 +0000 UTC FinishedAt: 2026-08-13 09:48:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4kvc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"256a0130-8f99-4e7d-8116-32518d856b6f","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-08-13 09:48:32 +0000 UTC FinishedAt: 2026-08-13 09:48:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"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-workflowr4kvc/series-workflowr4kvc-convert-artifact-642517455/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr4kvc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"256a0130-8f99-4e7d-8116-32518d856b6f","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-08-13 09:48:42 +0000 UTC FinishedAt: 2026-08-13 10:05:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4kvc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"256a0130-8f99-4e7d-8116-32518d856b6f","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-08-13 09:48:42 +0000 UTC FinishedAt: 2026-08-13 10:05:11 +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:*b391ccab-8de0-4a5d-9d38-07f6aee9fb3c,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-workflowr4kvc/series-workflowr4kvc-convert-artifact-642517455/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": "7295f207-1c6c-4fa1-a8fd-49d34d9a19b6", "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-workflowr4kvc/series-workflowr4kvc-build-action-3889092885/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr4kvc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"256a0130-8f99-4e7d-8116-32518d856b6f","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-08-13 09:48:42 +0000 UTC FinishedAt: 2026-08-13 10:05:01 +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:*b391ccab-8de0-4a5d-9d38-07f6aee9fb3c,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-workflowr4kvc/series-workflowr4kvc-convert-artifact-642517455/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": "7295f207-1c6c-4fa1-a8fd-49d34d9a19b6", "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-workflowr4kvc/series-workflowr4kvc-build-action-3889092885/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr4kvc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"256a0130-8f99-4e7d-8116-32518d856b6f","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-08-13 10:05:11 +0000 UTC FinishedAt: 2026-08-13 10:05:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4kvc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"256a0130-8f99-4e7d-8116-32518d856b6f","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-08-13 10:05:11 +0000 UTC FinishedAt: 2026-08-13 10:05:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4kvc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"256a0130-8f99-4e7d-8116-32518d856b6f","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-08-13 10:05:11 +0000 UTC FinishedAt: 2026-08-13 10:05:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4kvc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"256a0130-8f99-4e7d-8116-32518d856b6f","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-08-13 10:05:11 +0000 UTC FinishedAt: 2026-08-13 10:05:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"256a0130-8f99-4e7d-8116-32518d856b6f","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-workflowr4kvc/series-workflowr4kvc-convert-artifact-2472241182/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr4kvc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"256a0130-8f99-4e7d-8116-32518d856b6f","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-08-13 10:05:21 +0000 UTC FinishedAt: 2026-08-13 10:07:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4kvc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"256a0130-8f99-4e7d-8116-32518d856b6f","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-08-13 10:05:21 +0000 UTC FinishedAt: 2026-08-13 10:07:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7295f207-1c6c-4fa1-a8fd-49d34d9a19b6,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-workflowr4kvc/series-workflowr4kvc-build-action-3889092885/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-workflowr4kvc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"256a0130-8f99-4e7d-8116-32518d856b6f","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-08-13 10:07:41 +0000 UTC FinishedAt: 2026-08-13 10:07:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4kvc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"256a0130-8f99-4e7d-8116-32518d856b6f","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-08-13 10:07:41 +0000 UTC FinishedAt: 2026-08-13 10:07:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4kvc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"256a0130-8f99-4e7d-8116-32518d856b6f","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-08-13 10:07:41 +0000 UTC FinishedAt: 2026-08-13 10:23:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4kvc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"256a0130-8f99-4e7d-8116-32518d856b6f","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-08-13 10:07:41 +0000 UTC FinishedAt: 2026-08-13 10:23:54 +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:*b391ccab-8de0-4a5d-9d38-07f6aee9fb3c,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-workflowr4kvc/series-workflowr4kvc-convert-artifact-2472241182/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": "70ef5d42-2ff0-485e-a6ec-c6adff3b7ee3", "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-workflowr4kvc/series-workflowr4kvc-build-action-2606044658/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr4kvc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"256a0130-8f99-4e7d-8116-32518d856b6f","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-08-13 10:07:41 +0000 UTC FinishedAt: 2026-08-13 10:23:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b391ccab-8de0-4a5d-9d38-07f6aee9fb3c,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-workflowr4kvc/series-workflowr4kvc-convert-artifact-2472241182/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": "70ef5d42-2ff0-485e-a6ec-c6adff3b7ee3", "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-workflowr4kvc/series-workflowr4kvc-build-action-2606044658/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr4kvc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"256a0130-8f99-4e7d-8116-32518d856b6f","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-08-13 10:23:54 +0000 UTC FinishedAt: 2026-08-13 10:23:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4kvc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"256a0130-8f99-4e7d-8116-32518d856b6f","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-08-13 10:23:54 +0000 UTC FinishedAt: 2026-08-13 10:23:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4kvc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"256a0130-8f99-4e7d-8116-32518d856b6f","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-08-13 10:23:54 +0000 UTC FinishedAt: 2026-08-13 10:25:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4kvc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"256a0130-8f99-4e7d-8116-32518d856b6f","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-08-13 10:23:54 +0000 UTC FinishedAt: 2026-08-13 10:25:37 +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:*70ef5d42-2ff0-485e-a6ec-c6adff3b7ee3,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-workflowr4kvc/series-workflowr4kvc-build-action-2606044658/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-workflowr4kvc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"256a0130-8f99-4e7d-8116-32518d856b6f","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-08-13 10:25:47 +0000 UTC FinishedAt: 2026-08-13 13:30:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4kvc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"256a0130-8f99-4e7d-8116-32518d856b6f","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-08-13 10:25:47 +0000 UTC FinishedAt: 2026-08-13 13:30:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_station"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*7295f207-1c6c-4fa1-a8fd-49d34d9a19b6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*70ef5d42-2ff0-485e-a6ec-c6adff3b7ee3,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-workflowr4kvc/series-workflowr4kvc-build-action-3889092885/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-workflowr4kvc/series-workflowr4kvc-build-action-2606044658/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowr4kvc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"256a0130-8f99-4e7d-8116-32518d856b6f","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-08-13 10:25:47 +0000 UTC FinishedAt: 2026-08-13 10:25:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4kvc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"256a0130-8f99-4e7d-8116-32518d856b6f","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-08-13 10:25:47 +0000 UTC FinishedAt: 2026-08-13 10:25:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_station"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowr4kvc/series-workflowr4kvc-convert-artifact-3658064931/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr4kvc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"256a0130-8f99-4e7d-8116-32518d856b6f","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-08-13 10:25:47 +0000 UTC FinishedAt: 2026-08-13 10:25:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4kvc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"256a0130-8f99-4e7d-8116-32518d856b6f","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-08-13 10:25:47 +0000 UTC FinishedAt: 2026-08-13 10:25:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4kvc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"256a0130-8f99-4e7d-8116-32518d856b6f","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-08-13 10:25:47 +0000 UTC FinishedAt: 2026-08-13 10:25:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4kvc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"256a0130-8f99-4e7d-8116-32518d856b6f","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-08-13 10:25:57 +0000 UTC FinishedAt: 2026-08-13 13:30:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4kvc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_station"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"256a0130-8f99-4e7d-8116-32518d856b6f","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-08-13 10:25:57 +0000 UTC FinishedAt: 2026-08-13 13:30:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7295f207-1c6c-4fa1-a8fd-49d34d9a19b6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*70ef5d42-2ff0-485e-a6ec-c6adff3b7ee3,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-workflowr4kvc/series-workflowr4kvc-build-action-3889092885/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-workflowr4kvc/series-workflowr4kvc-build-action-2606044658/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-workflowr4kvc/series-workflowr4kvc-convert-artifact-3658064931/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,}