Name: series-workflowmcbqs Phase: Succeeded StartedAt: 2026-08-12 06:23:49 +0000 UTC FinishedAt: 2026-08-12 08:41:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcbqs[0] Phase: Succeeded StartedAt: 2026-08-12 06:23:49 +0000 UTC FinishedAt: 2026-08-12 07:07:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcbqs[0].run-triage Phase: Succeeded StartedAt: 2026-08-12 06:23:49 +0000 UTC FinishedAt: 2026-08-12 07:07:04 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "5e6de6a2b522f659defacb1551d0465ba6ce13cf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "WLAN_VENDOR_MORSEMICRO", "MM81X_USB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "5e6de6a2b522f659defacb1551d0465ba6ce13cf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "WLAN_VENDOR_MORSEMICRO", "MM81X_USB" ], "series_id": "053aaec5-683d-4ead-b07e-689ade500d05" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mm81x_fw_init", "mm81x_fw_parse_ext_host_tbl" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEyIDA3OjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1dMQU5fVkVORE9SX01PUlNFTUlDUk8mIzM0OywKICAgICYjMzQ7TU04MVhfVVNCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bW04MXhfZndfaW5pdCYjMzQ7LAogICAgJiMzNDttbTgxeF9md19wYXJzZV9leHRfaG9zdF90YmwmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBtZW1vcnkgbGVha3MgZHVyaW5nIGZpcm13YXJlIHBhcnNpbmcuIFRoZSBib3VuZHMgY2hlY2tzIHByZXZlbnQgcmVhZGluZyBwYXN0IHRoZSBlbmQgb2YgYWxsb2NhdGVkIGJ1ZmZlcnMgY29udGFpbmluZyBmaXJtd2FyZSBkYXRhLCB3aGljaCBhcmUgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlcy4gS0FTQU4gaXMgZnVsbHkgY2FwYWJsZSBvZiBkZXRlY3RpbmcgdGhlc2Ugb3V0LW9mLWJvdW5kcyByZWFkcywgYW5kIGttZW1sZWFrIGRldGVjdHMgdGhlIGZpeGVkIG1lbW9yeSBsZWFrcy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBjb250cm9sIGZsb3csIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBtZW1vcnkgbGVha3MgaW4gdGhlIGZpcm13YXJlIHBhcnNpbmcgbG9naWMgb2YgdGhlIE1vcnNlIE1pY3JvIG1tODF4IGRyaXZlci4gVGhlIGRyaXZlciBjYW4gYmUgdGVzdGVkIHZpYSB0aGUgVVNCIGludGVyZmFjZSB1c2luZyBhIGR1bW15IEhDRCBvciBzeXprYWxsZXImIzM5O3MgVVNCIGZ1enppbmcgY2FwYWJpbGl0aWVzLiBUaGUgZmlybXdhcmUgbG9hZGluZyBhbmQgcGFyc2luZyBsb2dpYyBpcyByZWFjaGFibGUgd2hlbiB0aGUgZGV2aWNlIGlzIHByb2JlZCBhbmQgdGhlIGludGVyZmFjZSBpcyBicm91Z2h0IHVwLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA3OjA0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMDA2NjA3MDVlZDZmY2E4NzNhMDI5ZWUzYzI1MmZjM2ZiODhhMTU0YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDA3OjA0OjQzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuY1xuaW5kZXggZDZkMmFkMDg2YzMyOC4uNTBmYTllNGI1ZjgwMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jXG5AQCAtNTQsMjEgJiM0Mzs1NCwyOSBAQCBzdGF0aWMgaW50IG1tODF4X2Z3X2dldF9oZWFkZXIoY29uc3QgdTggKmRhdGEsIEVsZjMyX0VoZHIgKmVoZHIpXG4gXG4gc3RhdGljIHZvaWQgbW04MXhfZndfcGFyc2VfaW5mbyhzdHJ1Y3QgbW04MXggKm1vcnMsIGNvbnN0IHU4ICpkYXRhLCBpbnQgbGVuZ3RoKVxuIHtcbi1cdGNvbnN0IHN0cnVjdCBtbTgxeF9md19pbmZvX3RsdiAqdGx2ID1cbi1cdFx0KGNvbnN0IHN0cnVjdCBtbTgxeF9md19pbmZvX3RsdiAqKWRhdGE7XG4mIzQzO1x0Y29uc3QgdTggKmVuZCA9IGRhdGEgJiM0MzsgbGVuZ3RoO1xuJiM0MztcdGNvbnN0IHU4ICpwb3MgPSBkYXRhO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoZW5kIC0gcG9zIFx1MDAzZT0gKHB0cmRpZmZfdClzaXplb2Yoc3RydWN0IG1tODF4X2Z3X2luZm9fdGx2KSkge1xuJiM0MztcdFx0Y29uc3Qgc3RydWN0IG1tODF4X2Z3X2luZm9fdGx2ICp0bHYgPVxuJiM0MztcdFx0XHQoY29uc3Qgc3RydWN0IG1tODF4X2Z3X2luZm9fdGx2ICopcG9zO1xuJiM0MztcdFx0dTE2IHRsdl9sZW4gPSBsZTE2X3RvX2NwdSh0bHYtXHUwMDNlbGVuZ3RoKTtcbiYjNDM7XG4mIzQzO1x0XHRwb3MgPSB0bHYtXHUwMDNldmFsO1xuJiM0MztcdFx0aWYgKHRsdl9sZW4gXHUwMDNlIGVuZCAtIHBvcylcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXG4tXHR3aGlsZSAoKHU4ICopdGx2IFx1MDAzYyAoZGF0YSAmIzQzOyBsZW5ndGgpKSB7XG4gXHRcdHN3aXRjaCAobGUxNl90b19jcHUodGx2LVx1MDAzZXR5cGUpKSB7XG4gXHRcdGNhc2UgTU04MVhfRldfSU5GT19UTFZfQkNGX0FERFI6XG4tXHRcdFx0bW9ycy1cdTAwM2ViY2ZfYWRkcmVzcyA9IGdldF91bmFsaWduZWRfbGUzMih0bHYtXHUwMDNldmFsKTtcbiYjNDM7XHRcdFx0aWYgKHRsdl9sZW4gXHUwMDNlPSBzaXplb2YoX19sZTMyKSlcbiYjNDM7XHRcdFx0XHRtb3JzLVx1MDAzZWJjZl9hZGRyZXNzID1cbiYjNDM7XHRcdFx0XHRcdGdldF91bmFsaWduZWRfbGUzMih0bHYtXHUwMDNldmFsKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuLVx0XHR0bHYgPSAoY29uc3Qgc3RydWN0IG1tODF4X2Z3X2luZm9fdGx2ICopKCh1OCAqKXRsdiAmIzQzO1xuLVx0XHRcdFx0XHRcdFx0IGxlMTZfdG9fY3B1KFxuLVx0XHRcdFx0XHRcdFx0XHQgdGx2LVx1MDAzZWxlbmd0aCkgJiM0Mztcbi1cdFx0XHRcdFx0XHRcdCBzaXplb2YoKnRsdikpO1xuJiM0MztcbiYjNDM7XHRcdHBvcyAmIzQzOz0gdGx2X2xlbjtcbiBcdH1cbiB9XG4gXG5AQCAtMTE3LDEzICYjNDM7MTI1LDE1IEBAIHN0YXRpYyBpbnQgbW04MXhfZndfbG9hZF9mdyhzdHJ1Y3QgbW04MXggKm1vcnMsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpXG4gXG4gXHRpZiAobW04MXhfZndfZ2V0X2hlYWRlcihmdy1cdTAwM2VkYXRhLCBcdTAwMjZlaGRyKSkge1xuIFx0XHRkZXZfZXJyKG1vcnMtXHUwMDNlZGV2LCBcJiMzNDtXcm9uZyBmaWxlIGZvcm1hdFwmIzM0Oyk7XG4tXHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdGdvdG8gb3V0X2ZyZWU7XG4gXHR9XG4gXG4gXHRpZiAobW04MXhfZndfZ2V0X3NlY3Rpb25faGVhZGVyKGZ3LVx1MDAzZWRhdGEsIFx1MDAyNmVoZHIsIFx1MDAyNnNoX3N0cnRhYixcbiBcdFx0XHRcdFx0ZWhkci5lX3Noc3RybmR4KSkge1xuIFx0XHRkZXZfZXJyKG1vcnMtXHUwMDNlZGV2LCBcJiMzNDtJbnZhbGlkIGZpcm13YXJlLiBNaXNzaW5nIHN0cmluZyB0YWJsZVwmIzM0Oyk7XG4tXHRcdHJldHVybiAtRU5PRU5UO1xuJiM0MztcdFx0cmV0ID0gLUVOT0VOVDtcbiYjNDM7XHRcdGdvdG8gb3V0X2ZyZWU7XG4gXHR9XG4gXG4gXHRzaF9zdHJzID0gKGNvbnN0IGNoYXIgKilmdy1cdTAwM2VkYXRhICYjNDM7IHNoX3N0cnRhYi5zaF9vZmZzZXQ7XG5AQCAtMTYwLDcgJiM0MzsxNzAsNyBAQCBzdGF0aWMgaW50IG1tODF4X2Z3X2xvYWRfZncoc3RydWN0IG1tODF4ICptb3JzLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KVxuIFx0XHRcdG1tODF4X3JlbGVhc2VfYnVzKG1vcnMpO1xuIFx0XHRcdGlmIChzdGF0dXMpIHtcbiBcdFx0XHRcdHJldCA9IC1FSU87XG4tXHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0XHRnb3RvIG91dF9mcmVlO1xuIFx0XHRcdH1cbiBcdFx0fVxuIFx0fVxuQEAgLTE3OSw2ICYjNDM7MTg5LDcgQEAgc3RhdGljIGludCBtbTgxeF9md19sb2FkX2Z3KHN0cnVjdCBtbTgxeCAqbW9ycywgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcbiBcdGlmIChlaGRyLmVfZW50cnkpXG4gXHRcdHJldCA9IG1tODF4X2Z3X3NldF9ib290X2FkZHIobW9ycywgZWhkci5lX2VudHJ5KTtcbiBcbiYjNDM7b3V0X2ZyZWU6XG4gXHRkZXZtX2tmcmVlKG1vcnMtXHUwMDNlZGV2LCBmd19idWYpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtNDkyLDYgJiM0Mzs1MDMsMTMgQEAgc3RhdGljIGludCBtbTgxeF9md19yZWFkX2V4dF9ob3N0X3RhYmxlKHN0cnVjdCBtbTgxeCAqbW9ycyxcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gZXhpdDtcbiBcbiYjNDM7XHQvKiBUaGUgdGFibGUgZGVzY3JpYmVzIGl0cyBvd24gbGVuZ3RoOyBpdCBtdXN0IGZpdCB3aGF0IHdhcyByZWFkICovXG4mIzQzO1x0aWYgKGxlMzJfdG9fY3B1KGhvc3RfdGJsLVx1MDAzZWV4dF9ob3N0X3RibF9sZW5ndGgpIFx1MDAzYyBzaXplb2YoKmhvc3RfdGJsKSB8fFxuJiM0MztcdCAgICBsZTMyX3RvX2NwdShob3N0X3RibC1cdTAwM2VleHRfaG9zdF90YmxfbGVuZ3RoKSBcdTAwM2UgZXh0X2hvc3RfdGJsX2xlbikge1xuJiM0MztcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdGdvdG8gZXhpdDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0bW04MXhfcmVsZWFzZV9idXMobW9ycyk7XG4gXHQqZXh0X2hvc3RfdGFibGUgPSBob3N0X3RibDtcbiBcdHJldHVybiByZXQ7XG5AQCAtNTU5LDM0ICYjNDM7NTc3LDQ0IEBAIGludCBtbTgxeF9md19wYXJzZV9leHRfaG9zdF90Ymwoc3RydWN0IG1tODF4ICptb3JzKVxuIFx0ZW5kID0gKCh1OCAqKWV4dF9ob3N0X3RhYmxlKSAmIzQzO1xuIFx0ICAgICAgbGUzMl90b19jcHUoZXh0X2hvc3RfdGFibGUtXHUwMDNlZXh0X2hvc3RfdGJsX2xlbmd0aCk7XG4gXG4tXHR3aGlsZSAoaGVhZCBcdTAwM2MgZW5kKSB7XG4mIzQzO1x0d2hpbGUgKGVuZCAtIGhlYWQgXHUwMDNlPSAocHRyZGlmZl90KXNpemVvZihzdHJ1Y3QgZXh0X2hvc3RfdGJsX3Rsdl9oZHIpKSB7XG4gXHRcdHN0cnVjdCBleHRfaG9zdF90YmxfdGx2X2hkciAqaGRyID1cbiBcdFx0XHQoc3RydWN0IGV4dF9ob3N0X3RibF90bHZfaGRyICopaGVhZDtcbiYjNDM7XHRcdHUxNiB0bHZfbGVuID0gbGUxNl90b19jcHUoaGRyLVx1MDAzZWxlbmd0aCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHRsdl9sZW4gXHUwMDNjIHNpemVvZigqaGRyKSB8fCB0bHZfbGVuIFx1MDAzZSBlbmQgLSBoZWFkKVxuJiM0MztcdFx0XHRicmVhaztcbiBcbiBcdFx0c3dpdGNoIChsZTE2X3RvX2NwdShoZHItXHUwMDNldGFnKSkge1xuLVx0XHRjYXNlIE1NODFYX0ZXX0hPU1RfVEFCTEVfVEFHX1MxR19DQVBBQklMSVRJRVM6XG4tXHRcdFx0bW04MXhfZndfdXBkYXRlX2NhcGFiaWxpdGllcyhcbi1cdFx0XHRcdG1vcnMsIChzdHJ1Y3QgZXh0X2hvc3RfdGJsX3MxZ19jYXBzICopaGRyKTtcbiYjNDM7XHRcdGNhc2UgTU04MVhfRldfSE9TVF9UQUJMRV9UQUdfUzFHX0NBUEFCSUxJVElFUzoge1xuJiM0MztcdFx0XHRzdHJ1Y3QgZXh0X2hvc3RfdGJsX3MxZ19jYXBzICpjYXBzID0gKHZvaWQgKiloZHI7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAodGx2X2xlbiBcdTAwM2U9IHNpemVvZigqY2FwcykpXG4mIzQzO1x0XHRcdFx0bW04MXhfZndfdXBkYXRlX2NhcGFiaWxpdGllcyhtb3JzLCBjYXBzKTtcbiBcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGNhc2UgTU04MVhfRldfSE9TVF9UQUJMRV9UQUdfSU5TRVJUX1NLQl9DSEVDS1NVTToge1xuJiM0MztcdFx0XHRzdHJ1Y3QgZXh0X2hvc3RfdGJsX2luc2VydF9za2JfY2hlY2tzdW0gKmNzdW0gPVxuJiM0MztcdFx0XHRcdCh2b2lkICopaGRyO1xuIFxuLVx0XHRjYXNlIE1NODFYX0ZXX0hPU1RfVEFCTEVfVEFHX0lOU0VSVF9TS0JfQ0hFQ0tTVU06XG4tXHRcdFx0bW04MXhfZndfdXBkYXRlX3ZhbGlkYXRlX3NrYl9jaGVja3N1bShcbi1cdFx0XHRcdG1vcnMsXG4tXHRcdFx0XHQoc3RydWN0IGV4dF9ob3N0X3RibF9pbnNlcnRfc2tiX2NoZWNrc3VtICopaGRyKTtcbiYjNDM7XHRcdFx0aWYgKHRsdl9sZW4gXHUwMDNlPSBzaXplb2YoKmNzdW0pKVxuJiM0MztcdFx0XHRcdG1tODF4X2Z3X3VwZGF0ZV92YWxpZGF0ZV9za2JfY2hlY2tzdW0obW9ycyxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdCAgICAgIGNzdW0pO1xuIFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0Y2FzZSBNTTgxWF9GV19IT1NUX1RBQkxFX1RBR19ZQVBTX1RBQkxFOiB7XG4mIzQzO1x0XHRcdHN0cnVjdCBleHRfaG9zdF90YmxfeWFwc190YWJsZSAqeWFwcyA9ICh2b2lkICopaGRyO1xuIFxuLVx0XHRjYXNlIE1NODFYX0ZXX0hPU1RfVEFCTEVfVEFHX1lBUFNfVEFCTEU6XG4tXHRcdFx0bW04MXhfeWFwc19od19yZWFkX3RhYmxlKFxuLVx0XHRcdFx0bW9ycywgXHUwMDI2KChzdHJ1Y3QgZXh0X2hvc3RfdGJsX3lhcHNfdGFibGUgKiloZHIpXG4tXHRcdFx0XHRcdCAgICAgICAtXHUwMDNleWFwc190YWJsZSk7XG4mIzQzO1x0XHRcdGlmICh0bHZfbGVuIFx1MDAzZT0gc2l6ZW9mKCp5YXBzKSlcbiYjNDM7XHRcdFx0XHRtbTgxeF95YXBzX2h3X3JlYWRfdGFibGUobW9ycyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgXHUwMDI2eWFwcy1cdTAwM2V5YXBzX3RhYmxlKTtcbiBcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFxuLVx0XHRoZWFkICYjNDM7PSBsZTE2X3RvX2NwdShoZHItXHUwMDNlbGVuZ3RoKTtcbi1cdFx0aWYgKCFoZHItXHUwMDNlbGVuZ3RoKVxuLVx0XHRcdGJyZWFrO1xuJiM0MztcdFx0aGVhZCAmIzQzOz0gdGx2X2xlbjtcbiBcdH1cbiBcbiBcdGtmcmVlKGV4dF9ob3N0X3RhYmxlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNzowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7V0xBTl9WRU5ET1JfTU9SU0VNSUNSTyYjMzQ7LAogICAgJiMzNDtNTTgxWF9VU0ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttbTgxeF9md19pbml0JiMzNDssCiAgICAmIzM0O21tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBtZW1vcnkgbGVha3MgaW4gdGhlIGZpcm13YXJlIHBhcnNpbmcgbG9naWMgb2YgdGhlIE1vcnNlIE1pY3JvIG1tODF4IGRyaXZlci4gVGhlIGRyaXZlciBjYW4gYmUgdGVzdGVkIHZpYSB0aGUgVVNCIGludGVyZmFjZSB1c2luZyBhIGR1bW15IEhDRCBvciBzeXprYWxsZXImIzM5O3MgVVNCIGZ1enppbmcgY2FwYWJpbGl0aWVzLiBUaGUgZmlybXdhcmUgbG9hZGluZyBhbmQgcGFyc2luZyBsb2dpYyBpcyByZWFjaGFibGUgd2hlbiB0aGUgZGV2aWNlIGlzIHByb2JlZCBhbmQgdGhlIGludGVyZmFjZSBpcyBicm91Z2h0IHVwLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDA2NjA3MDVlZDZmY2E4NzNhMDI5ZWUzYzI1MmZjM2ZiODhhMTU0YgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDA3OjA0OjQzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jCmluZGV4IGQ2ZDJhZDA4NmMzMjguLjUwZmE5ZTRiNWY4MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmMKQEAgLTU0LDIxICYjNDM7NTQsMjkgQEAgc3RhdGljIGludCBtbTgxeF9md19nZXRfaGVhZGVyKGNvbnN0IHU4ICpkYXRhLCBFbGYzMl9FaGRyICplaGRyKQogCiBzdGF0aWMgdm9pZCBtbTgxeF9md19wYXJzZV9pbmZvKHN0cnVjdCBtbTgxeCAqbW9ycywgY29uc3QgdTggKmRhdGEsIGludCBsZW5ndGgpCiB7Ci0JY29uc3Qgc3RydWN0IG1tODF4X2Z3X2luZm9fdGx2ICp0bHYgPQotCQkoY29uc3Qgc3RydWN0IG1tODF4X2Z3X2luZm9fdGx2ICopZGF0YTsKJiM0MzsJY29uc3QgdTggKmVuZCA9IGRhdGEgJiM0MzsgbGVuZ3RoOwomIzQzOwljb25zdCB1OCAqcG9zID0gZGF0YTsKJiM0MzsKJiM0MzsJd2hpbGUgKGVuZCAtIHBvcyAmZ3Q7PSAocHRyZGlmZl90KXNpemVvZihzdHJ1Y3QgbW04MXhfZndfaW5mb190bHYpKSB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgbW04MXhfZndfaW5mb190bHYgKnRsdiA9CiYjNDM7CQkJKGNvbnN0IHN0cnVjdCBtbTgxeF9md19pbmZvX3RsdiAqKXBvczsKJiM0MzsJCXUxNiB0bHZfbGVuID0gbGUxNl90b19jcHUodGx2LSZndDtsZW5ndGgpOwomIzQzOwomIzQzOwkJcG9zID0gdGx2LSZndDt2YWw7CiYjNDM7CQlpZiAodGx2X2xlbiAmZ3Q7IGVuZCAtIHBvcykKJiM0MzsJCQlicmVhazsKIAotCXdoaWxlICgodTggKil0bHYgJmx0OyAoZGF0YSAmIzQzOyBsZW5ndGgpKSB7CiAJCXN3aXRjaCAobGUxNl90b19jcHUodGx2LSZndDt0eXBlKSkgewogCQljYXNlIE1NODFYX0ZXX0lORk9fVExWX0JDRl9BRERSOgotCQkJbW9ycy0mZ3Q7YmNmX2FkZHJlc3MgPSBnZXRfdW5hbGlnbmVkX2xlMzIodGx2LSZndDt2YWwpOwomIzQzOwkJCWlmICh0bHZfbGVuICZndDs9IHNpemVvZihfX2xlMzIpKQomIzQzOwkJCQltb3JzLSZndDtiY2ZfYWRkcmVzcyA9CiYjNDM7CQkJCQlnZXRfdW5hbGlnbmVkX2xlMzIodGx2LSZndDt2YWwpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAkJfQotCQl0bHYgPSAoY29uc3Qgc3RydWN0IG1tODF4X2Z3X2luZm9fdGx2ICopKCh1OCAqKXRsdiAmIzQzOwotCQkJCQkJCSBsZTE2X3RvX2NwdSgKLQkJCQkJCQkJIHRsdi0mZ3Q7bGVuZ3RoKSAmIzQzOwotCQkJCQkJCSBzaXplb2YoKnRsdikpOwomIzQzOwomIzQzOwkJcG9zICYjNDM7PSB0bHZfbGVuOwogCX0KIH0KIApAQCAtMTE3LDEzICYjNDM7MTI1LDE1IEBAIHN0YXRpYyBpbnQgbW04MXhfZndfbG9hZF9mdyhzdHJ1Y3QgbW04MXggKm1vcnMsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpCiAKIAlpZiAobW04MXhfZndfZ2V0X2hlYWRlcihmdy0mZ3Q7ZGF0YSwgJmFtcDtlaGRyKSkgewogCQlkZXZfZXJyKG1vcnMtJmd0O2RldiwgJiMzNDtXcm9uZyBmaWxlIGZvcm1hdCYjMzQ7KTsKLQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQlyZXQgPSAtRUlOVkFMOwomIzQzOwkJZ290byBvdXRfZnJlZTsKIAl9CiAKIAlpZiAobW04MXhfZndfZ2V0X3NlY3Rpb25faGVhZGVyKGZ3LSZndDtkYXRhLCAmYW1wO2VoZHIsICZhbXA7c2hfc3RydGFiLAogCQkJCQllaGRyLmVfc2hzdHJuZHgpKSB7CiAJCWRldl9lcnIobW9ycy0mZ3Q7ZGV2LCAmIzM0O0ludmFsaWQgZmlybXdhcmUuIE1pc3Npbmcgc3RyaW5nIHRhYmxlJiMzNDspOwotCQlyZXR1cm4gLUVOT0VOVDsKJiM0MzsJCXJldCA9IC1FTk9FTlQ7CiYjNDM7CQlnb3RvIG91dF9mcmVlOwogCX0KIAogCXNoX3N0cnMgPSAoY29uc3QgY2hhciAqKWZ3LSZndDtkYXRhICYjNDM7IHNoX3N0cnRhYi5zaF9vZmZzZXQ7CkBAIC0xNjAsNyAmIzQzOzE3MCw3IEBAIHN0YXRpYyBpbnQgbW04MXhfZndfbG9hZF9mdyhzdHJ1Y3QgbW04MXggKm1vcnMsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpCiAJCQltbTgxeF9yZWxlYXNlX2J1cyhtb3JzKTsKIAkJCWlmIChzdGF0dXMpIHsKIAkJCQlyZXQgPSAtRUlPOwotCQkJCWJyZWFrOwomIzQzOwkJCQlnb3RvIG91dF9mcmVlOwogCQkJfQogCQl9CiAJfQpAQCAtMTc5LDYgJiM0MzsxODksNyBAQCBzdGF0aWMgaW50IG1tODF4X2Z3X2xvYWRfZncoc3RydWN0IG1tODF4ICptb3JzLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KQogCWlmIChlaGRyLmVfZW50cnkpCiAJCXJldCA9IG1tODF4X2Z3X3NldF9ib290X2FkZHIobW9ycywgZWhkci5lX2VudHJ5KTsKIAomIzQzO291dF9mcmVlOgogCWRldm1fa2ZyZWUobW9ycy0mZ3Q7ZGV2LCBmd19idWYpOwogCXJldHVybiByZXQ7CiB9CkBAIC00OTIsNiAmIzQzOzUwMywxMyBAQCBzdGF0aWMgaW50IG1tODF4X2Z3X3JlYWRfZXh0X2hvc3RfdGFibGUoc3RydWN0IG1tODF4ICptb3JzLAogCWlmIChyZXQpCiAJCWdvdG8gZXhpdDsKIAomIzQzOwkvKiBUaGUgdGFibGUgZGVzY3JpYmVzIGl0cyBvd24gbGVuZ3RoOyBpdCBtdXN0IGZpdCB3aGF0IHdhcyByZWFkICovCiYjNDM7CWlmIChsZTMyX3RvX2NwdShob3N0X3RibC0mZ3Q7ZXh0X2hvc3RfdGJsX2xlbmd0aCkgJmx0OyBzaXplb2YoKmhvc3RfdGJsKSB8fAomIzQzOwkgICAgbGUzMl90b19jcHUoaG9zdF90YmwtJmd0O2V4dF9ob3N0X3RibF9sZW5ndGgpICZndDsgZXh0X2hvc3RfdGJsX2xlbikgewomIzQzOwkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gZXhpdDsKJiM0MzsJfQomIzQzOwogCW1tODF4X3JlbGVhc2VfYnVzKG1vcnMpOwogCSpleHRfaG9zdF90YWJsZSA9IGhvc3RfdGJsOwogCXJldHVybiByZXQ7CkBAIC01NTksMzQgJiM0Mzs1NzcsNDQgQEAgaW50IG1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibChzdHJ1Y3QgbW04MXggKm1vcnMpCiAJZW5kID0gKCh1OCAqKWV4dF9ob3N0X3RhYmxlKSAmIzQzOwogCSAgICAgIGxlMzJfdG9fY3B1KGV4dF9ob3N0X3RhYmxlLSZndDtleHRfaG9zdF90YmxfbGVuZ3RoKTsKIAotCXdoaWxlIChoZWFkICZsdDsgZW5kKSB7CiYjNDM7CXdoaWxlIChlbmQgLSBoZWFkICZndDs9IChwdHJkaWZmX3Qpc2l6ZW9mKHN0cnVjdCBleHRfaG9zdF90YmxfdGx2X2hkcikpIHsKIAkJc3RydWN0IGV4dF9ob3N0X3RibF90bHZfaGRyICpoZHIgPQogCQkJKHN0cnVjdCBleHRfaG9zdF90YmxfdGx2X2hkciAqKWhlYWQ7CiYjNDM7CQl1MTYgdGx2X2xlbiA9IGxlMTZfdG9fY3B1KGhkci0mZ3Q7bGVuZ3RoKTsKJiM0MzsKJiM0MzsJCWlmICh0bHZfbGVuICZsdDsgc2l6ZW9mKCpoZHIpIHx8IHRsdl9sZW4gJmd0OyBlbmQgLSBoZWFkKQomIzQzOwkJCWJyZWFrOwogCiAJCXN3aXRjaCAobGUxNl90b19jcHUoaGRyLSZndDt0YWcpKSB7Ci0JCWNhc2UgTU04MVhfRldfSE9TVF9UQUJMRV9UQUdfUzFHX0NBUEFCSUxJVElFUzoKLQkJCW1tODF4X2Z3X3VwZGF0ZV9jYXBhYmlsaXRpZXMoCi0JCQkJbW9ycywgKHN0cnVjdCBleHRfaG9zdF90YmxfczFnX2NhcHMgKiloZHIpOwomIzQzOwkJY2FzZSBNTTgxWF9GV19IT1NUX1RBQkxFX1RBR19TMUdfQ0FQQUJJTElUSUVTOiB7CiYjNDM7CQkJc3RydWN0IGV4dF9ob3N0X3RibF9zMWdfY2FwcyAqY2FwcyA9ICh2b2lkICopaGRyOwomIzQzOwomIzQzOwkJCWlmICh0bHZfbGVuICZndDs9IHNpemVvZigqY2FwcykpCiYjNDM7CQkJCW1tODF4X2Z3X3VwZGF0ZV9jYXBhYmlsaXRpZXMobW9ycywgY2Fwcyk7CiAJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJCWNhc2UgTU04MVhfRldfSE9TVF9UQUJMRV9UQUdfSU5TRVJUX1NLQl9DSEVDS1NVTTogewomIzQzOwkJCXN0cnVjdCBleHRfaG9zdF90YmxfaW5zZXJ0X3NrYl9jaGVja3N1bSAqY3N1bSA9CiYjNDM7CQkJCSh2b2lkICopaGRyOwogCi0JCWNhc2UgTU04MVhfRldfSE9TVF9UQUJMRV9UQUdfSU5TRVJUX1NLQl9DSEVDS1NVTToKLQkJCW1tODF4X2Z3X3VwZGF0ZV92YWxpZGF0ZV9za2JfY2hlY2tzdW0oCi0JCQkJbW9ycywKLQkJCQkoc3RydWN0IGV4dF9ob3N0X3RibF9pbnNlcnRfc2tiX2NoZWNrc3VtICopaGRyKTsKJiM0MzsJCQlpZiAodGx2X2xlbiAmZ3Q7PSBzaXplb2YoKmNzdW0pKQomIzQzOwkJCQltbTgxeF9md191cGRhdGVfdmFsaWRhdGVfc2tiX2NoZWNrc3VtKG1vcnMsCiYjNDM7CQkJCQkJCQkgICAgICBjc3VtKTsKIAkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwkJY2FzZSBNTTgxWF9GV19IT1NUX1RBQkxFX1RBR19ZQVBTX1RBQkxFOiB7CiYjNDM7CQkJc3RydWN0IGV4dF9ob3N0X3RibF95YXBzX3RhYmxlICp5YXBzID0gKHZvaWQgKiloZHI7CiAKLQkJY2FzZSBNTTgxWF9GV19IT1NUX1RBQkxFX1RBR19ZQVBTX1RBQkxFOgotCQkJbW04MXhfeWFwc19od19yZWFkX3RhYmxlKAotCQkJCW1vcnMsICZhbXA7KChzdHJ1Y3QgZXh0X2hvc3RfdGJsX3lhcHNfdGFibGUgKiloZHIpCi0JCQkJCSAgICAgICAtJmd0O3lhcHNfdGFibGUpOwomIzQzOwkJCWlmICh0bHZfbGVuICZndDs9IHNpemVvZigqeWFwcykpCiYjNDM7CQkJCW1tODF4X3lhcHNfaHdfcmVhZF90YWJsZShtb3JzLAomIzQzOwkJCQkJCQkgJmFtcDt5YXBzLSZndDt5YXBzX3RhYmxlKTsKIAkJCWJyZWFrOwomIzQzOwkJfQogCQlkZWZhdWx0OgogCQkJYnJlYWs7CiAJCX0KIAotCQloZWFkICYjNDM7PSBsZTE2X3RvX2NwdShoZHItJmd0O2xlbmd0aCk7Ci0JCWlmICghaGRyLSZndDtsZW5ndGgpCi0JCQlicmVhazsKJiM0MzsJCWhlYWQgJiM0Mzs9IHRsdl9sZW47CiAJfQogCiAJa2ZyZWUoZXh0X2hvc3RfdGFibGUpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODY5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFdpRmkgRHJpdmVyIFBhdGNoIGZvciBWdWxuZXJhYmlsaXRpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0YXJnZXRzIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmNgLiBUaGUgZGVzY3JpcHRpb24gbWVudGlvbnMgYSBmaXggZm9yIG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIG1lbW9yeSBsZWFrcywgd2hpY2ggaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJdCBzb3VuZHMgbGlrZSBzb21lb25lIGhhcyBiZWVuIGRpZ2dpbmcgaW50byB0aGUgZmlybXdhcmUgcGFyc2luZyBsb2dpYyBmb3IgdGhlIE1NODF4IGNoaXBzZXQgYW5kIGZvdW5kIHNvbWUgbmFzdGllcy4gU3BlY2lmaWNhbGx5LCB0aGV5JiMzOTt2ZSBhZGRlZCBsZW5ndGggY2hlY2tzIGluIGBtbTgxeF9md19wYXJzZV9pbmZvYCwgYG1tODF4X2Z3X3JlYWRfZXh0X2hvc3RfdGFibGVgLCBhbmQgYG1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibGAg4oCTIGdvb2QsIGRlZmVuc2l2ZSBwcm9ncmFtbWluZywgZXhhY3RseSB3aGF0JiMzOTtzIG5lZWRlZCB3aGVuIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSB1bnRydXN0ZWQgZmlybXdhcmUgZGF0YSBzdHJ1Y3R1cmVzLiBUaGV5JiMzOTt2ZSBhbHNvIGNsZWFuZWQgdXAgYSBtZW1vcnkgbGVhayBpbiBgbW04MXhfZndfbG9hZF9md2AgYnkgY29ycmVjdGx5IGhhbmRsaW5nIHRoZSBjbGVhbnVwIHBhdGguIFNtYXJ0IHVzZSBvZiBgZ290byBvdXRfZnJlZWAgdGhlcmUsIG11Y2ggY2xlYW5lciB0aGFuIGEgZGlyZWN0IHJldHVybi4KCk15IGltbWVkaWF0ZSBmb2xsb3ctdXAgdGhvdWdodCBpcyBhYm91dCB0aGUgYXR0YWNrIHN1cmZhY2UuIElzIHRoaXMgZHJpdmVyIGV2ZW4gcmVhY2hhYmxlIGluIGEgdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gVGhlIGRyaXZlciBpdHNlbGYgaXMsIGFzIHRoZSBjb2RlIHJldmVhbHMsIGBtbTgxeGAgZnJvbSBNb3JzZSBNaWNyby4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBsaWtlbGlob29kIG9mIGV4cGxvaXRhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyB0byBzZWUgaWYgdGhlIGRyaXZlciBpcyBjb21tb25seSBlbmFibGVkIGluIGNvbmZpZ3VyYXRpb25zIHJlbGV2YW50IHRvIHZpcnR1YWxpemF0aW9uLCBjb250YWluZXJzLCBvciBlbWJlZGRlZCBzeXN0ZW1zIHdoZXJlIHRoaXMga2luZCBvZiB2dWxuZXJhYmlsaXR5IHdvdWxkIGJlIG1vc3QgaW1wYWN0ZnVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA3OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21tODF4JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDQ4NDYgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vS2NvbmZpZz0xMz1pZiBXTEFOX1ZFTkRPUl9NT1JTRU1JQ1JPXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL0tjb25maWc6MTQ6c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9LY29uZmlnLTE1LWVuZGlmICMgV0xBTl9WRU5ET1JfTU9SU0VNSUNST1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX01NODFYKSAmIzQzOz0gbW04MXgvXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9NYWtlZmlsZS0yLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9NYWtlZmlsZTozOm9iai0kKENPTkZJR19NTTgxWCkgJiM0Mzs9IG1tODF4X2NvcmUub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9NYWtlZmlsZS00LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9NYWtlZmlsZTo1Om1tODF4X2NvcmUteSAmIzQzOz0gY29yZS5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L01ha2VmaWxlOjY6bW04MXhfY29yZS15ICYjNDM7PSBtYWMub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9NYWtlZmlsZTo3Om1tODF4X2NvcmUteSAmIzQzOz0gaHcub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9NYWtlZmlsZTo4Om1tODF4X2NvcmUteSAmIzQzOz0gZncub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9NYWtlZmlsZTo5Om1tODF4X2NvcmUteSAmIzQzOz0gY29tbWFuZC5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L01ha2VmaWxlOjEwOm1tODF4X2NvcmUteSAmIzQzOz0gcHMub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9NYWtlZmlsZToxMTptbTgxeF9jb3JlLXkgJiM0Mzs9IHNrYnEub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9NYWtlZmlsZToxMjptbTgxeF9jb3JlLXkgJiM0Mzs9IHlhcHNfaHcub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9NYWtlZmlsZToxMzptbTgxeF9jb3JlLXkgJiM0Mzs9IHlhcHMub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9NYWtlZmlsZToxNDptbTgxeF9jb3JlLXkgJiM0Mzs9IHJjLm9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvTWFrZWZpbGU6MTU6bW04MXhfY29yZS15ICYjNDM7PSBtbXJjLm9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvTWFrZWZpbGUtMTYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L01ha2VmaWxlOjE3Om9iai0kKENPTkZJR19NTTgxWF9VU0IpICYjNDM7PSBtbTgxeF91c2Iub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9NYWtlZmlsZToxODptbTgxeF91c2IteSAmIzQzOz0gdXNiLm9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvTWFrZWZpbGUtMTktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19NTTgxWF9TRElPKSAmIzQzOz0gbW04MXhfc2Rpby5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L01ha2VmaWxlOjIxOm1tODF4X3NkaW8teSAmIzQzOz0gc2Rpby5vXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaC0xMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmg6MTI6ZW51bSBtbTgxeF9idXNfdHlwZSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oLTEzLVx0TU04MVhfQlVTX1RZUEVfVVNCLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmgtMTYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oOjE3OnN0cnVjdCBtbTgxeF9idXNfb3BzIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmg6MTg6XHRpbnQgKCpkbV9yZWFkKShzdHJ1Y3QgbW04MXggKm1vcnMsIHUzMiBhZGRyLCB1OCAqZGF0YSwgaW50IGxlbik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oOjE5Olx0aW50ICgqZG1fd3JpdGUpKHN0cnVjdCBtbTgxeCAqbW9ycywgdTMyIGFkZHIsIGNvbnN0IHU4ICpkYXRhLCBpbnQgbGVuKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmg6MjA6XHRpbnQgKCpyZWczMl9yZWFkKShzdHJ1Y3QgbW04MXggKm1vcnMsIHUzMiBhZGRyLCB1MzIgKmRhdGEpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaDoyMTpcdGludCAoKnJlZzMyX3dyaXRlKShzdHJ1Y3QgbW04MXggKm1vcnMsIHUzMiBhZGRyLCB1MzIgZGF0YSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oOjIyOlx0aW50ICgqZGlnaXRhbF9yZXNldCkoc3RydWN0IG1tODF4ICptb3JzKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmg6MjM6XHR2b2lkICgqc2V0X2J1c19lbmFibGUpKHN0cnVjdCBtbTgxeCAqbW9ycywgYm9vbCBlbmFibGUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaDoyNDpcdHZvaWQgKCpjb25maWdfYnVyc3RfbW9kZSkoc3RydWN0IG1tODF4ICptb3JzLCBib29sIGVuYWJsZV9idXJzdCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oOjI1Olx0dm9pZCAoKmNsYWltKShzdHJ1Y3QgbW04MXggKm1vcnMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaDoyNjpcdHZvaWQgKCpzZXRfaXJxKShzdHJ1Y3QgbW04MXggKm1vcnMsIGJvb2wgZW5hYmxlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmg6Mjc6XHR2b2lkICgqcmVsZWFzZSkoc3RydWN0IG1tODF4ICptb3JzKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmgtMjgtXHR1bnNpZ25lZCBpbnQgYnVsa19hbGlnbm1lbnQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaC0zNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmg6Mzc6LyogbW04MXhfZG1fcmVhZCAtIGxlbiBtdXN0IGJlIHJvdW5kZWQgdXAgdG8gdGhlIG5lYXJlc3QgNC1ieXRlIGJvdW5kYXJ5ICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oOjM4OnN0YXRpYyBpbmxpbmUgaW50IG1tODF4X2RtX3JlYWQoc3RydWN0IG1tODF4ICptb3JzLCB1MzIgYWRkciwgdTggKmRhdGEsIGludCBsZW4pXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oLTM5LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oLTQyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaDo0MzpzdGF0aWMgaW5saW5lIGludCBtbTgxeF9kbV93cml0ZShzdHJ1Y3QgbW04MXggKm1vcnMsIHUzMiBhZGRyLCBjb25zdCB1OCAqZGF0YSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmgtNDQtXHRcdFx0XHQgaW50IGxlbilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oLTQ4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaDo0OTpzdGF0aWMgaW5saW5lIGludCBtbTgxeF9yZWczMl9yZWFkKHN0cnVjdCBtbTgxeCAqbW9ycywgdTMyIGFkZHIsIHUzMiAqZGF0YSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmgtNTAte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmgtNTMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oOjU0OnN0YXRpYyBpbmxpbmUgaW50IG1tODF4X3JlZzMyX3dyaXRlKHN0cnVjdCBtbTgxeCAqbW9ycywgdTMyIGFkZHIsIHUzMiBkYXRhKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaC01NS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaC01OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmg6NTk6c3RhdGljIGlubGluZSBpbnQgbW04MXhfYnVzX2RpZ2l0YWxfcmVzZXQoc3RydWN0IG1tODF4ICptb3JzKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaC02MC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaC02Ni1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmg6Njc6c3RhdGljIGlubGluZSB2b2lkIG1tODF4X3NldF9idXNfZW5hYmxlKHN0cnVjdCBtbTgxeCAqbW9ycywgYm9vbCBlbmFibGUpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oLTY4LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oLTcxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaDo3MjpzdGF0aWMgaW5saW5lIHZvaWQgbW04MXhfYnVzX2NvbmZpZ19idXJzdF9tb2RlKHN0cnVjdCBtbTgxeCAqbW9ycyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmgtNzMtXHRcdFx0XHRcdCAgICAgICBib29sIGVuYWJsZV9idXJzdClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oLTc4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaDo3OTpzdGF0aWMgaW5saW5lIHZvaWQgbW04MXhfY2xhaW1fYnVzKHN0cnVjdCBtbTgxeCAqbW9ycylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmgtODAte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmgtODMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oOjg0OnN0YXRpYyBpbmxpbmUgdm9pZCBtbTgxeF9idXNfc2V0X2lycShzdHJ1Y3QgbW04MXggKm1vcnMsIGJvb2wgZW5hYmxlKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaC04NS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaC04OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmg6ODk6c3RhdGljIGlubGluZSB2b2lkIG1tODF4X3JlbGVhc2VfYnVzKHN0cnVjdCBtbTgxeCAqbW9ycylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmgtOTAte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmgtOTMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oOjk0OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG1tODF4X2J1c19nZXRfYWxpZ25tZW50KHN0cnVjdCBtbTgxeCAqbW9ycylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmgtOTUte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jPTI3PXN0cnVjdCBob3N0X2NtZF9yZXNwX2NiIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0zMi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjMzOnN0YXRpYyBpbnQgbW04MXhfY21kX3R4KHN0cnVjdCBtbTgxeCAqbW9ycywgc3RydWN0IGhvc3RfY21kX3Jlc3AgKnJlc3AsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0zNC1cdFx0XHRzdHJ1Y3QgaG9zdF9jbWRfcmVxICpyZXEsIHUzMiBsZW5ndGgsIHUzMiB0aW1lb3V0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTQxLVx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjQyOlx0c3RydWN0IG1tODF4X3NrYnEgKmNtZF9xID0gbW04MXhfaGlmX2dldF90eF9jbWRfcXVldWUobW9ycyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy00My1cdHN0cnVjdCBob3N0X2NtZF9yZXNwX2NiICpyZXNwX2NiO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTU3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6NTg6XHRtbTgxeF9wc19kaXNhYmxlKG1vcnMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNTktXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNjItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzo2MzpcdFx0c2tiID0gbW04MXhfc2ticV9hbGxvY19za2IoY21kX3EsIGNtZF9sZW4pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNjQtXHRcdGlmICghc2tiKSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtODMtXHRcdHRpbWVvdXQgPSB0aW1lb3V0ID8gdGltZW91dCA6IEhPU1RfQ01EX0RFRkFVTFRfVElNRU9VVF9NUztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjg0Olx0XHRyZXQgPSBtbTgxeF9za2JxX3NrYl90eChjbWRfcSwgXHUwMDI2c2tiLCBOVUxMLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtODUtXHRcdFx0XHRcdE1NODFYX1NLQl9DSEFOX0NPTU1BTkQpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTg4LVx0XHRpZiAocmV0KSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzo4OTpcdFx0XHRkZXZfZXJyKG1vcnMtXHUwMDNlZGV2LCBcJiMzNDttbTgxeF9za2JxX3R4IGZhaWw6ICVkXCYjMzQ7LCByZXQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtOTAtXHRcdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMTIxLVx0XHRzcGluX2xvY2tfYmgoXHUwMDI2Y21kX3EtXHUwMDNlbG9jayk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzoxMjI6XHRcdG1tODF4X3NrYnFfc2tiX2ZpbmlzaChjbWRfcSwgc2tiLCBOVUxMKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTEyMy1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y21kX3EtXHUwMDNlbG9jayk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMTI4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6MTI5Olx0bW04MXhfcHNfZW5hYmxlKG1vcnMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMTMwLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1vcnMtXHUwMDNlY21kX3dhaXQpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTE0NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjE0NjppbnQgbW04MXhfY21kX3Jlc3BfcHJvY2VzcyhzdHJ1Y3QgbW04MXggKm1vcnMsIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0xNDcte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMTQ4LVx0aW50IGxlbmd0aCwgcmV0ID0gLUVTUkNIOyAvKiBObyBzdWNoIHByb2Nlc3MgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjE0OTpcdHN0cnVjdCBtbTgxeF9za2JxICpjbWRfcSA9IG1tODF4X2hpZl9nZXRfdHhfY21kX3F1ZXVlKG1vcnMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMTUwLVx0c3RydWN0IGhvc3RfY21kX3Jlc3AgKnNyY19yZXNwID0gKHN0cnVjdCBob3N0X2NtZF9yZXNwICopKHNrYi1cdTAwM2VkYXRhKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0xNjMtXHRpZiAoIUhPU1RfQ01EX0lTX1JFU1Aoc3JjX3Jlc3ApKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzoxNjQ6XHRcdHJldCA9IG1tODF4X21hY19ldmVudF9yZWN2KG1vcnMsIHNrYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0xNjUtXHRcdGdvdG8gZXhpdF9mcmVlO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTE2OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjE3MDpcdGNtZF9za2IgPSBtbTgxeF9za2JxX3R4X3BlbmRpbmcoY21kX3EpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMTcxLVx0aWYgKGNtZF9za2IpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjE3MjpcdFx0bW04MXhfc2ticV9wdWxsX2hkcl9wb3N0X3R4KGNtZF9za2IpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMTczLVx0XHRyZXEgPSAoc3RydWN0IGhvc3RfY21kX3JlcSAqKWNtZF9za2ItXHUwMDNlZGF0YTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0yMzEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzoyMzI6aW50IG1tODF4X2NtZF9zdGFfc3RhdGUoc3RydWN0IG1tODF4ICptb3JzLCBzdHJ1Y3QgbW04MXhfdmlmICptb3JzX3ZpZiwgdTE2IGFpZCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTIzMy1cdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTI0NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjI0NjpcdHJldHVybiBtbTgxeF9jbWRfdHgobW9ycywgTlVMTCwgKHN0cnVjdCBob3N0X2NtZF9yZXEgKilcdTAwMjZyZXEsIDAsIDApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMjQ3LX1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTI0OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjI0OTppbnQgbW04MXhfY21kX2FkZF9pZihzdHJ1Y3QgbW04MXggKm1vcnMsIHUxNiAqdmlmX2lkLCBjb25zdCB1OCAqYWRkcixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTI1MC1cdFx0ICAgICBlbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGUpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMjcwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6MjcxOlx0cmV0ID0gbW04MXhfY21kX3R4KG1vcnMsIChzdHJ1Y3QgaG9zdF9jbWRfcmVzcCAqKVx1MDAyNnJlc3AsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0yNzItXHRcdFx0ICAgKHN0cnVjdCBob3N0X2NtZF9yZXEgKilcdTAwMjZyZXEsIHNpemVvZihyZXNwKSwgMCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMjc4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6Mjc5OmludCBtbTgxeF9jbWRfZ2V0X2NhcGFiaWxpdGllcyhzdHJ1Y3QgbW04MXggKm1vcnMsIHUxNiB2aWZfaWQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzoyODA6XHRcdFx0ICAgICAgIHN0cnVjdCBtbTgxeF9md19jYXBzICpjYXBhYmlsaXRpZXMpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0yODEte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTI4OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjI4OTpcdHJldCA9IG1tODF4X2NtZF90eChtb3JzLCAoc3RydWN0IGhvc3RfY21kX3Jlc3AgKilcdTAwMjZyc3AsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0yOTAtXHRcdFx0ICAgKHN0cnVjdCBob3N0X2NtZF9yZXEgKilcdTAwMjZyZXEsIHNpemVvZihyc3ApLCAwKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0yOTQtXHRjYXBhYmlsaXRpZXMtXHUwMDNlYW1wZHVfbXNzID0gcnNwLmNhcGFiaWxpdGllcy5hbXBkdV9tc3M7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzoyOTU6XHRjYXBhYmlsaXRpZXMtXHUwMDNlbW04MXhfbW1zc19vZmZzZXQgPSByc3AubW9yc2VfbW1zc19vZmZzZXQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0yOTYtXHRjYXBhYmlsaXRpZXMtXHUwMDNlYmVhbWZvcm1lZV9zdHNfY2FwYWJpbGl0eSA9XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMzA3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6MzA4OmludCBtbTgxeF9jbWRfZ2V0X21heF90eHBvd2VyKHN0cnVjdCBtbTgxeCAqbW9ycywgczMyICpvdXRfcG93ZXJfbWJtKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMzA5LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0zMTUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzozMTY6XHRyZXQgPSBtbTgxeF9jbWRfdHgobW9ycywgKHN0cnVjdCBob3N0X2NtZF9yZXNwICopXHUwMDI2cmVzcCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTMxNy1cdFx0XHQgICAoc3RydWN0IGhvc3RfY21kX3JlcSAqKVx1MDAyNnJlcSwgc2l6ZW9mKHJlc3ApLCAwKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0zMjMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzozMjQ6aW50IG1tODF4X2NtZF9od19zY2FuKHN0cnVjdCBtbTgxeCAqbW9ycywgc3RydWN0IG1tODF4X2h3X3NjYW5fcGFyYW1zICpwYXJhbXMsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0zMjUtXHRcdCAgICAgIGJvb2wgc3RvcmUpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMzMyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6MzMzOlx0Y21kX3NpemUgPSBtbTgxeF9od19zY2FuX2hfZ2V0X2NtZF9zaXplKHBhcmFtcyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0zMzQtXHRjbWRfc2l6ZSA9IFJPVU5EX0JZVEVTX1RPX1dPUkQoY21kX3NpemUpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTM1Mi1cdFx0cmVxLVx1MDAzZWR3ZWxsX3RpbWVfbXMgPSBjcHVfdG9fbGUzMihwYXJhbXMtXHUwMDNlZHdlbGxfdGltZV9tcyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzozNTM6XHRcdGJ1ZiA9IG1tODF4X2h3X3NjYW5faF9pbnNlcnRfdGx2cyhwYXJhbXMsIGJ1Zik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0zNTQtXHR9XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMzU4LVx0cmVxLVx1MDAzZWhkci5sZW4gPSBjcHVfdG9fbGUxNigodTE2KSgoYnVmIC0gKHU4ICopcmVxKSAtIHNpemVvZihyZXEtXHUwMDNlaGRyKSkpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6MzU5Olx0cmV0ID0gbW04MXhfY21kX3R4KG1vcnMsIE5VTEwsIChzdHJ1Y3QgaG9zdF9jbWRfcmVxICopcmVxLCAwLCAwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTM2MC1cdGtmcmVlKHJlcSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMzY0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6MzY1OmludCBtbTgxeF9jbWRfc2V0X3R4cG93ZXIoc3RydWN0IG1tODF4ICptb3JzLCBzMzIgKm91dF9wb3dlcl9tYm0sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0zNjYtXHRcdFx0ICBpbnQgdHhwb3dlcl9tYm0pXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMzc0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6Mzc1Olx0cmV0ID0gbW04MXhfY21kX3R4KG1vcnMsIChzdHJ1Y3QgaG9zdF9jbWRfcmVzcCAqKVx1MDAyNnJlc3AsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0zNzYtXHRcdFx0ICAgKHN0cnVjdCBob3N0X2NtZF9yZXEgKilcdTAwMjZyZXEsIHNpemVvZihyZXNwKSwgMCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMzgyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6MzgzOmludCBtbTgxeF9jbWRfc2V0X2NoYW5uZWwoc3RydWN0IG1tODF4ICptb3JzLCB1MzIgb3BfY2hhbl9mcmVxX2h6LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMzg0LVx0XHRcdCAgdTggcHJpXzFtaHpfY2hhbl9pZHgsIHU4IG9wX2J3X21oeiwgdTggcHJpX2J3X21oeixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0zOTctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzozOTg6XHRyZXQgPSBtbTgxeF9jbWRfdHgobW9ycywgKHN0cnVjdCBob3N0X2NtZF9yZXNwICopXHUwMDI2cmVzcCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTM5OS1cdFx0XHQgICAoc3RydWN0IGhvc3RfY21kX3JlcSAqKVx1MDAyNnJlcSwgc2l6ZW9mKHJlc3ApLCAwKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy00MDUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzo0MDY6aW50IG1tODF4X2NtZF9kaXNhYmxlX2tleShzdHJ1Y3QgbW04MXggKm1vcnMsIHN0cnVjdCBtbTgxeF92aWYgKm1vcnNfdmlmLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNDA3LVx0XHRcdCAgdTE2IGFpZCwgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTQxOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjQxOTpcdHJldHVybiBtbTgxeF9jbWRfdHgobW9ycywgTlVMTCwgKHN0cnVjdCBob3N0X2NtZF9yZXEgKilcdTAwMjZyZXEsIDAsIDApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNDIwLX1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTQyMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjQyMjppbnQgbW04MXhfY21kX2luc3RhbGxfa2V5KHN0cnVjdCBtbTgxeCAqbW9ycywgc3RydWN0IG1tODF4X3ZpZiAqbW9yc192aWYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy00MjMtXHRcdFx0ICB1MTYgYWlkLCBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXksXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNDQ1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6NDQ2Olx0cmV0ID0gbW04MXhfY21kX3R4KG1vcnMsIChzdHJ1Y3QgaG9zdF9jbWRfcmVzcCAqKVx1MDAyNnJlc3AsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy00NDctXHRcdFx0ICAgKHN0cnVjdCBob3N0X2NtZF9yZXEgKilcdTAwMjZyZXEsIHNpemVvZihyZXNwKSwgMCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNDU2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6NDU3OmludCBtbTgxeF9jbWRfY2ZnX211bHRpY2FzdF9maWx0ZXIoc3RydWN0IG1tODF4ICptb3JzLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6NDU4Olx0XHRcdFx0ICAgc3RydWN0IG1tODF4X3ZpZiAqbW9yc192aWYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy00NTkte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTQ3NC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjQ3NTpcdHJldCA9IG1tODF4X2NtZF90eChtb3JzLCBOVUxMLCAoc3RydWN0IGhvc3RfY21kX3JlcSAqKXJlcSwgMCwgMCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy00NzYtXHRrZnJlZShyZXEpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTQ3OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjQ4MDppbnQgbW04MXhfY21kX2NmZ19ic3Moc3RydWN0IG1tODF4ICptb3JzLCB1MTYgdmlmX2lkLCB1MTYgYmVhY29uX2ludCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTQ4MS1cdFx0ICAgICAgdTE2IGR0aW1fcGVyaW9kLCB1MzIgY3NzaWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNDg5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6NDkwOlx0cmV0dXJuIG1tODF4X2NtZF90eChtb3JzLCBOVUxMLCAoc3RydWN0IGhvc3RfY21kX3JlcSAqKVx1MDAyNnJlcSwgMCwgMCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy00OTEtfVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNDkyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6NDkzOmludCBtbTgxeF9jbWRfY29uZmlnX2JlYWNvbl90aW1lcihzdHJ1Y3QgbW04MXggKm1vcnMsIHZvaWQgKm1tODF4X3ZpZixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTQ5NC1cdFx0XHRcdCAgYm9vbCBlbmFibGVkKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNDk1LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjQ5NjpcdHN0cnVjdCBtbTgxeF92aWYgKnZpZiA9IG1tODF4X3ZpZjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTQ5Ny1cdHN0cnVjdCBob3N0X2NtZF9yZXFfYnNzX2JlYWNvbl9jb25maWcgcmVxID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTUwMi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjUwMzpcdHJldHVybiBtbTgxeF9jbWRfdHgobW9ycywgTlVMTCwgKHN0cnVjdCBob3N0X2NtZF9yZXEgKilcdTAwMjZyZXEsIDAsIDApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNTA0LX1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTUwNS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjUwNjppbnQgbW04MXhfY21kX3NldF9wcyhzdHJ1Y3QgbW04MXggKm1vcnMsIGJvb2wgZW5hYmxlZClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTUwNy17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNTEyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6NTEzOlx0cmV0dXJuIG1tODF4X2NtZF90eChtb3JzLCBOVUxMLCAoc3RydWN0IGhvc3RfY21kX3JlcSAqKVx1MDAyNnJlcSwgMCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTUxNC1cdFx0XHQgICAgSE9TVF9DTURfUE9XRVJTQVZFX1RJTUVPVVRfTVMpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTUxNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjUxNzppbnQgbW04MXhfY21kX2NmZ19xb3Moc3RydWN0IG1tODF4ICptb3JzLCBzdHJ1Y3QgbW04MXhfcXVldWVfcGFyYW1zICpwYXJhbXMpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy01MTgte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTUyOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjUyOTpcdHJldHVybiBtbTgxeF9jbWRfdHgobW9ycywgTlVMTCwgKHN0cnVjdCBob3N0X2NtZF9yZXEgKilcdTAwMjZyZXEsIDAsIDApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNTMwLX1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTUzMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjUzMjppbnQgbW04MXhfY21kX3JtX2lmKHN0cnVjdCBtbTgxeCAqbW9ycywgdTE2IHZpZl9pZClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTUzMy17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNTM3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6NTM4Olx0cmV0dXJuIG1tODF4X2NtZF90eChtb3JzLCBOVUxMLCAoc3RydWN0IGhvc3RfY21kX3JlcSAqKVx1MDAyNnJlcSwgMCwgMCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy01MzktfVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNTQwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6NTQxOmludCBtbTgxeF9jbWRfc2V0X2ZyYWdfdGhyZXNob2xkKHN0cnVjdCBtbTgxeCAqbW9ycywgdTMyIGZyYWdfdGhyZXNob2xkKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNTQyLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy01NDktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzo1NTA6XHRyZXR1cm4gbW04MXhfY21kX3R4KG1vcnMsIE5VTEwsIChzdHJ1Y3QgaG9zdF9jbWRfcmVxICopXHUwMDI2cmVxLCAwLCAwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTU1MS19XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy01NTItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzo1NTM6aW50IG1tODF4X2NtZF9nZXRfZGlzYWJsZWRfY2hhbm5lbHMoXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzo1NTQ6XHRzdHJ1Y3QgbW04MXggKm1vcnMsIHN0cnVjdCBob3N0X2NtZF9yZXNwX2dldF9kaXNhYmxlZF9jaGFubmVscyAqcmVzcCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTU1NS1cdHVpbnQgcmVzcF9sZW4pXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNTYwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6NTYxOlx0cmV0dXJuIG1tODF4X2NtZF90eChtb3JzLCAoc3RydWN0IGhvc3RfY21kX3Jlc3AgKilyZXNwLCBcdTAwMjZyZXEsIHJlc3BfbGVuLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNTYyLVx0XHRcdCAgICAwKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaC0xOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oOjE5OnN0cnVjdCBtbTgxeF9xdWV1ZV9wYXJhbXM7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaC0yMC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oOjIxOmVudW0gbW04MXhfY21kX3JldHVybl9jb2RlIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oLTIyLVx0TU04MVhfUkVUX1NVQ0NFU1MgPSAwLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oPTQ0PXN0cnVjdCBob3N0X2NtZF9ldmVudCB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmgtNDgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaDo0OTppbnQgbW04MXhfY21kX3Jlc3BfcHJvY2VzcyhzdHJ1Y3QgbW04MXggKm1vcnMsIHN0cnVjdCBza19idWZmICpza2IpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmg6NTA6aW50IG1tODF4X2NtZF9hZGRfaWYoc3RydWN0IG1tODF4ICptb3JzLCB1MTYgKnZpZl9pZCwgY29uc3QgdTggKmFkZHIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaC01MS1cdFx0ICAgICBlbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmg6NTI6aW50IG1tODF4X2NtZF9nZXRfY2FwYWJpbGl0aWVzKHN0cnVjdCBtbTgxeCAqbW9ycywgdTE2IHZpZl9pZCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oOjUzOlx0XHRcdCAgICAgICBzdHJ1Y3QgbW04MXhfZndfY2FwcyAqY2FwYWJpbGl0aWVzKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oOjU0OmludCBtbTgxeF9jbWRfY2ZnX3FvcyhzdHJ1Y3QgbW04MXggKm1vcnMsIHN0cnVjdCBtbTgxeF9xdWV1ZV9wYXJhbXMgKnBhcmFtcyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaDo1NTppbnQgbW04MXhfY21kX2NvbmZpZ19iZWFjb25fdGltZXIoc3RydWN0IG1tODF4ICptb3JzLCB2b2lkICptbTgxeF92aWYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaC01Ni1cdFx0XHRcdCAgYm9vbCBlbmFibGVkKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oOjU3OmludCBtbTgxeF9jbWRfY2ZnX2JzcyhzdHJ1Y3QgbW04MXggKm1vcnMsIHUxNiB2aWZfaWQsIHUxNiBiZWFjb25faW50LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmgtNTgtXHRcdCAgICAgIHUxNiBkdGltX3BlcmlvZCwgdTMyIGNzc2lkKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oOjU5OmludCBtbTgxeF9jbWRfc2V0X2NoYW5uZWwoc3RydWN0IG1tODF4ICptb3JzLCB1MzIgb3BfY2hhbl9mcmVxX2h6LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmgtNjAtXHRcdFx0ICB1OCBwcmlfMW1oel9jaGFuX2lkeCwgdTggb3BfYndfbWh6LCB1OCBwcmlfYndfbWh6LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmgtNjEtXHRcdFx0ICBzMzIgKnBvd2VyX21ibSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaDo2MjppbnQgbW04MXhfY21kX2dldF9tYXhfdHhwb3dlcihzdHJ1Y3QgbW04MXggKm1vcnMsIHMzMiAqb3V0X3Bvd2VyX21ibSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaDo2MzppbnQgbW04MXhfY21kX3NldF90eHBvd2VyKHN0cnVjdCBtbTgxeCAqbW9ycywgczMyICpvdXRfcG93ZXJfbWJtLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmgtNjQtXHRcdFx0ICBpbnQgdHhwb3dlcl9tYm0pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmg6NjU6aW50IG1tODF4X2NtZF9od19zY2FuKHN0cnVjdCBtbTgxeCAqbW9ycywgc3RydWN0IG1tODF4X2h3X3NjYW5fcGFyYW1zICpwYXJhbXMsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaC02Ni1cdFx0ICAgICAgYm9vbCBzdG9yZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaDo2NzppbnQgbW04MXhfY21kX3NldF9wcyhzdHJ1Y3QgbW04MXggKm1vcnMsIGJvb2wgZW5hYmxlZCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaDo2ODppbnQgbW04MXhfY21kX2NmZ19tdWx0aWNhc3RfZmlsdGVyKHN0cnVjdCBtbTgxeCAqbW9ycyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oOjY5Olx0XHRcdFx0ICAgc3RydWN0IG1tODF4X3ZpZiAqbW9yc192aWYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmg6NzA6aW50IG1tODF4X2NtZF9zdGFfc3RhdGUoc3RydWN0IG1tODF4ICptb3JzLCBzdHJ1Y3QgbW04MXhfdmlmICptb3JzX3ZpZiwgdTE2IGFpZCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oLTcxLVx0XHRcdHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaC03Mi1cdFx0XHRlbnVtIGllZWU4MDIxMV9zdGFfc3RhdGUgc3RhdGUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmg6NzM6aW50IG1tODF4X2NtZF9pbnN0YWxsX2tleShzdHJ1Y3QgbW04MXggKm1vcnMsIHN0cnVjdCBtbTgxeF92aWYgKm1vcnNfdmlmLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmgtNzQtXHRcdFx0ICB1MTYgYWlkLCBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXksXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmgtNzYtXHRcdFx0ICBlbnVtIGhvc3RfY21kX2Flc19rZXlfbGVuIGxlbmd0aCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaDo3NzppbnQgbW04MXhfY21kX2Rpc2FibGVfa2V5KHN0cnVjdCBtbTgxeCAqbW9ycywgc3RydWN0IG1tODF4X3ZpZiAqbW9yc192aWYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaC03OC1cdFx0XHQgIHUxNiBhaWQsIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaDo3OTppbnQgbW04MXhfY21kX3JtX2lmKHN0cnVjdCBtbTgxeCAqbW9ycywgdTE2IHZpZl9pZCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaDo4MDppbnQgbW04MXhfY21kX3NldF9mcmFnX3RocmVzaG9sZChzdHJ1Y3QgbW04MXggKm1vcnMsIHUzMiBmcmFnX3RocmVzaG9sZCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaDo4MTppbnQgbW04MXhfY21kX2dldF9kaXNhYmxlZF9jaGFubmVscyhcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oOjgyOlx0c3RydWN0IG1tODF4ICptb3JzLCBzdHJ1Y3QgaG9zdF9jbWRfcmVzcF9nZXRfZGlzYWJsZWRfY2hhbm5lbHMgKnJlc3AsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaC04My1cdHVpbnQgcmVzcF9sZW4pO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTEwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6MTE6c3RhdGljIGludCBtbTgxeF9jb3JlX2F0dGFjaF9yZWdzKHN0cnVjdCBtbTgxeCAqbW9ycylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTEyLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0xNC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjE1Olx0bW04MXhfY2xhaW1fYnVzKG1vcnMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6MTY6XHRyZXQgPSBtbTgxeF9yZWczMl9yZWFkKG1vcnMsIE1NODEwOF9SRUdfQ0hJUF9JRCwgXHUwMDI2bW9ycy1cdTAwM2VjaGlwX2lkKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjE3Olx0bW04MXhfcmVsZWFzZV9idXMobW9ycyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0xOC1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0yNi1cdFx0bW9ycy1cdTAwM2VyZWdzID0gXHUwMDI2bW04MTA4X3JlZ3M7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYzoyNzpcdFx0bW9ycy1cdTAwM2VoaWYub3BzID0gXHUwMDI2bW04MXhfeWFwc19vcHM7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0yOC1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtMzUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYzozNjpzdGF0aWMgdm9pZCBtbTgxeF9jb3JlX2luaXRfbWFjX2FkZHIoc3RydWN0IG1tODF4ICptb3JzKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtMzcte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6Mzg6XHRpbnQgcmV0ID0gbW04MXhfaHdfb3RwX2dldF9tYWNfYWRkcihtb3JzKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTM5LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTQzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6NDQ6Y2hhciAqbW04MXhfY29yZV9nZXRfZndfcGF0aCh1MzIgY2hpcF9pZCwgdTMyIGZ3X3ZlcilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTQ1LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy01OC19XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYzo1OTpFWFBPUlRfU1lNQk9MX0dQTChtbTgxeF9jb3JlX2dldF9md19wYXRoKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTYwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6NjE6c3RydWN0IG1tODF4ICptbTgxeF9jb3JlX2FsbG9jKHNpemVfdCBwcml2X3NpemUsIHN0cnVjdCBkZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTYyLXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjYzOlx0cmV0dXJuIG1tODF4X21hY19hbGxvYyhwcml2X3NpemUsIGRldik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy02NC19XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYzo2NTpFWFBPUlRfU1lNQk9MX0dQTChtbTgxeF9jb3JlX2FsbG9jKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTY2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6Njc6aW50IG1tODF4X2NvcmVfaW5pdChzdHJ1Y3QgbW04MXggKm1vcnMpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy02OC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtNzMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYzo3NDpcdG1tODF4X2NvcmVfaW5pdF9tYWNfYWRkcihtb3JzKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTc1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6NzY6XHRyZXQgPSBtbTgxeF9jb3JlX2F0dGFjaF9yZWdzKG1vcnMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtNzctXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTg5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6OTA6XHRyZXQgPSBtbTgxeF9oaWZfaW5pdChtb3JzKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTkxLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0xMDUtfVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6MTA2OkVYUE9SVF9TWU1CT0xfR1BMKG1tODF4X2NvcmVfaW5pdCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0xMDctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYzoxMDg6aW50IG1tODF4X2NvcmVfcmVnaXN0ZXIoc3RydWN0IG1tODF4ICptb3JzKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtMTA5LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjExMDpcdHJldHVybiBtbTgxeF9tYWNfcmVnaXN0ZXIobW9ycyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0xMTEtfVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6MTEyOkVYUE9SVF9TWU1CT0xfR1BMKG1tODF4X2NvcmVfcmVnaXN0ZXIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtMTEzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6MTE0OnZvaWQgbW04MXhfY29yZV91bnJlZ2lzdGVyKHN0cnVjdCBtbTgxeCAqbW9ycylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTExNS17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYzoxMTY6XHRtbTgxeF9tYWNfdW5yZWdpc3Rlcihtb3JzKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTExNy19XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYzoxMTg6RVhQT1JUX1NZTUJPTF9HUEwobW04MXhfY29yZV91bnJlZ2lzdGVyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTExOS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjEyMDp2b2lkIG1tODF4X2NvcmVfZGVpbml0KHN0cnVjdCBtbTgxeCAqbW9ycylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTEyMS17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYzoxMjI6XHRtbTgxeF9oaWZfZmluaXNoKG1vcnMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtMTIzLVx0Zmx1c2hfd29ya3F1ZXVlKG1vcnMtXHUwMDNlbmV0X3dxKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0xMjctfVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6MTI4OkVYUE9SVF9TWU1CT0xfR1BMKG1tODF4X2NvcmVfZGVpbml0KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTEyOS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjEzMDp2b2lkIG1tODF4X2NvcmVfZnJlZShzdHJ1Y3QgbW04MXggKm1vcnMpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0xMzEte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6MTMyOlx0bW04MXhfbWFjX2ZyZWUobW9ycyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0xMzMtfVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6MTM0OkVYUE9SVF9TWU1CT0xfR1BMKG1tODF4X2NvcmVfZnJlZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0xMzUtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtNTQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaDo1NTpzdHJ1Y3QgbW04MXhfYnVzX29wcztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oOjU2OnN0cnVjdCBtbTgxeF9oaWZfb3BzO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtNTctXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtNjItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaDo2MzplbnVtIG1tODF4X2NhcHNfZmxhZ3Mge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtNjQtXHRNTTgxWF9DQVBTX0ZXX1NUQVJUID0gMCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaC0xMzEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaDoxMzI6c3RydWN0IG1tODF4X2Z3X2NhcHMge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMTMzLVx0dTMyIGZsYWdzW0ZXX0NBUEFCSUxJVElFU19GTEFHU19XSURUSF07XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMTM3LVx0dTggbWF4aW11bV9hbXBkdV9sZW5ndGhfZXhwb25lbnQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaDoxMzg6XHR1OCBtbTgxeF9tbXNzX29mZnNldDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTEzOS19O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTE0MS0jZGVmaW5lIE1NODFYX0ZXX1NVUFAoTU04MVhfQ0FQUywgQ0FQQUJJTElUWSkgXFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oOjE0MjpcdG1tODF4X2NhcHNfc3VwcG9ydGVkKE1NODFYX0NBUFMsIE1NODFYX0NBUFNfIyNDQVBBQklMSVRZKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMTQzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmg6MTQ0OnN0YXRpYyBpbmxpbmUgYm9vbCBtbTgxeF9jYXBzX3N1cHBvcnRlZChzdHJ1Y3QgbW04MXhfZndfY2FwcyAqY2FwcyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oOjE0NTpcdFx0XHRcdFx0ZW51bSBtbTgxeF9jYXBzX2ZsYWdzIGZsYWcpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaC0xNDYte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTE1MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oOjE1MjpzdHJ1Y3QgbW04MXhfcHMge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMTUzLVx0dTMyIHdha2Vycztcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaC0xNjAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaDoxNjE6ZW51bSBtbTgxeF9wYWdlX2FjaSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaC0xNjItXHRNTTgxWF9BQ0lfQkUgPSAwLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTE2Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oOjE2ODplbnVtIG1tODF4X3Fvc190aWRfdXBfaW5kZXgge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMTY5LVx0TU04MVhfUU9TX1RJRF9VUF9CSyA9IDEsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMTgxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmg6MTgyOnN0cnVjdCBtbTgxeF9zd192ZXJzaW9uIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTE4My1cdHU4IG1ham9yO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTE4Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oOjE4ODpzdHJ1Y3QgbW04MXhfc3RhIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTE4OS1cdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWY7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMTk1LVx0aW50IG1heF9id19taHo7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaDoxOTY6XHRzdHJ1Y3QgbW04MXhfcmNfc3RhIHJjO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMTk3LVx0c3RydWN0IG1tcmNfcmF0ZSBsYXN0X3N0YV90eF9yYXRlO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTIwMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oOjIwMjpzdHJ1Y3QgbW04MXhfdmlmIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oOjIwMzpcdHN0cnVjdCBtbTgxeCAqbW9ycztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTIwNC1cdHUxNiBpZDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaC0yMTYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaDoyMTc6c3RydWN0IG1tODF4X3N0YWxlX3R4X3N0YXR1cyB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaC0yMTgtXHQvKiBTdGFsZSBUeCBsb2NrICovXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmg9MjIzPXN0cnVjdCBtY2FzdF9maWx0ZXIge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTIzMi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oOjIzMzplbnVtIG1tODF4X2h3X3NjYW5fb3Age1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMjM0LVx0TU04MVhfSFdfU0NBTl9PUF9TVEFSVCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaC0yMzctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaDoyMzg6c3RydWN0IG1tODF4X2h3X3NjYW5fcGFyYW1zIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTIzOS1cdHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTI0NS1cdHUzMiBkd2VsbF9vbl9ob21lX21zO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmg6MjQ2Olx0ZW51bSBtbTgxeF9od19zY2FuX29wIG9wZXJhdGlvbjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTI0Ny1cdGJvb2wgc3RvcmU7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMjYxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmg6MjYyOmVudW0gbW04MXhfaHdfc2Nhbl9zdGF0ZSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaC0yNjMtXHRIV19TQ0FOX1NUQVRFX0lETEUsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMjY3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmg6MjY4OnN0cnVjdCBtbTgxeF9od19zY2FuIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oOjI2OTpcdGVudW0gbW04MXhfaHdfc2Nhbl9zdGF0ZSBzdGF0ZTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTI3MC1cdHN0cnVjdCBjb21wbGV0aW9uIHNjYW5fZG9uZTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oOjI3MTpcdHN0cnVjdCBtbTgxeF9od19zY2FuX3BhcmFtcyAqcGFyYW1zO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMjcyLVx0c3RydWN0IGRlbGF5ZWRfd29yayB0aW1lb3V0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTI3NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oOjI3NjplbnVtIG1tODF4X2hpZl9ldmVudF9mbGFncyB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaC0yNzctXHRNTTgxWF9ISUZfRVZUX1JYX1BFTkQsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMjg4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmg6Mjg5OmVudW0gbW04MXhfc3RhdGVfZmxhZ3Mge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMjkwLVx0TU04MVhfU1RBVEVfQ0hJUF9VTlJFU1BPTlNJVkUsXG4tLVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDc6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxNjUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNTTgxWCBEcml2ZXIgYW5kIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkgc2VlIHRoaXMgcGF0Y2ggdGFyZ2V0cyB0aGUgTU04MVggZHJpdmVyLCB3aGljaCBpcyBvbmx5IGJ1aWx0IGlmIGBDT05GSUdfTU04MVhgIGlzIGVuYWJsZWQsIHdoaWNoIGlzIGEga2V5IHN0YXJ0aW5nIHBvaW50LiBJdCBhcHBlYXJzIHRoZSBkcml2ZXIgaGFzIGJvdGggVVNCIGFuZCBTRElPIHZhcmlhbnRzIOKAkyBzcGVjaWZpY2FsbHksIGlmIGBDT05GSUdfTU04MVhfVVNCYCBvciBgQ09ORklHX01NODFYX1NESU9gIGFyZSBjb25maWd1cmVkLiBFeGNlbGxlbnQuIFRoaXMgaW1tZWRpYXRlbHkgb3BlbnMgdXAgZGlmZmVyZW50IGZ1enppbmcgYXZlbnVlcy4KCkZvciBVU0IsIHRoZSBvcHRpb25zIGFyZSBwcmV0dHkgY2xlYXIuIEkgY2FuIGxldmVyYWdlIGVpdGhlciB0aGUgZHVtbXkgSENEIChVU0IgR2FkZ2V0KSBvciB0aGUgcG93ZXIgb2Ygc3l6a2FsbGVyJiMzOTtzIFVTQiBmdXp6aW5nIGNhcGFiaWxpdGllcy4gVGhhdCYjMzk7cyBhIHNvbGlkIHBhdGggdG8gZXhwbG9yZSwgZXNwZWNpYWxseSBnaXZlbiB0aGUgZXN0YWJsaXNoZWQgdG9vbHMuIFNESU8gaXMgYWxzbyBwb3RlbnRpYWxseSBpbnRlcmVzdGluZywgYnV0IGl0IHJlbGllcyBvbiBhbiBTRElPIGVtdWxhdG9yLiBXaGlsZSBpdCYjMzk7cyBwcm9iYWJseSBmZWFzaWJsZSwgdGhlIFVTQiByb3V0ZSBzZWVtcyBtb3JlIGRpcmVjdGx5IGFjY2Vzc2libGUgYW5kIGxlc3MgcmVsaWFudCBvbiBleHRlcm5hbCBzZXR1cC4KClRoZSBzcGVjaWZpYyBtb2RpZmljYXRpb24gaXMgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuY2AuIEFoLCBmaXJtd2FyZSBwYXJzaW5nIGxvZ2ljLiBUaGlzIGlzIHByb21pc2luZyEgRmlybXdhcmUgbG9hZGluZyBpcyB1c3VhbGx5IGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuIEZpcm13YXJlIGlzIGxvYWRlZCB1c2luZyBgcmVxdWVzdF9maXJtd2FyZWAgb3IgZGlyZWN0bHkgZnJvbSB0aGUgZmlsZXN5c3RlbS4gU3l6a2FsbGVyJiMzOTtzIHN1cHBvcnQgZm9yIG1vY2tpbmcgYHJlcXVlc3RfZmlybXdhcmVgIG1ha2VzIHRoYXQgZXZlbiBtb3JlIGF0dHJhY3RpdmUuCgpNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGZ1bmN0aW9ucyBgbW04MXhfZndfbG9hZF9md2AgYW5kIGBtbTgxeF9md19wYXJzZV9leHRfaG9zdF90YmxgLiBUaG9zZSBhcmUgdGhlIHByaW1lIHN1c3BlY3RzLCBnaXZlbiB0aGUgY29udGV4dC4gVGhlc2UgZnVuY3Rpb25zIHdpbGwgYmUgdGhlIGZvY2FsIHBvaW50IHRvIGlkZW50aWZ5IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgd2l0aGluIHRoZSBmaXJtd2FyZSBsb2FkaW5nIGFuZCBwYXJzaW5nIHByb2Nlc3MuIEkmIzM5O2xsIG5lZWQgdG8gZGlzc2VjdCB0aGUgbG9naWMgd2l0aGluIHRob3NlIGZ1bmN0aW9ucyB0byBkZXRlcm1pbmUgaG93IHN5emthbGxlciBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZSBlZmZlY3RpdmUgZnV6emluZyBpbnB1dHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW04MXhfZndfbG9hZF9mdyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYz05OT1zdGF0aWMgaW50IG1tODF4X2Z3X3NldF9ib290X2FkZHIoc3RydWN0IG1tODF4ICptb3JzLCB1aW50MzJfdCBhZGRyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy0xMDktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmM6MTEwOnN0YXRpYyBpbnQgbW04MXhfZndfbG9hZF9mdyhzdHJ1Y3QgbW04MXggKm1vcnMsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmMtMTExLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmM9NjI3PXN0YXRpYyBpbnQgX19tbTgxeF9md19mbGFzaChzdHJ1Y3QgbW04MXggKm1vcnMsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTY0My1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYzo2NDQ6XHRyZXQgPSBtbTgxeF9md19sb2FkX2Z3KG1vcnMsIGZ3KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy02NDUtXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDk2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIEZpcm13YXJlIEZsYXNocG9pbnQqKgoKUmlnaHQsIHNvIHRoZSBmaXJtd2FyZSBsb2FkaW5nIHByb2Nlc3Mga2lja3Mgb2ZmIGluIGBfX21tODF4X2Z3X2ZsYXNoYC4gU2VlbXMgbGlrZSBhIHNlbnNpYmxlIG5hbWluZyBjb252ZW50aW9uLiBOb3csIHRoZSBrZXkgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbGluZyBjb250ZXh0LiBHb3R0YSB0cmFjZSBiYWNrIHRocm91Z2ggdGhlIGNvZGUgYW5kIGZpZ3VyZSBvdXQgdGhlIGVudHJ5IHBvaW50IGFuZCB0aGUgZXhlY3V0aW9uIGZsb3cgbGVhZGluZyB1cCB0byB0aGF0IGZ1bmN0aW9uIGNhbGwuIE5lZWQgdG8gc2VlIHdoZXJlIHRoZSBmaXJtd2FyZSBpbWFnZSBpcyBjb21pbmcgZnJvbSAoZXh0ZXJuYWwgc3RvcmFnZSwgbmV0d29yaywgZXRjLikgYW5kIHdoYXQgdHJpZ2dlcnMgdGhlIGZsYXNoIG9wZXJhdGlvbi4gVW5kZXJzdGFuZGluZyB0aGUgcHJlY29uZGl0aW9ucyBiZWZvcmUgYF9fbW04MXhfZndfZmxhc2hgIGlzIGNydWNpYWwgZm9yIGRlYnVnZ2luZyBhbnkgaXNzdWVzIG9yIG9wdGltaXppbmcgdGhlIGxvYWRpbmcgcHJvY2VzcyBpdHNlbGYuIFRpbWUgdG8gZmlyZSB1cCB0aGUgZGVidWdnZXIgYW5kIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgY2FsbCBzdGFjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX21tODF4X2Z3X2ZsYXNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jPTU2ND1pbnQgbW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsKHN0cnVjdCBtbTgxeCAqbW9ycylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmMtNjI2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jOjYyNzpzdGF0aWMgaW50IF9fbW04MXhfZndfZmxhc2goc3RydWN0IG1tODF4ICptb3JzLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTYyOC1cdFx0XHQgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpiY2YsIGJvb2wgcmVzZXQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jPTY2Nj1zdGF0aWMgaW50IG1tODF4X2Z3X2ZsYXNoKHN0cnVjdCBtbTgxeCAqbW9ycywgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmMtNjcyLVx0d2hpbGUgKHJldHJpZXMtLSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jOjY3MzpcdFx0cmV0ID0gX19tbTgxeF9md19mbGFzaChtb3JzLCBmdywgYmNmLCByZXNldCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmMtNjc0LVx0XHRpZiAoIXJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDY1MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKiptbTgxeF9md19mbGFzaDogQSBEZWVwIERpdmUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiBgbW04MXhfZndfZmxhc2hgLiBIbW0sIHRoYXQgbmFtZSB0cmlnZ2VycyBzb21ldGhpbmcuIEl0IGltbWVkaWF0ZWx5IHN1Z2dlc3RzIGEgZmlybXdhcmUgZmxhc2hpbmcgdXRpbGl0eSwgbGlrZWx5IGZvciBhIHNwZWNpZmljIGhhcmR3YXJlIHBsYXRmb3JtIOKAkyB0aGUgJiMzNDttbTgxeCYjMzQ7IHBhcnQgaXMgdGhlIGdpdmVhd2F5LiBJJiMzOTtkIHdhZ2VyIGl0JiMzOTtzIGEgcHJvcHJpZXRhcnkgb3IgdmVuZG9yLXNwZWNpZmljIHRvb2wuIE5vdywgdGhlIHF1ZXN0aW9ucyBzdGFydCBwb3BwaW5nOiBJcyB0aGlzIGEgYm9vdGxvYWRlcj8gQSBnZW5lcmFsLXB1cnBvc2UgZmlybXdhcmUgdXBkYXRlcj8gRG9lcyBpdCBvcGVyYXRlIHZpYSBKVEFHLCBVQVJULCBVU0IsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBXaGF0IHNlY3VyaXR5IGZlYXR1cmVzIGFyZSBpbiBwbGFjZT8gRG9lcyBpdCBzdXBwb3J0IHJvbGxiYWNrIG1lY2hhbmlzbXM/IFdoYXQgYWJvdXQgZXJyb3IgaGFuZGxpbmc/IEFuZCwgY3JpdGljYWxseSwgdGhlIHRhcmdldCBkZXZpY2VzLi4uIGFyZSB3ZSB0YWxraW5nIGVtYmVkZGVkIHN5c3RlbXMsIG5ldHdvcmsgYXBwbGlhbmNlcywgb3Igc29tZXRoaW5nIGVsc2U/IFVuZGVyc3RhbmRpbmcgdGhlIGhhcmR3YXJlIGNvbnRleHQgaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIGtub3cgdGhlIGFyY2hpdGVjdHVyZSwgbWVtb3J5IG1hcCwgYW5kIGFueSBoYXJkd2FyZS1zcGVjaWZpYyBxdWlya3MuIFRoaXMgaXMgYWxsIGFzc3VtaW5nIEkgd2FudCB0byBmbGFzaCBuZXcgZmlybXdhcmUgb250byB0aGUgZGV2aWNlLiBXaGF0IGFyZSB0aGUgcG9zc2liaWxpdGllcyBhcm91bmQgdGhpcyB0eXBlIG9mIGZsYXNoaW5nIHNvZnR3YXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttbTgxeF9md19mbGFzaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYz01NjQ9aW50IG1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibChzdHJ1Y3QgbW04MXggKm1vcnMpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTYyNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYzo2Mjc6c3RhdGljIGludCBfX21tODF4X2Z3X2ZsYXNoKHN0cnVjdCBtbTgxeCAqbW9ycywgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy02MjgtXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqYmNmLCBib29sIHJlc2V0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy02NjUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmM6NjY2OnN0YXRpYyBpbnQgbW04MXhfZndfZmxhc2goc3RydWN0IG1tODF4ICptb3JzLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTY2Ny1cdFx0XHQgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqYmNmLCBib29sIHJlc2V0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy02NzItXHR3aGlsZSAocmV0cmllcy0tKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmM6NjczOlx0XHRyZXQgPSBfX21tODF4X2Z3X2ZsYXNoKG1vcnMsIGZ3LCBiY2YsIHJlc2V0KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy02NzQtXHRcdGlmICghcmV0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYz03MTk9aW50IG1tODF4X2Z3X2luaXQoc3RydWN0IG1tODF4ICptb3JzLCBib29sIHJlc2V0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy03NjAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmM6NzYxOlx0cmV0ID0gbW04MXhfZndfZmxhc2gobW9ycywgZncsIGJjZiwgcmVzZXQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTc2Mi1cdGlmIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDc6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0NjgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBGaXJtd2FyZSBEZWVwIERpdmUgLSBtbTgxeF9md19pbml0KioKCkFscmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGZpcm13YXJlIGluaXRpYWxpemF0aW9uLiBTcGVjaWZpY2FsbHksIHRoYXQgYG1tODF4X2Z3X2luaXRgIGZ1bmN0aW9uLiBSaWdodCBvZmYgdGhlIGJhdCwgSSYjMzk7bSB0aGlua2luZywgJiMzNDtPa2F5LCB3aGF0JiMzOTtzICp0aGlzKiBkb2luZz8mIzM0OyBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHRoZSB2ZXJ5IGZpcnN0IHN0ZXBzIGluIGJyaW5naW5nIHVwIHRoaXMgcGFydGljdWxhciBoYXJkd2FyZS4gV2UmIzM5O3JlIHRhbGtpbmcgbG93LWxldmVsIHN0dWZmIGhlcmUsIEkgcHJlc3VtZS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgcmVnaXN0ZXJpbmcgdGhlIGRldmljZSwgY29uZmlndXJpbmcgY2xvY2tzLCBzZXR0aW5nIHVwIGludGVycnVwdCB2ZWN0b3JzLCBtZW1vcnkgYWxsb2NhdGlvbiwgb3IgYWxsIG9mIHRoZSBhYm92ZT8gV2hhdCYjMzk7cyB0aGUgY29udGV4dCwgd2hhdCYjMzk7cyB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmU/IElzIHRoaXMgYSBkcml2ZXItc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24sIG9yIHNvbWV0aGluZyBtb3JlIGdsb2JhbCB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBvdGhlciBmdW5jdGlvbnM/IEFueSBoYXJkd2FyZS1zcGVjaWZpYyBjb25zaWRlcmF0aW9ucyBpbiB0aGlzIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlPyBEb2VzIHRoaXMgcmVxdWlyZSBhbnkgc3BlY2lmaWMgZmxhZ3Mvb3B0aW9ucyBmcm9tIHRoZSB1c2Vyc3BhY2UgYXBwbGljYXRpb24gdGhhdCBpcyBjYWxsaW5nIGl0PyBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgc2tldGNoaW5nIHRoZSBjYWxsIGdyYXBoIGFuZCBkZXBlbmRlbmNpZXMuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIGhhcmR3YXJlLCB0aGUgZmlybXdhcmUgaW1hZ2UgaXRzZWxmLCBhbmQgcG9zc2libHkgYW55IGJvb3Rsb2FkZXIgb3IgZWFybGllciBpbml0aWFsaXphdGlvbiBzdGFnZXMuIFRoZSBnb2FsIG9mIHRoaXMgcHJvY2VzcyB3b3VsZCBoYXZlIHRvIGJlIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGluIHBsYWNlIHRvIGJlZ2luIGFjdHVhbCBjb21tdW5pY2F0aW9uIGFuZCBkYXRhIHByb2Nlc3NpbmcgdXNpbmcgdGhlIGRldmljZS4gR290dGEgZGlnIGluIGFuZCBzZWUgdGhlIGRldGFpbHMgb2YgdGhpcyBvbmUsIHRoZSBudWFuY2VzIG9mIHRoYXQgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21tODF4X2Z3X2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmM9Njg5PXN0YXRpYyBpbnQgbW04MXhfZndfcmVxdWVzdChzdHJ1Y3QgbW04MXggKm1vcnMsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqKmZ3KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy03MTgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmM6NzE5OmludCBtbTgxeF9md19pbml0KHN0cnVjdCBtbTgxeCAqbW9ycywgYm9vbCByZXNldClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy03MjAte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuaD0xMzQ9c3RydWN0IGV4dF9ob3N0X3RibCB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5oLTEzOS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuaDoxNDA6aW50IG1tODF4X2Z3X2luaXQoc3RydWN0IG1tODF4ICptb3JzLCBib29sIHJlc2V0KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuaC0xNDEtaW50IG1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibChzdHJ1Y3QgbW04MXggKm1vcnMpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM9MjEwNz1zdGF0aWMgaW50IG1tODF4X21hY19yZXN0YXJ0KHN0cnVjdCBtbTgxeCAqbW9ycylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxMzktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jOjIxNDA6XHRyZXQgPSBtbTgxeF9md19pbml0KG1vcnMsIHRydWUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTQxLVx0aWYgKHJldCBcdTAwM2MgMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjI3MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKiptbTgxeF9md19pbml0IEludmVzdGlnYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgbW04MXhfZndfaW5pdGAgZnVuY3Rpb24uIFRoZSBjb2RlIHNheXMgaXQmIzM5O3MgY2FsbGVkIGJ5IGBtbTgxeF9tYWNfcmVzdGFydGAuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBidXQgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IHdoZXJlICplbHNlKiBpcyB0aGlzIGZ1bmN0aW9uIGJlaW5nIGludm9rZWQ/IElzIGBtbTgxeF9tYWNfcmVzdGFydGAgdGhlIG9ubHkgY2FsbGluZyBmdW5jdGlvbiwgb3IgaXMgdGhlcmUgdGhlIHBvc3NpYmlsaXR5IG9mIG90aGVyIGNvZGUgcGF0aHMgb3IgZHJpdmVycyBvciBtb2R1bGVzIHRoYXQgYWxzbyBjYWxsIGBtbTgxeF9md19pbml0YD8gSSBuZWVkIHRvIHRyYWNrIGRvd24gYWxsIHRoZSBjYWxsIHNpdGVzIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgaXRzIHVzYWdlIGFuZCBhbnkgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBvciBlZGdlIGNhc2VzLiBBIHNvbGlkIGdyYXNwIG9mIGV2ZXJ5IGNhbGwgc2l0ZSB3aWxsIGFsbG93IG1lIHRvIGFjY3VyYXRlbHkgZGVzY3JpYmUgaG93IHRoZSBmdW5jdGlvbiBiZWhhdmVzIGluIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21tODF4X21hY19yZXN0YXJ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYz0yMDcxPXN0YXRpYyB1MzIgbW04MXhfZ2V0X2V4cGVjdGVkX3Rocm91Z2hwdXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMDkwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYzoyMDkxOnN0YXRpYyB2b2lkIG1tODF4X21hY19yZXN0YXJ0X2NsZWFudXBfaXRlcih2b2lkICpkYXRhLCB1OCAqbWFjLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMDkyLVx0XHRcdFx0XHQgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjA5Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjA5ODpzdGF0aWMgdm9pZCBtbTgxeF9tYWNfcmVzdGFydF9jbGVhbnVwKHN0cnVjdCBtbTgxeCAqbW9ycylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjA5OS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTAxLVx0XHRcdFx0XHQgICAgSUVFRTgwMjExX0lGQUNFX0lURVJfTk9STUFMLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYzoyMTAyOlx0XHRcdFx0XHQgICAgbW04MXhfbWFjX3Jlc3RhcnRfY2xlYW51cF9pdGVyLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTAzLVx0XHRcdFx0XHQgICAgTlVMTCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTA2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYzoyMTA3OnN0YXRpYyBpbnQgbW04MXhfbWFjX3Jlc3RhcnQoc3RydWN0IG1tODF4ICptb3JzKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTA4LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxMzctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jOjIxMzg6XHRtbTgxeF9tYWNfcmVzdGFydF9jbGVhbnVwKG1vcnMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTM5LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM9MjE3MD1zdGF0aWMgaW50IG1tODF4X21hY19vcHNfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxODAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jOjIxODE6XHRcdHJldCA9IG1tODF4X21hY19yZXN0YXJ0KG1vcnMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTgyLVx0XHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYz0yMjYxPXN0YXRpYyB2b2lkIG1tODF4X3JlZ19ub3RpZmllcihzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjI3Mi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjI3MzpcdHJldCA9IG1tODF4X21hY19yZXN0YXJ0KG1vcnMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMjc0LVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDc6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMzOTcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGlnZ2luZyBpbnRvIHRoZSBNTTgxWCBEcml2ZXIgQXJjaGl0ZWN0dXJlKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgY29udHJvbCBmbG93IGhlcmUgaW4gdGhlIE1NODFYIGRyaXZlciwgYW5kIGl0JiMzOTtzIGxvb2tpbmcgbGlrZSBgbW04MXhfbWFjX3Jlc3RhcnRgIGlzIGEga2V5IGZ1bmN0aW9uLiBJJiMzOTttIHNlZWluZyBpdCBjYWxsZWQgZnJvbSBib3RoIGBtbTgxeF9tYWNfb3BzX2FkZF9pbnRlcmZhY2VgIGFuZCBhbHNvIHRoZSBgbW04MXhfcmVnX25vdGlmaWVyYCBmdW5jdGlvbi4gVGhhdCBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIHNob3dpbmcgbWUgd2hlcmUgdGhlIHJlc3RhcnQgYWN0aW9uIGlzIHRyaWdnZXJlZC4gVGhpcyBpbXBsaWVzIHRoYXQgaW50ZXJmYWNlIGFkZGl0aW9uIGFuZCBzb21lIGZvcm0gb2YgcmVnaXN0cmF0aW9uIChsaWtlbHkgcmVsYXRlZCB0byBoYXJkd2FyZSBldmVudHMgb3IgcmVjb25maWd1cmF0aW9uKSBhcmUgdGhlIGV2ZW50cyB0aGF0IG5lY2Vzc2l0YXRlIGEgTUFDIHJlc3RhcnQuCgpOb3cgSSYjMzk7bSBwYXVzaW5nLi4uIEkgbmVlZCB0byBjbGFyaWZ5IHNvbWV0aGluZy4gSXMgdGhlIGZpcm13YXJlIGluaXRpYWxpemF0aW9uLCBgbW04MXhfZndfaW5pdGAsIGNhbGxlZCB3aXRoaW4gdGhlIHByb2JlIGZ1bmN0aW9uPyBJdCYjMzk7cyBjcml0aWNhbCBmb3IgbWUgdG8gdW5kZXJzdGFuZCB0aGUgYm9vdC11cCBzZXF1ZW5jZSBvZiB0aGUgaGFyZHdhcmUgc28gSSBuZWVkIHRvIGNoZWNrIHRoZSBwcm9iZSBmdW5jdGlvbiwgYG1tODF4X3Byb2JlYCwgdG8gbWFrZSBzdXJlIHRoYXQgYG1tODF4X2Z3X2luaXRgIGlzIGNhbGxlZC4gSWYgc28sIGFuZCBob3csIHRoYXQgd2lsbCBkZXRlcm1pbmUgdGhlIHN0YXRlIG9mIHRoZSBoYXJkd2FyZSBiZWZvcmUgYSByZXN0YXJ0IGlzIHRyaWdnZXJlZC4gVGhlIHRpbWluZyBhbmQgc2VxdWVuY2UgYXJlIGdvaW5nIHRvIGJlIGNyaXRpY2FsIGZvciBkZWJ1Z2dpbmcgYW55IHBvdGVudGlhbCBpc3N1ZXMgaW4gdGhlIGludGVyZmFjZSBzZXR1cCBvciBoYXJkd2FyZSByZWdpc3RyYXRpb24gcGF0aHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21tODF4X2Z3X2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmM9Njg5PXN0YXRpYyBpbnQgbW04MXhfZndfcmVxdWVzdChzdHJ1Y3QgbW04MXggKm1vcnMsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqKmZ3KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy03MTgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmM6NzE5OmludCBtbTgxeF9md19pbml0KHN0cnVjdCBtbTgxeCAqbW9ycywgYm9vbCByZXNldClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy03MjAte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuaD0xMzQ9c3RydWN0IGV4dF9ob3N0X3RibCB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5oLTEzOS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuaDoxNDA6aW50IG1tODF4X2Z3X2luaXQoc3RydWN0IG1tODF4ICptb3JzLCBib29sIHJlc2V0KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuaC0xNDEtaW50IG1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibChzdHJ1Y3QgbW04MXggKm1vcnMpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM9MjEwNz1zdGF0aWMgaW50IG1tODF4X21hY19yZXN0YXJ0KHN0cnVjdCBtbTgxeCAqbW9ycylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxMzktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jOjIxNDA6XHRyZXQgPSBtbTgxeF9md19pbml0KG1vcnMsIHRydWUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTQxLVx0aWYgKHJldCBcdTAwM2MgMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDIzMAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBJbnZlc3RpZ2F0aW9uIGludG8gRHJpdmVyIEluaXRpYWxpemF0aW9uIEZsb3cqKgoKSGFuZyBvbiBhIG1pbnV0ZeKApiBJJiMzOTttIHN0YXJ0aW5nIHRvIHRoaW5rIEkgbWlzc2VkIHNvbWV0aGluZyBmdW5kYW1lbnRhbCBoZXJlLiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IGBtbTgxeF9md19pbml0YCB3YXMgcGFydCBvZiB0aGUgc3RhbmRhcmQgcHJvYmUgc2VxdWVuY2UuIEJ1dCBsb29raW5nIGF0IHRoZSBicm9hZGVyIHBpY3R1cmUsIHRoYXQgZG9lc24mIzM5O3Qgc2VlbSB0byBiZSB0aGUgY2FzZS4gTXkgZmlyc3QgaW5zdGluY3Qgd291bGQgYmUgdG8gY2hlY2sgdGhhdCBgbW04MXhfZndfaW5pdGAgaXMgY2FsbGVkIGluIG90aGVyIHNjZW5hcmlvcy4KCkdpdmVuIHRoYXQgaXQmIzM5O3Mgbm90IGluIHRoZSBgcHJvYmVgIGZ1bmN0aW9uLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGUgZmlybXdhcmUgaW5pdGlhbGl6YXRpb24gKmRvZXMqIG9jY3VyLiBJIHNob3VsZCBwcm9iYWJseSBiZSBsb29raW5nIGF0IGBtbTgxeF9jb3JlX2luaXRgIG5leHQuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQg4oCTIGl0JiMzOTtzIG9mdGVuIHRoZSByb290IG9mIHRoZSBjb3JlIGRyaXZlciBpbml0aWFsaXphdGlvbiwgcmlnaHQ/IE9yIHBlcmhhcHMgdGhlIE1BQyByZWdpc3RyYXRpb24gZnVuY3Rpb24sIGBtbTgxeF9tYWNfcmVnaXN0ZXJgPyBJdCYjMzk7cyBwb3NzaWJsZSB0aGUgZmlybXdhcmUgaXMgYmVpbmcgaGFuZGxlZCB3aXRoaW4gdGhhdCBjb250ZXh0LCBlc3BlY2lhbGx5IGlmIHRoZSBNQUMgaXMgdGlnaHRseSBjb3VwbGVkIHdpdGggdGhlIGZpcm13YXJlIGxvYWRpbmcuIEkgbmVlZCB0byB0cmFjZSB0aGlzIG1vcmUgY2FyZWZ1bGx5IHRvIHNlZSB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGdldHRpbmcgY2FsbGVkLCBhbmQgd2hhdCBpdCBkb2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttbTgxeF9tYWNfcmVnaXN0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYz0xMDg9aW50IG1tODF4X2NvcmVfcmVnaXN0ZXIoc3RydWN0IG1tODF4ICptb3JzKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtMTA5LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjExMDpcdHJldHVybiBtbTgxeF9tYWNfcmVnaXN0ZXIobW9ycyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0xMTEtfVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM9MjM1NT1zdGF0aWMgdm9pZCBtbTgxeF9tYWNfc3RhbGVfdHhfc3RhdHVzX3RpbWVyX2luaXQoc3RydWN0IG1tODF4ICptb3JzKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjM2MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjM2MTppbnQgbW04MXhfbWFjX3JlZ2lzdGVyKHN0cnVjdCBtbTgxeCAqbW9ycylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjM2Mi17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuaD01MT1zdHJ1Y3QgbW04MXggKm1tODF4X21hY19hbGxvYyhzaXplX3QgcHJpdl9zaXplLCBzdHJ1Y3QgZGV2aWNlICpkZXYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuaDo1MjppbnQgbW04MXhfbWFjX3JlZ2lzdGVyKHN0cnVjdCBtbTgxeCAqbW9ycyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5oLTUzLXZvaWQgbW04MXhfbWFjX2ZyZWUoc3RydWN0IG1tODF4ICptb3JzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDc6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ5OTAKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqQW5hbHl6aW5nIGBtbTgxeF9tYWNfcmVnaXN0ZXJgKioKCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgbW04MXhfbWFjX3JlZ2lzdGVyYC4gSW1tZWRpYXRlbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGNvbnRleHQuIFdoYXQgaXMgdGhpcyBmdW5jdGlvbiBkb2luZz8gVGhlIG5hbWUgc3VnZ2VzdHMgaXQmIzM5O3MgbGlrZWx5IGRlYWxpbmcgd2l0aCByZWdpc3RlcmluZyBhIE1lZGlhIEFjY2VzcyBDb250cm9sbGVyIChNQUMpIGRldmljZSwgYW5kIHRoZSAmIzM0O21tODF4JiMzNDsgcHJlZml4IGlzIGFsbW9zdCBjZXJ0YWlubHkgYW4gaW5kaWNhdG9yIG9mIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSBvciBkcml2ZXIgaXQgcmVsYXRlcyB0by4gVGhpcyBwcm9iYWJseSBtZWFucyB0aGVyZSYjMzk7cyBzb21lIGRldmljZS1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiBvciBjb25maWd1cmF0aW9uIGludm9sdmVkLgoKSSYjMzk7ZCB3YW50IHRvIGtub3c6CgoqICAgKipXaGF0IGFyZSB3ZSByZWdpc3RlcmluZz8qKiBJcyB0aGlzIGEgcGh5c2ljYWwgTUFDLCBhIHZpcnR1YWwgaW50ZXJmYWNlLCBvciBzb21ldGhpbmcgbW9yZSBjb21wbGV4PwoqICAgKipXaGF0IGtpbmQgb2YgZGF0YSBzdHJ1Y3R1cmUgaXMgaW52b2x2ZWQ/KiogYG1tODF4X2AgaW1wbGllcyBzb21lIGNvbXBhbnkgb3Igc3BlY2lmaWMgaGFyZHdhcmUsIHNvIHdoYXQmIzM5O3MgdGhlIGRhdGEgc3RydWN0dXJlIHR5cGUgZm9yIHRoZSBNQUMgYmVpbmcgdXNlZD8gSXMgaXQgYSBzdGFuZGFyZCBzdHJ1Y3R1cmUsIG9yIHByb3ByaWV0YXJ5PyBIb3cgZG8gd2UgaW50ZXJmYWNlIHdpdGggdGhpcyBzdHJ1Y3R1cmUuCiogICAqKldoYXQgaXMgdGhlIHJlZ2lzdGVyIG1hcD8qKiBgcmVnaXN0ZXJgIGltcGxpZXMgc29tZSBhZGRyZXNzLiBBcmUgd2UgbWFwcGluZyBtZW1vcnkgaW4ga2VybmVsLXNwYWNlLCBvciBzb21lIG90aGVyIG9wZXJhdGlvbj8gRG8gd2UgbmVlZCB0byBkZWZpbmUgdGhlIHJlZ2lzdGVyIGJhc2UgYWRkcmVzcz8KKiAgICoqV2hhdCBkcml2ZXIgbW9kZWwgaXMgYmVpbmcgdXNlZD8qKiBJcyBpdCBhIHN0YW5kYXJkIG5ldHdvcmsgZHJpdmVyIGZyYW1ld29yayBvciBzb21ldGhpbmcgY3VzdG9tPyBJcyBpdCB1c2luZyBOZXRsaW5rLCBzeXNmcywgb3IgYW5vdGhlciBpbnRlcmZhY2U/IFdoYXQgYXJlIHRoZSBzdGFuZGFyZCBjYWxscyBiZWluZyBtYWRlPwoqICAgKipBcmUgdGhlcmUgYW55IG11dGV4ZXMvbG9ja3MgaW4gdXNlPyoqIEkmIzM5O20gaW1tZWRpYXRlbHkgbG9va2luZyBmb3IgY29uY3VycmVuY3kgcHJvdGVjdGlvbjsgTUFDIGRldmljZXMgYXJlIG9mdGVuIHNoYXJlZCByZXNvdXJjZXMsIHNvIGl0JiMzOTtzIGNyaXRpY2FsIHRvIGVuc3VyZSBwcm9wZXIgbG9ja2luZy4gUmFjZSBjb25kaXRpb25zIGFyZSBuYXN0eS4KKiAgICoqRXJyb3IgaGFuZGxpbmc/KiogSG93IGRvZXMgdGhlIGZ1bmN0aW9uIGhhbmRsZSBmYWlsdXJlcz8gRG9lcyBpdCByZXR1cm4gZXJyb3IgY29kZXMsIGxvZyBtZXNzYWdlcywgb3Igc29tZXRoaW5nIGVsc2U/IElzIGl0IGEgcm9idXN0IGNoZWNrPwoKSSYjMzk7bSBtZW50YWxseSBwcmVwYXJpbmcgdG8gdHJhY2UgdGhyb3VnaCB0aGUgY29kZSwgbG9va2luZyBmb3IgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2VzLCBwb3RlbnRpYWxseSBpbnRlcnJ1cHQgcmVnaXN0cmF0aW9uIChpZiBpdCYjMzk7cyBhIGhhcmR3YXJlIE1BQyksIGFuZCB0aGUgYWN0dWFsIG1lY2hhbmlzbSBvZiB0eWluZyB0aGUgTUFDIGRldmljZSBpbnRvIHRoZSBuZXR3b3JrIHN0YWNrLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB0aGUgZHJpdmVyLiBMZXQmIzM5O3Mgc2VlIGhvdyBpdCB3b3JrcyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW04MXhfZndfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYz0yMTA3PXN0YXRpYyBpbnQgbW04MXhfbWFjX3Jlc3RhcnQoc3RydWN0IG1tODF4ICptb3JzKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjEzOS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjE0MDpcdHJldCA9IG1tODF4X2Z3X2luaXQobW9ycywgdHJ1ZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxNDEtXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA3OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NjcxCgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guCgoqKkludmVzdGlnYXRpbmcgbW04MXggRmlybXdhcmUgSW5pdGlhbGl6YXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYG1tODF4YCBkcml2ZXIgY29kZSBhZ2Fpbi4gSXQmIzM5O3MgY2xlYXIgdGhhdCBgbW04MXhfZndfaW5pdGAgaXMgaW52b2tlZCB3aXRoaW4gYG1tODF4X21hY19yZXN0YXJ0YC4gVGhhdCYjMzk7cyB0aGUgZmlyc3QgY29ubmVjdGlvbiBJJiMzOTt2ZSBpZGVudGlmaWVkLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgcXVlc3Rpb24gaXMgd2hldGhlciBgbW04MXhfbWFjX3Jlc3RhcnRgIGl0c2VsZiBpcyBjYWxsZWQgd2l0aGluIGBtbTgxeF9tYWNfcmVnaXN0ZXJgLiBLbm93aW5nIHRoaXMgcmVsYXRpb25zaGlwIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBsZXRlIGluaXRpYWxpemF0aW9uIGFuZCByZXN0YXJ0IHNlcXVlbmNlLiBJdCYjMzk7cyBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlIHRvIGRldGVybWluZSB0aGUgb3ZlcmFsbCBzdGF0ZSBtYWNoaW5lIGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IGR1cmluZyBkZXZpY2UgYnJpbmd1cCBvciBlcnJvciByZWNvdmVyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW04MXhfbWFjX3Jlc3RhcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM9MjA3MT1zdGF0aWMgdTMyIG1tODF4X2dldF9leHBlY3RlZF90aHJvdWdocHV0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjA5MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjA5MTpzdGF0aWMgdm9pZCBtbTgxeF9tYWNfcmVzdGFydF9jbGVhbnVwX2l0ZXIodm9pZCAqZGF0YSwgdTggKm1hYyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjA5Mi1cdFx0XHRcdFx0ICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIwOTctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jOjIwOTg6c3RhdGljIHZvaWQgbW04MXhfbWFjX3Jlc3RhcnRfY2xlYW51cChzdHJ1Y3QgbW04MXggKm1vcnMpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIwOTkte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjEwMS1cdFx0XHRcdFx0ICAgIElFRUU4MDIxMV9JRkFDRV9JVEVSX05PUk1BTCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjEwMjpcdFx0XHRcdFx0ICAgIG1tODF4X21hY19yZXN0YXJ0X2NsZWFudXBfaXRlcixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjEwMy1cdFx0XHRcdFx0ICAgIE5VTEwpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjEwNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjEwNzpzdGF0aWMgaW50IG1tODF4X21hY19yZXN0YXJ0KHN0cnVjdCBtbTgxeCAqbW9ycylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjEwOC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTM3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYzoyMTM4Olx0bW04MXhfbWFjX3Jlc3RhcnRfY2xlYW51cChtb3JzKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjEzOS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jPTIxNzA9c3RhdGljIGludCBtbTgxeF9tYWNfb3BzX2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTgwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYzoyMTgxOlx0XHRyZXQgPSBtbTgxeF9tYWNfcmVzdGFydChtb3JzKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjE4Mi1cdFx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM9MjI2MT1zdGF0aWMgdm9pZCBtbTgxeF9yZWdfbm90aWZpZXIoc3RydWN0IHdpcGh5ICp3aXBoeSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIyNzItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jOjIyNzM6XHRyZXQgPSBtbTgxeF9tYWNfcmVzdGFydChtb3JzKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjI3NC1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA3OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2Nzk4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZToKCioqQW5hbHl6aW5nIHRoZSBJbnRlcmZhY2UgQWRkaXRpb24gUHJvY2VkdXJlKioKCk9rYXksIHNvIGBtbTgxeF9tYWNfb3BzX2FkZF9pbnRlcmZhY2VgIGlzIHRoZSBrZXkgZnVuY3Rpb24gdHJpZ2dlcmVkIHdoZW4gYSBuZXcgaW50ZXJmYWNlIGlzIGFkZGVkLiBUaGF0IG1ha2VzIHNlbnNlOyBhZGRpbmcgYW4gaW50ZXJmYWNlLCBlc3BlY2lhbGx5IGluIGEgd2lyZWxlc3MgY29udGV4dCB1c2luZyBubDgwMjExLCBpcyBhIHNpZ25pZmljYW50IGV2ZW50LiBJJiMzOTttIHRoaW5raW5nLCB0aGlzIGZ1bmN0aW9uIGlzIGxpa2VseSByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCBhbGwgdGhlIG5lY2Vzc2FyeSBkYXRhIHN0cnVjdHVyZXMgYW5kIGNvbmZpZ3VyYXRpb25zIHNwZWNpZmljIHRvIHRoZSBuZXcgaW50ZXJmYWNlIHdpdGhpbiB0aGUgTUFDIGxheWVyLiBJdOKAmXMgdGhlIGVudHJ5IHBvaW50IHRvIG1ha2luZyB0aGUgaW50ZXJmYWNlIG9wZXJhdGlvbmFsLgoKQnV0IGJlZm9yZSBJIGRlbHZlIGRlZXBlciBpbnRvIGBtbTgxeF9tYWNfb3BzX2FkZF9pbnRlcmZhY2VgLCBhIHF1aWNrIGRldG91ciBpcyBpbiBvcmRlci4gTGV0IG1lIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLiBJIHdhbnQgdG8gcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgdGhhdCB3aXRoIGBtbTgxeF9tYWNfcmVnaXN0ZXJgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBNQUMgbGF5ZXIgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYW5kIHJlZ2lzdGVyZWQgZmlyc3QsIHNvIHRoZSBhZGRpbmcgY2FuIGdvIHNtb290aGx5LiBMZXQgbWUgdmVyaWZ5IHRoZSBmbG93IG9mIG9wZXJhdGlvbnMuIFRoaXMgcmVnaXN0cmF0aW9uIGlzIGEgZm91bmRhdGlvbmFsIHBpZWNlIGFuZCBpbmZsdWVuY2VzIGV2ZXJ5dGhpbmcgdGhhdCBjb21lcyBhZnRlci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIHdvcmtpbmcgd2l0aCBhY2N1cmF0ZSBhc3N1bXB0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW04MXhfZndfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYz02ODk9c3RhdGljIGludCBtbTgxeF9md19yZXF1ZXN0KHN0cnVjdCBtbTgxeCAqbW9ycywgY29uc3Qgc3RydWN0IGZpcm13YXJlICoqZncpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTcxOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYzo3MTk6aW50IG1tODF4X2Z3X2luaXQoc3RydWN0IG1tODF4ICptb3JzLCBib29sIHJlc2V0KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTcyMC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5oPTEzND1zdHJ1Y3QgZXh0X2hvc3RfdGJsIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmgtMTM5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5oOjE0MDppbnQgbW04MXhfZndfaW5pdChzdHJ1Y3QgbW04MXggKm1vcnMsIGJvb2wgcmVzZXQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5oLTE0MS1pbnQgbW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsKHN0cnVjdCBtbTgxeCAqbW9ycyk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYz0yMTA3PXN0YXRpYyBpbnQgbW04MXhfbWFjX3Jlc3RhcnQoc3RydWN0IG1tODF4ICptb3JzKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjEzOS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjE0MDpcdHJldCA9IG1tODF4X2Z3X2luaXQobW9ycywgdHJ1ZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxNDEtXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA3OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NTg4CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgRGlhZ25vc3RpYyBRdWVyeSoqCgpSaWdodCwgbGV0JiMzOTtzIHNlZS4uLiB3aGF0JiMzOTtzIHRoZSBmaXJzdCB0aGluZyB0aGF0IHNwcmluZ3MgdG8gbWluZCwgYmFzZWQgb24gdGhlIGNvbnRleHQuLi4gR2l2ZW4gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBpbml0aWFsaXphdGlvbiwgdGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcyBhbHdheXMgYWJvdXQgdGhlIGNvcmUgc2V0dXAuIEEgbmFtZSBsaWtlIGBtbTgxeF9jb3JlX2luaXRgIHN1Z2dlc3RzIGl0JiMzOTtzIGEgY3JpdGljYWwgZW50cnkgcG9pbnQgZm9yIGJyaW5naW5nIGEgc3BlY2lmaWMgbWljcm9jb250cm9sbGVyIGNvcmUgb25saW5lLiBJcyB0aGlzIGEgc3lzdGVtIEkgYW0gZmFtaWxpYXIgd2l0aD8gRnJvbSBteSB5ZWFycyBvZiBleHBlcmllbmNlLCBJIGNhbiBpbW1lZGlhdGVseSBzdGFydCB0aGlua2luZyB0aHJvdWdoIHBvdGVudGlhbCBpc3N1ZXMgdGhhdCBJIHdvdWxkIHNlZSBmcm9tIHRoZSBvdXRzZXQuIEkgYW0gaW1tZWRpYXRlbHkgZ29pbmcgdG8gY29uc2lkZXI6CgoqICAgRG9lcyB0aGlzIGluaXRpYWxpemF0aW9uIGhhbmRsZSBjbG9jayBjb25maWd1cmF0aW9uPwoqICAgV2hhdCBhYm91dCBtZW1vcnkgbWFwcGluZyBhbmQgcHJvdGVjdGlvbj8KKiAgIEludGVycnVwdCB2ZWN0b3Igc2V0dXA/CiogICBQZXJpcGhlcmFsIGNvbmZpZ3VyYXRpb24gLSB0aGlzIGlzIG9mdGVuIGEgbWluZWZpZWxkIQoKSXQmIzM5O3MgbGlrZWx5IHRoZSBzdGFydGluZyBwb2ludCBmb3IgbG93LWxldmVsIGhhcmR3YXJlIGJyaW5nLXVwLCB3aGljaCBpcyB0eXBpY2FsbHkgd2hlcmUgeW91IGZpbmQgdGhlIG1vc3Qgc3VidGxlIGFuZCBmcnVzdHJhdGluZyBidWdzLiBJcyBpdCBjYWxsaW5nIG91dCB0byB0aGUgbW9yZSBzcGVjaWFsaXplZCBzdWJzeXN0ZW0gaW5pdGlhbGl6YXRpb24/IFRoaXMgc2VlbXMgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttbTgxeF9md19pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzg5NAoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgZGlzdGlsbGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBgbW04MXhgIEZpcm13YXJlIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGggb2YgYG1tODF4X2Z3X2luaXRgLiBUaGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGtub3cgaXMgKndoZXJlKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBxdWljayBzZWFyY2ggdG8gc2VlIHdoYXQmIzM5O3Mgd2hhdC4gUmlnaHQsIGxvb2tzIGxpa2UgaXQmIzM5O3Mgb25seSBjYWxsZWQgd2l0aGluIGBtbTgxeF9tYWNfcmVzdGFydGAuCgpIbW0sIHRoYXQgc2VlbXMgb2RkLiBJJiMzOTtkIGV4cGVjdCBpbml0aWFsaXphdGlvbiB0byBoYXBwZW4gaW4gbW9yZSBwbGFjZXMsIHBvdGVudGlhbGx5IGR1cmluZyBkcml2ZXIgcmVnaXN0cmF0aW9uIG9yIGEgcG93ZXItdXAgc2VxdWVuY2UuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdC4gT2theSwgSSYjMzk7dmUgZG91YmxlLWNoZWNrZWQsIGFuZCBteSBpbml0aWFsIHNlYXJjaCB3YXMgY29ycmVjdCAtIGl0JiMzOTtzICpvbmx5KiBpbiBgbW04MXhfbWFjX3Jlc3RhcnRgLgoKSSBzaG91bGQgcHJvYmFibHkgbG9vayBhdCB3aGF0IGVsc2UgaXMgcmVsYXRlZCB0byB0aGUgTUFDLCBzbyBJIHRoaW5rIEkgd2lsbCBjaGVjayBgbW04MXhfbWFjX3JlZ2lzdGVyYCBuZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzYxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMzYxOlx0aW50IG1tODF4X21hY19yZWdpc3RlcihzdHJ1Y3QgbW04MXggKm1vcnMpXG4yMzYyOlx0e1xuMjM2MzpcdFx0aW50IHJldDtcbjIzNjQ6XHRcdHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gbW9ycy1cdTAwM2VodztcbjIzNjU6XHRcbjIzNjY6XHRcdG1vcnMtXHUwMDNldHhfcG93ZXJfbWJtID0gSU5UX01BWDtcbjIzNjc6XHRcdG1vcnMtXHUwMDNldHhfbWF4X3Bvd2VyX21ibSA9IElOVF9NQVg7XG4yMzY4Olx0XHRtb3JzLVx1MDAzZXJ0c190aHJlc2hvbGQgPSBJRUVFODAyMTFfTUFYX1JUU19USFJFU0hPTEQ7XG4yMzY5Olx0XG4yMzcwOlx0XHRyZXQgPSBtbTgxeF9wc19pbml0KG1vcnMpO1xuMjM3MTpcdFx0aWYgKHJldClcbjIzNzI6XHRcdFx0cmV0dXJuIHJldDtcbjIzNzM6XHRcbjIzNzQ6XHRcdG1tODF4X21hY19jb25maWdfaHcobW9ycyk7XG4yMzc1Olx0XHRtbTgxeF9tYWNfaHdfc2Nhbl9pbml0KG1vcnMpO1xuMjM3NjpcdFx0bW04MXhfbWFjX3N0YWxlX3R4X3N0YXR1c190aW1lcl9pbml0KG1vcnMpO1xuMjM3NzpcdFxuMjM3ODpcdFx0cmV0ID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KGh3KTtcbjIzNzk6XHRcdGlmIChyZXQpIHtcbjIzODA6XHRcdFx0ZGV2X2Vycihtb3JzLVx1MDAzZWRldiwgXCYjMzQ7aWVlZTgwMjExX3JlZ2lzdGVyX2h3IGZhaWxlZCAlZFwmIzM0OywgcmV0KTtcbjIzODE6XHRcdFx0bW04MXhfbWFjX3VucmVnaXN0ZXIobW9ycyk7XG4yMzgyOlx0XHRcdHJldHVybiByZXQ7XG4yMzgzOlx0XHR9XG4yMzg0Olx0XG4yMzg1Olx0XHRtbTgxeF9yY19pbml0KG1vcnMpO1xuMjM4NjpcdFxuMjM4NzpcdFx0LypcbjIzODg6XHRcdCAqIEF0IHRoaXMgc3RhZ2UsIHdlIGtub3cgYnVzIGFuZCBwYWdlciBzeXN0ZW0gaW50ZXJydXB0cyBhcmUgZW5hYmxlZC5cbjIzODk6XHRcdCAqIFRyaWdnZXIgdGhlIHJlY2VpdmUgd29ya3F1ZXVlIHRvIGRyYWluIGFueSBpbmNvbWluZyBjaGlwLXRvLWhvc3RcbjIzOTA6XHRcdCAqIHBlbmRpbmcgcGFja2V0cyBiZWVuIHB1c2hlZCBpbiB0aGUgcGVyaW9kIGJldHdlZW4gdGhlIGZpcm13YXJlXG4yMzkxOlx0XHQgKiBpbml0aWFsaXphdGlvbiBhbmQgaW50ZXJydXB0cyBiZWluZyBlbmFibGVkLlxuMjM5MjpcdFx0ICovXG4yMzkzOlx0XHRzZXRfYml0KE1NODFYX0hJRl9FVlRfUlhfUEVORCwgXHUwMDI2bW9ycy1cdTAwM2VoaWYuZXZlbnRfZmxhZ3MpO1xuMjM5NDpcdFx0cXVldWVfd29yayhtb3JzLVx1MDAzZWNoaXBfd3EsIFx1MDAyNm1vcnMtXHUwMDNlaGlmX3dvcmspO1xuMjM5NTpcdFxuMjM5NjpcdFx0cmV0dXJuIHJldDtcbjIzOTc6XHR9XG4yMzk4Olx0XG4yMzk5Olx0dm9pZCBtbTgxeF9tYWNfdW5yZWdpc3RlcihzdHJ1Y3QgbW04MXggKm1vcnMpXG4yNDAwOlx0e1xuMjQwMTpcdFx0bW04MXhfcHNfZGlzYWJsZShtb3JzKTtcbjI0MDI6XHRcdG1tODF4X3JjX2RlaW5pdChtb3JzKTtcbjI0MDM6XHRcdG1tODF4X21hY19od19zY2FuX2Rlc3Ryb3kobW9ycyk7XG4yNDA0Olx0XG4yNDA1Olx0XHRpZWVlODAyMTFfc3RvcF9xdWV1ZXMobW9ycy1cdTAwM2Vodyk7XG4yNDA2Olx0XHRpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhtb3JzLVx1MDAzZWh3KTtcbjI0MDc6XHRcbjI0MDg6XHRcdG1tODF4X2hpZl9mbHVzaF90eF9kYXRhKG1vcnMpO1xuMjQwOTpcdFx0bW04MXhfaGlmX2ZsdXNoX2NtZHMobW9ycyk7XG4yNDEwOlx0XHRtbTgxeF9zdGFsZV90eF9zdGF0dXNfdGltZXJfZmluaXNoKG1vcnMpO1xuMjQxMTpcdFx0bW04MXhfcHNfZmluaXNoKG1vcnMpO1xuMjQxMjpcdFxuMjQxMzpcdFx0a2ZyZWUobW9ycy1cdTAwM2VtY2FzdF9maWx0ZXIpO1xuMjQxNDpcdH1cbjI0MTU6XHRcbjI0MTY6XHRzdHJ1Y3QgbW04MXggKm1tODF4X21hY19hbGxvYyhzaXplX3QgcHJpdl9zaXplLCBzdHJ1Y3QgZGV2aWNlICpkZXYpXG4yNDE3Olx0e1xuMjQxODpcdFx0c3RydWN0IGllZWU4MDIxMV9odyAqaHc7XG4yNDE5Olx0XHRzdHJ1Y3QgbW04MXggKm1vcnM7XG4yNDIwOlx0XG4yNDIxOlx0XHRodyA9IGllZWU4MDIxMV9hbGxvY19odyhzaXplb2YoKm1vcnMpICYjNDM7IHByaXZfc2l6ZSwgXHUwMDI2bW04MXhfb3BzKTtcbjI0MjI6XHRcdGlmICghaHcpIHtcbjI0MjM6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O2llZWU4MDIxMV9hbGxvY19odyBmYWlsZWRcXHJcXG5cJiMzNDspO1xuMjQyNDpcdFx0XHRyZXR1cm4gTlVMTDtcbjI0MjU6XHRcdH1cbjI0MjY6XHRcbjI0Mjc6XHRcdFNFVF9JRUVFODAyMTFfREVWKGh3LCBkZXYpO1xuMjQyODpcdFx0bWVtc2V0KGh3LVx1MDAzZXByaXYsIDAsIHNpemVvZigqbW9ycykpO1xuMjQyOTpcdFxuMjQzMDpcdFx0bW9ycyA9IGh3LVx1MDAzZXByaXY7XG4yNDMxOlx0XHRtb3JzLVx1MDAzZWh3ID0gaHc7XG4yNDMyOlx0XHRtb3JzLVx1MDAzZWRldiA9IGRldjtcbjI0MzM6XHRcdG11dGV4X2luaXQoXHUwMDI2bW9ycy1cdTAwM2VjbWRfbG9jayk7XG4yNDM0Olx0XHRtdXRleF9pbml0KFx1MDAyNm1vcnMtXHUwMDNlY21kX3dhaXQpO1xuMjQzNTpcdFx0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZtb3JzLVx1MDAzZXR4X2VtcHR5X3dhaXRxKTtcbjI0MzY6XHRcbjI0Mzc6XHRcdHJldHVybiBtb3JzO1xuMjQzODpcdH1cbjI0Mzk6XHRcbjI0NDA6XHR2b2lkIG1tODF4X21hY19mcmVlKHN0cnVjdCBtbTgxeCAqbW9ycylcbjI0NDE6XHR7XG4yNDQyOlx0XHRpZWVlODAyMTFfZnJlZV9odyhtb3JzLVx1MDAzZWh3KTtcbjI0NDM6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA3OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NTYzCgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgSW5pdGlhbGl6YXRpb24gU2VxdWVuY2UqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCBgbW04MXhfZndfaW5pdGAgd2FzIGFsd2F5cyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgbW04MXhfbWFjX3JlZ2lzdGVyYCwgYnV0IEkmIzM5O20gbm90IHNlZWluZyB0aGF0IGluIHRoZSBjb2RlIGZsb3cuIFRoYXQmIzM5O3MgYSBwb3RlbnRpYWwgb3ZlcnNpZ2h0IG9yIHBlcmhhcHMgYSBtaXNyZW1lbWJlcmVkIGRldGFpbCBvbiBteSBwYXJ0LCBvciBhIHN1YnRsZSBjaGFuZ2UgaW4gdGhlIGRyaXZlciBzdHJ1Y3R1cmUgSSYjMzk7bSBub3QgaW1tZWRpYXRlbHkgZ3Jhc3BpbmcuIEkgbmVlZCB0byBjbGFyaWZ5IGhvdyB0aGF0IGZpcm13YXJlIGluaXRpYWxpemF0aW9uIGlzIGFjdHVhbGx5IGhhcHBlbmluZy4KClJpZ2h0LCBsZXQmIzM5O3MgYmFjayB1cCBhbmQgY2hlY2sgdGhlIGJyb2FkZXIgaW5pdGlhbGl6YXRpb24gc2NoZW1lLiBUaGUga2V5IHNlZW1zIHRvIGxpZSBlbHNld2hlcmUsIHNvIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGBtbTgxeF9jb3JlX2luaXRgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBsb2dpY2FsIGZsb3cgaXMgYmVpbmcgaGFuZGxlZCwgc28gdGhhdCBtdXN0IGJlIHdoZXJlIHRoZSBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2NzpcdGludCBtbTgxeF9jb3JlX2luaXQoc3RydWN0IG1tODF4ICptb3JzKVxuICA2ODpcdHtcbiAgNjk6XHRcdGludCByZXQ7XG4gIDcwOlx0XG4gIDcxOlx0XHRzZXRfYml0KE1NODFYX1NUQVRFX0NISVBfVU5SRVNQT05TSVZFLCBcdTAwMjZtb3JzLVx1MDAzZXN0YXRlX2ZsYWdzKTtcbiAgNzI6XHRcdHNldF9iaXQoTU04MVhfU1RBVEVfUkVMT0FEX0ZXX0FGVEVSX1NUQVJULCBcdTAwMjZtb3JzLVx1MDAzZXN0YXRlX2ZsYWdzKTtcbiAgNzM6XHRcbiAgNzQ6XHRcdG1tODF4X2NvcmVfaW5pdF9tYWNfYWRkcihtb3JzKTtcbiAgNzU6XHRcbiAgNzY6XHRcdHJldCA9IG1tODF4X2NvcmVfYXR0YWNoX3JlZ3MobW9ycyk7XG4gIDc3Olx0XHRpZiAocmV0KVxuICA3ODpcdFx0XHRyZXR1cm4gcmV0O1xuICA3OTpcdFxuICA4MDpcdFx0bW9ycy1cdTAwM2VjaGlwX3dxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoXCYjMzQ7Y2hpcF93cVwmIzM0Oyk7XG4gIDgxOlx0XHRpZiAoIW1vcnMtXHUwMDNlY2hpcF93cSlcbiAgODI6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gIDgzOlx0XG4gIDg0Olx0XHRtb3JzLVx1MDAzZW5ldF93cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKFwmIzM0O25ldF93cVwmIzM0Oyk7XG4gIDg1Olx0XHRpZiAoIW1vcnMtXHUwMDNlbmV0X3dxKSB7XG4gIDg2Olx0XHRcdHJldCA9IC1FTk9NRU07XG4gIDg3Olx0XHRcdGdvdG8gZXJyX2NoaXBfd3E7XG4gIDg4Olx0XHR9XG4gIDg5Olx0XG4gIDkwOlx0XHRyZXQgPSBtbTgxeF9oaWZfaW5pdChtb3JzKTtcbiAgOTE6XHRcdGlmIChyZXQpXG4gIDkyOlx0XHRcdGdvdG8gZXJyX3dxcztcbiAgOTM6XHRcbiAgOTQ6XHRcdHJldHVybiAwO1xuICA5NTpcdFxuICA5NjpcdGVycl93cXM6XG4gIDk3Olx0XHRmbHVzaF93b3JrcXVldWUobW9ycy1cdTAwM2VuZXRfd3EpO1xuICA5ODpcdFx0ZGVzdHJveV93b3JrcXVldWUobW9ycy1cdTAwM2VuZXRfd3EpO1xuICA5OTpcdFxuIDEwMDpcdGVycl9jaGlwX3dxOlxuIDEwMTpcdFx0Zmx1c2hfd29ya3F1ZXVlKG1vcnMtXHUwMDNlY2hpcF93cSk7XG4gMTAyOlx0XHRkZXN0cm95X3dvcmtxdWV1ZShtb3JzLVx1MDAzZWNoaXBfd3EpO1xuIDEwMzpcdFxuIDEwNDpcdFx0cmV0dXJuIHJldDtcbiAxMDU6XHR9XG4gMTA2Olx0RVhQT1JUX1NZTUJPTF9HUEwobW04MXhfY29yZV9pbml0KTtcbiAxMDc6XHRcbiAxMDg6XHRpbnQgbW04MXhfY29yZV9yZWdpc3RlcihzdHJ1Y3QgbW04MXggKm1vcnMpXG4gMTA5Olx0e1xuIDExMDpcdFx0cmV0dXJuIG1tODF4X21hY19yZWdpc3Rlcihtb3JzKTtcbiAxMTE6XHR9XG4gMTEyOlx0RVhQT1JUX1NZTUJPTF9HUEwobW04MXhfY29yZV9yZWdpc3Rlcik7XG4gMTEzOlx0XG4gMTE0Olx0dm9pZCBtbTgxeF9jb3JlX3VucmVnaXN0ZXIoc3RydWN0IG1tODF4ICptb3JzKVxuIDExNTpcdHtcbiAxMTY6XHRcdG1tODF4X21hY191bnJlZ2lzdGVyKG1vcnMpO1xuIDExNzpcdH1cbiAxMTg6XHRFWFBPUlRfU1lNQk9MX0dQTChtbTgxeF9jb3JlX3VucmVnaXN0ZXIpO1xuIDExOTpcdFxuIDEyMDpcdHZvaWQgbW04MXhfY29yZV9kZWluaXQoc3RydWN0IG1tODF4ICptb3JzKVxuIDEyMTpcdHtcbiAxMjI6XHRcdG1tODF4X2hpZl9maW5pc2gobW9ycyk7XG4gMTIzOlx0XHRmbHVzaF93b3JrcXVldWUobW9ycy1cdTAwM2VuZXRfd3EpO1xuIDEyNDpcdFx0ZGVzdHJveV93b3JrcXVldWUobW9ycy1cdTAwM2VuZXRfd3EpO1xuIDEyNTpcdFx0Zmx1c2hfd29ya3F1ZXVlKG1vcnMtXHUwMDNlY2hpcF93cSk7XG4gMTI2Olx0XHRkZXN0cm95X3dvcmtxdWV1ZShtb3JzLVx1MDAzZWNoaXBfd3EpO1xuIDEyNzpcdH1cbiAxMjg6XHRFWFBPUlRfU1lNQk9MX0dQTChtbTgxeF9jb3JlX2RlaW5pdCk7XG4gMTI5Olx0XG4gMTMwOlx0dm9pZCBtbTgxeF9jb3JlX2ZyZWUoc3RydWN0IG1tODF4ICptb3JzKVxuIDEzMTpcdHtcbiAxMzI6XHRcdG1tODF4X21hY19mcmVlKG1vcnMpO1xuIDEzMzpcdH1cbiAxMzQ6XHRFWFBPUlRfU1lNQk9MX0dQTChtbTgxeF9jb3JlX2ZyZWUpO1xuIDEzNTpcdFxuIDEzNjpcdE1PRFVMRV9BVVRIT1IoXCYjMzQ7TW9yc2UgTWljcm9cJiMzNDspO1xuIDEzNzpcdE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtEcml2ZXIgc3VwcG9ydCBmb3IgTW9yc2UgTWljcm8gTU04MVggY29yZVwmIzM0Oyk7XG4gMTM4Olx0TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7RHVhbCBCU0QvR1BMXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDc6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA4ODQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGaXJtd2FyZSBMb2FkaW5nIExvZ2ljKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYG1tODF4X2Z3X2luaXRgIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IHRyaWdnZXJlZC4gSG1tLCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIG9ubHkgY2FsbGVkIHdpdGhpbiBgbW04MXhfbWFjX3Jlc3RhcnRgLiBOb3csIHdoZXJlIGRvZXMgKnRoYXQqIGdldCBjYWxsZWQ/IFJpZ2h0LCBgbW04MXhfbWFjX3Jlc3RhcnRgIGlzIGNhbGxlZCBmcm9tIGBtbTgxeF9tYWNfb3BzX2FkZF9pbnRlcmZhY2VgIGFuZCBhbHNvIGBtbTgxeF9yZWdfbm90aWZpZXJgLiBTbywgYWRkaW5nIGFuIGludGVyZmFjZSByZXN0YXJ0cyB0aGUgTUFDLCBhbmQgKnRoYXQqIGxvYWRzIHRoZSBmaXJtd2FyZS4gTWFrZXMgc2Vuc2UsIHRoYXQmIzM5O3MgYSBjb21wbGV0ZWx5IHZhbGlkIHBhdGguIFRoaXMgc2hvdWxkIGJlIGEgcmVhY2hhYmxlIHBvaW50LgoKVGhlIHBhdGNoIGl0c2VsZiBmb2N1c2VzIG9uIHRoZSBmaXJtd2FyZSBwYXJzaW5nLCB3aGljaCBtYWtlcyBzZW5zZSBpZiB0aGUgbG9hZGluZyBwcm9jZXNzIGlzIHNvbGlkLiBUaGUgZmlybXdhcmUmIzM5O3MgbG9hZGVkIHVzaW5nIGByZXF1ZXN0X2Zpcm13YXJlYCwgd2hpY2ggaXMgcHJldHR5IHN0YW5kYXJkLiBOb3csIGNhbiBzeXprYWxsZXIgYWN0dWFsbHkgKmZ1enoqIHRoaXM/IExldCBtZSBzZWXigKYgSSBrbm93IHN5emthbGxlciBoYXMgYHN5el9tb3VudF9pbWFnZWAsIG9yIGNhbiBtb2NrIGByZXF1ZXN0X2Zpcm13YXJlYCBpZiBzdXBwb3J0ZWQuLi4gYnV0LCB3YWl0LCBpdCBjYW4gYWxzbyBqdXN0IGRyb3AgZmlsZXMgaW4gYC9saWIvZmlybXdhcmVgLCBvciB1c2UgdGhlIGZpcm13YXJlIGxvYWRlciBmYWxsYmFjay4gT2gsIHllYWgsIHN5emthbGxlciAqZG9lcyogZnV6eiBmaXJtd2FyZSBsb2FkaW5nIHZpYSBgcmVxdWVzdF9maXJtd2FyZWAsIGJ5IGludGVyY2VwdGluZyBpdCBvciBwcm92aWRpbmcgZmlsZXMgZGlyZWN0bHkuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgbmFpbCBkb3duIHByZWNpc2VseSB3aGljaCBmdW5jdGlvbnMgYXJlIGJlaW5nIG1vZGlmaWVkIGhlcmUuIExvb2tzIGxpa2U6IGBtbTgxeF9md19wYXJzZV9pbmZvYCwgYG1tODF4X2Z3X2xvYWRfZndgLCBgbW04MXhfZndfcmVhZF9leHRfaG9zdF90YWJsZWAsIGFuZCBgbW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsYC4KCk5vdyB0aGUgcXVlc3Rpb24gaXMsICppcyogYG1tODF4X2Z3X3BhcnNlX2luZm9gIHJlYWNoYWJsZT8gV2UgbmVlZCB0byB2ZXJpZnkgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW04MXhfZndfcGFyc2VfaW5mbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYz0yOD1zdGF0aWMgaW50IG1tODF4X2Z3X2dldF9oZWFkZXIoY29uc3QgdTggKmRhdGEsIEVsZjMyX0VoZHIgKmVoZHIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTU0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jOjU1OnN0YXRpYyB2b2lkIG1tODF4X2Z3X3BhcnNlX2luZm8oc3RydWN0IG1tODF4ICptb3JzLCBjb25zdCB1OCAqZGF0YSwgaW50IGxlbmd0aClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy01Ni17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jPTExMD1zdGF0aWMgaW50IG1tODF4X2Z3X2xvYWRfZncoc3RydWN0IG1tODF4ICptb3JzLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy0xODQtXHRcdFx0ICAgICBzaXplb2YoXCYjMzQ7LmZ3X2luZm9cJiMzNDspKSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYzoxODU6XHRcdFx0bW04MXhfZndfcGFyc2VfaW5mbyhtb3JzLCBmdy1cdTAwM2VkYXRhICYjNDM7IHNoZHIuc2hfb2Zmc2V0LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTE4Ni1cdFx0XHRcdFx0ICAgIHNoZHIuc2hfc2l6ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA3OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxOTMwCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBGaXJtd2FyZSBMb2FkaW5nIFNlcXVlbmNlKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgZmlybXdhcmUgbG9hZGluZyBwcm9jZXNzLiBJIHNlZSB0aGF0IHRoZSBmdW5jdGlvbiBgbW04MXhfZndfbG9hZF9md2AgaXMgZGVmaW5pdGVseSB0aGUgb25lIGluaXRpYXRpbmcgdGhlIGxvYWQsIHRoYXQmIzM5O3MgY2xlYXIgZW5vdWdoLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3csIGhvdyBpdCYjMzk7cyBiZWluZyBmZWQsIHdoZXJlIHRoZSBhY3R1YWwgZmlybXdhcmUgaW1hZ2UgY29tZXMgZnJvbSwgYW5kIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBiZWluZyBsb2FkZWQuIEkmIzM5O20gbm90aW5nIHRoYXQuCgpMZXQgbWUgYWxzbyBjaGVjayB3aGF0IGBtbTgxeF9md19yZWFkX2V4dF9ob3N0X3RhYmxlYCBpcyBhYm91dC4gSXMgaXQgcmVhZGluZyBhIGZpbGU/IEZyb20gZXh0ZXJuYWwgbWVtb3J5PyBPciBwZXJoYXBzIGFuIGludGVybmFsIGxvb2t1cCB0YWJsZT8gSXMgdGhhdCB0aGUgdGFibGUgb2YgJiMzNDtleHRlcm5hbCBob3N0JiMzNDsgaW5mb3JtYXRpb24/IEkmIzM5O2xsIGhhdmUgdG8gaW52ZXN0aWdhdGUgdGhhdCBmdW5jdGlvbiB0byBkZXRlcm1pbmUgd2hhdCBpdCBkb2VzLCB0aGUgbmF0dXJlIG9mIHRoZSBkYXRhIGludm9sdmVkIGFuZCBob3cgdGhpcyByZWxhdGVzIHRvIG15IGZpcm13YXJlIGxvYWRpbmcgc2VxdWVuY2UuIEl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21tODF4X2Z3X3JlYWRfZXh0X2hvc3RfdGFibGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmM9NDQyPXN0YXRpYyBpbnQgbW04MXhfZndfZ2V0X2hvc3RfdGFibGVfcHRyKHN0cnVjdCBtbTgxeCAqbW9ycylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmMtNDU3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jOjQ1ODpzdGF0aWMgaW50IG1tODF4X2Z3X3JlYWRfZXh0X2hvc3RfdGFibGUoc3RydWN0IG1tODF4ICptb3JzLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTQ1OS1cdFx0XHRcdFx0c3RydWN0IGV4dF9ob3N0X3RibCAqKmV4dF9ob3N0X3RhYmxlKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYz01NjQ9aW50IG1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibChzdHJ1Y3QgbW04MXggKm1vcnMpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTU3MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYzo1NzE6XHRyZXQgPSBtbTgxeF9md19yZWFkX2V4dF9ob3N0X3RhYmxlKG1vcnMsIFx1MDAyNmV4dF9ob3N0X3RhYmxlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy01NzItXHRpZiAocmV0IHx8ICFleHRfaG9zdF90YWJsZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDc6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI1NjMKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBGaXJtd2FyZSBQYXJzaW5nKioKCkFscmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGZpcm13YXJlIHBhcnNpbmcsIHNwZWNpZmljYWxseSB0aGUgYG1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibGAgZnVuY3Rpb24uIE15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyB0byB0aGUgcG90ZW50aWFsIGNvbXBsZXhpdGllcy4gVGhpcyBmdW5jdGlvbiBuYW1lIHN0cm9uZ2x5IHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYW4gZXh0ZW5kZWQgaG9zdCB0YWJsZSwgbWVhbmluZyB3ZSYjMzk7cmUgbGlrZWx5IHByb2Nlc3NpbmcgbW9yZSB0aGFuIGp1c3QgYmFzaWMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGhvc3Qgc3lzdGVtLiBJdCBjb3VsZCBiZSBwYXJzaW5nIGNvbmZpZ3VyYXRpb25zLCByZXNvdXJjZSBhbGxvY2F0aW9ucywgZGV2aWNlLXNwZWNpZmljIHNldHRpbmdzLi4uIHRoZSBwb3NzaWJpbGl0aWVzIGFyZSB2YXN0LgoKSSYjMzk7bSBzdGFydGluZyB0byB0aGluayBhYm91dCB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMuIFdoYXQgZm9ybWF0IGlzIHRoaXMgaG9zdCB0YWJsZSBpbj8gSXMgaXQgYSBzdGFuZGFyZCBmb3JtYXQgb3Igc29tZXRoaW5nIHByb3ByaWV0YXJ5PyBBcmUgd2UgdGFsa2luZyBhYm91dCBhIGJpbmFyeSBibG9iLCBhIHN0cnVjdHVyZWQgdGV4dCBmaWxlLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gV2hhdCBraW5kIG9mIGVycm9yIGhhbmRsaW5nIGlzIGluIHBsYWNlPyBBcmUgdGhlcmUgY2hlY2tzdW1zIG9yIGludGVncml0eSBjaGVja3MgdG8gZW5zdXJlIGRhdGEgdmFsaWRpdHk/CgpNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoaXMgd2lsbCBpbnZvbHZlIGJpdC1sZXZlbCBtYW5pcHVsYXRpb24sIG1lbW9yeSBtYW5hZ2VtZW50IGNvbnNpZGVyYXRpb25zIGlmIHRoZSB0YWJsZSBpcyBsYXJnZSwgYW5kIHBvdGVudGlhbGx5IGRlYWxpbmcgd2l0aCBlbmRpYW5uZXNzIGlzc3VlcyBkZXBlbmRpbmcgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuIEnigJlsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjYWxsIHdpdGhpbiB0aGUgbGFyZ2VyIGZpcm13YXJlIGltYWdlIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGluZm9ybWF0aW9uIGlzIHVzZWQuIFRoaXMga2luZCBvZiBwYXJzaW5nIGZ1bmN0aW9uIGlzIHdoZXJlIHZ1bG5lcmFiaWxpdGllcyBsaWtlIGJ1ZmZlciBvdmVyZmxvd3Mgb3IgZm9ybWF0IHN0cmluZyBidWdzIHRlbmQgdG8gaGlkZSwgc28gSSYjMzk7bSBhbHJlYWR5IG1lbnRhbGx5IHByZXBhcmluZyB0byBzY3J1dGluaXplIHRoZSBjb2RlIGZvciB0aG9zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDc6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jPTU1ND1zdGF0aWMgdm9pZCBtbTgxeF9md191cGRhdGVfdmFsaWRhdGVfc2tiX2NoZWNrc3VtKFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy01NjMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmM6NTY0OmludCBtbTgxeF9md19wYXJzZV9leHRfaG9zdF90Ymwoc3RydWN0IG1tODF4ICptb3JzKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTU2NS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5oPTE0MD1pbnQgbW04MXhfZndfaW5pdChzdHJ1Y3QgbW04MXggKm1vcnMsIGJvb2wgcmVzZXQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5oOjE0MTppbnQgbW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsKHN0cnVjdCBtbTgxeCAqbW9ycyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmgtMTQyLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM9MjEwNz1zdGF0aWMgaW50IG1tODF4X21hY19yZXN0YXJ0KHN0cnVjdCBtbTgxeCAqbW9ycylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxNDctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jOjIxNDg6XHRyZXQgPSBtbTgxeF9md19wYXJzZV9leHRfaG9zdF90YmwobW9ycyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxNDktXHRpZiAocmV0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA3OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMzMzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIHRyYWNlZCBkb3duIGhvdyB0aGlzIGBtbTgxeF9md19wYXJzZV9leHRfaG9zdF90YmxgIGZ1bmN0aW9uIGlzIGNhbGxlZCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWxzbyBjYWxsZWQgZnJvbSBgbW04MXhfbWFjX3Jlc3RhcnRgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCB3aGljaCBtZWFucyB0aGUgZmlybXdhcmUgcGFyc2luZyBsb2dpYyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBkdXJpbmcgcnVudGltZSBhbmQgdGhlcmVmb3JlIGEgdmFsaWQgdGFyZ2V0IGZvciBmdXp6aW5nLiBFeGNlbGxlbnQhCgpOb3csIHdoaWNoIGZ1bmN0aW9ucyBhcmUgdGhlIG1vc3QgcHJvbWlzaW5nPyBMZXQmIzM5O3Mgc2VlLi4uIEluaXRpYWxseSwgSSB3YXMgbG9va2luZyBhdCBgbW04MXhfZndfcGFyc2VfaW5mb2AuIEl0JiMzOTtzIHN0YXRpYywgc28gaXQmIzM5O3MgYSBiaXQgbGVzcyBhdHRyYWN0aXZlIGJ1dCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB3aGVyZSB3ZSYjMzk7cmUgZ29pbmcuIExldCYjMzk7cyBkaWcgZGVlcGVyLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGEgd2hpbGUgbG9vcCB3aXRoIGEgc3dpdGNoIHN0YXRlbWVudC4gSXQmIzM5O3MgcHJvYmFibHkgbm90IGlubGluZWQgYmVjYXVzZSB0aGF0JiMzOTtzIGEgZGVjZW50IHNpemUsIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIHN0YXRpYy4gQmV0dGVyIHRvIHBpdm90IGFuZCBmb2N1cyBvbiBgbW04MXhfZndfbG9hZF9md2Agc2luY2UgaXQgY2FsbHMgYG1tODF4X2Z3X3BhcnNlX2luZm9gLiAKCldhaXQgYSBtaW51dGUsIGBtbTgxeF9md19pbml0YCBpcyAqbm90KiBzdGF0aWMsIHNvIHRoYXQmIzM5O3MgZGVmaW5pdGVseSBhIHBvaW50IG9mIGludGVyZXN0LCBhbmQgYG1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibGAgaXMgYWxzbyBub24tc3RhdGljLCBzbyB3ZSYjMzk7dmUgZ290IGEgY291cGxlIG9mIGdvb2QgbGVhZHMgdGhlcmUhCgpPa2F5LCBsZXQmIzM5O3MgcHJpb3JpdGl6ZSBhbmQgaW52ZXN0aWdhdGUgYG1tODF4X2Z3X2luaXRgIGFuZCBgbW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsYCBhbmQgc2VlIHdoZXJlIHdlIGFyZS4KCkp1c3QgdG8gYmUgc2FmZSwgSSYjMzk7bGwgcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyB0byBzZWUgaWYgdGhlIGBNTTgxWGAgc3ltYm9sIGlzIGRlZmluZWQuIEdvdHRhIGNoZWNrIHRoYXQgb2ZmIHRoZSBsaXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTU04MVgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L0tjb25maWctMi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvS2NvbmZpZzozOmNvbmZpZyBNTTgxWFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9LY29uZmlnLTQtXHR0cmlzdGF0ZSBcJiMzNDtNb3JzZSBNaWNybyBNTTgxeCB3aXJlbGVzcyBkZXZpY2VzXCYjMzQ7IGlmIENPTVBJTEVfVEVTVFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvS2NvbmZpZy0xMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvS2NvbmZpZzoxMjpjb25maWcgTU04MVhfVVNCXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L0tjb25maWctMTMtXHR0cmlzdGF0ZSBcJiMzNDtNb3JzZSBNaWNybyBNTTgxeCBVU0Igc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvS2NvbmZpZy0xOS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvS2NvbmZpZzoyMDpjb25maWcgTU04MVhfU0RJT1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9LY29uZmlnLTIxLVx0dHJpc3RhdGUgXCYjMzQ7TW9yc2UgTWljcm8gTU04MXggU0RJTyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA3OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MjQ4CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgTW9kdWxlIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYE1NODFYX1VTQmAgYW5kIGBNTTgxWGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGVpciBpbnRlcmRlcGVuZGVuY2llcy4gVGhpcyBpcyBhIGNydWNpYWwgZmlyc3Qgc3RlcC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hpY2ggb3RoZXIgbW9kdWxlcywgZHJpdmVycywgbGlicmFyaWVzLCBvciBldmVuIHNwZWNpZmljIGhhcmR3YXJlIGNvbXBvbmVudHMgdGhlc2UgcmVseSBvbi4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgY29yZSBrZXJuZWwgbW9kdWxlcywgdXNlci1zcGFjZSB1dGlsaXRpZXMsIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkIHdpdGhpbiBvdXIgcHJvcHJpZXRhcnkgc3RhY2s/IEkgbmVlZCB0byBidWlsZCBhIG1lbnRhbCBtYXAg4oCTIGEgZGVwZW5kZW5jeSBncmFwaCByZWFsbHkg4oCTIHRvIHNlZSB0aGUgZnVsbCBzY29wZS4KClNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dDoKCiogICAqKkV4cGxpY2l0IERlcGVuZGVuY2llczoqKiBXaGF0JiMzOTtzIGxpc3RlZCBpbiB0aGUgbWFrZWZpbGVzIG9yIGNvbmZpZ3VyYXRpb24gZmlsZXM/IEFueSBvYnZpb3VzIGByZXF1aXJlc2AgZGlyZWN0aXZlcyBvciBidWlsZCBmbGFncz8KKiAgICoqSW1wbGljaXQgRGVwZW5kZW5jaWVzOioqIFdoZXJlIGRvIHRoZXkgKnVzZSogZnVuY3Rpb25hbGl0eSB0aGF0IGlzbiYjMzk7dCBkaXJlY3RseSBkZWNsYXJlZD8gQXJlIHRoZXJlIHNoYXJlZCByZXNvdXJjZXMgbGlrZSBtZW1vcnkgcmVnaW9ucywgaW50ZXJydXB0IGhhbmRsZXJzLCBvciBkZXZpY2UgcmVnaXN0ZXJzPwoqICAgKipWZXJzaW9uaW5nIGFuZCBDb21wYXRpYmlsaXR5OioqIEFyZSB0aGVyZSB2ZXJzaW9uIGNvbnN0cmFpbnRzIG9uIHRoZSBtb2R1bGVzIHRoZXkgZGVwZW5kIG9uPyBXaGF0IGhhcHBlbnMgaWYgYSBkZXBlbmRlbnQgbW9kdWxlIGlzIHVwZGF0ZWQgb3IgcGF0Y2hlZD8gQ29tcGF0aWJpbGl0eSBwcm9ibGVtcyBoZXJlIGFyZSB0aGUgd29yc3QuCiogICAqKkhhcmR3YXJlIEFic3RyYWN0aW9uIExheWVyIChIQUwpOioqIEhvdyBhYnN0cmFjdCBpcyB0aGUgaGFyZHdhcmUgYWNjZXNzPyBBcmUgdGhleSB0YWxraW5nIGRpcmVjdGx5IHRvIHJlZ2lzdGVycyBvciByZWx5aW5nIG9uIGEgd2VsbC1kZWZpbmVkIEhBTCB0aGF0IEkmIzM5O20gYWxyZWFkeSBmYW1pbGlhciB3aXRoPyBUaGlzIGNhbiBnaXZlIG1lIHNvbWUgaGludHMgdG8gc3RhcnQgd2l0aC4KKiAgICoqRXh0ZXJuYWwgTGlicmFyaWVzOioqIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgZm9yIGV4dGVybmFsIGxpYnJhcmllcyBhbmQgdGhlaXIgdmVyc2lvbnMuIEFueSBpc3N1ZXMgaW4gdGhlIHBhc3Q/IEFueSBrbm93biB2dWxuZXJhYmlsaXRpZXMgdGhhdCBjb3VsZCBhZmZlY3QgdGhlc2U/CgpUaGUgZ29hbCBpcyB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB3aGVyZSBjaGFuZ2VzIGluIGVpdGhlciBgTU04MVhfVVNCYCBvciBgTU04MVhgIGNvdWxkIHByb3BhZ2F0ZSBhbmQgd2hhdCBwb3RlbnRpYWwgaW1wYWN0IHRoZXkgY291bGQgaGF2ZSBvbiB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLiBUaGlzIGJhc2VsaW5lIGtub3dsZWRnZSBpcyBjcml0aWNhbCBmb3IgZWZmaWNpZW50IGRlYnVnZ2luZywgZmVhdHVyZSBpbXBsZW1lbnRhdGlvbiwgYW5kIGFueSBzb3J0IG9mIG1vZGlmaWNhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDc6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0XG4gICAzOlx0Y29uZmlnIE1NODFYXG4gICA0Olx0XHR0cmlzdGF0ZSBcJiMzNDtNb3JzZSBNaWNybyBNTTgxeCB3aXJlbGVzcyBkZXZpY2VzXCYjMzQ7IGlmIENPTVBJTEVfVEVTVFxuICAgNTpcdFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxuICAgNjpcdFx0c2VsZWN0IEZXX0xPQURFUlxuICAgNzpcdFx0c2VsZWN0IENSQzdcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciB3aXJlbGVzcyBkZXZpY2VzIGJhc2VkXG4gIDEwOlx0XHQgIG9uIE1vcnNlIE1pY3JvIE1NODF4eCBjaGlwc2V0cy5cbiAgMTE6XHRcbiAgMTI6XHRjb25maWcgTU04MVhfVVNCXG4gIDEzOlx0XHR0cmlzdGF0ZSBcJiMzNDtNb3JzZSBNaWNybyBNTTgxeCBVU0Igc3VwcG9ydFwmIzM0O1xuICAxNDpcdFx0ZGVwZW5kcyBvbiBNQUM4MDIxMSBcdTAwMjZcdTAwMjYgVVNCXG4gIDE1Olx0XHRzZWxlY3QgTU04MVhcbiAgMTY6XHRcdGhlbHBcbiAgMTc6XHRcdCAgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciB0aGUgVVNCIGludGVyZmFjZSBvZlxuICAxODpcdFx0ICBkZXZpY2VzIHVzaW5nIHRoZSBNb3JzZSBNaWNybyBNTTgxeCBjaGlwc2V0LlxuICAxOTpcdFxuICAyMDpcdGNvbmZpZyBNTTgxWF9TRElPXG4gIDIxOlx0XHR0cmlzdGF0ZSBcJiMzNDtNb3JzZSBNaWNybyBNTTgxeCBTRElPIHN1cHBvcnRcJiMzNDtcbiAgMjI6XHRcdGRlcGVuZHMgb24gTUFDODAyMTEgXHUwMDI2XHUwMDI2IE1NQ1xuICAyMzpcdFx0c2VsZWN0IE1NODFYXG4gIDI0Olx0XHRoZWxwXG4gIDI1Olx0XHQgIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3IgdGhlIFNESU8gaW50ZXJmYWNlIG9mXG4gIDI2Olx0XHQgIGRldmljZXMgdXNpbmcgdGhlIE1vcnNlIE1pY3JvIE1NODF4IGNoaXBzZXQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA3OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MDUyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkLgoKKipFbmFibGluZyBVU0IgR2FkZ2V0IFRlc3RpbmcgYW5kIFdMQU4gVmVuZG9yIFN1cHBvcnQqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZywgdG8gZ2V0IHRoaXMgVVNCIGdhZGdldCB0ZXN0aW5nIGZvciB0aGUgTU04MVggd29ya2luZywgd2UgYWJzb2x1dGVseSBuZWVkIHRvIGVuc3VyZSBgTU04MVhfVVNCYCBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIGEgbm8tYnJhaW5lciwgdGhhdCYjMzk7cyB3aGF0JiMzOTtzIGdvaW5nIHRvIGFsbG93IHRoZSBzeXN0ZW0gdG8gcmVjb2duaXplIHRoZSBVU0IgZ2FkZ2V0IGZ1bmN0aW9uYWxpdHkgb2YgdGhpcyBzcGVjaWZpYyBwaWVjZSBvZiBoYXJkd2FyZS4gSSBjYW4mIzM5O3QgZXZlbiAqdGhpbmsqIGFib3V0IHRlc3Rpbmcgd2l0aG91dCB0aGF0LgoKQW5kIHRoZW4sIGFsb25nc2lkZSB0aGF0LCBJJiMzOTttIG1ha2luZyBzdXJlIGBXTEFOX1ZFTkRPUl9NT1JTRU1JQ1JPYCBpcyBlbmFibGVkIHRvby4gSXQmIzM5O3MgY3J1Y2lhbCB3ZSBkb24mIzM5O3Qgb3Zlcmxvb2sgYW55IGRlcGVuZGVuY2llcyBvciB1bmRlcmx5aW5nIHZlbmRvci1zcGVjaWZpYyByZXF1aXJlbWVudHMuIFdpdGhvdXQgZW5hYmxpbmcgdGhpcyBzdXBwb3J0LCB3ZSYjMzk7cmUgbGlrZWx5IGdvaW5nIHRvIHJ1biBpbnRvIGlzc3VlcyB3aXRoIHRoZSB3aXJlbGVzcyBjb21wb25lbnRzIHdoZW4gd2Ugc3RhcnQgdGVzdGluZy4gSXQgaXMgYSBnb29kIHByYWN0aWNlIHRvIGVuc3VyZSBhbGwgdGhlIHJlbGV2YW50IHBhcnRzIG9mIHRoZSBzeXN0ZW0gYXJlIHVwIGFuZCBydW5uaW5nLCB0byBhdm9pZCB0aGUgZnJ1c3RyYXRpb24gb2YgdHJvdWJsZXNob290aW5nIHRoZSB3cm9uZyB0aGluZ3MuIEJlc3QgdG8gYmUgcHJlcGFyZWQsIHJpZ2h0PwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgV0xBTl9WRU5ET1JfTU9SU0VNSUNSTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9LY29uZmlnOjI6Y29uZmlnIFdMQU5fVkVORE9SX01PUlNFTUlDUk9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtNb3JzZSBNaWNybyBkZXZpY2VzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA3OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NDQ5CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMjYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTW9yc2UgTWljcm8gRmlybXdhcmUgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBgV0xBTl9WRU5ET1JfTU9SU0VNSUNST2AgYW5kIGBNTTgxWF9VU0JgIGNvbmZpZ3VyYXRpb25zIGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHNwZWNpZmljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIE1vcnNlIE1pY3JvIGRyaXZlciB0byB1bmRlcnN0YW5kIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgZmlybXdhcmUgbG9hZGluZyBwcm9jZXNzLiBJJiMzOTttIHNlZWluZyB0aGF0IGBtbTgxeF9md19wYXJzZV9leHRfaG9zdF90YmxgIGFuZCBgbW04MXhfZndfaW5pdGAgYXJlIGtleS4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBtbTgxeF9md19sb2FkX2Z3YCwgYF9fbW04MXhfZndfZmxhc2hgLCBhbmQgYG1tODF4X2Z3X2ZsYXNoYC4gSXQgbG9va3MgbGlrZSBgbW04MXhfZndfbG9hZF9md2AgaXMgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZywgYnV0IGl0JiMzOTtzIGNhbGxlZCBieSBgX19tbTgxeF9md19mbGFzaGAsIHdoaWNoIGlzIHRoZW4gY2FsbGVkIGJ5IGBtbTgxeF9md19mbGFzaGAsIGFuZCBmaW5hbGx5LCB0aGF0IGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBgbW04MXhfZndfaW5pdGAuIFNpbmNlIGBtbTgxeF9md19pbml0YCBpcyBhdCB0aGUgY29yZSBvZiB0aGlzIGNoYWluLCBpdCBsb29rcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBjYW4gcXVpY2tseSBzZWUgdGhhdCBgbW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsYCBpcyBub3Qgc3RhdGljLgoKSSYjMzk7bSBjb25maXJtaW5nIHRoYXQgYG1tODF4X2Z3X2luaXRgIGlzIG5vbi1zdGF0aWMgYXMgd2VsbC4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGF0IGBtbTgxeF9md19wYXJzZV9leHRfaG9zdF90YmxgIGlzIGRlZmluaXRlbHkgbm9uLXN0YXRpYywgYW5kIGFsc28gdGhhdCBgbW04MXhfZndfaW5pdGAgaXMsIHRvby4KCk5vdyBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGFjdHVhbCBjb2RlIGZvciBgbW04MXhfZndfaW5pdGAuIEkmIzM5O2xsIGZpbmQgaXQgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuY2AgYW5kIHN0YXJ0IGRpZ2dpbmcgZGVlcGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcxOSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzE5Olx0aW50IG1tODF4X2Z3X2luaXQoc3RydWN0IG1tODF4ICptb3JzLCBib29sIHJlc2V0KVxuIDcyMDpcdHtcbiA3MjE6XHRcdGludCByZXQ7XG4gNzIyOlx0XHRpbnQgYm9hcmRfaWQ7XG4gNzIzOlx0XHRjaGFyICpiY2ZfcGF0aCA9IE5VTEw7XG4gNzI0Olx0XHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3ID0gTlVMTDtcbiA3MjU6XHRcdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqYmNmID0gTlVMTDtcbiA3MjY6XHRcbiA3Mjc6XHRcdGJvYXJkX2lkID0gbW04MXhfaHdfb3RwX2dldF9ib2FyZF90eXBlKG1vcnMpO1xuIDcyODpcdFxuIDcyOTpcdFx0aWYgKCFtbTgxeF9od19vdHBfdmFsaWRfYm9hcmRfdHlwZShib2FyZF9pZCkpIHtcbiA3MzA6XHRcdFx0ZGV2X2Vycihtb3JzLVx1MDAzZWRldixcbiA3MzE6XHRcdFx0XHRcJiMzNDtPVFAgbm90IHNldCwgdW5hYmxlIHRvIGRldGVybWluZSBCQ0YgdG8gdXNlXCYjMzQ7KTtcbiA3MzI6XHRcdFx0cmV0ID0gLUVJTlZBTDtcbiA3MzM6XHRcdFx0Z290byBvdXQ7XG4gNzM0Olx0XHR9XG4gNzM1Olx0XG4gNzM2Olx0XHRkZXZfZGJnKG1vcnMtXHUwMDNlZGV2LCBcJiMzNDtVc2luZyBib2FyZCB0eXBlIDB4JTA0eCBmcm9tIE9UUFwmIzM0OywgYm9hcmRfaWQpO1xuIDczNzpcdFxuIDczODpcdFx0cmV0ID0gbW04MXhfZndfcmVxdWVzdChtb3JzLCBcdTAwMjZmdyk7XG4gNzM5Olx0XHRpZiAocmV0KVxuIDc0MDpcdFx0XHRnb3RvIG91dDtcbiA3NDE6XHRcbiA3NDI6XHRcdGJjZl9wYXRoID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsXG4gNzQzOlx0XHRcdFx0ICAgICBNTTgxWF9GV19ESVJcbiA3NDQ6XHRcdFx0XHQgICAgIFwmIzM0Oy92JXUvYmNmX2JvYXJkdHlwZV8lMDR4XCYjMzQ7IE1NODFYX0ZXX0VYVCxcbiA3NDU6XHRcdFx0XHQgICAgIG1vcnMtXHUwMDNlZndfbWFqb3IsIGJvYXJkX2lkKTtcbiA3NDY6XHRcdGlmICghYmNmX3BhdGgpIHtcbiA3NDc6XHRcdFx0cmV0ID0gLUVOT01FTTtcbiA3NDg6XHRcdFx0Z290byBvdXQ7XG4gNzQ5Olx0XHR9XG4gNzUwOlx0XG4gNzUxOlx0XHRyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKFx1MDAyNmJjZiwgYmNmX3BhdGgsIG1vcnMtXHUwMDNlZGV2KTtcbiA3NTI6XHRcdGlmIChyZXQpIHtcbiA3NTM6XHRcdFx0aWYgKHJldCA9PSAtRU5PRU5UKVxuIDc1NDpcdFx0XHRcdGRldl9lcnIobW9ycy1cdTAwM2VkZXYsIFwmIzM0O0JDRiAlcyBub3QgZm91bmRcXG5cJiMzNDssIGJjZl9wYXRoKTtcbiA3NTU6XHRcdFx0Z290byBvdXQ7XG4gNzU2Olx0XHR9XG4gNzU3Olx0XG4gNzU4Olx0XHRkZXZfaW5mbyhtb3JzLVx1MDAzZWRldiwgXCYjMzQ7TG9hZGVkIEJDRiBmcm9tICVzLCBzaXplICV6dSwgY3JjMzIgMHglMDh4XFxuXCYjMzQ7LFxuIDc1OTpcdFx0XHQgYmNmX3BhdGgsIGJjZi1cdTAwM2VzaXplLCBiaW5hcnlfY3JjKGJjZikpO1xuIDc2MDpcdFxuIDc2MTpcdFx0cmV0ID0gbW04MXhfZndfZmxhc2gobW9ycywgZncsIGJjZiwgcmVzZXQpO1xuIDc2MjpcdFx0aWYgKHJldCkge1xuIDc2MzpcdFx0XHRkZXZfZXJyKG1vcnMtXHUwMDNlZGV2LCBcJiMzNDtmYWlsZWQgdG8gZmxhc2ggZmlybXdhcmU6ICVkXCYjMzQ7LCByZXQpO1xuIDc2NDpcdFx0XHRnb3RvIG91dDtcbiA3NjU6XHRcdH1cbiA3NjY6XHRcbiA3Njc6XHRcdHJldCA9IG1tODF4X2Z3X2dldF9mbGFncyhtb3JzKTtcbiA3Njg6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDc6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY5NDkKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiA4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OgoKKipGb2N1c2luZyBvbiBGaXJtd2FyZSBJbml0aWFsaXphdGlvbiBhbmQgVGFibGUgUGFyc2luZyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHdoZXJlIHRvIGRpZyBpbnRvIHRoaXMgZmlybXdhcmUgaW5pdGlhbGl6YXRpb24uIGBtbTgxeF9md19pbml0YCBzZWVtcyBsaWtlIGEgc29saWQgZW50cnkgcG9pbnQsIGFuZCB3b3J0aCBhIGRlZXBlciBkaXZlIHRvIHNlZSBob3cgdGhlIG92ZXJhbGwgc3lzdGVtIGdldHMgc3RhcnRlZC4gSSYjMzk7bSBhbHNvIHJlYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBoYW5kbGVzIGV4dGVybmFsIGhvc3QgdGFibGVzLiBUaGF0JiMzOTtzIHdoeSBJJiMzOTttIG5vdyBob25pbmcgaW4gb24gYG1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibGAuIEdpdmVuIHRoZSBuYW1lLCBJJiMzOTttIGd1ZXNzaW5nIGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciBpbnRlcnByZXRpbmcgY29uZmlndXJhdGlvbiBkYXRhIHBhc3NlZCBpbiBmcm9tIHRoZSBob3N0IHNpZGUsIHByb2JhYmx5IGRlZmluaW5nIHBhcmFtZXRlcnMgb3IgY29uZmlndXJhdGlvbnMgc3BlY2lmaWMgdG8gdGhpcyBtb2R1bGUuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgdG8gc2VlIHdoYXQga2luZCBvZiB0YWJsZSBpdCBoYW5kbGVzLCBob3cgaXQmIzM5O3MgdmFsaWRhdGVkLCBhbmQgaG93IGl0IGlzIHVzZWQuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYG1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibGAgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuY2AgdG8gdW5kZXJzdGFuZCB0aGlzIHByb2Nlc3MgaW4gZGV0YWlsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU2NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTY0Olx0aW50IG1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibChzdHJ1Y3QgbW04MXggKm1vcnMpXG4gNTY1Olx0e1xuIDU2NjpcdFx0aW50IHJldDtcbiA1Njc6XHRcdHU4ICpoZWFkO1xuIDU2ODpcdFx0dTggKmVuZDtcbiA1Njk6XHRcdHN0cnVjdCBleHRfaG9zdF90YmwgKmV4dF9ob3N0X3RhYmxlID0gTlVMTDtcbiA1NzA6XHRcbiA1NzE6XHRcdHJldCA9IG1tODF4X2Z3X3JlYWRfZXh0X2hvc3RfdGFibGUobW9ycywgXHUwMDI2ZXh0X2hvc3RfdGFibGUpO1xuIDU3MjpcdFx0aWYgKHJldCB8fCAhZXh0X2hvc3RfdGFibGUpXG4gNTczOlx0XHRcdGdvdG8gZXhpdDtcbiA1NzQ6XHRcbiA1NzU6XHRcdC8qIFBhcnNlIHRoZSBUTFZzICovXG4gNTc2Olx0XHRoZWFkID0gZXh0X2hvc3RfdGFibGUtXHUwMDNlZXh0X2hvc3RfdGFibGVfZGF0YV90bHZzO1xuIDU3NzpcdFx0ZW5kID0gKCh1OCAqKWV4dF9ob3N0X3RhYmxlKSAmIzQzO1xuIDU3ODpcdFx0ICAgICAgbGUzMl90b19jcHUoZXh0X2hvc3RfdGFibGUtXHUwMDNlZXh0X2hvc3RfdGJsX2xlbmd0aCk7XG4gNTc5Olx0XG4gNTgwOlx0XHR3aGlsZSAoZW5kIC0gaGVhZCBcdTAwM2U9IChwdHJkaWZmX3Qpc2l6ZW9mKHN0cnVjdCBleHRfaG9zdF90YmxfdGx2X2hkcikpIHtcbiA1ODE6XHRcdFx0c3RydWN0IGV4dF9ob3N0X3RibF90bHZfaGRyICpoZHIgPVxuIDU4MjpcdFx0XHRcdChzdHJ1Y3QgZXh0X2hvc3RfdGJsX3Rsdl9oZHIgKiloZWFkO1xuIDU4MzpcdFx0XHR1MTYgdGx2X2xlbiA9IGxlMTZfdG9fY3B1KGhkci1cdTAwM2VsZW5ndGgpO1xuIDU4NDpcdFxuIDU4NTpcdFx0XHRpZiAodGx2X2xlbiBcdTAwM2Mgc2l6ZW9mKCpoZHIpIHx8IHRsdl9sZW4gXHUwMDNlIGVuZCAtIGhlYWQpXG4gNTg2Olx0XHRcdFx0YnJlYWs7XG4gNTg3Olx0XG4gNTg4Olx0XHRcdHN3aXRjaCAobGUxNl90b19jcHUoaGRyLVx1MDAzZXRhZykpIHtcbiA1ODk6XHRcdFx0Y2FzZSBNTTgxWF9GV19IT1NUX1RBQkxFX1RBR19TMUdfQ0FQQUJJTElUSUVTOiB7XG4gNTkwOlx0XHRcdFx0c3RydWN0IGV4dF9ob3N0X3RibF9zMWdfY2FwcyAqY2FwcyA9ICh2b2lkICopaGRyO1xuIDU5MTpcdFxuIDU5MjpcdFx0XHRcdGlmICh0bHZfbGVuIFx1MDAzZT0gc2l6ZW9mKCpjYXBzKSlcbiA1OTM6XHRcdFx0XHRcdG1tODF4X2Z3X3VwZGF0ZV9jYXBhYmlsaXRpZXMobW9ycywgY2Fwcyk7XG4gNTk0Olx0XHRcdFx0YnJlYWs7XG4gNTk1Olx0XHRcdH1cbiA1OTY6XHRcdFx0Y2FzZSBNTTgxWF9GV19IT1NUX1RBQkxFX1RBR19JTlNFUlRfU0tCX0NIRUNLU1VNOiB7XG4gNTk3Olx0XHRcdFx0c3RydWN0IGV4dF9ob3N0X3RibF9pbnNlcnRfc2tiX2NoZWNrc3VtICpjc3VtID1cbiA1OTg6XHRcdFx0XHRcdCh2b2lkICopaGRyO1xuIDU5OTpcdFxuIDYwMDpcdFx0XHRcdGlmICh0bHZfbGVuIFx1MDAzZT0gc2l6ZW9mKCpjc3VtKSlcbiA2MDE6XHRcdFx0XHRcdG1tODF4X2Z3X3VwZGF0ZV92YWxpZGF0ZV9za2JfY2hlY2tzdW0obW9ycyxcbiA2MDI6XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgY3N1bSk7XG4gNjAzOlx0XHRcdFx0YnJlYWs7XG4gNjA0Olx0XHRcdH1cbiA2MDU6XHRcdFx0Y2FzZSBNTTgxWF9GV19IT1NUX1RBQkxFX1RBR19ZQVBTX1RBQkxFOiB7XG4gNjA2Olx0XHRcdFx0c3RydWN0IGV4dF9ob3N0X3RibF95YXBzX3RhYmxlICp5YXBzID0gKHZvaWQgKiloZHI7XG4gNjA3Olx0XG4gNjA4Olx0XHRcdFx0aWYgKHRsdl9sZW4gXHUwMDNlPSBzaXplb2YoKnlhcHMpKVxuIDYwOTpcdFx0XHRcdFx0bW04MXhfeWFwc19od19yZWFkX3RhYmxlKG1vcnMsXG4gNjEwOlx0XHRcdFx0XHRcdFx0XHQgXHUwMDI2eWFwcy1cdTAwM2V5YXBzX3RhYmxlKTtcbiA2MTE6XHRcdFx0XHRicmVhaztcbiA2MTI6XHRcdFx0fVxuIDYxMzpcdFx0XHRkZWZhdWx0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODE3OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbiBhbmQgRGVwZW5kZW5jeSBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zLCBgbW04MXhfZndfaW5pdGAgYW5kIGBtbTgxeF9md19wYXJzZV9leHRfaG9zdF90YmxgLiBUaGV5JiMzOTtyZSBub24tc3RhdGljLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyB0aGVtIGludGVyZXN0aW5nIHRhcmdldHMgZm9yIGZ1enppbmcuIFNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKTm93LCBiZWZvcmUgSSBkaXZlIGluIHRvbyBkZWVwLCBsZXQmIzM5O3Mgc2VlIHdoYXQgY29uZmlncyBhcmUgcmVxdWlyZWQgdG8gZ2V0IHRoZXNlIGZ1bmN0aW9ucyBidWlsdCBhbmQgcnVubmluZyBjb3JyZWN0bHkuIEkgc2VlIGBXTEFOX1ZFTkRPUl9NT1JTRU1JQ1JPYCBhbmQgYE1NODFYX1VTQmAgbWVudGlvbmVkLiBBaCwgcmlnaHQsIGBNTTgxWGAgaXMgc2VsZWN0ZWQgYnkgYE1NODFYX1VTQmAsIHNvIGBNTTgxWGAgaXMgaW5kaXJlY3RseSByZWxldmFudC4KCkxldCBtZSBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIGZvciBgTU04MVhgLiBJdCBsb29rcyBsaWtlIGl0IG5lZWRzIGBNQUM4MDIxMWAuIE9rYXksIHNvIGBNQUM4MDIxMWAgaXMgZGVmaW5pdGVseSBlc3NlbnRpYWwuCgpCdXQgaXMgdGhhdCAqYWxsKj8gTGV0IG1lIGRvdWJsZS1jaGVjay4gT2theSwgYE1NODFYX1VTQmAgaXRzZWxmIGRlcGVuZHMgb24gYE1BQzgwMjExICZhbXA7JmFtcDsgVVNCYC4gU28sIGp1c3QgdG8gYmUgYWJzb2x1dGVseSB0aG9yb3VnaCwgSSYjMzk7bGwgbmVlZCB0byBpbmNsdWRlIGBXTEFOX1ZFTkRPUl9NT1JTRU1JQ1JPYCBhbmQgYE1NODFYX1VTQmAgYWxvbmcgd2l0aCB0aGVpciBkZXBlbmRlbmNpZXMuCgpBbHJpZ2h0LCBsZXQgbWUganVzdCBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBvYnZpb3VzLiBMZXQmIzM5O3MgZGlnIGludG8gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vS2NvbmZpZ2AgYW5kIHZlcmlmeSB0aGF0IEkgaGF2ZSBldmVyeXRoaW5nLiBOZWVkIHRvIGJlIHN1cmUgYmVmb3JlIEkgbW92ZSBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBXTEFOX1ZFTkRPUl9NT1JTRU1JQ1JPXG4gICAzOlx0XHRib29sIFwmIzM0O01vcnNlIE1pY3JvIGRldmljZXNcJiMzNDtcbiAgIDQ6XHRcdGRlZmF1bHQgeVxuICAgNTpcdFx0aGVscFxuICAgNjpcdFx0ICBJZiB5b3UgaGF2ZSBhIHdpcmVsZXNzIGNhcmQgYmVsb25naW5nIHRvIHRoaXMgY2xhc3MsIHNheSBZLlxuICAgNzpcdFxuICAgODpcdFx0ICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJiMzOTt0IGRpcmVjdGx5IGFmZmVjdCB0aGVcbiAgIDk6XHRcdCAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbCB0aGVcbiAgMTA6XHRcdCAgcXVlc3Rpb25zIGFib3V0IHRoZXNlIGNhcmRzLiBJZiB5b3Ugc2F5IFksIHlvdSB3aWxsIGJlIGFza2VkIGZvclxuICAxMTpcdFx0ICB5b3VyIHNwZWNpZmljIGNhcmQgaW4gdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMuXG4gIDEyOlx0XG4gIDEzOlx0aWYgV0xBTl9WRU5ET1JfTU9SU0VNSUNST1xuICAxNDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L0tjb25maWdcJiMzNDtcbiAgMTU6XHRlbmRpZiAjIFdMQU5fVkVORE9SX01PUlNFTUlDUk9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDc6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg5OTIKCQkJCQkJCW91dHB1dDogMTUwCgkJCQkJCQl0aG91Z2h0czogMTY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1vcnNlIE1pY3JvIEZ1enppbmcgVGFyZ2V0cyoqCgpPa2F5LCBhZnRlciByZXZpZXdpbmcgdGhlIGRldGFpbHMsIEkmIzM5O3ZlIGdvdCBhIHNvbGlkIHBpY3R1cmUgb2Ygd2hhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGhlcmUuIE15IGNvbmNsdXNpb24gaXMgdGhhdCBgV0xBTl9WRU5ET1JfTU9SU0VNSUNST2AgYW5kIGBNTTgxWF9VU0JgIGFyZSB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIHdlIG5lZWQgdG8gZW5hYmxlIGZvciB0aGlzLiAKCkhlcmXigJlzIHRoZSBicmVha2Rvd24gaW4gbXkgaGVhZDoKCiogICAqKldvcnRoRnV6emluZzoqKiBBYnNvbHV0ZWx5LCB0aGlzIGlzIGEgZGVmaW5pdGUgJiMzNDt5ZXMuJiMzNDsgV2UmIzM5O3ZlIGdvdCB2dWxuZXJhYmlsaXRpZXMg4oCTIG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIG1lbW9yeSBsZWFrcyDigJMgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgZmlybXdhcmUgcGFyc2luZyBsb2dpYyBvZiB0aGUgTW9yc2UgTWljcm8gbW04MXggZHJpdmVyLiBUaGlzIGlzIGNsYXNzaWMgZnV6emluZyB0ZXJyaXRvcnkuCiogICAqKkZvY3VzU3ltYm9sczoqKiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gY29uY2VudHJhdGUgb24gYG1tODF4X2Z3X2luaXRgIGFuZCBgbW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsYC4gVGhvc2Ugc2VlbSB0byBiZSB3aGVyZSB0aGUgYnVncyBhcmUgaGlkaW5nLCBiYXNlZCBvbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHBhdGNoIGFuZCB0aGUgdnVsbmVyYWJsZSBjb2RlLiBUaGV5JiMzOTtyZSBjbGVhcmx5IGNyaXRpY2FsIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGZpcm13YXJlIHBhcnNpbmcgcHJvY2Vzcy4KKiAgICoqRW5hYmxlQ29uZmlnczoqKiBBZ2FpbiwgYFdMQU5fVkVORE9SX01PUlNFTUlDUk9gIGFuZCBgTU04MVhfVVNCYCBhcmUgd2hhdCYjMzk7cyBnb2luZyB0byBhbGxvdyB1cyB0byB0cmlnZ2VyIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLiBUaGUgVVNCIGludGVyZmFjZSBpcyB0aGUgcm91dGUgZm9yIGludGVyYWN0aW9uIGhlcmUsIGFuZCB0aGUgdmVuZG9yIGZsYWcgYWxsb3dzIHVzIHRvIGVuZ2FnZS4KKiAgICoqUmVhc29uaW5nOioqIFRoZSBkcml2ZXIgaGFuZGxlcyBmaXJtd2FyZSBwYXJzaW5nLCBhbmQgdGhhdOKAmXMgd2hlcmUgdGhlIGJ1Z3MgYXJlLiBUaGUgVVNCIGludGVyZmFjZSwgd2hldGhlciB0aHJvdWdoIGEgZHVtbXkgSENEIG9yIHN5emthbGxlciwgcHJvdmlkZXMgdGhlIGF0dGFjayBzdXJmYWNlLiBUaGlzIGNvZGUgaXMgdHJpZ2dlcmVkIGR1cmluZyBkZXZpY2UgcHJvYmluZyBhbmQgaW50ZXJmYWNlIHN0YXJ0dXAsIG1ha2luZyBpdCByZWFjaGFibGUgd2l0aCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMuIEl04oCZcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIOKAkyBicmluZyB0aGUgZGV2aWNlIHVwLCBsb2FkIHRoZSBmaXJtd2FyZSAod2hpY2ggaXMgdGhlIHBhcnNpbmcgdGFyZ2V0KSwgYW5kIGxldCB0aGUgZnV6emluZyBiZWdpbi4gV2UgaGF2ZSBhIGNsZWFyIHBhdGggdG8gdHJpZ2dlciB0aGUgdnVsbmVyYWJsZSBjb2RlLCBzbyBJJiMzOTttIG9wdGltaXN0aWMgYWJvdXQgZmluZGluZyBzb21lIG5ldyBidWdzIHdpdGggdGhlIGZ1enppbmcgYXBwcm9hY2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA3OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtXTEFOX1ZFTkRPUl9NT1JTRU1JQ1JPJiMzNDssCiAgICAmIzM0O01NODFYX1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21tODF4X2Z3X2luaXQmIzM0OywKICAgICYjMzQ7bW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIG1lbW9yeSBsZWFrcyBpbiB0aGUgZmlybXdhcmUgcGFyc2luZyBsb2dpYyBvZiB0aGUgTW9yc2UgTWljcm8gbW04MXggZHJpdmVyLiBUaGUgZHJpdmVyIGNhbiBiZSB0ZXN0ZWQgdmlhIHRoZSBVU0IgaW50ZXJmYWNlIHVzaW5nIGEgZHVtbXkgSENEIG9yIHN5emthbGxlciYjMzk7cyBVU0IgZnV6emluZyBjYXBhYmlsaXRpZXMuIFRoZSBmaXJtd2FyZSBsb2FkaW5nIGFuZCBwYXJzaW5nIGxvZ2ljIGlzIHJlYWNoYWJsZSB3aGVuIHRoZSBkZXZpY2UgaXMgcHJvYmVkIGFuZCB0aGUgaW50ZXJmYWNlIGlzIGJyb3VnaHQgdXAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1dMQU5fVkVORE9SX01PUlNFTUlDUk8mIzM0OywKICAgICYjMzQ7TU04MVhfVVNCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bW04MXhfZndfaW5pdCYjMzQ7LAogICAgJiMzNDttbTgxeF9md19wYXJzZV9leHRfaG9zdF90YmwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgbWVtb3J5IGxlYWtzIGluIHRoZSBmaXJtd2FyZSBwYXJzaW5nIGxvZ2ljIG9mIHRoZSBNb3JzZSBNaWNybyBtbTgxeCBkcml2ZXIuIFRoZSBkcml2ZXIgY2FuIGJlIHRlc3RlZCB2aWEgdGhlIFVTQiBpbnRlcmZhY2UgdXNpbmcgYSBkdW1teSBIQ0Qgb3Igc3l6a2FsbGVyJiMzOTtzIFVTQiBmdXp6aW5nIGNhcGFiaWxpdGllcy4gVGhlIGZpcm13YXJlIGxvYWRpbmcgYW5kIHBhcnNpbmcgbG9naWMgaXMgcmVhY2hhYmxlIHdoZW4gdGhlIGRldmljZSBpcyBwcm9iZWQgYW5kIHRoZSBpbnRlcmZhY2UgaXMgYnJvdWdodCB1cC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDc6MDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNzowNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBtZW1vcnkgbGVha3MgZHVyaW5nIGZpcm13YXJlIHBhcnNpbmcuIFRoZSBib3VuZHMgY2hlY2tzIHByZXZlbnQgcmVhZGluZyBwYXN0IHRoZSBlbmQgb2YgYWxsb2NhdGVkIGJ1ZmZlcnMgY29udGFpbmluZyBmaXJtd2FyZSBkYXRhLCB3aGljaCBhcmUgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlcy4gS0FTQU4gaXMgZnVsbHkgY2FwYWJsZSBvZiBkZXRlY3RpbmcgdGhlc2Ugb3V0LW9mLWJvdW5kcyByZWFkcywgYW5kIGttZW1sZWFrIGRldGVjdHMgdGhlIGZpeGVkIG1lbW9yeSBsZWFrcy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBjb250cm9sIGZsb3csIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwMDY2MDcwNWVkNmZjYTg3M2EwMjllZTNjMjUyZmMzZmI4OGExNTRiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTIgMDc6MDQ6NDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmMKaW5kZXggZDZkMmFkMDg2YzMyOC4uNTBmYTllNGI1ZjgwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYwpAQCAtNTQsMjEgJiM0Mzs1NCwyOSBAQCBzdGF0aWMgaW50IG1tODF4X2Z3X2dldF9oZWFkZXIoY29uc3QgdTggKmRhdGEsIEVsZjMyX0VoZHIgKmVoZHIpCiAKIHN0YXRpYyB2b2lkIG1tODF4X2Z3X3BhcnNlX2luZm8oc3RydWN0IG1tODF4ICptb3JzLCBjb25zdCB1OCAqZGF0YSwgaW50IGxlbmd0aCkKIHsKLQljb25zdCBzdHJ1Y3QgbW04MXhfZndfaW5mb190bHYgKnRsdiA9Ci0JCShjb25zdCBzdHJ1Y3QgbW04MXhfZndfaW5mb190bHYgKilkYXRhOwomIzQzOwljb25zdCB1OCAqZW5kID0gZGF0YSAmIzQzOyBsZW5ndGg7CiYjNDM7CWNvbnN0IHU4ICpwb3MgPSBkYXRhOwomIzQzOwomIzQzOwl3aGlsZSAoZW5kIC0gcG9zICZndDs9IChwdHJkaWZmX3Qpc2l6ZW9mKHN0cnVjdCBtbTgxeF9md19pbmZvX3RsdikpIHsKJiM0MzsJCWNvbnN0IHN0cnVjdCBtbTgxeF9md19pbmZvX3RsdiAqdGx2ID0KJiM0MzsJCQkoY29uc3Qgc3RydWN0IG1tODF4X2Z3X2luZm9fdGx2ICopcG9zOwomIzQzOwkJdTE2IHRsdl9sZW4gPSBsZTE2X3RvX2NwdSh0bHYtJmd0O2xlbmd0aCk7CiYjNDM7CiYjNDM7CQlwb3MgPSB0bHYtJmd0O3ZhbDsKJiM0MzsJCWlmICh0bHZfbGVuICZndDsgZW5kIC0gcG9zKQomIzQzOwkJCWJyZWFrOwogCi0Jd2hpbGUgKCh1OCAqKXRsdiAmbHQ7IChkYXRhICYjNDM7IGxlbmd0aCkpIHsKIAkJc3dpdGNoIChsZTE2X3RvX2NwdSh0bHYtJmd0O3R5cGUpKSB7CiAJCWNhc2UgTU04MVhfRldfSU5GT19UTFZfQkNGX0FERFI6Ci0JCQltb3JzLSZndDtiY2ZfYWRkcmVzcyA9IGdldF91bmFsaWduZWRfbGUzMih0bHYtJmd0O3ZhbCk7CiYjNDM7CQkJaWYgKHRsdl9sZW4gJmd0Oz0gc2l6ZW9mKF9fbGUzMikpCiYjNDM7CQkJCW1vcnMtJmd0O2JjZl9hZGRyZXNzID0KJiM0MzsJCQkJCWdldF91bmFsaWduZWRfbGUzMih0bHYtJmd0O3ZhbCk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCQl9Ci0JCXRsdiA9IChjb25zdCBzdHJ1Y3QgbW04MXhfZndfaW5mb190bHYgKikoKHU4ICopdGx2ICYjNDM7Ci0JCQkJCQkJIGxlMTZfdG9fY3B1KAotCQkJCQkJCQkgdGx2LSZndDtsZW5ndGgpICYjNDM7Ci0JCQkJCQkJIHNpemVvZigqdGx2KSk7CiYjNDM7CiYjNDM7CQlwb3MgJiM0Mzs9IHRsdl9sZW47CiAJfQogfQogCkBAIC0xMTcsMTMgJiM0MzsxMjUsMTUgQEAgc3RhdGljIGludCBtbTgxeF9md19sb2FkX2Z3KHN0cnVjdCBtbTgxeCAqbW9ycywgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdykKIAogCWlmIChtbTgxeF9md19nZXRfaGVhZGVyKGZ3LSZndDtkYXRhLCAmYW1wO2VoZHIpKSB7CiAJCWRldl9lcnIobW9ycy0mZ3Q7ZGV2LCAmIzM0O1dyb25nIGZpbGUgZm9ybWF0JiMzNDspOwotCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIG91dF9mcmVlOwogCX0KIAogCWlmIChtbTgxeF9md19nZXRfc2VjdGlvbl9oZWFkZXIoZnctJmd0O2RhdGEsICZhbXA7ZWhkciwgJmFtcDtzaF9zdHJ0YWIsCiAJCQkJCWVoZHIuZV9zaHN0cm5keCkpIHsKIAkJZGV2X2Vycihtb3JzLSZndDtkZXYsICYjMzQ7SW52YWxpZCBmaXJtd2FyZS4gTWlzc2luZyBzdHJpbmcgdGFibGUmIzM0Oyk7Ci0JCXJldHVybiAtRU5PRU5UOwomIzQzOwkJcmV0ID0gLUVOT0VOVDsKJiM0MzsJCWdvdG8gb3V0X2ZyZWU7CiAJfQogCiAJc2hfc3RycyA9IChjb25zdCBjaGFyICopZnctJmd0O2RhdGEgJiM0Mzsgc2hfc3RydGFiLnNoX29mZnNldDsKQEAgLTE2MCw3ICYjNDM7MTcwLDcgQEAgc3RhdGljIGludCBtbTgxeF9md19sb2FkX2Z3KHN0cnVjdCBtbTgxeCAqbW9ycywgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdykKIAkJCW1tODF4X3JlbGVhc2VfYnVzKG1vcnMpOwogCQkJaWYgKHN0YXR1cykgewogCQkJCXJldCA9IC1FSU87Ci0JCQkJYnJlYWs7CiYjNDM7CQkJCWdvdG8gb3V0X2ZyZWU7CiAJCQl9CiAJCX0KIAl9CkBAIC0xNzksNiAmIzQzOzE4OSw3IEBAIHN0YXRpYyBpbnQgbW04MXhfZndfbG9hZF9mdyhzdHJ1Y3QgbW04MXggKm1vcnMsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpCiAJaWYgKGVoZHIuZV9lbnRyeSkKIAkJcmV0ID0gbW04MXhfZndfc2V0X2Jvb3RfYWRkcihtb3JzLCBlaGRyLmVfZW50cnkpOwogCiYjNDM7b3V0X2ZyZWU6CiAJZGV2bV9rZnJlZShtb3JzLSZndDtkZXYsIGZ3X2J1Zik7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTQ5Miw2ICYjNDM7NTAzLDEzIEBAIHN0YXRpYyBpbnQgbW04MXhfZndfcmVhZF9leHRfaG9zdF90YWJsZShzdHJ1Y3QgbW04MXggKm1vcnMsCiAJaWYgKHJldCkKIAkJZ290byBleGl0OwogCiYjNDM7CS8qIFRoZSB0YWJsZSBkZXNjcmliZXMgaXRzIG93biBsZW5ndGg7IGl0IG11c3QgZml0IHdoYXQgd2FzIHJlYWQgKi8KJiM0MzsJaWYgKGxlMzJfdG9fY3B1KGhvc3RfdGJsLSZndDtleHRfaG9zdF90YmxfbGVuZ3RoKSAmbHQ7IHNpemVvZigqaG9zdF90YmwpIHx8CiYjNDM7CSAgICBsZTMyX3RvX2NwdShob3N0X3RibC0mZ3Q7ZXh0X2hvc3RfdGJsX2xlbmd0aCkgJmd0OyBleHRfaG9zdF90YmxfbGVuKSB7CiYjNDM7CQlyZXQgPSAtRUlOVkFMOwomIzQzOwkJZ290byBleGl0OwomIzQzOwl9CiYjNDM7CiAJbW04MXhfcmVsZWFzZV9idXMobW9ycyk7CiAJKmV4dF9ob3N0X3RhYmxlID0gaG9zdF90Ymw7CiAJcmV0dXJuIHJldDsKQEAgLTU1OSwzNCAmIzQzOzU3Nyw0NCBAQCBpbnQgbW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsKHN0cnVjdCBtbTgxeCAqbW9ycykKIAllbmQgPSAoKHU4ICopZXh0X2hvc3RfdGFibGUpICYjNDM7CiAJICAgICAgbGUzMl90b19jcHUoZXh0X2hvc3RfdGFibGUtJmd0O2V4dF9ob3N0X3RibF9sZW5ndGgpOwogCi0Jd2hpbGUgKGhlYWQgJmx0OyBlbmQpIHsKJiM0MzsJd2hpbGUgKGVuZCAtIGhlYWQgJmd0Oz0gKHB0cmRpZmZfdClzaXplb2Yoc3RydWN0IGV4dF9ob3N0X3RibF90bHZfaGRyKSkgewogCQlzdHJ1Y3QgZXh0X2hvc3RfdGJsX3Rsdl9oZHIgKmhkciA9CiAJCQkoc3RydWN0IGV4dF9ob3N0X3RibF90bHZfaGRyICopaGVhZDsKJiM0MzsJCXUxNiB0bHZfbGVuID0gbGUxNl90b19jcHUoaGRyLSZndDtsZW5ndGgpOwomIzQzOwomIzQzOwkJaWYgKHRsdl9sZW4gJmx0OyBzaXplb2YoKmhkcikgfHwgdGx2X2xlbiAmZ3Q7IGVuZCAtIGhlYWQpCiYjNDM7CQkJYnJlYWs7CiAKIAkJc3dpdGNoIChsZTE2X3RvX2NwdShoZHItJmd0O3RhZykpIHsKLQkJY2FzZSBNTTgxWF9GV19IT1NUX1RBQkxFX1RBR19TMUdfQ0FQQUJJTElUSUVTOgotCQkJbW04MXhfZndfdXBkYXRlX2NhcGFiaWxpdGllcygKLQkJCQltb3JzLCAoc3RydWN0IGV4dF9ob3N0X3RibF9zMWdfY2FwcyAqKWhkcik7CiYjNDM7CQljYXNlIE1NODFYX0ZXX0hPU1RfVEFCTEVfVEFHX1MxR19DQVBBQklMSVRJRVM6IHsKJiM0MzsJCQlzdHJ1Y3QgZXh0X2hvc3RfdGJsX3MxZ19jYXBzICpjYXBzID0gKHZvaWQgKiloZHI7CiYjNDM7CiYjNDM7CQkJaWYgKHRsdl9sZW4gJmd0Oz0gc2l6ZW9mKCpjYXBzKSkKJiM0MzsJCQkJbW04MXhfZndfdXBkYXRlX2NhcGFiaWxpdGllcyhtb3JzLCBjYXBzKTsKIAkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwkJY2FzZSBNTTgxWF9GV19IT1NUX1RBQkxFX1RBR19JTlNFUlRfU0tCX0NIRUNLU1VNOiB7CiYjNDM7CQkJc3RydWN0IGV4dF9ob3N0X3RibF9pbnNlcnRfc2tiX2NoZWNrc3VtICpjc3VtID0KJiM0MzsJCQkJKHZvaWQgKiloZHI7CiAKLQkJY2FzZSBNTTgxWF9GV19IT1NUX1RBQkxFX1RBR19JTlNFUlRfU0tCX0NIRUNLU1VNOgotCQkJbW04MXhfZndfdXBkYXRlX3ZhbGlkYXRlX3NrYl9jaGVja3N1bSgKLQkJCQltb3JzLAotCQkJCShzdHJ1Y3QgZXh0X2hvc3RfdGJsX2luc2VydF9za2JfY2hlY2tzdW0gKiloZHIpOwomIzQzOwkJCWlmICh0bHZfbGVuICZndDs9IHNpemVvZigqY3N1bSkpCiYjNDM7CQkJCW1tODF4X2Z3X3VwZGF0ZV92YWxpZGF0ZV9za2JfY2hlY2tzdW0obW9ycywKJiM0MzsJCQkJCQkJCSAgICAgIGNzdW0pOwogCQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CQljYXNlIE1NODFYX0ZXX0hPU1RfVEFCTEVfVEFHX1lBUFNfVEFCTEU6IHsKJiM0MzsJCQlzdHJ1Y3QgZXh0X2hvc3RfdGJsX3lhcHNfdGFibGUgKnlhcHMgPSAodm9pZCAqKWhkcjsKIAotCQljYXNlIE1NODFYX0ZXX0hPU1RfVEFCTEVfVEFHX1lBUFNfVEFCTEU6Ci0JCQltbTgxeF95YXBzX2h3X3JlYWRfdGFibGUoCi0JCQkJbW9ycywgJmFtcDsoKHN0cnVjdCBleHRfaG9zdF90YmxfeWFwc190YWJsZSAqKWhkcikKLQkJCQkJICAgICAgIC0mZ3Q7eWFwc190YWJsZSk7CiYjNDM7CQkJaWYgKHRsdl9sZW4gJmd0Oz0gc2l6ZW9mKCp5YXBzKSkKJiM0MzsJCQkJbW04MXhfeWFwc19od19yZWFkX3RhYmxlKG1vcnMsCiYjNDM7CQkJCQkJCSAmYW1wO3lhcHMtJmd0O3lhcHNfdGFibGUpOwogCQkJYnJlYWs7CiYjNDM7CQl9CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAkJfQogCi0JCWhlYWQgJiM0Mzs9IGxlMTZfdG9fY3B1KGhkci0mZ3Q7bGVuZ3RoKTsKLQkJaWYgKCFoZHItJmd0O2xlbmd0aCkKLQkJCWJyZWFrOwomIzQzOwkJaGVhZCAmIzQzOz0gdGx2X2xlbjsKIAl9CiAKIAlrZnJlZShleHRfaG9zdF90YWJsZSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODY2CgkJCQkJCQlvdXRwdXQ6IDEzMAoJCQkJCQkJdGhvdWdodHM6IDQxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1vcnNlIE1pY3JvIEZpcm13YXJlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYW5pbmcgdXAgc29tZSBmaXJtd2FyZSBwYXJzaW5nIHJvdXRpbmVzIHdpdGhpbiB0aGUgYG1tODF4YCB3aXJlbGVzcyBkcml2ZXIuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0JiMzOTtzIGEgc3RyYWlnaHRmb3J3YXJkIGltcHJvdmVtZW50LCBwcmltYXJpbHkgZm9jdXNlZCBvbiBoYXJkZW5pbmcgYWdhaW5zdCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBUaGUgY2hhbmdlcyBhcmUgYWxsIGxvY2FsaXplZCB3aXRoaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuY2AuCgpTcGVjaWZpY2FsbHksIEkgc2VlIGZpeGVzIHRvIGZvdXIgZnVuY3Rpb25zOiBgbW04MXhfZndfcGFyc2VfaW5mb2AsIGBtbTgxeF9md19sb2FkX2Z3YCwgYG1tODF4X2Z3X3JlYWRfZXh0X2hvc3RfdGFibGVgLCBhbmQgYG1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibGAuIFRoZSBjb3JlIG9mIHRoZSBwYXRjaCBzZWVtcyB0byBiZSBhZGRpbmcgYm91bmRzIGNoZWNraW5nIGR1cmluZyBUTFYgKFR5cGUtTGVuZ3RoLVZhbHVlKSBwYXJzaW5nIHdpdGhpbiB0aGUgZmlybXdhcmUgZGF0YSBhbmQgYWRkcmVzc2luZyBtZW1vcnkgbGVha3MgaW4gdGhlIGZpcm13YXJlIGxvYWRpbmcgcHJvY2Vzcy4gVGhlIG1lbW9yeSBsZWFrIGZpeCBpbiBgbW04MXhfZndfbG9hZF9md2AgaXMgYSBzdGFuZGFyZCBgZ290byBvdXRfZnJlZWAgd2hpY2ggaXMgd2hhdCBJIHdvdWxkIGV4cGVjdC4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBhcmUgd2UgZGVhbGluZyB3aXRoIGFueSAqdW5pbml0aWFsaXplZCogbWVtb3J5IGV4cG9zdXJlcz8gSSBuZWVkIHRvIGJlIHN1cmUuIFRoZSBwYXRjaCBpdHNlbGYgaXMgdXNpbmcgS0FTQU4gdG8gY2F0Y2ggdGhlIE9PQiByZWFkcyBhbmQga21lbWxlYWsgdG8gY2F0Y2ggdGhlIG1lbW9yeSBsZWFrcy4gVGhlIGRhdGEgaXRzZWxmIHNlZW1zIHRvIGNvbWUgZnJvbSB0aGUgZmlybXdhcmUgaW1hZ2UgKGBmdy0mZ3Q7ZGF0YWApIG9yIGlzIHJlYWQgZnJvbSB0aGUgZGV2aWNlIGhhcmR3YXJlIGl0c2VsZiAoaW4gdGhlIGNhc2Ugb2YgdGhlIGV4dGVuZGVkIGhvc3QgdGFibGUpLiBTbywgdGhlcmUgc2hvdWxkbiYjMzk7dCBiZSBhbnl0aGluZyB1bmluaXRpYWxpemVkIGJlaW5nIGV4cG9zZWQsIGJ1dCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guCgpMZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgYXR0YWNrIHN1cmZhY2UuIElmIHRoZSBgdGx2X2xlbmAgaXMgdG9vIGxhcmdlLCBpdCByZXN1bHRzIGluIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBhbmQgaXMgY2F1Z2h0IGJ5IEtBU0FOLiBOb3csIHdoYXQgaWYgYHRsdl9sZW5gIGlzIHNtYWxsZXIsICpwb3RlbnRpYWxseSogbGVhZGluZyB0byBhbiB1bmluaXRpYWxpemVkIHJlYWQ/IE5vLCBpdCYjMzk7cyBub3QgZ29pbmcgdG8gcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWNhdXNlIHRoZSBidWZmZXIgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCB3aXRoIGZpcm13YXJlIGRhdGEuIElmIHdlJiMzOTtyZSByZWFkaW5nIHBhc3QgdGhlIGVuZCBvZiB0aGUgZGF0YSwgaXQmIzM5O3Mgc3RpbGwgb3V0LW9mLWJvdW5kcywgYW5kIEtBU0FOIHdpbGwgY2F0Y2ggaXQuIFRoZSBzYW1lIGxvZ2ljIGFwcGxpZXMgdG8gYGhvc3RfdGJsLSZndDtleHRfaG9zdF90YmxfbGVuZ3RoYCB2ZXJzdXMgYGV4dF9ob3N0X3RibF9sZW5gLiBLQVNBTiBzaG91bGQgYmUgYWJsZSB0byBjYXRjaCB0aGUgT09CIHJlYWRzIHRoZXJlLgoKR2l2ZW4gdGhhdCwgSSBkb24mIzM5O3Qgc2VlIGFueSBpbW1lZGlhdGUgY29uY2VybnMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgbGVha2VkLiBUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBwYXRjaC4gU3RhbmRhcmQgT09CIGFuZCBtZW1vcnkgbGVhayBmaXhlcy4gTm8gS01TQU4gaXMgbmVjZXNzYXJ5IGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA3OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIG1lbW9yeSBsZWFrcyBkdXJpbmcgZmlybXdhcmUgcGFyc2luZy4gVGhlIGJvdW5kcyBjaGVja3MgcHJldmVudCByZWFkaW5nIHBhc3QgdGhlIGVuZCBvZiBhbGxvY2F0ZWQgYnVmZmVycyBjb250YWluaW5nIGZpcm13YXJlIGRhdGEsIHdoaWNoIGFyZSBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2VzLiBLQVNBTiBpcyBmdWxseSBjYXBhYmxlIG9mIGRldGVjdGluZyB0aGVzZSBvdXQtb2YtYm91bmRzIHJlYWRzLCBhbmQga21lbWxlYWsgZGV0ZWN0cyB0aGUgZml4ZWQgbWVtb3J5IGxlYWtzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIGNvbnRyb2wgZmxvdywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBtZW1vcnkgbGVha3MgZHVyaW5nIGZpcm13YXJlIHBhcnNpbmcuIFRoZSBib3VuZHMgY2hlY2tzIHByZXZlbnQgcmVhZGluZyBwYXN0IHRoZSBlbmQgb2YgYWxsb2NhdGVkIGJ1ZmZlcnMgY29udGFpbmluZyBmaXJtd2FyZSBkYXRhLCB3aGljaCBhcmUgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlcy4gS0FTQU4gaXMgZnVsbHkgY2FwYWJsZSBvZiBkZXRlY3RpbmcgdGhlc2Ugb3V0LW9mLWJvdW5kcyByZWFkcywgYW5kIGttZW1sZWFrIGRldGVjdHMgdGhlIGZpeGVkIG1lbW9yeSBsZWFrcy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBjb250cm9sIGZsb3csIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNzowNDo0NS43NDIxMjQ3OTlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY0NTI0NjgwMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiV0xBTl9WRU5ET1JfTU9SU0VNSUNST1wiLFxuICAgIFwiTU04MVhfVVNCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibW04MXhfZndfaW5pdFwiLFxuICAgIFwibW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBtZW1vcnkgbGVha3MgZHVyaW5nIGZpcm13YXJlIHBhcnNpbmcuIFRoZSBib3VuZHMgY2hlY2tzIHByZXZlbnQgcmVhZGluZyBwYXN0IHRoZSBlbmQgb2YgYWxsb2NhdGVkIGJ1ZmZlcnMgY29udGFpbmluZyBmaXJtd2FyZSBkYXRhLCB3aGljaCBhcmUgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlcy4gS0FTQU4gaXMgZnVsbHkgY2FwYWJsZSBvZiBkZXRlY3RpbmcgdGhlc2Ugb3V0LW9mLWJvdW5kcyByZWFkcywgYW5kIGttZW1sZWFrIGRldGVjdHMgdGhlIGZpeGVkIG1lbW9yeSBsZWFrcy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBjb250cm9sIGZsb3csIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIG1lbW9yeSBsZWFrcyBpbiB0aGUgZmlybXdhcmUgcGFyc2luZyBsb2dpYyBvZiB0aGUgTW9yc2UgTWljcm8gbW04MXggZHJpdmVyLiBUaGUgZHJpdmVyIGNhbiBiZSB0ZXN0ZWQgdmlhIHRoZSBVU0IgaW50ZXJmYWNlIHVzaW5nIGEgZHVtbXkgSENEIG9yIHN5emthbGxlcidzIFVTQiBmdXp6aW5nIGNhcGFiaWxpdGllcy4gVGhlIGZpcm13YXJlIGxvYWRpbmcgYW5kIHBhcnNpbmcgbG9naWMgaXMgcmVhY2hhYmxlIHdoZW4gdGhlIGRldmljZSBpcyBwcm9iZWQgYW5kIHRoZSBpbnRlcmZhY2UgaXMgYnJvdWdodCB1cC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDc6MDQ6NDUuNzQyMTMwMTY5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQwMDI5NDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDA2NjA3MDVlZDZmY2E4NzNhMDI5ZWUzYzI1MmZjM2ZiODhhMTU0YlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAxMiAwNzowNDo0MyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmNcXG5pbmRleCBkNmQyYWQwODZjMzI4Li41MGZhOWU0YjVmODAzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuY1xcbkBAIC01NCwyMSArNTQsMjkgQEAgc3RhdGljIGludCBtbTgxeF9md19nZXRfaGVhZGVyKGNvbnN0IHU4ICpkYXRhLCBFbGYzMl9FaGRyICplaGRyKVxcbiBcXG4gc3RhdGljIHZvaWQgbW04MXhfZndfcGFyc2VfaW5mbyhzdHJ1Y3QgbW04MXggKm1vcnMsIGNvbnN0IHU4ICpkYXRhLCBpbnQgbGVuZ3RoKVxcbiB7XFxuLVxcdGNvbnN0IHN0cnVjdCBtbTgxeF9md19pbmZvX3RsdiAqdGx2ID1cXG4tXFx0XFx0KGNvbnN0IHN0cnVjdCBtbTgxeF9md19pbmZvX3RsdiAqKWRhdGE7XFxuK1xcdGNvbnN0IHU4ICplbmQgPSBkYXRhICsgbGVuZ3RoO1xcbitcXHRjb25zdCB1OCAqcG9zID0gZGF0YTtcXG4rXFxuK1xcdHdoaWxlIChlbmQgLSBwb3MgXFx1MDAzZT0gKHB0cmRpZmZfdClzaXplb2Yoc3RydWN0IG1tODF4X2Z3X2luZm9fdGx2KSkge1xcbitcXHRcXHRjb25zdCBzdHJ1Y3QgbW04MXhfZndfaW5mb190bHYgKnRsdiA9XFxuK1xcdFxcdFxcdChjb25zdCBzdHJ1Y3QgbW04MXhfZndfaW5mb190bHYgKilwb3M7XFxuK1xcdFxcdHUxNiB0bHZfbGVuID0gbGUxNl90b19jcHUodGx2LVxcdTAwM2VsZW5ndGgpO1xcbitcXG4rXFx0XFx0cG9zID0gdGx2LVxcdTAwM2V2YWw7XFxuK1xcdFxcdGlmICh0bHZfbGVuIFxcdTAwM2UgZW5kIC0gcG9zKVxcbitcXHRcXHRcXHRicmVhaztcXG4gXFxuLVxcdHdoaWxlICgodTggKil0bHYgXFx1MDAzYyAoZGF0YSArIGxlbmd0aCkpIHtcXG4gXFx0XFx0c3dpdGNoIChsZTE2X3RvX2NwdSh0bHYtXFx1MDAzZXR5cGUpKSB7XFxuIFxcdFxcdGNhc2UgTU04MVhfRldfSU5GT19UTFZfQkNGX0FERFI6XFxuLVxcdFxcdFxcdG1vcnMtXFx1MDAzZWJjZl9hZGRyZXNzID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHRsdi1cXHUwMDNldmFsKTtcXG4rXFx0XFx0XFx0aWYgKHRsdl9sZW4gXFx1MDAzZT0gc2l6ZW9mKF9fbGUzMikpXFxuK1xcdFxcdFxcdFxcdG1vcnMtXFx1MDAzZWJjZl9hZGRyZXNzID1cXG4rXFx0XFx0XFx0XFx0XFx0Z2V0X3VuYWxpZ25lZF9sZTMyKHRsdi1cXHUwMDNldmFsKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGRlZmF1bHQ6XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuLVxcdFxcdHRsdiA9IChjb25zdCBzdHJ1Y3QgbW04MXhfZndfaW5mb190bHYgKikoKHU4ICopdGx2ICtcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0IGxlMTZfdG9fY3B1KFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgdGx2LVxcdTAwM2VsZW5ndGgpICtcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0IHNpemVvZigqdGx2KSk7XFxuK1xcbitcXHRcXHRwb3MgKz0gdGx2X2xlbjtcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC0xMTcsMTMgKzEyNSwxNSBAQCBzdGF0aWMgaW50IG1tODF4X2Z3X2xvYWRfZncoc3RydWN0IG1tODF4ICptb3JzLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KVxcbiBcXG4gXFx0aWYgKG1tODF4X2Z3X2dldF9oZWFkZXIoZnctXFx1MDAzZWRhdGEsIFxcdTAwMjZlaGRyKSkge1xcbiBcXHRcXHRkZXZfZXJyKG1vcnMtXFx1MDAzZWRldiwgXFxcIldyb25nIGZpbGUgZm9ybWF0XFxcIik7XFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIG91dF9mcmVlO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAobW04MXhfZndfZ2V0X3NlY3Rpb25faGVhZGVyKGZ3LVxcdTAwM2VkYXRhLCBcXHUwMDI2ZWhkciwgXFx1MDAyNnNoX3N0cnRhYixcXG4gXFx0XFx0XFx0XFx0XFx0ZWhkci5lX3Noc3RybmR4KSkge1xcbiBcXHRcXHRkZXZfZXJyKG1vcnMtXFx1MDAzZWRldiwgXFxcIkludmFsaWQgZmlybXdhcmUuIE1pc3Npbmcgc3RyaW5nIHRhYmxlXFxcIik7XFxuLVxcdFxcdHJldHVybiAtRU5PRU5UO1xcbitcXHRcXHRyZXQgPSAtRU5PRU5UO1xcbitcXHRcXHRnb3RvIG91dF9mcmVlO1xcbiBcXHR9XFxuIFxcbiBcXHRzaF9zdHJzID0gKGNvbnN0IGNoYXIgKilmdy1cXHUwMDNlZGF0YSArIHNoX3N0cnRhYi5zaF9vZmZzZXQ7XFxuQEAgLTE2MCw3ICsxNzAsNyBAQCBzdGF0aWMgaW50IG1tODF4X2Z3X2xvYWRfZncoc3RydWN0IG1tODF4ICptb3JzLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KVxcbiBcXHRcXHRcXHRtbTgxeF9yZWxlYXNlX2J1cyhtb3JzKTtcXG4gXFx0XFx0XFx0aWYgKHN0YXR1cykge1xcbiBcXHRcXHRcXHRcXHRyZXQgPSAtRUlPO1xcbi1cXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0XFx0Z290byBvdXRfZnJlZTtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuIFxcdH1cXG5AQCAtMTc5LDYgKzE4OSw3IEBAIHN0YXRpYyBpbnQgbW04MXhfZndfbG9hZF9mdyhzdHJ1Y3QgbW04MXggKm1vcnMsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpXFxuIFxcdGlmIChlaGRyLmVfZW50cnkpXFxuIFxcdFxcdHJldCA9IG1tODF4X2Z3X3NldF9ib290X2FkZHIobW9ycywgZWhkci5lX2VudHJ5KTtcXG4gXFxuK291dF9mcmVlOlxcbiBcXHRkZXZtX2tmcmVlKG1vcnMtXFx1MDAzZWRldiwgZndfYnVmKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbkBAIC00OTIsNiArNTAzLDEzIEBAIHN0YXRpYyBpbnQgbW04MXhfZndfcmVhZF9leHRfaG9zdF90YWJsZShzdHJ1Y3QgbW04MXggKm1vcnMsXFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gZXhpdDtcXG4gXFxuK1xcdC8qIFRoZSB0YWJsZSBkZXNjcmliZXMgaXRzIG93biBsZW5ndGg7IGl0IG11c3QgZml0IHdoYXQgd2FzIHJlYWQgKi9cXG4rXFx0aWYgKGxlMzJfdG9fY3B1KGhvc3RfdGJsLVxcdTAwM2VleHRfaG9zdF90YmxfbGVuZ3RoKSBcXHUwMDNjIHNpemVvZigqaG9zdF90YmwpIHx8XFxuK1xcdCAgICBsZTMyX3RvX2NwdShob3N0X3RibC1cXHUwMDNlZXh0X2hvc3RfdGJsX2xlbmd0aCkgXFx1MDAzZSBleHRfaG9zdF90YmxfbGVuKSB7XFxuK1xcdFxcdHJldCA9IC1FSU5WQUw7XFxuK1xcdFxcdGdvdG8gZXhpdDtcXG4rXFx0fVxcbitcXG4gXFx0bW04MXhfcmVsZWFzZV9idXMobW9ycyk7XFxuIFxcdCpleHRfaG9zdF90YWJsZSA9IGhvc3RfdGJsO1xcbiBcXHRyZXR1cm4gcmV0O1xcbkBAIC01NTksMzQgKzU3Nyw0NCBAQCBpbnQgbW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsKHN0cnVjdCBtbTgxeCAqbW9ycylcXG4gXFx0ZW5kID0gKCh1OCAqKWV4dF9ob3N0X3RhYmxlKSArXFxuIFxcdCAgICAgIGxlMzJfdG9fY3B1KGV4dF9ob3N0X3RhYmxlLVxcdTAwM2VleHRfaG9zdF90YmxfbGVuZ3RoKTtcXG4gXFxuLVxcdHdoaWxlIChoZWFkIFxcdTAwM2MgZW5kKSB7XFxuK1xcdHdoaWxlIChlbmQgLSBoZWFkIFxcdTAwM2U9IChwdHJkaWZmX3Qpc2l6ZW9mKHN0cnVjdCBleHRfaG9zdF90YmxfdGx2X2hkcikpIHtcXG4gXFx0XFx0c3RydWN0IGV4dF9ob3N0X3RibF90bHZfaGRyICpoZHIgPVxcbiBcXHRcXHRcXHQoc3RydWN0IGV4dF9ob3N0X3RibF90bHZfaGRyICopaGVhZDtcXG4rXFx0XFx0dTE2IHRsdl9sZW4gPSBsZTE2X3RvX2NwdShoZHItXFx1MDAzZWxlbmd0aCk7XFxuK1xcbitcXHRcXHRpZiAodGx2X2xlbiBcXHUwMDNjIHNpemVvZigqaGRyKSB8fCB0bHZfbGVuIFxcdTAwM2UgZW5kIC0gaGVhZClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuIFxcbiBcXHRcXHRzd2l0Y2ggKGxlMTZfdG9fY3B1KGhkci1cXHUwMDNldGFnKSkge1xcbi1cXHRcXHRjYXNlIE1NODFYX0ZXX0hPU1RfVEFCTEVfVEFHX1MxR19DQVBBQklMSVRJRVM6XFxuLVxcdFxcdFxcdG1tODF4X2Z3X3VwZGF0ZV9jYXBhYmlsaXRpZXMoXFxuLVxcdFxcdFxcdFxcdG1vcnMsIChzdHJ1Y3QgZXh0X2hvc3RfdGJsX3MxZ19jYXBzICopaGRyKTtcXG4rXFx0XFx0Y2FzZSBNTTgxWF9GV19IT1NUX1RBQkxFX1RBR19TMUdfQ0FQQUJJTElUSUVTOiB7XFxuK1xcdFxcdFxcdHN0cnVjdCBleHRfaG9zdF90YmxfczFnX2NhcHMgKmNhcHMgPSAodm9pZCAqKWhkcjtcXG4rXFxuK1xcdFxcdFxcdGlmICh0bHZfbGVuIFxcdTAwM2U9IHNpemVvZigqY2FwcykpXFxuK1xcdFxcdFxcdFxcdG1tODF4X2Z3X3VwZGF0ZV9jYXBhYmlsaXRpZXMobW9ycywgY2Fwcyk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdFxcdGNhc2UgTU04MVhfRldfSE9TVF9UQUJMRV9UQUdfSU5TRVJUX1NLQl9DSEVDS1NVTToge1xcbitcXHRcXHRcXHRzdHJ1Y3QgZXh0X2hvc3RfdGJsX2luc2VydF9za2JfY2hlY2tzdW0gKmNzdW0gPVxcbitcXHRcXHRcXHRcXHQodm9pZCAqKWhkcjtcXG4gXFxuLVxcdFxcdGNhc2UgTU04MVhfRldfSE9TVF9UQUJMRV9UQUdfSU5TRVJUX1NLQl9DSEVDS1NVTTpcXG4tXFx0XFx0XFx0bW04MXhfZndfdXBkYXRlX3ZhbGlkYXRlX3NrYl9jaGVja3N1bShcXG4tXFx0XFx0XFx0XFx0bW9ycyxcXG4tXFx0XFx0XFx0XFx0KHN0cnVjdCBleHRfaG9zdF90YmxfaW5zZXJ0X3NrYl9jaGVja3N1bSAqKWhkcik7XFxuK1xcdFxcdFxcdGlmICh0bHZfbGVuIFxcdTAwM2U9IHNpemVvZigqY3N1bSkpXFxuK1xcdFxcdFxcdFxcdG1tODF4X2Z3X3VwZGF0ZV92YWxpZGF0ZV9za2JfY2hlY2tzdW0obW9ycyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgY3N1bSk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdFxcdGNhc2UgTU04MVhfRldfSE9TVF9UQUJMRV9UQUdfWUFQU19UQUJMRToge1xcbitcXHRcXHRcXHRzdHJ1Y3QgZXh0X2hvc3RfdGJsX3lhcHNfdGFibGUgKnlhcHMgPSAodm9pZCAqKWhkcjtcXG4gXFxuLVxcdFxcdGNhc2UgTU04MVhfRldfSE9TVF9UQUJMRV9UQUdfWUFQU19UQUJMRTpcXG4tXFx0XFx0XFx0bW04MXhfeWFwc19od19yZWFkX3RhYmxlKFxcbi1cXHRcXHRcXHRcXHRtb3JzLCBcXHUwMDI2KChzdHJ1Y3QgZXh0X2hvc3RfdGJsX3lhcHNfdGFibGUgKiloZHIpXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgICAtXFx1MDAzZXlhcHNfdGFibGUpO1xcbitcXHRcXHRcXHRpZiAodGx2X2xlbiBcXHUwMDNlPSBzaXplb2YoKnlhcHMpKVxcbitcXHRcXHRcXHRcXHRtbTgxeF95YXBzX2h3X3JlYWRfdGFibGUobW9ycyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZ5YXBzLVxcdTAwM2V5YXBzX3RhYmxlKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4gXFx0XFx0ZGVmYXVsdDpcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGhlYWQgKz0gbGUxNl90b19jcHUoaGRyLVxcdTAwM2VsZW5ndGgpO1xcbi1cXHRcXHRpZiAoIWhkci1cXHUwMDNlbGVuZ3RoKVxcbi1cXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0aGVhZCArPSB0bHZfbGVuO1xcbiBcXHR9XFxuIFxcbiBcXHRrZnJlZShleHRfaG9zdF90YWJsZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA3OjA0OjQ3LjE4MzE1MjQ1NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjExNjIzMTYxMTg3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJXTEFOX1ZFTkRPUl9NT1JTRU1JQ1JPXCIsXG4gICAgXCJNTTgxWF9VU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtbTgxeF9md19pbml0XCIsXG4gICAgXCJtbTgxeF9md19wYXJzZV9leHRfaG9zdF90YmxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBtZW1vcnkgbGVha3MgaW4gdGhlIGZpcm13YXJlIHBhcnNpbmcgbG9naWMgb2YgdGhlIE1vcnNlIE1pY3JvIG1tODF4IGRyaXZlci4gVGhlIGRyaXZlciBjYW4gYmUgdGVzdGVkIHZpYSB0aGUgVVNCIGludGVyZmFjZSB1c2luZyBhIGR1bW15IEhDRCBvciBzeXprYWxsZXIncyBVU0IgZnV6emluZyBjYXBhYmlsaXRpZXMuIFRoZSBmaXJtd2FyZSBsb2FkaW5nIGFuZCBwYXJzaW5nIGxvZ2ljIGlzIHJlYWNoYWJsZSB3aGVuIHRoZSBkZXZpY2UgaXMgcHJvYmVkIGFuZCB0aGUgaW50ZXJmYWNlIGlzIGJyb3VnaHQgdXAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDAwNjYwNzA1ZWQ2ZmNhODczYTAyOWVlM2MyNTJmYzNmYjg4YTE1NGJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAwNzowNDo0MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuY1xuaW5kZXggZDZkMmFkMDg2YzMyOC4uNTBmYTllNGI1ZjgwMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jXG5AQCAtNTQsMjEgKzU0LDI5IEBAIHN0YXRpYyBpbnQgbW04MXhfZndfZ2V0X2hlYWRlcihjb25zdCB1OCAqZGF0YSwgRWxmMzJfRWhkciAqZWhkcilcbiBcbiBzdGF0aWMgdm9pZCBtbTgxeF9md19wYXJzZV9pbmZvKHN0cnVjdCBtbTgxeCAqbW9ycywgY29uc3QgdTggKmRhdGEsIGludCBsZW5ndGgpXG4ge1xuLVx0Y29uc3Qgc3RydWN0IG1tODF4X2Z3X2luZm9fdGx2ICp0bHYgPVxuLVx0XHQoY29uc3Qgc3RydWN0IG1tODF4X2Z3X2luZm9fdGx2ICopZGF0YTtcbitcdGNvbnN0IHU4ICplbmQgPSBkYXRhICsgbGVuZ3RoO1xuK1x0Y29uc3QgdTggKnBvcyA9IGRhdGE7XG4rXG4rXHR3aGlsZSAoZW5kIC0gcG9zIFx1MDAzZT0gKHB0cmRpZmZfdClzaXplb2Yoc3RydWN0IG1tODF4X2Z3X2luZm9fdGx2KSkge1xuK1x0XHRjb25zdCBzdHJ1Y3QgbW04MXhfZndfaW5mb190bHYgKnRsdiA9XG4rXHRcdFx0KGNvbnN0IHN0cnVjdCBtbTgxeF9md19pbmZvX3RsdiAqKXBvcztcbitcdFx0dTE2IHRsdl9sZW4gPSBsZTE2X3RvX2NwdSh0bHYtXHUwMDNlbGVuZ3RoKTtcbitcbitcdFx0cG9zID0gdGx2LVx1MDAzZXZhbDtcbitcdFx0aWYgKHRsdl9sZW4gXHUwMDNlIGVuZCAtIHBvcylcbitcdFx0XHRicmVhaztcbiBcbi1cdHdoaWxlICgodTggKil0bHYgXHUwMDNjIChkYXRhICsgbGVuZ3RoKSkge1xuIFx0XHRzd2l0Y2ggKGxlMTZfdG9fY3B1KHRsdi1cdTAwM2V0eXBlKSkge1xuIFx0XHRjYXNlIE1NODFYX0ZXX0lORk9fVExWX0JDRl9BRERSOlxuLVx0XHRcdG1vcnMtXHUwMDNlYmNmX2FkZHJlc3MgPSBnZXRfdW5hbGlnbmVkX2xlMzIodGx2LVx1MDAzZXZhbCk7XG4rXHRcdFx0aWYgKHRsdl9sZW4gXHUwMDNlPSBzaXplb2YoX19sZTMyKSlcbitcdFx0XHRcdG1vcnMtXHUwMDNlYmNmX2FkZHJlc3MgPVxuK1x0XHRcdFx0XHRnZXRfdW5hbGlnbmVkX2xlMzIodGx2LVx1MDAzZXZhbCk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbi1cdFx0dGx2ID0gKGNvbnN0IHN0cnVjdCBtbTgxeF9md19pbmZvX3RsdiAqKSgodTggKil0bHYgK1xuLVx0XHRcdFx0XHRcdFx0IGxlMTZfdG9fY3B1KFxuLVx0XHRcdFx0XHRcdFx0XHQgdGx2LVx1MDAzZWxlbmd0aCkgK1xuLVx0XHRcdFx0XHRcdFx0IHNpemVvZigqdGx2KSk7XG4rXG4rXHRcdHBvcyArPSB0bHZfbGVuO1xuIFx0fVxuIH1cbiBcbkBAIC0xMTcsMTMgKzEyNSwxNSBAQCBzdGF0aWMgaW50IG1tODF4X2Z3X2xvYWRfZncoc3RydWN0IG1tODF4ICptb3JzLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KVxuIFxuIFx0aWYgKG1tODF4X2Z3X2dldF9oZWFkZXIoZnctXHUwMDNlZGF0YSwgXHUwMDI2ZWhkcikpIHtcbiBcdFx0ZGV2X2Vycihtb3JzLVx1MDAzZWRldiwgXCJXcm9uZyBmaWxlIGZvcm1hdFwiKTtcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdHJldCA9IC1FSU5WQUw7XG4rXHRcdGdvdG8gb3V0X2ZyZWU7XG4gXHR9XG4gXG4gXHRpZiAobW04MXhfZndfZ2V0X3NlY3Rpb25faGVhZGVyKGZ3LVx1MDAzZWRhdGEsIFx1MDAyNmVoZHIsIFx1MDAyNnNoX3N0cnRhYixcbiBcdFx0XHRcdFx0ZWhkci5lX3Noc3RybmR4KSkge1xuIFx0XHRkZXZfZXJyKG1vcnMtXHUwMDNlZGV2LCBcIkludmFsaWQgZmlybXdhcmUuIE1pc3Npbmcgc3RyaW5nIHRhYmxlXCIpO1xuLVx0XHRyZXR1cm4gLUVOT0VOVDtcbitcdFx0cmV0ID0gLUVOT0VOVDtcbitcdFx0Z290byBvdXRfZnJlZTtcbiBcdH1cbiBcbiBcdHNoX3N0cnMgPSAoY29uc3QgY2hhciAqKWZ3LVx1MDAzZWRhdGEgKyBzaF9zdHJ0YWIuc2hfb2Zmc2V0O1xuQEAgLTE2MCw3ICsxNzAsNyBAQCBzdGF0aWMgaW50IG1tODF4X2Z3X2xvYWRfZncoc3RydWN0IG1tODF4ICptb3JzLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KVxuIFx0XHRcdG1tODF4X3JlbGVhc2VfYnVzKG1vcnMpO1xuIFx0XHRcdGlmIChzdGF0dXMpIHtcbiBcdFx0XHRcdHJldCA9IC1FSU87XG4tXHRcdFx0XHRicmVhaztcbitcdFx0XHRcdGdvdG8gb3V0X2ZyZWU7XG4gXHRcdFx0fVxuIFx0XHR9XG4gXHR9XG5AQCAtMTc5LDYgKzE4OSw3IEBAIHN0YXRpYyBpbnQgbW04MXhfZndfbG9hZF9mdyhzdHJ1Y3QgbW04MXggKm1vcnMsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpXG4gXHRpZiAoZWhkci5lX2VudHJ5KVxuIFx0XHRyZXQgPSBtbTgxeF9md19zZXRfYm9vdF9hZGRyKG1vcnMsIGVoZHIuZV9lbnRyeSk7XG4gXG4rb3V0X2ZyZWU6XG4gXHRkZXZtX2tmcmVlKG1vcnMtXHUwMDNlZGV2LCBmd19idWYpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtNDkyLDYgKzUwMywxMyBAQCBzdGF0aWMgaW50IG1tODF4X2Z3X3JlYWRfZXh0X2hvc3RfdGFibGUoc3RydWN0IG1tODF4ICptb3JzLFxuIFx0aWYgKHJldClcbiBcdFx0Z290byBleGl0O1xuIFxuK1x0LyogVGhlIHRhYmxlIGRlc2NyaWJlcyBpdHMgb3duIGxlbmd0aDsgaXQgbXVzdCBmaXQgd2hhdCB3YXMgcmVhZCAqL1xuK1x0aWYgKGxlMzJfdG9fY3B1KGhvc3RfdGJsLVx1MDAzZWV4dF9ob3N0X3RibF9sZW5ndGgpIFx1MDAzYyBzaXplb2YoKmhvc3RfdGJsKSB8fFxuK1x0ICAgIGxlMzJfdG9fY3B1KGhvc3RfdGJsLVx1MDAzZWV4dF9ob3N0X3RibF9sZW5ndGgpIFx1MDAzZSBleHRfaG9zdF90YmxfbGVuKSB7XG4rXHRcdHJldCA9IC1FSU5WQUw7XG4rXHRcdGdvdG8gZXhpdDtcbitcdH1cbitcbiBcdG1tODF4X3JlbGVhc2VfYnVzKG1vcnMpO1xuIFx0KmV4dF9ob3N0X3RhYmxlID0gaG9zdF90Ymw7XG4gXHRyZXR1cm4gcmV0O1xuQEAgLTU1OSwzNCArNTc3LDQ0IEBAIGludCBtbTgxeF9md19wYXJzZV9leHRfaG9zdF90Ymwoc3RydWN0IG1tODF4ICptb3JzKVxuIFx0ZW5kID0gKCh1OCAqKWV4dF9ob3N0X3RhYmxlKSArXG4gXHQgICAgICBsZTMyX3RvX2NwdShleHRfaG9zdF90YWJsZS1cdTAwM2VleHRfaG9zdF90YmxfbGVuZ3RoKTtcbiBcbi1cdHdoaWxlIChoZWFkIFx1MDAzYyBlbmQpIHtcbitcdHdoaWxlIChlbmQgLSBoZWFkIFx1MDAzZT0gKHB0cmRpZmZfdClzaXplb2Yoc3RydWN0IGV4dF9ob3N0X3RibF90bHZfaGRyKSkge1xuIFx0XHRzdHJ1Y3QgZXh0X2hvc3RfdGJsX3Rsdl9oZHIgKmhkciA9XG4gXHRcdFx0KHN0cnVjdCBleHRfaG9zdF90YmxfdGx2X2hkciAqKWhlYWQ7XG4rXHRcdHUxNiB0bHZfbGVuID0gbGUxNl90b19jcHUoaGRyLVx1MDAzZWxlbmd0aCk7XG4rXG4rXHRcdGlmICh0bHZfbGVuIFx1MDAzYyBzaXplb2YoKmhkcikgfHwgdGx2X2xlbiBcdTAwM2UgZW5kIC0gaGVhZClcbitcdFx0XHRicmVhaztcbiBcbiBcdFx0c3dpdGNoIChsZTE2X3RvX2NwdShoZHItXHUwMDNldGFnKSkge1xuLVx0XHRjYXNlIE1NODFYX0ZXX0hPU1RfVEFCTEVfVEFHX1MxR19DQVBBQklMSVRJRVM6XG4tXHRcdFx0bW04MXhfZndfdXBkYXRlX2NhcGFiaWxpdGllcyhcbi1cdFx0XHRcdG1vcnMsIChzdHJ1Y3QgZXh0X2hvc3RfdGJsX3MxZ19jYXBzICopaGRyKTtcbitcdFx0Y2FzZSBNTTgxWF9GV19IT1NUX1RBQkxFX1RBR19TMUdfQ0FQQUJJTElUSUVTOiB7XG4rXHRcdFx0c3RydWN0IGV4dF9ob3N0X3RibF9zMWdfY2FwcyAqY2FwcyA9ICh2b2lkICopaGRyO1xuK1xuK1x0XHRcdGlmICh0bHZfbGVuIFx1MDAzZT0gc2l6ZW9mKCpjYXBzKSlcbitcdFx0XHRcdG1tODF4X2Z3X3VwZGF0ZV9jYXBhYmlsaXRpZXMobW9ycywgY2Fwcyk7XG4gXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdFx0Y2FzZSBNTTgxWF9GV19IT1NUX1RBQkxFX1RBR19JTlNFUlRfU0tCX0NIRUNLU1VNOiB7XG4rXHRcdFx0c3RydWN0IGV4dF9ob3N0X3RibF9pbnNlcnRfc2tiX2NoZWNrc3VtICpjc3VtID1cbitcdFx0XHRcdCh2b2lkICopaGRyO1xuIFxuLVx0XHRjYXNlIE1NODFYX0ZXX0hPU1RfVEFCTEVfVEFHX0lOU0VSVF9TS0JfQ0hFQ0tTVU06XG4tXHRcdFx0bW04MXhfZndfdXBkYXRlX3ZhbGlkYXRlX3NrYl9jaGVja3N1bShcbi1cdFx0XHRcdG1vcnMsXG4tXHRcdFx0XHQoc3RydWN0IGV4dF9ob3N0X3RibF9pbnNlcnRfc2tiX2NoZWNrc3VtICopaGRyKTtcbitcdFx0XHRpZiAodGx2X2xlbiBcdTAwM2U9IHNpemVvZigqY3N1bSkpXG4rXHRcdFx0XHRtbTgxeF9md191cGRhdGVfdmFsaWRhdGVfc2tiX2NoZWNrc3VtKG1vcnMsXG4rXHRcdFx0XHRcdFx0XHRcdCAgICAgIGNzdW0pO1xuIFx0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHRcdGNhc2UgTU04MVhfRldfSE9TVF9UQUJMRV9UQUdfWUFQU19UQUJMRToge1xuK1x0XHRcdHN0cnVjdCBleHRfaG9zdF90YmxfeWFwc190YWJsZSAqeWFwcyA9ICh2b2lkICopaGRyO1xuIFxuLVx0XHRjYXNlIE1NODFYX0ZXX0hPU1RfVEFCTEVfVEFHX1lBUFNfVEFCTEU6XG4tXHRcdFx0bW04MXhfeWFwc19od19yZWFkX3RhYmxlKFxuLVx0XHRcdFx0bW9ycywgXHUwMDI2KChzdHJ1Y3QgZXh0X2hvc3RfdGJsX3lhcHNfdGFibGUgKiloZHIpXG4tXHRcdFx0XHRcdCAgICAgICAtXHUwMDNleWFwc190YWJsZSk7XG4rXHRcdFx0aWYgKHRsdl9sZW4gXHUwMDNlPSBzaXplb2YoKnlhcHMpKVxuK1x0XHRcdFx0bW04MXhfeWFwc19od19yZWFkX3RhYmxlKG1vcnMsXG4rXHRcdFx0XHRcdFx0XHQgXHUwMDI2eWFwcy1cdTAwM2V5YXBzX3RhYmxlKTtcbiBcdFx0XHRicmVhaztcbitcdFx0fVxuIFx0XHRkZWZhdWx0OlxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG4tXHRcdGhlYWQgKz0gbGUxNl90b19jcHUoaGRyLVx1MDAzZWxlbmd0aCk7XG4tXHRcdGlmICghaGRyLVx1MDAzZWxlbmd0aClcbi1cdFx0XHRicmVhaztcbitcdFx0aGVhZCArPSB0bHZfbGVuO1xuIFx0fVxuIFxuIFx0a2ZyZWUoZXh0X2hvc3RfdGFibGUpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDc6MDQ6NDcuMTgzMTU1MzQ1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkxNzE1MjgyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBXaUZpIERyaXZlciBQYXRjaCBmb3IgVnVsbmVyYWJpbGl0aWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRhcmdldHMgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuY2AuIFRoZSBkZXNjcmlwdGlvbiBtZW50aW9ucyBhIGZpeCBmb3Igb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgbWVtb3J5IGxlYWtzLCB3aGljaCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl0IHNvdW5kcyBsaWtlIHNvbWVvbmUgaGFzIGJlZW4gZGlnZ2luZyBpbnRvIHRoZSBmaXJtd2FyZSBwYXJzaW5nIGxvZ2ljIGZvciB0aGUgTU04MXggY2hpcHNldCBhbmQgZm91bmQgc29tZSBuYXN0aWVzLiBTcGVjaWZpY2FsbHksIHRoZXkndmUgYWRkZWQgbGVuZ3RoIGNoZWNrcyBpbiBgbW04MXhfZndfcGFyc2VfaW5mb2AsIGBtbTgxeF9md19yZWFkX2V4dF9ob3N0X3RhYmxlYCwgYW5kIGBtbTgxeF9md19wYXJzZV9leHRfaG9zdF90YmxgIOKAkyBnb29kLCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcsIGV4YWN0bHkgd2hhdCdzIG5lZWRlZCB3aGVuIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSB1bnRydXN0ZWQgZmlybXdhcmUgZGF0YSBzdHJ1Y3R1cmVzLiBUaGV5J3ZlIGFsc28gY2xlYW5lZCB1cCBhIG1lbW9yeSBsZWFrIGluIGBtbTgxeF9md19sb2FkX2Z3YCBieSBjb3JyZWN0bHkgaGFuZGxpbmcgdGhlIGNsZWFudXAgcGF0aC4gU21hcnQgdXNlIG9mIGBnb3RvIG91dF9mcmVlYCB0aGVyZSwgbXVjaCBjbGVhbmVyIHRoYW4gYSBkaXJlY3QgcmV0dXJuLlxuXG5NeSBpbW1lZGlhdGUgZm9sbG93LXVwIHRob3VnaHQgaXMgYWJvdXQgdGhlIGF0dGFjayBzdXJmYWNlLiBJcyB0aGlzIGRyaXZlciBldmVuIHJlYWNoYWJsZSBpbiBhIHR5cGljYWwgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IFRoZSBkcml2ZXIgaXRzZWxmIGlzLCBhcyB0aGUgY29kZSByZXZlYWxzLCBgbW04MXhgIGZyb20gTW9yc2UgTWljcm8uIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgbGlrZWxpaG9vZCBvZiBleHBsb2l0YXRpb24uIEknbGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyB0byBzZWUgaWYgdGhlIGRyaXZlciBpcyBjb21tb25seSBlbmFibGVkIGluIGNvbmZpZ3VyYXRpb25zIHJlbGV2YW50IHRvIHZpcnR1YWxpemF0aW9uLCBjb250YWluZXJzLCBvciBlbWJlZGRlZCBzeXN0ZW1zIHdoZXJlIHRoaXMga2luZCBvZiB2dWxuZXJhYmlsaXR5IHdvdWxkIGJlIG1vc3QgaW1wYWN0ZnVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODY5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDc6MDQ6NTIuMTAwMzEzNTI1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4MzQ4NjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1tODF4XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNDg0NiBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9LY29uZmlnPTEzPWlmIFdMQU5fVkVORE9SX01PUlNFTUlDUk9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL0tjb25maWc6MTQ6c291cmNlIFxcXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L0tjb25maWdcXFwiXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9LY29uZmlnLTE1LWVuZGlmICMgV0xBTl9WRU5ET1JfTU9SU0VNSUNST1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX01NODFYKSArPSBtbTgxeC9cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvTWFrZWZpbGUtMi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX01NODFYKSArPSBtbTgxeF9jb3JlLm9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L01ha2VmaWxlLTQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9NYWtlZmlsZTo1Om1tODF4X2NvcmUteSArPSBjb3JlLm9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L01ha2VmaWxlOjY6bW04MXhfY29yZS15ICs9IG1hYy5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9NYWtlZmlsZTo3Om1tODF4X2NvcmUteSArPSBody5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9NYWtlZmlsZTo4Om1tODF4X2NvcmUteSArPSBmdy5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9NYWtlZmlsZTo5Om1tODF4X2NvcmUteSArPSBjb21tYW5kLm9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L01ha2VmaWxlOjEwOm1tODF4X2NvcmUteSArPSBwcy5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9NYWtlZmlsZToxMTptbTgxeF9jb3JlLXkgKz0gc2ticS5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9NYWtlZmlsZToxMjptbTgxeF9jb3JlLXkgKz0geWFwc19ody5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9NYWtlZmlsZToxMzptbTgxeF9jb3JlLXkgKz0geWFwcy5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9NYWtlZmlsZToxNDptbTgxeF9jb3JlLXkgKz0gcmMub1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvTWFrZWZpbGU6MTU6bW04MXhfY29yZS15ICs9IG1tcmMub1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvTWFrZWZpbGUtMTYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfTU04MVhfVVNCKSArPSBtbTgxeF91c2Iub1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvTWFrZWZpbGU6MTg6bW04MXhfdXNiLXkgKz0gdXNiLm9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L01ha2VmaWxlLTE5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX01NODFYX1NESU8pICs9IG1tODF4X3NkaW8ub1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvTWFrZWZpbGU6MjE6bW04MXhfc2Rpby15ICs9IHNkaW8ub1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaC0xMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oOjEyOmVudW0gbW04MXhfYnVzX3R5cGUge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmgtMTMtXFx0TU04MVhfQlVTX1RZUEVfVVNCLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaC0xNi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oOjE3OnN0cnVjdCBtbTgxeF9idXNfb3BzIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oOjE4OlxcdGludCAoKmRtX3JlYWQpKHN0cnVjdCBtbTgxeCAqbW9ycywgdTMyIGFkZHIsIHU4ICpkYXRhLCBpbnQgbGVuKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oOjE5OlxcdGludCAoKmRtX3dyaXRlKShzdHJ1Y3QgbW04MXggKm1vcnMsIHUzMiBhZGRyLCBjb25zdCB1OCAqZGF0YSwgaW50IGxlbik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaDoyMDpcXHRpbnQgKCpyZWczMl9yZWFkKShzdHJ1Y3QgbW04MXggKm1vcnMsIHUzMiBhZGRyLCB1MzIgKmRhdGEpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmg6MjE6XFx0aW50ICgqcmVnMzJfd3JpdGUpKHN0cnVjdCBtbTgxeCAqbW9ycywgdTMyIGFkZHIsIHUzMiBkYXRhKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oOjIyOlxcdGludCAoKmRpZ2l0YWxfcmVzZXQpKHN0cnVjdCBtbTgxeCAqbW9ycyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaDoyMzpcXHR2b2lkICgqc2V0X2J1c19lbmFibGUpKHN0cnVjdCBtbTgxeCAqbW9ycywgYm9vbCBlbmFibGUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmg6MjQ6XFx0dm9pZCAoKmNvbmZpZ19idXJzdF9tb2RlKShzdHJ1Y3QgbW04MXggKm1vcnMsIGJvb2wgZW5hYmxlX2J1cnN0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oOjI1OlxcdHZvaWQgKCpjbGFpbSkoc3RydWN0IG1tODF4ICptb3JzKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oOjI2OlxcdHZvaWQgKCpzZXRfaXJxKShzdHJ1Y3QgbW04MXggKm1vcnMsIGJvb2wgZW5hYmxlKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oOjI3OlxcdHZvaWQgKCpyZWxlYXNlKShzdHJ1Y3QgbW04MXggKm1vcnMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmgtMjgtXFx0dW5zaWduZWQgaW50IGJ1bGtfYWxpZ25tZW50O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaC0zNi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oOjM3Oi8qIG1tODF4X2RtX3JlYWQgLSBsZW4gbXVzdCBiZSByb3VuZGVkIHVwIHRvIHRoZSBuZWFyZXN0IDQtYnl0ZSBib3VuZGFyeSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmg6Mzg6c3RhdGljIGlubGluZSBpbnQgbW04MXhfZG1fcmVhZChzdHJ1Y3QgbW04MXggKm1vcnMsIHUzMiBhZGRyLCB1OCAqZGF0YSwgaW50IGxlbilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oLTM5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmgtNDItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaDo0MzpzdGF0aWMgaW5saW5lIGludCBtbTgxeF9kbV93cml0ZShzdHJ1Y3QgbW04MXggKm1vcnMsIHUzMiBhZGRyLCBjb25zdCB1OCAqZGF0YSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oLTQ0LVxcdFxcdFxcdFxcdCBpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaC00OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oOjQ5OnN0YXRpYyBpbmxpbmUgaW50IG1tODF4X3JlZzMyX3JlYWQoc3RydWN0IG1tODF4ICptb3JzLCB1MzIgYWRkciwgdTMyICpkYXRhKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmgtNTAte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaC01My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oOjU0OnN0YXRpYyBpbmxpbmUgaW50IG1tODF4X3JlZzMyX3dyaXRlKHN0cnVjdCBtbTgxeCAqbW9ycywgdTMyIGFkZHIsIHUzMiBkYXRhKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmgtNTUte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaC01OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oOjU5OnN0YXRpYyBpbmxpbmUgaW50IG1tODF4X2J1c19kaWdpdGFsX3Jlc2V0KHN0cnVjdCBtbTgxeCAqbW9ycylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oLTYwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmgtNjYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaDo2NzpzdGF0aWMgaW5saW5lIHZvaWQgbW04MXhfc2V0X2J1c19lbmFibGUoc3RydWN0IG1tODF4ICptb3JzLCBib29sIGVuYWJsZSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oLTY4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmgtNzEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaDo3MjpzdGF0aWMgaW5saW5lIHZvaWQgbW04MXhfYnVzX2NvbmZpZ19idXJzdF9tb2RlKHN0cnVjdCBtbTgxeCAqbW9ycyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oLTczLVxcdFxcdFxcdFxcdFxcdCAgICAgICBib29sIGVuYWJsZV9idXJzdClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmgtNzgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaDo3OTpzdGF0aWMgaW5saW5lIHZvaWQgbW04MXhfY2xhaW1fYnVzKHN0cnVjdCBtbTgxeCAqbW9ycylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oLTgwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmgtODMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaDo4NDpzdGF0aWMgaW5saW5lIHZvaWQgbW04MXhfYnVzX3NldF9pcnEoc3RydWN0IG1tODF4ICptb3JzLCBib29sIGVuYWJsZSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oLTg1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmgtODgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaDo4OTpzdGF0aWMgaW5saW5lIHZvaWQgbW04MXhfcmVsZWFzZV9idXMoc3RydWN0IG1tODF4ICptb3JzKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmgtOTAte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaC05My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oOjk0OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG1tODF4X2J1c19nZXRfYWxpZ25tZW50KHN0cnVjdCBtbTgxeCAqbW9ycylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oLTk1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jPTI3PXN0cnVjdCBob3N0X2NtZF9yZXNwX2NiIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTMyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjMzOnN0YXRpYyBpbnQgbW04MXhfY21kX3R4KHN0cnVjdCBtbTgxeCAqbW9ycywgc3RydWN0IGhvc3RfY21kX3Jlc3AgKnJlc3AsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMzQtXFx0XFx0XFx0c3RydWN0IGhvc3RfY21kX3JlcSAqcmVxLCB1MzIgbGVuZ3RoLCB1MzIgdGltZW91dClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTQxLVxcdHN0cnVjdCBza19idWZmICpza2I7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6NDI6XFx0c3RydWN0IG1tODF4X3NrYnEgKmNtZF9xID0gbW04MXhfaGlmX2dldF90eF9jbWRfcXVldWUobW9ycyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNDMtXFx0c3RydWN0IGhvc3RfY21kX3Jlc3BfY2IgKnJlc3BfY2I7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy01Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzo1ODpcXHRtbTgxeF9wc19kaXNhYmxlKG1vcnMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTU5LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNjItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6NjM6XFx0XFx0c2tiID0gbW04MXhfc2ticV9hbGxvY19za2IoY21kX3EsIGNtZF9sZW4pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTY0LVxcdFxcdGlmICghc2tiKSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy04My1cXHRcXHR0aW1lb3V0ID0gdGltZW91dCA/IHRpbWVvdXQgOiBIT1NUX0NNRF9ERUZBVUxUX1RJTUVPVVRfTVM7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6ODQ6XFx0XFx0cmV0ID0gbW04MXhfc2ticV9za2JfdHgoY21kX3EsIFxcdTAwMjZza2IsIE5VTEwsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtODUtXFx0XFx0XFx0XFx0XFx0TU04MVhfU0tCX0NIQU5fQ09NTUFORCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy04OC1cXHRcXHRpZiAocmV0KSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6ODk6XFx0XFx0XFx0ZGV2X2Vycihtb3JzLVxcdTAwM2VkZXYsIFxcXCJtbTgxeF9za2JxX3R4IGZhaWw6ICVkXFxcIiwgcmV0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy05MC1cXHRcXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTEyMS1cXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmNtZF9xLVxcdTAwM2Vsb2NrKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzoxMjI6XFx0XFx0bW04MXhfc2ticV9za2JfZmluaXNoKGNtZF9xLCBza2IsIE5VTEwpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTEyMy1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Y21kX3EtXFx1MDAzZWxvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMTI4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjEyOTpcXHRtbTgxeF9wc19lbmFibGUobW9ycyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMTMwLVxcdG11dGV4X3VubG9jayhcXHUwMDI2bW9ycy1cXHUwMDNlY21kX3dhaXQpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMTQ1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjE0NjppbnQgbW04MXhfY21kX3Jlc3BfcHJvY2VzcyhzdHJ1Y3QgbW04MXggKm1vcnMsIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMTQ3LXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0xNDgtXFx0aW50IGxlbmd0aCwgcmV0ID0gLUVTUkNIOyAvKiBObyBzdWNoIHByb2Nlc3MgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzoxNDk6XFx0c3RydWN0IG1tODF4X3NrYnEgKmNtZF9xID0gbW04MXhfaGlmX2dldF90eF9jbWRfcXVldWUobW9ycyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMTUwLVxcdHN0cnVjdCBob3N0X2NtZF9yZXNwICpzcmNfcmVzcCA9IChzdHJ1Y3QgaG9zdF9jbWRfcmVzcCAqKShza2ItXFx1MDAzZWRhdGEpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMTYzLVxcdGlmICghSE9TVF9DTURfSVNfUkVTUChzcmNfcmVzcCkpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzoxNjQ6XFx0XFx0cmV0ID0gbW04MXhfbWFjX2V2ZW50X3JlY3YobW9ycywgc2tiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0xNjUtXFx0XFx0Z290byBleGl0X2ZyZWU7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0xNjktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6MTcwOlxcdGNtZF9za2IgPSBtbTgxeF9za2JxX3R4X3BlbmRpbmcoY21kX3EpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTE3MS1cXHRpZiAoY21kX3NrYikge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjE3MjpcXHRcXHRtbTgxeF9za2JxX3B1bGxfaGRyX3Bvc3RfdHgoY21kX3NrYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMTczLVxcdFxcdHJlcSA9IChzdHJ1Y3QgaG9zdF9jbWRfcmVxICopY21kX3NrYi1cXHUwMDNlZGF0YTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTIzMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzoyMzI6aW50IG1tODF4X2NtZF9zdGFfc3RhdGUoc3RydWN0IG1tODF4ICptb3JzLCBzdHJ1Y3QgbW04MXhfdmlmICptb3JzX3ZpZiwgdTE2IGFpZCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0yMzMtXFx0XFx0XFx0c3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTI0NS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzoyNDY6XFx0cmV0dXJuIG1tODF4X2NtZF90eChtb3JzLCBOVUxMLCAoc3RydWN0IGhvc3RfY21kX3JlcSAqKVxcdTAwMjZyZXEsIDAsIDApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTI0Ny19XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMjQ4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjI0OTppbnQgbW04MXhfY21kX2FkZF9pZihzdHJ1Y3QgbW04MXggKm1vcnMsIHUxNiAqdmlmX2lkLCBjb25zdCB1OCAqYWRkcixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0yNTAtXFx0XFx0ICAgICBlbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGUpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0yNzAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6MjcxOlxcdHJldCA9IG1tODF4X2NtZF90eChtb3JzLCAoc3RydWN0IGhvc3RfY21kX3Jlc3AgKilcXHUwMDI2cmVzcCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0yNzItXFx0XFx0XFx0ICAgKHN0cnVjdCBob3N0X2NtZF9yZXEgKilcXHUwMDI2cmVxLCBzaXplb2YocmVzcCksIDApO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMjc4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjI3OTppbnQgbW04MXhfY21kX2dldF9jYXBhYmlsaXRpZXMoc3RydWN0IG1tODF4ICptb3JzLCB1MTYgdmlmX2lkLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjI4MDpcXHRcXHRcXHQgICAgICAgc3RydWN0IG1tODF4X2Z3X2NhcHMgKmNhcGFiaWxpdGllcylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0yODEte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMjg4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjI4OTpcXHRyZXQgPSBtbTgxeF9jbWRfdHgobW9ycywgKHN0cnVjdCBob3N0X2NtZF9yZXNwICopXFx1MDAyNnJzcCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0yOTAtXFx0XFx0XFx0ICAgKHN0cnVjdCBob3N0X2NtZF9yZXEgKilcXHUwMDI2cmVxLCBzaXplb2YocnNwKSwgMCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0yOTQtXFx0Y2FwYWJpbGl0aWVzLVxcdTAwM2VhbXBkdV9tc3MgPSByc3AuY2FwYWJpbGl0aWVzLmFtcGR1X21zcztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzoyOTU6XFx0Y2FwYWJpbGl0aWVzLVxcdTAwM2VtbTgxeF9tbXNzX29mZnNldCA9IHJzcC5tb3JzZV9tbXNzX29mZnNldDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0yOTYtXFx0Y2FwYWJpbGl0aWVzLVxcdTAwM2ViZWFtZm9ybWVlX3N0c19jYXBhYmlsaXR5ID1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTMwNy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzozMDg6aW50IG1tODF4X2NtZF9nZXRfbWF4X3R4cG93ZXIoc3RydWN0IG1tODF4ICptb3JzLCBzMzIgKm91dF9wb3dlcl9tYm0pXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMzA5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTMxNS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzozMTY6XFx0cmV0ID0gbW04MXhfY21kX3R4KG1vcnMsIChzdHJ1Y3QgaG9zdF9jbWRfcmVzcCAqKVxcdTAwMjZyZXNwLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTMxNy1cXHRcXHRcXHQgICAoc3RydWN0IGhvc3RfY21kX3JlcSAqKVxcdTAwMjZyZXEsIHNpemVvZihyZXNwKSwgMCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0zMjMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6MzI0OmludCBtbTgxeF9jbWRfaHdfc2NhbihzdHJ1Y3QgbW04MXggKm1vcnMsIHN0cnVjdCBtbTgxeF9od19zY2FuX3BhcmFtcyAqcGFyYW1zLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTMyNS1cXHRcXHQgICAgICBib29sIHN0b3JlKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMzMyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjMzMzpcXHRjbWRfc2l6ZSA9IG1tODF4X2h3X3NjYW5faF9nZXRfY21kX3NpemUocGFyYW1zKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0zMzQtXFx0Y21kX3NpemUgPSBST1VORF9CWVRFU19UT19XT1JEKGNtZF9zaXplKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTM1Mi1cXHRcXHRyZXEtXFx1MDAzZWR3ZWxsX3RpbWVfbXMgPSBjcHVfdG9fbGUzMihwYXJhbXMtXFx1MDAzZWR3ZWxsX3RpbWVfbXMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjM1MzpcXHRcXHRidWYgPSBtbTgxeF9od19zY2FuX2hfaW5zZXJ0X3RsdnMocGFyYW1zLCBidWYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTM1NC1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0zNTgtXFx0cmVxLVxcdTAwM2VoZHIubGVuID0gY3B1X3RvX2xlMTYoKHUxNikoKGJ1ZiAtICh1OCAqKXJlcSkgLSBzaXplb2YocmVxLVxcdTAwM2VoZHIpKSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6MzU5OlxcdHJldCA9IG1tODF4X2NtZF90eChtb3JzLCBOVUxMLCAoc3RydWN0IGhvc3RfY21kX3JlcSAqKXJlcSwgMCwgMCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMzYwLVxcdGtmcmVlKHJlcSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0zNjQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6MzY1OmludCBtbTgxeF9jbWRfc2V0X3R4cG93ZXIoc3RydWN0IG1tODF4ICptb3JzLCBzMzIgKm91dF9wb3dlcl9tYm0sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMzY2LVxcdFxcdFxcdCAgaW50IHR4cG93ZXJfbWJtKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMzc0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjM3NTpcXHRyZXQgPSBtbTgxeF9jbWRfdHgobW9ycywgKHN0cnVjdCBob3N0X2NtZF9yZXNwICopXFx1MDAyNnJlc3AsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMzc2LVxcdFxcdFxcdCAgIChzdHJ1Y3QgaG9zdF9jbWRfcmVxICopXFx1MDAyNnJlcSwgc2l6ZW9mKHJlc3ApLCAwKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTM4Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzozODM6aW50IG1tODF4X2NtZF9zZXRfY2hhbm5lbChzdHJ1Y3QgbW04MXggKm1vcnMsIHUzMiBvcF9jaGFuX2ZyZXFfaHosXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMzg0LVxcdFxcdFxcdCAgdTggcHJpXzFtaHpfY2hhbl9pZHgsIHU4IG9wX2J3X21oeiwgdTggcHJpX2J3X21oeixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTM5Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzozOTg6XFx0cmV0ID0gbW04MXhfY21kX3R4KG1vcnMsIChzdHJ1Y3QgaG9zdF9jbWRfcmVzcCAqKVxcdTAwMjZyZXNwLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTM5OS1cXHRcXHRcXHQgICAoc3RydWN0IGhvc3RfY21kX3JlcSAqKVxcdTAwMjZyZXEsIHNpemVvZihyZXNwKSwgMCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy00MDUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6NDA2OmludCBtbTgxeF9jbWRfZGlzYWJsZV9rZXkoc3RydWN0IG1tODF4ICptb3JzLCBzdHJ1Y3QgbW04MXhfdmlmICptb3JzX3ZpZixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy00MDctXFx0XFx0XFx0ICB1MTYgYWlkLCBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy00MTgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6NDE5OlxcdHJldHVybiBtbTgxeF9jbWRfdHgobW9ycywgTlVMTCwgKHN0cnVjdCBob3N0X2NtZF9yZXEgKilcXHUwMDI2cmVxLCAwLCAwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy00MjAtfVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTQyMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzo0MjI6aW50IG1tODF4X2NtZF9pbnN0YWxsX2tleShzdHJ1Y3QgbW04MXggKm1vcnMsIHN0cnVjdCBtbTgxeF92aWYgKm1vcnNfdmlmLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTQyMy1cXHRcXHRcXHQgIHUxNiBhaWQsIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTQ0NS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzo0NDY6XFx0cmV0ID0gbW04MXhfY21kX3R4KG1vcnMsIChzdHJ1Y3QgaG9zdF9jbWRfcmVzcCAqKVxcdTAwMjZyZXNwLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTQ0Ny1cXHRcXHRcXHQgICAoc3RydWN0IGhvc3RfY21kX3JlcSAqKVxcdTAwMjZyZXEsIHNpemVvZihyZXNwKSwgMCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy00NTYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6NDU3OmludCBtbTgxeF9jbWRfY2ZnX211bHRpY2FzdF9maWx0ZXIoc3RydWN0IG1tODF4ICptb3JzLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjQ1ODpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbW04MXhfdmlmICptb3JzX3ZpZilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy00NTkte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNDc0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjQ3NTpcXHRyZXQgPSBtbTgxeF9jbWRfdHgobW9ycywgTlVMTCwgKHN0cnVjdCBob3N0X2NtZF9yZXEgKilyZXEsIDAsIDApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTQ3Ni1cXHRrZnJlZShyZXEpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNDc5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjQ4MDppbnQgbW04MXhfY21kX2NmZ19ic3Moc3RydWN0IG1tODF4ICptb3JzLCB1MTYgdmlmX2lkLCB1MTYgYmVhY29uX2ludCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy00ODEtXFx0XFx0ICAgICAgdTE2IGR0aW1fcGVyaW9kLCB1MzIgY3NzaWQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy00ODktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6NDkwOlxcdHJldHVybiBtbTgxeF9jbWRfdHgobW9ycywgTlVMTCwgKHN0cnVjdCBob3N0X2NtZF9yZXEgKilcXHUwMDI2cmVxLCAwLCAwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy00OTEtfVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTQ5Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzo0OTM6aW50IG1tODF4X2NtZF9jb25maWdfYmVhY29uX3RpbWVyKHN0cnVjdCBtbTgxeCAqbW9ycywgdm9pZCAqbW04MXhfdmlmLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTQ5NC1cXHRcXHRcXHRcXHQgIGJvb2wgZW5hYmxlZClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy00OTUte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjQ5NjpcXHRzdHJ1Y3QgbW04MXhfdmlmICp2aWYgPSBtbTgxeF92aWY7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNDk3LVxcdHN0cnVjdCBob3N0X2NtZF9yZXFfYnNzX2JlYWNvbl9jb25maWcgcmVxID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNTAyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjUwMzpcXHRyZXR1cm4gbW04MXhfY21kX3R4KG1vcnMsIE5VTEwsIChzdHJ1Y3QgaG9zdF9jbWRfcmVxICopXFx1MDAyNnJlcSwgMCwgMCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNTA0LX1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy01MDUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6NTA2OmludCBtbTgxeF9jbWRfc2V0X3BzKHN0cnVjdCBtbTgxeCAqbW9ycywgYm9vbCBlbmFibGVkKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTUwNy17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy01MTItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6NTEzOlxcdHJldHVybiBtbTgxeF9jbWRfdHgobW9ycywgTlVMTCwgKHN0cnVjdCBob3N0X2NtZF9yZXEgKilcXHUwMDI2cmVxLCAwLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTUxNC1cXHRcXHRcXHQgICAgSE9TVF9DTURfUE9XRVJTQVZFX1RJTUVPVVRfTVMpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNTE2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjUxNzppbnQgbW04MXhfY21kX2NmZ19xb3Moc3RydWN0IG1tODF4ICptb3JzLCBzdHJ1Y3QgbW04MXhfcXVldWVfcGFyYW1zICpwYXJhbXMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNTE4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTUyOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzo1Mjk6XFx0cmV0dXJuIG1tODF4X2NtZF90eChtb3JzLCBOVUxMLCAoc3RydWN0IGhvc3RfY21kX3JlcSAqKVxcdTAwMjZyZXEsIDAsIDApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTUzMC19XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNTMxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjUzMjppbnQgbW04MXhfY21kX3JtX2lmKHN0cnVjdCBtbTgxeCAqbW9ycywgdTE2IHZpZl9pZClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy01MzMte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNTM3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjUzODpcXHRyZXR1cm4gbW04MXhfY21kX3R4KG1vcnMsIE5VTEwsIChzdHJ1Y3QgaG9zdF9jbWRfcmVxICopXFx1MDAyNnJlcSwgMCwgMCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNTM5LX1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy01NDAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6NTQxOmludCBtbTgxeF9jbWRfc2V0X2ZyYWdfdGhyZXNob2xkKHN0cnVjdCBtbTgxeCAqbW9ycywgdTMyIGZyYWdfdGhyZXNob2xkKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTU0Mi17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy01NDktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6NTUwOlxcdHJldHVybiBtbTgxeF9jbWRfdHgobW9ycywgTlVMTCwgKHN0cnVjdCBob3N0X2NtZF9yZXEgKilcXHUwMDI2cmVxLCAwLCAwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy01NTEtfVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTU1Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzo1NTM6aW50IG1tODF4X2NtZF9nZXRfZGlzYWJsZWRfY2hhbm5lbHMoXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6NTU0OlxcdHN0cnVjdCBtbTgxeCAqbW9ycywgc3RydWN0IGhvc3RfY21kX3Jlc3BfZ2V0X2Rpc2FibGVkX2NoYW5uZWxzICpyZXNwLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTU1NS1cXHR1aW50IHJlc3BfbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNTYwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjU2MTpcXHRyZXR1cm4gbW04MXhfY21kX3R4KG1vcnMsIChzdHJ1Y3QgaG9zdF9jbWRfcmVzcCAqKXJlc3AsIFxcdTAwMjZyZXEsIHJlc3BfbGVuLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTU2Mi1cXHRcXHRcXHQgICAgMCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaC0xOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaDoxOTpzdHJ1Y3QgbW04MXhfcXVldWVfcGFyYW1zO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oLTIwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oOjIxOmVudW0gbW04MXhfY21kX3JldHVybl9jb2RlIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaC0yMi1cXHRNTTgxWF9SRVRfU1VDQ0VTUyA9IDAsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaD00ND1zdHJ1Y3QgaG9zdF9jbWRfZXZlbnQge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmgtNDgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmg6NDk6aW50IG1tODF4X2NtZF9yZXNwX3Byb2Nlc3Moc3RydWN0IG1tODF4ICptb3JzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaDo1MDppbnQgbW04MXhfY21kX2FkZF9pZihzdHJ1Y3QgbW04MXggKm1vcnMsIHUxNiAqdmlmX2lkLCBjb25zdCB1OCAqYWRkcixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaC01MS1cXHRcXHQgICAgIGVudW0gbmw4MDIxMV9pZnR5cGUgdHlwZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmg6NTI6aW50IG1tODF4X2NtZF9nZXRfY2FwYWJpbGl0aWVzKHN0cnVjdCBtbTgxeCAqbW9ycywgdTE2IHZpZl9pZCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaDo1MzpcXHRcXHRcXHQgICAgICAgc3RydWN0IG1tODF4X2Z3X2NhcHMgKmNhcGFiaWxpdGllcyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmg6NTQ6aW50IG1tODF4X2NtZF9jZmdfcW9zKHN0cnVjdCBtbTgxeCAqbW9ycywgc3RydWN0IG1tODF4X3F1ZXVlX3BhcmFtcyAqcGFyYW1zKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaDo1NTppbnQgbW04MXhfY21kX2NvbmZpZ19iZWFjb25fdGltZXIoc3RydWN0IG1tODF4ICptb3JzLCB2b2lkICptbTgxeF92aWYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmgtNTYtXFx0XFx0XFx0XFx0ICBib29sIGVuYWJsZWQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oOjU3OmludCBtbTgxeF9jbWRfY2ZnX2JzcyhzdHJ1Y3QgbW04MXggKm1vcnMsIHUxNiB2aWZfaWQsIHUxNiBiZWFjb25faW50LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oLTU4LVxcdFxcdCAgICAgIHUxNiBkdGltX3BlcmlvZCwgdTMyIGNzc2lkKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaDo1OTppbnQgbW04MXhfY21kX3NldF9jaGFubmVsKHN0cnVjdCBtbTgxeCAqbW9ycywgdTMyIG9wX2NoYW5fZnJlcV9oeixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaC02MC1cXHRcXHRcXHQgIHU4IHByaV8xbWh6X2NoYW5faWR4LCB1OCBvcF9id19taHosIHU4IHByaV9id19taHosXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmgtNjEtXFx0XFx0XFx0ICBzMzIgKnBvd2VyX21ibSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmg6NjI6aW50IG1tODF4X2NtZF9nZXRfbWF4X3R4cG93ZXIoc3RydWN0IG1tODF4ICptb3JzLCBzMzIgKm91dF9wb3dlcl9tYm0pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oOjYzOmludCBtbTgxeF9jbWRfc2V0X3R4cG93ZXIoc3RydWN0IG1tODF4ICptb3JzLCBzMzIgKm91dF9wb3dlcl9tYm0sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmgtNjQtXFx0XFx0XFx0ICBpbnQgdHhwb3dlcl9tYm0pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oOjY1OmludCBtbTgxeF9jbWRfaHdfc2NhbihzdHJ1Y3QgbW04MXggKm1vcnMsIHN0cnVjdCBtbTgxeF9od19zY2FuX3BhcmFtcyAqcGFyYW1zLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oLTY2LVxcdFxcdCAgICAgIGJvb2wgc3RvcmUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oOjY3OmludCBtbTgxeF9jbWRfc2V0X3BzKHN0cnVjdCBtbTgxeCAqbW9ycywgYm9vbCBlbmFibGVkKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaDo2ODppbnQgbW04MXhfY21kX2NmZ19tdWx0aWNhc3RfZmlsdGVyKHN0cnVjdCBtbTgxeCAqbW9ycyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaDo2OTpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbW04MXhfdmlmICptb3JzX3ZpZik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmg6NzA6aW50IG1tODF4X2NtZF9zdGFfc3RhdGUoc3RydWN0IG1tODF4ICptb3JzLCBzdHJ1Y3QgbW04MXhfdmlmICptb3JzX3ZpZiwgdTE2IGFpZCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaC03MS1cXHRcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oLTcyLVxcdFxcdFxcdGVudW0gaWVlZTgwMjExX3N0YV9zdGF0ZSBzdGF0ZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmg6NzM6aW50IG1tODF4X2NtZF9pbnN0YWxsX2tleShzdHJ1Y3QgbW04MXggKm1vcnMsIHN0cnVjdCBtbTgxeF92aWYgKm1vcnNfdmlmLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oLTc0LVxcdFxcdFxcdCAgdTE2IGFpZCwgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmgtNzYtXFx0XFx0XFx0ICBlbnVtIGhvc3RfY21kX2Flc19rZXlfbGVuIGxlbmd0aCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmg6Nzc6aW50IG1tODF4X2NtZF9kaXNhYmxlX2tleShzdHJ1Y3QgbW04MXggKm1vcnMsIHN0cnVjdCBtbTgxeF92aWYgKm1vcnNfdmlmLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oLTc4LVxcdFxcdFxcdCAgdTE2IGFpZCwgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaDo3OTppbnQgbW04MXhfY21kX3JtX2lmKHN0cnVjdCBtbTgxeCAqbW9ycywgdTE2IHZpZl9pZCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmg6ODA6aW50IG1tODF4X2NtZF9zZXRfZnJhZ190aHJlc2hvbGQoc3RydWN0IG1tODF4ICptb3JzLCB1MzIgZnJhZ190aHJlc2hvbGQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oOjgxOmludCBtbTgxeF9jbWRfZ2V0X2Rpc2FibGVkX2NoYW5uZWxzKFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oOjgyOlxcdHN0cnVjdCBtbTgxeCAqbW9ycywgc3RydWN0IGhvc3RfY21kX3Jlc3BfZ2V0X2Rpc2FibGVkX2NoYW5uZWxzICpyZXNwLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oLTgzLVxcdHVpbnQgcmVzcF9sZW4pO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtMTAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6MTE6c3RhdGljIGludCBtbTgxeF9jb3JlX2F0dGFjaF9yZWdzKHN0cnVjdCBtbTgxeCAqbW9ycylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0xMi17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0xNC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYzoxNTpcXHRtbTgxeF9jbGFpbV9idXMobW9ycyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6MTY6XFx0cmV0ID0gbW04MXhfcmVnMzJfcmVhZChtb3JzLCBNTTgxMDhfUkVHX0NISVBfSUQsIFxcdTAwMjZtb3JzLVxcdTAwM2VjaGlwX2lkKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYzoxNzpcXHRtbTgxeF9yZWxlYXNlX2J1cyhtb3JzKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0xOC1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTI2LVxcdFxcdG1vcnMtXFx1MDAzZXJlZ3MgPSBcXHUwMDI2bW04MTA4X3JlZ3M7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6Mjc6XFx0XFx0bW9ycy1cXHUwMDNlaGlmLm9wcyA9IFxcdTAwMjZtbTgxeF95YXBzX29wcztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0yOC1cXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTM1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjM2OnN0YXRpYyB2b2lkIG1tODF4X2NvcmVfaW5pdF9tYWNfYWRkcihzdHJ1Y3QgbW04MXggKm1vcnMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtMzcte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjM4OlxcdGludCByZXQgPSBtbTgxeF9od19vdHBfZ2V0X21hY19hZGRyKG1vcnMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTM5LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtNDMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6NDQ6Y2hhciAqbW04MXhfY29yZV9nZXRfZndfcGF0aCh1MzIgY2hpcF9pZCwgdTMyIGZ3X3ZlcilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy00NS17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy01OC19XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6NTk6RVhQT1JUX1NZTUJPTF9HUEwobW04MXhfY29yZV9nZXRfZndfcGF0aCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtNjAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6NjE6c3RydWN0IG1tODF4ICptbTgxeF9jb3JlX2FsbG9jKHNpemVfdCBwcml2X3NpemUsIHN0cnVjdCBkZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy02Mi17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6NjM6XFx0cmV0dXJuIG1tODF4X21hY19hbGxvYyhwcml2X3NpemUsIGRldik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtNjQtfVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjY1OkVYUE9SVF9TWU1CT0xfR1BMKG1tODF4X2NvcmVfYWxsb2MpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTY2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjY3OmludCBtbTgxeF9jb3JlX2luaXQoc3RydWN0IG1tODF4ICptb3JzKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTY4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTczLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjc0OlxcdG1tODF4X2NvcmVfaW5pdF9tYWNfYWRkcihtb3JzKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy03NS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYzo3NjpcXHRyZXQgPSBtbTgxeF9jb3JlX2F0dGFjaF9yZWdzKG1vcnMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTc3LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy04OS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYzo5MDpcXHRyZXQgPSBtbTgxeF9oaWZfaW5pdChtb3JzKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy05MS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtMTA1LX1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYzoxMDY6RVhQT1JUX1NZTUJPTF9HUEwobW04MXhfY29yZV9pbml0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0xMDctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6MTA4OmludCBtbTgxeF9jb3JlX3JlZ2lzdGVyKHN0cnVjdCBtbTgxeCAqbW9ycylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0xMDkte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjExMDpcXHRyZXR1cm4gbW04MXhfbWFjX3JlZ2lzdGVyKG1vcnMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTExMS19XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6MTEyOkVYUE9SVF9TWU1CT0xfR1BMKG1tODF4X2NvcmVfcmVnaXN0ZXIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTExMy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYzoxMTQ6dm9pZCBtbTgxeF9jb3JlX3VucmVnaXN0ZXIoc3RydWN0IG1tODF4ICptb3JzKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTExNS17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6MTE2OlxcdG1tODF4X21hY191bnJlZ2lzdGVyKG1vcnMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTExNy19XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6MTE4OkVYUE9SVF9TWU1CT0xfR1BMKG1tODF4X2NvcmVfdW5yZWdpc3Rlcik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtMTE5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjEyMDp2b2lkIG1tODF4X2NvcmVfZGVpbml0KHN0cnVjdCBtbTgxeCAqbW9ycylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0xMjEte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjEyMjpcXHRtbTgxeF9oaWZfZmluaXNoKG1vcnMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTEyMy1cXHRmbHVzaF93b3JrcXVldWUobW9ycy1cXHUwMDNlbmV0X3dxKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTEyNy19XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6MTI4OkVYUE9SVF9TWU1CT0xfR1BMKG1tODF4X2NvcmVfZGVpbml0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0xMjktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6MTMwOnZvaWQgbW04MXhfY29yZV9mcmVlKHN0cnVjdCBtbTgxeCAqbW9ycylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0xMzEte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjEzMjpcXHRtbTgxeF9tYWNfZnJlZShtb3JzKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0xMzMtfVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjEzNDpFWFBPUlRfU1lNQk9MX0dQTChtbTgxeF9jb3JlX2ZyZWUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTEzNS1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTU0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oOjU1OnN0cnVjdCBtbTgxeF9idXNfb3BzO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oOjU2OnN0cnVjdCBtbTgxeF9oaWZfb3BzO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTU3LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtNjItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmg6NjM6ZW51bSBtbTgxeF9jYXBzX2ZsYWdzIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaC02NC1cXHRNTTgxWF9DQVBTX0ZXX1NUQVJUID0gMCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTEzMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaDoxMzI6c3RydWN0IG1tODF4X2Z3X2NhcHMge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTEzMy1cXHR1MzIgZmxhZ3NbRldfQ0FQQUJJTElUSUVTX0ZMQUdTX1dJRFRIXTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTEzNy1cXHR1OCBtYXhpbXVtX2FtcGR1X2xlbmd0aF9leHBvbmVudDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaDoxMzg6XFx0dTggbW04MXhfbW1zc19vZmZzZXQ7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMTM5LX07XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaC0xNDEtI2RlZmluZSBNTTgxWF9GV19TVVBQKE1NODFYX0NBUFMsIENBUEFCSUxJVFkpIFxcXFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaDoxNDI6XFx0bW04MXhfY2Fwc19zdXBwb3J0ZWQoTU04MVhfQ0FQUywgTU04MVhfQ0FQU18jI0NBUEFCSUxJVFkpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMTQzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oOjE0NDpzdGF0aWMgaW5saW5lIGJvb2wgbW04MXhfY2Fwc19zdXBwb3J0ZWQoc3RydWN0IG1tODF4X2Z3X2NhcHMgKmNhcHMsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmg6MTQ1OlxcdFxcdFxcdFxcdFxcdGVudW0gbW04MXhfY2Fwc19mbGFncyBmbGFnKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTE0Ni17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaC0xNTEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmg6MTUyOnN0cnVjdCBtbTgxeF9wcyB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMTUzLVxcdHUzMiB3YWtlcnM7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaC0xNjAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmg6MTYxOmVudW0gbW04MXhfcGFnZV9hY2kge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTE2Mi1cXHRNTTgxWF9BQ0lfQkUgPSAwLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMTY3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oOjE2ODplbnVtIG1tODF4X3Fvc190aWRfdXBfaW5kZXgge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTE2OS1cXHRNTTgxWF9RT1NfVElEX1VQX0JLID0gMSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTE4MS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaDoxODI6c3RydWN0IG1tODF4X3N3X3ZlcnNpb24ge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTE4My1cXHR1OCBtYWpvcjtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTE4Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaDoxODg6c3RydWN0IG1tODF4X3N0YSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMTg5LVxcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWY7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaC0xOTUtXFx0aW50IG1heF9id19taHo7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmg6MTk2OlxcdHN0cnVjdCBtbTgxeF9yY19zdGEgcmM7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMTk3LVxcdHN0cnVjdCBtbXJjX3JhdGUgbGFzdF9zdGFfdHhfcmF0ZTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTIwMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaDoyMDI6c3RydWN0IG1tODF4X3ZpZiB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmg6MjAzOlxcdHN0cnVjdCBtbTgxeCAqbW9ycztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaC0yMDQtXFx0dTE2IGlkO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMjE2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oOjIxNzpzdHJ1Y3QgbW04MXhfc3RhbGVfdHhfc3RhdHVzIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaC0yMTgtXFx0LyogU3RhbGUgVHggbG9jayAqL1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmg9MjIzPXN0cnVjdCBtY2FzdF9maWx0ZXIge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMjMyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oOjIzMzplbnVtIG1tODF4X2h3X3NjYW5fb3Age1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTIzNC1cXHRNTTgxWF9IV19TQ0FOX09QX1NUQVJULFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMjM3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oOjIzODpzdHJ1Y3QgbW04MXhfaHdfc2Nhbl9wYXJhbXMge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTIzOS1cXHRzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodztcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTI0NS1cXHR1MzIgZHdlbGxfb25faG9tZV9tcztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaDoyNDY6XFx0ZW51bSBtbTgxeF9od19zY2FuX29wIG9wZXJhdGlvbjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaC0yNDctXFx0Ym9vbCBzdG9yZTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTI2MS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaDoyNjI6ZW51bSBtbTgxeF9od19zY2FuX3N0YXRlIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaC0yNjMtXFx0SFdfU0NBTl9TVEFURV9JRExFLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMjY3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oOjI2ODpzdHJ1Y3QgbW04MXhfaHdfc2NhbiB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmg6MjY5OlxcdGVudW0gbW04MXhfaHdfc2Nhbl9zdGF0ZSBzdGF0ZTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaC0yNzAtXFx0c3RydWN0IGNvbXBsZXRpb24gc2Nhbl9kb25lO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oOjI3MTpcXHRzdHJ1Y3QgbW04MXhfaHdfc2Nhbl9wYXJhbXMgKnBhcmFtcztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaC0yNzItXFx0c3RydWN0IGRlbGF5ZWRfd29yayB0aW1lb3V0O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMjc1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oOjI3NjplbnVtIG1tODF4X2hpZl9ldmVudF9mbGFncyB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMjc3LVxcdE1NODFYX0hJRl9FVlRfUlhfUEVORCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTI4OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaDoyODk6ZW51bSBtbTgxeF9zdGF0ZV9mbGFncyB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMjkwLVxcdE1NODFYX1NUQVRFX0NISVBfVU5SRVNQT05TSVZFLFxcbi0tXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA3OjA0OjUyLjE5ODY2ODc3NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4ODU2MzI1NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNTTgxWCBEcml2ZXIgYW5kIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSBzZWUgdGhpcyBwYXRjaCB0YXJnZXRzIHRoZSBNTTgxWCBkcml2ZXIsIHdoaWNoIGlzIG9ubHkgYnVpbHQgaWYgYENPTkZJR19NTTgxWGAgaXMgZW5hYmxlZCwgd2hpY2ggaXMgYSBrZXkgc3RhcnRpbmcgcG9pbnQuIEl0IGFwcGVhcnMgdGhlIGRyaXZlciBoYXMgYm90aCBVU0IgYW5kIFNESU8gdmFyaWFudHMg4oCTIHNwZWNpZmljYWxseSwgaWYgYENPTkZJR19NTTgxWF9VU0JgIG9yIGBDT05GSUdfTU04MVhfU0RJT2AgYXJlIGNvbmZpZ3VyZWQuIEV4Y2VsbGVudC4gVGhpcyBpbW1lZGlhdGVseSBvcGVucyB1cCBkaWZmZXJlbnQgZnV6emluZyBhdmVudWVzLlxuXG5Gb3IgVVNCLCB0aGUgb3B0aW9ucyBhcmUgcHJldHR5IGNsZWFyLiBJIGNhbiBsZXZlcmFnZSBlaXRoZXIgdGhlIGR1bW15IEhDRCAoVVNCIEdhZGdldCkgb3IgdGhlIHBvd2VyIG9mIHN5emthbGxlcidzIFVTQiBmdXp6aW5nIGNhcGFiaWxpdGllcy4gVGhhdCdzIGEgc29saWQgcGF0aCB0byBleHBsb3JlLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBlc3RhYmxpc2hlZCB0b29scy4gU0RJTyBpcyBhbHNvIHBvdGVudGlhbGx5IGludGVyZXN0aW5nLCBidXQgaXQgcmVsaWVzIG9uIGFuIFNESU8gZW11bGF0b3IuIFdoaWxlIGl0J3MgcHJvYmFibHkgZmVhc2libGUsIHRoZSBVU0Igcm91dGUgc2VlbXMgbW9yZSBkaXJlY3RseSBhY2Nlc3NpYmxlIGFuZCBsZXNzIHJlbGlhbnQgb24gZXh0ZXJuYWwgc2V0dXAuXG5cblRoZSBzcGVjaWZpYyBtb2RpZmljYXRpb24gaXMgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuY2AuIEFoLCBmaXJtd2FyZSBwYXJzaW5nIGxvZ2ljLiBUaGlzIGlzIHByb21pc2luZyEgRmlybXdhcmUgbG9hZGluZyBpcyB1c3VhbGx5IGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuIEZpcm13YXJlIGlzIGxvYWRlZCB1c2luZyBgcmVxdWVzdF9maXJtd2FyZWAgb3IgZGlyZWN0bHkgZnJvbSB0aGUgZmlsZXN5c3RlbS4gU3l6a2FsbGVyJ3Mgc3VwcG9ydCBmb3IgbW9ja2luZyBgcmVxdWVzdF9maXJtd2FyZWAgbWFrZXMgdGhhdCBldmVuIG1vcmUgYXR0cmFjdGl2ZS5cblxuTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBmdW5jdGlvbnMgYG1tODF4X2Z3X2xvYWRfZndgIGFuZCBgbW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsYC4gVGhvc2UgYXJlIHRoZSBwcmltZSBzdXNwZWN0cywgZ2l2ZW4gdGhlIGNvbnRleHQuIFRoZXNlIGZ1bmN0aW9ucyB3aWxsIGJlIHRoZSBmb2NhbCBwb2ludCB0byBpZGVudGlmeSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIHdpdGhpbiB0aGUgZmlybXdhcmUgbG9hZGluZyBhbmQgcGFyc2luZyBwcm9jZXNzLiBJJ2xsIG5lZWQgdG8gZGlzc2VjdCB0aGUgbG9naWMgd2l0aGluIHRob3NlIGZ1bmN0aW9ucyB0byBkZXRlcm1pbmUgaG93IHN5emthbGxlciBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZSBlZmZlY3RpdmUgZnV6emluZyBpbnB1dHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTY1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA3OjA0OjU4LjA4NDMwNDM3N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzE5NTk1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtbTgxeF9md19sb2FkX2Z3XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYz05OT1zdGF0aWMgaW50IG1tODF4X2Z3X3NldF9ib290X2FkZHIoc3RydWN0IG1tODF4ICptb3JzLCB1aW50MzJfdCBhZGRyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTEwOS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmM6MTEwOnN0YXRpYyBpbnQgbW04MXhfZndfbG9hZF9mdyhzdHJ1Y3QgbW04MXggKm1vcnMsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTExMS17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmM9NjI3PXN0YXRpYyBpbnQgX19tbTgxeF9md19mbGFzaChzdHJ1Y3QgbW04MXggKm1vcnMsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmMtNjQzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYzo2NDQ6XFx0cmV0ID0gbW04MXhfZndfbG9hZF9mdyhtb3JzLCBmdyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTY0NS1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNzowNDo1OC4xNDc1MDUwNDZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzUyNzQ2ODY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgRmlybXdhcmUgRmxhc2hwb2ludCoqXG5cblJpZ2h0LCBzbyB0aGUgZmlybXdhcmUgbG9hZGluZyBwcm9jZXNzIGtpY2tzIG9mZiBpbiBgX19tbTgxeF9md19mbGFzaGAuIFNlZW1zIGxpa2UgYSBzZW5zaWJsZSBuYW1pbmcgY29udmVudGlvbi4gTm93LCB0aGUga2V5IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGxpbmcgY29udGV4dC4gR290dGEgdHJhY2UgYmFjayB0aHJvdWdoIHRoZSBjb2RlIGFuZCBmaWd1cmUgb3V0IHRoZSBlbnRyeSBwb2ludCBhbmQgdGhlIGV4ZWN1dGlvbiBmbG93IGxlYWRpbmcgdXAgdG8gdGhhdCBmdW5jdGlvbiBjYWxsLiBOZWVkIHRvIHNlZSB3aGVyZSB0aGUgZmlybXdhcmUgaW1hZ2UgaXMgY29taW5nIGZyb20gKGV4dGVybmFsIHN0b3JhZ2UsIG5ldHdvcmssIGV0Yy4pIGFuZCB3aGF0IHRyaWdnZXJzIHRoZSBmbGFzaCBvcGVyYXRpb24uIFVuZGVyc3RhbmRpbmcgdGhlIHByZWNvbmRpdGlvbnMgYmVmb3JlIGBfX21tODF4X2Z3X2ZsYXNoYCBpcyBjcnVjaWFsIGZvciBkZWJ1Z2dpbmcgYW55IGlzc3VlcyBvciBvcHRpbWl6aW5nIHRoZSBsb2FkaW5nIHByb2Nlc3MgaXRzZWxmLiBUaW1lIHRvIGZpcmUgdXAgdGhlIGRlYnVnZ2VyIGFuZCBzdGFydCBkaWdnaW5nIGludG8gdGhlIGNhbGwgc3RhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDk2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDc6MDU6MDIuNTAwMjU0NTczWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0OTU1NjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbW04MXhfZndfZmxhc2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jPTU2ND1pbnQgbW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsKHN0cnVjdCBtbTgxeCAqbW9ycylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy02MjYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jOjYyNzpzdGF0aWMgaW50IF9fbW04MXhfZndfZmxhc2goc3RydWN0IG1tODF4ICptb3JzLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy02MjgtXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqYmNmLCBib29sIHJlc2V0KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jPTY2Nj1zdGF0aWMgaW50IG1tODF4X2Z3X2ZsYXNoKHN0cnVjdCBtbTgxeCAqbW9ycywgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy02NzItXFx0d2hpbGUgKHJldHJpZXMtLSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYzo2NzM6XFx0XFx0cmV0ID0gX19tbTgxeF9md19mbGFzaChtb3JzLCBmdywgYmNmLCByZXNldCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTY3NC1cXHRcXHRpZiAoIXJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDc6MDU6MDIuNTk1MjE2NzMyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM1NTk5MTQ5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKm1tODF4X2Z3X2ZsYXNoOiBBIERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4uLiBgbW04MXhfZndfZmxhc2hgLiBIbW0sIHRoYXQgbmFtZSB0cmlnZ2VycyBzb21ldGhpbmcuIEl0IGltbWVkaWF0ZWx5IHN1Z2dlc3RzIGEgZmlybXdhcmUgZmxhc2hpbmcgdXRpbGl0eSwgbGlrZWx5IGZvciBhIHNwZWNpZmljIGhhcmR3YXJlIHBsYXRmb3JtIOKAkyB0aGUgXCJtbTgxeFwiIHBhcnQgaXMgdGhlIGdpdmVhd2F5LiBJJ2Qgd2FnZXIgaXQncyBhIHByb3ByaWV0YXJ5IG9yIHZlbmRvci1zcGVjaWZpYyB0b29sLiBOb3csIHRoZSBxdWVzdGlvbnMgc3RhcnQgcG9wcGluZzogSXMgdGhpcyBhIGJvb3Rsb2FkZXI/IEEgZ2VuZXJhbC1wdXJwb3NlIGZpcm13YXJlIHVwZGF0ZXI/IERvZXMgaXQgb3BlcmF0ZSB2aWEgSlRBRywgVUFSVCwgVVNCLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gV2hhdCBzZWN1cml0eSBmZWF0dXJlcyBhcmUgaW4gcGxhY2U/IERvZXMgaXQgc3VwcG9ydCByb2xsYmFjayBtZWNoYW5pc21zPyBXaGF0IGFib3V0IGVycm9yIGhhbmRsaW5nPyBBbmQsIGNyaXRpY2FsbHksIHRoZSB0YXJnZXQgZGV2aWNlcy4uLiBhcmUgd2UgdGFsa2luZyBlbWJlZGRlZCBzeXN0ZW1zLCBuZXR3b3JrIGFwcGxpYW5jZXMsIG9yIHNvbWV0aGluZyBlbHNlPyBVbmRlcnN0YW5kaW5nIHRoZSBoYXJkd2FyZSBjb250ZXh0IGlzIGNydWNpYWwuIEkgbmVlZCB0byBrbm93IHRoZSBhcmNoaXRlY3R1cmUsIG1lbW9yeSBtYXAsIGFuZCBhbnkgaGFyZHdhcmUtc3BlY2lmaWMgcXVpcmtzLiBUaGlzIGlzIGFsbCBhc3N1bWluZyBJIHdhbnQgdG8gZmxhc2ggbmV3IGZpcm13YXJlIG9udG8gdGhlIGRldmljZS4gV2hhdCBhcmUgdGhlIHBvc3NpYmlsaXRpZXMgYXJvdW5kIHRoaXMgdHlwZSBvZiBmbGFzaGluZyBzb2Z0d2FyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2NTEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNzowNTowNS45NTEyMTEzNzlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MDc0MjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1tODF4X2Z3X2ZsYXNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYz01NjQ9aW50IG1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibChzdHJ1Y3QgbW04MXggKm1vcnMpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmMtNjI2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYzo2Mjc6c3RhdGljIGludCBfX21tODF4X2Z3X2ZsYXNoKHN0cnVjdCBtbTgxeCAqbW9ycywgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmMtNjI4LVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmJjZiwgYm9vbCByZXNldClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy02NjUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jOjY2NjpzdGF0aWMgaW50IG1tODF4X2Z3X2ZsYXNoKHN0cnVjdCBtbTgxeCAqbW9ycywgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmMtNjY3LVxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpiY2YsIGJvb2wgcmVzZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmMtNjcyLVxcdHdoaWxlIChyZXRyaWVzLS0pIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmM6NjczOlxcdFxcdHJldCA9IF9fbW04MXhfZndfZmxhc2gobW9ycywgZncsIGJjZiwgcmVzZXQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy02NzQtXFx0XFx0aWYgKCFyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmM9NzE5PWludCBtbTgxeF9md19pbml0KHN0cnVjdCBtbTgxeCAqbW9ycywgYm9vbCByZXNldClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy03NjAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jOjc2MTpcXHRyZXQgPSBtbTgxeF9md19mbGFzaChtb3JzLCBmdywgYmNmLCByZXNldCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTc2Mi1cXHRpZiAocmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA3OjA1OjA2LjAyNjI5MTU5OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjEyNDc2MjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW5pdGlhbCBGaXJtd2FyZSBEZWVwIERpdmUgLSBtbTgxeF9md19pbml0KipcblxuQWxyaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBmaXJtd2FyZSBpbml0aWFsaXphdGlvbi4gU3BlY2lmaWNhbGx5LCB0aGF0IGBtbTgxeF9md19pbml0YCBmdW5jdGlvbi4gUmlnaHQgb2ZmIHRoZSBiYXQsIEknbSB0aGlua2luZywgXCJPa2F5LCB3aGF0J3MgKnRoaXMqIGRvaW5nP1wiIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgdGhlIHZlcnkgZmlyc3Qgc3RlcHMgaW4gYnJpbmdpbmcgdXAgdGhpcyBwYXJ0aWN1bGFyIGhhcmR3YXJlLiBXZSdyZSB0YWxraW5nIGxvdy1sZXZlbCBzdHVmZiBoZXJlLCBJIHByZXN1bWUuIEFyZSB3ZSB0YWxraW5nIGFib3V0IHJlZ2lzdGVyaW5nIHRoZSBkZXZpY2UsIGNvbmZpZ3VyaW5nIGNsb2Nrcywgc2V0dGluZyB1cCBpbnRlcnJ1cHQgdmVjdG9ycywgbWVtb3J5IGFsbG9jYXRpb24sIG9yIGFsbCBvZiB0aGUgYWJvdmU/IFdoYXQncyB0aGUgY29udGV4dCwgd2hhdCdzIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZT8gSXMgdGhpcyBhIGRyaXZlci1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiwgb3Igc29tZXRoaW5nIG1vcmUgZ2xvYmFsIHRoYXQgbWlnaHQgaW5mbHVlbmNlIG90aGVyIGZ1bmN0aW9ucz8gQW55IGhhcmR3YXJlLXNwZWNpZmljIGNvbnNpZGVyYXRpb25zIGluIHRoaXMgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2U/IERvZXMgdGhpcyByZXF1aXJlIGFueSBzcGVjaWZpYyBmbGFncy9vcHRpb25zIGZyb20gdGhlIHVzZXJzcGFjZSBhcHBsaWNhdGlvbiB0aGF0IGlzIGNhbGxpbmcgaXQ/IEknbSBhbHJlYWR5IG1lbnRhbGx5IHNrZXRjaGluZyB0aGUgY2FsbCBncmFwaCBhbmQgZGVwZW5kZW5jaWVzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZSwgdGhlIGZpcm13YXJlIGltYWdlIGl0c2VsZiwgYW5kIHBvc3NpYmx5IGFueSBib290bG9hZGVyIG9yIGVhcmxpZXIgaW5pdGlhbGl6YXRpb24gc3RhZ2VzLiBUaGUgZ29hbCBvZiB0aGlzIHByb2Nlc3Mgd291bGQgaGF2ZSB0byBiZSB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBpbiBwbGFjZSB0byBiZWdpbiBhY3R1YWwgY29tbXVuaWNhdGlvbiBhbmQgZGF0YSBwcm9jZXNzaW5nIHVzaW5nIHRoZSBkZXZpY2UuIEdvdHRhIGRpZyBpbiBhbmQgc2VlIHRoZSBkZXRhaWxzIG9mIHRoaXMgb25lLCB0aGUgbnVhbmNlcyBvZiB0aGF0IGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQ2OCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA3OjA1OjEwLjIzODc3MDYxNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzcxOTE1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW04MXhfZndfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmM9Njg5PXN0YXRpYyBpbnQgbW04MXhfZndfcmVxdWVzdChzdHJ1Y3QgbW04MXggKm1vcnMsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqKmZ3KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTcxOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmM6NzE5OmludCBtbTgxeF9md19pbml0KHN0cnVjdCBtbTgxeCAqbW9ycywgYm9vbCByZXNldClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmMtNzIwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuaD0xMzQ9c3RydWN0IGV4dF9ob3N0X3RibCB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmgtMTM5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuaDoxNDA6aW50IG1tODF4X2Z3X2luaXQoc3RydWN0IG1tODF4ICptb3JzLCBib29sIHJlc2V0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmgtMTQxLWludCBtbTgxeF9md19wYXJzZV9leHRfaG9zdF90Ymwoc3RydWN0IG1tODF4ICptb3JzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM9MjEwNz1zdGF0aWMgaW50IG1tODF4X21hY19yZXN0YXJ0KHN0cnVjdCBtbTgxeCAqbW9ycylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjEzOS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jOjIxNDA6XFx0cmV0ID0gbW04MXhfZndfaW5pdChtb3JzLCB0cnVlKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxNDEtXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDc6MDU6MTAuMzE1OTY3NDI1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNDMxNjgyMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKiptbTgxeF9md19pbml0IEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYG1tODF4X2Z3X2luaXRgIGZ1bmN0aW9uLiBUaGUgY29kZSBzYXlzIGl0J3MgY2FsbGVkIGJ5IGBtbTgxeF9tYWNfcmVzdGFydGAuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGJ1dCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogd2hlcmUgKmVsc2UqIGlzIHRoaXMgZnVuY3Rpb24gYmVpbmcgaW52b2tlZD8gSXMgYG1tODF4X21hY19yZXN0YXJ0YCB0aGUgb25seSBjYWxsaW5nIGZ1bmN0aW9uLCBvciBpcyB0aGVyZSB0aGUgcG9zc2liaWxpdHkgb2Ygb3RoZXIgY29kZSBwYXRocyBvciBkcml2ZXJzIG9yIG1vZHVsZXMgdGhhdCBhbHNvIGNhbGwgYG1tODF4X2Z3X2luaXRgPyBJIG5lZWQgdG8gdHJhY2sgZG93biBhbGwgdGhlIGNhbGwgc2l0ZXMgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSBvZiBpdHMgdXNhZ2UgYW5kIGFueSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzIG9yIGVkZ2UgY2FzZXMuIEEgc29saWQgZ3Jhc3Agb2YgZXZlcnkgY2FsbCBzaXRlIHdpbGwgYWxsb3cgbWUgdG8gYWNjdXJhdGVseSBkZXNjcmliZSBob3cgdGhlIGZ1bmN0aW9uIGJlaGF2ZXMgaW4gdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIyNzEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNzowNToxMy41NTkxMzk0MDJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0MDM3NjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1tODF4X21hY19yZXN0YXJ0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM9MjA3MT1zdGF0aWMgdTMyIG1tODF4X2dldF9leHBlY3RlZF90aHJvdWdocHV0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMDkwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjA5MTpzdGF0aWMgdm9pZCBtbTgxeF9tYWNfcmVzdGFydF9jbGVhbnVwX2l0ZXIodm9pZCAqZGF0YSwgdTggKm1hYyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIwOTItXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjA5Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jOjIwOTg6c3RhdGljIHZvaWQgbW04MXhfbWFjX3Jlc3RhcnRfY2xlYW51cChzdHJ1Y3QgbW04MXggKm1vcnMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMDk5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjEwMS1cXHRcXHRcXHRcXHRcXHQgICAgSUVFRTgwMjExX0lGQUNFX0lURVJfTk9STUFMLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjEwMjpcXHRcXHRcXHRcXHRcXHQgICAgbW04MXhfbWFjX3Jlc3RhcnRfY2xlYW51cF9pdGVyLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjEwMy1cXHRcXHRcXHRcXHRcXHQgICAgTlVMTCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxMDYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYzoyMTA3OnN0YXRpYyBpbnQgbW04MXhfbWFjX3Jlc3RhcnQoc3RydWN0IG1tODF4ICptb3JzKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjEwOC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxMzctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYzoyMTM4OlxcdG1tODF4X21hY19yZXN0YXJ0X2NsZWFudXAobW9ycyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTM5LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYz0yMTcwPXN0YXRpYyBpbnQgbW04MXhfbWFjX29wc19hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTgwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjE4MTpcXHRcXHRyZXQgPSBtbTgxeF9tYWNfcmVzdGFydChtb3JzKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxODItXFx0XFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYz0yMjYxPXN0YXRpYyB2b2lkIG1tODF4X3JlZ19ub3RpZmllcihzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMjcyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjI3MzpcXHRyZXQgPSBtbTgxeF9tYWNfcmVzdGFydChtb3JzKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIyNzQtXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDc6MDU6MTMuNjQzMTgyNzUyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNjk5MDY4ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaWdnaW5nIGludG8gdGhlIE1NODFYIERyaXZlciBBcmNoaXRlY3R1cmUqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGUgY29udHJvbCBmbG93IGhlcmUgaW4gdGhlIE1NODFYIGRyaXZlciwgYW5kIGl0J3MgbG9va2luZyBsaWtlIGBtbTgxeF9tYWNfcmVzdGFydGAgaXMgYSBrZXkgZnVuY3Rpb24uIEknbSBzZWVpbmcgaXQgY2FsbGVkIGZyb20gYm90aCBgbW04MXhfbWFjX29wc19hZGRfaW50ZXJmYWNlYCBhbmQgYWxzbyB0aGUgYG1tODF4X3JlZ19ub3RpZmllcmAgZnVuY3Rpb24uIFRoYXQgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBzaG93aW5nIG1lIHdoZXJlIHRoZSByZXN0YXJ0IGFjdGlvbiBpcyB0cmlnZ2VyZWQuIFRoaXMgaW1wbGllcyB0aGF0IGludGVyZmFjZSBhZGRpdGlvbiBhbmQgc29tZSBmb3JtIG9mIHJlZ2lzdHJhdGlvbiAobGlrZWx5IHJlbGF0ZWQgdG8gaGFyZHdhcmUgZXZlbnRzIG9yIHJlY29uZmlndXJhdGlvbikgYXJlIHRoZSBldmVudHMgdGhhdCBuZWNlc3NpdGF0ZSBhIE1BQyByZXN0YXJ0LlxuXG5Ob3cgSSdtIHBhdXNpbmcuLi4gSSBuZWVkIHRvIGNsYXJpZnkgc29tZXRoaW5nLiBJcyB0aGUgZmlybXdhcmUgaW5pdGlhbGl6YXRpb24sIGBtbTgxeF9md19pbml0YCwgY2FsbGVkIHdpdGhpbiB0aGUgcHJvYmUgZnVuY3Rpb24/IEl0J3MgY3JpdGljYWwgZm9yIG1lIHRvIHVuZGVyc3RhbmQgdGhlIGJvb3QtdXAgc2VxdWVuY2Ugb2YgdGhlIGhhcmR3YXJlIHNvIEkgbmVlZCB0byBjaGVjayB0aGUgcHJvYmUgZnVuY3Rpb24sIGBtbTgxeF9wcm9iZWAsIHRvIG1ha2Ugc3VyZSB0aGF0IGBtbTgxeF9md19pbml0YCBpcyBjYWxsZWQuIElmIHNvLCBhbmQgaG93LCB0aGF0IHdpbGwgZGV0ZXJtaW5lIHRoZSBzdGF0ZSBvZiB0aGUgaGFyZHdhcmUgYmVmb3JlIGEgcmVzdGFydCBpcyB0cmlnZ2VyZWQuIFRoZSB0aW1pbmcgYW5kIHNlcXVlbmNlIGFyZSBnb2luZyB0byBiZSBjcml0aWNhbCBmb3IgZGVidWdnaW5nIGFueSBwb3RlbnRpYWwgaXNzdWVzIGluIHRoZSBpbnRlcmZhY2Ugc2V0dXAgb3IgaGFyZHdhcmUgcmVnaXN0cmF0aW9uIHBhdGhzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzM5NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA3OjA1OjE3LjcxMzA5MjU4MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0NDQ0MjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1tODF4X2Z3X2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jPTY4OT1zdGF0aWMgaW50IG1tODF4X2Z3X3JlcXVlc3Qoc3RydWN0IG1tODF4ICptb3JzLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKipmdylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy03MTgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jOjcxOTppbnQgbW04MXhfZndfaW5pdChzdHJ1Y3QgbW04MXggKm1vcnMsIGJvb2wgcmVzZXQpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTcyMC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3Lmg9MTM0PXN0cnVjdCBleHRfaG9zdF90Ymwge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5oLTEzOS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3Lmg6MTQwOmludCBtbTgxeF9md19pbml0KHN0cnVjdCBtbTgxeCAqbW9ycywgYm9vbCByZXNldCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5oLTE0MS1pbnQgbW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsKHN0cnVjdCBtbTgxeCAqbW9ycyk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jPTIxMDc9c3RhdGljIGludCBtbTgxeF9tYWNfcmVzdGFydChzdHJ1Y3QgbW04MXggKm1vcnMpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxMzktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYzoyMTQwOlxcdHJldCA9IG1tODF4X2Z3X2luaXQobW9ycywgdHJ1ZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTQxLVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA3OjA1OjE3LjgyNzU0MTEzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMDE1NTQxNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW5pdGlhbCBJbnZlc3RpZ2F0aW9uIGludG8gRHJpdmVyIEluaXRpYWxpemF0aW9uIEZsb3cqKlxuXG5IYW5nIG9uIGEgbWludXRl4oCmIEknbSBzdGFydGluZyB0byB0aGluayBJIG1pc3NlZCBzb21ldGhpbmcgZnVuZGFtZW50YWwgaGVyZS4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCBgbW04MXhfZndfaW5pdGAgd2FzIHBhcnQgb2YgdGhlIHN0YW5kYXJkIHByb2JlIHNlcXVlbmNlLiBCdXQgbG9va2luZyBhdCB0aGUgYnJvYWRlciBwaWN0dXJlLCB0aGF0IGRvZXNuJ3Qgc2VlbSB0byBiZSB0aGUgY2FzZS4gTXkgZmlyc3QgaW5zdGluY3Qgd291bGQgYmUgdG8gY2hlY2sgdGhhdCBgbW04MXhfZndfaW5pdGAgaXMgY2FsbGVkIGluIG90aGVyIHNjZW5hcmlvcy5cblxuR2l2ZW4gdGhhdCBpdCdzIG5vdCBpbiB0aGUgYHByb2JlYCBmdW5jdGlvbiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhlIGZpcm13YXJlIGluaXRpYWxpemF0aW9uICpkb2VzKiBvY2N1ci4gSSBzaG91bGQgcHJvYmFibHkgYmUgbG9va2luZyBhdCBgbW04MXhfY29yZV9pbml0YCBuZXh0LiBUaGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQg4oCTIGl0J3Mgb2Z0ZW4gdGhlIHJvb3Qgb2YgdGhlIGNvcmUgZHJpdmVyIGluaXRpYWxpemF0aW9uLCByaWdodD8gT3IgcGVyaGFwcyB0aGUgTUFDIHJlZ2lzdHJhdGlvbiBmdW5jdGlvbiwgYG1tODF4X21hY19yZWdpc3RlcmA/IEl0J3MgcG9zc2libGUgdGhlIGZpcm13YXJlIGlzIGJlaW5nIGhhbmRsZWQgd2l0aGluIHRoYXQgY29udGV4dCwgZXNwZWNpYWxseSBpZiB0aGUgTUFDIGlzIHRpZ2h0bHkgY291cGxlZCB3aXRoIHRoZSBmaXJtd2FyZSBsb2FkaW5nLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBtb3JlIGNhcmVmdWxseSB0byBzZWUgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBhY3R1YWxseSBnZXR0aW5nIGNhbGxlZCwgYW5kIHdoYXQgaXQgZG9lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQyMzAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNzowNToyMS45MjkwOTc4NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMDU0NTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1tODF4X21hY19yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYz0xMDg9aW50IG1tODF4X2NvcmVfcmVnaXN0ZXIoc3RydWN0IG1tODF4ICptb3JzKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTEwOS17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6MTEwOlxcdHJldHVybiBtbTgxeF9tYWNfcmVnaXN0ZXIobW9ycyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtMTExLX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM9MjM1NT1zdGF0aWMgdm9pZCBtbTgxeF9tYWNfc3RhbGVfdHhfc3RhdHVzX3RpbWVyX2luaXQoc3RydWN0IG1tODF4ICptb3JzKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMzYwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjM2MTppbnQgbW04MXhfbWFjX3JlZ2lzdGVyKHN0cnVjdCBtbTgxeCAqbW9ycylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIzNjIte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuaD01MT1zdHJ1Y3QgbW04MXggKm1tODF4X21hY19hbGxvYyhzaXplX3QgcHJpdl9zaXplLCBzdHJ1Y3QgZGV2aWNlICpkZXYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmg6NTI6aW50IG1tODF4X21hY19yZWdpc3RlcihzdHJ1Y3QgbW04MXggKm1vcnMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmgtNTMtdm9pZCBtbTgxeF9tYWNfZnJlZShzdHJ1Y3QgbW04MXggKm1vcnMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNzowNToyMi4wNDExNTc1ODlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI4MzQ5MTE3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipBbmFseXppbmcgYG1tODF4X21hY19yZWdpc3RlcmAqKlxuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCBgbW04MXhfbWFjX3JlZ2lzdGVyYC4gSW1tZWRpYXRlbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgY29udGV4dC4gV2hhdCBpcyB0aGlzIGZ1bmN0aW9uIGRvaW5nPyBUaGUgbmFtZSBzdWdnZXN0cyBpdCdzIGxpa2VseSBkZWFsaW5nIHdpdGggcmVnaXN0ZXJpbmcgYSBNZWRpYSBBY2Nlc3MgQ29udHJvbGxlciAoTUFDKSBkZXZpY2UsIGFuZCB0aGUgXCJtbTgxeFwiIHByZWZpeCBpcyBhbG1vc3QgY2VydGFpbmx5IGFuIGluZGljYXRvciBvZiB0aGUgc3BlY2lmaWMgaGFyZHdhcmUgb3IgZHJpdmVyIGl0IHJlbGF0ZXMgdG8uIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhlcmUncyBzb21lIGRldmljZS1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiBvciBjb25maWd1cmF0aW9uIGludm9sdmVkLlxuXG5JJ2Qgd2FudCB0byBrbm93OlxuXG4qICAgKipXaGF0IGFyZSB3ZSByZWdpc3RlcmluZz8qKiBJcyB0aGlzIGEgcGh5c2ljYWwgTUFDLCBhIHZpcnR1YWwgaW50ZXJmYWNlLCBvciBzb21ldGhpbmcgbW9yZSBjb21wbGV4P1xuKiAgICoqV2hhdCBraW5kIG9mIGRhdGEgc3RydWN0dXJlIGlzIGludm9sdmVkPyoqIGBtbTgxeF9gIGltcGxpZXMgc29tZSBjb21wYW55IG9yIHNwZWNpZmljIGhhcmR3YXJlLCBzbyB3aGF0J3MgdGhlIGRhdGEgc3RydWN0dXJlIHR5cGUgZm9yIHRoZSBNQUMgYmVpbmcgdXNlZD8gSXMgaXQgYSBzdGFuZGFyZCBzdHJ1Y3R1cmUsIG9yIHByb3ByaWV0YXJ5PyBIb3cgZG8gd2UgaW50ZXJmYWNlIHdpdGggdGhpcyBzdHJ1Y3R1cmUuXG4qICAgKipXaGF0IGlzIHRoZSByZWdpc3RlciBtYXA/KiogYHJlZ2lzdGVyYCBpbXBsaWVzIHNvbWUgYWRkcmVzcy4gQXJlIHdlIG1hcHBpbmcgbWVtb3J5IGluIGtlcm5lbC1zcGFjZSwgb3Igc29tZSBvdGhlciBvcGVyYXRpb24/IERvIHdlIG5lZWQgdG8gZGVmaW5lIHRoZSByZWdpc3RlciBiYXNlIGFkZHJlc3M/XG4qICAgKipXaGF0IGRyaXZlciBtb2RlbCBpcyBiZWluZyB1c2VkPyoqIElzIGl0IGEgc3RhbmRhcmQgbmV0d29yayBkcml2ZXIgZnJhbWV3b3JrIG9yIHNvbWV0aGluZyBjdXN0b20/IElzIGl0IHVzaW5nIE5ldGxpbmssIHN5c2ZzLCBvciBhbm90aGVyIGludGVyZmFjZT8gV2hhdCBhcmUgdGhlIHN0YW5kYXJkIGNhbGxzIGJlaW5nIG1hZGU/XG4qICAgKipBcmUgdGhlcmUgYW55IG11dGV4ZXMvbG9ja3MgaW4gdXNlPyoqIEknbSBpbW1lZGlhdGVseSBsb29raW5nIGZvciBjb25jdXJyZW5jeSBwcm90ZWN0aW9uOyBNQUMgZGV2aWNlcyBhcmUgb2Z0ZW4gc2hhcmVkIHJlc291cmNlcywgc28gaXQncyBjcml0aWNhbCB0byBlbnN1cmUgcHJvcGVyIGxvY2tpbmcuIFJhY2UgY29uZGl0aW9ucyBhcmUgbmFzdHkuXG4qICAgKipFcnJvciBoYW5kbGluZz8qKiBIb3cgZG9lcyB0aGUgZnVuY3Rpb24gaGFuZGxlIGZhaWx1cmVzPyBEb2VzIGl0IHJldHVybiBlcnJvciBjb2RlcywgbG9nIG1lc3NhZ2VzLCBvciBzb21ldGhpbmcgZWxzZT8gSXMgaXQgYSByb2J1c3QgY2hlY2s/XG5cbkknbSBtZW50YWxseSBwcmVwYXJpbmcgdG8gdHJhY2UgdGhyb3VnaCB0aGUgY29kZSwgbG9va2luZyBmb3IgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2VzLCBwb3RlbnRpYWxseSBpbnRlcnJ1cHQgcmVnaXN0cmF0aW9uIChpZiBpdCdzIGEgaGFyZHdhcmUgTUFDKSwgYW5kIHRoZSBhY3R1YWwgbWVjaGFuaXNtIG9mIHR5aW5nIHRoZSBNQUMgZGV2aWNlIGludG8gdGhlIG5ldHdvcmsgc3RhY2suIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhlIGRyaXZlci4gTGV0J3Mgc2VlIGhvdyBpdCB3b3JrcyFcblxuXG4iLCJJbnB1dFRva2VucyI6MjQ5OTAsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNzowNToyNi4zMjQ2NTA5MzZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxNjg2ODI2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtbTgxeF9md19pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYz0yMTA3PXN0YXRpYyBpbnQgbW04MXhfbWFjX3Jlc3RhcnQoc3RydWN0IG1tODF4ICptb3JzKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTM5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjE0MDpcXHRyZXQgPSBtbTgxeF9md19pbml0KG1vcnMsIHRydWUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjE0MS1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNzowNToyNy4xNDE1MjYwNDhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI1MjQ1MzkxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuKipJbnZlc3RpZ2F0aW5nIG1tODF4IEZpcm13YXJlIEluaXRpYWxpemF0aW9uKipcblxuUmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgbW04MXhgIGRyaXZlciBjb2RlIGFnYWluLiBJdCdzIGNsZWFyIHRoYXQgYG1tODF4X2Z3X2luaXRgIGlzIGludm9rZWQgd2l0aGluIGBtbTgxeF9tYWNfcmVzdGFydGAuIFRoYXQncyB0aGUgZmlyc3QgY29ubmVjdGlvbiBJJ3ZlIGlkZW50aWZpZWQuIE5vdywgdGhlIG5leHQgbG9naWNhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIGBtbTgxeF9tYWNfcmVzdGFydGAgaXRzZWxmIGlzIGNhbGxlZCB3aXRoaW4gYG1tODF4X21hY19yZWdpc3RlcmAuIEtub3dpbmcgdGhpcyByZWxhdGlvbnNoaXAgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgaW5pdGlhbGl6YXRpb24gYW5kIHJlc3RhcnQgc2VxdWVuY2UuIEl0J3MgYSBrZXkgcGllY2Ugb2YgdGhlIHB1enpsZSB0byBkZXRlcm1pbmUgdGhlIG92ZXJhbGwgc3RhdGUgbWFjaGluZSBhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCBkdXJpbmcgZGV2aWNlIGJyaW5ndXAgb3IgZXJyb3IgcmVjb3ZlcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NjcxLCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDc6MDU6MzAuMzkzOTg0ODY1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODk4Nzg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtbTgxeF9tYWNfcmVzdGFydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM9MjA3MT1zdGF0aWMgdTMyIG1tODF4X2dldF9leHBlY3RlZF90aHJvdWdocHV0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMDkwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjA5MTpzdGF0aWMgdm9pZCBtbTgxeF9tYWNfcmVzdGFydF9jbGVhbnVwX2l0ZXIodm9pZCAqZGF0YSwgdTggKm1hYyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIwOTItXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjA5Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jOjIwOTg6c3RhdGljIHZvaWQgbW04MXhfbWFjX3Jlc3RhcnRfY2xlYW51cChzdHJ1Y3QgbW04MXggKm1vcnMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMDk5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjEwMS1cXHRcXHRcXHRcXHRcXHQgICAgSUVFRTgwMjExX0lGQUNFX0lURVJfTk9STUFMLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjEwMjpcXHRcXHRcXHRcXHRcXHQgICAgbW04MXhfbWFjX3Jlc3RhcnRfY2xlYW51cF9pdGVyLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjEwMy1cXHRcXHRcXHRcXHRcXHQgICAgTlVMTCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxMDYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYzoyMTA3OnN0YXRpYyBpbnQgbW04MXhfbWFjX3Jlc3RhcnQoc3RydWN0IG1tODF4ICptb3JzKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjEwOC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxMzctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYzoyMTM4OlxcdG1tODF4X21hY19yZXN0YXJ0X2NsZWFudXAobW9ycyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTM5LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYz0yMTcwPXN0YXRpYyBpbnQgbW04MXhfbWFjX29wc19hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTgwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjE4MTpcXHRcXHRyZXQgPSBtbTgxeF9tYWNfcmVzdGFydChtb3JzKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxODItXFx0XFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYz0yMjYxPXN0YXRpYyB2b2lkIG1tODF4X3JlZ19ub3RpZmllcihzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMjcyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjI3MzpcXHRyZXQgPSBtbTgxeF9tYWNfcmVzdGFydChtb3JzKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIyNzQtXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDc6MDU6MzAuNDYyOTc4NTk1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NjQwMjA2NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOlxuXG4qKkFuYWx5emluZyB0aGUgSW50ZXJmYWNlIEFkZGl0aW9uIFByb2NlZHVyZSoqXG5cbk9rYXksIHNvIGBtbTgxeF9tYWNfb3BzX2FkZF9pbnRlcmZhY2VgIGlzIHRoZSBrZXkgZnVuY3Rpb24gdHJpZ2dlcmVkIHdoZW4gYSBuZXcgaW50ZXJmYWNlIGlzIGFkZGVkLiBUaGF0IG1ha2VzIHNlbnNlOyBhZGRpbmcgYW4gaW50ZXJmYWNlLCBlc3BlY2lhbGx5IGluIGEgd2lyZWxlc3MgY29udGV4dCB1c2luZyBubDgwMjExLCBpcyBhIHNpZ25pZmljYW50IGV2ZW50LiBJJ20gdGhpbmtpbmcsIHRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIGFsbCB0aGUgbmVjZXNzYXJ5IGRhdGEgc3RydWN0dXJlcyBhbmQgY29uZmlndXJhdGlvbnMgc3BlY2lmaWMgdG8gdGhlIG5ldyBpbnRlcmZhY2Ugd2l0aGluIHRoZSBNQUMgbGF5ZXIuIEl04oCZcyB0aGUgZW50cnkgcG9pbnQgdG8gbWFraW5nIHRoZSBpbnRlcmZhY2Ugb3BlcmF0aW9uYWwuXG5cbkJ1dCBiZWZvcmUgSSBkZWx2ZSBkZWVwZXIgaW50byBgbW04MXhfbWFjX29wc19hZGRfaW50ZXJmYWNlYCwgYSBxdWljayBkZXRvdXIgaXMgaW4gb3JkZXIuIExldCBtZSBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgYW5kIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLiBJIHdhbnQgdG8gcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgdGhhdCB3aXRoIGBtbTgxeF9tYWNfcmVnaXN0ZXJgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBNQUMgbGF5ZXIgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYW5kIHJlZ2lzdGVyZWQgZmlyc3QsIHNvIHRoZSBhZGRpbmcgY2FuIGdvIHNtb290aGx5LiBMZXQgbWUgdmVyaWZ5IHRoZSBmbG93IG9mIG9wZXJhdGlvbnMuIFRoaXMgcmVnaXN0cmF0aW9uIGlzIGEgZm91bmRhdGlvbmFsIHBpZWNlIGFuZCBpbmZsdWVuY2VzIGV2ZXJ5dGhpbmcgdGhhdCBjb21lcyBhZnRlci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIHdvcmtpbmcgd2l0aCBhY2N1cmF0ZSBhc3N1bXB0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY3OTgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNzowNTozNS4xMjcwMDMxOTdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyOTcyNjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1tODF4X2Z3X2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jPTY4OT1zdGF0aWMgaW50IG1tODF4X2Z3X3JlcXVlc3Qoc3RydWN0IG1tODF4ICptb3JzLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKipmdylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy03MTgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jOjcxOTppbnQgbW04MXhfZndfaW5pdChzdHJ1Y3QgbW04MXggKm1vcnMsIGJvb2wgcmVzZXQpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTcyMC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3Lmg9MTM0PXN0cnVjdCBleHRfaG9zdF90Ymwge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5oLTEzOS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3Lmg6MTQwOmludCBtbTgxeF9md19pbml0KHN0cnVjdCBtbTgxeCAqbW9ycywgYm9vbCByZXNldCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5oLTE0MS1pbnQgbW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsKHN0cnVjdCBtbTgxeCAqbW9ycyk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jPTIxMDc9c3RhdGljIGludCBtbTgxeF9tYWNfcmVzdGFydChzdHJ1Y3QgbW04MXggKm1vcnMpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxMzktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYzoyMTQwOlxcdHJldCA9IG1tODF4X2Z3X2luaXQobW9ycywgdHJ1ZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTQxLVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA3OjA1OjM1LjIxOTk4MTE2N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTUxNTEyMzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW5pdGlhbCBEaWFnbm9zdGljIFF1ZXJ5KipcblxuUmlnaHQsIGxldCdzIHNlZS4uLiB3aGF0J3MgdGhlIGZpcnN0IHRoaW5nIHRoYXQgc3ByaW5ncyB0byBtaW5kLCBiYXNlZCBvbiB0aGUgY29udGV4dC4uLiBHaXZlbiB3ZSdyZSBkZWFsaW5nIHdpdGggaW5pdGlhbGl6YXRpb24sIHRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgYWx3YXlzIGFib3V0IHRoZSBjb3JlIHNldHVwLiBBIG5hbWUgbGlrZSBgbW04MXhfY29yZV9pbml0YCBzdWdnZXN0cyBpdCdzIGEgY3JpdGljYWwgZW50cnkgcG9pbnQgZm9yIGJyaW5naW5nIGEgc3BlY2lmaWMgbWljcm9jb250cm9sbGVyIGNvcmUgb25saW5lLiBJcyB0aGlzIGEgc3lzdGVtIEkgYW0gZmFtaWxpYXIgd2l0aD8gRnJvbSBteSB5ZWFycyBvZiBleHBlcmllbmNlLCBJIGNhbiBpbW1lZGlhdGVseSBzdGFydCB0aGlua2luZyB0aHJvdWdoIHBvdGVudGlhbCBpc3N1ZXMgdGhhdCBJIHdvdWxkIHNlZSBmcm9tIHRoZSBvdXRzZXQuIEkgYW0gaW1tZWRpYXRlbHkgZ29pbmcgdG8gY29uc2lkZXI6XG5cbiogICBEb2VzIHRoaXMgaW5pdGlhbGl6YXRpb24gaGFuZGxlIGNsb2NrIGNvbmZpZ3VyYXRpb24/XG4qICAgV2hhdCBhYm91dCBtZW1vcnkgbWFwcGluZyBhbmQgcHJvdGVjdGlvbj9cbiogICBJbnRlcnJ1cHQgdmVjdG9yIHNldHVwP1xuKiAgIFBlcmlwaGVyYWwgY29uZmlndXJhdGlvbiAtIHRoaXMgaXMgb2Z0ZW4gYSBtaW5lZmllbGQhXG5cbkl0J3MgbGlrZWx5IHRoZSBzdGFydGluZyBwb2ludCBmb3IgbG93LWxldmVsIGhhcmR3YXJlIGJyaW5nLXVwLCB3aGljaCBpcyB0eXBpY2FsbHkgd2hlcmUgeW91IGZpbmQgdGhlIG1vc3Qgc3VidGxlIGFuZCBmcnVzdHJhdGluZyBidWdzLiBJcyBpdCBjYWxsaW5nIG91dCB0byB0aGUgbW9yZSBzcGVjaWFsaXplZCBzdWJzeXN0ZW0gaW5pdGlhbGl6YXRpb24/IFRoaXMgc2VlbXMgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc1ODgsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNzowNTo0MC4zNzE0OTg4NDVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3OTc3NDUwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtbTgxeF9md19pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNzowNTo0MC40Mzk0ODY5MjVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY0Mzg2NTU2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgZGlzdGlsbGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIGBtbTgxeGAgRmlybXdhcmUgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGggb2YgYG1tODF4X2Z3X2luaXRgLiBUaGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGtub3cgaXMgKndoZXJlKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4gTGV0J3Mgc3RhcnQgd2l0aCBhIHF1aWNrIHNlYXJjaCB0byBzZWUgd2hhdCdzIHdoYXQuIFJpZ2h0LCBsb29rcyBsaWtlIGl0J3Mgb25seSBjYWxsZWQgd2l0aGluIGBtbTgxeF9tYWNfcmVzdGFydGAuXG5cbkhtbSwgdGhhdCBzZWVtcyBvZGQuIEknZCBleHBlY3QgaW5pdGlhbGl6YXRpb24gdG8gaGFwcGVuIGluIG1vcmUgcGxhY2VzLCBwb3RlbnRpYWxseSBkdXJpbmcgZHJpdmVyIHJlZ2lzdHJhdGlvbiBvciBhIHBvd2VyLXVwIHNlcXVlbmNlLiBMZXQgbWUganVzdCBjb25maXJtIHRoYXQuIE9rYXksIEkndmUgZG91YmxlLWNoZWNrZWQsIGFuZCBteSBpbml0aWFsIHNlYXJjaCB3YXMgY29ycmVjdCAtIGl0J3MgKm9ubHkqIGluIGBtbTgxeF9tYWNfcmVzdGFydGAuXG5cbkkgc2hvdWxkIHByb2JhYmx5IGxvb2sgYXQgd2hhdCBlbHNlIGlzIHJlbGF0ZWQgdG8gdGhlIE1BQywgc28gSSB0aGluayBJIHdpbGwgY2hlY2sgYG1tODF4X21hY19yZWdpc3RlcmAgbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc4OTQsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNzowNTo0NC4wODMzNTU4ODlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzMjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjM2MSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIzNjE6XFx0aW50IG1tODF4X21hY19yZWdpc3RlcihzdHJ1Y3QgbW04MXggKm1vcnMpXFxuMjM2MjpcXHR7XFxuMjM2MzpcXHRcXHRpbnQgcmV0O1xcbjIzNjQ6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBtb3JzLVxcdTAwM2VodztcXG4yMzY1OlxcdFxcbjIzNjY6XFx0XFx0bW9ycy1cXHUwMDNldHhfcG93ZXJfbWJtID0gSU5UX01BWDtcXG4yMzY3OlxcdFxcdG1vcnMtXFx1MDAzZXR4X21heF9wb3dlcl9tYm0gPSBJTlRfTUFYO1xcbjIzNjg6XFx0XFx0bW9ycy1cXHUwMDNlcnRzX3RocmVzaG9sZCA9IElFRUU4MDIxMV9NQVhfUlRTX1RIUkVTSE9MRDtcXG4yMzY5OlxcdFxcbjIzNzA6XFx0XFx0cmV0ID0gbW04MXhfcHNfaW5pdChtb3JzKTtcXG4yMzcxOlxcdFxcdGlmIChyZXQpXFxuMjM3MjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjIzNzM6XFx0XFxuMjM3NDpcXHRcXHRtbTgxeF9tYWNfY29uZmlnX2h3KG1vcnMpO1xcbjIzNzU6XFx0XFx0bW04MXhfbWFjX2h3X3NjYW5faW5pdChtb3JzKTtcXG4yMzc2OlxcdFxcdG1tODF4X21hY19zdGFsZV90eF9zdGF0dXNfdGltZXJfaW5pdChtb3JzKTtcXG4yMzc3OlxcdFxcbjIzNzg6XFx0XFx0cmV0ID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KGh3KTtcXG4yMzc5OlxcdFxcdGlmIChyZXQpIHtcXG4yMzgwOlxcdFxcdFxcdGRldl9lcnIobW9ycy1cXHUwMDNlZGV2LCBcXFwiaWVlZTgwMjExX3JlZ2lzdGVyX2h3IGZhaWxlZCAlZFxcXCIsIHJldCk7XFxuMjM4MTpcXHRcXHRcXHRtbTgxeF9tYWNfdW5yZWdpc3Rlcihtb3JzKTtcXG4yMzgyOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMjM4MzpcXHRcXHR9XFxuMjM4NDpcXHRcXG4yMzg1OlxcdFxcdG1tODF4X3JjX2luaXQobW9ycyk7XFxuMjM4NjpcXHRcXG4yMzg3OlxcdFxcdC8qXFxuMjM4ODpcXHRcXHQgKiBBdCB0aGlzIHN0YWdlLCB3ZSBrbm93IGJ1cyBhbmQgcGFnZXIgc3lzdGVtIGludGVycnVwdHMgYXJlIGVuYWJsZWQuXFxuMjM4OTpcXHRcXHQgKiBUcmlnZ2VyIHRoZSByZWNlaXZlIHdvcmtxdWV1ZSB0byBkcmFpbiBhbnkgaW5jb21pbmcgY2hpcC10by1ob3N0XFxuMjM5MDpcXHRcXHQgKiBwZW5kaW5nIHBhY2tldHMgYmVlbiBwdXNoZWQgaW4gdGhlIHBlcmlvZCBiZXR3ZWVuIHRoZSBmaXJtd2FyZVxcbjIzOTE6XFx0XFx0ICogaW5pdGlhbGl6YXRpb24gYW5kIGludGVycnVwdHMgYmVpbmcgZW5hYmxlZC5cXG4yMzkyOlxcdFxcdCAqL1xcbjIzOTM6XFx0XFx0c2V0X2JpdChNTTgxWF9ISUZfRVZUX1JYX1BFTkQsIFxcdTAwMjZtb3JzLVxcdTAwM2VoaWYuZXZlbnRfZmxhZ3MpO1xcbjIzOTQ6XFx0XFx0cXVldWVfd29yayhtb3JzLVxcdTAwM2VjaGlwX3dxLCBcXHUwMDI2bW9ycy1cXHUwMDNlaGlmX3dvcmspO1xcbjIzOTU6XFx0XFxuMjM5NjpcXHRcXHRyZXR1cm4gcmV0O1xcbjIzOTc6XFx0fVxcbjIzOTg6XFx0XFxuMjM5OTpcXHR2b2lkIG1tODF4X21hY191bnJlZ2lzdGVyKHN0cnVjdCBtbTgxeCAqbW9ycylcXG4yNDAwOlxcdHtcXG4yNDAxOlxcdFxcdG1tODF4X3BzX2Rpc2FibGUobW9ycyk7XFxuMjQwMjpcXHRcXHRtbTgxeF9yY19kZWluaXQobW9ycyk7XFxuMjQwMzpcXHRcXHRtbTgxeF9tYWNfaHdfc2Nhbl9kZXN0cm95KG1vcnMpO1xcbjI0MDQ6XFx0XFxuMjQwNTpcXHRcXHRpZWVlODAyMTFfc3RvcF9xdWV1ZXMobW9ycy1cXHUwMDNlaHcpO1xcbjI0MDY6XFx0XFx0aWVlZTgwMjExX3VucmVnaXN0ZXJfaHcobW9ycy1cXHUwMDNlaHcpO1xcbjI0MDc6XFx0XFxuMjQwODpcXHRcXHRtbTgxeF9oaWZfZmx1c2hfdHhfZGF0YShtb3JzKTtcXG4yNDA5OlxcdFxcdG1tODF4X2hpZl9mbHVzaF9jbWRzKG1vcnMpO1xcbjI0MTA6XFx0XFx0bW04MXhfc3RhbGVfdHhfc3RhdHVzX3RpbWVyX2ZpbmlzaChtb3JzKTtcXG4yNDExOlxcdFxcdG1tODF4X3BzX2ZpbmlzaChtb3JzKTtcXG4yNDEyOlxcdFxcbjI0MTM6XFx0XFx0a2ZyZWUobW9ycy1cXHUwMDNlbWNhc3RfZmlsdGVyKTtcXG4yNDE0OlxcdH1cXG4yNDE1OlxcdFxcbjI0MTY6XFx0c3RydWN0IG1tODF4ICptbTgxeF9tYWNfYWxsb2Moc2l6ZV90IHByaXZfc2l6ZSwgc3RydWN0IGRldmljZSAqZGV2KVxcbjI0MTc6XFx0e1xcbjI0MTg6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9odyAqaHc7XFxuMjQxOTpcXHRcXHRzdHJ1Y3QgbW04MXggKm1vcnM7XFxuMjQyMDpcXHRcXG4yNDIxOlxcdFxcdGh3ID0gaWVlZTgwMjExX2FsbG9jX2h3KHNpemVvZigqbW9ycykgKyBwcml2X3NpemUsIFxcdTAwMjZtbTgxeF9vcHMpO1xcbjI0MjI6XFx0XFx0aWYgKCFodykge1xcbjI0MjM6XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJpZWVlODAyMTFfYWxsb2NfaHcgZmFpbGVkXFxcXHJcXFxcblxcXCIpO1xcbjI0MjQ6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMjQyNTpcXHRcXHR9XFxuMjQyNjpcXHRcXG4yNDI3OlxcdFxcdFNFVF9JRUVFODAyMTFfREVWKGh3LCBkZXYpO1xcbjI0Mjg6XFx0XFx0bWVtc2V0KGh3LVxcdTAwM2Vwcml2LCAwLCBzaXplb2YoKm1vcnMpKTtcXG4yNDI5OlxcdFxcbjI0MzA6XFx0XFx0bW9ycyA9IGh3LVxcdTAwM2Vwcml2O1xcbjI0MzE6XFx0XFx0bW9ycy1cXHUwMDNlaHcgPSBodztcXG4yNDMyOlxcdFxcdG1vcnMtXFx1MDAzZWRldiA9IGRldjtcXG4yNDMzOlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNm1vcnMtXFx1MDAzZWNtZF9sb2NrKTtcXG4yNDM0OlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNm1vcnMtXFx1MDAzZWNtZF93YWl0KTtcXG4yNDM1OlxcdFxcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXFx1MDAyNm1vcnMtXFx1MDAzZXR4X2VtcHR5X3dhaXRxKTtcXG4yNDM2OlxcdFxcbjI0Mzc6XFx0XFx0cmV0dXJuIG1vcnM7XFxuMjQzODpcXHR9XFxuMjQzOTpcXHRcXG4yNDQwOlxcdHZvaWQgbW04MXhfbWFjX2ZyZWUoc3RydWN0IG1tODF4ICptb3JzKVxcbjI0NDE6XFx0e1xcbjI0NDI6XFx0XFx0aWVlZTgwMjExX2ZyZWVfaHcobW9ycy1cXHUwMDNlaHcpO1xcbjI0NDM6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNzowNTo0NC4wODM1NjExNDlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5MTI5NTY3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBJbml0aWFsaXphdGlvbiBTZXF1ZW5jZSoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgYG1tODF4X2Z3X2luaXRgIHdhcyBhbHdheXMgY2FsbGVkIGRpcmVjdGx5IGZyb20gYG1tODF4X21hY19yZWdpc3RlcmAsIGJ1dCBJJ20gbm90IHNlZWluZyB0aGF0IGluIHRoZSBjb2RlIGZsb3cuIFRoYXQncyBhIHBvdGVudGlhbCBvdmVyc2lnaHQgb3IgcGVyaGFwcyBhIG1pc3JlbWVtYmVyZWQgZGV0YWlsIG9uIG15IHBhcnQsIG9yIGEgc3VidGxlIGNoYW5nZSBpbiB0aGUgZHJpdmVyIHN0cnVjdHVyZSBJJ20gbm90IGltbWVkaWF0ZWx5IGdyYXNwaW5nLiBJIG5lZWQgdG8gY2xhcmlmeSBob3cgdGhhdCBmaXJtd2FyZSBpbml0aWFsaXphdGlvbiBpcyBhY3R1YWxseSBoYXBwZW5pbmcuXG5cblJpZ2h0LCBsZXQncyBiYWNrIHVwIGFuZCBjaGVjayB0aGUgYnJvYWRlciBpbml0aWFsaXphdGlvbiBzY2hlbWUuIFRoZSBrZXkgc2VlbXMgdG8gbGllIGVsc2V3aGVyZSwgc28gSSdsbCBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiBgbW04MXhfY29yZV9pbml0YC4gVGhhdCdzIHdoZXJlIHRoZSBsb2dpY2FsIGZsb3cgaXMgYmVpbmcgaGFuZGxlZCwgc28gdGhhdCBtdXN0IGJlIHdoZXJlIHRoZSBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NTYzLCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNzowNTo0Ny40NzQ4NjAzNzVaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4NzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY3LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2NzpcXHRpbnQgbW04MXhfY29yZV9pbml0KHN0cnVjdCBtbTgxeCAqbW9ycylcXG4gIDY4OlxcdHtcXG4gIDY5OlxcdFxcdGludCByZXQ7XFxuICA3MDpcXHRcXG4gIDcxOlxcdFxcdHNldF9iaXQoTU04MVhfU1RBVEVfQ0hJUF9VTlJFU1BPTlNJVkUsIFxcdTAwMjZtb3JzLVxcdTAwM2VzdGF0ZV9mbGFncyk7XFxuICA3MjpcXHRcXHRzZXRfYml0KE1NODFYX1NUQVRFX1JFTE9BRF9GV19BRlRFUl9TVEFSVCwgXFx1MDAyNm1vcnMtXFx1MDAzZXN0YXRlX2ZsYWdzKTtcXG4gIDczOlxcdFxcbiAgNzQ6XFx0XFx0bW04MXhfY29yZV9pbml0X21hY19hZGRyKG1vcnMpO1xcbiAgNzU6XFx0XFxuICA3NjpcXHRcXHRyZXQgPSBtbTgxeF9jb3JlX2F0dGFjaF9yZWdzKG1vcnMpO1xcbiAgNzc6XFx0XFx0aWYgKHJldClcXG4gIDc4OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuICA3OTpcXHRcXG4gIDgwOlxcdFxcdG1vcnMtXFx1MDAzZWNoaXBfd3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShcXFwiY2hpcF93cVxcXCIpO1xcbiAgODE6XFx0XFx0aWYgKCFtb3JzLVxcdTAwM2VjaGlwX3dxKVxcbiAgODI6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuICA4MzpcXHRcXG4gIDg0OlxcdFxcdG1vcnMtXFx1MDAzZW5ldF93cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKFxcXCJuZXRfd3FcXFwiKTtcXG4gIDg1OlxcdFxcdGlmICghbW9ycy1cXHUwMDNlbmV0X3dxKSB7XFxuICA4NjpcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbiAgODc6XFx0XFx0XFx0Z290byBlcnJfY2hpcF93cTtcXG4gIDg4OlxcdFxcdH1cXG4gIDg5OlxcdFxcbiAgOTA6XFx0XFx0cmV0ID0gbW04MXhfaGlmX2luaXQobW9ycyk7XFxuICA5MTpcXHRcXHRpZiAocmV0KVxcbiAgOTI6XFx0XFx0XFx0Z290byBlcnJfd3FzO1xcbiAgOTM6XFx0XFxuICA5NDpcXHRcXHRyZXR1cm4gMDtcXG4gIDk1OlxcdFxcbiAgOTY6XFx0ZXJyX3dxczpcXG4gIDk3OlxcdFxcdGZsdXNoX3dvcmtxdWV1ZShtb3JzLVxcdTAwM2VuZXRfd3EpO1xcbiAgOTg6XFx0XFx0ZGVzdHJveV93b3JrcXVldWUobW9ycy1cXHUwMDNlbmV0X3dxKTtcXG4gIDk5OlxcdFxcbiAxMDA6XFx0ZXJyX2NoaXBfd3E6XFxuIDEwMTpcXHRcXHRmbHVzaF93b3JrcXVldWUobW9ycy1cXHUwMDNlY2hpcF93cSk7XFxuIDEwMjpcXHRcXHRkZXN0cm95X3dvcmtxdWV1ZShtb3JzLVxcdTAwM2VjaGlwX3dxKTtcXG4gMTAzOlxcdFxcbiAxMDQ6XFx0XFx0cmV0dXJuIHJldDtcXG4gMTA1OlxcdH1cXG4gMTA2OlxcdEVYUE9SVF9TWU1CT0xfR1BMKG1tODF4X2NvcmVfaW5pdCk7XFxuIDEwNzpcXHRcXG4gMTA4OlxcdGludCBtbTgxeF9jb3JlX3JlZ2lzdGVyKHN0cnVjdCBtbTgxeCAqbW9ycylcXG4gMTA5OlxcdHtcXG4gMTEwOlxcdFxcdHJldHVybiBtbTgxeF9tYWNfcmVnaXN0ZXIobW9ycyk7XFxuIDExMTpcXHR9XFxuIDExMjpcXHRFWFBPUlRfU1lNQk9MX0dQTChtbTgxeF9jb3JlX3JlZ2lzdGVyKTtcXG4gMTEzOlxcdFxcbiAxMTQ6XFx0dm9pZCBtbTgxeF9jb3JlX3VucmVnaXN0ZXIoc3RydWN0IG1tODF4ICptb3JzKVxcbiAxMTU6XFx0e1xcbiAxMTY6XFx0XFx0bW04MXhfbWFjX3VucmVnaXN0ZXIobW9ycyk7XFxuIDExNzpcXHR9XFxuIDExODpcXHRFWFBPUlRfU1lNQk9MX0dQTChtbTgxeF9jb3JlX3VucmVnaXN0ZXIpO1xcbiAxMTk6XFx0XFxuIDEyMDpcXHR2b2lkIG1tODF4X2NvcmVfZGVpbml0KHN0cnVjdCBtbTgxeCAqbW9ycylcXG4gMTIxOlxcdHtcXG4gMTIyOlxcdFxcdG1tODF4X2hpZl9maW5pc2gobW9ycyk7XFxuIDEyMzpcXHRcXHRmbHVzaF93b3JrcXVldWUobW9ycy1cXHUwMDNlbmV0X3dxKTtcXG4gMTI0OlxcdFxcdGRlc3Ryb3lfd29ya3F1ZXVlKG1vcnMtXFx1MDAzZW5ldF93cSk7XFxuIDEyNTpcXHRcXHRmbHVzaF93b3JrcXVldWUobW9ycy1cXHUwMDNlY2hpcF93cSk7XFxuIDEyNjpcXHRcXHRkZXN0cm95X3dvcmtxdWV1ZShtb3JzLVxcdTAwM2VjaGlwX3dxKTtcXG4gMTI3OlxcdH1cXG4gMTI4OlxcdEVYUE9SVF9TWU1CT0xfR1BMKG1tODF4X2NvcmVfZGVpbml0KTtcXG4gMTI5OlxcdFxcbiAxMzA6XFx0dm9pZCBtbTgxeF9jb3JlX2ZyZWUoc3RydWN0IG1tODF4ICptb3JzKVxcbiAxMzE6XFx0e1xcbiAxMzI6XFx0XFx0bW04MXhfbWFjX2ZyZWUobW9ycyk7XFxuIDEzMzpcXHR9XFxuIDEzNDpcXHRFWFBPUlRfU1lNQk9MX0dQTChtbTgxeF9jb3JlX2ZyZWUpO1xcbiAxMzU6XFx0XFxuIDEzNjpcXHRNT0RVTEVfQVVUSE9SKFxcXCJNb3JzZSBNaWNyb1xcXCIpO1xcbiAxMzc6XFx0TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJEcml2ZXIgc3VwcG9ydCBmb3IgTW9yc2UgTWljcm8gTU04MVggY29yZVxcXCIpO1xcbiAxMzg6XFx0TU9EVUxFX0xJQ0VOU0UoXFxcIkR1YWwgQlNEL0dQTFxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNzowNTo0Ny40NzQ5ODE0NzVaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM1ODM3NDE1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZpcm13YXJlIExvYWRpbmcgTG9naWMqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBtbTgxeF9md19pbml0YCBmdW5jdGlvbiBpcyBhY3R1YWxseSB0cmlnZ2VyZWQuIEhtbSwgaXQgbG9va3MgbGlrZSBpdCdzIG9ubHkgY2FsbGVkIHdpdGhpbiBgbW04MXhfbWFjX3Jlc3RhcnRgLiBOb3csIHdoZXJlIGRvZXMgKnRoYXQqIGdldCBjYWxsZWQ/IFJpZ2h0LCBgbW04MXhfbWFjX3Jlc3RhcnRgIGlzIGNhbGxlZCBmcm9tIGBtbTgxeF9tYWNfb3BzX2FkZF9pbnRlcmZhY2VgIGFuZCBhbHNvIGBtbTgxeF9yZWdfbm90aWZpZXJgLiBTbywgYWRkaW5nIGFuIGludGVyZmFjZSByZXN0YXJ0cyB0aGUgTUFDLCBhbmQgKnRoYXQqIGxvYWRzIHRoZSBmaXJtd2FyZS4gTWFrZXMgc2Vuc2UsIHRoYXQncyBhIGNvbXBsZXRlbHkgdmFsaWQgcGF0aC4gVGhpcyBzaG91bGQgYmUgYSByZWFjaGFibGUgcG9pbnQuXG5cblRoZSBwYXRjaCBpdHNlbGYgZm9jdXNlcyBvbiB0aGUgZmlybXdhcmUgcGFyc2luZywgd2hpY2ggbWFrZXMgc2Vuc2UgaWYgdGhlIGxvYWRpbmcgcHJvY2VzcyBpcyBzb2xpZC4gVGhlIGZpcm13YXJlJ3MgbG9hZGVkIHVzaW5nIGByZXF1ZXN0X2Zpcm13YXJlYCwgd2hpY2ggaXMgcHJldHR5IHN0YW5kYXJkLiBOb3csIGNhbiBzeXprYWxsZXIgYWN0dWFsbHkgKmZ1enoqIHRoaXM/IExldCBtZSBzZWXigKYgSSBrbm93IHN5emthbGxlciBoYXMgYHN5el9tb3VudF9pbWFnZWAsIG9yIGNhbiBtb2NrIGByZXF1ZXN0X2Zpcm13YXJlYCBpZiBzdXBwb3J0ZWQuLi4gYnV0LCB3YWl0LCBpdCBjYW4gYWxzbyBqdXN0IGRyb3AgZmlsZXMgaW4gYC9saWIvZmlybXdhcmVgLCBvciB1c2UgdGhlIGZpcm13YXJlIGxvYWRlciBmYWxsYmFjay4gT2gsIHllYWgsIHN5emthbGxlciAqZG9lcyogZnV6eiBmaXJtd2FyZSBsb2FkaW5nIHZpYSBgcmVxdWVzdF9maXJtd2FyZWAsIGJ5IGludGVyY2VwdGluZyBpdCBvciBwcm92aWRpbmcgZmlsZXMgZGlyZWN0bHkuXG5cbkFscmlnaHQsIGxldCdzIG5haWwgZG93biBwcmVjaXNlbHkgd2hpY2ggZnVuY3Rpb25zIGFyZSBiZWluZyBtb2RpZmllZCBoZXJlLiBMb29rcyBsaWtlOiBgbW04MXhfZndfcGFyc2VfaW5mb2AsIGBtbTgxeF9md19sb2FkX2Z3YCwgYG1tODF4X2Z3X3JlYWRfZXh0X2hvc3RfdGFibGVgLCBhbmQgYG1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibGAuXG5cbk5vdyB0aGUgcXVlc3Rpb24gaXMsICppcyogYG1tODF4X2Z3X3BhcnNlX2luZm9gIHJlYWNoYWJsZT8gV2UgbmVlZCB0byB2ZXJpZnkgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA4ODQsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNzowNTo1My44MzMzNTc4NTFaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzMxMDMwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtbTgxeF9md19wYXJzZV9pbmZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYz0yOD1zdGF0aWMgaW50IG1tODF4X2Z3X2dldF9oZWFkZXIoY29uc3QgdTggKmRhdGEsIEVsZjMyX0VoZHIgKmVoZHIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmMtNTQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jOjU1OnN0YXRpYyB2b2lkIG1tODF4X2Z3X3BhcnNlX2luZm8oc3RydWN0IG1tODF4ICptb3JzLCBjb25zdCB1OCAqZGF0YSwgaW50IGxlbmd0aClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmMtNTYte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jPTExMD1zdGF0aWMgaW50IG1tODF4X2Z3X2xvYWRfZncoc3RydWN0IG1tODF4ICptb3JzLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTE4NC1cXHRcXHRcXHQgICAgIHNpemVvZihcXFwiLmZ3X2luZm9cXFwiKSkpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jOjE4NTpcXHRcXHRcXHRtbTgxeF9md19wYXJzZV9pbmZvKG1vcnMsIGZ3LVxcdTAwM2VkYXRhICsgc2hkci5zaF9vZmZzZXQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTE4Ni1cXHRcXHRcXHRcXHRcXHQgICAgc2hkci5zaF9zaXplKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDc6MDU6NTMuOTQwNjc0NzNaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY5NzY3NTU3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBGaXJtd2FyZSBMb2FkaW5nIFNlcXVlbmNlKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGZpcm13YXJlIGxvYWRpbmcgcHJvY2Vzcy4gSSBzZWUgdGhhdCB0aGUgZnVuY3Rpb24gYG1tODF4X2Z3X2xvYWRfZndgIGlzIGRlZmluaXRlbHkgdGhlIG9uZSBpbml0aWF0aW5nIHRoZSBsb2FkLCB0aGF0J3MgY2xlYXIgZW5vdWdoLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3csIGhvdyBpdCdzIGJlaW5nIGZlZCwgd2hlcmUgdGhlIGFjdHVhbCBmaXJtd2FyZSBpbWFnZSBjb21lcyBmcm9tLCBhbmQgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGJlaW5nIGxvYWRlZC4gSSdtIG5vdGluZyB0aGF0LlxuXG5MZXQgbWUgYWxzbyBjaGVjayB3aGF0IGBtbTgxeF9md19yZWFkX2V4dF9ob3N0X3RhYmxlYCBpcyBhYm91dC4gSXMgaXQgcmVhZGluZyBhIGZpbGU/IEZyb20gZXh0ZXJuYWwgbWVtb3J5PyBPciBwZXJoYXBzIGFuIGludGVybmFsIGxvb2t1cCB0YWJsZT8gSXMgdGhhdCB0aGUgdGFibGUgb2YgXCJleHRlcm5hbCBob3N0XCIgaW5mb3JtYXRpb24/IEknbGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSB0aGF0IGZ1bmN0aW9uIHRvIGRldGVybWluZSB3aGF0IGl0IGRvZXMsIHRoZSBuYXR1cmUgb2YgdGhlIGRhdGEgaW52b2x2ZWQgYW5kIGhvdyB0aGlzIHJlbGF0ZXMgdG8gbXkgZmlybXdhcmUgbG9hZGluZyBzZXF1ZW5jZS4gSXQncyBsaWtlbHkgaW52b2x2ZWQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgYnJvYWRlciBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTkzMCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA3OjA1OjU4LjYzODM1MzIzM1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU2MjI4NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW04MXhfZndfcmVhZF9leHRfaG9zdF90YWJsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmM9NDQyPXN0YXRpYyBpbnQgbW04MXhfZndfZ2V0X2hvc3RfdGFibGVfcHRyKHN0cnVjdCBtbTgxeCAqbW9ycylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy00NTctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jOjQ1ODpzdGF0aWMgaW50IG1tODF4X2Z3X3JlYWRfZXh0X2hvc3RfdGFibGUoc3RydWN0IG1tODF4ICptb3JzLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy00NTktXFx0XFx0XFx0XFx0XFx0c3RydWN0IGV4dF9ob3N0X3RibCAqKmV4dF9ob3N0X3RhYmxlKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jPTU2ND1pbnQgbW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsKHN0cnVjdCBtbTgxeCAqbW9ycylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy01NzAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jOjU3MTpcXHRyZXQgPSBtbTgxeF9md19yZWFkX2V4dF9ob3N0X3RhYmxlKG1vcnMsIFxcdTAwMjZleHRfaG9zdF90YWJsZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTU3Mi1cXHRpZiAocmV0IHx8ICFleHRfaG9zdF90YWJsZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDc6MDU6NTguNzEzOTg0NzkyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMjc1MzAxOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgRmlybXdhcmUgUGFyc2luZyoqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgZmlybXdhcmUgcGFyc2luZywgc3BlY2lmaWNhbGx5IHRoZSBgbW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsYCBmdW5jdGlvbi4gTXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvIHRoZSBwb3RlbnRpYWwgY29tcGxleGl0aWVzLiBUaGlzIGZ1bmN0aW9uIG5hbWUgc3Ryb25nbHkgc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIGFuIGV4dGVuZGVkIGhvc3QgdGFibGUsIG1lYW5pbmcgd2UncmUgbGlrZWx5IHByb2Nlc3NpbmcgbW9yZSB0aGFuIGp1c3QgYmFzaWMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGhvc3Qgc3lzdGVtLiBJdCBjb3VsZCBiZSBwYXJzaW5nIGNvbmZpZ3VyYXRpb25zLCByZXNvdXJjZSBhbGxvY2F0aW9ucywgZGV2aWNlLXNwZWNpZmljIHNldHRpbmdzLi4uIHRoZSBwb3NzaWJpbGl0aWVzIGFyZSB2YXN0LlxuXG5JJ20gc3RhcnRpbmcgdG8gdGhpbmsgYWJvdXQgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzLiBXaGF0IGZvcm1hdCBpcyB0aGlzIGhvc3QgdGFibGUgaW4/IElzIGl0IGEgc3RhbmRhcmQgZm9ybWF0IG9yIHNvbWV0aGluZyBwcm9wcmlldGFyeT8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBiaW5hcnkgYmxvYiwgYSBzdHJ1Y3R1cmVkIHRleHQgZmlsZSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFdoYXQga2luZCBvZiBlcnJvciBoYW5kbGluZyBpcyBpbiBwbGFjZT8gQXJlIHRoZXJlIGNoZWNrc3VtcyBvciBpbnRlZ3JpdHkgY2hlY2tzIHRvIGVuc3VyZSBkYXRhIHZhbGlkaXR5P1xuXG5NeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoaXMgd2lsbCBpbnZvbHZlIGJpdC1sZXZlbCBtYW5pcHVsYXRpb24sIG1lbW9yeSBtYW5hZ2VtZW50IGNvbnNpZGVyYXRpb25zIGlmIHRoZSB0YWJsZSBpcyBsYXJnZSwgYW5kIHBvdGVudGlhbGx5IGRlYWxpbmcgd2l0aCBlbmRpYW5uZXNzIGlzc3VlcyBkZXBlbmRpbmcgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuIEnigJlsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjYWxsIHdpdGhpbiB0aGUgbGFyZ2VyIGZpcm13YXJlIGltYWdlIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGluZm9ybWF0aW9uIGlzIHVzZWQuIFRoaXMga2luZCBvZiBwYXJzaW5nIGZ1bmN0aW9uIGlzIHdoZXJlIHZ1bG5lcmFiaWxpdGllcyBsaWtlIGJ1ZmZlciBvdmVyZmxvd3Mgb3IgZm9ybWF0IHN0cmluZyBidWdzIHRlbmQgdG8gaGlkZSwgc28gSSdtIGFscmVhZHkgbWVudGFsbHkgcHJlcGFyaW5nIHRvIHNjcnV0aW5pemUgdGhlIGNvZGUgZm9yIHRob3NlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjU2MywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA3OjA2OjAyLjc0MTUxNzEzMloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwNjA3NDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmM9NTU0PXN0YXRpYyB2b2lkIG1tODF4X2Z3X3VwZGF0ZV92YWxpZGF0ZV9za2JfY2hlY2tzdW0oXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmMtNTYzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYzo1NjQ6aW50IG1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibChzdHJ1Y3QgbW04MXggKm1vcnMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTU2NS17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3Lmg9MTQwPWludCBtbTgxeF9md19pbml0KHN0cnVjdCBtbTgxeCAqbW9ycywgYm9vbCByZXNldCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5oOjE0MTppbnQgbW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsKHN0cnVjdCBtbTgxeCAqbW9ycyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5oLTE0Mi1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM9MjEwNz1zdGF0aWMgaW50IG1tODF4X21hY19yZXN0YXJ0KHN0cnVjdCBtbTgxeCAqbW9ycylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjE0Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jOjIxNDg6XFx0cmV0ID0gbW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsKG1vcnMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjE0OS1cXHRpZiAocmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA3OjA2OjAyLjg0MjEzMTMwMVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4Mzc2ODk3OTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKipcblxuT2theSwgc28gSSd2ZSB0cmFjZWQgZG93biBob3cgdGhpcyBgbW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsYCBmdW5jdGlvbiBpcyBjYWxsZWQsIGFuZCBpdCBsb29rcyBsaWtlIGl0J3MgYWxzbyBjYWxsZWQgZnJvbSBgbW04MXhfbWFjX3Jlc3RhcnRgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIHdoaWNoIG1lYW5zIHRoZSBmaXJtd2FyZSBwYXJzaW5nIGxvZ2ljIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGR1cmluZyBydW50aW1lIGFuZCB0aGVyZWZvcmUgYSB2YWxpZCB0YXJnZXQgZm9yIGZ1enppbmcuIEV4Y2VsbGVudCFcblxuTm93LCB3aGljaCBmdW5jdGlvbnMgYXJlIHRoZSBtb3N0IHByb21pc2luZz8gTGV0J3Mgc2VlLi4uIEluaXRpYWxseSwgSSB3YXMgbG9va2luZyBhdCBgbW04MXhfZndfcGFyc2VfaW5mb2AuIEl0J3Mgc3RhdGljLCBzbyBpdCdzIGEgYml0IGxlc3MgYXR0cmFjdGl2ZSBidXQgaXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB3aGVyZSB3ZSdyZSBnb2luZy4gTGV0J3MgZGlnIGRlZXBlci4gSXQgbG9va3MgbGlrZSBpdCdzIGEgd2hpbGUgbG9vcCB3aXRoIGEgc3dpdGNoIHN0YXRlbWVudC4gSXQncyBwcm9iYWJseSBub3QgaW5saW5lZCBiZWNhdXNlIHRoYXQncyBhIGRlY2VudCBzaXplLCBldmVuIHRob3VnaCBpdCdzIHN0YXRpYy4gQmV0dGVyIHRvIHBpdm90IGFuZCBmb2N1cyBvbiBgbW04MXhfZndfbG9hZF9md2Agc2luY2UgaXQgY2FsbHMgYG1tODF4X2Z3X3BhcnNlX2luZm9gLiBcblxuV2FpdCBhIG1pbnV0ZSwgYG1tODF4X2Z3X2luaXRgIGlzICpub3QqIHN0YXRpYywgc28gdGhhdCdzIGRlZmluaXRlbHkgYSBwb2ludCBvZiBpbnRlcmVzdCwgYW5kIGBtbTgxeF9md19wYXJzZV9leHRfaG9zdF90YmxgIGlzIGFsc28gbm9uLXN0YXRpYywgc28gd2UndmUgZ290IGEgY291cGxlIG9mIGdvb2QgbGVhZHMgdGhlcmUhXG5cbk9rYXksIGxldCdzIHByaW9yaXRpemUgYW5kIGludmVzdGlnYXRlIGBtbTgxeF9md19pbml0YCBhbmQgYG1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibGAgYW5kIHNlZSB3aGVyZSB3ZSBhcmUuXG5cbkp1c3QgdG8gYmUgc2FmZSwgSSdsbCBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIHRvIHNlZSBpZiB0aGUgYE1NODFYYCBzeW1ib2wgaXMgZGVmaW5lZC4gR290dGEgY2hlY2sgdGhhdCBvZmYgdGhlIGxpc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMzMzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA3OjA2OjExLjIxOTAzMjM0OVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4NDM1MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNTTgxWFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L0tjb25maWctMi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L0tjb25maWc6Mzpjb25maWcgTU04MVhcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L0tjb25maWctNC1cXHR0cmlzdGF0ZSBcXFwiTW9yc2UgTWljcm8gTU04MXggd2lyZWxlc3MgZGV2aWNlc1xcXCIgaWYgQ09NUElMRV9URVNUXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L0tjb25maWctMTEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9LY29uZmlnOjEyOmNvbmZpZyBNTTgxWF9VU0JcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L0tjb25maWctMTMtXFx0dHJpc3RhdGUgXFxcIk1vcnNlIE1pY3JvIE1NODF4IFVTQiBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9LY29uZmlnLTE5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvS2NvbmZpZzoyMDpjb25maWcgTU04MVhfU0RJT1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvS2NvbmZpZy0yMS1cXHR0cmlzdGF0ZSBcXFwiTW9yc2UgTWljcm8gTU04MXggU0RJTyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNzowNjoxMS4zMjc0NzExNjhaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU5Mzc0NjgyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgTW9kdWxlIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBNTTgxWF9VU0JgIGFuZCBgTU04MVhgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkcmlsbCBkb3duIGludG8gdGhlaXIgaW50ZXJkZXBlbmRlbmNpZXMuIFRoaXMgaXMgYSBjcnVjaWFsIGZpcnN0IHN0ZXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoaWNoIG90aGVyIG1vZHVsZXMsIGRyaXZlcnMsIGxpYnJhcmllcywgb3IgZXZlbiBzcGVjaWZpYyBoYXJkd2FyZSBjb21wb25lbnRzIHRoZXNlIHJlbHkgb24uIEFyZSB3ZSB0YWxraW5nIGFib3V0IGNvcmUga2VybmVsIG1vZHVsZXMsIHVzZXItc3BhY2UgdXRpbGl0aWVzLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZCB3aXRoaW4gb3VyIHByb3ByaWV0YXJ5IHN0YWNrPyBJIG5lZWQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIOKAkyBhIGRlcGVuZGVuY3kgZ3JhcGggcmVhbGx5IOKAkyB0byBzZWUgdGhlIGZ1bGwgc2NvcGUuXG5cblNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0OlxuXG4qICAgKipFeHBsaWNpdCBEZXBlbmRlbmNpZXM6KiogV2hhdCdzIGxpc3RlZCBpbiB0aGUgbWFrZWZpbGVzIG9yIGNvbmZpZ3VyYXRpb24gZmlsZXM/IEFueSBvYnZpb3VzIGByZXF1aXJlc2AgZGlyZWN0aXZlcyBvciBidWlsZCBmbGFncz9cbiogICAqKkltcGxpY2l0IERlcGVuZGVuY2llczoqKiBXaGVyZSBkbyB0aGV5ICp1c2UqIGZ1bmN0aW9uYWxpdHkgdGhhdCBpc24ndCBkaXJlY3RseSBkZWNsYXJlZD8gQXJlIHRoZXJlIHNoYXJlZCByZXNvdXJjZXMgbGlrZSBtZW1vcnkgcmVnaW9ucywgaW50ZXJydXB0IGhhbmRsZXJzLCBvciBkZXZpY2UgcmVnaXN0ZXJzP1xuKiAgICoqVmVyc2lvbmluZyBhbmQgQ29tcGF0aWJpbGl0eToqKiBBcmUgdGhlcmUgdmVyc2lvbiBjb25zdHJhaW50cyBvbiB0aGUgbW9kdWxlcyB0aGV5IGRlcGVuZCBvbj8gV2hhdCBoYXBwZW5zIGlmIGEgZGVwZW5kZW50IG1vZHVsZSBpcyB1cGRhdGVkIG9yIHBhdGNoZWQ/IENvbXBhdGliaWxpdHkgcHJvYmxlbXMgaGVyZSBhcmUgdGhlIHdvcnN0LlxuKiAgICoqSGFyZHdhcmUgQWJzdHJhY3Rpb24gTGF5ZXIgKEhBTCk6KiogSG93IGFic3RyYWN0IGlzIHRoZSBoYXJkd2FyZSBhY2Nlc3M/IEFyZSB0aGV5IHRhbGtpbmcgZGlyZWN0bHkgdG8gcmVnaXN0ZXJzIG9yIHJlbHlpbmcgb24gYSB3ZWxsLWRlZmluZWQgSEFMIHRoYXQgSSdtIGFscmVhZHkgZmFtaWxpYXIgd2l0aD8gVGhpcyBjYW4gZ2l2ZSBtZSBzb21lIGhpbnRzIHRvIHN0YXJ0IHdpdGguXG4qICAgKipFeHRlcm5hbCBMaWJyYXJpZXM6KiogSSdsbCBuZWVkIHRvIGNoZWNrIGZvciBleHRlcm5hbCBsaWJyYXJpZXMgYW5kIHRoZWlyIHZlcnNpb25zLiBBbnkgaXNzdWVzIGluIHRoZSBwYXN0PyBBbnkga25vd24gdnVsbmVyYWJpbGl0aWVzIHRoYXQgY291bGQgYWZmZWN0IHRoZXNlP1xuXG5UaGUgZ29hbCBpcyB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB3aGVyZSBjaGFuZ2VzIGluIGVpdGhlciBgTU04MVhfVVNCYCBvciBgTU04MVhgIGNvdWxkIHByb3BhZ2F0ZSBhbmQgd2hhdCBwb3RlbnRpYWwgaW1wYWN0IHRoZXkgY291bGQgaGF2ZSBvbiB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLiBUaGlzIGJhc2VsaW5lIGtub3dsZWRnZSBpcyBjcml0aWNhbCBmb3IgZWZmaWNpZW50IGRlYnVnZ2luZywgZmVhdHVyZSBpbXBsZW1lbnRhdGlvbiwgYW5kIGFueSBzb3J0IG9mIG1vZGlmaWNhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQyNDgsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNzowNjoxNS45MjEyMjA3NDJaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ1NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0XFxuICAgMzpcXHRjb25maWcgTU04MVhcXG4gICA0OlxcdFxcdHRyaXN0YXRlIFxcXCJNb3JzZSBNaWNybyBNTTgxeCB3aXJlbGVzcyBkZXZpY2VzXFxcIiBpZiBDT01QSUxFX1RFU1RcXG4gICA1OlxcdFxcdGRlcGVuZHMgb24gTUFDODAyMTFcXG4gICA2OlxcdFxcdHNlbGVjdCBGV19MT0FERVJcXG4gICA3OlxcdFxcdHNlbGVjdCBDUkM3XFxuICAgODpcXHRcXHRoZWxwXFxuICAgOTpcXHRcXHQgIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3Igd2lyZWxlc3MgZGV2aWNlcyBiYXNlZFxcbiAgMTA6XFx0XFx0ICBvbiBNb3JzZSBNaWNybyBNTTgxeHggY2hpcHNldHMuXFxuICAxMTpcXHRcXG4gIDEyOlxcdGNvbmZpZyBNTTgxWF9VU0JcXG4gIDEzOlxcdFxcdHRyaXN0YXRlIFxcXCJNb3JzZSBNaWNybyBNTTgxeCBVU0Igc3VwcG9ydFxcXCJcXG4gIDE0OlxcdFxcdGRlcGVuZHMgb24gTUFDODAyMTEgXFx1MDAyNlxcdTAwMjYgVVNCXFxuICAxNTpcXHRcXHRzZWxlY3QgTU04MVhcXG4gIDE2OlxcdFxcdGhlbHBcXG4gIDE3OlxcdFxcdCAgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciB0aGUgVVNCIGludGVyZmFjZSBvZlxcbiAgMTg6XFx0XFx0ICBkZXZpY2VzIHVzaW5nIHRoZSBNb3JzZSBNaWNybyBNTTgxeCBjaGlwc2V0LlxcbiAgMTk6XFx0XFxuICAyMDpcXHRjb25maWcgTU04MVhfU0RJT1xcbiAgMjE6XFx0XFx0dHJpc3RhdGUgXFxcIk1vcnNlIE1pY3JvIE1NODF4IFNESU8gc3VwcG9ydFxcXCJcXG4gIDIyOlxcdFxcdGRlcGVuZHMgb24gTUFDODAyMTEgXFx1MDAyNlxcdTAwMjYgTU1DXFxuICAyMzpcXHRcXHRzZWxlY3QgTU04MVhcXG4gIDI0OlxcdFxcdGhlbHBcXG4gIDI1OlxcdFxcdCAgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciB0aGUgU0RJTyBpbnRlcmZhY2Ugb2ZcXG4gIDI2OlxcdFxcdCAgZGV2aWNlcyB1c2luZyB0aGUgTW9yc2UgTWljcm8gTU04MXggY2hpcHNldC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDc6MDY6MTUuOTIxMzE3MTcyWiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNzkwMTg2OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZC5cblxuKipFbmFibGluZyBVU0IgR2FkZ2V0IFRlc3RpbmcgYW5kIFdMQU4gVmVuZG9yIFN1cHBvcnQqKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcsIHRvIGdldCB0aGlzIFVTQiBnYWRnZXQgdGVzdGluZyBmb3IgdGhlIE1NODFYIHdvcmtpbmcsIHdlIGFic29sdXRlbHkgbmVlZCB0byBlbnN1cmUgYE1NODFYX1VTQmAgaXMgZW5hYmxlZC4gVGhhdCdzIGEgbm8tYnJhaW5lciwgdGhhdCdzIHdoYXQncyBnb2luZyB0byBhbGxvdyB0aGUgc3lzdGVtIHRvIHJlY29nbml6ZSB0aGUgVVNCIGdhZGdldCBmdW5jdGlvbmFsaXR5IG9mIHRoaXMgc3BlY2lmaWMgcGllY2Ugb2YgaGFyZHdhcmUuIEkgY2FuJ3QgZXZlbiAqdGhpbmsqIGFib3V0IHRlc3Rpbmcgd2l0aG91dCB0aGF0LlxuXG5BbmQgdGhlbiwgYWxvbmdzaWRlIHRoYXQsIEknbSBtYWtpbmcgc3VyZSBgV0xBTl9WRU5ET1JfTU9SU0VNSUNST2AgaXMgZW5hYmxlZCB0b28uIEl0J3MgY3J1Y2lhbCB3ZSBkb24ndCBvdmVybG9vayBhbnkgZGVwZW5kZW5jaWVzIG9yIHVuZGVybHlpbmcgdmVuZG9yLXNwZWNpZmljIHJlcXVpcmVtZW50cy4gV2l0aG91dCBlbmFibGluZyB0aGlzIHN1cHBvcnQsIHdlJ3JlIGxpa2VseSBnb2luZyB0byBydW4gaW50byBpc3N1ZXMgd2l0aCB0aGUgd2lyZWxlc3MgY29tcG9uZW50cyB3aGVuIHdlIHN0YXJ0IHRlc3RpbmcuIEl0IGlzIGEgZ29vZCBwcmFjdGljZSB0byBlbnN1cmUgYWxsIHRoZSByZWxldmFudCBwYXJ0cyBvZiB0aGUgc3lzdGVtIGFyZSB1cCBhbmQgcnVubmluZywgdG8gYXZvaWQgdGhlIGZydXN0cmF0aW9uIG9mIHRyb3VibGVzaG9vdGluZyB0aGUgd3JvbmcgdGhpbmdzLiBCZXN0IHRvIGJlIHByZXBhcmVkLCByaWdodD9cblxuXG4iLCJJbnB1dFRva2VucyI6MzUwNTIsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA3OjA2OjIwLjMwMDM0MDI1OFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc1MjMyNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFdMQU5fVkVORE9SX01PUlNFTUlDUk9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9LY29uZmlnOjI6Y29uZmlnIFdMQU5fVkVORE9SX01PUlNFTUlDUk9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL0tjb25maWctMy1cXHRib29sIFxcXCJNb3JzZSBNaWNybyBkZXZpY2VzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNzowNjoyMC4zODc4NzI1MzdaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTkwNTU2ODQ5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1vcnNlIE1pY3JvIEZpcm13YXJlIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGBXTEFOX1ZFTkRPUl9NT1JTRU1JQ1JPYCBhbmQgYE1NODFYX1VTQmAgY29uZmlndXJhdGlvbnMgaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gc3BlY2lmaWMgZnVuY3Rpb25zIHdpdGhpbiB0aGUgTW9yc2UgTWljcm8gZHJpdmVyIHRvIHVuZGVyc3RhbmQgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBmaXJtd2FyZSBsb2FkaW5nIHByb2Nlc3MuIEknbSBzZWVpbmcgdGhhdCBgbW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsYCBhbmQgYG1tODF4X2Z3X2luaXRgIGFyZSBrZXkuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBtbTgxeF9md19sb2FkX2Z3YCwgYF9fbW04MXhfZndfZmxhc2hgLCBhbmQgYG1tODF4X2Z3X2ZsYXNoYC4gSXQgbG9va3MgbGlrZSBgbW04MXhfZndfbG9hZF9md2AgaXMgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZywgYnV0IGl0J3MgY2FsbGVkIGJ5IGBfX21tODF4X2Z3X2ZsYXNoYCwgd2hpY2ggaXMgdGhlbiBjYWxsZWQgYnkgYG1tODF4X2Z3X2ZsYXNoYCwgYW5kIGZpbmFsbHksIHRoYXQgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGBtbTgxeF9md19pbml0YC4gU2luY2UgYG1tODF4X2Z3X2luaXRgIGlzIGF0IHRoZSBjb3JlIG9mIHRoaXMgY2hhaW4sIGl0IGxvb2tzIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIGNhbiBxdWlja2x5IHNlZSB0aGF0IGBtbTgxeF9md19wYXJzZV9leHRfaG9zdF90YmxgIGlzIG5vdCBzdGF0aWMuXG5cbkknbSBjb25maXJtaW5nIHRoYXQgYG1tODF4X2Z3X2luaXRgIGlzIG5vbi1zdGF0aWMgYXMgd2VsbC4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYG1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibGAgaXMgZGVmaW5pdGVseSBub24tc3RhdGljLCBhbmQgYWxzbyB0aGF0IGBtbTgxeF9md19pbml0YCBpcywgdG9vLlxuXG5Ob3cgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBhY3R1YWwgY29kZSBmb3IgYG1tODF4X2Z3X2luaXRgLiBJJ2xsIGZpbmQgaXQgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuY2AgYW5kIHN0YXJ0IGRpZ2dpbmcgZGVlcGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTQ0OSwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNzowNjoyNi4yOTM0NDUwOTlaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwNjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MTksXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MTk6XFx0aW50IG1tODF4X2Z3X2luaXQoc3RydWN0IG1tODF4ICptb3JzLCBib29sIHJlc2V0KVxcbiA3MjA6XFx0e1xcbiA3MjE6XFx0XFx0aW50IHJldDtcXG4gNzIyOlxcdFxcdGludCBib2FyZF9pZDtcXG4gNzIzOlxcdFxcdGNoYXIgKmJjZl9wYXRoID0gTlVMTDtcXG4gNzI0OlxcdFxcdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncgPSBOVUxMO1xcbiA3MjU6XFx0XFx0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpiY2YgPSBOVUxMO1xcbiA3MjY6XFx0XFxuIDcyNzpcXHRcXHRib2FyZF9pZCA9IG1tODF4X2h3X290cF9nZXRfYm9hcmRfdHlwZShtb3JzKTtcXG4gNzI4OlxcdFxcbiA3Mjk6XFx0XFx0aWYgKCFtbTgxeF9od19vdHBfdmFsaWRfYm9hcmRfdHlwZShib2FyZF9pZCkpIHtcXG4gNzMwOlxcdFxcdFxcdGRldl9lcnIobW9ycy1cXHUwMDNlZGV2LFxcbiA3MzE6XFx0XFx0XFx0XFx0XFxcIk9UUCBub3Qgc2V0LCB1bmFibGUgdG8gZGV0ZXJtaW5lIEJDRiB0byB1c2VcXFwiKTtcXG4gNzMyOlxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuIDczMzpcXHRcXHRcXHRnb3RvIG91dDtcXG4gNzM0OlxcdFxcdH1cXG4gNzM1OlxcdFxcbiA3MzY6XFx0XFx0ZGV2X2RiZyhtb3JzLVxcdTAwM2VkZXYsIFxcXCJVc2luZyBib2FyZCB0eXBlIDB4JTA0eCBmcm9tIE9UUFxcXCIsIGJvYXJkX2lkKTtcXG4gNzM3OlxcdFxcbiA3Mzg6XFx0XFx0cmV0ID0gbW04MXhfZndfcmVxdWVzdChtb3JzLCBcXHUwMDI2ZncpO1xcbiA3Mzk6XFx0XFx0aWYgKHJldClcXG4gNzQwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA3NDE6XFx0XFxuIDc0MjpcXHRcXHRiY2ZfcGF0aCA9IGthc3ByaW50ZihHRlBfS0VSTkVMLFxcbiA3NDM6XFx0XFx0XFx0XFx0ICAgICBNTTgxWF9GV19ESVJcXG4gNzQ0OlxcdFxcdFxcdFxcdCAgICAgXFxcIi92JXUvYmNmX2JvYXJkdHlwZV8lMDR4XFxcIiBNTTgxWF9GV19FWFQsXFxuIDc0NTpcXHRcXHRcXHRcXHQgICAgIG1vcnMtXFx1MDAzZWZ3X21ham9yLCBib2FyZF9pZCk7XFxuIDc0NjpcXHRcXHRpZiAoIWJjZl9wYXRoKSB7XFxuIDc0NzpcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbiA3NDg6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDc0OTpcXHRcXHR9XFxuIDc1MDpcXHRcXG4gNzUxOlxcdFxcdHJldCA9IHJlcXVlc3RfZmlybXdhcmUoXFx1MDAyNmJjZiwgYmNmX3BhdGgsIG1vcnMtXFx1MDAzZWRldik7XFxuIDc1MjpcXHRcXHRpZiAocmV0KSB7XFxuIDc1MzpcXHRcXHRcXHRpZiAocmV0ID09IC1FTk9FTlQpXFxuIDc1NDpcXHRcXHRcXHRcXHRkZXZfZXJyKG1vcnMtXFx1MDAzZWRldiwgXFxcIkJDRiAlcyBub3QgZm91bmRcXFxcblxcXCIsIGJjZl9wYXRoKTtcXG4gNzU1OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA3NTY6XFx0XFx0fVxcbiA3NTc6XFx0XFxuIDc1ODpcXHRcXHRkZXZfaW5mbyhtb3JzLVxcdTAwM2VkZXYsIFxcXCJMb2FkZWQgQkNGIGZyb20gJXMsIHNpemUgJXp1LCBjcmMzMiAweCUwOHhcXFxcblxcXCIsXFxuIDc1OTpcXHRcXHRcXHQgYmNmX3BhdGgsIGJjZi1cXHUwMDNlc2l6ZSwgYmluYXJ5X2NyYyhiY2YpKTtcXG4gNzYwOlxcdFxcbiA3NjE6XFx0XFx0cmV0ID0gbW04MXhfZndfZmxhc2gobW9ycywgZncsIGJjZiwgcmVzZXQpO1xcbiA3NjI6XFx0XFx0aWYgKHJldCkge1xcbiA3NjM6XFx0XFx0XFx0ZGV2X2Vycihtb3JzLVxcdTAwM2VkZXYsIFxcXCJmYWlsZWQgdG8gZmxhc2ggZmlybXdhcmU6ICVkXFxcIiwgcmV0KTtcXG4gNzY0OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA3NjU6XFx0XFx0fVxcbiA3NjY6XFx0XFxuIDc2NzpcXHRcXHRyZXQgPSBtbTgxeF9md19nZXRfZmxhZ3MobW9ycyk7XFxuIDc2ODpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDc6MDY6MjYuMjkzNTg4NTU5WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjI3NTUxNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKkZvY3VzaW5nIG9uIEZpcm13YXJlIEluaXRpYWxpemF0aW9uIGFuZCBUYWJsZSBQYXJzaW5nKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHdoZXJlIHRvIGRpZyBpbnRvIHRoaXMgZmlybXdhcmUgaW5pdGlhbGl6YXRpb24uIGBtbTgxeF9md19pbml0YCBzZWVtcyBsaWtlIGEgc29saWQgZW50cnkgcG9pbnQsIGFuZCB3b3J0aCBhIGRlZXBlciBkaXZlIHRvIHNlZSBob3cgdGhlIG92ZXJhbGwgc3lzdGVtIGdldHMgc3RhcnRlZC4gSSdtIGFsc28gcmVhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGhhbmRsZXMgZXh0ZXJuYWwgaG9zdCB0YWJsZXMuIFRoYXQncyB3aHkgSSdtIG5vdyBob25pbmcgaW4gb24gYG1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibGAuIEdpdmVuIHRoZSBuYW1lLCBJJ20gZ3Vlc3NpbmcgaXQncyByZXNwb25zaWJsZSBmb3IgaW50ZXJwcmV0aW5nIGNvbmZpZ3VyYXRpb24gZGF0YSBwYXNzZWQgaW4gZnJvbSB0aGUgaG9zdCBzaWRlLCBwcm9iYWJseSBkZWZpbmluZyBwYXJhbWV0ZXJzIG9yIGNvbmZpZ3VyYXRpb25zIHNwZWNpZmljIHRvIHRoaXMgbW9kdWxlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgdG8gc2VlIHdoYXQga2luZCBvZiB0YWJsZSBpdCBoYW5kbGVzLCBob3cgaXQncyB2YWxpZGF0ZWQsIGFuZCBob3cgaXQgaXMgdXNlZC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBtbTgxeF9md19wYXJzZV9leHRfaG9zdF90YmxgIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmNgIHRvIHVuZGVyc3RhbmQgdGhpcyBwcm9jZXNzIGluIGRldGFpbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY5NDksIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA3OjA2OjMwLjAxNjM0Njk3MloiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzAzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU2NCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU2NDpcXHRpbnQgbW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsKHN0cnVjdCBtbTgxeCAqbW9ycylcXG4gNTY1OlxcdHtcXG4gNTY2OlxcdFxcdGludCByZXQ7XFxuIDU2NzpcXHRcXHR1OCAqaGVhZDtcXG4gNTY4OlxcdFxcdHU4ICplbmQ7XFxuIDU2OTpcXHRcXHRzdHJ1Y3QgZXh0X2hvc3RfdGJsICpleHRfaG9zdF90YWJsZSA9IE5VTEw7XFxuIDU3MDpcXHRcXG4gNTcxOlxcdFxcdHJldCA9IG1tODF4X2Z3X3JlYWRfZXh0X2hvc3RfdGFibGUobW9ycywgXFx1MDAyNmV4dF9ob3N0X3RhYmxlKTtcXG4gNTcyOlxcdFxcdGlmIChyZXQgfHwgIWV4dF9ob3N0X3RhYmxlKVxcbiA1NzM6XFx0XFx0XFx0Z290byBleGl0O1xcbiA1NzQ6XFx0XFxuIDU3NTpcXHRcXHQvKiBQYXJzZSB0aGUgVExWcyAqL1xcbiA1NzY6XFx0XFx0aGVhZCA9IGV4dF9ob3N0X3RhYmxlLVxcdTAwM2VleHRfaG9zdF90YWJsZV9kYXRhX3RsdnM7XFxuIDU3NzpcXHRcXHRlbmQgPSAoKHU4ICopZXh0X2hvc3RfdGFibGUpICtcXG4gNTc4OlxcdFxcdCAgICAgIGxlMzJfdG9fY3B1KGV4dF9ob3N0X3RhYmxlLVxcdTAwM2VleHRfaG9zdF90YmxfbGVuZ3RoKTtcXG4gNTc5OlxcdFxcbiA1ODA6XFx0XFx0d2hpbGUgKGVuZCAtIGhlYWQgXFx1MDAzZT0gKHB0cmRpZmZfdClzaXplb2Yoc3RydWN0IGV4dF9ob3N0X3RibF90bHZfaGRyKSkge1xcbiA1ODE6XFx0XFx0XFx0c3RydWN0IGV4dF9ob3N0X3RibF90bHZfaGRyICpoZHIgPVxcbiA1ODI6XFx0XFx0XFx0XFx0KHN0cnVjdCBleHRfaG9zdF90YmxfdGx2X2hkciAqKWhlYWQ7XFxuIDU4MzpcXHRcXHRcXHR1MTYgdGx2X2xlbiA9IGxlMTZfdG9fY3B1KGhkci1cXHUwMDNlbGVuZ3RoKTtcXG4gNTg0OlxcdFxcbiA1ODU6XFx0XFx0XFx0aWYgKHRsdl9sZW4gXFx1MDAzYyBzaXplb2YoKmhkcikgfHwgdGx2X2xlbiBcXHUwMDNlIGVuZCAtIGhlYWQpXFxuIDU4NjpcXHRcXHRcXHRcXHRicmVhaztcXG4gNTg3OlxcdFxcbiA1ODg6XFx0XFx0XFx0c3dpdGNoIChsZTE2X3RvX2NwdShoZHItXFx1MDAzZXRhZykpIHtcXG4gNTg5OlxcdFxcdFxcdGNhc2UgTU04MVhfRldfSE9TVF9UQUJMRV9UQUdfUzFHX0NBUEFCSUxJVElFUzoge1xcbiA1OTA6XFx0XFx0XFx0XFx0c3RydWN0IGV4dF9ob3N0X3RibF9zMWdfY2FwcyAqY2FwcyA9ICh2b2lkICopaGRyO1xcbiA1OTE6XFx0XFxuIDU5MjpcXHRcXHRcXHRcXHRpZiAodGx2X2xlbiBcXHUwMDNlPSBzaXplb2YoKmNhcHMpKVxcbiA1OTM6XFx0XFx0XFx0XFx0XFx0bW04MXhfZndfdXBkYXRlX2NhcGFiaWxpdGllcyhtb3JzLCBjYXBzKTtcXG4gNTk0OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA1OTU6XFx0XFx0XFx0fVxcbiA1OTY6XFx0XFx0XFx0Y2FzZSBNTTgxWF9GV19IT1NUX1RBQkxFX1RBR19JTlNFUlRfU0tCX0NIRUNLU1VNOiB7XFxuIDU5NzpcXHRcXHRcXHRcXHRzdHJ1Y3QgZXh0X2hvc3RfdGJsX2luc2VydF9za2JfY2hlY2tzdW0gKmNzdW0gPVxcbiA1OTg6XFx0XFx0XFx0XFx0XFx0KHZvaWQgKiloZHI7XFxuIDU5OTpcXHRcXG4gNjAwOlxcdFxcdFxcdFxcdGlmICh0bHZfbGVuIFxcdTAwM2U9IHNpemVvZigqY3N1bSkpXFxuIDYwMTpcXHRcXHRcXHRcXHRcXHRtbTgxeF9md191cGRhdGVfdmFsaWRhdGVfc2tiX2NoZWNrc3VtKG1vcnMsXFxuIDYwMjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBjc3VtKTtcXG4gNjAzOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA2MDQ6XFx0XFx0XFx0fVxcbiA2MDU6XFx0XFx0XFx0Y2FzZSBNTTgxWF9GV19IT1NUX1RBQkxFX1RBR19ZQVBTX1RBQkxFOiB7XFxuIDYwNjpcXHRcXHRcXHRcXHRzdHJ1Y3QgZXh0X2hvc3RfdGJsX3lhcHNfdGFibGUgKnlhcHMgPSAodm9pZCAqKWhkcjtcXG4gNjA3OlxcdFxcbiA2MDg6XFx0XFx0XFx0XFx0aWYgKHRsdl9sZW4gXFx1MDAzZT0gc2l6ZW9mKCp5YXBzKSlcXG4gNjA5OlxcdFxcdFxcdFxcdFxcdG1tODF4X3lhcHNfaHdfcmVhZF90YWJsZShtb3JzLFxcbiA2MTA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZ5YXBzLVxcdTAwM2V5YXBzX3RhYmxlKTtcXG4gNjExOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA2MTI6XFx0XFx0XFx0fVxcbiA2MTM6XFx0XFx0XFx0ZGVmYXVsdDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDc6MDY6MzAuMDE2NDc5MDQyWiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MTU2ODk1NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24gYW5kIERlcGVuZGVuY3kgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnMsIGBtbTgxeF9md19pbml0YCBhbmQgYG1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibGAuIFRoZXkncmUgbm9uLXN0YXRpYywgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgdGhlbSBpbnRlcmVzdGluZyB0YXJnZXRzIGZvciBmdXp6aW5nLiBTZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuTm93LCBiZWZvcmUgSSBkaXZlIGluIHRvbyBkZWVwLCBsZXQncyBzZWUgd2hhdCBjb25maWdzIGFyZSByZXF1aXJlZCB0byBnZXQgdGhlc2UgZnVuY3Rpb25zIGJ1aWx0IGFuZCBydW5uaW5nIGNvcnJlY3RseS4gSSBzZWUgYFdMQU5fVkVORE9SX01PUlNFTUlDUk9gIGFuZCBgTU04MVhfVVNCYCBtZW50aW9uZWQuIEFoLCByaWdodCwgYE1NODFYYCBpcyBzZWxlY3RlZCBieSBgTU04MVhfVVNCYCwgc28gYE1NODFYYCBpcyBpbmRpcmVjdGx5IHJlbGV2YW50LlxuXG5MZXQgbWUgY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBmb3IgYE1NODFYYC4gSXQgbG9va3MgbGlrZSBpdCBuZWVkcyBgTUFDODAyMTFgLiBPa2F5LCBzbyBgTUFDODAyMTFgIGlzIGRlZmluaXRlbHkgZXNzZW50aWFsLlxuXG5CdXQgaXMgdGhhdCAqYWxsKj8gTGV0IG1lIGRvdWJsZS1jaGVjay4gT2theSwgYE1NODFYX1VTQmAgaXRzZWxmIGRlcGVuZHMgb24gYE1BQzgwMjExIFx1MDAyNlx1MDAyNiBVU0JgLiBTbywganVzdCB0byBiZSBhYnNvbHV0ZWx5IHRob3JvdWdoLCBJJ2xsIG5lZWQgdG8gaW5jbHVkZSBgV0xBTl9WRU5ET1JfTU9SU0VNSUNST2AgYW5kIGBNTTgxWF9VU0JgIGFsb25nIHdpdGggdGhlaXIgZGVwZW5kZW5jaWVzLlxuXG5BbHJpZ2h0LCBsZXQgbWUganVzdCBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIG9idmlvdXMuIExldCdzIGRpZyBpbnRvIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL0tjb25maWdgIGFuZCB2ZXJpZnkgdGhhdCBJIGhhdmUgZXZlcnl0aGluZy4gTmVlZCB0byBiZSBzdXJlIGJlZm9yZSBJIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgxNzksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNzowNjozNS40MzIxNzA4MDFaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgV0xBTl9WRU5ET1JfTU9SU0VNSUNST1xcbiAgIDM6XFx0XFx0Ym9vbCBcXFwiTW9yc2UgTWljcm8gZGV2aWNlc1xcXCJcXG4gICA0OlxcdFxcdGRlZmF1bHQgeVxcbiAgIDU6XFx0XFx0aGVscFxcbiAgIDY6XFx0XFx0ICBJZiB5b3UgaGF2ZSBhIHdpcmVsZXNzIGNhcmQgYmVsb25naW5nIHRvIHRoaXMgY2xhc3MsIHNheSBZLlxcbiAgIDc6XFx0XFxuICAgODpcXHRcXHQgIE5vdGUgdGhhdCB0aGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gZG9lc24ndCBkaXJlY3RseSBhZmZlY3QgdGhlXFxuICAgOTpcXHRcXHQgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGwgdGhlXFxuICAxMDpcXHRcXHQgIHF1ZXN0aW9ucyBhYm91dCB0aGVzZSBjYXJkcy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbCBiZSBhc2tlZCBmb3JcXG4gIDExOlxcdFxcdCAgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxcbiAgMTI6XFx0XFxuICAxMzpcXHRpZiBXTEFOX1ZFTkRPUl9NT1JTRU1JQ1JPXFxuICAxNDpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvS2NvbmZpZ1xcXCJcXG4gIDE1OlxcdGVuZGlmICMgV0xBTl9WRU5ET1JfTU9SU0VNSUNST1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNzowNjozNS40MzIyMzA2NzFaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzY5Njg3NjYxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNb3JzZSBNaWNybyBGdXp6aW5nIFRhcmdldHMqKlxuXG5Pa2F5LCBhZnRlciByZXZpZXdpbmcgdGhlIGRldGFpbHMsIEkndmUgZ290IGEgc29saWQgcGljdHVyZSBvZiB3aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBoZXJlLiBNeSBjb25jbHVzaW9uIGlzIHRoYXQgYFdMQU5fVkVORE9SX01PUlNFTUlDUk9gIGFuZCBgTU04MVhfVVNCYCBhcmUgdGhlIGtleSBjb25maWd1cmF0aW9ucyB3ZSBuZWVkIHRvIGVuYWJsZSBmb3IgdGhpcy4gXG5cbkhlcmXigJlzIHRoZSBicmVha2Rvd24gaW4gbXkgaGVhZDpcblxuKiAgICoqV29ydGhGdXp6aW5nOioqIEFic29sdXRlbHksIHRoaXMgaXMgYSBkZWZpbml0ZSBcInllcy5cIiBXZSd2ZSBnb3QgdnVsbmVyYWJpbGl0aWVzIOKAkyBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBtZW1vcnkgbGVha3Mg4oCTIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGZpcm13YXJlIHBhcnNpbmcgbG9naWMgb2YgdGhlIE1vcnNlIE1pY3JvIG1tODF4IGRyaXZlci4gVGhpcyBpcyBjbGFzc2ljIGZ1enppbmcgdGVycml0b3J5LlxuKiAgICoqRm9jdXNTeW1ib2xzOioqIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGNvbmNlbnRyYXRlIG9uIGBtbTgxeF9md19pbml0YCBhbmQgYG1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibGAuIFRob3NlIHNlZW0gdG8gYmUgd2hlcmUgdGhlIGJ1Z3MgYXJlIGhpZGluZywgYmFzZWQgb24gdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBwYXRjaCBhbmQgdGhlIHZ1bG5lcmFibGUgY29kZS4gVGhleSdyZSBjbGVhcmx5IGNyaXRpY2FsIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGZpcm13YXJlIHBhcnNpbmcgcHJvY2Vzcy5cbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogQWdhaW4sIGBXTEFOX1ZFTkRPUl9NT1JTRU1JQ1JPYCBhbmQgYE1NODFYX1VTQmAgYXJlIHdoYXQncyBnb2luZyB0byBhbGxvdyB1cyB0byB0cmlnZ2VyIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLiBUaGUgVVNCIGludGVyZmFjZSBpcyB0aGUgcm91dGUgZm9yIGludGVyYWN0aW9uIGhlcmUsIGFuZCB0aGUgdmVuZG9yIGZsYWcgYWxsb3dzIHVzIHRvIGVuZ2FnZS5cbiogICAqKlJlYXNvbmluZzoqKiBUaGUgZHJpdmVyIGhhbmRsZXMgZmlybXdhcmUgcGFyc2luZywgYW5kIHRoYXTigJlzIHdoZXJlIHRoZSBidWdzIGFyZS4gVGhlIFVTQiBpbnRlcmZhY2UsIHdoZXRoZXIgdGhyb3VnaCBhIGR1bW15IEhDRCBvciBzeXprYWxsZXIsIHByb3ZpZGVzIHRoZSBhdHRhY2sgc3VyZmFjZS4gVGhpcyBjb2RlIGlzIHRyaWdnZXJlZCBkdXJpbmcgZGV2aWNlIHByb2JpbmcgYW5kIGludGVyZmFjZSBzdGFydHVwLCBtYWtpbmcgaXQgcmVhY2hhYmxlIHdpdGggdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb25zLiBJdOKAmXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCDigJMgYnJpbmcgdGhlIGRldmljZSB1cCwgbG9hZCB0aGUgZmlybXdhcmUgKHdoaWNoIGlzIHRoZSBwYXJzaW5nIHRhcmdldCksIGFuZCBsZXQgdGhlIGZ1enppbmcgYmVnaW4uIFdlIGhhdmUgYSBjbGVhciBwYXRoIHRvIHRyaWdnZXIgdGhlIHZ1bG5lcmFibGUgY29kZSwgc28gSSdtIG9wdGltaXN0aWMgYWJvdXQgZmluZGluZyBzb21lIG5ldyBidWdzIHdpdGggdGhlIGZ1enppbmcgYXBwcm9hY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4OTkyLCJPdXRwdXRUb2tlbnMiOjE1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA3OjA2OjQzLjEyOTEwOTg5N1oiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NTY0OTk5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiV0xBTl9WRU5ET1JfTU9SU0VNSUNST1wiLFxuICAgIFwiTU04MVhfVVNCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibW04MXhfZndfaW5pdFwiLFxuICAgIFwibW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgbWVtb3J5IGxlYWtzIGluIHRoZSBmaXJtd2FyZSBwYXJzaW5nIGxvZ2ljIG9mIHRoZSBNb3JzZSBNaWNybyBtbTgxeCBkcml2ZXIuIFRoZSBkcml2ZXIgY2FuIGJlIHRlc3RlZCB2aWEgdGhlIFVTQiBpbnRlcmZhY2UgdXNpbmcgYSBkdW1teSBIQ0Qgb3Igc3l6a2FsbGVyJ3MgVVNCIGZ1enppbmcgY2FwYWJpbGl0aWVzLiBUaGUgZmlybXdhcmUgbG9hZGluZyBhbmQgcGFyc2luZyBsb2dpYyBpcyByZWFjaGFibGUgd2hlbiB0aGUgZGV2aWNlIGlzIHByb2JlZCBhbmQgdGhlIGludGVyZmFjZSBpcyBicm91Z2h0IHVwLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIldMQU5fVkVORE9SX01PUlNFTUlDUk9cIixcbiAgICBcIk1NODFYX1VTQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1tODF4X2Z3X2luaXRcIixcbiAgICBcIm1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIG1lbW9yeSBsZWFrcyBpbiB0aGUgZmlybXdhcmUgcGFyc2luZyBsb2dpYyBvZiB0aGUgTW9yc2UgTWljcm8gbW04MXggZHJpdmVyLiBUaGUgZHJpdmVyIGNhbiBiZSB0ZXN0ZWQgdmlhIHRoZSBVU0IgaW50ZXJmYWNlIHVzaW5nIGEgZHVtbXkgSENEIG9yIHN5emthbGxlcidzIFVTQiBmdXp6aW5nIGNhcGFiaWxpdGllcy4gVGhlIGZpcm13YXJlIGxvYWRpbmcgYW5kIHBhcnNpbmcgbG9naWMgaXMgcmVhY2hhYmxlIHdoZW4gdGhlIGRldmljZSBpcyBwcm9iZWQgYW5kIHRoZSBpbnRlcmZhY2UgaXMgYnJvdWdodCB1cC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDc6MDY6NDMuNDE0NzY5NzM0WiIsIlNlcSI6NTEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Nzc5ODA4NzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDc6MDY6NDMuNDE1Nzg2MTc0WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg3Nzg3ODc3MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIG1lbW9yeSBsZWFrcyBkdXJpbmcgZmlybXdhcmUgcGFyc2luZy4gVGhlIGJvdW5kcyBjaGVja3MgcHJldmVudCByZWFkaW5nIHBhc3QgdGhlIGVuZCBvZiBhbGxvY2F0ZWQgYnVmZmVycyBjb250YWluaW5nIGZpcm13YXJlIGRhdGEsIHdoaWNoIGFyZSBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2VzLiBLQVNBTiBpcyBmdWxseSBjYXBhYmxlIG9mIGRldGVjdGluZyB0aGVzZSBvdXQtb2YtYm91bmRzIHJlYWRzLCBhbmQga21lbWxlYWsgZGV0ZWN0cyB0aGUgZml4ZWQgbWVtb3J5IGxlYWtzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIGNvbnRyb2wgZmxvdywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDA2NjA3MDVlZDZmY2E4NzNhMDI5ZWUzYzI1MmZjM2ZiODhhMTU0YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDA3OjA0OjQzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jXG5pbmRleCBkNmQyYWQwODZjMzI4Li41MGZhOWU0YjVmODAzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmNcbkBAIC01NCwyMSArNTQsMjkgQEAgc3RhdGljIGludCBtbTgxeF9md19nZXRfaGVhZGVyKGNvbnN0IHU4ICpkYXRhLCBFbGYzMl9FaGRyICplaGRyKVxuIFxuIHN0YXRpYyB2b2lkIG1tODF4X2Z3X3BhcnNlX2luZm8oc3RydWN0IG1tODF4ICptb3JzLCBjb25zdCB1OCAqZGF0YSwgaW50IGxlbmd0aClcbiB7XG4tXHRjb25zdCBzdHJ1Y3QgbW04MXhfZndfaW5mb190bHYgKnRsdiA9XG4tXHRcdChjb25zdCBzdHJ1Y3QgbW04MXhfZndfaW5mb190bHYgKilkYXRhO1xuK1x0Y29uc3QgdTggKmVuZCA9IGRhdGEgKyBsZW5ndGg7XG4rXHRjb25zdCB1OCAqcG9zID0gZGF0YTtcbitcbitcdHdoaWxlIChlbmQgLSBwb3MgXHUwMDNlPSAocHRyZGlmZl90KXNpemVvZihzdHJ1Y3QgbW04MXhfZndfaW5mb190bHYpKSB7XG4rXHRcdGNvbnN0IHN0cnVjdCBtbTgxeF9md19pbmZvX3RsdiAqdGx2ID1cbitcdFx0XHQoY29uc3Qgc3RydWN0IG1tODF4X2Z3X2luZm9fdGx2ICopcG9zO1xuK1x0XHR1MTYgdGx2X2xlbiA9IGxlMTZfdG9fY3B1KHRsdi1cdTAwM2VsZW5ndGgpO1xuK1xuK1x0XHRwb3MgPSB0bHYtXHUwMDNldmFsO1xuK1x0XHRpZiAodGx2X2xlbiBcdTAwM2UgZW5kIC0gcG9zKVxuK1x0XHRcdGJyZWFrO1xuIFxuLVx0d2hpbGUgKCh1OCAqKXRsdiBcdTAwM2MgKGRhdGEgKyBsZW5ndGgpKSB7XG4gXHRcdHN3aXRjaCAobGUxNl90b19jcHUodGx2LVx1MDAzZXR5cGUpKSB7XG4gXHRcdGNhc2UgTU04MVhfRldfSU5GT19UTFZfQkNGX0FERFI6XG4tXHRcdFx0bW9ycy1cdTAwM2ViY2ZfYWRkcmVzcyA9IGdldF91bmFsaWduZWRfbGUzMih0bHYtXHUwMDNldmFsKTtcbitcdFx0XHRpZiAodGx2X2xlbiBcdTAwM2U9IHNpemVvZihfX2xlMzIpKVxuK1x0XHRcdFx0bW9ycy1cdTAwM2ViY2ZfYWRkcmVzcyA9XG4rXHRcdFx0XHRcdGdldF91bmFsaWduZWRfbGUzMih0bHYtXHUwMDNldmFsKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuLVx0XHR0bHYgPSAoY29uc3Qgc3RydWN0IG1tODF4X2Z3X2luZm9fdGx2ICopKCh1OCAqKXRsdiArXG4tXHRcdFx0XHRcdFx0XHQgbGUxNl90b19jcHUoXG4tXHRcdFx0XHRcdFx0XHRcdCB0bHYtXHUwMDNlbGVuZ3RoKSArXG4tXHRcdFx0XHRcdFx0XHQgc2l6ZW9mKCp0bHYpKTtcbitcbitcdFx0cG9zICs9IHRsdl9sZW47XG4gXHR9XG4gfVxuIFxuQEAgLTExNywxMyArMTI1LDE1IEBAIHN0YXRpYyBpbnQgbW04MXhfZndfbG9hZF9mdyhzdHJ1Y3QgbW04MXggKm1vcnMsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpXG4gXG4gXHRpZiAobW04MXhfZndfZ2V0X2hlYWRlcihmdy1cdTAwM2VkYXRhLCBcdTAwMjZlaGRyKSkge1xuIFx0XHRkZXZfZXJyKG1vcnMtXHUwMDNlZGV2LCBcIldyb25nIGZpbGUgZm9ybWF0XCIpO1xuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0Z290byBvdXRfZnJlZTtcbiBcdH1cbiBcbiBcdGlmIChtbTgxeF9md19nZXRfc2VjdGlvbl9oZWFkZXIoZnctXHUwMDNlZGF0YSwgXHUwMDI2ZWhkciwgXHUwMDI2c2hfc3RydGFiLFxuIFx0XHRcdFx0XHRlaGRyLmVfc2hzdHJuZHgpKSB7XG4gXHRcdGRldl9lcnIobW9ycy1cdTAwM2VkZXYsIFwiSW52YWxpZCBmaXJtd2FyZS4gTWlzc2luZyBzdHJpbmcgdGFibGVcIik7XG4tXHRcdHJldHVybiAtRU5PRU5UO1xuK1x0XHRyZXQgPSAtRU5PRU5UO1xuK1x0XHRnb3RvIG91dF9mcmVlO1xuIFx0fVxuIFxuIFx0c2hfc3RycyA9IChjb25zdCBjaGFyICopZnctXHUwMDNlZGF0YSArIHNoX3N0cnRhYi5zaF9vZmZzZXQ7XG5AQCAtMTYwLDcgKzE3MCw3IEBAIHN0YXRpYyBpbnQgbW04MXhfZndfbG9hZF9mdyhzdHJ1Y3QgbW04MXggKm1vcnMsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpXG4gXHRcdFx0bW04MXhfcmVsZWFzZV9idXMobW9ycyk7XG4gXHRcdFx0aWYgKHN0YXR1cykge1xuIFx0XHRcdFx0cmV0ID0gLUVJTztcbi1cdFx0XHRcdGJyZWFrO1xuK1x0XHRcdFx0Z290byBvdXRfZnJlZTtcbiBcdFx0XHR9XG4gXHRcdH1cbiBcdH1cbkBAIC0xNzksNiArMTg5LDcgQEAgc3RhdGljIGludCBtbTgxeF9md19sb2FkX2Z3KHN0cnVjdCBtbTgxeCAqbW9ycywgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcbiBcdGlmIChlaGRyLmVfZW50cnkpXG4gXHRcdHJldCA9IG1tODF4X2Z3X3NldF9ib290X2FkZHIobW9ycywgZWhkci5lX2VudHJ5KTtcbiBcbitvdXRfZnJlZTpcbiBcdGRldm1fa2ZyZWUobW9ycy1cdTAwM2VkZXYsIGZ3X2J1Zik7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC00OTIsNiArNTAzLDEzIEBAIHN0YXRpYyBpbnQgbW04MXhfZndfcmVhZF9leHRfaG9zdF90YWJsZShzdHJ1Y3QgbW04MXggKm1vcnMsXG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIGV4aXQ7XG4gXG4rXHQvKiBUaGUgdGFibGUgZGVzY3JpYmVzIGl0cyBvd24gbGVuZ3RoOyBpdCBtdXN0IGZpdCB3aGF0IHdhcyByZWFkICovXG4rXHRpZiAobGUzMl90b19jcHUoaG9zdF90YmwtXHUwMDNlZXh0X2hvc3RfdGJsX2xlbmd0aCkgXHUwMDNjIHNpemVvZigqaG9zdF90YmwpIHx8XG4rXHQgICAgbGUzMl90b19jcHUoaG9zdF90YmwtXHUwMDNlZXh0X2hvc3RfdGJsX2xlbmd0aCkgXHUwMDNlIGV4dF9ob3N0X3RibF9sZW4pIHtcbitcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0Z290byBleGl0O1xuK1x0fVxuK1xuIFx0bW04MXhfcmVsZWFzZV9idXMobW9ycyk7XG4gXHQqZXh0X2hvc3RfdGFibGUgPSBob3N0X3RibDtcbiBcdHJldHVybiByZXQ7XG5AQCAtNTU5LDM0ICs1NzcsNDQgQEAgaW50IG1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibChzdHJ1Y3QgbW04MXggKm1vcnMpXG4gXHRlbmQgPSAoKHU4ICopZXh0X2hvc3RfdGFibGUpICtcbiBcdCAgICAgIGxlMzJfdG9fY3B1KGV4dF9ob3N0X3RhYmxlLVx1MDAzZWV4dF9ob3N0X3RibF9sZW5ndGgpO1xuIFxuLVx0d2hpbGUgKGhlYWQgXHUwMDNjIGVuZCkge1xuK1x0d2hpbGUgKGVuZCAtIGhlYWQgXHUwMDNlPSAocHRyZGlmZl90KXNpemVvZihzdHJ1Y3QgZXh0X2hvc3RfdGJsX3Rsdl9oZHIpKSB7XG4gXHRcdHN0cnVjdCBleHRfaG9zdF90YmxfdGx2X2hkciAqaGRyID1cbiBcdFx0XHQoc3RydWN0IGV4dF9ob3N0X3RibF90bHZfaGRyICopaGVhZDtcbitcdFx0dTE2IHRsdl9sZW4gPSBsZTE2X3RvX2NwdShoZHItXHUwMDNlbGVuZ3RoKTtcbitcbitcdFx0aWYgKHRsdl9sZW4gXHUwMDNjIHNpemVvZigqaGRyKSB8fCB0bHZfbGVuIFx1MDAzZSBlbmQgLSBoZWFkKVxuK1x0XHRcdGJyZWFrO1xuIFxuIFx0XHRzd2l0Y2ggKGxlMTZfdG9fY3B1KGhkci1cdTAwM2V0YWcpKSB7XG4tXHRcdGNhc2UgTU04MVhfRldfSE9TVF9UQUJMRV9UQUdfUzFHX0NBUEFCSUxJVElFUzpcbi1cdFx0XHRtbTgxeF9md191cGRhdGVfY2FwYWJpbGl0aWVzKFxuLVx0XHRcdFx0bW9ycywgKHN0cnVjdCBleHRfaG9zdF90YmxfczFnX2NhcHMgKiloZHIpO1xuK1x0XHRjYXNlIE1NODFYX0ZXX0hPU1RfVEFCTEVfVEFHX1MxR19DQVBBQklMSVRJRVM6IHtcbitcdFx0XHRzdHJ1Y3QgZXh0X2hvc3RfdGJsX3MxZ19jYXBzICpjYXBzID0gKHZvaWQgKiloZHI7XG4rXG4rXHRcdFx0aWYgKHRsdl9sZW4gXHUwMDNlPSBzaXplb2YoKmNhcHMpKVxuK1x0XHRcdFx0bW04MXhfZndfdXBkYXRlX2NhcGFiaWxpdGllcyhtb3JzLCBjYXBzKTtcbiBcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0XHRjYXNlIE1NODFYX0ZXX0hPU1RfVEFCTEVfVEFHX0lOU0VSVF9TS0JfQ0hFQ0tTVU06IHtcbitcdFx0XHRzdHJ1Y3QgZXh0X2hvc3RfdGJsX2luc2VydF9za2JfY2hlY2tzdW0gKmNzdW0gPVxuK1x0XHRcdFx0KHZvaWQgKiloZHI7XG4gXG4tXHRcdGNhc2UgTU04MVhfRldfSE9TVF9UQUJMRV9UQUdfSU5TRVJUX1NLQl9DSEVDS1NVTTpcbi1cdFx0XHRtbTgxeF9md191cGRhdGVfdmFsaWRhdGVfc2tiX2NoZWNrc3VtKFxuLVx0XHRcdFx0bW9ycyxcbi1cdFx0XHRcdChzdHJ1Y3QgZXh0X2hvc3RfdGJsX2luc2VydF9za2JfY2hlY2tzdW0gKiloZHIpO1xuK1x0XHRcdGlmICh0bHZfbGVuIFx1MDAzZT0gc2l6ZW9mKCpjc3VtKSlcbitcdFx0XHRcdG1tODF4X2Z3X3VwZGF0ZV92YWxpZGF0ZV9za2JfY2hlY2tzdW0obW9ycyxcbitcdFx0XHRcdFx0XHRcdFx0ICAgICAgY3N1bSk7XG4gXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdFx0Y2FzZSBNTTgxWF9GV19IT1NUX1RBQkxFX1RBR19ZQVBTX1RBQkxFOiB7XG4rXHRcdFx0c3RydWN0IGV4dF9ob3N0X3RibF95YXBzX3RhYmxlICp5YXBzID0gKHZvaWQgKiloZHI7XG4gXG4tXHRcdGNhc2UgTU04MVhfRldfSE9TVF9UQUJMRV9UQUdfWUFQU19UQUJMRTpcbi1cdFx0XHRtbTgxeF95YXBzX2h3X3JlYWRfdGFibGUoXG4tXHRcdFx0XHRtb3JzLCBcdTAwMjYoKHN0cnVjdCBleHRfaG9zdF90YmxfeWFwc190YWJsZSAqKWhkcilcbi1cdFx0XHRcdFx0ICAgICAgIC1cdTAwM2V5YXBzX3RhYmxlKTtcbitcdFx0XHRpZiAodGx2X2xlbiBcdTAwM2U9IHNpemVvZigqeWFwcykpXG4rXHRcdFx0XHRtbTgxeF95YXBzX2h3X3JlYWRfdGFibGUobW9ycyxcbitcdFx0XHRcdFx0XHRcdCBcdTAwMjZ5YXBzLVx1MDAzZXlhcHNfdGFibGUpO1xuIFx0XHRcdGJyZWFrO1xuK1x0XHR9XG4gXHRcdGRlZmF1bHQ6XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcbi1cdFx0aGVhZCArPSBsZTE2X3RvX2NwdShoZHItXHUwMDNlbGVuZ3RoKTtcbi1cdFx0aWYgKCFoZHItXHUwMDNlbGVuZ3RoKVxuLVx0XHRcdGJyZWFrO1xuK1x0XHRoZWFkICs9IHRsdl9sZW47XG4gXHR9XG4gXG4gXHRrZnJlZShleHRfaG9zdF90YWJsZSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNzowNjo0My40MTU3ODgxNjRaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODc3ODc2MTQ2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1vcnNlIE1pY3JvIEZpcm13YXJlIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhbmluZyB1cCBzb21lIGZpcm13YXJlIHBhcnNpbmcgcm91dGluZXMgd2l0aGluIHRoZSBgbW04MXhgIHdpcmVsZXNzIGRyaXZlci4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQncyBhIHN0cmFpZ2h0Zm9yd2FyZCBpbXByb3ZlbWVudCwgcHJpbWFyaWx5IGZvY3VzZWQgb24gaGFyZGVuaW5nIGFnYWluc3QgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gVGhlIGNoYW5nZXMgYXJlIGFsbCBsb2NhbGl6ZWQgd2l0aGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmNgLlxuXG5TcGVjaWZpY2FsbHksIEkgc2VlIGZpeGVzIHRvIGZvdXIgZnVuY3Rpb25zOiBgbW04MXhfZndfcGFyc2VfaW5mb2AsIGBtbTgxeF9md19sb2FkX2Z3YCwgYG1tODF4X2Z3X3JlYWRfZXh0X2hvc3RfdGFibGVgLCBhbmQgYG1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibGAuIFRoZSBjb3JlIG9mIHRoZSBwYXRjaCBzZWVtcyB0byBiZSBhZGRpbmcgYm91bmRzIGNoZWNraW5nIGR1cmluZyBUTFYgKFR5cGUtTGVuZ3RoLVZhbHVlKSBwYXJzaW5nIHdpdGhpbiB0aGUgZmlybXdhcmUgZGF0YSBhbmQgYWRkcmVzc2luZyBtZW1vcnkgbGVha3MgaW4gdGhlIGZpcm13YXJlIGxvYWRpbmcgcHJvY2Vzcy4gVGhlIG1lbW9yeSBsZWFrIGZpeCBpbiBgbW04MXhfZndfbG9hZF9md2AgaXMgYSBzdGFuZGFyZCBgZ290byBvdXRfZnJlZWAgd2hpY2ggaXMgd2hhdCBJIHdvdWxkIGV4cGVjdC5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGFyZSB3ZSBkZWFsaW5nIHdpdGggYW55ICp1bmluaXRpYWxpemVkKiBtZW1vcnkgZXhwb3N1cmVzPyBJIG5lZWQgdG8gYmUgc3VyZS4gVGhlIHBhdGNoIGl0c2VsZiBpcyB1c2luZyBLQVNBTiB0byBjYXRjaCB0aGUgT09CIHJlYWRzIGFuZCBrbWVtbGVhayB0byBjYXRjaCB0aGUgbWVtb3J5IGxlYWtzLiBUaGUgZGF0YSBpdHNlbGYgc2VlbXMgdG8gY29tZSBmcm9tIHRoZSBmaXJtd2FyZSBpbWFnZSAoYGZ3LVx1MDAzZWRhdGFgKSBvciBpcyByZWFkIGZyb20gdGhlIGRldmljZSBoYXJkd2FyZSBpdHNlbGYgKGluIHRoZSBjYXNlIG9mIHRoZSBleHRlbmRlZCBob3N0IHRhYmxlKS4gU28sIHRoZXJlIHNob3VsZG4ndCBiZSBhbnl0aGluZyB1bmluaXRpYWxpemVkIGJlaW5nIGV4cG9zZWQsIGJ1dCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guXG5cbkxldCdzIGJyZWFrIGRvd24gdGhlIGF0dGFjayBzdXJmYWNlLiBJZiB0aGUgYHRsdl9sZW5gIGlzIHRvbyBsYXJnZSwgaXQgcmVzdWx0cyBpbiBhbiBvdXQtb2YtYm91bmRzIHJlYWQgYW5kIGlzIGNhdWdodCBieSBLQVNBTi4gTm93LCB3aGF0IGlmIGB0bHZfbGVuYCBpcyBzbWFsbGVyLCAqcG90ZW50aWFsbHkqIGxlYWRpbmcgdG8gYW4gdW5pbml0aWFsaXplZCByZWFkPyBObywgaXQncyBub3QgZ29pbmcgdG8gcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWNhdXNlIHRoZSBidWZmZXIgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCB3aXRoIGZpcm13YXJlIGRhdGEuIElmIHdlJ3JlIHJlYWRpbmcgcGFzdCB0aGUgZW5kIG9mIHRoZSBkYXRhLCBpdCdzIHN0aWxsIG91dC1vZi1ib3VuZHMsIGFuZCBLQVNBTiB3aWxsIGNhdGNoIGl0LiBUaGUgc2FtZSBsb2dpYyBhcHBsaWVzIHRvIGBob3N0X3RibC1cdTAwM2VleHRfaG9zdF90YmxfbGVuZ3RoYCB2ZXJzdXMgYGV4dF9ob3N0X3RibF9sZW5gLiBLQVNBTiBzaG91bGQgYmUgYWJsZSB0byBjYXRjaCB0aGUgT09CIHJlYWRzIHRoZXJlLlxuXG5HaXZlbiB0aGF0LCBJIGRvbid0IHNlZSBhbnkgaW1tZWRpYXRlIGNvbmNlcm5zIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGxlYWtlZC4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgcGF0Y2guIFN0YW5kYXJkIE9PQiBhbmQgbWVtb3J5IGxlYWsgZml4ZXMuIE5vIEtNU0FOIGlzIG5lY2Vzc2FyeSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODY2LCJPdXRwdXRUb2tlbnMiOjEzMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA3OjA2OjUyLjE5NDU1MjU4WiIsIlNlcSI6NTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBtZW1vcnkgbGVha3MgZHVyaW5nIGZpcm13YXJlIHBhcnNpbmcuIFRoZSBib3VuZHMgY2hlY2tzIHByZXZlbnQgcmVhZGluZyBwYXN0IHRoZSBlbmQgb2YgYWxsb2NhdGVkIGJ1ZmZlcnMgY29udGFpbmluZyBmaXJtd2FyZSBkYXRhLCB3aGljaCBhcmUgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlcy4gS0FTQU4gaXMgZnVsbHkgY2FwYWJsZSBvZiBkZXRlY3RpbmcgdGhlc2Ugb3V0LW9mLWJvdW5kcyByZWFkcywgYW5kIGttZW1sZWFrIGRldGVjdHMgdGhlIGZpeGVkIG1lbW9yeSBsZWFrcy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBjb250cm9sIGZsb3csIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIG1lbW9yeSBsZWFrcyBkdXJpbmcgZmlybXdhcmUgcGFyc2luZy4gVGhlIGJvdW5kcyBjaGVja3MgcHJldmVudCByZWFkaW5nIHBhc3QgdGhlIGVuZCBvZiBhbGxvY2F0ZWQgYnVmZmVycyBjb250YWluaW5nIGZpcm13YXJlIGRhdGEsIHdoaWNoIGFyZSBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2VzLiBLQVNBTiBpcyBmdWxseSBjYXBhYmxlIG9mIGRldGVjdGluZyB0aGVzZSBvdXQtb2YtYm91bmRzIHJlYWRzLCBhbmQga21lbWxlYWsgZGV0ZWN0cyB0aGUgZml4ZWQgbWVtb3J5IGxlYWtzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIGNvbnRyb2wgZmxvdywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmcbqs[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-12 06:23:49 +0000 UTC FinishedAt: 2026-08-12 07:06:54 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "5e6de6a2b522f659defacb1551d0465ba6ce13cf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "WLAN_VENDOR_MORSEMICRO", "MM81X_USB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "5e6de6a2b522f659defacb1551d0465ba6ce13cf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "WLAN_VENDOR_MORSEMICRO", "MM81X_USB" ], "series_id": "053aaec5-683d-4ead-b07e-689ade500d05" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mm81x_fw_init", "mm81x_fw_parse_ext_host_tbl" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEyIDA3OjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1dMQU5fVkVORE9SX01PUlNFTUlDUk8mIzM0OywKICAgICYjMzQ7TU04MVhfVVNCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bW04MXhfZndfaW5pdCYjMzQ7LAogICAgJiMzNDttbTgxeF9md19wYXJzZV9leHRfaG9zdF90YmwmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBtZW1vcnkgbGVha3MgZHVyaW5nIGZpcm13YXJlIHBhcnNpbmcuIFRoZSBib3VuZHMgY2hlY2tzIHByZXZlbnQgcmVhZGluZyBwYXN0IHRoZSBlbmQgb2YgYWxsb2NhdGVkIGJ1ZmZlcnMgY29udGFpbmluZyBmaXJtd2FyZSBkYXRhLCB3aGljaCBhcmUgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlcy4gS0FTQU4gaXMgZnVsbHkgY2FwYWJsZSBvZiBkZXRlY3RpbmcgdGhlc2Ugb3V0LW9mLWJvdW5kcyByZWFkcywgYW5kIGttZW1sZWFrIGRldGVjdHMgdGhlIGZpeGVkIG1lbW9yeSBsZWFrcy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBjb250cm9sIGZsb3csIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBtZW1vcnkgbGVha3MgaW4gdGhlIGZpcm13YXJlIHBhcnNpbmcgbG9naWMgb2YgdGhlIE1vcnNlIE1pY3JvIG1tODF4IGRyaXZlci4gVGhlIGRyaXZlciBjYW4gYmUgdGVzdGVkIHZpYSB0aGUgVVNCIGludGVyZmFjZSB1c2luZyBhIGR1bW15IEhDRCBvciBzeXprYWxsZXImIzM5O3MgVVNCIGZ1enppbmcgY2FwYWJpbGl0aWVzLiBUaGUgZmlybXdhcmUgbG9hZGluZyBhbmQgcGFyc2luZyBsb2dpYyBpcyByZWFjaGFibGUgd2hlbiB0aGUgZGV2aWNlIGlzIHByb2JlZCBhbmQgdGhlIGludGVyZmFjZSBpcyBicm91Z2h0IHVwLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA3OjA0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMDA2NjA3MDVlZDZmY2E4NzNhMDI5ZWUzYzI1MmZjM2ZiODhhMTU0YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDA3OjA0OjQzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuY1xuaW5kZXggZDZkMmFkMDg2YzMyOC4uNTBmYTllNGI1ZjgwMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jXG5AQCAtNTQsMjEgJiM0Mzs1NCwyOSBAQCBzdGF0aWMgaW50IG1tODF4X2Z3X2dldF9oZWFkZXIoY29uc3QgdTggKmRhdGEsIEVsZjMyX0VoZHIgKmVoZHIpXG4gXG4gc3RhdGljIHZvaWQgbW04MXhfZndfcGFyc2VfaW5mbyhzdHJ1Y3QgbW04MXggKm1vcnMsIGNvbnN0IHU4ICpkYXRhLCBpbnQgbGVuZ3RoKVxuIHtcbi1cdGNvbnN0IHN0cnVjdCBtbTgxeF9md19pbmZvX3RsdiAqdGx2ID1cbi1cdFx0KGNvbnN0IHN0cnVjdCBtbTgxeF9md19pbmZvX3RsdiAqKWRhdGE7XG4mIzQzO1x0Y29uc3QgdTggKmVuZCA9IGRhdGEgJiM0MzsgbGVuZ3RoO1xuJiM0MztcdGNvbnN0IHU4ICpwb3MgPSBkYXRhO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoZW5kIC0gcG9zIFx1MDAzZT0gKHB0cmRpZmZfdClzaXplb2Yoc3RydWN0IG1tODF4X2Z3X2luZm9fdGx2KSkge1xuJiM0MztcdFx0Y29uc3Qgc3RydWN0IG1tODF4X2Z3X2luZm9fdGx2ICp0bHYgPVxuJiM0MztcdFx0XHQoY29uc3Qgc3RydWN0IG1tODF4X2Z3X2luZm9fdGx2ICopcG9zO1xuJiM0MztcdFx0dTE2IHRsdl9sZW4gPSBsZTE2X3RvX2NwdSh0bHYtXHUwMDNlbGVuZ3RoKTtcbiYjNDM7XG4mIzQzO1x0XHRwb3MgPSB0bHYtXHUwMDNldmFsO1xuJiM0MztcdFx0aWYgKHRsdl9sZW4gXHUwMDNlIGVuZCAtIHBvcylcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXG4tXHR3aGlsZSAoKHU4ICopdGx2IFx1MDAzYyAoZGF0YSAmIzQzOyBsZW5ndGgpKSB7XG4gXHRcdHN3aXRjaCAobGUxNl90b19jcHUodGx2LVx1MDAzZXR5cGUpKSB7XG4gXHRcdGNhc2UgTU04MVhfRldfSU5GT19UTFZfQkNGX0FERFI6XG4tXHRcdFx0bW9ycy1cdTAwM2ViY2ZfYWRkcmVzcyA9IGdldF91bmFsaWduZWRfbGUzMih0bHYtXHUwMDNldmFsKTtcbiYjNDM7XHRcdFx0aWYgKHRsdl9sZW4gXHUwMDNlPSBzaXplb2YoX19sZTMyKSlcbiYjNDM7XHRcdFx0XHRtb3JzLVx1MDAzZWJjZl9hZGRyZXNzID1cbiYjNDM7XHRcdFx0XHRcdGdldF91bmFsaWduZWRfbGUzMih0bHYtXHUwMDNldmFsKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuLVx0XHR0bHYgPSAoY29uc3Qgc3RydWN0IG1tODF4X2Z3X2luZm9fdGx2ICopKCh1OCAqKXRsdiAmIzQzO1xuLVx0XHRcdFx0XHRcdFx0IGxlMTZfdG9fY3B1KFxuLVx0XHRcdFx0XHRcdFx0XHQgdGx2LVx1MDAzZWxlbmd0aCkgJiM0Mztcbi1cdFx0XHRcdFx0XHRcdCBzaXplb2YoKnRsdikpO1xuJiM0MztcbiYjNDM7XHRcdHBvcyAmIzQzOz0gdGx2X2xlbjtcbiBcdH1cbiB9XG4gXG5AQCAtMTE3LDEzICYjNDM7MTI1LDE1IEBAIHN0YXRpYyBpbnQgbW04MXhfZndfbG9hZF9mdyhzdHJ1Y3QgbW04MXggKm1vcnMsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpXG4gXG4gXHRpZiAobW04MXhfZndfZ2V0X2hlYWRlcihmdy1cdTAwM2VkYXRhLCBcdTAwMjZlaGRyKSkge1xuIFx0XHRkZXZfZXJyKG1vcnMtXHUwMDNlZGV2LCBcJiMzNDtXcm9uZyBmaWxlIGZvcm1hdFwmIzM0Oyk7XG4tXHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdGdvdG8gb3V0X2ZyZWU7XG4gXHR9XG4gXG4gXHRpZiAobW04MXhfZndfZ2V0X3NlY3Rpb25faGVhZGVyKGZ3LVx1MDAzZWRhdGEsIFx1MDAyNmVoZHIsIFx1MDAyNnNoX3N0cnRhYixcbiBcdFx0XHRcdFx0ZWhkci5lX3Noc3RybmR4KSkge1xuIFx0XHRkZXZfZXJyKG1vcnMtXHUwMDNlZGV2LCBcJiMzNDtJbnZhbGlkIGZpcm13YXJlLiBNaXNzaW5nIHN0cmluZyB0YWJsZVwmIzM0Oyk7XG4tXHRcdHJldHVybiAtRU5PRU5UO1xuJiM0MztcdFx0cmV0ID0gLUVOT0VOVDtcbiYjNDM7XHRcdGdvdG8gb3V0X2ZyZWU7XG4gXHR9XG4gXG4gXHRzaF9zdHJzID0gKGNvbnN0IGNoYXIgKilmdy1cdTAwM2VkYXRhICYjNDM7IHNoX3N0cnRhYi5zaF9vZmZzZXQ7XG5AQCAtMTYwLDcgJiM0MzsxNzAsNyBAQCBzdGF0aWMgaW50IG1tODF4X2Z3X2xvYWRfZncoc3RydWN0IG1tODF4ICptb3JzLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KVxuIFx0XHRcdG1tODF4X3JlbGVhc2VfYnVzKG1vcnMpO1xuIFx0XHRcdGlmIChzdGF0dXMpIHtcbiBcdFx0XHRcdHJldCA9IC1FSU87XG4tXHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0XHRnb3RvIG91dF9mcmVlO1xuIFx0XHRcdH1cbiBcdFx0fVxuIFx0fVxuQEAgLTE3OSw2ICYjNDM7MTg5LDcgQEAgc3RhdGljIGludCBtbTgxeF9md19sb2FkX2Z3KHN0cnVjdCBtbTgxeCAqbW9ycywgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcbiBcdGlmIChlaGRyLmVfZW50cnkpXG4gXHRcdHJldCA9IG1tODF4X2Z3X3NldF9ib290X2FkZHIobW9ycywgZWhkci5lX2VudHJ5KTtcbiBcbiYjNDM7b3V0X2ZyZWU6XG4gXHRkZXZtX2tmcmVlKG1vcnMtXHUwMDNlZGV2LCBmd19idWYpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtNDkyLDYgJiM0Mzs1MDMsMTMgQEAgc3RhdGljIGludCBtbTgxeF9md19yZWFkX2V4dF9ob3N0X3RhYmxlKHN0cnVjdCBtbTgxeCAqbW9ycyxcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gZXhpdDtcbiBcbiYjNDM7XHQvKiBUaGUgdGFibGUgZGVzY3JpYmVzIGl0cyBvd24gbGVuZ3RoOyBpdCBtdXN0IGZpdCB3aGF0IHdhcyByZWFkICovXG4mIzQzO1x0aWYgKGxlMzJfdG9fY3B1KGhvc3RfdGJsLVx1MDAzZWV4dF9ob3N0X3RibF9sZW5ndGgpIFx1MDAzYyBzaXplb2YoKmhvc3RfdGJsKSB8fFxuJiM0MztcdCAgICBsZTMyX3RvX2NwdShob3N0X3RibC1cdTAwM2VleHRfaG9zdF90YmxfbGVuZ3RoKSBcdTAwM2UgZXh0X2hvc3RfdGJsX2xlbikge1xuJiM0MztcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdGdvdG8gZXhpdDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0bW04MXhfcmVsZWFzZV9idXMobW9ycyk7XG4gXHQqZXh0X2hvc3RfdGFibGUgPSBob3N0X3RibDtcbiBcdHJldHVybiByZXQ7XG5AQCAtNTU5LDM0ICYjNDM7NTc3LDQ0IEBAIGludCBtbTgxeF9md19wYXJzZV9leHRfaG9zdF90Ymwoc3RydWN0IG1tODF4ICptb3JzKVxuIFx0ZW5kID0gKCh1OCAqKWV4dF9ob3N0X3RhYmxlKSAmIzQzO1xuIFx0ICAgICAgbGUzMl90b19jcHUoZXh0X2hvc3RfdGFibGUtXHUwMDNlZXh0X2hvc3RfdGJsX2xlbmd0aCk7XG4gXG4tXHR3aGlsZSAoaGVhZCBcdTAwM2MgZW5kKSB7XG4mIzQzO1x0d2hpbGUgKGVuZCAtIGhlYWQgXHUwMDNlPSAocHRyZGlmZl90KXNpemVvZihzdHJ1Y3QgZXh0X2hvc3RfdGJsX3Rsdl9oZHIpKSB7XG4gXHRcdHN0cnVjdCBleHRfaG9zdF90YmxfdGx2X2hkciAqaGRyID1cbiBcdFx0XHQoc3RydWN0IGV4dF9ob3N0X3RibF90bHZfaGRyICopaGVhZDtcbiYjNDM7XHRcdHUxNiB0bHZfbGVuID0gbGUxNl90b19jcHUoaGRyLVx1MDAzZWxlbmd0aCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHRsdl9sZW4gXHUwMDNjIHNpemVvZigqaGRyKSB8fCB0bHZfbGVuIFx1MDAzZSBlbmQgLSBoZWFkKVxuJiM0MztcdFx0XHRicmVhaztcbiBcbiBcdFx0c3dpdGNoIChsZTE2X3RvX2NwdShoZHItXHUwMDNldGFnKSkge1xuLVx0XHRjYXNlIE1NODFYX0ZXX0hPU1RfVEFCTEVfVEFHX1MxR19DQVBBQklMSVRJRVM6XG4tXHRcdFx0bW04MXhfZndfdXBkYXRlX2NhcGFiaWxpdGllcyhcbi1cdFx0XHRcdG1vcnMsIChzdHJ1Y3QgZXh0X2hvc3RfdGJsX3MxZ19jYXBzICopaGRyKTtcbiYjNDM7XHRcdGNhc2UgTU04MVhfRldfSE9TVF9UQUJMRV9UQUdfUzFHX0NBUEFCSUxJVElFUzoge1xuJiM0MztcdFx0XHRzdHJ1Y3QgZXh0X2hvc3RfdGJsX3MxZ19jYXBzICpjYXBzID0gKHZvaWQgKiloZHI7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAodGx2X2xlbiBcdTAwM2U9IHNpemVvZigqY2FwcykpXG4mIzQzO1x0XHRcdFx0bW04MXhfZndfdXBkYXRlX2NhcGFiaWxpdGllcyhtb3JzLCBjYXBzKTtcbiBcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGNhc2UgTU04MVhfRldfSE9TVF9UQUJMRV9UQUdfSU5TRVJUX1NLQl9DSEVDS1NVTToge1xuJiM0MztcdFx0XHRzdHJ1Y3QgZXh0X2hvc3RfdGJsX2luc2VydF9za2JfY2hlY2tzdW0gKmNzdW0gPVxuJiM0MztcdFx0XHRcdCh2b2lkICopaGRyO1xuIFxuLVx0XHRjYXNlIE1NODFYX0ZXX0hPU1RfVEFCTEVfVEFHX0lOU0VSVF9TS0JfQ0hFQ0tTVU06XG4tXHRcdFx0bW04MXhfZndfdXBkYXRlX3ZhbGlkYXRlX3NrYl9jaGVja3N1bShcbi1cdFx0XHRcdG1vcnMsXG4tXHRcdFx0XHQoc3RydWN0IGV4dF9ob3N0X3RibF9pbnNlcnRfc2tiX2NoZWNrc3VtICopaGRyKTtcbiYjNDM7XHRcdFx0aWYgKHRsdl9sZW4gXHUwMDNlPSBzaXplb2YoKmNzdW0pKVxuJiM0MztcdFx0XHRcdG1tODF4X2Z3X3VwZGF0ZV92YWxpZGF0ZV9za2JfY2hlY2tzdW0obW9ycyxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdCAgICAgIGNzdW0pO1xuIFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0Y2FzZSBNTTgxWF9GV19IT1NUX1RBQkxFX1RBR19ZQVBTX1RBQkxFOiB7XG4mIzQzO1x0XHRcdHN0cnVjdCBleHRfaG9zdF90YmxfeWFwc190YWJsZSAqeWFwcyA9ICh2b2lkICopaGRyO1xuIFxuLVx0XHRjYXNlIE1NODFYX0ZXX0hPU1RfVEFCTEVfVEFHX1lBUFNfVEFCTEU6XG4tXHRcdFx0bW04MXhfeWFwc19od19yZWFkX3RhYmxlKFxuLVx0XHRcdFx0bW9ycywgXHUwMDI2KChzdHJ1Y3QgZXh0X2hvc3RfdGJsX3lhcHNfdGFibGUgKiloZHIpXG4tXHRcdFx0XHRcdCAgICAgICAtXHUwMDNleWFwc190YWJsZSk7XG4mIzQzO1x0XHRcdGlmICh0bHZfbGVuIFx1MDAzZT0gc2l6ZW9mKCp5YXBzKSlcbiYjNDM7XHRcdFx0XHRtbTgxeF95YXBzX2h3X3JlYWRfdGFibGUobW9ycyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgXHUwMDI2eWFwcy1cdTAwM2V5YXBzX3RhYmxlKTtcbiBcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFxuLVx0XHRoZWFkICYjNDM7PSBsZTE2X3RvX2NwdShoZHItXHUwMDNlbGVuZ3RoKTtcbi1cdFx0aWYgKCFoZHItXHUwMDNlbGVuZ3RoKVxuLVx0XHRcdGJyZWFrO1xuJiM0MztcdFx0aGVhZCAmIzQzOz0gdGx2X2xlbjtcbiBcdH1cbiBcbiBcdGtmcmVlKGV4dF9ob3N0X3RhYmxlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNzowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7V0xBTl9WRU5ET1JfTU9SU0VNSUNSTyYjMzQ7LAogICAgJiMzNDtNTTgxWF9VU0ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttbTgxeF9md19pbml0JiMzNDssCiAgICAmIzM0O21tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBtZW1vcnkgbGVha3MgaW4gdGhlIGZpcm13YXJlIHBhcnNpbmcgbG9naWMgb2YgdGhlIE1vcnNlIE1pY3JvIG1tODF4IGRyaXZlci4gVGhlIGRyaXZlciBjYW4gYmUgdGVzdGVkIHZpYSB0aGUgVVNCIGludGVyZmFjZSB1c2luZyBhIGR1bW15IEhDRCBvciBzeXprYWxsZXImIzM5O3MgVVNCIGZ1enppbmcgY2FwYWJpbGl0aWVzLiBUaGUgZmlybXdhcmUgbG9hZGluZyBhbmQgcGFyc2luZyBsb2dpYyBpcyByZWFjaGFibGUgd2hlbiB0aGUgZGV2aWNlIGlzIHByb2JlZCBhbmQgdGhlIGludGVyZmFjZSBpcyBicm91Z2h0IHVwLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDA2NjA3MDVlZDZmY2E4NzNhMDI5ZWUzYzI1MmZjM2ZiODhhMTU0YgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDA3OjA0OjQzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jCmluZGV4IGQ2ZDJhZDA4NmMzMjguLjUwZmE5ZTRiNWY4MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmMKQEAgLTU0LDIxICYjNDM7NTQsMjkgQEAgc3RhdGljIGludCBtbTgxeF9md19nZXRfaGVhZGVyKGNvbnN0IHU4ICpkYXRhLCBFbGYzMl9FaGRyICplaGRyKQogCiBzdGF0aWMgdm9pZCBtbTgxeF9md19wYXJzZV9pbmZvKHN0cnVjdCBtbTgxeCAqbW9ycywgY29uc3QgdTggKmRhdGEsIGludCBsZW5ndGgpCiB7Ci0JY29uc3Qgc3RydWN0IG1tODF4X2Z3X2luZm9fdGx2ICp0bHYgPQotCQkoY29uc3Qgc3RydWN0IG1tODF4X2Z3X2luZm9fdGx2ICopZGF0YTsKJiM0MzsJY29uc3QgdTggKmVuZCA9IGRhdGEgJiM0MzsgbGVuZ3RoOwomIzQzOwljb25zdCB1OCAqcG9zID0gZGF0YTsKJiM0MzsKJiM0MzsJd2hpbGUgKGVuZCAtIHBvcyAmZ3Q7PSAocHRyZGlmZl90KXNpemVvZihzdHJ1Y3QgbW04MXhfZndfaW5mb190bHYpKSB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgbW04MXhfZndfaW5mb190bHYgKnRsdiA9CiYjNDM7CQkJKGNvbnN0IHN0cnVjdCBtbTgxeF9md19pbmZvX3RsdiAqKXBvczsKJiM0MzsJCXUxNiB0bHZfbGVuID0gbGUxNl90b19jcHUodGx2LSZndDtsZW5ndGgpOwomIzQzOwomIzQzOwkJcG9zID0gdGx2LSZndDt2YWw7CiYjNDM7CQlpZiAodGx2X2xlbiAmZ3Q7IGVuZCAtIHBvcykKJiM0MzsJCQlicmVhazsKIAotCXdoaWxlICgodTggKil0bHYgJmx0OyAoZGF0YSAmIzQzOyBsZW5ndGgpKSB7CiAJCXN3aXRjaCAobGUxNl90b19jcHUodGx2LSZndDt0eXBlKSkgewogCQljYXNlIE1NODFYX0ZXX0lORk9fVExWX0JDRl9BRERSOgotCQkJbW9ycy0mZ3Q7YmNmX2FkZHJlc3MgPSBnZXRfdW5hbGlnbmVkX2xlMzIodGx2LSZndDt2YWwpOwomIzQzOwkJCWlmICh0bHZfbGVuICZndDs9IHNpemVvZihfX2xlMzIpKQomIzQzOwkJCQltb3JzLSZndDtiY2ZfYWRkcmVzcyA9CiYjNDM7CQkJCQlnZXRfdW5hbGlnbmVkX2xlMzIodGx2LSZndDt2YWwpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAkJfQotCQl0bHYgPSAoY29uc3Qgc3RydWN0IG1tODF4X2Z3X2luZm9fdGx2ICopKCh1OCAqKXRsdiAmIzQzOwotCQkJCQkJCSBsZTE2X3RvX2NwdSgKLQkJCQkJCQkJIHRsdi0mZ3Q7bGVuZ3RoKSAmIzQzOwotCQkJCQkJCSBzaXplb2YoKnRsdikpOwomIzQzOwomIzQzOwkJcG9zICYjNDM7PSB0bHZfbGVuOwogCX0KIH0KIApAQCAtMTE3LDEzICYjNDM7MTI1LDE1IEBAIHN0YXRpYyBpbnQgbW04MXhfZndfbG9hZF9mdyhzdHJ1Y3QgbW04MXggKm1vcnMsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpCiAKIAlpZiAobW04MXhfZndfZ2V0X2hlYWRlcihmdy0mZ3Q7ZGF0YSwgJmFtcDtlaGRyKSkgewogCQlkZXZfZXJyKG1vcnMtJmd0O2RldiwgJiMzNDtXcm9uZyBmaWxlIGZvcm1hdCYjMzQ7KTsKLQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQlyZXQgPSAtRUlOVkFMOwomIzQzOwkJZ290byBvdXRfZnJlZTsKIAl9CiAKIAlpZiAobW04MXhfZndfZ2V0X3NlY3Rpb25faGVhZGVyKGZ3LSZndDtkYXRhLCAmYW1wO2VoZHIsICZhbXA7c2hfc3RydGFiLAogCQkJCQllaGRyLmVfc2hzdHJuZHgpKSB7CiAJCWRldl9lcnIobW9ycy0mZ3Q7ZGV2LCAmIzM0O0ludmFsaWQgZmlybXdhcmUuIE1pc3Npbmcgc3RyaW5nIHRhYmxlJiMzNDspOwotCQlyZXR1cm4gLUVOT0VOVDsKJiM0MzsJCXJldCA9IC1FTk9FTlQ7CiYjNDM7CQlnb3RvIG91dF9mcmVlOwogCX0KIAogCXNoX3N0cnMgPSAoY29uc3QgY2hhciAqKWZ3LSZndDtkYXRhICYjNDM7IHNoX3N0cnRhYi5zaF9vZmZzZXQ7CkBAIC0xNjAsNyAmIzQzOzE3MCw3IEBAIHN0YXRpYyBpbnQgbW04MXhfZndfbG9hZF9mdyhzdHJ1Y3QgbW04MXggKm1vcnMsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpCiAJCQltbTgxeF9yZWxlYXNlX2J1cyhtb3JzKTsKIAkJCWlmIChzdGF0dXMpIHsKIAkJCQlyZXQgPSAtRUlPOwotCQkJCWJyZWFrOwomIzQzOwkJCQlnb3RvIG91dF9mcmVlOwogCQkJfQogCQl9CiAJfQpAQCAtMTc5LDYgJiM0MzsxODksNyBAQCBzdGF0aWMgaW50IG1tODF4X2Z3X2xvYWRfZncoc3RydWN0IG1tODF4ICptb3JzLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KQogCWlmIChlaGRyLmVfZW50cnkpCiAJCXJldCA9IG1tODF4X2Z3X3NldF9ib290X2FkZHIobW9ycywgZWhkci5lX2VudHJ5KTsKIAomIzQzO291dF9mcmVlOgogCWRldm1fa2ZyZWUobW9ycy0mZ3Q7ZGV2LCBmd19idWYpOwogCXJldHVybiByZXQ7CiB9CkBAIC00OTIsNiAmIzQzOzUwMywxMyBAQCBzdGF0aWMgaW50IG1tODF4X2Z3X3JlYWRfZXh0X2hvc3RfdGFibGUoc3RydWN0IG1tODF4ICptb3JzLAogCWlmIChyZXQpCiAJCWdvdG8gZXhpdDsKIAomIzQzOwkvKiBUaGUgdGFibGUgZGVzY3JpYmVzIGl0cyBvd24gbGVuZ3RoOyBpdCBtdXN0IGZpdCB3aGF0IHdhcyByZWFkICovCiYjNDM7CWlmIChsZTMyX3RvX2NwdShob3N0X3RibC0mZ3Q7ZXh0X2hvc3RfdGJsX2xlbmd0aCkgJmx0OyBzaXplb2YoKmhvc3RfdGJsKSB8fAomIzQzOwkgICAgbGUzMl90b19jcHUoaG9zdF90YmwtJmd0O2V4dF9ob3N0X3RibF9sZW5ndGgpICZndDsgZXh0X2hvc3RfdGJsX2xlbikgewomIzQzOwkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gZXhpdDsKJiM0MzsJfQomIzQzOwogCW1tODF4X3JlbGVhc2VfYnVzKG1vcnMpOwogCSpleHRfaG9zdF90YWJsZSA9IGhvc3RfdGJsOwogCXJldHVybiByZXQ7CkBAIC01NTksMzQgJiM0Mzs1NzcsNDQgQEAgaW50IG1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibChzdHJ1Y3QgbW04MXggKm1vcnMpCiAJZW5kID0gKCh1OCAqKWV4dF9ob3N0X3RhYmxlKSAmIzQzOwogCSAgICAgIGxlMzJfdG9fY3B1KGV4dF9ob3N0X3RhYmxlLSZndDtleHRfaG9zdF90YmxfbGVuZ3RoKTsKIAotCXdoaWxlIChoZWFkICZsdDsgZW5kKSB7CiYjNDM7CXdoaWxlIChlbmQgLSBoZWFkICZndDs9IChwdHJkaWZmX3Qpc2l6ZW9mKHN0cnVjdCBleHRfaG9zdF90YmxfdGx2X2hkcikpIHsKIAkJc3RydWN0IGV4dF9ob3N0X3RibF90bHZfaGRyICpoZHIgPQogCQkJKHN0cnVjdCBleHRfaG9zdF90YmxfdGx2X2hkciAqKWhlYWQ7CiYjNDM7CQl1MTYgdGx2X2xlbiA9IGxlMTZfdG9fY3B1KGhkci0mZ3Q7bGVuZ3RoKTsKJiM0MzsKJiM0MzsJCWlmICh0bHZfbGVuICZsdDsgc2l6ZW9mKCpoZHIpIHx8IHRsdl9sZW4gJmd0OyBlbmQgLSBoZWFkKQomIzQzOwkJCWJyZWFrOwogCiAJCXN3aXRjaCAobGUxNl90b19jcHUoaGRyLSZndDt0YWcpKSB7Ci0JCWNhc2UgTU04MVhfRldfSE9TVF9UQUJMRV9UQUdfUzFHX0NBUEFCSUxJVElFUzoKLQkJCW1tODF4X2Z3X3VwZGF0ZV9jYXBhYmlsaXRpZXMoCi0JCQkJbW9ycywgKHN0cnVjdCBleHRfaG9zdF90YmxfczFnX2NhcHMgKiloZHIpOwomIzQzOwkJY2FzZSBNTTgxWF9GV19IT1NUX1RBQkxFX1RBR19TMUdfQ0FQQUJJTElUSUVTOiB7CiYjNDM7CQkJc3RydWN0IGV4dF9ob3N0X3RibF9zMWdfY2FwcyAqY2FwcyA9ICh2b2lkICopaGRyOwomIzQzOwomIzQzOwkJCWlmICh0bHZfbGVuICZndDs9IHNpemVvZigqY2FwcykpCiYjNDM7CQkJCW1tODF4X2Z3X3VwZGF0ZV9jYXBhYmlsaXRpZXMobW9ycywgY2Fwcyk7CiAJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJCWNhc2UgTU04MVhfRldfSE9TVF9UQUJMRV9UQUdfSU5TRVJUX1NLQl9DSEVDS1NVTTogewomIzQzOwkJCXN0cnVjdCBleHRfaG9zdF90YmxfaW5zZXJ0X3NrYl9jaGVja3N1bSAqY3N1bSA9CiYjNDM7CQkJCSh2b2lkICopaGRyOwogCi0JCWNhc2UgTU04MVhfRldfSE9TVF9UQUJMRV9UQUdfSU5TRVJUX1NLQl9DSEVDS1NVTToKLQkJCW1tODF4X2Z3X3VwZGF0ZV92YWxpZGF0ZV9za2JfY2hlY2tzdW0oCi0JCQkJbW9ycywKLQkJCQkoc3RydWN0IGV4dF9ob3N0X3RibF9pbnNlcnRfc2tiX2NoZWNrc3VtICopaGRyKTsKJiM0MzsJCQlpZiAodGx2X2xlbiAmZ3Q7PSBzaXplb2YoKmNzdW0pKQomIzQzOwkJCQltbTgxeF9md191cGRhdGVfdmFsaWRhdGVfc2tiX2NoZWNrc3VtKG1vcnMsCiYjNDM7CQkJCQkJCQkgICAgICBjc3VtKTsKIAkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwkJY2FzZSBNTTgxWF9GV19IT1NUX1RBQkxFX1RBR19ZQVBTX1RBQkxFOiB7CiYjNDM7CQkJc3RydWN0IGV4dF9ob3N0X3RibF95YXBzX3RhYmxlICp5YXBzID0gKHZvaWQgKiloZHI7CiAKLQkJY2FzZSBNTTgxWF9GV19IT1NUX1RBQkxFX1RBR19ZQVBTX1RBQkxFOgotCQkJbW04MXhfeWFwc19od19yZWFkX3RhYmxlKAotCQkJCW1vcnMsICZhbXA7KChzdHJ1Y3QgZXh0X2hvc3RfdGJsX3lhcHNfdGFibGUgKiloZHIpCi0JCQkJCSAgICAgICAtJmd0O3lhcHNfdGFibGUpOwomIzQzOwkJCWlmICh0bHZfbGVuICZndDs9IHNpemVvZigqeWFwcykpCiYjNDM7CQkJCW1tODF4X3lhcHNfaHdfcmVhZF90YWJsZShtb3JzLAomIzQzOwkJCQkJCQkgJmFtcDt5YXBzLSZndDt5YXBzX3RhYmxlKTsKIAkJCWJyZWFrOwomIzQzOwkJfQogCQlkZWZhdWx0OgogCQkJYnJlYWs7CiAJCX0KIAotCQloZWFkICYjNDM7PSBsZTE2X3RvX2NwdShoZHItJmd0O2xlbmd0aCk7Ci0JCWlmICghaGRyLSZndDtsZW5ndGgpCi0JCQlicmVhazsKJiM0MzsJCWhlYWQgJiM0Mzs9IHRsdl9sZW47CiAJfQogCiAJa2ZyZWUoZXh0X2hvc3RfdGFibGUpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODY5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFdpRmkgRHJpdmVyIFBhdGNoIGZvciBWdWxuZXJhYmlsaXRpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0YXJnZXRzIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmNgLiBUaGUgZGVzY3JpcHRpb24gbWVudGlvbnMgYSBmaXggZm9yIG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIG1lbW9yeSBsZWFrcywgd2hpY2ggaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJdCBzb3VuZHMgbGlrZSBzb21lb25lIGhhcyBiZWVuIGRpZ2dpbmcgaW50byB0aGUgZmlybXdhcmUgcGFyc2luZyBsb2dpYyBmb3IgdGhlIE1NODF4IGNoaXBzZXQgYW5kIGZvdW5kIHNvbWUgbmFzdGllcy4gU3BlY2lmaWNhbGx5LCB0aGV5JiMzOTt2ZSBhZGRlZCBsZW5ndGggY2hlY2tzIGluIGBtbTgxeF9md19wYXJzZV9pbmZvYCwgYG1tODF4X2Z3X3JlYWRfZXh0X2hvc3RfdGFibGVgLCBhbmQgYG1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibGAg4oCTIGdvb2QsIGRlZmVuc2l2ZSBwcm9ncmFtbWluZywgZXhhY3RseSB3aGF0JiMzOTtzIG5lZWRlZCB3aGVuIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSB1bnRydXN0ZWQgZmlybXdhcmUgZGF0YSBzdHJ1Y3R1cmVzLiBUaGV5JiMzOTt2ZSBhbHNvIGNsZWFuZWQgdXAgYSBtZW1vcnkgbGVhayBpbiBgbW04MXhfZndfbG9hZF9md2AgYnkgY29ycmVjdGx5IGhhbmRsaW5nIHRoZSBjbGVhbnVwIHBhdGguIFNtYXJ0IHVzZSBvZiBgZ290byBvdXRfZnJlZWAgdGhlcmUsIG11Y2ggY2xlYW5lciB0aGFuIGEgZGlyZWN0IHJldHVybi4KCk15IGltbWVkaWF0ZSBmb2xsb3ctdXAgdGhvdWdodCBpcyBhYm91dCB0aGUgYXR0YWNrIHN1cmZhY2UuIElzIHRoaXMgZHJpdmVyIGV2ZW4gcmVhY2hhYmxlIGluIGEgdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gVGhlIGRyaXZlciBpdHNlbGYgaXMsIGFzIHRoZSBjb2RlIHJldmVhbHMsIGBtbTgxeGAgZnJvbSBNb3JzZSBNaWNyby4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBsaWtlbGlob29kIG9mIGV4cGxvaXRhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyB0byBzZWUgaWYgdGhlIGRyaXZlciBpcyBjb21tb25seSBlbmFibGVkIGluIGNvbmZpZ3VyYXRpb25zIHJlbGV2YW50IHRvIHZpcnR1YWxpemF0aW9uLCBjb250YWluZXJzLCBvciBlbWJlZGRlZCBzeXN0ZW1zIHdoZXJlIHRoaXMga2luZCBvZiB2dWxuZXJhYmlsaXR5IHdvdWxkIGJlIG1vc3QgaW1wYWN0ZnVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA3OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21tODF4JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDQ4NDYgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vS2NvbmZpZz0xMz1pZiBXTEFOX1ZFTkRPUl9NT1JTRU1JQ1JPXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL0tjb25maWc6MTQ6c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9LY29uZmlnLTE1LWVuZGlmICMgV0xBTl9WRU5ET1JfTU9SU0VNSUNST1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX01NODFYKSAmIzQzOz0gbW04MXgvXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9NYWtlZmlsZS0yLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9NYWtlZmlsZTozOm9iai0kKENPTkZJR19NTTgxWCkgJiM0Mzs9IG1tODF4X2NvcmUub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9NYWtlZmlsZS00LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9NYWtlZmlsZTo1Om1tODF4X2NvcmUteSAmIzQzOz0gY29yZS5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L01ha2VmaWxlOjY6bW04MXhfY29yZS15ICYjNDM7PSBtYWMub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9NYWtlZmlsZTo3Om1tODF4X2NvcmUteSAmIzQzOz0gaHcub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9NYWtlZmlsZTo4Om1tODF4X2NvcmUteSAmIzQzOz0gZncub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9NYWtlZmlsZTo5Om1tODF4X2NvcmUteSAmIzQzOz0gY29tbWFuZC5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L01ha2VmaWxlOjEwOm1tODF4X2NvcmUteSAmIzQzOz0gcHMub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9NYWtlZmlsZToxMTptbTgxeF9jb3JlLXkgJiM0Mzs9IHNrYnEub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9NYWtlZmlsZToxMjptbTgxeF9jb3JlLXkgJiM0Mzs9IHlhcHNfaHcub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9NYWtlZmlsZToxMzptbTgxeF9jb3JlLXkgJiM0Mzs9IHlhcHMub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9NYWtlZmlsZToxNDptbTgxeF9jb3JlLXkgJiM0Mzs9IHJjLm9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvTWFrZWZpbGU6MTU6bW04MXhfY29yZS15ICYjNDM7PSBtbXJjLm9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvTWFrZWZpbGUtMTYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L01ha2VmaWxlOjE3Om9iai0kKENPTkZJR19NTTgxWF9VU0IpICYjNDM7PSBtbTgxeF91c2Iub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9NYWtlZmlsZToxODptbTgxeF91c2IteSAmIzQzOz0gdXNiLm9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvTWFrZWZpbGUtMTktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19NTTgxWF9TRElPKSAmIzQzOz0gbW04MXhfc2Rpby5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L01ha2VmaWxlOjIxOm1tODF4X3NkaW8teSAmIzQzOz0gc2Rpby5vXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaC0xMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmg6MTI6ZW51bSBtbTgxeF9idXNfdHlwZSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oLTEzLVx0TU04MVhfQlVTX1RZUEVfVVNCLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmgtMTYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oOjE3OnN0cnVjdCBtbTgxeF9idXNfb3BzIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmg6MTg6XHRpbnQgKCpkbV9yZWFkKShzdHJ1Y3QgbW04MXggKm1vcnMsIHUzMiBhZGRyLCB1OCAqZGF0YSwgaW50IGxlbik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oOjE5Olx0aW50ICgqZG1fd3JpdGUpKHN0cnVjdCBtbTgxeCAqbW9ycywgdTMyIGFkZHIsIGNvbnN0IHU4ICpkYXRhLCBpbnQgbGVuKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmg6MjA6XHRpbnQgKCpyZWczMl9yZWFkKShzdHJ1Y3QgbW04MXggKm1vcnMsIHUzMiBhZGRyLCB1MzIgKmRhdGEpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaDoyMTpcdGludCAoKnJlZzMyX3dyaXRlKShzdHJ1Y3QgbW04MXggKm1vcnMsIHUzMiBhZGRyLCB1MzIgZGF0YSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oOjIyOlx0aW50ICgqZGlnaXRhbF9yZXNldCkoc3RydWN0IG1tODF4ICptb3JzKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmg6MjM6XHR2b2lkICgqc2V0X2J1c19lbmFibGUpKHN0cnVjdCBtbTgxeCAqbW9ycywgYm9vbCBlbmFibGUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaDoyNDpcdHZvaWQgKCpjb25maWdfYnVyc3RfbW9kZSkoc3RydWN0IG1tODF4ICptb3JzLCBib29sIGVuYWJsZV9idXJzdCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oOjI1Olx0dm9pZCAoKmNsYWltKShzdHJ1Y3QgbW04MXggKm1vcnMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaDoyNjpcdHZvaWQgKCpzZXRfaXJxKShzdHJ1Y3QgbW04MXggKm1vcnMsIGJvb2wgZW5hYmxlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmg6Mjc6XHR2b2lkICgqcmVsZWFzZSkoc3RydWN0IG1tODF4ICptb3JzKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmgtMjgtXHR1bnNpZ25lZCBpbnQgYnVsa19hbGlnbm1lbnQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaC0zNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmg6Mzc6LyogbW04MXhfZG1fcmVhZCAtIGxlbiBtdXN0IGJlIHJvdW5kZWQgdXAgdG8gdGhlIG5lYXJlc3QgNC1ieXRlIGJvdW5kYXJ5ICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oOjM4OnN0YXRpYyBpbmxpbmUgaW50IG1tODF4X2RtX3JlYWQoc3RydWN0IG1tODF4ICptb3JzLCB1MzIgYWRkciwgdTggKmRhdGEsIGludCBsZW4pXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oLTM5LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oLTQyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaDo0MzpzdGF0aWMgaW5saW5lIGludCBtbTgxeF9kbV93cml0ZShzdHJ1Y3QgbW04MXggKm1vcnMsIHUzMiBhZGRyLCBjb25zdCB1OCAqZGF0YSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmgtNDQtXHRcdFx0XHQgaW50IGxlbilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oLTQ4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaDo0OTpzdGF0aWMgaW5saW5lIGludCBtbTgxeF9yZWczMl9yZWFkKHN0cnVjdCBtbTgxeCAqbW9ycywgdTMyIGFkZHIsIHUzMiAqZGF0YSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmgtNTAte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmgtNTMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oOjU0OnN0YXRpYyBpbmxpbmUgaW50IG1tODF4X3JlZzMyX3dyaXRlKHN0cnVjdCBtbTgxeCAqbW9ycywgdTMyIGFkZHIsIHUzMiBkYXRhKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaC01NS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaC01OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmg6NTk6c3RhdGljIGlubGluZSBpbnQgbW04MXhfYnVzX2RpZ2l0YWxfcmVzZXQoc3RydWN0IG1tODF4ICptb3JzKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaC02MC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaC02Ni1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmg6Njc6c3RhdGljIGlubGluZSB2b2lkIG1tODF4X3NldF9idXNfZW5hYmxlKHN0cnVjdCBtbTgxeCAqbW9ycywgYm9vbCBlbmFibGUpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oLTY4LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oLTcxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaDo3MjpzdGF0aWMgaW5saW5lIHZvaWQgbW04MXhfYnVzX2NvbmZpZ19idXJzdF9tb2RlKHN0cnVjdCBtbTgxeCAqbW9ycyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmgtNzMtXHRcdFx0XHRcdCAgICAgICBib29sIGVuYWJsZV9idXJzdClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oLTc4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaDo3OTpzdGF0aWMgaW5saW5lIHZvaWQgbW04MXhfY2xhaW1fYnVzKHN0cnVjdCBtbTgxeCAqbW9ycylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmgtODAte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmgtODMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oOjg0OnN0YXRpYyBpbmxpbmUgdm9pZCBtbTgxeF9idXNfc2V0X2lycShzdHJ1Y3QgbW04MXggKm1vcnMsIGJvb2wgZW5hYmxlKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaC04NS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaC04OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmg6ODk6c3RhdGljIGlubGluZSB2b2lkIG1tODF4X3JlbGVhc2VfYnVzKHN0cnVjdCBtbTgxeCAqbW9ycylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmgtOTAte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmgtOTMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oOjk0OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG1tODF4X2J1c19nZXRfYWxpZ25tZW50KHN0cnVjdCBtbTgxeCAqbW9ycylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmgtOTUte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jPTI3PXN0cnVjdCBob3N0X2NtZF9yZXNwX2NiIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0zMi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjMzOnN0YXRpYyBpbnQgbW04MXhfY21kX3R4KHN0cnVjdCBtbTgxeCAqbW9ycywgc3RydWN0IGhvc3RfY21kX3Jlc3AgKnJlc3AsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0zNC1cdFx0XHRzdHJ1Y3QgaG9zdF9jbWRfcmVxICpyZXEsIHUzMiBsZW5ndGgsIHUzMiB0aW1lb3V0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTQxLVx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjQyOlx0c3RydWN0IG1tODF4X3NrYnEgKmNtZF9xID0gbW04MXhfaGlmX2dldF90eF9jbWRfcXVldWUobW9ycyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy00My1cdHN0cnVjdCBob3N0X2NtZF9yZXNwX2NiICpyZXNwX2NiO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTU3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6NTg6XHRtbTgxeF9wc19kaXNhYmxlKG1vcnMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNTktXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNjItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzo2MzpcdFx0c2tiID0gbW04MXhfc2ticV9hbGxvY19za2IoY21kX3EsIGNtZF9sZW4pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNjQtXHRcdGlmICghc2tiKSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtODMtXHRcdHRpbWVvdXQgPSB0aW1lb3V0ID8gdGltZW91dCA6IEhPU1RfQ01EX0RFRkFVTFRfVElNRU9VVF9NUztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjg0Olx0XHRyZXQgPSBtbTgxeF9za2JxX3NrYl90eChjbWRfcSwgXHUwMDI2c2tiLCBOVUxMLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtODUtXHRcdFx0XHRcdE1NODFYX1NLQl9DSEFOX0NPTU1BTkQpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTg4LVx0XHRpZiAocmV0KSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzo4OTpcdFx0XHRkZXZfZXJyKG1vcnMtXHUwMDNlZGV2LCBcJiMzNDttbTgxeF9za2JxX3R4IGZhaWw6ICVkXCYjMzQ7LCByZXQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtOTAtXHRcdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMTIxLVx0XHRzcGluX2xvY2tfYmgoXHUwMDI2Y21kX3EtXHUwMDNlbG9jayk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzoxMjI6XHRcdG1tODF4X3NrYnFfc2tiX2ZpbmlzaChjbWRfcSwgc2tiLCBOVUxMKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTEyMy1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y21kX3EtXHUwMDNlbG9jayk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMTI4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6MTI5Olx0bW04MXhfcHNfZW5hYmxlKG1vcnMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMTMwLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1vcnMtXHUwMDNlY21kX3dhaXQpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTE0NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjE0NjppbnQgbW04MXhfY21kX3Jlc3BfcHJvY2VzcyhzdHJ1Y3QgbW04MXggKm1vcnMsIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0xNDcte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMTQ4LVx0aW50IGxlbmd0aCwgcmV0ID0gLUVTUkNIOyAvKiBObyBzdWNoIHByb2Nlc3MgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjE0OTpcdHN0cnVjdCBtbTgxeF9za2JxICpjbWRfcSA9IG1tODF4X2hpZl9nZXRfdHhfY21kX3F1ZXVlKG1vcnMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMTUwLVx0c3RydWN0IGhvc3RfY21kX3Jlc3AgKnNyY19yZXNwID0gKHN0cnVjdCBob3N0X2NtZF9yZXNwICopKHNrYi1cdTAwM2VkYXRhKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0xNjMtXHRpZiAoIUhPU1RfQ01EX0lTX1JFU1Aoc3JjX3Jlc3ApKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzoxNjQ6XHRcdHJldCA9IG1tODF4X21hY19ldmVudF9yZWN2KG1vcnMsIHNrYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0xNjUtXHRcdGdvdG8gZXhpdF9mcmVlO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTE2OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjE3MDpcdGNtZF9za2IgPSBtbTgxeF9za2JxX3R4X3BlbmRpbmcoY21kX3EpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMTcxLVx0aWYgKGNtZF9za2IpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjE3MjpcdFx0bW04MXhfc2ticV9wdWxsX2hkcl9wb3N0X3R4KGNtZF9za2IpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMTczLVx0XHRyZXEgPSAoc3RydWN0IGhvc3RfY21kX3JlcSAqKWNtZF9za2ItXHUwMDNlZGF0YTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0yMzEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzoyMzI6aW50IG1tODF4X2NtZF9zdGFfc3RhdGUoc3RydWN0IG1tODF4ICptb3JzLCBzdHJ1Y3QgbW04MXhfdmlmICptb3JzX3ZpZiwgdTE2IGFpZCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTIzMy1cdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTI0NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjI0NjpcdHJldHVybiBtbTgxeF9jbWRfdHgobW9ycywgTlVMTCwgKHN0cnVjdCBob3N0X2NtZF9yZXEgKilcdTAwMjZyZXEsIDAsIDApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMjQ3LX1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTI0OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjI0OTppbnQgbW04MXhfY21kX2FkZF9pZihzdHJ1Y3QgbW04MXggKm1vcnMsIHUxNiAqdmlmX2lkLCBjb25zdCB1OCAqYWRkcixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTI1MC1cdFx0ICAgICBlbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGUpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMjcwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6MjcxOlx0cmV0ID0gbW04MXhfY21kX3R4KG1vcnMsIChzdHJ1Y3QgaG9zdF9jbWRfcmVzcCAqKVx1MDAyNnJlc3AsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0yNzItXHRcdFx0ICAgKHN0cnVjdCBob3N0X2NtZF9yZXEgKilcdTAwMjZyZXEsIHNpemVvZihyZXNwKSwgMCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMjc4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6Mjc5OmludCBtbTgxeF9jbWRfZ2V0X2NhcGFiaWxpdGllcyhzdHJ1Y3QgbW04MXggKm1vcnMsIHUxNiB2aWZfaWQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzoyODA6XHRcdFx0ICAgICAgIHN0cnVjdCBtbTgxeF9md19jYXBzICpjYXBhYmlsaXRpZXMpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0yODEte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTI4OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjI4OTpcdHJldCA9IG1tODF4X2NtZF90eChtb3JzLCAoc3RydWN0IGhvc3RfY21kX3Jlc3AgKilcdTAwMjZyc3AsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0yOTAtXHRcdFx0ICAgKHN0cnVjdCBob3N0X2NtZF9yZXEgKilcdTAwMjZyZXEsIHNpemVvZihyc3ApLCAwKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0yOTQtXHRjYXBhYmlsaXRpZXMtXHUwMDNlYW1wZHVfbXNzID0gcnNwLmNhcGFiaWxpdGllcy5hbXBkdV9tc3M7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzoyOTU6XHRjYXBhYmlsaXRpZXMtXHUwMDNlbW04MXhfbW1zc19vZmZzZXQgPSByc3AubW9yc2VfbW1zc19vZmZzZXQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0yOTYtXHRjYXBhYmlsaXRpZXMtXHUwMDNlYmVhbWZvcm1lZV9zdHNfY2FwYWJpbGl0eSA9XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMzA3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6MzA4OmludCBtbTgxeF9jbWRfZ2V0X21heF90eHBvd2VyKHN0cnVjdCBtbTgxeCAqbW9ycywgczMyICpvdXRfcG93ZXJfbWJtKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMzA5LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0zMTUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzozMTY6XHRyZXQgPSBtbTgxeF9jbWRfdHgobW9ycywgKHN0cnVjdCBob3N0X2NtZF9yZXNwICopXHUwMDI2cmVzcCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTMxNy1cdFx0XHQgICAoc3RydWN0IGhvc3RfY21kX3JlcSAqKVx1MDAyNnJlcSwgc2l6ZW9mKHJlc3ApLCAwKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0zMjMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzozMjQ6aW50IG1tODF4X2NtZF9od19zY2FuKHN0cnVjdCBtbTgxeCAqbW9ycywgc3RydWN0IG1tODF4X2h3X3NjYW5fcGFyYW1zICpwYXJhbXMsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0zMjUtXHRcdCAgICAgIGJvb2wgc3RvcmUpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMzMyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6MzMzOlx0Y21kX3NpemUgPSBtbTgxeF9od19zY2FuX2hfZ2V0X2NtZF9zaXplKHBhcmFtcyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0zMzQtXHRjbWRfc2l6ZSA9IFJPVU5EX0JZVEVTX1RPX1dPUkQoY21kX3NpemUpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTM1Mi1cdFx0cmVxLVx1MDAzZWR3ZWxsX3RpbWVfbXMgPSBjcHVfdG9fbGUzMihwYXJhbXMtXHUwMDNlZHdlbGxfdGltZV9tcyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzozNTM6XHRcdGJ1ZiA9IG1tODF4X2h3X3NjYW5faF9pbnNlcnRfdGx2cyhwYXJhbXMsIGJ1Zik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0zNTQtXHR9XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMzU4LVx0cmVxLVx1MDAzZWhkci5sZW4gPSBjcHVfdG9fbGUxNigodTE2KSgoYnVmIC0gKHU4ICopcmVxKSAtIHNpemVvZihyZXEtXHUwMDNlaGRyKSkpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6MzU5Olx0cmV0ID0gbW04MXhfY21kX3R4KG1vcnMsIE5VTEwsIChzdHJ1Y3QgaG9zdF9jbWRfcmVxICopcmVxLCAwLCAwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTM2MC1cdGtmcmVlKHJlcSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMzY0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6MzY1OmludCBtbTgxeF9jbWRfc2V0X3R4cG93ZXIoc3RydWN0IG1tODF4ICptb3JzLCBzMzIgKm91dF9wb3dlcl9tYm0sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0zNjYtXHRcdFx0ICBpbnQgdHhwb3dlcl9tYm0pXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMzc0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6Mzc1Olx0cmV0ID0gbW04MXhfY21kX3R4KG1vcnMsIChzdHJ1Y3QgaG9zdF9jbWRfcmVzcCAqKVx1MDAyNnJlc3AsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0zNzYtXHRcdFx0ICAgKHN0cnVjdCBob3N0X2NtZF9yZXEgKilcdTAwMjZyZXEsIHNpemVvZihyZXNwKSwgMCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMzgyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6MzgzOmludCBtbTgxeF9jbWRfc2V0X2NoYW5uZWwoc3RydWN0IG1tODF4ICptb3JzLCB1MzIgb3BfY2hhbl9mcmVxX2h6LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMzg0LVx0XHRcdCAgdTggcHJpXzFtaHpfY2hhbl9pZHgsIHU4IG9wX2J3X21oeiwgdTggcHJpX2J3X21oeixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0zOTctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzozOTg6XHRyZXQgPSBtbTgxeF9jbWRfdHgobW9ycywgKHN0cnVjdCBob3N0X2NtZF9yZXNwICopXHUwMDI2cmVzcCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTM5OS1cdFx0XHQgICAoc3RydWN0IGhvc3RfY21kX3JlcSAqKVx1MDAyNnJlcSwgc2l6ZW9mKHJlc3ApLCAwKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy00MDUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzo0MDY6aW50IG1tODF4X2NtZF9kaXNhYmxlX2tleShzdHJ1Y3QgbW04MXggKm1vcnMsIHN0cnVjdCBtbTgxeF92aWYgKm1vcnNfdmlmLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNDA3LVx0XHRcdCAgdTE2IGFpZCwgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTQxOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjQxOTpcdHJldHVybiBtbTgxeF9jbWRfdHgobW9ycywgTlVMTCwgKHN0cnVjdCBob3N0X2NtZF9yZXEgKilcdTAwMjZyZXEsIDAsIDApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNDIwLX1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTQyMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjQyMjppbnQgbW04MXhfY21kX2luc3RhbGxfa2V5KHN0cnVjdCBtbTgxeCAqbW9ycywgc3RydWN0IG1tODF4X3ZpZiAqbW9yc192aWYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy00MjMtXHRcdFx0ICB1MTYgYWlkLCBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXksXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNDQ1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6NDQ2Olx0cmV0ID0gbW04MXhfY21kX3R4KG1vcnMsIChzdHJ1Y3QgaG9zdF9jbWRfcmVzcCAqKVx1MDAyNnJlc3AsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy00NDctXHRcdFx0ICAgKHN0cnVjdCBob3N0X2NtZF9yZXEgKilcdTAwMjZyZXEsIHNpemVvZihyZXNwKSwgMCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNDU2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6NDU3OmludCBtbTgxeF9jbWRfY2ZnX211bHRpY2FzdF9maWx0ZXIoc3RydWN0IG1tODF4ICptb3JzLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6NDU4Olx0XHRcdFx0ICAgc3RydWN0IG1tODF4X3ZpZiAqbW9yc192aWYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy00NTkte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTQ3NC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjQ3NTpcdHJldCA9IG1tODF4X2NtZF90eChtb3JzLCBOVUxMLCAoc3RydWN0IGhvc3RfY21kX3JlcSAqKXJlcSwgMCwgMCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy00NzYtXHRrZnJlZShyZXEpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTQ3OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjQ4MDppbnQgbW04MXhfY21kX2NmZ19ic3Moc3RydWN0IG1tODF4ICptb3JzLCB1MTYgdmlmX2lkLCB1MTYgYmVhY29uX2ludCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTQ4MS1cdFx0ICAgICAgdTE2IGR0aW1fcGVyaW9kLCB1MzIgY3NzaWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNDg5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6NDkwOlx0cmV0dXJuIG1tODF4X2NtZF90eChtb3JzLCBOVUxMLCAoc3RydWN0IGhvc3RfY21kX3JlcSAqKVx1MDAyNnJlcSwgMCwgMCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy00OTEtfVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNDkyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6NDkzOmludCBtbTgxeF9jbWRfY29uZmlnX2JlYWNvbl90aW1lcihzdHJ1Y3QgbW04MXggKm1vcnMsIHZvaWQgKm1tODF4X3ZpZixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTQ5NC1cdFx0XHRcdCAgYm9vbCBlbmFibGVkKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNDk1LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjQ5NjpcdHN0cnVjdCBtbTgxeF92aWYgKnZpZiA9IG1tODF4X3ZpZjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTQ5Ny1cdHN0cnVjdCBob3N0X2NtZF9yZXFfYnNzX2JlYWNvbl9jb25maWcgcmVxID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTUwMi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjUwMzpcdHJldHVybiBtbTgxeF9jbWRfdHgobW9ycywgTlVMTCwgKHN0cnVjdCBob3N0X2NtZF9yZXEgKilcdTAwMjZyZXEsIDAsIDApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNTA0LX1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTUwNS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjUwNjppbnQgbW04MXhfY21kX3NldF9wcyhzdHJ1Y3QgbW04MXggKm1vcnMsIGJvb2wgZW5hYmxlZClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTUwNy17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNTEyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6NTEzOlx0cmV0dXJuIG1tODF4X2NtZF90eChtb3JzLCBOVUxMLCAoc3RydWN0IGhvc3RfY21kX3JlcSAqKVx1MDAyNnJlcSwgMCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTUxNC1cdFx0XHQgICAgSE9TVF9DTURfUE9XRVJTQVZFX1RJTUVPVVRfTVMpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTUxNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjUxNzppbnQgbW04MXhfY21kX2NmZ19xb3Moc3RydWN0IG1tODF4ICptb3JzLCBzdHJ1Y3QgbW04MXhfcXVldWVfcGFyYW1zICpwYXJhbXMpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy01MTgte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTUyOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjUyOTpcdHJldHVybiBtbTgxeF9jbWRfdHgobW9ycywgTlVMTCwgKHN0cnVjdCBob3N0X2NtZF9yZXEgKilcdTAwMjZyZXEsIDAsIDApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNTMwLX1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTUzMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjUzMjppbnQgbW04MXhfY21kX3JtX2lmKHN0cnVjdCBtbTgxeCAqbW9ycywgdTE2IHZpZl9pZClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTUzMy17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNTM3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6NTM4Olx0cmV0dXJuIG1tODF4X2NtZF90eChtb3JzLCBOVUxMLCAoc3RydWN0IGhvc3RfY21kX3JlcSAqKVx1MDAyNnJlcSwgMCwgMCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy01MzktfVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNTQwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6NTQxOmludCBtbTgxeF9jbWRfc2V0X2ZyYWdfdGhyZXNob2xkKHN0cnVjdCBtbTgxeCAqbW9ycywgdTMyIGZyYWdfdGhyZXNob2xkKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNTQyLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy01NDktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzo1NTA6XHRyZXR1cm4gbW04MXhfY21kX3R4KG1vcnMsIE5VTEwsIChzdHJ1Y3QgaG9zdF9jbWRfcmVxICopXHUwMDI2cmVxLCAwLCAwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTU1MS19XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy01NTItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzo1NTM6aW50IG1tODF4X2NtZF9nZXRfZGlzYWJsZWRfY2hhbm5lbHMoXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzo1NTQ6XHRzdHJ1Y3QgbW04MXggKm1vcnMsIHN0cnVjdCBob3N0X2NtZF9yZXNwX2dldF9kaXNhYmxlZF9jaGFubmVscyAqcmVzcCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTU1NS1cdHVpbnQgcmVzcF9sZW4pXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNTYwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6NTYxOlx0cmV0dXJuIG1tODF4X2NtZF90eChtb3JzLCAoc3RydWN0IGhvc3RfY21kX3Jlc3AgKilyZXNwLCBcdTAwMjZyZXEsIHJlc3BfbGVuLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNTYyLVx0XHRcdCAgICAwKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaC0xOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oOjE5OnN0cnVjdCBtbTgxeF9xdWV1ZV9wYXJhbXM7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaC0yMC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oOjIxOmVudW0gbW04MXhfY21kX3JldHVybl9jb2RlIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oLTIyLVx0TU04MVhfUkVUX1NVQ0NFU1MgPSAwLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oPTQ0PXN0cnVjdCBob3N0X2NtZF9ldmVudCB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmgtNDgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaDo0OTppbnQgbW04MXhfY21kX3Jlc3BfcHJvY2VzcyhzdHJ1Y3QgbW04MXggKm1vcnMsIHN0cnVjdCBza19idWZmICpza2IpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmg6NTA6aW50IG1tODF4X2NtZF9hZGRfaWYoc3RydWN0IG1tODF4ICptb3JzLCB1MTYgKnZpZl9pZCwgY29uc3QgdTggKmFkZHIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaC01MS1cdFx0ICAgICBlbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmg6NTI6aW50IG1tODF4X2NtZF9nZXRfY2FwYWJpbGl0aWVzKHN0cnVjdCBtbTgxeCAqbW9ycywgdTE2IHZpZl9pZCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oOjUzOlx0XHRcdCAgICAgICBzdHJ1Y3QgbW04MXhfZndfY2FwcyAqY2FwYWJpbGl0aWVzKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oOjU0OmludCBtbTgxeF9jbWRfY2ZnX3FvcyhzdHJ1Y3QgbW04MXggKm1vcnMsIHN0cnVjdCBtbTgxeF9xdWV1ZV9wYXJhbXMgKnBhcmFtcyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaDo1NTppbnQgbW04MXhfY21kX2NvbmZpZ19iZWFjb25fdGltZXIoc3RydWN0IG1tODF4ICptb3JzLCB2b2lkICptbTgxeF92aWYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaC01Ni1cdFx0XHRcdCAgYm9vbCBlbmFibGVkKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oOjU3OmludCBtbTgxeF9jbWRfY2ZnX2JzcyhzdHJ1Y3QgbW04MXggKm1vcnMsIHUxNiB2aWZfaWQsIHUxNiBiZWFjb25faW50LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmgtNTgtXHRcdCAgICAgIHUxNiBkdGltX3BlcmlvZCwgdTMyIGNzc2lkKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oOjU5OmludCBtbTgxeF9jbWRfc2V0X2NoYW5uZWwoc3RydWN0IG1tODF4ICptb3JzLCB1MzIgb3BfY2hhbl9mcmVxX2h6LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmgtNjAtXHRcdFx0ICB1OCBwcmlfMW1oel9jaGFuX2lkeCwgdTggb3BfYndfbWh6LCB1OCBwcmlfYndfbWh6LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmgtNjEtXHRcdFx0ICBzMzIgKnBvd2VyX21ibSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaDo2MjppbnQgbW04MXhfY21kX2dldF9tYXhfdHhwb3dlcihzdHJ1Y3QgbW04MXggKm1vcnMsIHMzMiAqb3V0X3Bvd2VyX21ibSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaDo2MzppbnQgbW04MXhfY21kX3NldF90eHBvd2VyKHN0cnVjdCBtbTgxeCAqbW9ycywgczMyICpvdXRfcG93ZXJfbWJtLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmgtNjQtXHRcdFx0ICBpbnQgdHhwb3dlcl9tYm0pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmg6NjU6aW50IG1tODF4X2NtZF9od19zY2FuKHN0cnVjdCBtbTgxeCAqbW9ycywgc3RydWN0IG1tODF4X2h3X3NjYW5fcGFyYW1zICpwYXJhbXMsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaC02Ni1cdFx0ICAgICAgYm9vbCBzdG9yZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaDo2NzppbnQgbW04MXhfY21kX3NldF9wcyhzdHJ1Y3QgbW04MXggKm1vcnMsIGJvb2wgZW5hYmxlZCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaDo2ODppbnQgbW04MXhfY21kX2NmZ19tdWx0aWNhc3RfZmlsdGVyKHN0cnVjdCBtbTgxeCAqbW9ycyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oOjY5Olx0XHRcdFx0ICAgc3RydWN0IG1tODF4X3ZpZiAqbW9yc192aWYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmg6NzA6aW50IG1tODF4X2NtZF9zdGFfc3RhdGUoc3RydWN0IG1tODF4ICptb3JzLCBzdHJ1Y3QgbW04MXhfdmlmICptb3JzX3ZpZiwgdTE2IGFpZCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oLTcxLVx0XHRcdHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaC03Mi1cdFx0XHRlbnVtIGllZWU4MDIxMV9zdGFfc3RhdGUgc3RhdGUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmg6NzM6aW50IG1tODF4X2NtZF9pbnN0YWxsX2tleShzdHJ1Y3QgbW04MXggKm1vcnMsIHN0cnVjdCBtbTgxeF92aWYgKm1vcnNfdmlmLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmgtNzQtXHRcdFx0ICB1MTYgYWlkLCBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXksXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmgtNzYtXHRcdFx0ICBlbnVtIGhvc3RfY21kX2Flc19rZXlfbGVuIGxlbmd0aCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaDo3NzppbnQgbW04MXhfY21kX2Rpc2FibGVfa2V5KHN0cnVjdCBtbTgxeCAqbW9ycywgc3RydWN0IG1tODF4X3ZpZiAqbW9yc192aWYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaC03OC1cdFx0XHQgIHUxNiBhaWQsIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaDo3OTppbnQgbW04MXhfY21kX3JtX2lmKHN0cnVjdCBtbTgxeCAqbW9ycywgdTE2IHZpZl9pZCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaDo4MDppbnQgbW04MXhfY21kX3NldF9mcmFnX3RocmVzaG9sZChzdHJ1Y3QgbW04MXggKm1vcnMsIHUzMiBmcmFnX3RocmVzaG9sZCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaDo4MTppbnQgbW04MXhfY21kX2dldF9kaXNhYmxlZF9jaGFubmVscyhcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oOjgyOlx0c3RydWN0IG1tODF4ICptb3JzLCBzdHJ1Y3QgaG9zdF9jbWRfcmVzcF9nZXRfZGlzYWJsZWRfY2hhbm5lbHMgKnJlc3AsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaC04My1cdHVpbnQgcmVzcF9sZW4pO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTEwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6MTE6c3RhdGljIGludCBtbTgxeF9jb3JlX2F0dGFjaF9yZWdzKHN0cnVjdCBtbTgxeCAqbW9ycylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTEyLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0xNC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjE1Olx0bW04MXhfY2xhaW1fYnVzKG1vcnMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6MTY6XHRyZXQgPSBtbTgxeF9yZWczMl9yZWFkKG1vcnMsIE1NODEwOF9SRUdfQ0hJUF9JRCwgXHUwMDI2bW9ycy1cdTAwM2VjaGlwX2lkKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjE3Olx0bW04MXhfcmVsZWFzZV9idXMobW9ycyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0xOC1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0yNi1cdFx0bW9ycy1cdTAwM2VyZWdzID0gXHUwMDI2bW04MTA4X3JlZ3M7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYzoyNzpcdFx0bW9ycy1cdTAwM2VoaWYub3BzID0gXHUwMDI2bW04MXhfeWFwc19vcHM7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0yOC1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtMzUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYzozNjpzdGF0aWMgdm9pZCBtbTgxeF9jb3JlX2luaXRfbWFjX2FkZHIoc3RydWN0IG1tODF4ICptb3JzKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtMzcte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6Mzg6XHRpbnQgcmV0ID0gbW04MXhfaHdfb3RwX2dldF9tYWNfYWRkcihtb3JzKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTM5LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTQzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6NDQ6Y2hhciAqbW04MXhfY29yZV9nZXRfZndfcGF0aCh1MzIgY2hpcF9pZCwgdTMyIGZ3X3ZlcilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTQ1LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy01OC19XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYzo1OTpFWFBPUlRfU1lNQk9MX0dQTChtbTgxeF9jb3JlX2dldF9md19wYXRoKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTYwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6NjE6c3RydWN0IG1tODF4ICptbTgxeF9jb3JlX2FsbG9jKHNpemVfdCBwcml2X3NpemUsIHN0cnVjdCBkZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTYyLXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjYzOlx0cmV0dXJuIG1tODF4X21hY19hbGxvYyhwcml2X3NpemUsIGRldik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy02NC19XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYzo2NTpFWFBPUlRfU1lNQk9MX0dQTChtbTgxeF9jb3JlX2FsbG9jKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTY2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6Njc6aW50IG1tODF4X2NvcmVfaW5pdChzdHJ1Y3QgbW04MXggKm1vcnMpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy02OC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtNzMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYzo3NDpcdG1tODF4X2NvcmVfaW5pdF9tYWNfYWRkcihtb3JzKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTc1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6NzY6XHRyZXQgPSBtbTgxeF9jb3JlX2F0dGFjaF9yZWdzKG1vcnMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtNzctXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTg5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6OTA6XHRyZXQgPSBtbTgxeF9oaWZfaW5pdChtb3JzKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTkxLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0xMDUtfVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6MTA2OkVYUE9SVF9TWU1CT0xfR1BMKG1tODF4X2NvcmVfaW5pdCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0xMDctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYzoxMDg6aW50IG1tODF4X2NvcmVfcmVnaXN0ZXIoc3RydWN0IG1tODF4ICptb3JzKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtMTA5LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjExMDpcdHJldHVybiBtbTgxeF9tYWNfcmVnaXN0ZXIobW9ycyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0xMTEtfVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6MTEyOkVYUE9SVF9TWU1CT0xfR1BMKG1tODF4X2NvcmVfcmVnaXN0ZXIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtMTEzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6MTE0OnZvaWQgbW04MXhfY29yZV91bnJlZ2lzdGVyKHN0cnVjdCBtbTgxeCAqbW9ycylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTExNS17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYzoxMTY6XHRtbTgxeF9tYWNfdW5yZWdpc3Rlcihtb3JzKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTExNy19XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYzoxMTg6RVhQT1JUX1NZTUJPTF9HUEwobW04MXhfY29yZV91bnJlZ2lzdGVyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTExOS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjEyMDp2b2lkIG1tODF4X2NvcmVfZGVpbml0KHN0cnVjdCBtbTgxeCAqbW9ycylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTEyMS17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYzoxMjI6XHRtbTgxeF9oaWZfZmluaXNoKG1vcnMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtMTIzLVx0Zmx1c2hfd29ya3F1ZXVlKG1vcnMtXHUwMDNlbmV0X3dxKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0xMjctfVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6MTI4OkVYUE9SVF9TWU1CT0xfR1BMKG1tODF4X2NvcmVfZGVpbml0KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTEyOS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjEzMDp2b2lkIG1tODF4X2NvcmVfZnJlZShzdHJ1Y3QgbW04MXggKm1vcnMpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0xMzEte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6MTMyOlx0bW04MXhfbWFjX2ZyZWUobW9ycyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0xMzMtfVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6MTM0OkVYUE9SVF9TWU1CT0xfR1BMKG1tODF4X2NvcmVfZnJlZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0xMzUtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtNTQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaDo1NTpzdHJ1Y3QgbW04MXhfYnVzX29wcztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oOjU2OnN0cnVjdCBtbTgxeF9oaWZfb3BzO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtNTctXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtNjItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaDo2MzplbnVtIG1tODF4X2NhcHNfZmxhZ3Mge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtNjQtXHRNTTgxWF9DQVBTX0ZXX1NUQVJUID0gMCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaC0xMzEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaDoxMzI6c3RydWN0IG1tODF4X2Z3X2NhcHMge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMTMzLVx0dTMyIGZsYWdzW0ZXX0NBUEFCSUxJVElFU19GTEFHU19XSURUSF07XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMTM3LVx0dTggbWF4aW11bV9hbXBkdV9sZW5ndGhfZXhwb25lbnQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaDoxMzg6XHR1OCBtbTgxeF9tbXNzX29mZnNldDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTEzOS19O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTE0MS0jZGVmaW5lIE1NODFYX0ZXX1NVUFAoTU04MVhfQ0FQUywgQ0FQQUJJTElUWSkgXFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oOjE0MjpcdG1tODF4X2NhcHNfc3VwcG9ydGVkKE1NODFYX0NBUFMsIE1NODFYX0NBUFNfIyNDQVBBQklMSVRZKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMTQzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmg6MTQ0OnN0YXRpYyBpbmxpbmUgYm9vbCBtbTgxeF9jYXBzX3N1cHBvcnRlZChzdHJ1Y3QgbW04MXhfZndfY2FwcyAqY2FwcyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oOjE0NTpcdFx0XHRcdFx0ZW51bSBtbTgxeF9jYXBzX2ZsYWdzIGZsYWcpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaC0xNDYte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTE1MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oOjE1MjpzdHJ1Y3QgbW04MXhfcHMge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMTUzLVx0dTMyIHdha2Vycztcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaC0xNjAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaDoxNjE6ZW51bSBtbTgxeF9wYWdlX2FjaSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaC0xNjItXHRNTTgxWF9BQ0lfQkUgPSAwLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTE2Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oOjE2ODplbnVtIG1tODF4X3Fvc190aWRfdXBfaW5kZXgge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMTY5LVx0TU04MVhfUU9TX1RJRF9VUF9CSyA9IDEsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMTgxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmg6MTgyOnN0cnVjdCBtbTgxeF9zd192ZXJzaW9uIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTE4My1cdHU4IG1ham9yO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTE4Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oOjE4ODpzdHJ1Y3QgbW04MXhfc3RhIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTE4OS1cdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWY7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMTk1LVx0aW50IG1heF9id19taHo7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaDoxOTY6XHRzdHJ1Y3QgbW04MXhfcmNfc3RhIHJjO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMTk3LVx0c3RydWN0IG1tcmNfcmF0ZSBsYXN0X3N0YV90eF9yYXRlO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTIwMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oOjIwMjpzdHJ1Y3QgbW04MXhfdmlmIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oOjIwMzpcdHN0cnVjdCBtbTgxeCAqbW9ycztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTIwNC1cdHUxNiBpZDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaC0yMTYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaDoyMTc6c3RydWN0IG1tODF4X3N0YWxlX3R4X3N0YXR1cyB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaC0yMTgtXHQvKiBTdGFsZSBUeCBsb2NrICovXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmg9MjIzPXN0cnVjdCBtY2FzdF9maWx0ZXIge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTIzMi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oOjIzMzplbnVtIG1tODF4X2h3X3NjYW5fb3Age1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMjM0LVx0TU04MVhfSFdfU0NBTl9PUF9TVEFSVCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaC0yMzctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaDoyMzg6c3RydWN0IG1tODF4X2h3X3NjYW5fcGFyYW1zIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTIzOS1cdHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTI0NS1cdHUzMiBkd2VsbF9vbl9ob21lX21zO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmg6MjQ2Olx0ZW51bSBtbTgxeF9od19zY2FuX29wIG9wZXJhdGlvbjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTI0Ny1cdGJvb2wgc3RvcmU7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMjYxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmg6MjYyOmVudW0gbW04MXhfaHdfc2Nhbl9zdGF0ZSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaC0yNjMtXHRIV19TQ0FOX1NUQVRFX0lETEUsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMjY3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmg6MjY4OnN0cnVjdCBtbTgxeF9od19zY2FuIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oOjI2OTpcdGVudW0gbW04MXhfaHdfc2Nhbl9zdGF0ZSBzdGF0ZTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTI3MC1cdHN0cnVjdCBjb21wbGV0aW9uIHNjYW5fZG9uZTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oOjI3MTpcdHN0cnVjdCBtbTgxeF9od19zY2FuX3BhcmFtcyAqcGFyYW1zO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMjcyLVx0c3RydWN0IGRlbGF5ZWRfd29yayB0aW1lb3V0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTI3NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oOjI3NjplbnVtIG1tODF4X2hpZl9ldmVudF9mbGFncyB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaC0yNzctXHRNTTgxWF9ISUZfRVZUX1JYX1BFTkQsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMjg4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmg6Mjg5OmVudW0gbW04MXhfc3RhdGVfZmxhZ3Mge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMjkwLVx0TU04MVhfU1RBVEVfQ0hJUF9VTlJFU1BPTlNJVkUsXG4tLVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDc6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxNjUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNTTgxWCBEcml2ZXIgYW5kIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkgc2VlIHRoaXMgcGF0Y2ggdGFyZ2V0cyB0aGUgTU04MVggZHJpdmVyLCB3aGljaCBpcyBvbmx5IGJ1aWx0IGlmIGBDT05GSUdfTU04MVhgIGlzIGVuYWJsZWQsIHdoaWNoIGlzIGEga2V5IHN0YXJ0aW5nIHBvaW50LiBJdCBhcHBlYXJzIHRoZSBkcml2ZXIgaGFzIGJvdGggVVNCIGFuZCBTRElPIHZhcmlhbnRzIOKAkyBzcGVjaWZpY2FsbHksIGlmIGBDT05GSUdfTU04MVhfVVNCYCBvciBgQ09ORklHX01NODFYX1NESU9gIGFyZSBjb25maWd1cmVkLiBFeGNlbGxlbnQuIFRoaXMgaW1tZWRpYXRlbHkgb3BlbnMgdXAgZGlmZmVyZW50IGZ1enppbmcgYXZlbnVlcy4KCkZvciBVU0IsIHRoZSBvcHRpb25zIGFyZSBwcmV0dHkgY2xlYXIuIEkgY2FuIGxldmVyYWdlIGVpdGhlciB0aGUgZHVtbXkgSENEIChVU0IgR2FkZ2V0KSBvciB0aGUgcG93ZXIgb2Ygc3l6a2FsbGVyJiMzOTtzIFVTQiBmdXp6aW5nIGNhcGFiaWxpdGllcy4gVGhhdCYjMzk7cyBhIHNvbGlkIHBhdGggdG8gZXhwbG9yZSwgZXNwZWNpYWxseSBnaXZlbiB0aGUgZXN0YWJsaXNoZWQgdG9vbHMuIFNESU8gaXMgYWxzbyBwb3RlbnRpYWxseSBpbnRlcmVzdGluZywgYnV0IGl0IHJlbGllcyBvbiBhbiBTRElPIGVtdWxhdG9yLiBXaGlsZSBpdCYjMzk7cyBwcm9iYWJseSBmZWFzaWJsZSwgdGhlIFVTQiByb3V0ZSBzZWVtcyBtb3JlIGRpcmVjdGx5IGFjY2Vzc2libGUgYW5kIGxlc3MgcmVsaWFudCBvbiBleHRlcm5hbCBzZXR1cC4KClRoZSBzcGVjaWZpYyBtb2RpZmljYXRpb24gaXMgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuY2AuIEFoLCBmaXJtd2FyZSBwYXJzaW5nIGxvZ2ljLiBUaGlzIGlzIHByb21pc2luZyEgRmlybXdhcmUgbG9hZGluZyBpcyB1c3VhbGx5IGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuIEZpcm13YXJlIGlzIGxvYWRlZCB1c2luZyBgcmVxdWVzdF9maXJtd2FyZWAgb3IgZGlyZWN0bHkgZnJvbSB0aGUgZmlsZXN5c3RlbS4gU3l6a2FsbGVyJiMzOTtzIHN1cHBvcnQgZm9yIG1vY2tpbmcgYHJlcXVlc3RfZmlybXdhcmVgIG1ha2VzIHRoYXQgZXZlbiBtb3JlIGF0dHJhY3RpdmUuCgpNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGZ1bmN0aW9ucyBgbW04MXhfZndfbG9hZF9md2AgYW5kIGBtbTgxeF9md19wYXJzZV9leHRfaG9zdF90YmxgLiBUaG9zZSBhcmUgdGhlIHByaW1lIHN1c3BlY3RzLCBnaXZlbiB0aGUgY29udGV4dC4gVGhlc2UgZnVuY3Rpb25zIHdpbGwgYmUgdGhlIGZvY2FsIHBvaW50IHRvIGlkZW50aWZ5IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgd2l0aGluIHRoZSBmaXJtd2FyZSBsb2FkaW5nIGFuZCBwYXJzaW5nIHByb2Nlc3MuIEkmIzM5O2xsIG5lZWQgdG8gZGlzc2VjdCB0aGUgbG9naWMgd2l0aGluIHRob3NlIGZ1bmN0aW9ucyB0byBkZXRlcm1pbmUgaG93IHN5emthbGxlciBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZSBlZmZlY3RpdmUgZnV6emluZyBpbnB1dHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW04MXhfZndfbG9hZF9mdyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYz05OT1zdGF0aWMgaW50IG1tODF4X2Z3X3NldF9ib290X2FkZHIoc3RydWN0IG1tODF4ICptb3JzLCB1aW50MzJfdCBhZGRyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy0xMDktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmM6MTEwOnN0YXRpYyBpbnQgbW04MXhfZndfbG9hZF9mdyhzdHJ1Y3QgbW04MXggKm1vcnMsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmMtMTExLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmM9NjI3PXN0YXRpYyBpbnQgX19tbTgxeF9md19mbGFzaChzdHJ1Y3QgbW04MXggKm1vcnMsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTY0My1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYzo2NDQ6XHRyZXQgPSBtbTgxeF9md19sb2FkX2Z3KG1vcnMsIGZ3KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy02NDUtXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDk2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIEZpcm13YXJlIEZsYXNocG9pbnQqKgoKUmlnaHQsIHNvIHRoZSBmaXJtd2FyZSBsb2FkaW5nIHByb2Nlc3Mga2lja3Mgb2ZmIGluIGBfX21tODF4X2Z3X2ZsYXNoYC4gU2VlbXMgbGlrZSBhIHNlbnNpYmxlIG5hbWluZyBjb252ZW50aW9uLiBOb3csIHRoZSBrZXkgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbGluZyBjb250ZXh0LiBHb3R0YSB0cmFjZSBiYWNrIHRocm91Z2ggdGhlIGNvZGUgYW5kIGZpZ3VyZSBvdXQgdGhlIGVudHJ5IHBvaW50IGFuZCB0aGUgZXhlY3V0aW9uIGZsb3cgbGVhZGluZyB1cCB0byB0aGF0IGZ1bmN0aW9uIGNhbGwuIE5lZWQgdG8gc2VlIHdoZXJlIHRoZSBmaXJtd2FyZSBpbWFnZSBpcyBjb21pbmcgZnJvbSAoZXh0ZXJuYWwgc3RvcmFnZSwgbmV0d29yaywgZXRjLikgYW5kIHdoYXQgdHJpZ2dlcnMgdGhlIGZsYXNoIG9wZXJhdGlvbi4gVW5kZXJzdGFuZGluZyB0aGUgcHJlY29uZGl0aW9ucyBiZWZvcmUgYF9fbW04MXhfZndfZmxhc2hgIGlzIGNydWNpYWwgZm9yIGRlYnVnZ2luZyBhbnkgaXNzdWVzIG9yIG9wdGltaXppbmcgdGhlIGxvYWRpbmcgcHJvY2VzcyBpdHNlbGYuIFRpbWUgdG8gZmlyZSB1cCB0aGUgZGVidWdnZXIgYW5kIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgY2FsbCBzdGFjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX21tODF4X2Z3X2ZsYXNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jPTU2ND1pbnQgbW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsKHN0cnVjdCBtbTgxeCAqbW9ycylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmMtNjI2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jOjYyNzpzdGF0aWMgaW50IF9fbW04MXhfZndfZmxhc2goc3RydWN0IG1tODF4ICptb3JzLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTYyOC1cdFx0XHQgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpiY2YsIGJvb2wgcmVzZXQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jPTY2Nj1zdGF0aWMgaW50IG1tODF4X2Z3X2ZsYXNoKHN0cnVjdCBtbTgxeCAqbW9ycywgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmMtNjcyLVx0d2hpbGUgKHJldHJpZXMtLSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jOjY3MzpcdFx0cmV0ID0gX19tbTgxeF9md19mbGFzaChtb3JzLCBmdywgYmNmLCByZXNldCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmMtNjc0LVx0XHRpZiAoIXJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDY1MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKiptbTgxeF9md19mbGFzaDogQSBEZWVwIERpdmUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiBgbW04MXhfZndfZmxhc2hgLiBIbW0sIHRoYXQgbmFtZSB0cmlnZ2VycyBzb21ldGhpbmcuIEl0IGltbWVkaWF0ZWx5IHN1Z2dlc3RzIGEgZmlybXdhcmUgZmxhc2hpbmcgdXRpbGl0eSwgbGlrZWx5IGZvciBhIHNwZWNpZmljIGhhcmR3YXJlIHBsYXRmb3JtIOKAkyB0aGUgJiMzNDttbTgxeCYjMzQ7IHBhcnQgaXMgdGhlIGdpdmVhd2F5LiBJJiMzOTtkIHdhZ2VyIGl0JiMzOTtzIGEgcHJvcHJpZXRhcnkgb3IgdmVuZG9yLXNwZWNpZmljIHRvb2wuIE5vdywgdGhlIHF1ZXN0aW9ucyBzdGFydCBwb3BwaW5nOiBJcyB0aGlzIGEgYm9vdGxvYWRlcj8gQSBnZW5lcmFsLXB1cnBvc2UgZmlybXdhcmUgdXBkYXRlcj8gRG9lcyBpdCBvcGVyYXRlIHZpYSBKVEFHLCBVQVJULCBVU0IsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBXaGF0IHNlY3VyaXR5IGZlYXR1cmVzIGFyZSBpbiBwbGFjZT8gRG9lcyBpdCBzdXBwb3J0IHJvbGxiYWNrIG1lY2hhbmlzbXM/IFdoYXQgYWJvdXQgZXJyb3IgaGFuZGxpbmc/IEFuZCwgY3JpdGljYWxseSwgdGhlIHRhcmdldCBkZXZpY2VzLi4uIGFyZSB3ZSB0YWxraW5nIGVtYmVkZGVkIHN5c3RlbXMsIG5ldHdvcmsgYXBwbGlhbmNlcywgb3Igc29tZXRoaW5nIGVsc2U/IFVuZGVyc3RhbmRpbmcgdGhlIGhhcmR3YXJlIGNvbnRleHQgaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIGtub3cgdGhlIGFyY2hpdGVjdHVyZSwgbWVtb3J5IG1hcCwgYW5kIGFueSBoYXJkd2FyZS1zcGVjaWZpYyBxdWlya3MuIFRoaXMgaXMgYWxsIGFzc3VtaW5nIEkgd2FudCB0byBmbGFzaCBuZXcgZmlybXdhcmUgb250byB0aGUgZGV2aWNlLiBXaGF0IGFyZSB0aGUgcG9zc2liaWxpdGllcyBhcm91bmQgdGhpcyB0eXBlIG9mIGZsYXNoaW5nIHNvZnR3YXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttbTgxeF9md19mbGFzaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYz01NjQ9aW50IG1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibChzdHJ1Y3QgbW04MXggKm1vcnMpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTYyNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYzo2Mjc6c3RhdGljIGludCBfX21tODF4X2Z3X2ZsYXNoKHN0cnVjdCBtbTgxeCAqbW9ycywgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy02MjgtXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqYmNmLCBib29sIHJlc2V0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy02NjUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmM6NjY2OnN0YXRpYyBpbnQgbW04MXhfZndfZmxhc2goc3RydWN0IG1tODF4ICptb3JzLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTY2Ny1cdFx0XHQgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqYmNmLCBib29sIHJlc2V0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy02NzItXHR3aGlsZSAocmV0cmllcy0tKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmM6NjczOlx0XHRyZXQgPSBfX21tODF4X2Z3X2ZsYXNoKG1vcnMsIGZ3LCBiY2YsIHJlc2V0KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy02NzQtXHRcdGlmICghcmV0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYz03MTk9aW50IG1tODF4X2Z3X2luaXQoc3RydWN0IG1tODF4ICptb3JzLCBib29sIHJlc2V0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy03NjAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmM6NzYxOlx0cmV0ID0gbW04MXhfZndfZmxhc2gobW9ycywgZncsIGJjZiwgcmVzZXQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTc2Mi1cdGlmIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDc6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0NjgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBGaXJtd2FyZSBEZWVwIERpdmUgLSBtbTgxeF9md19pbml0KioKCkFscmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGZpcm13YXJlIGluaXRpYWxpemF0aW9uLiBTcGVjaWZpY2FsbHksIHRoYXQgYG1tODF4X2Z3X2luaXRgIGZ1bmN0aW9uLiBSaWdodCBvZmYgdGhlIGJhdCwgSSYjMzk7bSB0aGlua2luZywgJiMzNDtPa2F5LCB3aGF0JiMzOTtzICp0aGlzKiBkb2luZz8mIzM0OyBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHRoZSB2ZXJ5IGZpcnN0IHN0ZXBzIGluIGJyaW5naW5nIHVwIHRoaXMgcGFydGljdWxhciBoYXJkd2FyZS4gV2UmIzM5O3JlIHRhbGtpbmcgbG93LWxldmVsIHN0dWZmIGhlcmUsIEkgcHJlc3VtZS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgcmVnaXN0ZXJpbmcgdGhlIGRldmljZSwgY29uZmlndXJpbmcgY2xvY2tzLCBzZXR0aW5nIHVwIGludGVycnVwdCB2ZWN0b3JzLCBtZW1vcnkgYWxsb2NhdGlvbiwgb3IgYWxsIG9mIHRoZSBhYm92ZT8gV2hhdCYjMzk7cyB0aGUgY29udGV4dCwgd2hhdCYjMzk7cyB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmU/IElzIHRoaXMgYSBkcml2ZXItc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24sIG9yIHNvbWV0aGluZyBtb3JlIGdsb2JhbCB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBvdGhlciBmdW5jdGlvbnM/IEFueSBoYXJkd2FyZS1zcGVjaWZpYyBjb25zaWRlcmF0aW9ucyBpbiB0aGlzIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlPyBEb2VzIHRoaXMgcmVxdWlyZSBhbnkgc3BlY2lmaWMgZmxhZ3Mvb3B0aW9ucyBmcm9tIHRoZSB1c2Vyc3BhY2UgYXBwbGljYXRpb24gdGhhdCBpcyBjYWxsaW5nIGl0PyBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgc2tldGNoaW5nIHRoZSBjYWxsIGdyYXBoIGFuZCBkZXBlbmRlbmNpZXMuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIGhhcmR3YXJlLCB0aGUgZmlybXdhcmUgaW1hZ2UgaXRzZWxmLCBhbmQgcG9zc2libHkgYW55IGJvb3Rsb2FkZXIgb3IgZWFybGllciBpbml0aWFsaXphdGlvbiBzdGFnZXMuIFRoZSBnb2FsIG9mIHRoaXMgcHJvY2VzcyB3b3VsZCBoYXZlIHRvIGJlIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGluIHBsYWNlIHRvIGJlZ2luIGFjdHVhbCBjb21tdW5pY2F0aW9uIGFuZCBkYXRhIHByb2Nlc3NpbmcgdXNpbmcgdGhlIGRldmljZS4gR290dGEgZGlnIGluIGFuZCBzZWUgdGhlIGRldGFpbHMgb2YgdGhpcyBvbmUsIHRoZSBudWFuY2VzIG9mIHRoYXQgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21tODF4X2Z3X2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmM9Njg5PXN0YXRpYyBpbnQgbW04MXhfZndfcmVxdWVzdChzdHJ1Y3QgbW04MXggKm1vcnMsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqKmZ3KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy03MTgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmM6NzE5OmludCBtbTgxeF9md19pbml0KHN0cnVjdCBtbTgxeCAqbW9ycywgYm9vbCByZXNldClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy03MjAte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuaD0xMzQ9c3RydWN0IGV4dF9ob3N0X3RibCB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5oLTEzOS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuaDoxNDA6aW50IG1tODF4X2Z3X2luaXQoc3RydWN0IG1tODF4ICptb3JzLCBib29sIHJlc2V0KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuaC0xNDEtaW50IG1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibChzdHJ1Y3QgbW04MXggKm1vcnMpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM9MjEwNz1zdGF0aWMgaW50IG1tODF4X21hY19yZXN0YXJ0KHN0cnVjdCBtbTgxeCAqbW9ycylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxMzktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jOjIxNDA6XHRyZXQgPSBtbTgxeF9md19pbml0KG1vcnMsIHRydWUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTQxLVx0aWYgKHJldCBcdTAwM2MgMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjI3MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKiptbTgxeF9md19pbml0IEludmVzdGlnYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgbW04MXhfZndfaW5pdGAgZnVuY3Rpb24uIFRoZSBjb2RlIHNheXMgaXQmIzM5O3MgY2FsbGVkIGJ5IGBtbTgxeF9tYWNfcmVzdGFydGAuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBidXQgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IHdoZXJlICplbHNlKiBpcyB0aGlzIGZ1bmN0aW9uIGJlaW5nIGludm9rZWQ/IElzIGBtbTgxeF9tYWNfcmVzdGFydGAgdGhlIG9ubHkgY2FsbGluZyBmdW5jdGlvbiwgb3IgaXMgdGhlcmUgdGhlIHBvc3NpYmlsaXR5IG9mIG90aGVyIGNvZGUgcGF0aHMgb3IgZHJpdmVycyBvciBtb2R1bGVzIHRoYXQgYWxzbyBjYWxsIGBtbTgxeF9md19pbml0YD8gSSBuZWVkIHRvIHRyYWNrIGRvd24gYWxsIHRoZSBjYWxsIHNpdGVzIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgaXRzIHVzYWdlIGFuZCBhbnkgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBvciBlZGdlIGNhc2VzLiBBIHNvbGlkIGdyYXNwIG9mIGV2ZXJ5IGNhbGwgc2l0ZSB3aWxsIGFsbG93IG1lIHRvIGFjY3VyYXRlbHkgZGVzY3JpYmUgaG93IHRoZSBmdW5jdGlvbiBiZWhhdmVzIGluIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21tODF4X21hY19yZXN0YXJ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYz0yMDcxPXN0YXRpYyB1MzIgbW04MXhfZ2V0X2V4cGVjdGVkX3Rocm91Z2hwdXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMDkwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYzoyMDkxOnN0YXRpYyB2b2lkIG1tODF4X21hY19yZXN0YXJ0X2NsZWFudXBfaXRlcih2b2lkICpkYXRhLCB1OCAqbWFjLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMDkyLVx0XHRcdFx0XHQgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjA5Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjA5ODpzdGF0aWMgdm9pZCBtbTgxeF9tYWNfcmVzdGFydF9jbGVhbnVwKHN0cnVjdCBtbTgxeCAqbW9ycylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjA5OS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTAxLVx0XHRcdFx0XHQgICAgSUVFRTgwMjExX0lGQUNFX0lURVJfTk9STUFMLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYzoyMTAyOlx0XHRcdFx0XHQgICAgbW04MXhfbWFjX3Jlc3RhcnRfY2xlYW51cF9pdGVyLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTAzLVx0XHRcdFx0XHQgICAgTlVMTCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTA2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYzoyMTA3OnN0YXRpYyBpbnQgbW04MXhfbWFjX3Jlc3RhcnQoc3RydWN0IG1tODF4ICptb3JzKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTA4LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxMzctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jOjIxMzg6XHRtbTgxeF9tYWNfcmVzdGFydF9jbGVhbnVwKG1vcnMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTM5LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM9MjE3MD1zdGF0aWMgaW50IG1tODF4X21hY19vcHNfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxODAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jOjIxODE6XHRcdHJldCA9IG1tODF4X21hY19yZXN0YXJ0KG1vcnMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTgyLVx0XHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYz0yMjYxPXN0YXRpYyB2b2lkIG1tODF4X3JlZ19ub3RpZmllcihzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjI3Mi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjI3MzpcdHJldCA9IG1tODF4X21hY19yZXN0YXJ0KG1vcnMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMjc0LVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDc6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMzOTcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGlnZ2luZyBpbnRvIHRoZSBNTTgxWCBEcml2ZXIgQXJjaGl0ZWN0dXJlKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgY29udHJvbCBmbG93IGhlcmUgaW4gdGhlIE1NODFYIGRyaXZlciwgYW5kIGl0JiMzOTtzIGxvb2tpbmcgbGlrZSBgbW04MXhfbWFjX3Jlc3RhcnRgIGlzIGEga2V5IGZ1bmN0aW9uLiBJJiMzOTttIHNlZWluZyBpdCBjYWxsZWQgZnJvbSBib3RoIGBtbTgxeF9tYWNfb3BzX2FkZF9pbnRlcmZhY2VgIGFuZCBhbHNvIHRoZSBgbW04MXhfcmVnX25vdGlmaWVyYCBmdW5jdGlvbi4gVGhhdCBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIHNob3dpbmcgbWUgd2hlcmUgdGhlIHJlc3RhcnQgYWN0aW9uIGlzIHRyaWdnZXJlZC4gVGhpcyBpbXBsaWVzIHRoYXQgaW50ZXJmYWNlIGFkZGl0aW9uIGFuZCBzb21lIGZvcm0gb2YgcmVnaXN0cmF0aW9uIChsaWtlbHkgcmVsYXRlZCB0byBoYXJkd2FyZSBldmVudHMgb3IgcmVjb25maWd1cmF0aW9uKSBhcmUgdGhlIGV2ZW50cyB0aGF0IG5lY2Vzc2l0YXRlIGEgTUFDIHJlc3RhcnQuCgpOb3cgSSYjMzk7bSBwYXVzaW5nLi4uIEkgbmVlZCB0byBjbGFyaWZ5IHNvbWV0aGluZy4gSXMgdGhlIGZpcm13YXJlIGluaXRpYWxpemF0aW9uLCBgbW04MXhfZndfaW5pdGAsIGNhbGxlZCB3aXRoaW4gdGhlIHByb2JlIGZ1bmN0aW9uPyBJdCYjMzk7cyBjcml0aWNhbCBmb3IgbWUgdG8gdW5kZXJzdGFuZCB0aGUgYm9vdC11cCBzZXF1ZW5jZSBvZiB0aGUgaGFyZHdhcmUgc28gSSBuZWVkIHRvIGNoZWNrIHRoZSBwcm9iZSBmdW5jdGlvbiwgYG1tODF4X3Byb2JlYCwgdG8gbWFrZSBzdXJlIHRoYXQgYG1tODF4X2Z3X2luaXRgIGlzIGNhbGxlZC4gSWYgc28sIGFuZCBob3csIHRoYXQgd2lsbCBkZXRlcm1pbmUgdGhlIHN0YXRlIG9mIHRoZSBoYXJkd2FyZSBiZWZvcmUgYSByZXN0YXJ0IGlzIHRyaWdnZXJlZC4gVGhlIHRpbWluZyBhbmQgc2VxdWVuY2UgYXJlIGdvaW5nIHRvIGJlIGNyaXRpY2FsIGZvciBkZWJ1Z2dpbmcgYW55IHBvdGVudGlhbCBpc3N1ZXMgaW4gdGhlIGludGVyZmFjZSBzZXR1cCBvciBoYXJkd2FyZSByZWdpc3RyYXRpb24gcGF0aHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21tODF4X2Z3X2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmM9Njg5PXN0YXRpYyBpbnQgbW04MXhfZndfcmVxdWVzdChzdHJ1Y3QgbW04MXggKm1vcnMsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqKmZ3KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy03MTgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmM6NzE5OmludCBtbTgxeF9md19pbml0KHN0cnVjdCBtbTgxeCAqbW9ycywgYm9vbCByZXNldClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy03MjAte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuaD0xMzQ9c3RydWN0IGV4dF9ob3N0X3RibCB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5oLTEzOS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuaDoxNDA6aW50IG1tODF4X2Z3X2luaXQoc3RydWN0IG1tODF4ICptb3JzLCBib29sIHJlc2V0KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuaC0xNDEtaW50IG1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibChzdHJ1Y3QgbW04MXggKm1vcnMpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM9MjEwNz1zdGF0aWMgaW50IG1tODF4X21hY19yZXN0YXJ0KHN0cnVjdCBtbTgxeCAqbW9ycylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxMzktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jOjIxNDA6XHRyZXQgPSBtbTgxeF9md19pbml0KG1vcnMsIHRydWUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTQxLVx0aWYgKHJldCBcdTAwM2MgMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDIzMAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBJbnZlc3RpZ2F0aW9uIGludG8gRHJpdmVyIEluaXRpYWxpemF0aW9uIEZsb3cqKgoKSGFuZyBvbiBhIG1pbnV0ZeKApiBJJiMzOTttIHN0YXJ0aW5nIHRvIHRoaW5rIEkgbWlzc2VkIHNvbWV0aGluZyBmdW5kYW1lbnRhbCBoZXJlLiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IGBtbTgxeF9md19pbml0YCB3YXMgcGFydCBvZiB0aGUgc3RhbmRhcmQgcHJvYmUgc2VxdWVuY2UuIEJ1dCBsb29raW5nIGF0IHRoZSBicm9hZGVyIHBpY3R1cmUsIHRoYXQgZG9lc24mIzM5O3Qgc2VlbSB0byBiZSB0aGUgY2FzZS4gTXkgZmlyc3QgaW5zdGluY3Qgd291bGQgYmUgdG8gY2hlY2sgdGhhdCBgbW04MXhfZndfaW5pdGAgaXMgY2FsbGVkIGluIG90aGVyIHNjZW5hcmlvcy4KCkdpdmVuIHRoYXQgaXQmIzM5O3Mgbm90IGluIHRoZSBgcHJvYmVgIGZ1bmN0aW9uLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGUgZmlybXdhcmUgaW5pdGlhbGl6YXRpb24gKmRvZXMqIG9jY3VyLiBJIHNob3VsZCBwcm9iYWJseSBiZSBsb29raW5nIGF0IGBtbTgxeF9jb3JlX2luaXRgIG5leHQuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQg4oCTIGl0JiMzOTtzIG9mdGVuIHRoZSByb290IG9mIHRoZSBjb3JlIGRyaXZlciBpbml0aWFsaXphdGlvbiwgcmlnaHQ/IE9yIHBlcmhhcHMgdGhlIE1BQyByZWdpc3RyYXRpb24gZnVuY3Rpb24sIGBtbTgxeF9tYWNfcmVnaXN0ZXJgPyBJdCYjMzk7cyBwb3NzaWJsZSB0aGUgZmlybXdhcmUgaXMgYmVpbmcgaGFuZGxlZCB3aXRoaW4gdGhhdCBjb250ZXh0LCBlc3BlY2lhbGx5IGlmIHRoZSBNQUMgaXMgdGlnaHRseSBjb3VwbGVkIHdpdGggdGhlIGZpcm13YXJlIGxvYWRpbmcuIEkgbmVlZCB0byB0cmFjZSB0aGlzIG1vcmUgY2FyZWZ1bGx5IHRvIHNlZSB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGdldHRpbmcgY2FsbGVkLCBhbmQgd2hhdCBpdCBkb2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttbTgxeF9tYWNfcmVnaXN0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYz0xMDg9aW50IG1tODF4X2NvcmVfcmVnaXN0ZXIoc3RydWN0IG1tODF4ICptb3JzKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtMTA5LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjExMDpcdHJldHVybiBtbTgxeF9tYWNfcmVnaXN0ZXIobW9ycyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0xMTEtfVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM9MjM1NT1zdGF0aWMgdm9pZCBtbTgxeF9tYWNfc3RhbGVfdHhfc3RhdHVzX3RpbWVyX2luaXQoc3RydWN0IG1tODF4ICptb3JzKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjM2MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjM2MTppbnQgbW04MXhfbWFjX3JlZ2lzdGVyKHN0cnVjdCBtbTgxeCAqbW9ycylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjM2Mi17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuaD01MT1zdHJ1Y3QgbW04MXggKm1tODF4X21hY19hbGxvYyhzaXplX3QgcHJpdl9zaXplLCBzdHJ1Y3QgZGV2aWNlICpkZXYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuaDo1MjppbnQgbW04MXhfbWFjX3JlZ2lzdGVyKHN0cnVjdCBtbTgxeCAqbW9ycyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5oLTUzLXZvaWQgbW04MXhfbWFjX2ZyZWUoc3RydWN0IG1tODF4ICptb3JzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDc6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ5OTAKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqQW5hbHl6aW5nIGBtbTgxeF9tYWNfcmVnaXN0ZXJgKioKCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgbW04MXhfbWFjX3JlZ2lzdGVyYC4gSW1tZWRpYXRlbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGNvbnRleHQuIFdoYXQgaXMgdGhpcyBmdW5jdGlvbiBkb2luZz8gVGhlIG5hbWUgc3VnZ2VzdHMgaXQmIzM5O3MgbGlrZWx5IGRlYWxpbmcgd2l0aCByZWdpc3RlcmluZyBhIE1lZGlhIEFjY2VzcyBDb250cm9sbGVyIChNQUMpIGRldmljZSwgYW5kIHRoZSAmIzM0O21tODF4JiMzNDsgcHJlZml4IGlzIGFsbW9zdCBjZXJ0YWlubHkgYW4gaW5kaWNhdG9yIG9mIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSBvciBkcml2ZXIgaXQgcmVsYXRlcyB0by4gVGhpcyBwcm9iYWJseSBtZWFucyB0aGVyZSYjMzk7cyBzb21lIGRldmljZS1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiBvciBjb25maWd1cmF0aW9uIGludm9sdmVkLgoKSSYjMzk7ZCB3YW50IHRvIGtub3c6CgoqICAgKipXaGF0IGFyZSB3ZSByZWdpc3RlcmluZz8qKiBJcyB0aGlzIGEgcGh5c2ljYWwgTUFDLCBhIHZpcnR1YWwgaW50ZXJmYWNlLCBvciBzb21ldGhpbmcgbW9yZSBjb21wbGV4PwoqICAgKipXaGF0IGtpbmQgb2YgZGF0YSBzdHJ1Y3R1cmUgaXMgaW52b2x2ZWQ/KiogYG1tODF4X2AgaW1wbGllcyBzb21lIGNvbXBhbnkgb3Igc3BlY2lmaWMgaGFyZHdhcmUsIHNvIHdoYXQmIzM5O3MgdGhlIGRhdGEgc3RydWN0dXJlIHR5cGUgZm9yIHRoZSBNQUMgYmVpbmcgdXNlZD8gSXMgaXQgYSBzdGFuZGFyZCBzdHJ1Y3R1cmUsIG9yIHByb3ByaWV0YXJ5PyBIb3cgZG8gd2UgaW50ZXJmYWNlIHdpdGggdGhpcyBzdHJ1Y3R1cmUuCiogICAqKldoYXQgaXMgdGhlIHJlZ2lzdGVyIG1hcD8qKiBgcmVnaXN0ZXJgIGltcGxpZXMgc29tZSBhZGRyZXNzLiBBcmUgd2UgbWFwcGluZyBtZW1vcnkgaW4ga2VybmVsLXNwYWNlLCBvciBzb21lIG90aGVyIG9wZXJhdGlvbj8gRG8gd2UgbmVlZCB0byBkZWZpbmUgdGhlIHJlZ2lzdGVyIGJhc2UgYWRkcmVzcz8KKiAgICoqV2hhdCBkcml2ZXIgbW9kZWwgaXMgYmVpbmcgdXNlZD8qKiBJcyBpdCBhIHN0YW5kYXJkIG5ldHdvcmsgZHJpdmVyIGZyYW1ld29yayBvciBzb21ldGhpbmcgY3VzdG9tPyBJcyBpdCB1c2luZyBOZXRsaW5rLCBzeXNmcywgb3IgYW5vdGhlciBpbnRlcmZhY2U/IFdoYXQgYXJlIHRoZSBzdGFuZGFyZCBjYWxscyBiZWluZyBtYWRlPwoqICAgKipBcmUgdGhlcmUgYW55IG11dGV4ZXMvbG9ja3MgaW4gdXNlPyoqIEkmIzM5O20gaW1tZWRpYXRlbHkgbG9va2luZyBmb3IgY29uY3VycmVuY3kgcHJvdGVjdGlvbjsgTUFDIGRldmljZXMgYXJlIG9mdGVuIHNoYXJlZCByZXNvdXJjZXMsIHNvIGl0JiMzOTtzIGNyaXRpY2FsIHRvIGVuc3VyZSBwcm9wZXIgbG9ja2luZy4gUmFjZSBjb25kaXRpb25zIGFyZSBuYXN0eS4KKiAgICoqRXJyb3IgaGFuZGxpbmc/KiogSG93IGRvZXMgdGhlIGZ1bmN0aW9uIGhhbmRsZSBmYWlsdXJlcz8gRG9lcyBpdCByZXR1cm4gZXJyb3IgY29kZXMsIGxvZyBtZXNzYWdlcywgb3Igc29tZXRoaW5nIGVsc2U/IElzIGl0IGEgcm9idXN0IGNoZWNrPwoKSSYjMzk7bSBtZW50YWxseSBwcmVwYXJpbmcgdG8gdHJhY2UgdGhyb3VnaCB0aGUgY29kZSwgbG9va2luZyBmb3IgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2VzLCBwb3RlbnRpYWxseSBpbnRlcnJ1cHQgcmVnaXN0cmF0aW9uIChpZiBpdCYjMzk7cyBhIGhhcmR3YXJlIE1BQyksIGFuZCB0aGUgYWN0dWFsIG1lY2hhbmlzbSBvZiB0eWluZyB0aGUgTUFDIGRldmljZSBpbnRvIHRoZSBuZXR3b3JrIHN0YWNrLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB0aGUgZHJpdmVyLiBMZXQmIzM5O3Mgc2VlIGhvdyBpdCB3b3JrcyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW04MXhfZndfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYz0yMTA3PXN0YXRpYyBpbnQgbW04MXhfbWFjX3Jlc3RhcnQoc3RydWN0IG1tODF4ICptb3JzKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjEzOS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjE0MDpcdHJldCA9IG1tODF4X2Z3X2luaXQobW9ycywgdHJ1ZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxNDEtXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA3OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NjcxCgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guCgoqKkludmVzdGlnYXRpbmcgbW04MXggRmlybXdhcmUgSW5pdGlhbGl6YXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYG1tODF4YCBkcml2ZXIgY29kZSBhZ2Fpbi4gSXQmIzM5O3MgY2xlYXIgdGhhdCBgbW04MXhfZndfaW5pdGAgaXMgaW52b2tlZCB3aXRoaW4gYG1tODF4X21hY19yZXN0YXJ0YC4gVGhhdCYjMzk7cyB0aGUgZmlyc3QgY29ubmVjdGlvbiBJJiMzOTt2ZSBpZGVudGlmaWVkLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgcXVlc3Rpb24gaXMgd2hldGhlciBgbW04MXhfbWFjX3Jlc3RhcnRgIGl0c2VsZiBpcyBjYWxsZWQgd2l0aGluIGBtbTgxeF9tYWNfcmVnaXN0ZXJgLiBLbm93aW5nIHRoaXMgcmVsYXRpb25zaGlwIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBsZXRlIGluaXRpYWxpemF0aW9uIGFuZCByZXN0YXJ0IHNlcXVlbmNlLiBJdCYjMzk7cyBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlIHRvIGRldGVybWluZSB0aGUgb3ZlcmFsbCBzdGF0ZSBtYWNoaW5lIGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IGR1cmluZyBkZXZpY2UgYnJpbmd1cCBvciBlcnJvciByZWNvdmVyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW04MXhfbWFjX3Jlc3RhcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM9MjA3MT1zdGF0aWMgdTMyIG1tODF4X2dldF9leHBlY3RlZF90aHJvdWdocHV0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjA5MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjA5MTpzdGF0aWMgdm9pZCBtbTgxeF9tYWNfcmVzdGFydF9jbGVhbnVwX2l0ZXIodm9pZCAqZGF0YSwgdTggKm1hYyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjA5Mi1cdFx0XHRcdFx0ICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIwOTctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jOjIwOTg6c3RhdGljIHZvaWQgbW04MXhfbWFjX3Jlc3RhcnRfY2xlYW51cChzdHJ1Y3QgbW04MXggKm1vcnMpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIwOTkte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjEwMS1cdFx0XHRcdFx0ICAgIElFRUU4MDIxMV9JRkFDRV9JVEVSX05PUk1BTCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjEwMjpcdFx0XHRcdFx0ICAgIG1tODF4X21hY19yZXN0YXJ0X2NsZWFudXBfaXRlcixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjEwMy1cdFx0XHRcdFx0ICAgIE5VTEwpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjEwNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjEwNzpzdGF0aWMgaW50IG1tODF4X21hY19yZXN0YXJ0KHN0cnVjdCBtbTgxeCAqbW9ycylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjEwOC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTM3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYzoyMTM4Olx0bW04MXhfbWFjX3Jlc3RhcnRfY2xlYW51cChtb3JzKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjEzOS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jPTIxNzA9c3RhdGljIGludCBtbTgxeF9tYWNfb3BzX2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTgwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYzoyMTgxOlx0XHRyZXQgPSBtbTgxeF9tYWNfcmVzdGFydChtb3JzKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjE4Mi1cdFx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM9MjI2MT1zdGF0aWMgdm9pZCBtbTgxeF9yZWdfbm90aWZpZXIoc3RydWN0IHdpcGh5ICp3aXBoeSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIyNzItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jOjIyNzM6XHRyZXQgPSBtbTgxeF9tYWNfcmVzdGFydChtb3JzKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjI3NC1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA3OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2Nzk4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZToKCioqQW5hbHl6aW5nIHRoZSBJbnRlcmZhY2UgQWRkaXRpb24gUHJvY2VkdXJlKioKCk9rYXksIHNvIGBtbTgxeF9tYWNfb3BzX2FkZF9pbnRlcmZhY2VgIGlzIHRoZSBrZXkgZnVuY3Rpb24gdHJpZ2dlcmVkIHdoZW4gYSBuZXcgaW50ZXJmYWNlIGlzIGFkZGVkLiBUaGF0IG1ha2VzIHNlbnNlOyBhZGRpbmcgYW4gaW50ZXJmYWNlLCBlc3BlY2lhbGx5IGluIGEgd2lyZWxlc3MgY29udGV4dCB1c2luZyBubDgwMjExLCBpcyBhIHNpZ25pZmljYW50IGV2ZW50LiBJJiMzOTttIHRoaW5raW5nLCB0aGlzIGZ1bmN0aW9uIGlzIGxpa2VseSByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCBhbGwgdGhlIG5lY2Vzc2FyeSBkYXRhIHN0cnVjdHVyZXMgYW5kIGNvbmZpZ3VyYXRpb25zIHNwZWNpZmljIHRvIHRoZSBuZXcgaW50ZXJmYWNlIHdpdGhpbiB0aGUgTUFDIGxheWVyLiBJdOKAmXMgdGhlIGVudHJ5IHBvaW50IHRvIG1ha2luZyB0aGUgaW50ZXJmYWNlIG9wZXJhdGlvbmFsLgoKQnV0IGJlZm9yZSBJIGRlbHZlIGRlZXBlciBpbnRvIGBtbTgxeF9tYWNfb3BzX2FkZF9pbnRlcmZhY2VgLCBhIHF1aWNrIGRldG91ciBpcyBpbiBvcmRlci4gTGV0IG1lIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLiBJIHdhbnQgdG8gcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgdGhhdCB3aXRoIGBtbTgxeF9tYWNfcmVnaXN0ZXJgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBNQUMgbGF5ZXIgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYW5kIHJlZ2lzdGVyZWQgZmlyc3QsIHNvIHRoZSBhZGRpbmcgY2FuIGdvIHNtb290aGx5LiBMZXQgbWUgdmVyaWZ5IHRoZSBmbG93IG9mIG9wZXJhdGlvbnMuIFRoaXMgcmVnaXN0cmF0aW9uIGlzIGEgZm91bmRhdGlvbmFsIHBpZWNlIGFuZCBpbmZsdWVuY2VzIGV2ZXJ5dGhpbmcgdGhhdCBjb21lcyBhZnRlci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIHdvcmtpbmcgd2l0aCBhY2N1cmF0ZSBhc3N1bXB0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW04MXhfZndfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYz02ODk9c3RhdGljIGludCBtbTgxeF9md19yZXF1ZXN0KHN0cnVjdCBtbTgxeCAqbW9ycywgY29uc3Qgc3RydWN0IGZpcm13YXJlICoqZncpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTcxOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYzo3MTk6aW50IG1tODF4X2Z3X2luaXQoc3RydWN0IG1tODF4ICptb3JzLCBib29sIHJlc2V0KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTcyMC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5oPTEzND1zdHJ1Y3QgZXh0X2hvc3RfdGJsIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmgtMTM5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5oOjE0MDppbnQgbW04MXhfZndfaW5pdChzdHJ1Y3QgbW04MXggKm1vcnMsIGJvb2wgcmVzZXQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5oLTE0MS1pbnQgbW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsKHN0cnVjdCBtbTgxeCAqbW9ycyk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYz0yMTA3PXN0YXRpYyBpbnQgbW04MXhfbWFjX3Jlc3RhcnQoc3RydWN0IG1tODF4ICptb3JzKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjEzOS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjE0MDpcdHJldCA9IG1tODF4X2Z3X2luaXQobW9ycywgdHJ1ZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxNDEtXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA3OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NTg4CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgRGlhZ25vc3RpYyBRdWVyeSoqCgpSaWdodCwgbGV0JiMzOTtzIHNlZS4uLiB3aGF0JiMzOTtzIHRoZSBmaXJzdCB0aGluZyB0aGF0IHNwcmluZ3MgdG8gbWluZCwgYmFzZWQgb24gdGhlIGNvbnRleHQuLi4gR2l2ZW4gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBpbml0aWFsaXphdGlvbiwgdGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcyBhbHdheXMgYWJvdXQgdGhlIGNvcmUgc2V0dXAuIEEgbmFtZSBsaWtlIGBtbTgxeF9jb3JlX2luaXRgIHN1Z2dlc3RzIGl0JiMzOTtzIGEgY3JpdGljYWwgZW50cnkgcG9pbnQgZm9yIGJyaW5naW5nIGEgc3BlY2lmaWMgbWljcm9jb250cm9sbGVyIGNvcmUgb25saW5lLiBJcyB0aGlzIGEgc3lzdGVtIEkgYW0gZmFtaWxpYXIgd2l0aD8gRnJvbSBteSB5ZWFycyBvZiBleHBlcmllbmNlLCBJIGNhbiBpbW1lZGlhdGVseSBzdGFydCB0aGlua2luZyB0aHJvdWdoIHBvdGVudGlhbCBpc3N1ZXMgdGhhdCBJIHdvdWxkIHNlZSBmcm9tIHRoZSBvdXRzZXQuIEkgYW0gaW1tZWRpYXRlbHkgZ29pbmcgdG8gY29uc2lkZXI6CgoqICAgRG9lcyB0aGlzIGluaXRpYWxpemF0aW9uIGhhbmRsZSBjbG9jayBjb25maWd1cmF0aW9uPwoqICAgV2hhdCBhYm91dCBtZW1vcnkgbWFwcGluZyBhbmQgcHJvdGVjdGlvbj8KKiAgIEludGVycnVwdCB2ZWN0b3Igc2V0dXA/CiogICBQZXJpcGhlcmFsIGNvbmZpZ3VyYXRpb24gLSB0aGlzIGlzIG9mdGVuIGEgbWluZWZpZWxkIQoKSXQmIzM5O3MgbGlrZWx5IHRoZSBzdGFydGluZyBwb2ludCBmb3IgbG93LWxldmVsIGhhcmR3YXJlIGJyaW5nLXVwLCB3aGljaCBpcyB0eXBpY2FsbHkgd2hlcmUgeW91IGZpbmQgdGhlIG1vc3Qgc3VidGxlIGFuZCBmcnVzdHJhdGluZyBidWdzLiBJcyBpdCBjYWxsaW5nIG91dCB0byB0aGUgbW9yZSBzcGVjaWFsaXplZCBzdWJzeXN0ZW0gaW5pdGlhbGl6YXRpb24/IFRoaXMgc2VlbXMgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttbTgxeF9md19pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzg5NAoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgZGlzdGlsbGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBgbW04MXhgIEZpcm13YXJlIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGggb2YgYG1tODF4X2Z3X2luaXRgLiBUaGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGtub3cgaXMgKndoZXJlKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBxdWljayBzZWFyY2ggdG8gc2VlIHdoYXQmIzM5O3Mgd2hhdC4gUmlnaHQsIGxvb2tzIGxpa2UgaXQmIzM5O3Mgb25seSBjYWxsZWQgd2l0aGluIGBtbTgxeF9tYWNfcmVzdGFydGAuCgpIbW0sIHRoYXQgc2VlbXMgb2RkLiBJJiMzOTtkIGV4cGVjdCBpbml0aWFsaXphdGlvbiB0byBoYXBwZW4gaW4gbW9yZSBwbGFjZXMsIHBvdGVudGlhbGx5IGR1cmluZyBkcml2ZXIgcmVnaXN0cmF0aW9uIG9yIGEgcG93ZXItdXAgc2VxdWVuY2UuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdC4gT2theSwgSSYjMzk7dmUgZG91YmxlLWNoZWNrZWQsIGFuZCBteSBpbml0aWFsIHNlYXJjaCB3YXMgY29ycmVjdCAtIGl0JiMzOTtzICpvbmx5KiBpbiBgbW04MXhfbWFjX3Jlc3RhcnRgLgoKSSBzaG91bGQgcHJvYmFibHkgbG9vayBhdCB3aGF0IGVsc2UgaXMgcmVsYXRlZCB0byB0aGUgTUFDLCBzbyBJIHRoaW5rIEkgd2lsbCBjaGVjayBgbW04MXhfbWFjX3JlZ2lzdGVyYCBuZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzYxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMzYxOlx0aW50IG1tODF4X21hY19yZWdpc3RlcihzdHJ1Y3QgbW04MXggKm1vcnMpXG4yMzYyOlx0e1xuMjM2MzpcdFx0aW50IHJldDtcbjIzNjQ6XHRcdHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gbW9ycy1cdTAwM2VodztcbjIzNjU6XHRcbjIzNjY6XHRcdG1vcnMtXHUwMDNldHhfcG93ZXJfbWJtID0gSU5UX01BWDtcbjIzNjc6XHRcdG1vcnMtXHUwMDNldHhfbWF4X3Bvd2VyX21ibSA9IElOVF9NQVg7XG4yMzY4Olx0XHRtb3JzLVx1MDAzZXJ0c190aHJlc2hvbGQgPSBJRUVFODAyMTFfTUFYX1JUU19USFJFU0hPTEQ7XG4yMzY5Olx0XG4yMzcwOlx0XHRyZXQgPSBtbTgxeF9wc19pbml0KG1vcnMpO1xuMjM3MTpcdFx0aWYgKHJldClcbjIzNzI6XHRcdFx0cmV0dXJuIHJldDtcbjIzNzM6XHRcbjIzNzQ6XHRcdG1tODF4X21hY19jb25maWdfaHcobW9ycyk7XG4yMzc1Olx0XHRtbTgxeF9tYWNfaHdfc2Nhbl9pbml0KG1vcnMpO1xuMjM3NjpcdFx0bW04MXhfbWFjX3N0YWxlX3R4X3N0YXR1c190aW1lcl9pbml0KG1vcnMpO1xuMjM3NzpcdFxuMjM3ODpcdFx0cmV0ID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KGh3KTtcbjIzNzk6XHRcdGlmIChyZXQpIHtcbjIzODA6XHRcdFx0ZGV2X2Vycihtb3JzLVx1MDAzZWRldiwgXCYjMzQ7aWVlZTgwMjExX3JlZ2lzdGVyX2h3IGZhaWxlZCAlZFwmIzM0OywgcmV0KTtcbjIzODE6XHRcdFx0bW04MXhfbWFjX3VucmVnaXN0ZXIobW9ycyk7XG4yMzgyOlx0XHRcdHJldHVybiByZXQ7XG4yMzgzOlx0XHR9XG4yMzg0Olx0XG4yMzg1Olx0XHRtbTgxeF9yY19pbml0KG1vcnMpO1xuMjM4NjpcdFxuMjM4NzpcdFx0LypcbjIzODg6XHRcdCAqIEF0IHRoaXMgc3RhZ2UsIHdlIGtub3cgYnVzIGFuZCBwYWdlciBzeXN0ZW0gaW50ZXJydXB0cyBhcmUgZW5hYmxlZC5cbjIzODk6XHRcdCAqIFRyaWdnZXIgdGhlIHJlY2VpdmUgd29ya3F1ZXVlIHRvIGRyYWluIGFueSBpbmNvbWluZyBjaGlwLXRvLWhvc3RcbjIzOTA6XHRcdCAqIHBlbmRpbmcgcGFja2V0cyBiZWVuIHB1c2hlZCBpbiB0aGUgcGVyaW9kIGJldHdlZW4gdGhlIGZpcm13YXJlXG4yMzkxOlx0XHQgKiBpbml0aWFsaXphdGlvbiBhbmQgaW50ZXJydXB0cyBiZWluZyBlbmFibGVkLlxuMjM5MjpcdFx0ICovXG4yMzkzOlx0XHRzZXRfYml0KE1NODFYX0hJRl9FVlRfUlhfUEVORCwgXHUwMDI2bW9ycy1cdTAwM2VoaWYuZXZlbnRfZmxhZ3MpO1xuMjM5NDpcdFx0cXVldWVfd29yayhtb3JzLVx1MDAzZWNoaXBfd3EsIFx1MDAyNm1vcnMtXHUwMDNlaGlmX3dvcmspO1xuMjM5NTpcdFxuMjM5NjpcdFx0cmV0dXJuIHJldDtcbjIzOTc6XHR9XG4yMzk4Olx0XG4yMzk5Olx0dm9pZCBtbTgxeF9tYWNfdW5yZWdpc3RlcihzdHJ1Y3QgbW04MXggKm1vcnMpXG4yNDAwOlx0e1xuMjQwMTpcdFx0bW04MXhfcHNfZGlzYWJsZShtb3JzKTtcbjI0MDI6XHRcdG1tODF4X3JjX2RlaW5pdChtb3JzKTtcbjI0MDM6XHRcdG1tODF4X21hY19od19zY2FuX2Rlc3Ryb3kobW9ycyk7XG4yNDA0Olx0XG4yNDA1Olx0XHRpZWVlODAyMTFfc3RvcF9xdWV1ZXMobW9ycy1cdTAwM2Vodyk7XG4yNDA2Olx0XHRpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhtb3JzLVx1MDAzZWh3KTtcbjI0MDc6XHRcbjI0MDg6XHRcdG1tODF4X2hpZl9mbHVzaF90eF9kYXRhKG1vcnMpO1xuMjQwOTpcdFx0bW04MXhfaGlmX2ZsdXNoX2NtZHMobW9ycyk7XG4yNDEwOlx0XHRtbTgxeF9zdGFsZV90eF9zdGF0dXNfdGltZXJfZmluaXNoKG1vcnMpO1xuMjQxMTpcdFx0bW04MXhfcHNfZmluaXNoKG1vcnMpO1xuMjQxMjpcdFxuMjQxMzpcdFx0a2ZyZWUobW9ycy1cdTAwM2VtY2FzdF9maWx0ZXIpO1xuMjQxNDpcdH1cbjI0MTU6XHRcbjI0MTY6XHRzdHJ1Y3QgbW04MXggKm1tODF4X21hY19hbGxvYyhzaXplX3QgcHJpdl9zaXplLCBzdHJ1Y3QgZGV2aWNlICpkZXYpXG4yNDE3Olx0e1xuMjQxODpcdFx0c3RydWN0IGllZWU4MDIxMV9odyAqaHc7XG4yNDE5Olx0XHRzdHJ1Y3QgbW04MXggKm1vcnM7XG4yNDIwOlx0XG4yNDIxOlx0XHRodyA9IGllZWU4MDIxMV9hbGxvY19odyhzaXplb2YoKm1vcnMpICYjNDM7IHByaXZfc2l6ZSwgXHUwMDI2bW04MXhfb3BzKTtcbjI0MjI6XHRcdGlmICghaHcpIHtcbjI0MjM6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O2llZWU4MDIxMV9hbGxvY19odyBmYWlsZWRcXHJcXG5cJiMzNDspO1xuMjQyNDpcdFx0XHRyZXR1cm4gTlVMTDtcbjI0MjU6XHRcdH1cbjI0MjY6XHRcbjI0Mjc6XHRcdFNFVF9JRUVFODAyMTFfREVWKGh3LCBkZXYpO1xuMjQyODpcdFx0bWVtc2V0KGh3LVx1MDAzZXByaXYsIDAsIHNpemVvZigqbW9ycykpO1xuMjQyOTpcdFxuMjQzMDpcdFx0bW9ycyA9IGh3LVx1MDAzZXByaXY7XG4yNDMxOlx0XHRtb3JzLVx1MDAzZWh3ID0gaHc7XG4yNDMyOlx0XHRtb3JzLVx1MDAzZWRldiA9IGRldjtcbjI0MzM6XHRcdG11dGV4X2luaXQoXHUwMDI2bW9ycy1cdTAwM2VjbWRfbG9jayk7XG4yNDM0Olx0XHRtdXRleF9pbml0KFx1MDAyNm1vcnMtXHUwMDNlY21kX3dhaXQpO1xuMjQzNTpcdFx0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZtb3JzLVx1MDAzZXR4X2VtcHR5X3dhaXRxKTtcbjI0MzY6XHRcbjI0Mzc6XHRcdHJldHVybiBtb3JzO1xuMjQzODpcdH1cbjI0Mzk6XHRcbjI0NDA6XHR2b2lkIG1tODF4X21hY19mcmVlKHN0cnVjdCBtbTgxeCAqbW9ycylcbjI0NDE6XHR7XG4yNDQyOlx0XHRpZWVlODAyMTFfZnJlZV9odyhtb3JzLVx1MDAzZWh3KTtcbjI0NDM6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA3OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NTYzCgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgSW5pdGlhbGl6YXRpb24gU2VxdWVuY2UqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCBgbW04MXhfZndfaW5pdGAgd2FzIGFsd2F5cyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgbW04MXhfbWFjX3JlZ2lzdGVyYCwgYnV0IEkmIzM5O20gbm90IHNlZWluZyB0aGF0IGluIHRoZSBjb2RlIGZsb3cuIFRoYXQmIzM5O3MgYSBwb3RlbnRpYWwgb3ZlcnNpZ2h0IG9yIHBlcmhhcHMgYSBtaXNyZW1lbWJlcmVkIGRldGFpbCBvbiBteSBwYXJ0LCBvciBhIHN1YnRsZSBjaGFuZ2UgaW4gdGhlIGRyaXZlciBzdHJ1Y3R1cmUgSSYjMzk7bSBub3QgaW1tZWRpYXRlbHkgZ3Jhc3BpbmcuIEkgbmVlZCB0byBjbGFyaWZ5IGhvdyB0aGF0IGZpcm13YXJlIGluaXRpYWxpemF0aW9uIGlzIGFjdHVhbGx5IGhhcHBlbmluZy4KClJpZ2h0LCBsZXQmIzM5O3MgYmFjayB1cCBhbmQgY2hlY2sgdGhlIGJyb2FkZXIgaW5pdGlhbGl6YXRpb24gc2NoZW1lLiBUaGUga2V5IHNlZW1zIHRvIGxpZSBlbHNld2hlcmUsIHNvIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGBtbTgxeF9jb3JlX2luaXRgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBsb2dpY2FsIGZsb3cgaXMgYmVpbmcgaGFuZGxlZCwgc28gdGhhdCBtdXN0IGJlIHdoZXJlIHRoZSBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2NzpcdGludCBtbTgxeF9jb3JlX2luaXQoc3RydWN0IG1tODF4ICptb3JzKVxuICA2ODpcdHtcbiAgNjk6XHRcdGludCByZXQ7XG4gIDcwOlx0XG4gIDcxOlx0XHRzZXRfYml0KE1NODFYX1NUQVRFX0NISVBfVU5SRVNQT05TSVZFLCBcdTAwMjZtb3JzLVx1MDAzZXN0YXRlX2ZsYWdzKTtcbiAgNzI6XHRcdHNldF9iaXQoTU04MVhfU1RBVEVfUkVMT0FEX0ZXX0FGVEVSX1NUQVJULCBcdTAwMjZtb3JzLVx1MDAzZXN0YXRlX2ZsYWdzKTtcbiAgNzM6XHRcbiAgNzQ6XHRcdG1tODF4X2NvcmVfaW5pdF9tYWNfYWRkcihtb3JzKTtcbiAgNzU6XHRcbiAgNzY6XHRcdHJldCA9IG1tODF4X2NvcmVfYXR0YWNoX3JlZ3MobW9ycyk7XG4gIDc3Olx0XHRpZiAocmV0KVxuICA3ODpcdFx0XHRyZXR1cm4gcmV0O1xuICA3OTpcdFxuICA4MDpcdFx0bW9ycy1cdTAwM2VjaGlwX3dxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoXCYjMzQ7Y2hpcF93cVwmIzM0Oyk7XG4gIDgxOlx0XHRpZiAoIW1vcnMtXHUwMDNlY2hpcF93cSlcbiAgODI6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gIDgzOlx0XG4gIDg0Olx0XHRtb3JzLVx1MDAzZW5ldF93cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKFwmIzM0O25ldF93cVwmIzM0Oyk7XG4gIDg1Olx0XHRpZiAoIW1vcnMtXHUwMDNlbmV0X3dxKSB7XG4gIDg2Olx0XHRcdHJldCA9IC1FTk9NRU07XG4gIDg3Olx0XHRcdGdvdG8gZXJyX2NoaXBfd3E7XG4gIDg4Olx0XHR9XG4gIDg5Olx0XG4gIDkwOlx0XHRyZXQgPSBtbTgxeF9oaWZfaW5pdChtb3JzKTtcbiAgOTE6XHRcdGlmIChyZXQpXG4gIDkyOlx0XHRcdGdvdG8gZXJyX3dxcztcbiAgOTM6XHRcbiAgOTQ6XHRcdHJldHVybiAwO1xuICA5NTpcdFxuICA5NjpcdGVycl93cXM6XG4gIDk3Olx0XHRmbHVzaF93b3JrcXVldWUobW9ycy1cdTAwM2VuZXRfd3EpO1xuICA5ODpcdFx0ZGVzdHJveV93b3JrcXVldWUobW9ycy1cdTAwM2VuZXRfd3EpO1xuICA5OTpcdFxuIDEwMDpcdGVycl9jaGlwX3dxOlxuIDEwMTpcdFx0Zmx1c2hfd29ya3F1ZXVlKG1vcnMtXHUwMDNlY2hpcF93cSk7XG4gMTAyOlx0XHRkZXN0cm95X3dvcmtxdWV1ZShtb3JzLVx1MDAzZWNoaXBfd3EpO1xuIDEwMzpcdFxuIDEwNDpcdFx0cmV0dXJuIHJldDtcbiAxMDU6XHR9XG4gMTA2Olx0RVhQT1JUX1NZTUJPTF9HUEwobW04MXhfY29yZV9pbml0KTtcbiAxMDc6XHRcbiAxMDg6XHRpbnQgbW04MXhfY29yZV9yZWdpc3RlcihzdHJ1Y3QgbW04MXggKm1vcnMpXG4gMTA5Olx0e1xuIDExMDpcdFx0cmV0dXJuIG1tODF4X21hY19yZWdpc3Rlcihtb3JzKTtcbiAxMTE6XHR9XG4gMTEyOlx0RVhQT1JUX1NZTUJPTF9HUEwobW04MXhfY29yZV9yZWdpc3Rlcik7XG4gMTEzOlx0XG4gMTE0Olx0dm9pZCBtbTgxeF9jb3JlX3VucmVnaXN0ZXIoc3RydWN0IG1tODF4ICptb3JzKVxuIDExNTpcdHtcbiAxMTY6XHRcdG1tODF4X21hY191bnJlZ2lzdGVyKG1vcnMpO1xuIDExNzpcdH1cbiAxMTg6XHRFWFBPUlRfU1lNQk9MX0dQTChtbTgxeF9jb3JlX3VucmVnaXN0ZXIpO1xuIDExOTpcdFxuIDEyMDpcdHZvaWQgbW04MXhfY29yZV9kZWluaXQoc3RydWN0IG1tODF4ICptb3JzKVxuIDEyMTpcdHtcbiAxMjI6XHRcdG1tODF4X2hpZl9maW5pc2gobW9ycyk7XG4gMTIzOlx0XHRmbHVzaF93b3JrcXVldWUobW9ycy1cdTAwM2VuZXRfd3EpO1xuIDEyNDpcdFx0ZGVzdHJveV93b3JrcXVldWUobW9ycy1cdTAwM2VuZXRfd3EpO1xuIDEyNTpcdFx0Zmx1c2hfd29ya3F1ZXVlKG1vcnMtXHUwMDNlY2hpcF93cSk7XG4gMTI2Olx0XHRkZXN0cm95X3dvcmtxdWV1ZShtb3JzLVx1MDAzZWNoaXBfd3EpO1xuIDEyNzpcdH1cbiAxMjg6XHRFWFBPUlRfU1lNQk9MX0dQTChtbTgxeF9jb3JlX2RlaW5pdCk7XG4gMTI5Olx0XG4gMTMwOlx0dm9pZCBtbTgxeF9jb3JlX2ZyZWUoc3RydWN0IG1tODF4ICptb3JzKVxuIDEzMTpcdHtcbiAxMzI6XHRcdG1tODF4X21hY19mcmVlKG1vcnMpO1xuIDEzMzpcdH1cbiAxMzQ6XHRFWFBPUlRfU1lNQk9MX0dQTChtbTgxeF9jb3JlX2ZyZWUpO1xuIDEzNTpcdFxuIDEzNjpcdE1PRFVMRV9BVVRIT1IoXCYjMzQ7TW9yc2UgTWljcm9cJiMzNDspO1xuIDEzNzpcdE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtEcml2ZXIgc3VwcG9ydCBmb3IgTW9yc2UgTWljcm8gTU04MVggY29yZVwmIzM0Oyk7XG4gMTM4Olx0TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7RHVhbCBCU0QvR1BMXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDc6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA4ODQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGaXJtd2FyZSBMb2FkaW5nIExvZ2ljKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYG1tODF4X2Z3X2luaXRgIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IHRyaWdnZXJlZC4gSG1tLCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIG9ubHkgY2FsbGVkIHdpdGhpbiBgbW04MXhfbWFjX3Jlc3RhcnRgLiBOb3csIHdoZXJlIGRvZXMgKnRoYXQqIGdldCBjYWxsZWQ/IFJpZ2h0LCBgbW04MXhfbWFjX3Jlc3RhcnRgIGlzIGNhbGxlZCBmcm9tIGBtbTgxeF9tYWNfb3BzX2FkZF9pbnRlcmZhY2VgIGFuZCBhbHNvIGBtbTgxeF9yZWdfbm90aWZpZXJgLiBTbywgYWRkaW5nIGFuIGludGVyZmFjZSByZXN0YXJ0cyB0aGUgTUFDLCBhbmQgKnRoYXQqIGxvYWRzIHRoZSBmaXJtd2FyZS4gTWFrZXMgc2Vuc2UsIHRoYXQmIzM5O3MgYSBjb21wbGV0ZWx5IHZhbGlkIHBhdGguIFRoaXMgc2hvdWxkIGJlIGEgcmVhY2hhYmxlIHBvaW50LgoKVGhlIHBhdGNoIGl0c2VsZiBmb2N1c2VzIG9uIHRoZSBmaXJtd2FyZSBwYXJzaW5nLCB3aGljaCBtYWtlcyBzZW5zZSBpZiB0aGUgbG9hZGluZyBwcm9jZXNzIGlzIHNvbGlkLiBUaGUgZmlybXdhcmUmIzM5O3MgbG9hZGVkIHVzaW5nIGByZXF1ZXN0X2Zpcm13YXJlYCwgd2hpY2ggaXMgcHJldHR5IHN0YW5kYXJkLiBOb3csIGNhbiBzeXprYWxsZXIgYWN0dWFsbHkgKmZ1enoqIHRoaXM/IExldCBtZSBzZWXigKYgSSBrbm93IHN5emthbGxlciBoYXMgYHN5el9tb3VudF9pbWFnZWAsIG9yIGNhbiBtb2NrIGByZXF1ZXN0X2Zpcm13YXJlYCBpZiBzdXBwb3J0ZWQuLi4gYnV0LCB3YWl0LCBpdCBjYW4gYWxzbyBqdXN0IGRyb3AgZmlsZXMgaW4gYC9saWIvZmlybXdhcmVgLCBvciB1c2UgdGhlIGZpcm13YXJlIGxvYWRlciBmYWxsYmFjay4gT2gsIHllYWgsIHN5emthbGxlciAqZG9lcyogZnV6eiBmaXJtd2FyZSBsb2FkaW5nIHZpYSBgcmVxdWVzdF9maXJtd2FyZWAsIGJ5IGludGVyY2VwdGluZyBpdCBvciBwcm92aWRpbmcgZmlsZXMgZGlyZWN0bHkuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgbmFpbCBkb3duIHByZWNpc2VseSB3aGljaCBmdW5jdGlvbnMgYXJlIGJlaW5nIG1vZGlmaWVkIGhlcmUuIExvb2tzIGxpa2U6IGBtbTgxeF9md19wYXJzZV9pbmZvYCwgYG1tODF4X2Z3X2xvYWRfZndgLCBgbW04MXhfZndfcmVhZF9leHRfaG9zdF90YWJsZWAsIGFuZCBgbW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsYC4KCk5vdyB0aGUgcXVlc3Rpb24gaXMsICppcyogYG1tODF4X2Z3X3BhcnNlX2luZm9gIHJlYWNoYWJsZT8gV2UgbmVlZCB0byB2ZXJpZnkgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW04MXhfZndfcGFyc2VfaW5mbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYz0yOD1zdGF0aWMgaW50IG1tODF4X2Z3X2dldF9oZWFkZXIoY29uc3QgdTggKmRhdGEsIEVsZjMyX0VoZHIgKmVoZHIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTU0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jOjU1OnN0YXRpYyB2b2lkIG1tODF4X2Z3X3BhcnNlX2luZm8oc3RydWN0IG1tODF4ICptb3JzLCBjb25zdCB1OCAqZGF0YSwgaW50IGxlbmd0aClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy01Ni17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jPTExMD1zdGF0aWMgaW50IG1tODF4X2Z3X2xvYWRfZncoc3RydWN0IG1tODF4ICptb3JzLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy0xODQtXHRcdFx0ICAgICBzaXplb2YoXCYjMzQ7LmZ3X2luZm9cJiMzNDspKSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYzoxODU6XHRcdFx0bW04MXhfZndfcGFyc2VfaW5mbyhtb3JzLCBmdy1cdTAwM2VkYXRhICYjNDM7IHNoZHIuc2hfb2Zmc2V0LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTE4Ni1cdFx0XHRcdFx0ICAgIHNoZHIuc2hfc2l6ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA3OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxOTMwCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBGaXJtd2FyZSBMb2FkaW5nIFNlcXVlbmNlKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgZmlybXdhcmUgbG9hZGluZyBwcm9jZXNzLiBJIHNlZSB0aGF0IHRoZSBmdW5jdGlvbiBgbW04MXhfZndfbG9hZF9md2AgaXMgZGVmaW5pdGVseSB0aGUgb25lIGluaXRpYXRpbmcgdGhlIGxvYWQsIHRoYXQmIzM5O3MgY2xlYXIgZW5vdWdoLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3csIGhvdyBpdCYjMzk7cyBiZWluZyBmZWQsIHdoZXJlIHRoZSBhY3R1YWwgZmlybXdhcmUgaW1hZ2UgY29tZXMgZnJvbSwgYW5kIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBiZWluZyBsb2FkZWQuIEkmIzM5O20gbm90aW5nIHRoYXQuCgpMZXQgbWUgYWxzbyBjaGVjayB3aGF0IGBtbTgxeF9md19yZWFkX2V4dF9ob3N0X3RhYmxlYCBpcyBhYm91dC4gSXMgaXQgcmVhZGluZyBhIGZpbGU/IEZyb20gZXh0ZXJuYWwgbWVtb3J5PyBPciBwZXJoYXBzIGFuIGludGVybmFsIGxvb2t1cCB0YWJsZT8gSXMgdGhhdCB0aGUgdGFibGUgb2YgJiMzNDtleHRlcm5hbCBob3N0JiMzNDsgaW5mb3JtYXRpb24/IEkmIzM5O2xsIGhhdmUgdG8gaW52ZXN0aWdhdGUgdGhhdCBmdW5jdGlvbiB0byBkZXRlcm1pbmUgd2hhdCBpdCBkb2VzLCB0aGUgbmF0dXJlIG9mIHRoZSBkYXRhIGludm9sdmVkIGFuZCBob3cgdGhpcyByZWxhdGVzIHRvIG15IGZpcm13YXJlIGxvYWRpbmcgc2VxdWVuY2UuIEl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21tODF4X2Z3X3JlYWRfZXh0X2hvc3RfdGFibGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmM9NDQyPXN0YXRpYyBpbnQgbW04MXhfZndfZ2V0X2hvc3RfdGFibGVfcHRyKHN0cnVjdCBtbTgxeCAqbW9ycylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmMtNDU3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jOjQ1ODpzdGF0aWMgaW50IG1tODF4X2Z3X3JlYWRfZXh0X2hvc3RfdGFibGUoc3RydWN0IG1tODF4ICptb3JzLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTQ1OS1cdFx0XHRcdFx0c3RydWN0IGV4dF9ob3N0X3RibCAqKmV4dF9ob3N0X3RhYmxlKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYz01NjQ9aW50IG1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibChzdHJ1Y3QgbW04MXggKm1vcnMpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTU3MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYzo1NzE6XHRyZXQgPSBtbTgxeF9md19yZWFkX2V4dF9ob3N0X3RhYmxlKG1vcnMsIFx1MDAyNmV4dF9ob3N0X3RhYmxlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy01NzItXHRpZiAocmV0IHx8ICFleHRfaG9zdF90YWJsZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDc6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI1NjMKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBGaXJtd2FyZSBQYXJzaW5nKioKCkFscmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGZpcm13YXJlIHBhcnNpbmcsIHNwZWNpZmljYWxseSB0aGUgYG1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibGAgZnVuY3Rpb24uIE15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyB0byB0aGUgcG90ZW50aWFsIGNvbXBsZXhpdGllcy4gVGhpcyBmdW5jdGlvbiBuYW1lIHN0cm9uZ2x5IHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYW4gZXh0ZW5kZWQgaG9zdCB0YWJsZSwgbWVhbmluZyB3ZSYjMzk7cmUgbGlrZWx5IHByb2Nlc3NpbmcgbW9yZSB0aGFuIGp1c3QgYmFzaWMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGhvc3Qgc3lzdGVtLiBJdCBjb3VsZCBiZSBwYXJzaW5nIGNvbmZpZ3VyYXRpb25zLCByZXNvdXJjZSBhbGxvY2F0aW9ucywgZGV2aWNlLXNwZWNpZmljIHNldHRpbmdzLi4uIHRoZSBwb3NzaWJpbGl0aWVzIGFyZSB2YXN0LgoKSSYjMzk7bSBzdGFydGluZyB0byB0aGluayBhYm91dCB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMuIFdoYXQgZm9ybWF0IGlzIHRoaXMgaG9zdCB0YWJsZSBpbj8gSXMgaXQgYSBzdGFuZGFyZCBmb3JtYXQgb3Igc29tZXRoaW5nIHByb3ByaWV0YXJ5PyBBcmUgd2UgdGFsa2luZyBhYm91dCBhIGJpbmFyeSBibG9iLCBhIHN0cnVjdHVyZWQgdGV4dCBmaWxlLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gV2hhdCBraW5kIG9mIGVycm9yIGhhbmRsaW5nIGlzIGluIHBsYWNlPyBBcmUgdGhlcmUgY2hlY2tzdW1zIG9yIGludGVncml0eSBjaGVja3MgdG8gZW5zdXJlIGRhdGEgdmFsaWRpdHk/CgpNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoaXMgd2lsbCBpbnZvbHZlIGJpdC1sZXZlbCBtYW5pcHVsYXRpb24sIG1lbW9yeSBtYW5hZ2VtZW50IGNvbnNpZGVyYXRpb25zIGlmIHRoZSB0YWJsZSBpcyBsYXJnZSwgYW5kIHBvdGVudGlhbGx5IGRlYWxpbmcgd2l0aCBlbmRpYW5uZXNzIGlzc3VlcyBkZXBlbmRpbmcgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuIEnigJlsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjYWxsIHdpdGhpbiB0aGUgbGFyZ2VyIGZpcm13YXJlIGltYWdlIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGluZm9ybWF0aW9uIGlzIHVzZWQuIFRoaXMga2luZCBvZiBwYXJzaW5nIGZ1bmN0aW9uIGlzIHdoZXJlIHZ1bG5lcmFiaWxpdGllcyBsaWtlIGJ1ZmZlciBvdmVyZmxvd3Mgb3IgZm9ybWF0IHN0cmluZyBidWdzIHRlbmQgdG8gaGlkZSwgc28gSSYjMzk7bSBhbHJlYWR5IG1lbnRhbGx5IHByZXBhcmluZyB0byBzY3J1dGluaXplIHRoZSBjb2RlIGZvciB0aG9zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDc6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jPTU1ND1zdGF0aWMgdm9pZCBtbTgxeF9md191cGRhdGVfdmFsaWRhdGVfc2tiX2NoZWNrc3VtKFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy01NjMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmM6NTY0OmludCBtbTgxeF9md19wYXJzZV9leHRfaG9zdF90Ymwoc3RydWN0IG1tODF4ICptb3JzKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTU2NS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5oPTE0MD1pbnQgbW04MXhfZndfaW5pdChzdHJ1Y3QgbW04MXggKm1vcnMsIGJvb2wgcmVzZXQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5oOjE0MTppbnQgbW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsKHN0cnVjdCBtbTgxeCAqbW9ycyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmgtMTQyLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM9MjEwNz1zdGF0aWMgaW50IG1tODF4X21hY19yZXN0YXJ0KHN0cnVjdCBtbTgxeCAqbW9ycylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxNDctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jOjIxNDg6XHRyZXQgPSBtbTgxeF9md19wYXJzZV9leHRfaG9zdF90YmwobW9ycyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxNDktXHRpZiAocmV0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA3OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMzMzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIHRyYWNlZCBkb3duIGhvdyB0aGlzIGBtbTgxeF9md19wYXJzZV9leHRfaG9zdF90YmxgIGZ1bmN0aW9uIGlzIGNhbGxlZCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWxzbyBjYWxsZWQgZnJvbSBgbW04MXhfbWFjX3Jlc3RhcnRgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCB3aGljaCBtZWFucyB0aGUgZmlybXdhcmUgcGFyc2luZyBsb2dpYyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBkdXJpbmcgcnVudGltZSBhbmQgdGhlcmVmb3JlIGEgdmFsaWQgdGFyZ2V0IGZvciBmdXp6aW5nLiBFeGNlbGxlbnQhCgpOb3csIHdoaWNoIGZ1bmN0aW9ucyBhcmUgdGhlIG1vc3QgcHJvbWlzaW5nPyBMZXQmIzM5O3Mgc2VlLi4uIEluaXRpYWxseSwgSSB3YXMgbG9va2luZyBhdCBgbW04MXhfZndfcGFyc2VfaW5mb2AuIEl0JiMzOTtzIHN0YXRpYywgc28gaXQmIzM5O3MgYSBiaXQgbGVzcyBhdHRyYWN0aXZlIGJ1dCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB3aGVyZSB3ZSYjMzk7cmUgZ29pbmcuIExldCYjMzk7cyBkaWcgZGVlcGVyLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGEgd2hpbGUgbG9vcCB3aXRoIGEgc3dpdGNoIHN0YXRlbWVudC4gSXQmIzM5O3MgcHJvYmFibHkgbm90IGlubGluZWQgYmVjYXVzZSB0aGF0JiMzOTtzIGEgZGVjZW50IHNpemUsIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIHN0YXRpYy4gQmV0dGVyIHRvIHBpdm90IGFuZCBmb2N1cyBvbiBgbW04MXhfZndfbG9hZF9md2Agc2luY2UgaXQgY2FsbHMgYG1tODF4X2Z3X3BhcnNlX2luZm9gLiAKCldhaXQgYSBtaW51dGUsIGBtbTgxeF9md19pbml0YCBpcyAqbm90KiBzdGF0aWMsIHNvIHRoYXQmIzM5O3MgZGVmaW5pdGVseSBhIHBvaW50IG9mIGludGVyZXN0LCBhbmQgYG1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibGAgaXMgYWxzbyBub24tc3RhdGljLCBzbyB3ZSYjMzk7dmUgZ290IGEgY291cGxlIG9mIGdvb2QgbGVhZHMgdGhlcmUhCgpPa2F5LCBsZXQmIzM5O3MgcHJpb3JpdGl6ZSBhbmQgaW52ZXN0aWdhdGUgYG1tODF4X2Z3X2luaXRgIGFuZCBgbW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsYCBhbmQgc2VlIHdoZXJlIHdlIGFyZS4KCkp1c3QgdG8gYmUgc2FmZSwgSSYjMzk7bGwgcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyB0byBzZWUgaWYgdGhlIGBNTTgxWGAgc3ltYm9sIGlzIGRlZmluZWQuIEdvdHRhIGNoZWNrIHRoYXQgb2ZmIHRoZSBsaXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTU04MVgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L0tjb25maWctMi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvS2NvbmZpZzozOmNvbmZpZyBNTTgxWFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9LY29uZmlnLTQtXHR0cmlzdGF0ZSBcJiMzNDtNb3JzZSBNaWNybyBNTTgxeCB3aXJlbGVzcyBkZXZpY2VzXCYjMzQ7IGlmIENPTVBJTEVfVEVTVFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvS2NvbmZpZy0xMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvS2NvbmZpZzoxMjpjb25maWcgTU04MVhfVVNCXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L0tjb25maWctMTMtXHR0cmlzdGF0ZSBcJiMzNDtNb3JzZSBNaWNybyBNTTgxeCBVU0Igc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvS2NvbmZpZy0xOS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvS2NvbmZpZzoyMDpjb25maWcgTU04MVhfU0RJT1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9LY29uZmlnLTIxLVx0dHJpc3RhdGUgXCYjMzQ7TW9yc2UgTWljcm8gTU04MXggU0RJTyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA3OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MjQ4CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgTW9kdWxlIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYE1NODFYX1VTQmAgYW5kIGBNTTgxWGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGVpciBpbnRlcmRlcGVuZGVuY2llcy4gVGhpcyBpcyBhIGNydWNpYWwgZmlyc3Qgc3RlcC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hpY2ggb3RoZXIgbW9kdWxlcywgZHJpdmVycywgbGlicmFyaWVzLCBvciBldmVuIHNwZWNpZmljIGhhcmR3YXJlIGNvbXBvbmVudHMgdGhlc2UgcmVseSBvbi4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgY29yZSBrZXJuZWwgbW9kdWxlcywgdXNlci1zcGFjZSB1dGlsaXRpZXMsIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkIHdpdGhpbiBvdXIgcHJvcHJpZXRhcnkgc3RhY2s/IEkgbmVlZCB0byBidWlsZCBhIG1lbnRhbCBtYXAg4oCTIGEgZGVwZW5kZW5jeSBncmFwaCByZWFsbHkg4oCTIHRvIHNlZSB0aGUgZnVsbCBzY29wZS4KClNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dDoKCiogICAqKkV4cGxpY2l0IERlcGVuZGVuY2llczoqKiBXaGF0JiMzOTtzIGxpc3RlZCBpbiB0aGUgbWFrZWZpbGVzIG9yIGNvbmZpZ3VyYXRpb24gZmlsZXM/IEFueSBvYnZpb3VzIGByZXF1aXJlc2AgZGlyZWN0aXZlcyBvciBidWlsZCBmbGFncz8KKiAgICoqSW1wbGljaXQgRGVwZW5kZW5jaWVzOioqIFdoZXJlIGRvIHRoZXkgKnVzZSogZnVuY3Rpb25hbGl0eSB0aGF0IGlzbiYjMzk7dCBkaXJlY3RseSBkZWNsYXJlZD8gQXJlIHRoZXJlIHNoYXJlZCByZXNvdXJjZXMgbGlrZSBtZW1vcnkgcmVnaW9ucywgaW50ZXJydXB0IGhhbmRsZXJzLCBvciBkZXZpY2UgcmVnaXN0ZXJzPwoqICAgKipWZXJzaW9uaW5nIGFuZCBDb21wYXRpYmlsaXR5OioqIEFyZSB0aGVyZSB2ZXJzaW9uIGNvbnN0cmFpbnRzIG9uIHRoZSBtb2R1bGVzIHRoZXkgZGVwZW5kIG9uPyBXaGF0IGhhcHBlbnMgaWYgYSBkZXBlbmRlbnQgbW9kdWxlIGlzIHVwZGF0ZWQgb3IgcGF0Y2hlZD8gQ29tcGF0aWJpbGl0eSBwcm9ibGVtcyBoZXJlIGFyZSB0aGUgd29yc3QuCiogICAqKkhhcmR3YXJlIEFic3RyYWN0aW9uIExheWVyIChIQUwpOioqIEhvdyBhYnN0cmFjdCBpcyB0aGUgaGFyZHdhcmUgYWNjZXNzPyBBcmUgdGhleSB0YWxraW5nIGRpcmVjdGx5IHRvIHJlZ2lzdGVycyBvciByZWx5aW5nIG9uIGEgd2VsbC1kZWZpbmVkIEhBTCB0aGF0IEkmIzM5O20gYWxyZWFkeSBmYW1pbGlhciB3aXRoPyBUaGlzIGNhbiBnaXZlIG1lIHNvbWUgaGludHMgdG8gc3RhcnQgd2l0aC4KKiAgICoqRXh0ZXJuYWwgTGlicmFyaWVzOioqIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgZm9yIGV4dGVybmFsIGxpYnJhcmllcyBhbmQgdGhlaXIgdmVyc2lvbnMuIEFueSBpc3N1ZXMgaW4gdGhlIHBhc3Q/IEFueSBrbm93biB2dWxuZXJhYmlsaXRpZXMgdGhhdCBjb3VsZCBhZmZlY3QgdGhlc2U/CgpUaGUgZ29hbCBpcyB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB3aGVyZSBjaGFuZ2VzIGluIGVpdGhlciBgTU04MVhfVVNCYCBvciBgTU04MVhgIGNvdWxkIHByb3BhZ2F0ZSBhbmQgd2hhdCBwb3RlbnRpYWwgaW1wYWN0IHRoZXkgY291bGQgaGF2ZSBvbiB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLiBUaGlzIGJhc2VsaW5lIGtub3dsZWRnZSBpcyBjcml0aWNhbCBmb3IgZWZmaWNpZW50IGRlYnVnZ2luZywgZmVhdHVyZSBpbXBsZW1lbnRhdGlvbiwgYW5kIGFueSBzb3J0IG9mIG1vZGlmaWNhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDc6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0XG4gICAzOlx0Y29uZmlnIE1NODFYXG4gICA0Olx0XHR0cmlzdGF0ZSBcJiMzNDtNb3JzZSBNaWNybyBNTTgxeCB3aXJlbGVzcyBkZXZpY2VzXCYjMzQ7IGlmIENPTVBJTEVfVEVTVFxuICAgNTpcdFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxuICAgNjpcdFx0c2VsZWN0IEZXX0xPQURFUlxuICAgNzpcdFx0c2VsZWN0IENSQzdcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciB3aXJlbGVzcyBkZXZpY2VzIGJhc2VkXG4gIDEwOlx0XHQgIG9uIE1vcnNlIE1pY3JvIE1NODF4eCBjaGlwc2V0cy5cbiAgMTE6XHRcbiAgMTI6XHRjb25maWcgTU04MVhfVVNCXG4gIDEzOlx0XHR0cmlzdGF0ZSBcJiMzNDtNb3JzZSBNaWNybyBNTTgxeCBVU0Igc3VwcG9ydFwmIzM0O1xuICAxNDpcdFx0ZGVwZW5kcyBvbiBNQUM4MDIxMSBcdTAwMjZcdTAwMjYgVVNCXG4gIDE1Olx0XHRzZWxlY3QgTU04MVhcbiAgMTY6XHRcdGhlbHBcbiAgMTc6XHRcdCAgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciB0aGUgVVNCIGludGVyZmFjZSBvZlxuICAxODpcdFx0ICBkZXZpY2VzIHVzaW5nIHRoZSBNb3JzZSBNaWNybyBNTTgxeCBjaGlwc2V0LlxuICAxOTpcdFxuICAyMDpcdGNvbmZpZyBNTTgxWF9TRElPXG4gIDIxOlx0XHR0cmlzdGF0ZSBcJiMzNDtNb3JzZSBNaWNybyBNTTgxeCBTRElPIHN1cHBvcnRcJiMzNDtcbiAgMjI6XHRcdGRlcGVuZHMgb24gTUFDODAyMTEgXHUwMDI2XHUwMDI2IE1NQ1xuICAyMzpcdFx0c2VsZWN0IE1NODFYXG4gIDI0Olx0XHRoZWxwXG4gIDI1Olx0XHQgIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3IgdGhlIFNESU8gaW50ZXJmYWNlIG9mXG4gIDI2Olx0XHQgIGRldmljZXMgdXNpbmcgdGhlIE1vcnNlIE1pY3JvIE1NODF4IGNoaXBzZXQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA3OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MDUyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkLgoKKipFbmFibGluZyBVU0IgR2FkZ2V0IFRlc3RpbmcgYW5kIFdMQU4gVmVuZG9yIFN1cHBvcnQqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZywgdG8gZ2V0IHRoaXMgVVNCIGdhZGdldCB0ZXN0aW5nIGZvciB0aGUgTU04MVggd29ya2luZywgd2UgYWJzb2x1dGVseSBuZWVkIHRvIGVuc3VyZSBgTU04MVhfVVNCYCBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIGEgbm8tYnJhaW5lciwgdGhhdCYjMzk7cyB3aGF0JiMzOTtzIGdvaW5nIHRvIGFsbG93IHRoZSBzeXN0ZW0gdG8gcmVjb2duaXplIHRoZSBVU0IgZ2FkZ2V0IGZ1bmN0aW9uYWxpdHkgb2YgdGhpcyBzcGVjaWZpYyBwaWVjZSBvZiBoYXJkd2FyZS4gSSBjYW4mIzM5O3QgZXZlbiAqdGhpbmsqIGFib3V0IHRlc3Rpbmcgd2l0aG91dCB0aGF0LgoKQW5kIHRoZW4sIGFsb25nc2lkZSB0aGF0LCBJJiMzOTttIG1ha2luZyBzdXJlIGBXTEFOX1ZFTkRPUl9NT1JTRU1JQ1JPYCBpcyBlbmFibGVkIHRvby4gSXQmIzM5O3MgY3J1Y2lhbCB3ZSBkb24mIzM5O3Qgb3Zlcmxvb2sgYW55IGRlcGVuZGVuY2llcyBvciB1bmRlcmx5aW5nIHZlbmRvci1zcGVjaWZpYyByZXF1aXJlbWVudHMuIFdpdGhvdXQgZW5hYmxpbmcgdGhpcyBzdXBwb3J0LCB3ZSYjMzk7cmUgbGlrZWx5IGdvaW5nIHRvIHJ1biBpbnRvIGlzc3VlcyB3aXRoIHRoZSB3aXJlbGVzcyBjb21wb25lbnRzIHdoZW4gd2Ugc3RhcnQgdGVzdGluZy4gSXQgaXMgYSBnb29kIHByYWN0aWNlIHRvIGVuc3VyZSBhbGwgdGhlIHJlbGV2YW50IHBhcnRzIG9mIHRoZSBzeXN0ZW0gYXJlIHVwIGFuZCBydW5uaW5nLCB0byBhdm9pZCB0aGUgZnJ1c3RyYXRpb24gb2YgdHJvdWJsZXNob290aW5nIHRoZSB3cm9uZyB0aGluZ3MuIEJlc3QgdG8gYmUgcHJlcGFyZWQsIHJpZ2h0PwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgV0xBTl9WRU5ET1JfTU9SU0VNSUNSTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9LY29uZmlnOjI6Y29uZmlnIFdMQU5fVkVORE9SX01PUlNFTUlDUk9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtNb3JzZSBNaWNybyBkZXZpY2VzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA3OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NDQ5CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMjYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTW9yc2UgTWljcm8gRmlybXdhcmUgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBgV0xBTl9WRU5ET1JfTU9SU0VNSUNST2AgYW5kIGBNTTgxWF9VU0JgIGNvbmZpZ3VyYXRpb25zIGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHNwZWNpZmljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIE1vcnNlIE1pY3JvIGRyaXZlciB0byB1bmRlcnN0YW5kIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgZmlybXdhcmUgbG9hZGluZyBwcm9jZXNzLiBJJiMzOTttIHNlZWluZyB0aGF0IGBtbTgxeF9md19wYXJzZV9leHRfaG9zdF90YmxgIGFuZCBgbW04MXhfZndfaW5pdGAgYXJlIGtleS4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBtbTgxeF9md19sb2FkX2Z3YCwgYF9fbW04MXhfZndfZmxhc2hgLCBhbmQgYG1tODF4X2Z3X2ZsYXNoYC4gSXQgbG9va3MgbGlrZSBgbW04MXhfZndfbG9hZF9md2AgaXMgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZywgYnV0IGl0JiMzOTtzIGNhbGxlZCBieSBgX19tbTgxeF9md19mbGFzaGAsIHdoaWNoIGlzIHRoZW4gY2FsbGVkIGJ5IGBtbTgxeF9md19mbGFzaGAsIGFuZCBmaW5hbGx5LCB0aGF0IGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBgbW04MXhfZndfaW5pdGAuIFNpbmNlIGBtbTgxeF9md19pbml0YCBpcyBhdCB0aGUgY29yZSBvZiB0aGlzIGNoYWluLCBpdCBsb29rcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBjYW4gcXVpY2tseSBzZWUgdGhhdCBgbW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsYCBpcyBub3Qgc3RhdGljLgoKSSYjMzk7bSBjb25maXJtaW5nIHRoYXQgYG1tODF4X2Z3X2luaXRgIGlzIG5vbi1zdGF0aWMgYXMgd2VsbC4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGF0IGBtbTgxeF9md19wYXJzZV9leHRfaG9zdF90YmxgIGlzIGRlZmluaXRlbHkgbm9uLXN0YXRpYywgYW5kIGFsc28gdGhhdCBgbW04MXhfZndfaW5pdGAgaXMsIHRvby4KCk5vdyBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGFjdHVhbCBjb2RlIGZvciBgbW04MXhfZndfaW5pdGAuIEkmIzM5O2xsIGZpbmQgaXQgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuY2AgYW5kIHN0YXJ0IGRpZ2dpbmcgZGVlcGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcxOSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzE5Olx0aW50IG1tODF4X2Z3X2luaXQoc3RydWN0IG1tODF4ICptb3JzLCBib29sIHJlc2V0KVxuIDcyMDpcdHtcbiA3MjE6XHRcdGludCByZXQ7XG4gNzIyOlx0XHRpbnQgYm9hcmRfaWQ7XG4gNzIzOlx0XHRjaGFyICpiY2ZfcGF0aCA9IE5VTEw7XG4gNzI0Olx0XHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3ID0gTlVMTDtcbiA3MjU6XHRcdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqYmNmID0gTlVMTDtcbiA3MjY6XHRcbiA3Mjc6XHRcdGJvYXJkX2lkID0gbW04MXhfaHdfb3RwX2dldF9ib2FyZF90eXBlKG1vcnMpO1xuIDcyODpcdFxuIDcyOTpcdFx0aWYgKCFtbTgxeF9od19vdHBfdmFsaWRfYm9hcmRfdHlwZShib2FyZF9pZCkpIHtcbiA3MzA6XHRcdFx0ZGV2X2Vycihtb3JzLVx1MDAzZWRldixcbiA3MzE6XHRcdFx0XHRcJiMzNDtPVFAgbm90IHNldCwgdW5hYmxlIHRvIGRldGVybWluZSBCQ0YgdG8gdXNlXCYjMzQ7KTtcbiA3MzI6XHRcdFx0cmV0ID0gLUVJTlZBTDtcbiA3MzM6XHRcdFx0Z290byBvdXQ7XG4gNzM0Olx0XHR9XG4gNzM1Olx0XG4gNzM2Olx0XHRkZXZfZGJnKG1vcnMtXHUwMDNlZGV2LCBcJiMzNDtVc2luZyBib2FyZCB0eXBlIDB4JTA0eCBmcm9tIE9UUFwmIzM0OywgYm9hcmRfaWQpO1xuIDczNzpcdFxuIDczODpcdFx0cmV0ID0gbW04MXhfZndfcmVxdWVzdChtb3JzLCBcdTAwMjZmdyk7XG4gNzM5Olx0XHRpZiAocmV0KVxuIDc0MDpcdFx0XHRnb3RvIG91dDtcbiA3NDE6XHRcbiA3NDI6XHRcdGJjZl9wYXRoID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsXG4gNzQzOlx0XHRcdFx0ICAgICBNTTgxWF9GV19ESVJcbiA3NDQ6XHRcdFx0XHQgICAgIFwmIzM0Oy92JXUvYmNmX2JvYXJkdHlwZV8lMDR4XCYjMzQ7IE1NODFYX0ZXX0VYVCxcbiA3NDU6XHRcdFx0XHQgICAgIG1vcnMtXHUwMDNlZndfbWFqb3IsIGJvYXJkX2lkKTtcbiA3NDY6XHRcdGlmICghYmNmX3BhdGgpIHtcbiA3NDc6XHRcdFx0cmV0ID0gLUVOT01FTTtcbiA3NDg6XHRcdFx0Z290byBvdXQ7XG4gNzQ5Olx0XHR9XG4gNzUwOlx0XG4gNzUxOlx0XHRyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKFx1MDAyNmJjZiwgYmNmX3BhdGgsIG1vcnMtXHUwMDNlZGV2KTtcbiA3NTI6XHRcdGlmIChyZXQpIHtcbiA3NTM6XHRcdFx0aWYgKHJldCA9PSAtRU5PRU5UKVxuIDc1NDpcdFx0XHRcdGRldl9lcnIobW9ycy1cdTAwM2VkZXYsIFwmIzM0O0JDRiAlcyBub3QgZm91bmRcXG5cJiMzNDssIGJjZl9wYXRoKTtcbiA3NTU6XHRcdFx0Z290byBvdXQ7XG4gNzU2Olx0XHR9XG4gNzU3Olx0XG4gNzU4Olx0XHRkZXZfaW5mbyhtb3JzLVx1MDAzZWRldiwgXCYjMzQ7TG9hZGVkIEJDRiBmcm9tICVzLCBzaXplICV6dSwgY3JjMzIgMHglMDh4XFxuXCYjMzQ7LFxuIDc1OTpcdFx0XHQgYmNmX3BhdGgsIGJjZi1cdTAwM2VzaXplLCBiaW5hcnlfY3JjKGJjZikpO1xuIDc2MDpcdFxuIDc2MTpcdFx0cmV0ID0gbW04MXhfZndfZmxhc2gobW9ycywgZncsIGJjZiwgcmVzZXQpO1xuIDc2MjpcdFx0aWYgKHJldCkge1xuIDc2MzpcdFx0XHRkZXZfZXJyKG1vcnMtXHUwMDNlZGV2LCBcJiMzNDtmYWlsZWQgdG8gZmxhc2ggZmlybXdhcmU6ICVkXCYjMzQ7LCByZXQpO1xuIDc2NDpcdFx0XHRnb3RvIG91dDtcbiA3NjU6XHRcdH1cbiA3NjY6XHRcbiA3Njc6XHRcdHJldCA9IG1tODF4X2Z3X2dldF9mbGFncyhtb3JzKTtcbiA3Njg6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDc6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY5NDkKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiA4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OgoKKipGb2N1c2luZyBvbiBGaXJtd2FyZSBJbml0aWFsaXphdGlvbiBhbmQgVGFibGUgUGFyc2luZyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHdoZXJlIHRvIGRpZyBpbnRvIHRoaXMgZmlybXdhcmUgaW5pdGlhbGl6YXRpb24uIGBtbTgxeF9md19pbml0YCBzZWVtcyBsaWtlIGEgc29saWQgZW50cnkgcG9pbnQsIGFuZCB3b3J0aCBhIGRlZXBlciBkaXZlIHRvIHNlZSBob3cgdGhlIG92ZXJhbGwgc3lzdGVtIGdldHMgc3RhcnRlZC4gSSYjMzk7bSBhbHNvIHJlYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBoYW5kbGVzIGV4dGVybmFsIGhvc3QgdGFibGVzLiBUaGF0JiMzOTtzIHdoeSBJJiMzOTttIG5vdyBob25pbmcgaW4gb24gYG1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibGAuIEdpdmVuIHRoZSBuYW1lLCBJJiMzOTttIGd1ZXNzaW5nIGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciBpbnRlcnByZXRpbmcgY29uZmlndXJhdGlvbiBkYXRhIHBhc3NlZCBpbiBmcm9tIHRoZSBob3N0IHNpZGUsIHByb2JhYmx5IGRlZmluaW5nIHBhcmFtZXRlcnMgb3IgY29uZmlndXJhdGlvbnMgc3BlY2lmaWMgdG8gdGhpcyBtb2R1bGUuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgdG8gc2VlIHdoYXQga2luZCBvZiB0YWJsZSBpdCBoYW5kbGVzLCBob3cgaXQmIzM5O3MgdmFsaWRhdGVkLCBhbmQgaG93IGl0IGlzIHVzZWQuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYG1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibGAgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuY2AgdG8gdW5kZXJzdGFuZCB0aGlzIHByb2Nlc3MgaW4gZGV0YWlsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU2NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTY0Olx0aW50IG1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibChzdHJ1Y3QgbW04MXggKm1vcnMpXG4gNTY1Olx0e1xuIDU2NjpcdFx0aW50IHJldDtcbiA1Njc6XHRcdHU4ICpoZWFkO1xuIDU2ODpcdFx0dTggKmVuZDtcbiA1Njk6XHRcdHN0cnVjdCBleHRfaG9zdF90YmwgKmV4dF9ob3N0X3RhYmxlID0gTlVMTDtcbiA1NzA6XHRcbiA1NzE6XHRcdHJldCA9IG1tODF4X2Z3X3JlYWRfZXh0X2hvc3RfdGFibGUobW9ycywgXHUwMDI2ZXh0X2hvc3RfdGFibGUpO1xuIDU3MjpcdFx0aWYgKHJldCB8fCAhZXh0X2hvc3RfdGFibGUpXG4gNTczOlx0XHRcdGdvdG8gZXhpdDtcbiA1NzQ6XHRcbiA1NzU6XHRcdC8qIFBhcnNlIHRoZSBUTFZzICovXG4gNTc2Olx0XHRoZWFkID0gZXh0X2hvc3RfdGFibGUtXHUwMDNlZXh0X2hvc3RfdGFibGVfZGF0YV90bHZzO1xuIDU3NzpcdFx0ZW5kID0gKCh1OCAqKWV4dF9ob3N0X3RhYmxlKSAmIzQzO1xuIDU3ODpcdFx0ICAgICAgbGUzMl90b19jcHUoZXh0X2hvc3RfdGFibGUtXHUwMDNlZXh0X2hvc3RfdGJsX2xlbmd0aCk7XG4gNTc5Olx0XG4gNTgwOlx0XHR3aGlsZSAoZW5kIC0gaGVhZCBcdTAwM2U9IChwdHJkaWZmX3Qpc2l6ZW9mKHN0cnVjdCBleHRfaG9zdF90YmxfdGx2X2hkcikpIHtcbiA1ODE6XHRcdFx0c3RydWN0IGV4dF9ob3N0X3RibF90bHZfaGRyICpoZHIgPVxuIDU4MjpcdFx0XHRcdChzdHJ1Y3QgZXh0X2hvc3RfdGJsX3Rsdl9oZHIgKiloZWFkO1xuIDU4MzpcdFx0XHR1MTYgdGx2X2xlbiA9IGxlMTZfdG9fY3B1KGhkci1cdTAwM2VsZW5ndGgpO1xuIDU4NDpcdFxuIDU4NTpcdFx0XHRpZiAodGx2X2xlbiBcdTAwM2Mgc2l6ZW9mKCpoZHIpIHx8IHRsdl9sZW4gXHUwMDNlIGVuZCAtIGhlYWQpXG4gNTg2Olx0XHRcdFx0YnJlYWs7XG4gNTg3Olx0XG4gNTg4Olx0XHRcdHN3aXRjaCAobGUxNl90b19jcHUoaGRyLVx1MDAzZXRhZykpIHtcbiA1ODk6XHRcdFx0Y2FzZSBNTTgxWF9GV19IT1NUX1RBQkxFX1RBR19TMUdfQ0FQQUJJTElUSUVTOiB7XG4gNTkwOlx0XHRcdFx0c3RydWN0IGV4dF9ob3N0X3RibF9zMWdfY2FwcyAqY2FwcyA9ICh2b2lkICopaGRyO1xuIDU5MTpcdFxuIDU5MjpcdFx0XHRcdGlmICh0bHZfbGVuIFx1MDAzZT0gc2l6ZW9mKCpjYXBzKSlcbiA1OTM6XHRcdFx0XHRcdG1tODF4X2Z3X3VwZGF0ZV9jYXBhYmlsaXRpZXMobW9ycywgY2Fwcyk7XG4gNTk0Olx0XHRcdFx0YnJlYWs7XG4gNTk1Olx0XHRcdH1cbiA1OTY6XHRcdFx0Y2FzZSBNTTgxWF9GV19IT1NUX1RBQkxFX1RBR19JTlNFUlRfU0tCX0NIRUNLU1VNOiB7XG4gNTk3Olx0XHRcdFx0c3RydWN0IGV4dF9ob3N0X3RibF9pbnNlcnRfc2tiX2NoZWNrc3VtICpjc3VtID1cbiA1OTg6XHRcdFx0XHRcdCh2b2lkICopaGRyO1xuIDU5OTpcdFxuIDYwMDpcdFx0XHRcdGlmICh0bHZfbGVuIFx1MDAzZT0gc2l6ZW9mKCpjc3VtKSlcbiA2MDE6XHRcdFx0XHRcdG1tODF4X2Z3X3VwZGF0ZV92YWxpZGF0ZV9za2JfY2hlY2tzdW0obW9ycyxcbiA2MDI6XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgY3N1bSk7XG4gNjAzOlx0XHRcdFx0YnJlYWs7XG4gNjA0Olx0XHRcdH1cbiA2MDU6XHRcdFx0Y2FzZSBNTTgxWF9GV19IT1NUX1RBQkxFX1RBR19ZQVBTX1RBQkxFOiB7XG4gNjA2Olx0XHRcdFx0c3RydWN0IGV4dF9ob3N0X3RibF95YXBzX3RhYmxlICp5YXBzID0gKHZvaWQgKiloZHI7XG4gNjA3Olx0XG4gNjA4Olx0XHRcdFx0aWYgKHRsdl9sZW4gXHUwMDNlPSBzaXplb2YoKnlhcHMpKVxuIDYwOTpcdFx0XHRcdFx0bW04MXhfeWFwc19od19yZWFkX3RhYmxlKG1vcnMsXG4gNjEwOlx0XHRcdFx0XHRcdFx0XHQgXHUwMDI2eWFwcy1cdTAwM2V5YXBzX3RhYmxlKTtcbiA2MTE6XHRcdFx0XHRicmVhaztcbiA2MTI6XHRcdFx0fVxuIDYxMzpcdFx0XHRkZWZhdWx0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODE3OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbiBhbmQgRGVwZW5kZW5jeSBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zLCBgbW04MXhfZndfaW5pdGAgYW5kIGBtbTgxeF9md19wYXJzZV9leHRfaG9zdF90YmxgLiBUaGV5JiMzOTtyZSBub24tc3RhdGljLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyB0aGVtIGludGVyZXN0aW5nIHRhcmdldHMgZm9yIGZ1enppbmcuIFNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKTm93LCBiZWZvcmUgSSBkaXZlIGluIHRvbyBkZWVwLCBsZXQmIzM5O3Mgc2VlIHdoYXQgY29uZmlncyBhcmUgcmVxdWlyZWQgdG8gZ2V0IHRoZXNlIGZ1bmN0aW9ucyBidWlsdCBhbmQgcnVubmluZyBjb3JyZWN0bHkuIEkgc2VlIGBXTEFOX1ZFTkRPUl9NT1JTRU1JQ1JPYCBhbmQgYE1NODFYX1VTQmAgbWVudGlvbmVkLiBBaCwgcmlnaHQsIGBNTTgxWGAgaXMgc2VsZWN0ZWQgYnkgYE1NODFYX1VTQmAsIHNvIGBNTTgxWGAgaXMgaW5kaXJlY3RseSByZWxldmFudC4KCkxldCBtZSBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIGZvciBgTU04MVhgLiBJdCBsb29rcyBsaWtlIGl0IG5lZWRzIGBNQUM4MDIxMWAuIE9rYXksIHNvIGBNQUM4MDIxMWAgaXMgZGVmaW5pdGVseSBlc3NlbnRpYWwuCgpCdXQgaXMgdGhhdCAqYWxsKj8gTGV0IG1lIGRvdWJsZS1jaGVjay4gT2theSwgYE1NODFYX1VTQmAgaXRzZWxmIGRlcGVuZHMgb24gYE1BQzgwMjExICZhbXA7JmFtcDsgVVNCYC4gU28sIGp1c3QgdG8gYmUgYWJzb2x1dGVseSB0aG9yb3VnaCwgSSYjMzk7bGwgbmVlZCB0byBpbmNsdWRlIGBXTEFOX1ZFTkRPUl9NT1JTRU1JQ1JPYCBhbmQgYE1NODFYX1VTQmAgYWxvbmcgd2l0aCB0aGVpciBkZXBlbmRlbmNpZXMuCgpBbHJpZ2h0LCBsZXQgbWUganVzdCBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBvYnZpb3VzLiBMZXQmIzM5O3MgZGlnIGludG8gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vS2NvbmZpZ2AgYW5kIHZlcmlmeSB0aGF0IEkgaGF2ZSBldmVyeXRoaW5nLiBOZWVkIHRvIGJlIHN1cmUgYmVmb3JlIEkgbW92ZSBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBXTEFOX1ZFTkRPUl9NT1JTRU1JQ1JPXG4gICAzOlx0XHRib29sIFwmIzM0O01vcnNlIE1pY3JvIGRldmljZXNcJiMzNDtcbiAgIDQ6XHRcdGRlZmF1bHQgeVxuICAgNTpcdFx0aGVscFxuICAgNjpcdFx0ICBJZiB5b3UgaGF2ZSBhIHdpcmVsZXNzIGNhcmQgYmVsb25naW5nIHRvIHRoaXMgY2xhc3MsIHNheSBZLlxuICAgNzpcdFxuICAgODpcdFx0ICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJiMzOTt0IGRpcmVjdGx5IGFmZmVjdCB0aGVcbiAgIDk6XHRcdCAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbCB0aGVcbiAgMTA6XHRcdCAgcXVlc3Rpb25zIGFib3V0IHRoZXNlIGNhcmRzLiBJZiB5b3Ugc2F5IFksIHlvdSB3aWxsIGJlIGFza2VkIGZvclxuICAxMTpcdFx0ICB5b3VyIHNwZWNpZmljIGNhcmQgaW4gdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMuXG4gIDEyOlx0XG4gIDEzOlx0aWYgV0xBTl9WRU5ET1JfTU9SU0VNSUNST1xuICAxNDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L0tjb25maWdcJiMzNDtcbiAgMTU6XHRlbmRpZiAjIFdMQU5fVkVORE9SX01PUlNFTUlDUk9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDc6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg5OTIKCQkJCQkJCW91dHB1dDogMTUwCgkJCQkJCQl0aG91Z2h0czogMTY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1vcnNlIE1pY3JvIEZ1enppbmcgVGFyZ2V0cyoqCgpPa2F5LCBhZnRlciByZXZpZXdpbmcgdGhlIGRldGFpbHMsIEkmIzM5O3ZlIGdvdCBhIHNvbGlkIHBpY3R1cmUgb2Ygd2hhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGhlcmUuIE15IGNvbmNsdXNpb24gaXMgdGhhdCBgV0xBTl9WRU5ET1JfTU9SU0VNSUNST2AgYW5kIGBNTTgxWF9VU0JgIGFyZSB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIHdlIG5lZWQgdG8gZW5hYmxlIGZvciB0aGlzLiAKCkhlcmXigJlzIHRoZSBicmVha2Rvd24gaW4gbXkgaGVhZDoKCiogICAqKldvcnRoRnV6emluZzoqKiBBYnNvbHV0ZWx5LCB0aGlzIGlzIGEgZGVmaW5pdGUgJiMzNDt5ZXMuJiMzNDsgV2UmIzM5O3ZlIGdvdCB2dWxuZXJhYmlsaXRpZXMg4oCTIG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIG1lbW9yeSBsZWFrcyDigJMgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgZmlybXdhcmUgcGFyc2luZyBsb2dpYyBvZiB0aGUgTW9yc2UgTWljcm8gbW04MXggZHJpdmVyLiBUaGlzIGlzIGNsYXNzaWMgZnV6emluZyB0ZXJyaXRvcnkuCiogICAqKkZvY3VzU3ltYm9sczoqKiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gY29uY2VudHJhdGUgb24gYG1tODF4X2Z3X2luaXRgIGFuZCBgbW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsYC4gVGhvc2Ugc2VlbSB0byBiZSB3aGVyZSB0aGUgYnVncyBhcmUgaGlkaW5nLCBiYXNlZCBvbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHBhdGNoIGFuZCB0aGUgdnVsbmVyYWJsZSBjb2RlLiBUaGV5JiMzOTtyZSBjbGVhcmx5IGNyaXRpY2FsIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGZpcm13YXJlIHBhcnNpbmcgcHJvY2Vzcy4KKiAgICoqRW5hYmxlQ29uZmlnczoqKiBBZ2FpbiwgYFdMQU5fVkVORE9SX01PUlNFTUlDUk9gIGFuZCBgTU04MVhfVVNCYCBhcmUgd2hhdCYjMzk7cyBnb2luZyB0byBhbGxvdyB1cyB0byB0cmlnZ2VyIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLiBUaGUgVVNCIGludGVyZmFjZSBpcyB0aGUgcm91dGUgZm9yIGludGVyYWN0aW9uIGhlcmUsIGFuZCB0aGUgdmVuZG9yIGZsYWcgYWxsb3dzIHVzIHRvIGVuZ2FnZS4KKiAgICoqUmVhc29uaW5nOioqIFRoZSBkcml2ZXIgaGFuZGxlcyBmaXJtd2FyZSBwYXJzaW5nLCBhbmQgdGhhdOKAmXMgd2hlcmUgdGhlIGJ1Z3MgYXJlLiBUaGUgVVNCIGludGVyZmFjZSwgd2hldGhlciB0aHJvdWdoIGEgZHVtbXkgSENEIG9yIHN5emthbGxlciwgcHJvdmlkZXMgdGhlIGF0dGFjayBzdXJmYWNlLiBUaGlzIGNvZGUgaXMgdHJpZ2dlcmVkIGR1cmluZyBkZXZpY2UgcHJvYmluZyBhbmQgaW50ZXJmYWNlIHN0YXJ0dXAsIG1ha2luZyBpdCByZWFjaGFibGUgd2l0aCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMuIEl04oCZcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIOKAkyBicmluZyB0aGUgZGV2aWNlIHVwLCBsb2FkIHRoZSBmaXJtd2FyZSAod2hpY2ggaXMgdGhlIHBhcnNpbmcgdGFyZ2V0KSwgYW5kIGxldCB0aGUgZnV6emluZyBiZWdpbi4gV2UgaGF2ZSBhIGNsZWFyIHBhdGggdG8gdHJpZ2dlciB0aGUgdnVsbmVyYWJsZSBjb2RlLCBzbyBJJiMzOTttIG9wdGltaXN0aWMgYWJvdXQgZmluZGluZyBzb21lIG5ldyBidWdzIHdpdGggdGhlIGZ1enppbmcgYXBwcm9hY2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA3OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtXTEFOX1ZFTkRPUl9NT1JTRU1JQ1JPJiMzNDssCiAgICAmIzM0O01NODFYX1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21tODF4X2Z3X2luaXQmIzM0OywKICAgICYjMzQ7bW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIG1lbW9yeSBsZWFrcyBpbiB0aGUgZmlybXdhcmUgcGFyc2luZyBsb2dpYyBvZiB0aGUgTW9yc2UgTWljcm8gbW04MXggZHJpdmVyLiBUaGUgZHJpdmVyIGNhbiBiZSB0ZXN0ZWQgdmlhIHRoZSBVU0IgaW50ZXJmYWNlIHVzaW5nIGEgZHVtbXkgSENEIG9yIHN5emthbGxlciYjMzk7cyBVU0IgZnV6emluZyBjYXBhYmlsaXRpZXMuIFRoZSBmaXJtd2FyZSBsb2FkaW5nIGFuZCBwYXJzaW5nIGxvZ2ljIGlzIHJlYWNoYWJsZSB3aGVuIHRoZSBkZXZpY2UgaXMgcHJvYmVkIGFuZCB0aGUgaW50ZXJmYWNlIGlzIGJyb3VnaHQgdXAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1dMQU5fVkVORE9SX01PUlNFTUlDUk8mIzM0OywKICAgICYjMzQ7TU04MVhfVVNCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bW04MXhfZndfaW5pdCYjMzQ7LAogICAgJiMzNDttbTgxeF9md19wYXJzZV9leHRfaG9zdF90YmwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgbWVtb3J5IGxlYWtzIGluIHRoZSBmaXJtd2FyZSBwYXJzaW5nIGxvZ2ljIG9mIHRoZSBNb3JzZSBNaWNybyBtbTgxeCBkcml2ZXIuIFRoZSBkcml2ZXIgY2FuIGJlIHRlc3RlZCB2aWEgdGhlIFVTQiBpbnRlcmZhY2UgdXNpbmcgYSBkdW1teSBIQ0Qgb3Igc3l6a2FsbGVyJiMzOTtzIFVTQiBmdXp6aW5nIGNhcGFiaWxpdGllcy4gVGhlIGZpcm13YXJlIGxvYWRpbmcgYW5kIHBhcnNpbmcgbG9naWMgaXMgcmVhY2hhYmxlIHdoZW4gdGhlIGRldmljZSBpcyBwcm9iZWQgYW5kIHRoZSBpbnRlcmZhY2UgaXMgYnJvdWdodCB1cC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDc6MDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNzowNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBtZW1vcnkgbGVha3MgZHVyaW5nIGZpcm13YXJlIHBhcnNpbmcuIFRoZSBib3VuZHMgY2hlY2tzIHByZXZlbnQgcmVhZGluZyBwYXN0IHRoZSBlbmQgb2YgYWxsb2NhdGVkIGJ1ZmZlcnMgY29udGFpbmluZyBmaXJtd2FyZSBkYXRhLCB3aGljaCBhcmUgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlcy4gS0FTQU4gaXMgZnVsbHkgY2FwYWJsZSBvZiBkZXRlY3RpbmcgdGhlc2Ugb3V0LW9mLWJvdW5kcyByZWFkcywgYW5kIGttZW1sZWFrIGRldGVjdHMgdGhlIGZpeGVkIG1lbW9yeSBsZWFrcy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBjb250cm9sIGZsb3csIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwMDY2MDcwNWVkNmZjYTg3M2EwMjllZTNjMjUyZmMzZmI4OGExNTRiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTIgMDc6MDQ6NDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmMKaW5kZXggZDZkMmFkMDg2YzMyOC4uNTBmYTllNGI1ZjgwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYwpAQCAtNTQsMjEgJiM0Mzs1NCwyOSBAQCBzdGF0aWMgaW50IG1tODF4X2Z3X2dldF9oZWFkZXIoY29uc3QgdTggKmRhdGEsIEVsZjMyX0VoZHIgKmVoZHIpCiAKIHN0YXRpYyB2b2lkIG1tODF4X2Z3X3BhcnNlX2luZm8oc3RydWN0IG1tODF4ICptb3JzLCBjb25zdCB1OCAqZGF0YSwgaW50IGxlbmd0aCkKIHsKLQljb25zdCBzdHJ1Y3QgbW04MXhfZndfaW5mb190bHYgKnRsdiA9Ci0JCShjb25zdCBzdHJ1Y3QgbW04MXhfZndfaW5mb190bHYgKilkYXRhOwomIzQzOwljb25zdCB1OCAqZW5kID0gZGF0YSAmIzQzOyBsZW5ndGg7CiYjNDM7CWNvbnN0IHU4ICpwb3MgPSBkYXRhOwomIzQzOwomIzQzOwl3aGlsZSAoZW5kIC0gcG9zICZndDs9IChwdHJkaWZmX3Qpc2l6ZW9mKHN0cnVjdCBtbTgxeF9md19pbmZvX3RsdikpIHsKJiM0MzsJCWNvbnN0IHN0cnVjdCBtbTgxeF9md19pbmZvX3RsdiAqdGx2ID0KJiM0MzsJCQkoY29uc3Qgc3RydWN0IG1tODF4X2Z3X2luZm9fdGx2ICopcG9zOwomIzQzOwkJdTE2IHRsdl9sZW4gPSBsZTE2X3RvX2NwdSh0bHYtJmd0O2xlbmd0aCk7CiYjNDM7CiYjNDM7CQlwb3MgPSB0bHYtJmd0O3ZhbDsKJiM0MzsJCWlmICh0bHZfbGVuICZndDsgZW5kIC0gcG9zKQomIzQzOwkJCWJyZWFrOwogCi0Jd2hpbGUgKCh1OCAqKXRsdiAmbHQ7IChkYXRhICYjNDM7IGxlbmd0aCkpIHsKIAkJc3dpdGNoIChsZTE2X3RvX2NwdSh0bHYtJmd0O3R5cGUpKSB7CiAJCWNhc2UgTU04MVhfRldfSU5GT19UTFZfQkNGX0FERFI6Ci0JCQltb3JzLSZndDtiY2ZfYWRkcmVzcyA9IGdldF91bmFsaWduZWRfbGUzMih0bHYtJmd0O3ZhbCk7CiYjNDM7CQkJaWYgKHRsdl9sZW4gJmd0Oz0gc2l6ZW9mKF9fbGUzMikpCiYjNDM7CQkJCW1vcnMtJmd0O2JjZl9hZGRyZXNzID0KJiM0MzsJCQkJCWdldF91bmFsaWduZWRfbGUzMih0bHYtJmd0O3ZhbCk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCQl9Ci0JCXRsdiA9IChjb25zdCBzdHJ1Y3QgbW04MXhfZndfaW5mb190bHYgKikoKHU4ICopdGx2ICYjNDM7Ci0JCQkJCQkJIGxlMTZfdG9fY3B1KAotCQkJCQkJCQkgdGx2LSZndDtsZW5ndGgpICYjNDM7Ci0JCQkJCQkJIHNpemVvZigqdGx2KSk7CiYjNDM7CiYjNDM7CQlwb3MgJiM0Mzs9IHRsdl9sZW47CiAJfQogfQogCkBAIC0xMTcsMTMgJiM0MzsxMjUsMTUgQEAgc3RhdGljIGludCBtbTgxeF9md19sb2FkX2Z3KHN0cnVjdCBtbTgxeCAqbW9ycywgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdykKIAogCWlmIChtbTgxeF9md19nZXRfaGVhZGVyKGZ3LSZndDtkYXRhLCAmYW1wO2VoZHIpKSB7CiAJCWRldl9lcnIobW9ycy0mZ3Q7ZGV2LCAmIzM0O1dyb25nIGZpbGUgZm9ybWF0JiMzNDspOwotCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIG91dF9mcmVlOwogCX0KIAogCWlmIChtbTgxeF9md19nZXRfc2VjdGlvbl9oZWFkZXIoZnctJmd0O2RhdGEsICZhbXA7ZWhkciwgJmFtcDtzaF9zdHJ0YWIsCiAJCQkJCWVoZHIuZV9zaHN0cm5keCkpIHsKIAkJZGV2X2Vycihtb3JzLSZndDtkZXYsICYjMzQ7SW52YWxpZCBmaXJtd2FyZS4gTWlzc2luZyBzdHJpbmcgdGFibGUmIzM0Oyk7Ci0JCXJldHVybiAtRU5PRU5UOwomIzQzOwkJcmV0ID0gLUVOT0VOVDsKJiM0MzsJCWdvdG8gb3V0X2ZyZWU7CiAJfQogCiAJc2hfc3RycyA9IChjb25zdCBjaGFyICopZnctJmd0O2RhdGEgJiM0Mzsgc2hfc3RydGFiLnNoX29mZnNldDsKQEAgLTE2MCw3ICYjNDM7MTcwLDcgQEAgc3RhdGljIGludCBtbTgxeF9md19sb2FkX2Z3KHN0cnVjdCBtbTgxeCAqbW9ycywgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdykKIAkJCW1tODF4X3JlbGVhc2VfYnVzKG1vcnMpOwogCQkJaWYgKHN0YXR1cykgewogCQkJCXJldCA9IC1FSU87Ci0JCQkJYnJlYWs7CiYjNDM7CQkJCWdvdG8gb3V0X2ZyZWU7CiAJCQl9CiAJCX0KIAl9CkBAIC0xNzksNiAmIzQzOzE4OSw3IEBAIHN0YXRpYyBpbnQgbW04MXhfZndfbG9hZF9mdyhzdHJ1Y3QgbW04MXggKm1vcnMsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpCiAJaWYgKGVoZHIuZV9lbnRyeSkKIAkJcmV0ID0gbW04MXhfZndfc2V0X2Jvb3RfYWRkcihtb3JzLCBlaGRyLmVfZW50cnkpOwogCiYjNDM7b3V0X2ZyZWU6CiAJZGV2bV9rZnJlZShtb3JzLSZndDtkZXYsIGZ3X2J1Zik7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTQ5Miw2ICYjNDM7NTAzLDEzIEBAIHN0YXRpYyBpbnQgbW04MXhfZndfcmVhZF9leHRfaG9zdF90YWJsZShzdHJ1Y3QgbW04MXggKm1vcnMsCiAJaWYgKHJldCkKIAkJZ290byBleGl0OwogCiYjNDM7CS8qIFRoZSB0YWJsZSBkZXNjcmliZXMgaXRzIG93biBsZW5ndGg7IGl0IG11c3QgZml0IHdoYXQgd2FzIHJlYWQgKi8KJiM0MzsJaWYgKGxlMzJfdG9fY3B1KGhvc3RfdGJsLSZndDtleHRfaG9zdF90YmxfbGVuZ3RoKSAmbHQ7IHNpemVvZigqaG9zdF90YmwpIHx8CiYjNDM7CSAgICBsZTMyX3RvX2NwdShob3N0X3RibC0mZ3Q7ZXh0X2hvc3RfdGJsX2xlbmd0aCkgJmd0OyBleHRfaG9zdF90YmxfbGVuKSB7CiYjNDM7CQlyZXQgPSAtRUlOVkFMOwomIzQzOwkJZ290byBleGl0OwomIzQzOwl9CiYjNDM7CiAJbW04MXhfcmVsZWFzZV9idXMobW9ycyk7CiAJKmV4dF9ob3N0X3RhYmxlID0gaG9zdF90Ymw7CiAJcmV0dXJuIHJldDsKQEAgLTU1OSwzNCAmIzQzOzU3Nyw0NCBAQCBpbnQgbW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsKHN0cnVjdCBtbTgxeCAqbW9ycykKIAllbmQgPSAoKHU4ICopZXh0X2hvc3RfdGFibGUpICYjNDM7CiAJICAgICAgbGUzMl90b19jcHUoZXh0X2hvc3RfdGFibGUtJmd0O2V4dF9ob3N0X3RibF9sZW5ndGgpOwogCi0Jd2hpbGUgKGhlYWQgJmx0OyBlbmQpIHsKJiM0MzsJd2hpbGUgKGVuZCAtIGhlYWQgJmd0Oz0gKHB0cmRpZmZfdClzaXplb2Yoc3RydWN0IGV4dF9ob3N0X3RibF90bHZfaGRyKSkgewogCQlzdHJ1Y3QgZXh0X2hvc3RfdGJsX3Rsdl9oZHIgKmhkciA9CiAJCQkoc3RydWN0IGV4dF9ob3N0X3RibF90bHZfaGRyICopaGVhZDsKJiM0MzsJCXUxNiB0bHZfbGVuID0gbGUxNl90b19jcHUoaGRyLSZndDtsZW5ndGgpOwomIzQzOwomIzQzOwkJaWYgKHRsdl9sZW4gJmx0OyBzaXplb2YoKmhkcikgfHwgdGx2X2xlbiAmZ3Q7IGVuZCAtIGhlYWQpCiYjNDM7CQkJYnJlYWs7CiAKIAkJc3dpdGNoIChsZTE2X3RvX2NwdShoZHItJmd0O3RhZykpIHsKLQkJY2FzZSBNTTgxWF9GV19IT1NUX1RBQkxFX1RBR19TMUdfQ0FQQUJJTElUSUVTOgotCQkJbW04MXhfZndfdXBkYXRlX2NhcGFiaWxpdGllcygKLQkJCQltb3JzLCAoc3RydWN0IGV4dF9ob3N0X3RibF9zMWdfY2FwcyAqKWhkcik7CiYjNDM7CQljYXNlIE1NODFYX0ZXX0hPU1RfVEFCTEVfVEFHX1MxR19DQVBBQklMSVRJRVM6IHsKJiM0MzsJCQlzdHJ1Y3QgZXh0X2hvc3RfdGJsX3MxZ19jYXBzICpjYXBzID0gKHZvaWQgKiloZHI7CiYjNDM7CiYjNDM7CQkJaWYgKHRsdl9sZW4gJmd0Oz0gc2l6ZW9mKCpjYXBzKSkKJiM0MzsJCQkJbW04MXhfZndfdXBkYXRlX2NhcGFiaWxpdGllcyhtb3JzLCBjYXBzKTsKIAkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwkJY2FzZSBNTTgxWF9GV19IT1NUX1RBQkxFX1RBR19JTlNFUlRfU0tCX0NIRUNLU1VNOiB7CiYjNDM7CQkJc3RydWN0IGV4dF9ob3N0X3RibF9pbnNlcnRfc2tiX2NoZWNrc3VtICpjc3VtID0KJiM0MzsJCQkJKHZvaWQgKiloZHI7CiAKLQkJY2FzZSBNTTgxWF9GV19IT1NUX1RBQkxFX1RBR19JTlNFUlRfU0tCX0NIRUNLU1VNOgotCQkJbW04MXhfZndfdXBkYXRlX3ZhbGlkYXRlX3NrYl9jaGVja3N1bSgKLQkJCQltb3JzLAotCQkJCShzdHJ1Y3QgZXh0X2hvc3RfdGJsX2luc2VydF9za2JfY2hlY2tzdW0gKiloZHIpOwomIzQzOwkJCWlmICh0bHZfbGVuICZndDs9IHNpemVvZigqY3N1bSkpCiYjNDM7CQkJCW1tODF4X2Z3X3VwZGF0ZV92YWxpZGF0ZV9za2JfY2hlY2tzdW0obW9ycywKJiM0MzsJCQkJCQkJCSAgICAgIGNzdW0pOwogCQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CQljYXNlIE1NODFYX0ZXX0hPU1RfVEFCTEVfVEFHX1lBUFNfVEFCTEU6IHsKJiM0MzsJCQlzdHJ1Y3QgZXh0X2hvc3RfdGJsX3lhcHNfdGFibGUgKnlhcHMgPSAodm9pZCAqKWhkcjsKIAotCQljYXNlIE1NODFYX0ZXX0hPU1RfVEFCTEVfVEFHX1lBUFNfVEFCTEU6Ci0JCQltbTgxeF95YXBzX2h3X3JlYWRfdGFibGUoCi0JCQkJbW9ycywgJmFtcDsoKHN0cnVjdCBleHRfaG9zdF90YmxfeWFwc190YWJsZSAqKWhkcikKLQkJCQkJICAgICAgIC0mZ3Q7eWFwc190YWJsZSk7CiYjNDM7CQkJaWYgKHRsdl9sZW4gJmd0Oz0gc2l6ZW9mKCp5YXBzKSkKJiM0MzsJCQkJbW04MXhfeWFwc19od19yZWFkX3RhYmxlKG1vcnMsCiYjNDM7CQkJCQkJCSAmYW1wO3lhcHMtJmd0O3lhcHNfdGFibGUpOwogCQkJYnJlYWs7CiYjNDM7CQl9CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAkJfQogCi0JCWhlYWQgJiM0Mzs9IGxlMTZfdG9fY3B1KGhkci0mZ3Q7bGVuZ3RoKTsKLQkJaWYgKCFoZHItJmd0O2xlbmd0aCkKLQkJCWJyZWFrOwomIzQzOwkJaGVhZCAmIzQzOz0gdGx2X2xlbjsKIAl9CiAKIAlrZnJlZShleHRfaG9zdF90YWJsZSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODY2CgkJCQkJCQlvdXRwdXQ6IDEzMAoJCQkJCQkJdGhvdWdodHM6IDQxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1vcnNlIE1pY3JvIEZpcm13YXJlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYW5pbmcgdXAgc29tZSBmaXJtd2FyZSBwYXJzaW5nIHJvdXRpbmVzIHdpdGhpbiB0aGUgYG1tODF4YCB3aXJlbGVzcyBkcml2ZXIuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0JiMzOTtzIGEgc3RyYWlnaHRmb3J3YXJkIGltcHJvdmVtZW50LCBwcmltYXJpbHkgZm9jdXNlZCBvbiBoYXJkZW5pbmcgYWdhaW5zdCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBUaGUgY2hhbmdlcyBhcmUgYWxsIGxvY2FsaXplZCB3aXRoaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuY2AuCgpTcGVjaWZpY2FsbHksIEkgc2VlIGZpeGVzIHRvIGZvdXIgZnVuY3Rpb25zOiBgbW04MXhfZndfcGFyc2VfaW5mb2AsIGBtbTgxeF9md19sb2FkX2Z3YCwgYG1tODF4X2Z3X3JlYWRfZXh0X2hvc3RfdGFibGVgLCBhbmQgYG1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibGAuIFRoZSBjb3JlIG9mIHRoZSBwYXRjaCBzZWVtcyB0byBiZSBhZGRpbmcgYm91bmRzIGNoZWNraW5nIGR1cmluZyBUTFYgKFR5cGUtTGVuZ3RoLVZhbHVlKSBwYXJzaW5nIHdpdGhpbiB0aGUgZmlybXdhcmUgZGF0YSBhbmQgYWRkcmVzc2luZyBtZW1vcnkgbGVha3MgaW4gdGhlIGZpcm13YXJlIGxvYWRpbmcgcHJvY2Vzcy4gVGhlIG1lbW9yeSBsZWFrIGZpeCBpbiBgbW04MXhfZndfbG9hZF9md2AgaXMgYSBzdGFuZGFyZCBgZ290byBvdXRfZnJlZWAgd2hpY2ggaXMgd2hhdCBJIHdvdWxkIGV4cGVjdC4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBhcmUgd2UgZGVhbGluZyB3aXRoIGFueSAqdW5pbml0aWFsaXplZCogbWVtb3J5IGV4cG9zdXJlcz8gSSBuZWVkIHRvIGJlIHN1cmUuIFRoZSBwYXRjaCBpdHNlbGYgaXMgdXNpbmcgS0FTQU4gdG8gY2F0Y2ggdGhlIE9PQiByZWFkcyBhbmQga21lbWxlYWsgdG8gY2F0Y2ggdGhlIG1lbW9yeSBsZWFrcy4gVGhlIGRhdGEgaXRzZWxmIHNlZW1zIHRvIGNvbWUgZnJvbSB0aGUgZmlybXdhcmUgaW1hZ2UgKGBmdy0mZ3Q7ZGF0YWApIG9yIGlzIHJlYWQgZnJvbSB0aGUgZGV2aWNlIGhhcmR3YXJlIGl0c2VsZiAoaW4gdGhlIGNhc2Ugb2YgdGhlIGV4dGVuZGVkIGhvc3QgdGFibGUpLiBTbywgdGhlcmUgc2hvdWxkbiYjMzk7dCBiZSBhbnl0aGluZyB1bmluaXRpYWxpemVkIGJlaW5nIGV4cG9zZWQsIGJ1dCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guCgpMZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgYXR0YWNrIHN1cmZhY2UuIElmIHRoZSBgdGx2X2xlbmAgaXMgdG9vIGxhcmdlLCBpdCByZXN1bHRzIGluIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBhbmQgaXMgY2F1Z2h0IGJ5IEtBU0FOLiBOb3csIHdoYXQgaWYgYHRsdl9sZW5gIGlzIHNtYWxsZXIsICpwb3RlbnRpYWxseSogbGVhZGluZyB0byBhbiB1bmluaXRpYWxpemVkIHJlYWQ/IE5vLCBpdCYjMzk7cyBub3QgZ29pbmcgdG8gcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWNhdXNlIHRoZSBidWZmZXIgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCB3aXRoIGZpcm13YXJlIGRhdGEuIElmIHdlJiMzOTtyZSByZWFkaW5nIHBhc3QgdGhlIGVuZCBvZiB0aGUgZGF0YSwgaXQmIzM5O3Mgc3RpbGwgb3V0LW9mLWJvdW5kcywgYW5kIEtBU0FOIHdpbGwgY2F0Y2ggaXQuIFRoZSBzYW1lIGxvZ2ljIGFwcGxpZXMgdG8gYGhvc3RfdGJsLSZndDtleHRfaG9zdF90YmxfbGVuZ3RoYCB2ZXJzdXMgYGV4dF9ob3N0X3RibF9sZW5gLiBLQVNBTiBzaG91bGQgYmUgYWJsZSB0byBjYXRjaCB0aGUgT09CIHJlYWRzIHRoZXJlLgoKR2l2ZW4gdGhhdCwgSSBkb24mIzM5O3Qgc2VlIGFueSBpbW1lZGlhdGUgY29uY2VybnMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgbGVha2VkLiBUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBwYXRjaC4gU3RhbmRhcmQgT09CIGFuZCBtZW1vcnkgbGVhayBmaXhlcy4gTm8gS01TQU4gaXMgbmVjZXNzYXJ5IGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA3OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIG1lbW9yeSBsZWFrcyBkdXJpbmcgZmlybXdhcmUgcGFyc2luZy4gVGhlIGJvdW5kcyBjaGVja3MgcHJldmVudCByZWFkaW5nIHBhc3QgdGhlIGVuZCBvZiBhbGxvY2F0ZWQgYnVmZmVycyBjb250YWluaW5nIGZpcm13YXJlIGRhdGEsIHdoaWNoIGFyZSBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2VzLiBLQVNBTiBpcyBmdWxseSBjYXBhYmxlIG9mIGRldGVjdGluZyB0aGVzZSBvdXQtb2YtYm91bmRzIHJlYWRzLCBhbmQga21lbWxlYWsgZGV0ZWN0cyB0aGUgZml4ZWQgbWVtb3J5IGxlYWtzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIGNvbnRyb2wgZmxvdywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBtZW1vcnkgbGVha3MgZHVyaW5nIGZpcm13YXJlIHBhcnNpbmcuIFRoZSBib3VuZHMgY2hlY2tzIHByZXZlbnQgcmVhZGluZyBwYXN0IHRoZSBlbmQgb2YgYWxsb2NhdGVkIGJ1ZmZlcnMgY29udGFpbmluZyBmaXJtd2FyZSBkYXRhLCB3aGljaCBhcmUgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlcy4gS0FTQU4gaXMgZnVsbHkgY2FwYWJsZSBvZiBkZXRlY3RpbmcgdGhlc2Ugb3V0LW9mLWJvdW5kcyByZWFkcywgYW5kIGttZW1sZWFrIGRldGVjdHMgdGhlIGZpeGVkIG1lbW9yeSBsZWFrcy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBjb250cm9sIGZsb3csIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNzowNDo0NS43NDIxMjQ3OTlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY0NTI0NjgwMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiV0xBTl9WRU5ET1JfTU9SU0VNSUNST1wiLFxuICAgIFwiTU04MVhfVVNCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibW04MXhfZndfaW5pdFwiLFxuICAgIFwibW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBtZW1vcnkgbGVha3MgZHVyaW5nIGZpcm13YXJlIHBhcnNpbmcuIFRoZSBib3VuZHMgY2hlY2tzIHByZXZlbnQgcmVhZGluZyBwYXN0IHRoZSBlbmQgb2YgYWxsb2NhdGVkIGJ1ZmZlcnMgY29udGFpbmluZyBmaXJtd2FyZSBkYXRhLCB3aGljaCBhcmUgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlcy4gS0FTQU4gaXMgZnVsbHkgY2FwYWJsZSBvZiBkZXRlY3RpbmcgdGhlc2Ugb3V0LW9mLWJvdW5kcyByZWFkcywgYW5kIGttZW1sZWFrIGRldGVjdHMgdGhlIGZpeGVkIG1lbW9yeSBsZWFrcy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBjb250cm9sIGZsb3csIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIG1lbW9yeSBsZWFrcyBpbiB0aGUgZmlybXdhcmUgcGFyc2luZyBsb2dpYyBvZiB0aGUgTW9yc2UgTWljcm8gbW04MXggZHJpdmVyLiBUaGUgZHJpdmVyIGNhbiBiZSB0ZXN0ZWQgdmlhIHRoZSBVU0IgaW50ZXJmYWNlIHVzaW5nIGEgZHVtbXkgSENEIG9yIHN5emthbGxlcidzIFVTQiBmdXp6aW5nIGNhcGFiaWxpdGllcy4gVGhlIGZpcm13YXJlIGxvYWRpbmcgYW5kIHBhcnNpbmcgbG9naWMgaXMgcmVhY2hhYmxlIHdoZW4gdGhlIGRldmljZSBpcyBwcm9iZWQgYW5kIHRoZSBpbnRlcmZhY2UgaXMgYnJvdWdodCB1cC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDc6MDQ6NDUuNzQyMTMwMTY5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQwMDI5NDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDA2NjA3MDVlZDZmY2E4NzNhMDI5ZWUzYzI1MmZjM2ZiODhhMTU0YlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAxMiAwNzowNDo0MyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmNcXG5pbmRleCBkNmQyYWQwODZjMzI4Li41MGZhOWU0YjVmODAzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuY1xcbkBAIC01NCwyMSArNTQsMjkgQEAgc3RhdGljIGludCBtbTgxeF9md19nZXRfaGVhZGVyKGNvbnN0IHU4ICpkYXRhLCBFbGYzMl9FaGRyICplaGRyKVxcbiBcXG4gc3RhdGljIHZvaWQgbW04MXhfZndfcGFyc2VfaW5mbyhzdHJ1Y3QgbW04MXggKm1vcnMsIGNvbnN0IHU4ICpkYXRhLCBpbnQgbGVuZ3RoKVxcbiB7XFxuLVxcdGNvbnN0IHN0cnVjdCBtbTgxeF9md19pbmZvX3RsdiAqdGx2ID1cXG4tXFx0XFx0KGNvbnN0IHN0cnVjdCBtbTgxeF9md19pbmZvX3RsdiAqKWRhdGE7XFxuK1xcdGNvbnN0IHU4ICplbmQgPSBkYXRhICsgbGVuZ3RoO1xcbitcXHRjb25zdCB1OCAqcG9zID0gZGF0YTtcXG4rXFxuK1xcdHdoaWxlIChlbmQgLSBwb3MgXFx1MDAzZT0gKHB0cmRpZmZfdClzaXplb2Yoc3RydWN0IG1tODF4X2Z3X2luZm9fdGx2KSkge1xcbitcXHRcXHRjb25zdCBzdHJ1Y3QgbW04MXhfZndfaW5mb190bHYgKnRsdiA9XFxuK1xcdFxcdFxcdChjb25zdCBzdHJ1Y3QgbW04MXhfZndfaW5mb190bHYgKilwb3M7XFxuK1xcdFxcdHUxNiB0bHZfbGVuID0gbGUxNl90b19jcHUodGx2LVxcdTAwM2VsZW5ndGgpO1xcbitcXG4rXFx0XFx0cG9zID0gdGx2LVxcdTAwM2V2YWw7XFxuK1xcdFxcdGlmICh0bHZfbGVuIFxcdTAwM2UgZW5kIC0gcG9zKVxcbitcXHRcXHRcXHRicmVhaztcXG4gXFxuLVxcdHdoaWxlICgodTggKil0bHYgXFx1MDAzYyAoZGF0YSArIGxlbmd0aCkpIHtcXG4gXFx0XFx0c3dpdGNoIChsZTE2X3RvX2NwdSh0bHYtXFx1MDAzZXR5cGUpKSB7XFxuIFxcdFxcdGNhc2UgTU04MVhfRldfSU5GT19UTFZfQkNGX0FERFI6XFxuLVxcdFxcdFxcdG1vcnMtXFx1MDAzZWJjZl9hZGRyZXNzID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHRsdi1cXHUwMDNldmFsKTtcXG4rXFx0XFx0XFx0aWYgKHRsdl9sZW4gXFx1MDAzZT0gc2l6ZW9mKF9fbGUzMikpXFxuK1xcdFxcdFxcdFxcdG1vcnMtXFx1MDAzZWJjZl9hZGRyZXNzID1cXG4rXFx0XFx0XFx0XFx0XFx0Z2V0X3VuYWxpZ25lZF9sZTMyKHRsdi1cXHUwMDNldmFsKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGRlZmF1bHQ6XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuLVxcdFxcdHRsdiA9IChjb25zdCBzdHJ1Y3QgbW04MXhfZndfaW5mb190bHYgKikoKHU4ICopdGx2ICtcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0IGxlMTZfdG9fY3B1KFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgdGx2LVxcdTAwM2VsZW5ndGgpICtcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0IHNpemVvZigqdGx2KSk7XFxuK1xcbitcXHRcXHRwb3MgKz0gdGx2X2xlbjtcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC0xMTcsMTMgKzEyNSwxNSBAQCBzdGF0aWMgaW50IG1tODF4X2Z3X2xvYWRfZncoc3RydWN0IG1tODF4ICptb3JzLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KVxcbiBcXG4gXFx0aWYgKG1tODF4X2Z3X2dldF9oZWFkZXIoZnctXFx1MDAzZWRhdGEsIFxcdTAwMjZlaGRyKSkge1xcbiBcXHRcXHRkZXZfZXJyKG1vcnMtXFx1MDAzZWRldiwgXFxcIldyb25nIGZpbGUgZm9ybWF0XFxcIik7XFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIG91dF9mcmVlO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAobW04MXhfZndfZ2V0X3NlY3Rpb25faGVhZGVyKGZ3LVxcdTAwM2VkYXRhLCBcXHUwMDI2ZWhkciwgXFx1MDAyNnNoX3N0cnRhYixcXG4gXFx0XFx0XFx0XFx0XFx0ZWhkci5lX3Noc3RybmR4KSkge1xcbiBcXHRcXHRkZXZfZXJyKG1vcnMtXFx1MDAzZWRldiwgXFxcIkludmFsaWQgZmlybXdhcmUuIE1pc3Npbmcgc3RyaW5nIHRhYmxlXFxcIik7XFxuLVxcdFxcdHJldHVybiAtRU5PRU5UO1xcbitcXHRcXHRyZXQgPSAtRU5PRU5UO1xcbitcXHRcXHRnb3RvIG91dF9mcmVlO1xcbiBcXHR9XFxuIFxcbiBcXHRzaF9zdHJzID0gKGNvbnN0IGNoYXIgKilmdy1cXHUwMDNlZGF0YSArIHNoX3N0cnRhYi5zaF9vZmZzZXQ7XFxuQEAgLTE2MCw3ICsxNzAsNyBAQCBzdGF0aWMgaW50IG1tODF4X2Z3X2xvYWRfZncoc3RydWN0IG1tODF4ICptb3JzLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KVxcbiBcXHRcXHRcXHRtbTgxeF9yZWxlYXNlX2J1cyhtb3JzKTtcXG4gXFx0XFx0XFx0aWYgKHN0YXR1cykge1xcbiBcXHRcXHRcXHRcXHRyZXQgPSAtRUlPO1xcbi1cXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0XFx0Z290byBvdXRfZnJlZTtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuIFxcdH1cXG5AQCAtMTc5LDYgKzE4OSw3IEBAIHN0YXRpYyBpbnQgbW04MXhfZndfbG9hZF9mdyhzdHJ1Y3QgbW04MXggKm1vcnMsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpXFxuIFxcdGlmIChlaGRyLmVfZW50cnkpXFxuIFxcdFxcdHJldCA9IG1tODF4X2Z3X3NldF9ib290X2FkZHIobW9ycywgZWhkci5lX2VudHJ5KTtcXG4gXFxuK291dF9mcmVlOlxcbiBcXHRkZXZtX2tmcmVlKG1vcnMtXFx1MDAzZWRldiwgZndfYnVmKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbkBAIC00OTIsNiArNTAzLDEzIEBAIHN0YXRpYyBpbnQgbW04MXhfZndfcmVhZF9leHRfaG9zdF90YWJsZShzdHJ1Y3QgbW04MXggKm1vcnMsXFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gZXhpdDtcXG4gXFxuK1xcdC8qIFRoZSB0YWJsZSBkZXNjcmliZXMgaXRzIG93biBsZW5ndGg7IGl0IG11c3QgZml0IHdoYXQgd2FzIHJlYWQgKi9cXG4rXFx0aWYgKGxlMzJfdG9fY3B1KGhvc3RfdGJsLVxcdTAwM2VleHRfaG9zdF90YmxfbGVuZ3RoKSBcXHUwMDNjIHNpemVvZigqaG9zdF90YmwpIHx8XFxuK1xcdCAgICBsZTMyX3RvX2NwdShob3N0X3RibC1cXHUwMDNlZXh0X2hvc3RfdGJsX2xlbmd0aCkgXFx1MDAzZSBleHRfaG9zdF90YmxfbGVuKSB7XFxuK1xcdFxcdHJldCA9IC1FSU5WQUw7XFxuK1xcdFxcdGdvdG8gZXhpdDtcXG4rXFx0fVxcbitcXG4gXFx0bW04MXhfcmVsZWFzZV9idXMobW9ycyk7XFxuIFxcdCpleHRfaG9zdF90YWJsZSA9IGhvc3RfdGJsO1xcbiBcXHRyZXR1cm4gcmV0O1xcbkBAIC01NTksMzQgKzU3Nyw0NCBAQCBpbnQgbW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsKHN0cnVjdCBtbTgxeCAqbW9ycylcXG4gXFx0ZW5kID0gKCh1OCAqKWV4dF9ob3N0X3RhYmxlKSArXFxuIFxcdCAgICAgIGxlMzJfdG9fY3B1KGV4dF9ob3N0X3RhYmxlLVxcdTAwM2VleHRfaG9zdF90YmxfbGVuZ3RoKTtcXG4gXFxuLVxcdHdoaWxlIChoZWFkIFxcdTAwM2MgZW5kKSB7XFxuK1xcdHdoaWxlIChlbmQgLSBoZWFkIFxcdTAwM2U9IChwdHJkaWZmX3Qpc2l6ZW9mKHN0cnVjdCBleHRfaG9zdF90YmxfdGx2X2hkcikpIHtcXG4gXFx0XFx0c3RydWN0IGV4dF9ob3N0X3RibF90bHZfaGRyICpoZHIgPVxcbiBcXHRcXHRcXHQoc3RydWN0IGV4dF9ob3N0X3RibF90bHZfaGRyICopaGVhZDtcXG4rXFx0XFx0dTE2IHRsdl9sZW4gPSBsZTE2X3RvX2NwdShoZHItXFx1MDAzZWxlbmd0aCk7XFxuK1xcbitcXHRcXHRpZiAodGx2X2xlbiBcXHUwMDNjIHNpemVvZigqaGRyKSB8fCB0bHZfbGVuIFxcdTAwM2UgZW5kIC0gaGVhZClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuIFxcbiBcXHRcXHRzd2l0Y2ggKGxlMTZfdG9fY3B1KGhkci1cXHUwMDNldGFnKSkge1xcbi1cXHRcXHRjYXNlIE1NODFYX0ZXX0hPU1RfVEFCTEVfVEFHX1MxR19DQVBBQklMSVRJRVM6XFxuLVxcdFxcdFxcdG1tODF4X2Z3X3VwZGF0ZV9jYXBhYmlsaXRpZXMoXFxuLVxcdFxcdFxcdFxcdG1vcnMsIChzdHJ1Y3QgZXh0X2hvc3RfdGJsX3MxZ19jYXBzICopaGRyKTtcXG4rXFx0XFx0Y2FzZSBNTTgxWF9GV19IT1NUX1RBQkxFX1RBR19TMUdfQ0FQQUJJTElUSUVTOiB7XFxuK1xcdFxcdFxcdHN0cnVjdCBleHRfaG9zdF90YmxfczFnX2NhcHMgKmNhcHMgPSAodm9pZCAqKWhkcjtcXG4rXFxuK1xcdFxcdFxcdGlmICh0bHZfbGVuIFxcdTAwM2U9IHNpemVvZigqY2FwcykpXFxuK1xcdFxcdFxcdFxcdG1tODF4X2Z3X3VwZGF0ZV9jYXBhYmlsaXRpZXMobW9ycywgY2Fwcyk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdFxcdGNhc2UgTU04MVhfRldfSE9TVF9UQUJMRV9UQUdfSU5TRVJUX1NLQl9DSEVDS1NVTToge1xcbitcXHRcXHRcXHRzdHJ1Y3QgZXh0X2hvc3RfdGJsX2luc2VydF9za2JfY2hlY2tzdW0gKmNzdW0gPVxcbitcXHRcXHRcXHRcXHQodm9pZCAqKWhkcjtcXG4gXFxuLVxcdFxcdGNhc2UgTU04MVhfRldfSE9TVF9UQUJMRV9UQUdfSU5TRVJUX1NLQl9DSEVDS1NVTTpcXG4tXFx0XFx0XFx0bW04MXhfZndfdXBkYXRlX3ZhbGlkYXRlX3NrYl9jaGVja3N1bShcXG4tXFx0XFx0XFx0XFx0bW9ycyxcXG4tXFx0XFx0XFx0XFx0KHN0cnVjdCBleHRfaG9zdF90YmxfaW5zZXJ0X3NrYl9jaGVja3N1bSAqKWhkcik7XFxuK1xcdFxcdFxcdGlmICh0bHZfbGVuIFxcdTAwM2U9IHNpemVvZigqY3N1bSkpXFxuK1xcdFxcdFxcdFxcdG1tODF4X2Z3X3VwZGF0ZV92YWxpZGF0ZV9za2JfY2hlY2tzdW0obW9ycyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgY3N1bSk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdFxcdGNhc2UgTU04MVhfRldfSE9TVF9UQUJMRV9UQUdfWUFQU19UQUJMRToge1xcbitcXHRcXHRcXHRzdHJ1Y3QgZXh0X2hvc3RfdGJsX3lhcHNfdGFibGUgKnlhcHMgPSAodm9pZCAqKWhkcjtcXG4gXFxuLVxcdFxcdGNhc2UgTU04MVhfRldfSE9TVF9UQUJMRV9UQUdfWUFQU19UQUJMRTpcXG4tXFx0XFx0XFx0bW04MXhfeWFwc19od19yZWFkX3RhYmxlKFxcbi1cXHRcXHRcXHRcXHRtb3JzLCBcXHUwMDI2KChzdHJ1Y3QgZXh0X2hvc3RfdGJsX3lhcHNfdGFibGUgKiloZHIpXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgICAtXFx1MDAzZXlhcHNfdGFibGUpO1xcbitcXHRcXHRcXHRpZiAodGx2X2xlbiBcXHUwMDNlPSBzaXplb2YoKnlhcHMpKVxcbitcXHRcXHRcXHRcXHRtbTgxeF95YXBzX2h3X3JlYWRfdGFibGUobW9ycyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZ5YXBzLVxcdTAwM2V5YXBzX3RhYmxlKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4gXFx0XFx0ZGVmYXVsdDpcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGhlYWQgKz0gbGUxNl90b19jcHUoaGRyLVxcdTAwM2VsZW5ndGgpO1xcbi1cXHRcXHRpZiAoIWhkci1cXHUwMDNlbGVuZ3RoKVxcbi1cXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0aGVhZCArPSB0bHZfbGVuO1xcbiBcXHR9XFxuIFxcbiBcXHRrZnJlZShleHRfaG9zdF90YWJsZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA3OjA0OjQ3LjE4MzE1MjQ1NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjExNjIzMTYxMTg3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJXTEFOX1ZFTkRPUl9NT1JTRU1JQ1JPXCIsXG4gICAgXCJNTTgxWF9VU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtbTgxeF9md19pbml0XCIsXG4gICAgXCJtbTgxeF9md19wYXJzZV9leHRfaG9zdF90YmxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBtZW1vcnkgbGVha3MgaW4gdGhlIGZpcm13YXJlIHBhcnNpbmcgbG9naWMgb2YgdGhlIE1vcnNlIE1pY3JvIG1tODF4IGRyaXZlci4gVGhlIGRyaXZlciBjYW4gYmUgdGVzdGVkIHZpYSB0aGUgVVNCIGludGVyZmFjZSB1c2luZyBhIGR1bW15IEhDRCBvciBzeXprYWxsZXIncyBVU0IgZnV6emluZyBjYXBhYmlsaXRpZXMuIFRoZSBmaXJtd2FyZSBsb2FkaW5nIGFuZCBwYXJzaW5nIGxvZ2ljIGlzIHJlYWNoYWJsZSB3aGVuIHRoZSBkZXZpY2UgaXMgcHJvYmVkIGFuZCB0aGUgaW50ZXJmYWNlIGlzIGJyb3VnaHQgdXAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDAwNjYwNzA1ZWQ2ZmNhODczYTAyOWVlM2MyNTJmYzNmYjg4YTE1NGJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAwNzowNDo0MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuY1xuaW5kZXggZDZkMmFkMDg2YzMyOC4uNTBmYTllNGI1ZjgwMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jXG5AQCAtNTQsMjEgKzU0LDI5IEBAIHN0YXRpYyBpbnQgbW04MXhfZndfZ2V0X2hlYWRlcihjb25zdCB1OCAqZGF0YSwgRWxmMzJfRWhkciAqZWhkcilcbiBcbiBzdGF0aWMgdm9pZCBtbTgxeF9md19wYXJzZV9pbmZvKHN0cnVjdCBtbTgxeCAqbW9ycywgY29uc3QgdTggKmRhdGEsIGludCBsZW5ndGgpXG4ge1xuLVx0Y29uc3Qgc3RydWN0IG1tODF4X2Z3X2luZm9fdGx2ICp0bHYgPVxuLVx0XHQoY29uc3Qgc3RydWN0IG1tODF4X2Z3X2luZm9fdGx2ICopZGF0YTtcbitcdGNvbnN0IHU4ICplbmQgPSBkYXRhICsgbGVuZ3RoO1xuK1x0Y29uc3QgdTggKnBvcyA9IGRhdGE7XG4rXG4rXHR3aGlsZSAoZW5kIC0gcG9zIFx1MDAzZT0gKHB0cmRpZmZfdClzaXplb2Yoc3RydWN0IG1tODF4X2Z3X2luZm9fdGx2KSkge1xuK1x0XHRjb25zdCBzdHJ1Y3QgbW04MXhfZndfaW5mb190bHYgKnRsdiA9XG4rXHRcdFx0KGNvbnN0IHN0cnVjdCBtbTgxeF9md19pbmZvX3RsdiAqKXBvcztcbitcdFx0dTE2IHRsdl9sZW4gPSBsZTE2X3RvX2NwdSh0bHYtXHUwMDNlbGVuZ3RoKTtcbitcbitcdFx0cG9zID0gdGx2LVx1MDAzZXZhbDtcbitcdFx0aWYgKHRsdl9sZW4gXHUwMDNlIGVuZCAtIHBvcylcbitcdFx0XHRicmVhaztcbiBcbi1cdHdoaWxlICgodTggKil0bHYgXHUwMDNjIChkYXRhICsgbGVuZ3RoKSkge1xuIFx0XHRzd2l0Y2ggKGxlMTZfdG9fY3B1KHRsdi1cdTAwM2V0eXBlKSkge1xuIFx0XHRjYXNlIE1NODFYX0ZXX0lORk9fVExWX0JDRl9BRERSOlxuLVx0XHRcdG1vcnMtXHUwMDNlYmNmX2FkZHJlc3MgPSBnZXRfdW5hbGlnbmVkX2xlMzIodGx2LVx1MDAzZXZhbCk7XG4rXHRcdFx0aWYgKHRsdl9sZW4gXHUwMDNlPSBzaXplb2YoX19sZTMyKSlcbitcdFx0XHRcdG1vcnMtXHUwMDNlYmNmX2FkZHJlc3MgPVxuK1x0XHRcdFx0XHRnZXRfdW5hbGlnbmVkX2xlMzIodGx2LVx1MDAzZXZhbCk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbi1cdFx0dGx2ID0gKGNvbnN0IHN0cnVjdCBtbTgxeF9md19pbmZvX3RsdiAqKSgodTggKil0bHYgK1xuLVx0XHRcdFx0XHRcdFx0IGxlMTZfdG9fY3B1KFxuLVx0XHRcdFx0XHRcdFx0XHQgdGx2LVx1MDAzZWxlbmd0aCkgK1xuLVx0XHRcdFx0XHRcdFx0IHNpemVvZigqdGx2KSk7XG4rXG4rXHRcdHBvcyArPSB0bHZfbGVuO1xuIFx0fVxuIH1cbiBcbkBAIC0xMTcsMTMgKzEyNSwxNSBAQCBzdGF0aWMgaW50IG1tODF4X2Z3X2xvYWRfZncoc3RydWN0IG1tODF4ICptb3JzLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KVxuIFxuIFx0aWYgKG1tODF4X2Z3X2dldF9oZWFkZXIoZnctXHUwMDNlZGF0YSwgXHUwMDI2ZWhkcikpIHtcbiBcdFx0ZGV2X2Vycihtb3JzLVx1MDAzZWRldiwgXCJXcm9uZyBmaWxlIGZvcm1hdFwiKTtcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdHJldCA9IC1FSU5WQUw7XG4rXHRcdGdvdG8gb3V0X2ZyZWU7XG4gXHR9XG4gXG4gXHRpZiAobW04MXhfZndfZ2V0X3NlY3Rpb25faGVhZGVyKGZ3LVx1MDAzZWRhdGEsIFx1MDAyNmVoZHIsIFx1MDAyNnNoX3N0cnRhYixcbiBcdFx0XHRcdFx0ZWhkci5lX3Noc3RybmR4KSkge1xuIFx0XHRkZXZfZXJyKG1vcnMtXHUwMDNlZGV2LCBcIkludmFsaWQgZmlybXdhcmUuIE1pc3Npbmcgc3RyaW5nIHRhYmxlXCIpO1xuLVx0XHRyZXR1cm4gLUVOT0VOVDtcbitcdFx0cmV0ID0gLUVOT0VOVDtcbitcdFx0Z290byBvdXRfZnJlZTtcbiBcdH1cbiBcbiBcdHNoX3N0cnMgPSAoY29uc3QgY2hhciAqKWZ3LVx1MDAzZWRhdGEgKyBzaF9zdHJ0YWIuc2hfb2Zmc2V0O1xuQEAgLTE2MCw3ICsxNzAsNyBAQCBzdGF0aWMgaW50IG1tODF4X2Z3X2xvYWRfZncoc3RydWN0IG1tODF4ICptb3JzLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KVxuIFx0XHRcdG1tODF4X3JlbGVhc2VfYnVzKG1vcnMpO1xuIFx0XHRcdGlmIChzdGF0dXMpIHtcbiBcdFx0XHRcdHJldCA9IC1FSU87XG4tXHRcdFx0XHRicmVhaztcbitcdFx0XHRcdGdvdG8gb3V0X2ZyZWU7XG4gXHRcdFx0fVxuIFx0XHR9XG4gXHR9XG5AQCAtMTc5LDYgKzE4OSw3IEBAIHN0YXRpYyBpbnQgbW04MXhfZndfbG9hZF9mdyhzdHJ1Y3QgbW04MXggKm1vcnMsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpXG4gXHRpZiAoZWhkci5lX2VudHJ5KVxuIFx0XHRyZXQgPSBtbTgxeF9md19zZXRfYm9vdF9hZGRyKG1vcnMsIGVoZHIuZV9lbnRyeSk7XG4gXG4rb3V0X2ZyZWU6XG4gXHRkZXZtX2tmcmVlKG1vcnMtXHUwMDNlZGV2LCBmd19idWYpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtNDkyLDYgKzUwMywxMyBAQCBzdGF0aWMgaW50IG1tODF4X2Z3X3JlYWRfZXh0X2hvc3RfdGFibGUoc3RydWN0IG1tODF4ICptb3JzLFxuIFx0aWYgKHJldClcbiBcdFx0Z290byBleGl0O1xuIFxuK1x0LyogVGhlIHRhYmxlIGRlc2NyaWJlcyBpdHMgb3duIGxlbmd0aDsgaXQgbXVzdCBmaXQgd2hhdCB3YXMgcmVhZCAqL1xuK1x0aWYgKGxlMzJfdG9fY3B1KGhvc3RfdGJsLVx1MDAzZWV4dF9ob3N0X3RibF9sZW5ndGgpIFx1MDAzYyBzaXplb2YoKmhvc3RfdGJsKSB8fFxuK1x0ICAgIGxlMzJfdG9fY3B1KGhvc3RfdGJsLVx1MDAzZWV4dF9ob3N0X3RibF9sZW5ndGgpIFx1MDAzZSBleHRfaG9zdF90YmxfbGVuKSB7XG4rXHRcdHJldCA9IC1FSU5WQUw7XG4rXHRcdGdvdG8gZXhpdDtcbitcdH1cbitcbiBcdG1tODF4X3JlbGVhc2VfYnVzKG1vcnMpO1xuIFx0KmV4dF9ob3N0X3RhYmxlID0gaG9zdF90Ymw7XG4gXHRyZXR1cm4gcmV0O1xuQEAgLTU1OSwzNCArNTc3LDQ0IEBAIGludCBtbTgxeF9md19wYXJzZV9leHRfaG9zdF90Ymwoc3RydWN0IG1tODF4ICptb3JzKVxuIFx0ZW5kID0gKCh1OCAqKWV4dF9ob3N0X3RhYmxlKSArXG4gXHQgICAgICBsZTMyX3RvX2NwdShleHRfaG9zdF90YWJsZS1cdTAwM2VleHRfaG9zdF90YmxfbGVuZ3RoKTtcbiBcbi1cdHdoaWxlIChoZWFkIFx1MDAzYyBlbmQpIHtcbitcdHdoaWxlIChlbmQgLSBoZWFkIFx1MDAzZT0gKHB0cmRpZmZfdClzaXplb2Yoc3RydWN0IGV4dF9ob3N0X3RibF90bHZfaGRyKSkge1xuIFx0XHRzdHJ1Y3QgZXh0X2hvc3RfdGJsX3Rsdl9oZHIgKmhkciA9XG4gXHRcdFx0KHN0cnVjdCBleHRfaG9zdF90YmxfdGx2X2hkciAqKWhlYWQ7XG4rXHRcdHUxNiB0bHZfbGVuID0gbGUxNl90b19jcHUoaGRyLVx1MDAzZWxlbmd0aCk7XG4rXG4rXHRcdGlmICh0bHZfbGVuIFx1MDAzYyBzaXplb2YoKmhkcikgfHwgdGx2X2xlbiBcdTAwM2UgZW5kIC0gaGVhZClcbitcdFx0XHRicmVhaztcbiBcbiBcdFx0c3dpdGNoIChsZTE2X3RvX2NwdShoZHItXHUwMDNldGFnKSkge1xuLVx0XHRjYXNlIE1NODFYX0ZXX0hPU1RfVEFCTEVfVEFHX1MxR19DQVBBQklMSVRJRVM6XG4tXHRcdFx0bW04MXhfZndfdXBkYXRlX2NhcGFiaWxpdGllcyhcbi1cdFx0XHRcdG1vcnMsIChzdHJ1Y3QgZXh0X2hvc3RfdGJsX3MxZ19jYXBzICopaGRyKTtcbitcdFx0Y2FzZSBNTTgxWF9GV19IT1NUX1RBQkxFX1RBR19TMUdfQ0FQQUJJTElUSUVTOiB7XG4rXHRcdFx0c3RydWN0IGV4dF9ob3N0X3RibF9zMWdfY2FwcyAqY2FwcyA9ICh2b2lkICopaGRyO1xuK1xuK1x0XHRcdGlmICh0bHZfbGVuIFx1MDAzZT0gc2l6ZW9mKCpjYXBzKSlcbitcdFx0XHRcdG1tODF4X2Z3X3VwZGF0ZV9jYXBhYmlsaXRpZXMobW9ycywgY2Fwcyk7XG4gXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdFx0Y2FzZSBNTTgxWF9GV19IT1NUX1RBQkxFX1RBR19JTlNFUlRfU0tCX0NIRUNLU1VNOiB7XG4rXHRcdFx0c3RydWN0IGV4dF9ob3N0X3RibF9pbnNlcnRfc2tiX2NoZWNrc3VtICpjc3VtID1cbitcdFx0XHRcdCh2b2lkICopaGRyO1xuIFxuLVx0XHRjYXNlIE1NODFYX0ZXX0hPU1RfVEFCTEVfVEFHX0lOU0VSVF9TS0JfQ0hFQ0tTVU06XG4tXHRcdFx0bW04MXhfZndfdXBkYXRlX3ZhbGlkYXRlX3NrYl9jaGVja3N1bShcbi1cdFx0XHRcdG1vcnMsXG4tXHRcdFx0XHQoc3RydWN0IGV4dF9ob3N0X3RibF9pbnNlcnRfc2tiX2NoZWNrc3VtICopaGRyKTtcbitcdFx0XHRpZiAodGx2X2xlbiBcdTAwM2U9IHNpemVvZigqY3N1bSkpXG4rXHRcdFx0XHRtbTgxeF9md191cGRhdGVfdmFsaWRhdGVfc2tiX2NoZWNrc3VtKG1vcnMsXG4rXHRcdFx0XHRcdFx0XHRcdCAgICAgIGNzdW0pO1xuIFx0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHRcdGNhc2UgTU04MVhfRldfSE9TVF9UQUJMRV9UQUdfWUFQU19UQUJMRToge1xuK1x0XHRcdHN0cnVjdCBleHRfaG9zdF90YmxfeWFwc190YWJsZSAqeWFwcyA9ICh2b2lkICopaGRyO1xuIFxuLVx0XHRjYXNlIE1NODFYX0ZXX0hPU1RfVEFCTEVfVEFHX1lBUFNfVEFCTEU6XG4tXHRcdFx0bW04MXhfeWFwc19od19yZWFkX3RhYmxlKFxuLVx0XHRcdFx0bW9ycywgXHUwMDI2KChzdHJ1Y3QgZXh0X2hvc3RfdGJsX3lhcHNfdGFibGUgKiloZHIpXG4tXHRcdFx0XHRcdCAgICAgICAtXHUwMDNleWFwc190YWJsZSk7XG4rXHRcdFx0aWYgKHRsdl9sZW4gXHUwMDNlPSBzaXplb2YoKnlhcHMpKVxuK1x0XHRcdFx0bW04MXhfeWFwc19od19yZWFkX3RhYmxlKG1vcnMsXG4rXHRcdFx0XHRcdFx0XHQgXHUwMDI2eWFwcy1cdTAwM2V5YXBzX3RhYmxlKTtcbiBcdFx0XHRicmVhaztcbitcdFx0fVxuIFx0XHRkZWZhdWx0OlxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG4tXHRcdGhlYWQgKz0gbGUxNl90b19jcHUoaGRyLVx1MDAzZWxlbmd0aCk7XG4tXHRcdGlmICghaGRyLVx1MDAzZWxlbmd0aClcbi1cdFx0XHRicmVhaztcbitcdFx0aGVhZCArPSB0bHZfbGVuO1xuIFx0fVxuIFxuIFx0a2ZyZWUoZXh0X2hvc3RfdGFibGUpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDc6MDQ6NDcuMTgzMTU1MzQ1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkxNzE1MjgyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBXaUZpIERyaXZlciBQYXRjaCBmb3IgVnVsbmVyYWJpbGl0aWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRhcmdldHMgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuY2AuIFRoZSBkZXNjcmlwdGlvbiBtZW50aW9ucyBhIGZpeCBmb3Igb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgbWVtb3J5IGxlYWtzLCB3aGljaCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl0IHNvdW5kcyBsaWtlIHNvbWVvbmUgaGFzIGJlZW4gZGlnZ2luZyBpbnRvIHRoZSBmaXJtd2FyZSBwYXJzaW5nIGxvZ2ljIGZvciB0aGUgTU04MXggY2hpcHNldCBhbmQgZm91bmQgc29tZSBuYXN0aWVzLiBTcGVjaWZpY2FsbHksIHRoZXkndmUgYWRkZWQgbGVuZ3RoIGNoZWNrcyBpbiBgbW04MXhfZndfcGFyc2VfaW5mb2AsIGBtbTgxeF9md19yZWFkX2V4dF9ob3N0X3RhYmxlYCwgYW5kIGBtbTgxeF9md19wYXJzZV9leHRfaG9zdF90YmxgIOKAkyBnb29kLCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcsIGV4YWN0bHkgd2hhdCdzIG5lZWRlZCB3aGVuIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSB1bnRydXN0ZWQgZmlybXdhcmUgZGF0YSBzdHJ1Y3R1cmVzLiBUaGV5J3ZlIGFsc28gY2xlYW5lZCB1cCBhIG1lbW9yeSBsZWFrIGluIGBtbTgxeF9md19sb2FkX2Z3YCBieSBjb3JyZWN0bHkgaGFuZGxpbmcgdGhlIGNsZWFudXAgcGF0aC4gU21hcnQgdXNlIG9mIGBnb3RvIG91dF9mcmVlYCB0aGVyZSwgbXVjaCBjbGVhbmVyIHRoYW4gYSBkaXJlY3QgcmV0dXJuLlxuXG5NeSBpbW1lZGlhdGUgZm9sbG93LXVwIHRob3VnaHQgaXMgYWJvdXQgdGhlIGF0dGFjayBzdXJmYWNlLiBJcyB0aGlzIGRyaXZlciBldmVuIHJlYWNoYWJsZSBpbiBhIHR5cGljYWwgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IFRoZSBkcml2ZXIgaXRzZWxmIGlzLCBhcyB0aGUgY29kZSByZXZlYWxzLCBgbW04MXhgIGZyb20gTW9yc2UgTWljcm8uIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgbGlrZWxpaG9vZCBvZiBleHBsb2l0YXRpb24uIEknbGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyB0byBzZWUgaWYgdGhlIGRyaXZlciBpcyBjb21tb25seSBlbmFibGVkIGluIGNvbmZpZ3VyYXRpb25zIHJlbGV2YW50IHRvIHZpcnR1YWxpemF0aW9uLCBjb250YWluZXJzLCBvciBlbWJlZGRlZCBzeXN0ZW1zIHdoZXJlIHRoaXMga2luZCBvZiB2dWxuZXJhYmlsaXR5IHdvdWxkIGJlIG1vc3QgaW1wYWN0ZnVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODY5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDc6MDQ6NTIuMTAwMzEzNTI1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4MzQ4NjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1tODF4XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNDg0NiBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9LY29uZmlnPTEzPWlmIFdMQU5fVkVORE9SX01PUlNFTUlDUk9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL0tjb25maWc6MTQ6c291cmNlIFxcXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L0tjb25maWdcXFwiXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9LY29uZmlnLTE1LWVuZGlmICMgV0xBTl9WRU5ET1JfTU9SU0VNSUNST1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX01NODFYKSArPSBtbTgxeC9cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvTWFrZWZpbGUtMi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX01NODFYKSArPSBtbTgxeF9jb3JlLm9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L01ha2VmaWxlLTQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9NYWtlZmlsZTo1Om1tODF4X2NvcmUteSArPSBjb3JlLm9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L01ha2VmaWxlOjY6bW04MXhfY29yZS15ICs9IG1hYy5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9NYWtlZmlsZTo3Om1tODF4X2NvcmUteSArPSBody5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9NYWtlZmlsZTo4Om1tODF4X2NvcmUteSArPSBmdy5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9NYWtlZmlsZTo5Om1tODF4X2NvcmUteSArPSBjb21tYW5kLm9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L01ha2VmaWxlOjEwOm1tODF4X2NvcmUteSArPSBwcy5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9NYWtlZmlsZToxMTptbTgxeF9jb3JlLXkgKz0gc2ticS5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9NYWtlZmlsZToxMjptbTgxeF9jb3JlLXkgKz0geWFwc19ody5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9NYWtlZmlsZToxMzptbTgxeF9jb3JlLXkgKz0geWFwcy5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9NYWtlZmlsZToxNDptbTgxeF9jb3JlLXkgKz0gcmMub1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvTWFrZWZpbGU6MTU6bW04MXhfY29yZS15ICs9IG1tcmMub1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvTWFrZWZpbGUtMTYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfTU04MVhfVVNCKSArPSBtbTgxeF91c2Iub1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvTWFrZWZpbGU6MTg6bW04MXhfdXNiLXkgKz0gdXNiLm9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L01ha2VmaWxlLTE5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX01NODFYX1NESU8pICs9IG1tODF4X3NkaW8ub1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvTWFrZWZpbGU6MjE6bW04MXhfc2Rpby15ICs9IHNkaW8ub1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaC0xMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oOjEyOmVudW0gbW04MXhfYnVzX3R5cGUge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmgtMTMtXFx0TU04MVhfQlVTX1RZUEVfVVNCLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaC0xNi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oOjE3OnN0cnVjdCBtbTgxeF9idXNfb3BzIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oOjE4OlxcdGludCAoKmRtX3JlYWQpKHN0cnVjdCBtbTgxeCAqbW9ycywgdTMyIGFkZHIsIHU4ICpkYXRhLCBpbnQgbGVuKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oOjE5OlxcdGludCAoKmRtX3dyaXRlKShzdHJ1Y3QgbW04MXggKm1vcnMsIHUzMiBhZGRyLCBjb25zdCB1OCAqZGF0YSwgaW50IGxlbik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaDoyMDpcXHRpbnQgKCpyZWczMl9yZWFkKShzdHJ1Y3QgbW04MXggKm1vcnMsIHUzMiBhZGRyLCB1MzIgKmRhdGEpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmg6MjE6XFx0aW50ICgqcmVnMzJfd3JpdGUpKHN0cnVjdCBtbTgxeCAqbW9ycywgdTMyIGFkZHIsIHUzMiBkYXRhKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oOjIyOlxcdGludCAoKmRpZ2l0YWxfcmVzZXQpKHN0cnVjdCBtbTgxeCAqbW9ycyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaDoyMzpcXHR2b2lkICgqc2V0X2J1c19lbmFibGUpKHN0cnVjdCBtbTgxeCAqbW9ycywgYm9vbCBlbmFibGUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmg6MjQ6XFx0dm9pZCAoKmNvbmZpZ19idXJzdF9tb2RlKShzdHJ1Y3QgbW04MXggKm1vcnMsIGJvb2wgZW5hYmxlX2J1cnN0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oOjI1OlxcdHZvaWQgKCpjbGFpbSkoc3RydWN0IG1tODF4ICptb3JzKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oOjI2OlxcdHZvaWQgKCpzZXRfaXJxKShzdHJ1Y3QgbW04MXggKm1vcnMsIGJvb2wgZW5hYmxlKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oOjI3OlxcdHZvaWQgKCpyZWxlYXNlKShzdHJ1Y3QgbW04MXggKm1vcnMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmgtMjgtXFx0dW5zaWduZWQgaW50IGJ1bGtfYWxpZ25tZW50O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaC0zNi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oOjM3Oi8qIG1tODF4X2RtX3JlYWQgLSBsZW4gbXVzdCBiZSByb3VuZGVkIHVwIHRvIHRoZSBuZWFyZXN0IDQtYnl0ZSBib3VuZGFyeSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmg6Mzg6c3RhdGljIGlubGluZSBpbnQgbW04MXhfZG1fcmVhZChzdHJ1Y3QgbW04MXggKm1vcnMsIHUzMiBhZGRyLCB1OCAqZGF0YSwgaW50IGxlbilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oLTM5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmgtNDItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaDo0MzpzdGF0aWMgaW5saW5lIGludCBtbTgxeF9kbV93cml0ZShzdHJ1Y3QgbW04MXggKm1vcnMsIHUzMiBhZGRyLCBjb25zdCB1OCAqZGF0YSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oLTQ0LVxcdFxcdFxcdFxcdCBpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaC00OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oOjQ5OnN0YXRpYyBpbmxpbmUgaW50IG1tODF4X3JlZzMyX3JlYWQoc3RydWN0IG1tODF4ICptb3JzLCB1MzIgYWRkciwgdTMyICpkYXRhKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmgtNTAte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaC01My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oOjU0OnN0YXRpYyBpbmxpbmUgaW50IG1tODF4X3JlZzMyX3dyaXRlKHN0cnVjdCBtbTgxeCAqbW9ycywgdTMyIGFkZHIsIHUzMiBkYXRhKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmgtNTUte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaC01OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oOjU5OnN0YXRpYyBpbmxpbmUgaW50IG1tODF4X2J1c19kaWdpdGFsX3Jlc2V0KHN0cnVjdCBtbTgxeCAqbW9ycylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oLTYwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmgtNjYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaDo2NzpzdGF0aWMgaW5saW5lIHZvaWQgbW04MXhfc2V0X2J1c19lbmFibGUoc3RydWN0IG1tODF4ICptb3JzLCBib29sIGVuYWJsZSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oLTY4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmgtNzEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaDo3MjpzdGF0aWMgaW5saW5lIHZvaWQgbW04MXhfYnVzX2NvbmZpZ19idXJzdF9tb2RlKHN0cnVjdCBtbTgxeCAqbW9ycyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oLTczLVxcdFxcdFxcdFxcdFxcdCAgICAgICBib29sIGVuYWJsZV9idXJzdClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmgtNzgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaDo3OTpzdGF0aWMgaW5saW5lIHZvaWQgbW04MXhfY2xhaW1fYnVzKHN0cnVjdCBtbTgxeCAqbW9ycylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oLTgwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmgtODMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaDo4NDpzdGF0aWMgaW5saW5lIHZvaWQgbW04MXhfYnVzX3NldF9pcnEoc3RydWN0IG1tODF4ICptb3JzLCBib29sIGVuYWJsZSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oLTg1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmgtODgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaDo4OTpzdGF0aWMgaW5saW5lIHZvaWQgbW04MXhfcmVsZWFzZV9idXMoc3RydWN0IG1tODF4ICptb3JzKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYnVzLmgtOTAte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9idXMuaC05My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oOjk0OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG1tODF4X2J1c19nZXRfYWxpZ25tZW50KHN0cnVjdCBtbTgxeCAqbW9ycylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2J1cy5oLTk1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jPTI3PXN0cnVjdCBob3N0X2NtZF9yZXNwX2NiIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTMyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjMzOnN0YXRpYyBpbnQgbW04MXhfY21kX3R4KHN0cnVjdCBtbTgxeCAqbW9ycywgc3RydWN0IGhvc3RfY21kX3Jlc3AgKnJlc3AsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMzQtXFx0XFx0XFx0c3RydWN0IGhvc3RfY21kX3JlcSAqcmVxLCB1MzIgbGVuZ3RoLCB1MzIgdGltZW91dClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTQxLVxcdHN0cnVjdCBza19idWZmICpza2I7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6NDI6XFx0c3RydWN0IG1tODF4X3NrYnEgKmNtZF9xID0gbW04MXhfaGlmX2dldF90eF9jbWRfcXVldWUobW9ycyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNDMtXFx0c3RydWN0IGhvc3RfY21kX3Jlc3BfY2IgKnJlc3BfY2I7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy01Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzo1ODpcXHRtbTgxeF9wc19kaXNhYmxlKG1vcnMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTU5LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNjItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6NjM6XFx0XFx0c2tiID0gbW04MXhfc2ticV9hbGxvY19za2IoY21kX3EsIGNtZF9sZW4pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTY0LVxcdFxcdGlmICghc2tiKSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy04My1cXHRcXHR0aW1lb3V0ID0gdGltZW91dCA/IHRpbWVvdXQgOiBIT1NUX0NNRF9ERUZBVUxUX1RJTUVPVVRfTVM7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6ODQ6XFx0XFx0cmV0ID0gbW04MXhfc2ticV9za2JfdHgoY21kX3EsIFxcdTAwMjZza2IsIE5VTEwsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtODUtXFx0XFx0XFx0XFx0XFx0TU04MVhfU0tCX0NIQU5fQ09NTUFORCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy04OC1cXHRcXHRpZiAocmV0KSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6ODk6XFx0XFx0XFx0ZGV2X2Vycihtb3JzLVxcdTAwM2VkZXYsIFxcXCJtbTgxeF9za2JxX3R4IGZhaWw6ICVkXFxcIiwgcmV0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy05MC1cXHRcXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTEyMS1cXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmNtZF9xLVxcdTAwM2Vsb2NrKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzoxMjI6XFx0XFx0bW04MXhfc2ticV9za2JfZmluaXNoKGNtZF9xLCBza2IsIE5VTEwpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTEyMy1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Y21kX3EtXFx1MDAzZWxvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMTI4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjEyOTpcXHRtbTgxeF9wc19lbmFibGUobW9ycyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMTMwLVxcdG11dGV4X3VubG9jayhcXHUwMDI2bW9ycy1cXHUwMDNlY21kX3dhaXQpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMTQ1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjE0NjppbnQgbW04MXhfY21kX3Jlc3BfcHJvY2VzcyhzdHJ1Y3QgbW04MXggKm1vcnMsIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMTQ3LXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0xNDgtXFx0aW50IGxlbmd0aCwgcmV0ID0gLUVTUkNIOyAvKiBObyBzdWNoIHByb2Nlc3MgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzoxNDk6XFx0c3RydWN0IG1tODF4X3NrYnEgKmNtZF9xID0gbW04MXhfaGlmX2dldF90eF9jbWRfcXVldWUobW9ycyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMTUwLVxcdHN0cnVjdCBob3N0X2NtZF9yZXNwICpzcmNfcmVzcCA9IChzdHJ1Y3QgaG9zdF9jbWRfcmVzcCAqKShza2ItXFx1MDAzZWRhdGEpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMTYzLVxcdGlmICghSE9TVF9DTURfSVNfUkVTUChzcmNfcmVzcCkpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzoxNjQ6XFx0XFx0cmV0ID0gbW04MXhfbWFjX2V2ZW50X3JlY3YobW9ycywgc2tiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0xNjUtXFx0XFx0Z290byBleGl0X2ZyZWU7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0xNjktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6MTcwOlxcdGNtZF9za2IgPSBtbTgxeF9za2JxX3R4X3BlbmRpbmcoY21kX3EpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTE3MS1cXHRpZiAoY21kX3NrYikge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjE3MjpcXHRcXHRtbTgxeF9za2JxX3B1bGxfaGRyX3Bvc3RfdHgoY21kX3NrYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMTczLVxcdFxcdHJlcSA9IChzdHJ1Y3QgaG9zdF9jbWRfcmVxICopY21kX3NrYi1cXHUwMDNlZGF0YTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTIzMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzoyMzI6aW50IG1tODF4X2NtZF9zdGFfc3RhdGUoc3RydWN0IG1tODF4ICptb3JzLCBzdHJ1Y3QgbW04MXhfdmlmICptb3JzX3ZpZiwgdTE2IGFpZCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0yMzMtXFx0XFx0XFx0c3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTI0NS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzoyNDY6XFx0cmV0dXJuIG1tODF4X2NtZF90eChtb3JzLCBOVUxMLCAoc3RydWN0IGhvc3RfY21kX3JlcSAqKVxcdTAwMjZyZXEsIDAsIDApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTI0Ny19XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMjQ4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjI0OTppbnQgbW04MXhfY21kX2FkZF9pZihzdHJ1Y3QgbW04MXggKm1vcnMsIHUxNiAqdmlmX2lkLCBjb25zdCB1OCAqYWRkcixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0yNTAtXFx0XFx0ICAgICBlbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGUpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0yNzAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6MjcxOlxcdHJldCA9IG1tODF4X2NtZF90eChtb3JzLCAoc3RydWN0IGhvc3RfY21kX3Jlc3AgKilcXHUwMDI2cmVzcCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0yNzItXFx0XFx0XFx0ICAgKHN0cnVjdCBob3N0X2NtZF9yZXEgKilcXHUwMDI2cmVxLCBzaXplb2YocmVzcCksIDApO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMjc4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjI3OTppbnQgbW04MXhfY21kX2dldF9jYXBhYmlsaXRpZXMoc3RydWN0IG1tODF4ICptb3JzLCB1MTYgdmlmX2lkLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjI4MDpcXHRcXHRcXHQgICAgICAgc3RydWN0IG1tODF4X2Z3X2NhcHMgKmNhcGFiaWxpdGllcylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0yODEte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMjg4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjI4OTpcXHRyZXQgPSBtbTgxeF9jbWRfdHgobW9ycywgKHN0cnVjdCBob3N0X2NtZF9yZXNwICopXFx1MDAyNnJzcCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0yOTAtXFx0XFx0XFx0ICAgKHN0cnVjdCBob3N0X2NtZF9yZXEgKilcXHUwMDI2cmVxLCBzaXplb2YocnNwKSwgMCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0yOTQtXFx0Y2FwYWJpbGl0aWVzLVxcdTAwM2VhbXBkdV9tc3MgPSByc3AuY2FwYWJpbGl0aWVzLmFtcGR1X21zcztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzoyOTU6XFx0Y2FwYWJpbGl0aWVzLVxcdTAwM2VtbTgxeF9tbXNzX29mZnNldCA9IHJzcC5tb3JzZV9tbXNzX29mZnNldDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0yOTYtXFx0Y2FwYWJpbGl0aWVzLVxcdTAwM2ViZWFtZm9ybWVlX3N0c19jYXBhYmlsaXR5ID1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTMwNy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzozMDg6aW50IG1tODF4X2NtZF9nZXRfbWF4X3R4cG93ZXIoc3RydWN0IG1tODF4ICptb3JzLCBzMzIgKm91dF9wb3dlcl9tYm0pXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMzA5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTMxNS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzozMTY6XFx0cmV0ID0gbW04MXhfY21kX3R4KG1vcnMsIChzdHJ1Y3QgaG9zdF9jbWRfcmVzcCAqKVxcdTAwMjZyZXNwLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTMxNy1cXHRcXHRcXHQgICAoc3RydWN0IGhvc3RfY21kX3JlcSAqKVxcdTAwMjZyZXEsIHNpemVvZihyZXNwKSwgMCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0zMjMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6MzI0OmludCBtbTgxeF9jbWRfaHdfc2NhbihzdHJ1Y3QgbW04MXggKm1vcnMsIHN0cnVjdCBtbTgxeF9od19zY2FuX3BhcmFtcyAqcGFyYW1zLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTMyNS1cXHRcXHQgICAgICBib29sIHN0b3JlKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMzMyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjMzMzpcXHRjbWRfc2l6ZSA9IG1tODF4X2h3X3NjYW5faF9nZXRfY21kX3NpemUocGFyYW1zKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0zMzQtXFx0Y21kX3NpemUgPSBST1VORF9CWVRFU19UT19XT1JEKGNtZF9zaXplKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTM1Mi1cXHRcXHRyZXEtXFx1MDAzZWR3ZWxsX3RpbWVfbXMgPSBjcHVfdG9fbGUzMihwYXJhbXMtXFx1MDAzZWR3ZWxsX3RpbWVfbXMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjM1MzpcXHRcXHRidWYgPSBtbTgxeF9od19zY2FuX2hfaW5zZXJ0X3RsdnMocGFyYW1zLCBidWYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTM1NC1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0zNTgtXFx0cmVxLVxcdTAwM2VoZHIubGVuID0gY3B1X3RvX2xlMTYoKHUxNikoKGJ1ZiAtICh1OCAqKXJlcSkgLSBzaXplb2YocmVxLVxcdTAwM2VoZHIpKSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6MzU5OlxcdHJldCA9IG1tODF4X2NtZF90eChtb3JzLCBOVUxMLCAoc3RydWN0IGhvc3RfY21kX3JlcSAqKXJlcSwgMCwgMCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMzYwLVxcdGtmcmVlKHJlcSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy0zNjQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6MzY1OmludCBtbTgxeF9jbWRfc2V0X3R4cG93ZXIoc3RydWN0IG1tODF4ICptb3JzLCBzMzIgKm91dF9wb3dlcl9tYm0sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMzY2LVxcdFxcdFxcdCAgaW50IHR4cG93ZXJfbWJtKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMzc0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjM3NTpcXHRyZXQgPSBtbTgxeF9jbWRfdHgobW9ycywgKHN0cnVjdCBob3N0X2NtZF9yZXNwICopXFx1MDAyNnJlc3AsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMzc2LVxcdFxcdFxcdCAgIChzdHJ1Y3QgaG9zdF9jbWRfcmVxICopXFx1MDAyNnJlcSwgc2l6ZW9mKHJlc3ApLCAwKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTM4Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzozODM6aW50IG1tODF4X2NtZF9zZXRfY2hhbm5lbChzdHJ1Y3QgbW04MXggKm1vcnMsIHUzMiBvcF9jaGFuX2ZyZXFfaHosXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtMzg0LVxcdFxcdFxcdCAgdTggcHJpXzFtaHpfY2hhbl9pZHgsIHU4IG9wX2J3X21oeiwgdTggcHJpX2J3X21oeixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTM5Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzozOTg6XFx0cmV0ID0gbW04MXhfY21kX3R4KG1vcnMsIChzdHJ1Y3QgaG9zdF9jbWRfcmVzcCAqKVxcdTAwMjZyZXNwLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTM5OS1cXHRcXHRcXHQgICAoc3RydWN0IGhvc3RfY21kX3JlcSAqKVxcdTAwMjZyZXEsIHNpemVvZihyZXNwKSwgMCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy00MDUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6NDA2OmludCBtbTgxeF9jbWRfZGlzYWJsZV9rZXkoc3RydWN0IG1tODF4ICptb3JzLCBzdHJ1Y3QgbW04MXhfdmlmICptb3JzX3ZpZixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy00MDctXFx0XFx0XFx0ICB1MTYgYWlkLCBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy00MTgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6NDE5OlxcdHJldHVybiBtbTgxeF9jbWRfdHgobW9ycywgTlVMTCwgKHN0cnVjdCBob3N0X2NtZF9yZXEgKilcXHUwMDI2cmVxLCAwLCAwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy00MjAtfVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTQyMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzo0MjI6aW50IG1tODF4X2NtZF9pbnN0YWxsX2tleShzdHJ1Y3QgbW04MXggKm1vcnMsIHN0cnVjdCBtbTgxeF92aWYgKm1vcnNfdmlmLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTQyMy1cXHRcXHRcXHQgIHUxNiBhaWQsIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTQ0NS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzo0NDY6XFx0cmV0ID0gbW04MXhfY21kX3R4KG1vcnMsIChzdHJ1Y3QgaG9zdF9jbWRfcmVzcCAqKVxcdTAwMjZyZXNwLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTQ0Ny1cXHRcXHRcXHQgICAoc3RydWN0IGhvc3RfY21kX3JlcSAqKVxcdTAwMjZyZXEsIHNpemVvZihyZXNwKSwgMCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy00NTYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6NDU3OmludCBtbTgxeF9jbWRfY2ZnX211bHRpY2FzdF9maWx0ZXIoc3RydWN0IG1tODF4ICptb3JzLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjQ1ODpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbW04MXhfdmlmICptb3JzX3ZpZilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy00NTkte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNDc0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjQ3NTpcXHRyZXQgPSBtbTgxeF9jbWRfdHgobW9ycywgTlVMTCwgKHN0cnVjdCBob3N0X2NtZF9yZXEgKilyZXEsIDAsIDApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTQ3Ni1cXHRrZnJlZShyZXEpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNDc5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjQ4MDppbnQgbW04MXhfY21kX2NmZ19ic3Moc3RydWN0IG1tODF4ICptb3JzLCB1MTYgdmlmX2lkLCB1MTYgYmVhY29uX2ludCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy00ODEtXFx0XFx0ICAgICAgdTE2IGR0aW1fcGVyaW9kLCB1MzIgY3NzaWQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy00ODktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6NDkwOlxcdHJldHVybiBtbTgxeF9jbWRfdHgobW9ycywgTlVMTCwgKHN0cnVjdCBob3N0X2NtZF9yZXEgKilcXHUwMDI2cmVxLCAwLCAwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy00OTEtfVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTQ5Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzo0OTM6aW50IG1tODF4X2NtZF9jb25maWdfYmVhY29uX3RpbWVyKHN0cnVjdCBtbTgxeCAqbW9ycywgdm9pZCAqbW04MXhfdmlmLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTQ5NC1cXHRcXHRcXHRcXHQgIGJvb2wgZW5hYmxlZClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy00OTUte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjQ5NjpcXHRzdHJ1Y3QgbW04MXhfdmlmICp2aWYgPSBtbTgxeF92aWY7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNDk3LVxcdHN0cnVjdCBob3N0X2NtZF9yZXFfYnNzX2JlYWNvbl9jb25maWcgcmVxID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNTAyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjUwMzpcXHRyZXR1cm4gbW04MXhfY21kX3R4KG1vcnMsIE5VTEwsIChzdHJ1Y3QgaG9zdF9jbWRfcmVxICopXFx1MDAyNnJlcSwgMCwgMCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNTA0LX1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy01MDUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6NTA2OmludCBtbTgxeF9jbWRfc2V0X3BzKHN0cnVjdCBtbTgxeCAqbW9ycywgYm9vbCBlbmFibGVkKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTUwNy17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy01MTItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6NTEzOlxcdHJldHVybiBtbTgxeF9jbWRfdHgobW9ycywgTlVMTCwgKHN0cnVjdCBob3N0X2NtZF9yZXEgKilcXHUwMDI2cmVxLCAwLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTUxNC1cXHRcXHRcXHQgICAgSE9TVF9DTURfUE9XRVJTQVZFX1RJTUVPVVRfTVMpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNTE2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjUxNzppbnQgbW04MXhfY21kX2NmZ19xb3Moc3RydWN0IG1tODF4ICptb3JzLCBzdHJ1Y3QgbW04MXhfcXVldWVfcGFyYW1zICpwYXJhbXMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNTE4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTUyOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzo1Mjk6XFx0cmV0dXJuIG1tODF4X2NtZF90eChtb3JzLCBOVUxMLCAoc3RydWN0IGhvc3RfY21kX3JlcSAqKVxcdTAwMjZyZXEsIDAsIDApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTUzMC19XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNTMxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjUzMjppbnQgbW04MXhfY21kX3JtX2lmKHN0cnVjdCBtbTgxeCAqbW9ycywgdTE2IHZpZl9pZClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy01MzMte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNTM3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjUzODpcXHRyZXR1cm4gbW04MXhfY21kX3R4KG1vcnMsIE5VTEwsIChzdHJ1Y3QgaG9zdF9jbWRfcmVxICopXFx1MDAyNnJlcSwgMCwgMCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNTM5LX1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy01NDAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6NTQxOmludCBtbTgxeF9jbWRfc2V0X2ZyYWdfdGhyZXNob2xkKHN0cnVjdCBtbTgxeCAqbW9ycywgdTMyIGZyYWdfdGhyZXNob2xkKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTU0Mi17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy01NDktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6NTUwOlxcdHJldHVybiBtbTgxeF9jbWRfdHgobW9ycywgTlVMTCwgKHN0cnVjdCBob3N0X2NtZF9yZXEgKilcXHUwMDI2cmVxLCAwLCAwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYy01NTEtfVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTU1Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzo1NTM6aW50IG1tODF4X2NtZF9nZXRfZGlzYWJsZWRfY2hhbm5lbHMoXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6NTU0OlxcdHN0cnVjdCBtbTgxeCAqbW9ycywgc3RydWN0IGhvc3RfY21kX3Jlc3BfZ2V0X2Rpc2FibGVkX2NoYW5uZWxzICpyZXNwLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTU1NS1cXHR1aW50IHJlc3BfbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNTYwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjU2MTpcXHRyZXR1cm4gbW04MXhfY21kX3R4KG1vcnMsIChzdHJ1Y3QgaG9zdF9jbWRfcmVzcCAqKXJlc3AsIFxcdTAwMjZyZXEsIHJlc3BfbGVuLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTU2Mi1cXHRcXHRcXHQgICAgMCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaC0xOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaDoxOTpzdHJ1Y3QgbW04MXhfcXVldWVfcGFyYW1zO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oLTIwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oOjIxOmVudW0gbW04MXhfY21kX3JldHVybl9jb2RlIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaC0yMi1cXHRNTTgxWF9SRVRfU1VDQ0VTUyA9IDAsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaD00ND1zdHJ1Y3QgaG9zdF9jbWRfZXZlbnQge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmgtNDgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmg6NDk6aW50IG1tODF4X2NtZF9yZXNwX3Byb2Nlc3Moc3RydWN0IG1tODF4ICptb3JzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaDo1MDppbnQgbW04MXhfY21kX2FkZF9pZihzdHJ1Y3QgbW04MXggKm1vcnMsIHUxNiAqdmlmX2lkLCBjb25zdCB1OCAqYWRkcixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaC01MS1cXHRcXHQgICAgIGVudW0gbmw4MDIxMV9pZnR5cGUgdHlwZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmg6NTI6aW50IG1tODF4X2NtZF9nZXRfY2FwYWJpbGl0aWVzKHN0cnVjdCBtbTgxeCAqbW9ycywgdTE2IHZpZl9pZCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaDo1MzpcXHRcXHRcXHQgICAgICAgc3RydWN0IG1tODF4X2Z3X2NhcHMgKmNhcGFiaWxpdGllcyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmg6NTQ6aW50IG1tODF4X2NtZF9jZmdfcW9zKHN0cnVjdCBtbTgxeCAqbW9ycywgc3RydWN0IG1tODF4X3F1ZXVlX3BhcmFtcyAqcGFyYW1zKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaDo1NTppbnQgbW04MXhfY21kX2NvbmZpZ19iZWFjb25fdGltZXIoc3RydWN0IG1tODF4ICptb3JzLCB2b2lkICptbTgxeF92aWYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmgtNTYtXFx0XFx0XFx0XFx0ICBib29sIGVuYWJsZWQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oOjU3OmludCBtbTgxeF9jbWRfY2ZnX2JzcyhzdHJ1Y3QgbW04MXggKm1vcnMsIHUxNiB2aWZfaWQsIHUxNiBiZWFjb25faW50LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oLTU4LVxcdFxcdCAgICAgIHUxNiBkdGltX3BlcmlvZCwgdTMyIGNzc2lkKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaDo1OTppbnQgbW04MXhfY21kX3NldF9jaGFubmVsKHN0cnVjdCBtbTgxeCAqbW9ycywgdTMyIG9wX2NoYW5fZnJlcV9oeixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaC02MC1cXHRcXHRcXHQgIHU4IHByaV8xbWh6X2NoYW5faWR4LCB1OCBvcF9id19taHosIHU4IHByaV9id19taHosXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmgtNjEtXFx0XFx0XFx0ICBzMzIgKnBvd2VyX21ibSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmg6NjI6aW50IG1tODF4X2NtZF9nZXRfbWF4X3R4cG93ZXIoc3RydWN0IG1tODF4ICptb3JzLCBzMzIgKm91dF9wb3dlcl9tYm0pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oOjYzOmludCBtbTgxeF9jbWRfc2V0X3R4cG93ZXIoc3RydWN0IG1tODF4ICptb3JzLCBzMzIgKm91dF9wb3dlcl9tYm0sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmgtNjQtXFx0XFx0XFx0ICBpbnQgdHhwb3dlcl9tYm0pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oOjY1OmludCBtbTgxeF9jbWRfaHdfc2NhbihzdHJ1Y3QgbW04MXggKm1vcnMsIHN0cnVjdCBtbTgxeF9od19zY2FuX3BhcmFtcyAqcGFyYW1zLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oLTY2LVxcdFxcdCAgICAgIGJvb2wgc3RvcmUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oOjY3OmludCBtbTgxeF9jbWRfc2V0X3BzKHN0cnVjdCBtbTgxeCAqbW9ycywgYm9vbCBlbmFibGVkKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaDo2ODppbnQgbW04MXhfY21kX2NmZ19tdWx0aWNhc3RfZmlsdGVyKHN0cnVjdCBtbTgxeCAqbW9ycyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaDo2OTpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbW04MXhfdmlmICptb3JzX3ZpZik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmg6NzA6aW50IG1tODF4X2NtZF9zdGFfc3RhdGUoc3RydWN0IG1tODF4ICptb3JzLCBzdHJ1Y3QgbW04MXhfdmlmICptb3JzX3ZpZiwgdTE2IGFpZCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaC03MS1cXHRcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oLTcyLVxcdFxcdFxcdGVudW0gaWVlZTgwMjExX3N0YV9zdGF0ZSBzdGF0ZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmg6NzM6aW50IG1tODF4X2NtZF9pbnN0YWxsX2tleShzdHJ1Y3QgbW04MXggKm1vcnMsIHN0cnVjdCBtbTgxeF92aWYgKm1vcnNfdmlmLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oLTc0LVxcdFxcdFxcdCAgdTE2IGFpZCwgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmgtNzYtXFx0XFx0XFx0ICBlbnVtIGhvc3RfY21kX2Flc19rZXlfbGVuIGxlbmd0aCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmg6Nzc6aW50IG1tODF4X2NtZF9kaXNhYmxlX2tleShzdHJ1Y3QgbW04MXggKm1vcnMsIHN0cnVjdCBtbTgxeF92aWYgKm1vcnNfdmlmLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oLTc4LVxcdFxcdFxcdCAgdTE2IGFpZCwgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaDo3OTppbnQgbW04MXhfY21kX3JtX2lmKHN0cnVjdCBtbTgxeCAqbW9ycywgdTE2IHZpZl9pZCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmg6ODA6aW50IG1tODF4X2NtZF9zZXRfZnJhZ190aHJlc2hvbGQoc3RydWN0IG1tODF4ICptb3JzLCB1MzIgZnJhZ190aHJlc2hvbGQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oOjgxOmludCBtbTgxeF9jbWRfZ2V0X2Rpc2FibGVkX2NoYW5uZWxzKFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oOjgyOlxcdHN0cnVjdCBtbTgxeCAqbW9ycywgc3RydWN0IGhvc3RfY21kX3Jlc3BfZ2V0X2Rpc2FibGVkX2NoYW5uZWxzICpyZXNwLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oLTgzLVxcdHVpbnQgcmVzcF9sZW4pO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtMTAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6MTE6c3RhdGljIGludCBtbTgxeF9jb3JlX2F0dGFjaF9yZWdzKHN0cnVjdCBtbTgxeCAqbW9ycylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0xMi17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0xNC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYzoxNTpcXHRtbTgxeF9jbGFpbV9idXMobW9ycyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6MTY6XFx0cmV0ID0gbW04MXhfcmVnMzJfcmVhZChtb3JzLCBNTTgxMDhfUkVHX0NISVBfSUQsIFxcdTAwMjZtb3JzLVxcdTAwM2VjaGlwX2lkKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYzoxNzpcXHRtbTgxeF9yZWxlYXNlX2J1cyhtb3JzKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0xOC1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTI2LVxcdFxcdG1vcnMtXFx1MDAzZXJlZ3MgPSBcXHUwMDI2bW04MTA4X3JlZ3M7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6Mjc6XFx0XFx0bW9ycy1cXHUwMDNlaGlmLm9wcyA9IFxcdTAwMjZtbTgxeF95YXBzX29wcztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0yOC1cXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTM1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjM2OnN0YXRpYyB2b2lkIG1tODF4X2NvcmVfaW5pdF9tYWNfYWRkcihzdHJ1Y3QgbW04MXggKm1vcnMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtMzcte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjM4OlxcdGludCByZXQgPSBtbTgxeF9od19vdHBfZ2V0X21hY19hZGRyKG1vcnMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTM5LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtNDMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6NDQ6Y2hhciAqbW04MXhfY29yZV9nZXRfZndfcGF0aCh1MzIgY2hpcF9pZCwgdTMyIGZ3X3ZlcilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy00NS17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy01OC19XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6NTk6RVhQT1JUX1NZTUJPTF9HUEwobW04MXhfY29yZV9nZXRfZndfcGF0aCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtNjAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6NjE6c3RydWN0IG1tODF4ICptbTgxeF9jb3JlX2FsbG9jKHNpemVfdCBwcml2X3NpemUsIHN0cnVjdCBkZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy02Mi17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6NjM6XFx0cmV0dXJuIG1tODF4X21hY19hbGxvYyhwcml2X3NpemUsIGRldik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtNjQtfVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjY1OkVYUE9SVF9TWU1CT0xfR1BMKG1tODF4X2NvcmVfYWxsb2MpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTY2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjY3OmludCBtbTgxeF9jb3JlX2luaXQoc3RydWN0IG1tODF4ICptb3JzKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTY4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTczLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjc0OlxcdG1tODF4X2NvcmVfaW5pdF9tYWNfYWRkcihtb3JzKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy03NS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYzo3NjpcXHRyZXQgPSBtbTgxeF9jb3JlX2F0dGFjaF9yZWdzKG1vcnMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTc3LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy04OS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYzo5MDpcXHRyZXQgPSBtbTgxeF9oaWZfaW5pdChtb3JzKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy05MS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtMTA1LX1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYzoxMDY6RVhQT1JUX1NZTUJPTF9HUEwobW04MXhfY29yZV9pbml0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0xMDctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6MTA4OmludCBtbTgxeF9jb3JlX3JlZ2lzdGVyKHN0cnVjdCBtbTgxeCAqbW9ycylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0xMDkte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjExMDpcXHRyZXR1cm4gbW04MXhfbWFjX3JlZ2lzdGVyKG1vcnMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTExMS19XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6MTEyOkVYUE9SVF9TWU1CT0xfR1BMKG1tODF4X2NvcmVfcmVnaXN0ZXIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTExMy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYzoxMTQ6dm9pZCBtbTgxeF9jb3JlX3VucmVnaXN0ZXIoc3RydWN0IG1tODF4ICptb3JzKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTExNS17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6MTE2OlxcdG1tODF4X21hY191bnJlZ2lzdGVyKG1vcnMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTExNy19XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6MTE4OkVYUE9SVF9TWU1CT0xfR1BMKG1tODF4X2NvcmVfdW5yZWdpc3Rlcik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtMTE5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjEyMDp2b2lkIG1tODF4X2NvcmVfZGVpbml0KHN0cnVjdCBtbTgxeCAqbW9ycylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0xMjEte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjEyMjpcXHRtbTgxeF9oaWZfZmluaXNoKG1vcnMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTEyMy1cXHRmbHVzaF93b3JrcXVldWUobW9ycy1cXHUwMDNlbmV0X3dxKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTEyNy19XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6MTI4OkVYUE9SVF9TWU1CT0xfR1BMKG1tODF4X2NvcmVfZGVpbml0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0xMjktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6MTMwOnZvaWQgbW04MXhfY29yZV9mcmVlKHN0cnVjdCBtbTgxeCAqbW9ycylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0xMzEte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjEzMjpcXHRtbTgxeF9tYWNfZnJlZShtb3JzKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0xMzMtfVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjEzNDpFWFBPUlRfU1lNQk9MX0dQTChtbTgxeF9jb3JlX2ZyZWUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTEzNS1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTU0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oOjU1OnN0cnVjdCBtbTgxeF9idXNfb3BzO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oOjU2OnN0cnVjdCBtbTgxeF9oaWZfb3BzO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTU3LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtNjItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmg6NjM6ZW51bSBtbTgxeF9jYXBzX2ZsYWdzIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaC02NC1cXHRNTTgxWF9DQVBTX0ZXX1NUQVJUID0gMCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTEzMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaDoxMzI6c3RydWN0IG1tODF4X2Z3X2NhcHMge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTEzMy1cXHR1MzIgZmxhZ3NbRldfQ0FQQUJJTElUSUVTX0ZMQUdTX1dJRFRIXTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTEzNy1cXHR1OCBtYXhpbXVtX2FtcGR1X2xlbmd0aF9leHBvbmVudDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaDoxMzg6XFx0dTggbW04MXhfbW1zc19vZmZzZXQ7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMTM5LX07XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaC0xNDEtI2RlZmluZSBNTTgxWF9GV19TVVBQKE1NODFYX0NBUFMsIENBUEFCSUxJVFkpIFxcXFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaDoxNDI6XFx0bW04MXhfY2Fwc19zdXBwb3J0ZWQoTU04MVhfQ0FQUywgTU04MVhfQ0FQU18jI0NBUEFCSUxJVFkpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMTQzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oOjE0NDpzdGF0aWMgaW5saW5lIGJvb2wgbW04MXhfY2Fwc19zdXBwb3J0ZWQoc3RydWN0IG1tODF4X2Z3X2NhcHMgKmNhcHMsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmg6MTQ1OlxcdFxcdFxcdFxcdFxcdGVudW0gbW04MXhfY2Fwc19mbGFncyBmbGFnKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTE0Ni17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaC0xNTEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmg6MTUyOnN0cnVjdCBtbTgxeF9wcyB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMTUzLVxcdHUzMiB3YWtlcnM7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaC0xNjAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmg6MTYxOmVudW0gbW04MXhfcGFnZV9hY2kge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTE2Mi1cXHRNTTgxWF9BQ0lfQkUgPSAwLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMTY3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oOjE2ODplbnVtIG1tODF4X3Fvc190aWRfdXBfaW5kZXgge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTE2OS1cXHRNTTgxWF9RT1NfVElEX1VQX0JLID0gMSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTE4MS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaDoxODI6c3RydWN0IG1tODF4X3N3X3ZlcnNpb24ge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTE4My1cXHR1OCBtYWpvcjtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTE4Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaDoxODg6c3RydWN0IG1tODF4X3N0YSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMTg5LVxcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWY7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaC0xOTUtXFx0aW50IG1heF9id19taHo7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmg6MTk2OlxcdHN0cnVjdCBtbTgxeF9yY19zdGEgcmM7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMTk3LVxcdHN0cnVjdCBtbXJjX3JhdGUgbGFzdF9zdGFfdHhfcmF0ZTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTIwMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaDoyMDI6c3RydWN0IG1tODF4X3ZpZiB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmg6MjAzOlxcdHN0cnVjdCBtbTgxeCAqbW9ycztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaC0yMDQtXFx0dTE2IGlkO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMjE2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oOjIxNzpzdHJ1Y3QgbW04MXhfc3RhbGVfdHhfc3RhdHVzIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaC0yMTgtXFx0LyogU3RhbGUgVHggbG9jayAqL1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmg9MjIzPXN0cnVjdCBtY2FzdF9maWx0ZXIge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMjMyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oOjIzMzplbnVtIG1tODF4X2h3X3NjYW5fb3Age1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTIzNC1cXHRNTTgxWF9IV19TQ0FOX09QX1NUQVJULFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMjM3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oOjIzODpzdHJ1Y3QgbW04MXhfaHdfc2Nhbl9wYXJhbXMge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTIzOS1cXHRzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodztcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTI0NS1cXHR1MzIgZHdlbGxfb25faG9tZV9tcztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaDoyNDY6XFx0ZW51bSBtbTgxeF9od19zY2FuX29wIG9wZXJhdGlvbjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaC0yNDctXFx0Ym9vbCBzdG9yZTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTI2MS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaDoyNjI6ZW51bSBtbTgxeF9od19zY2FuX3N0YXRlIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaC0yNjMtXFx0SFdfU0NBTl9TVEFURV9JRExFLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMjY3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oOjI2ODpzdHJ1Y3QgbW04MXhfaHdfc2NhbiB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmg6MjY5OlxcdGVudW0gbW04MXhfaHdfc2Nhbl9zdGF0ZSBzdGF0ZTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaC0yNzAtXFx0c3RydWN0IGNvbXBsZXRpb24gc2Nhbl9kb25lO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oOjI3MTpcXHRzdHJ1Y3QgbW04MXhfaHdfc2Nhbl9wYXJhbXMgKnBhcmFtcztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaC0yNzItXFx0c3RydWN0IGRlbGF5ZWRfd29yayB0aW1lb3V0O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMjc1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oOjI3NjplbnVtIG1tODF4X2hpZl9ldmVudF9mbGFncyB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMjc3LVxcdE1NODFYX0hJRl9FVlRfUlhfUEVORCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTI4OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaDoyODk6ZW51bSBtbTgxeF9zdGF0ZV9mbGFncyB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmgtMjkwLVxcdE1NODFYX1NUQVRFX0NISVBfVU5SRVNQT05TSVZFLFxcbi0tXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA3OjA0OjUyLjE5ODY2ODc3NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4ODU2MzI1NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNTTgxWCBEcml2ZXIgYW5kIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSBzZWUgdGhpcyBwYXRjaCB0YXJnZXRzIHRoZSBNTTgxWCBkcml2ZXIsIHdoaWNoIGlzIG9ubHkgYnVpbHQgaWYgYENPTkZJR19NTTgxWGAgaXMgZW5hYmxlZCwgd2hpY2ggaXMgYSBrZXkgc3RhcnRpbmcgcG9pbnQuIEl0IGFwcGVhcnMgdGhlIGRyaXZlciBoYXMgYm90aCBVU0IgYW5kIFNESU8gdmFyaWFudHMg4oCTIHNwZWNpZmljYWxseSwgaWYgYENPTkZJR19NTTgxWF9VU0JgIG9yIGBDT05GSUdfTU04MVhfU0RJT2AgYXJlIGNvbmZpZ3VyZWQuIEV4Y2VsbGVudC4gVGhpcyBpbW1lZGlhdGVseSBvcGVucyB1cCBkaWZmZXJlbnQgZnV6emluZyBhdmVudWVzLlxuXG5Gb3IgVVNCLCB0aGUgb3B0aW9ucyBhcmUgcHJldHR5IGNsZWFyLiBJIGNhbiBsZXZlcmFnZSBlaXRoZXIgdGhlIGR1bW15IEhDRCAoVVNCIEdhZGdldCkgb3IgdGhlIHBvd2VyIG9mIHN5emthbGxlcidzIFVTQiBmdXp6aW5nIGNhcGFiaWxpdGllcy4gVGhhdCdzIGEgc29saWQgcGF0aCB0byBleHBsb3JlLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBlc3RhYmxpc2hlZCB0b29scy4gU0RJTyBpcyBhbHNvIHBvdGVudGlhbGx5IGludGVyZXN0aW5nLCBidXQgaXQgcmVsaWVzIG9uIGFuIFNESU8gZW11bGF0b3IuIFdoaWxlIGl0J3MgcHJvYmFibHkgZmVhc2libGUsIHRoZSBVU0Igcm91dGUgc2VlbXMgbW9yZSBkaXJlY3RseSBhY2Nlc3NpYmxlIGFuZCBsZXNzIHJlbGlhbnQgb24gZXh0ZXJuYWwgc2V0dXAuXG5cblRoZSBzcGVjaWZpYyBtb2RpZmljYXRpb24gaXMgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuY2AuIEFoLCBmaXJtd2FyZSBwYXJzaW5nIGxvZ2ljLiBUaGlzIGlzIHByb21pc2luZyEgRmlybXdhcmUgbG9hZGluZyBpcyB1c3VhbGx5IGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuIEZpcm13YXJlIGlzIGxvYWRlZCB1c2luZyBgcmVxdWVzdF9maXJtd2FyZWAgb3IgZGlyZWN0bHkgZnJvbSB0aGUgZmlsZXN5c3RlbS4gU3l6a2FsbGVyJ3Mgc3VwcG9ydCBmb3IgbW9ja2luZyBgcmVxdWVzdF9maXJtd2FyZWAgbWFrZXMgdGhhdCBldmVuIG1vcmUgYXR0cmFjdGl2ZS5cblxuTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBmdW5jdGlvbnMgYG1tODF4X2Z3X2xvYWRfZndgIGFuZCBgbW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsYC4gVGhvc2UgYXJlIHRoZSBwcmltZSBzdXNwZWN0cywgZ2l2ZW4gdGhlIGNvbnRleHQuIFRoZXNlIGZ1bmN0aW9ucyB3aWxsIGJlIHRoZSBmb2NhbCBwb2ludCB0byBpZGVudGlmeSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIHdpdGhpbiB0aGUgZmlybXdhcmUgbG9hZGluZyBhbmQgcGFyc2luZyBwcm9jZXNzLiBJJ2xsIG5lZWQgdG8gZGlzc2VjdCB0aGUgbG9naWMgd2l0aGluIHRob3NlIGZ1bmN0aW9ucyB0byBkZXRlcm1pbmUgaG93IHN5emthbGxlciBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZSBlZmZlY3RpdmUgZnV6emluZyBpbnB1dHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTY1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA3OjA0OjU4LjA4NDMwNDM3N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzE5NTk1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtbTgxeF9md19sb2FkX2Z3XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYz05OT1zdGF0aWMgaW50IG1tODF4X2Z3X3NldF9ib290X2FkZHIoc3RydWN0IG1tODF4ICptb3JzLCB1aW50MzJfdCBhZGRyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTEwOS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmM6MTEwOnN0YXRpYyBpbnQgbW04MXhfZndfbG9hZF9mdyhzdHJ1Y3QgbW04MXggKm1vcnMsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTExMS17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmM9NjI3PXN0YXRpYyBpbnQgX19tbTgxeF9md19mbGFzaChzdHJ1Y3QgbW04MXggKm1vcnMsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmMtNjQzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYzo2NDQ6XFx0cmV0ID0gbW04MXhfZndfbG9hZF9mdyhtb3JzLCBmdyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTY0NS1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNzowNDo1OC4xNDc1MDUwNDZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzUyNzQ2ODY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgRmlybXdhcmUgRmxhc2hwb2ludCoqXG5cblJpZ2h0LCBzbyB0aGUgZmlybXdhcmUgbG9hZGluZyBwcm9jZXNzIGtpY2tzIG9mZiBpbiBgX19tbTgxeF9md19mbGFzaGAuIFNlZW1zIGxpa2UgYSBzZW5zaWJsZSBuYW1pbmcgY29udmVudGlvbi4gTm93LCB0aGUga2V5IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGxpbmcgY29udGV4dC4gR290dGEgdHJhY2UgYmFjayB0aHJvdWdoIHRoZSBjb2RlIGFuZCBmaWd1cmUgb3V0IHRoZSBlbnRyeSBwb2ludCBhbmQgdGhlIGV4ZWN1dGlvbiBmbG93IGxlYWRpbmcgdXAgdG8gdGhhdCBmdW5jdGlvbiBjYWxsLiBOZWVkIHRvIHNlZSB3aGVyZSB0aGUgZmlybXdhcmUgaW1hZ2UgaXMgY29taW5nIGZyb20gKGV4dGVybmFsIHN0b3JhZ2UsIG5ldHdvcmssIGV0Yy4pIGFuZCB3aGF0IHRyaWdnZXJzIHRoZSBmbGFzaCBvcGVyYXRpb24uIFVuZGVyc3RhbmRpbmcgdGhlIHByZWNvbmRpdGlvbnMgYmVmb3JlIGBfX21tODF4X2Z3X2ZsYXNoYCBpcyBjcnVjaWFsIGZvciBkZWJ1Z2dpbmcgYW55IGlzc3VlcyBvciBvcHRpbWl6aW5nIHRoZSBsb2FkaW5nIHByb2Nlc3MgaXRzZWxmLiBUaW1lIHRvIGZpcmUgdXAgdGhlIGRlYnVnZ2VyIGFuZCBzdGFydCBkaWdnaW5nIGludG8gdGhlIGNhbGwgc3RhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDk2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDc6MDU6MDIuNTAwMjU0NTczWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0OTU1NjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbW04MXhfZndfZmxhc2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jPTU2ND1pbnQgbW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsKHN0cnVjdCBtbTgxeCAqbW9ycylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy02MjYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jOjYyNzpzdGF0aWMgaW50IF9fbW04MXhfZndfZmxhc2goc3RydWN0IG1tODF4ICptb3JzLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy02MjgtXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqYmNmLCBib29sIHJlc2V0KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jPTY2Nj1zdGF0aWMgaW50IG1tODF4X2Z3X2ZsYXNoKHN0cnVjdCBtbTgxeCAqbW9ycywgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy02NzItXFx0d2hpbGUgKHJldHJpZXMtLSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYzo2NzM6XFx0XFx0cmV0ID0gX19tbTgxeF9md19mbGFzaChtb3JzLCBmdywgYmNmLCByZXNldCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTY3NC1cXHRcXHRpZiAoIXJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDc6MDU6MDIuNTk1MjE2NzMyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM1NTk5MTQ5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKm1tODF4X2Z3X2ZsYXNoOiBBIERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4uLiBgbW04MXhfZndfZmxhc2hgLiBIbW0sIHRoYXQgbmFtZSB0cmlnZ2VycyBzb21ldGhpbmcuIEl0IGltbWVkaWF0ZWx5IHN1Z2dlc3RzIGEgZmlybXdhcmUgZmxhc2hpbmcgdXRpbGl0eSwgbGlrZWx5IGZvciBhIHNwZWNpZmljIGhhcmR3YXJlIHBsYXRmb3JtIOKAkyB0aGUgXCJtbTgxeFwiIHBhcnQgaXMgdGhlIGdpdmVhd2F5LiBJJ2Qgd2FnZXIgaXQncyBhIHByb3ByaWV0YXJ5IG9yIHZlbmRvci1zcGVjaWZpYyB0b29sLiBOb3csIHRoZSBxdWVzdGlvbnMgc3RhcnQgcG9wcGluZzogSXMgdGhpcyBhIGJvb3Rsb2FkZXI/IEEgZ2VuZXJhbC1wdXJwb3NlIGZpcm13YXJlIHVwZGF0ZXI/IERvZXMgaXQgb3BlcmF0ZSB2aWEgSlRBRywgVUFSVCwgVVNCLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gV2hhdCBzZWN1cml0eSBmZWF0dXJlcyBhcmUgaW4gcGxhY2U/IERvZXMgaXQgc3VwcG9ydCByb2xsYmFjayBtZWNoYW5pc21zPyBXaGF0IGFib3V0IGVycm9yIGhhbmRsaW5nPyBBbmQsIGNyaXRpY2FsbHksIHRoZSB0YXJnZXQgZGV2aWNlcy4uLiBhcmUgd2UgdGFsa2luZyBlbWJlZGRlZCBzeXN0ZW1zLCBuZXR3b3JrIGFwcGxpYW5jZXMsIG9yIHNvbWV0aGluZyBlbHNlPyBVbmRlcnN0YW5kaW5nIHRoZSBoYXJkd2FyZSBjb250ZXh0IGlzIGNydWNpYWwuIEkgbmVlZCB0byBrbm93IHRoZSBhcmNoaXRlY3R1cmUsIG1lbW9yeSBtYXAsIGFuZCBhbnkgaGFyZHdhcmUtc3BlY2lmaWMgcXVpcmtzLiBUaGlzIGlzIGFsbCBhc3N1bWluZyBJIHdhbnQgdG8gZmxhc2ggbmV3IGZpcm13YXJlIG9udG8gdGhlIGRldmljZS4gV2hhdCBhcmUgdGhlIHBvc3NpYmlsaXRpZXMgYXJvdW5kIHRoaXMgdHlwZSBvZiBmbGFzaGluZyBzb2Z0d2FyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2NTEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNzowNTowNS45NTEyMTEzNzlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MDc0MjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1tODF4X2Z3X2ZsYXNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYz01NjQ9aW50IG1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibChzdHJ1Y3QgbW04MXggKm1vcnMpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmMtNjI2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYzo2Mjc6c3RhdGljIGludCBfX21tODF4X2Z3X2ZsYXNoKHN0cnVjdCBtbTgxeCAqbW9ycywgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmMtNjI4LVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmJjZiwgYm9vbCByZXNldClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy02NjUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jOjY2NjpzdGF0aWMgaW50IG1tODF4X2Z3X2ZsYXNoKHN0cnVjdCBtbTgxeCAqbW9ycywgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmMtNjY3LVxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpiY2YsIGJvb2wgcmVzZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmMtNjcyLVxcdHdoaWxlIChyZXRyaWVzLS0pIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmM6NjczOlxcdFxcdHJldCA9IF9fbW04MXhfZndfZmxhc2gobW9ycywgZncsIGJjZiwgcmVzZXQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy02NzQtXFx0XFx0aWYgKCFyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmM9NzE5PWludCBtbTgxeF9md19pbml0KHN0cnVjdCBtbTgxeCAqbW9ycywgYm9vbCByZXNldClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy03NjAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jOjc2MTpcXHRyZXQgPSBtbTgxeF9md19mbGFzaChtb3JzLCBmdywgYmNmLCByZXNldCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTc2Mi1cXHRpZiAocmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA3OjA1OjA2LjAyNjI5MTU5OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjEyNDc2MjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW5pdGlhbCBGaXJtd2FyZSBEZWVwIERpdmUgLSBtbTgxeF9md19pbml0KipcblxuQWxyaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBmaXJtd2FyZSBpbml0aWFsaXphdGlvbi4gU3BlY2lmaWNhbGx5LCB0aGF0IGBtbTgxeF9md19pbml0YCBmdW5jdGlvbi4gUmlnaHQgb2ZmIHRoZSBiYXQsIEknbSB0aGlua2luZywgXCJPa2F5LCB3aGF0J3MgKnRoaXMqIGRvaW5nP1wiIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgdGhlIHZlcnkgZmlyc3Qgc3RlcHMgaW4gYnJpbmdpbmcgdXAgdGhpcyBwYXJ0aWN1bGFyIGhhcmR3YXJlLiBXZSdyZSB0YWxraW5nIGxvdy1sZXZlbCBzdHVmZiBoZXJlLCBJIHByZXN1bWUuIEFyZSB3ZSB0YWxraW5nIGFib3V0IHJlZ2lzdGVyaW5nIHRoZSBkZXZpY2UsIGNvbmZpZ3VyaW5nIGNsb2Nrcywgc2V0dGluZyB1cCBpbnRlcnJ1cHQgdmVjdG9ycywgbWVtb3J5IGFsbG9jYXRpb24sIG9yIGFsbCBvZiB0aGUgYWJvdmU/IFdoYXQncyB0aGUgY29udGV4dCwgd2hhdCdzIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZT8gSXMgdGhpcyBhIGRyaXZlci1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiwgb3Igc29tZXRoaW5nIG1vcmUgZ2xvYmFsIHRoYXQgbWlnaHQgaW5mbHVlbmNlIG90aGVyIGZ1bmN0aW9ucz8gQW55IGhhcmR3YXJlLXNwZWNpZmljIGNvbnNpZGVyYXRpb25zIGluIHRoaXMgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2U/IERvZXMgdGhpcyByZXF1aXJlIGFueSBzcGVjaWZpYyBmbGFncy9vcHRpb25zIGZyb20gdGhlIHVzZXJzcGFjZSBhcHBsaWNhdGlvbiB0aGF0IGlzIGNhbGxpbmcgaXQ/IEknbSBhbHJlYWR5IG1lbnRhbGx5IHNrZXRjaGluZyB0aGUgY2FsbCBncmFwaCBhbmQgZGVwZW5kZW5jaWVzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZSwgdGhlIGZpcm13YXJlIGltYWdlIGl0c2VsZiwgYW5kIHBvc3NpYmx5IGFueSBib290bG9hZGVyIG9yIGVhcmxpZXIgaW5pdGlhbGl6YXRpb24gc3RhZ2VzLiBUaGUgZ29hbCBvZiB0aGlzIHByb2Nlc3Mgd291bGQgaGF2ZSB0byBiZSB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBpbiBwbGFjZSB0byBiZWdpbiBhY3R1YWwgY29tbXVuaWNhdGlvbiBhbmQgZGF0YSBwcm9jZXNzaW5nIHVzaW5nIHRoZSBkZXZpY2UuIEdvdHRhIGRpZyBpbiBhbmQgc2VlIHRoZSBkZXRhaWxzIG9mIHRoaXMgb25lLCB0aGUgbnVhbmNlcyBvZiB0aGF0IGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQ2OCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA3OjA1OjEwLjIzODc3MDYxNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzcxOTE1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW04MXhfZndfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmM9Njg5PXN0YXRpYyBpbnQgbW04MXhfZndfcmVxdWVzdChzdHJ1Y3QgbW04MXggKm1vcnMsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqKmZ3KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTcxOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmM6NzE5OmludCBtbTgxeF9md19pbml0KHN0cnVjdCBtbTgxeCAqbW9ycywgYm9vbCByZXNldClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmMtNzIwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuaD0xMzQ9c3RydWN0IGV4dF9ob3N0X3RibCB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmgtMTM5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuaDoxNDA6aW50IG1tODF4X2Z3X2luaXQoc3RydWN0IG1tODF4ICptb3JzLCBib29sIHJlc2V0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmgtMTQxLWludCBtbTgxeF9md19wYXJzZV9leHRfaG9zdF90Ymwoc3RydWN0IG1tODF4ICptb3JzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM9MjEwNz1zdGF0aWMgaW50IG1tODF4X21hY19yZXN0YXJ0KHN0cnVjdCBtbTgxeCAqbW9ycylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjEzOS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jOjIxNDA6XFx0cmV0ID0gbW04MXhfZndfaW5pdChtb3JzLCB0cnVlKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxNDEtXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDc6MDU6MTAuMzE1OTY3NDI1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNDMxNjgyMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKiptbTgxeF9md19pbml0IEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYG1tODF4X2Z3X2luaXRgIGZ1bmN0aW9uLiBUaGUgY29kZSBzYXlzIGl0J3MgY2FsbGVkIGJ5IGBtbTgxeF9tYWNfcmVzdGFydGAuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGJ1dCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogd2hlcmUgKmVsc2UqIGlzIHRoaXMgZnVuY3Rpb24gYmVpbmcgaW52b2tlZD8gSXMgYG1tODF4X21hY19yZXN0YXJ0YCB0aGUgb25seSBjYWxsaW5nIGZ1bmN0aW9uLCBvciBpcyB0aGVyZSB0aGUgcG9zc2liaWxpdHkgb2Ygb3RoZXIgY29kZSBwYXRocyBvciBkcml2ZXJzIG9yIG1vZHVsZXMgdGhhdCBhbHNvIGNhbGwgYG1tODF4X2Z3X2luaXRgPyBJIG5lZWQgdG8gdHJhY2sgZG93biBhbGwgdGhlIGNhbGwgc2l0ZXMgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSBvZiBpdHMgdXNhZ2UgYW5kIGFueSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzIG9yIGVkZ2UgY2FzZXMuIEEgc29saWQgZ3Jhc3Agb2YgZXZlcnkgY2FsbCBzaXRlIHdpbGwgYWxsb3cgbWUgdG8gYWNjdXJhdGVseSBkZXNjcmliZSBob3cgdGhlIGZ1bmN0aW9uIGJlaGF2ZXMgaW4gdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIyNzEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNzowNToxMy41NTkxMzk0MDJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0MDM3NjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1tODF4X21hY19yZXN0YXJ0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM9MjA3MT1zdGF0aWMgdTMyIG1tODF4X2dldF9leHBlY3RlZF90aHJvdWdocHV0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMDkwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjA5MTpzdGF0aWMgdm9pZCBtbTgxeF9tYWNfcmVzdGFydF9jbGVhbnVwX2l0ZXIodm9pZCAqZGF0YSwgdTggKm1hYyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIwOTItXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjA5Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jOjIwOTg6c3RhdGljIHZvaWQgbW04MXhfbWFjX3Jlc3RhcnRfY2xlYW51cChzdHJ1Y3QgbW04MXggKm1vcnMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMDk5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjEwMS1cXHRcXHRcXHRcXHRcXHQgICAgSUVFRTgwMjExX0lGQUNFX0lURVJfTk9STUFMLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjEwMjpcXHRcXHRcXHRcXHRcXHQgICAgbW04MXhfbWFjX3Jlc3RhcnRfY2xlYW51cF9pdGVyLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjEwMy1cXHRcXHRcXHRcXHRcXHQgICAgTlVMTCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxMDYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYzoyMTA3OnN0YXRpYyBpbnQgbW04MXhfbWFjX3Jlc3RhcnQoc3RydWN0IG1tODF4ICptb3JzKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjEwOC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxMzctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYzoyMTM4OlxcdG1tODF4X21hY19yZXN0YXJ0X2NsZWFudXAobW9ycyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTM5LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYz0yMTcwPXN0YXRpYyBpbnQgbW04MXhfbWFjX29wc19hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTgwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjE4MTpcXHRcXHRyZXQgPSBtbTgxeF9tYWNfcmVzdGFydChtb3JzKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxODItXFx0XFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYz0yMjYxPXN0YXRpYyB2b2lkIG1tODF4X3JlZ19ub3RpZmllcihzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMjcyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjI3MzpcXHRyZXQgPSBtbTgxeF9tYWNfcmVzdGFydChtb3JzKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIyNzQtXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDc6MDU6MTMuNjQzMTgyNzUyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNjk5MDY4ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaWdnaW5nIGludG8gdGhlIE1NODFYIERyaXZlciBBcmNoaXRlY3R1cmUqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGUgY29udHJvbCBmbG93IGhlcmUgaW4gdGhlIE1NODFYIGRyaXZlciwgYW5kIGl0J3MgbG9va2luZyBsaWtlIGBtbTgxeF9tYWNfcmVzdGFydGAgaXMgYSBrZXkgZnVuY3Rpb24uIEknbSBzZWVpbmcgaXQgY2FsbGVkIGZyb20gYm90aCBgbW04MXhfbWFjX29wc19hZGRfaW50ZXJmYWNlYCBhbmQgYWxzbyB0aGUgYG1tODF4X3JlZ19ub3RpZmllcmAgZnVuY3Rpb24uIFRoYXQgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBzaG93aW5nIG1lIHdoZXJlIHRoZSByZXN0YXJ0IGFjdGlvbiBpcyB0cmlnZ2VyZWQuIFRoaXMgaW1wbGllcyB0aGF0IGludGVyZmFjZSBhZGRpdGlvbiBhbmQgc29tZSBmb3JtIG9mIHJlZ2lzdHJhdGlvbiAobGlrZWx5IHJlbGF0ZWQgdG8gaGFyZHdhcmUgZXZlbnRzIG9yIHJlY29uZmlndXJhdGlvbikgYXJlIHRoZSBldmVudHMgdGhhdCBuZWNlc3NpdGF0ZSBhIE1BQyByZXN0YXJ0LlxuXG5Ob3cgSSdtIHBhdXNpbmcuLi4gSSBuZWVkIHRvIGNsYXJpZnkgc29tZXRoaW5nLiBJcyB0aGUgZmlybXdhcmUgaW5pdGlhbGl6YXRpb24sIGBtbTgxeF9md19pbml0YCwgY2FsbGVkIHdpdGhpbiB0aGUgcHJvYmUgZnVuY3Rpb24/IEl0J3MgY3JpdGljYWwgZm9yIG1lIHRvIHVuZGVyc3RhbmQgdGhlIGJvb3QtdXAgc2VxdWVuY2Ugb2YgdGhlIGhhcmR3YXJlIHNvIEkgbmVlZCB0byBjaGVjayB0aGUgcHJvYmUgZnVuY3Rpb24sIGBtbTgxeF9wcm9iZWAsIHRvIG1ha2Ugc3VyZSB0aGF0IGBtbTgxeF9md19pbml0YCBpcyBjYWxsZWQuIElmIHNvLCBhbmQgaG93LCB0aGF0IHdpbGwgZGV0ZXJtaW5lIHRoZSBzdGF0ZSBvZiB0aGUgaGFyZHdhcmUgYmVmb3JlIGEgcmVzdGFydCBpcyB0cmlnZ2VyZWQuIFRoZSB0aW1pbmcgYW5kIHNlcXVlbmNlIGFyZSBnb2luZyB0byBiZSBjcml0aWNhbCBmb3IgZGVidWdnaW5nIGFueSBwb3RlbnRpYWwgaXNzdWVzIGluIHRoZSBpbnRlcmZhY2Ugc2V0dXAgb3IgaGFyZHdhcmUgcmVnaXN0cmF0aW9uIHBhdGhzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzM5NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA3OjA1OjE3LjcxMzA5MjU4MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0NDQ0MjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1tODF4X2Z3X2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jPTY4OT1zdGF0aWMgaW50IG1tODF4X2Z3X3JlcXVlc3Qoc3RydWN0IG1tODF4ICptb3JzLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKipmdylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy03MTgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jOjcxOTppbnQgbW04MXhfZndfaW5pdChzdHJ1Y3QgbW04MXggKm1vcnMsIGJvb2wgcmVzZXQpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTcyMC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3Lmg9MTM0PXN0cnVjdCBleHRfaG9zdF90Ymwge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5oLTEzOS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3Lmg6MTQwOmludCBtbTgxeF9md19pbml0KHN0cnVjdCBtbTgxeCAqbW9ycywgYm9vbCByZXNldCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5oLTE0MS1pbnQgbW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsKHN0cnVjdCBtbTgxeCAqbW9ycyk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jPTIxMDc9c3RhdGljIGludCBtbTgxeF9tYWNfcmVzdGFydChzdHJ1Y3QgbW04MXggKm1vcnMpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxMzktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYzoyMTQwOlxcdHJldCA9IG1tODF4X2Z3X2luaXQobW9ycywgdHJ1ZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTQxLVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA3OjA1OjE3LjgyNzU0MTEzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMDE1NTQxNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW5pdGlhbCBJbnZlc3RpZ2F0aW9uIGludG8gRHJpdmVyIEluaXRpYWxpemF0aW9uIEZsb3cqKlxuXG5IYW5nIG9uIGEgbWludXRl4oCmIEknbSBzdGFydGluZyB0byB0aGluayBJIG1pc3NlZCBzb21ldGhpbmcgZnVuZGFtZW50YWwgaGVyZS4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCBgbW04MXhfZndfaW5pdGAgd2FzIHBhcnQgb2YgdGhlIHN0YW5kYXJkIHByb2JlIHNlcXVlbmNlLiBCdXQgbG9va2luZyBhdCB0aGUgYnJvYWRlciBwaWN0dXJlLCB0aGF0IGRvZXNuJ3Qgc2VlbSB0byBiZSB0aGUgY2FzZS4gTXkgZmlyc3QgaW5zdGluY3Qgd291bGQgYmUgdG8gY2hlY2sgdGhhdCBgbW04MXhfZndfaW5pdGAgaXMgY2FsbGVkIGluIG90aGVyIHNjZW5hcmlvcy5cblxuR2l2ZW4gdGhhdCBpdCdzIG5vdCBpbiB0aGUgYHByb2JlYCBmdW5jdGlvbiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhlIGZpcm13YXJlIGluaXRpYWxpemF0aW9uICpkb2VzKiBvY2N1ci4gSSBzaG91bGQgcHJvYmFibHkgYmUgbG9va2luZyBhdCBgbW04MXhfY29yZV9pbml0YCBuZXh0LiBUaGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQg4oCTIGl0J3Mgb2Z0ZW4gdGhlIHJvb3Qgb2YgdGhlIGNvcmUgZHJpdmVyIGluaXRpYWxpemF0aW9uLCByaWdodD8gT3IgcGVyaGFwcyB0aGUgTUFDIHJlZ2lzdHJhdGlvbiBmdW5jdGlvbiwgYG1tODF4X21hY19yZWdpc3RlcmA/IEl0J3MgcG9zc2libGUgdGhlIGZpcm13YXJlIGlzIGJlaW5nIGhhbmRsZWQgd2l0aGluIHRoYXQgY29udGV4dCwgZXNwZWNpYWxseSBpZiB0aGUgTUFDIGlzIHRpZ2h0bHkgY291cGxlZCB3aXRoIHRoZSBmaXJtd2FyZSBsb2FkaW5nLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBtb3JlIGNhcmVmdWxseSB0byBzZWUgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBhY3R1YWxseSBnZXR0aW5nIGNhbGxlZCwgYW5kIHdoYXQgaXQgZG9lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQyMzAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNzowNToyMS45MjkwOTc4NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMDU0NTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1tODF4X21hY19yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYz0xMDg9aW50IG1tODF4X2NvcmVfcmVnaXN0ZXIoc3RydWN0IG1tODF4ICptb3JzKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTEwOS17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6MTEwOlxcdHJldHVybiBtbTgxeF9tYWNfcmVnaXN0ZXIobW9ycyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtMTExLX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM9MjM1NT1zdGF0aWMgdm9pZCBtbTgxeF9tYWNfc3RhbGVfdHhfc3RhdHVzX3RpbWVyX2luaXQoc3RydWN0IG1tODF4ICptb3JzKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMzYwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjM2MTppbnQgbW04MXhfbWFjX3JlZ2lzdGVyKHN0cnVjdCBtbTgxeCAqbW9ycylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIzNjIte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuaD01MT1zdHJ1Y3QgbW04MXggKm1tODF4X21hY19hbGxvYyhzaXplX3QgcHJpdl9zaXplLCBzdHJ1Y3QgZGV2aWNlICpkZXYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmg6NTI6aW50IG1tODF4X21hY19yZWdpc3RlcihzdHJ1Y3QgbW04MXggKm1vcnMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmgtNTMtdm9pZCBtbTgxeF9tYWNfZnJlZShzdHJ1Y3QgbW04MXggKm1vcnMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNzowNToyMi4wNDExNTc1ODlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI4MzQ5MTE3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipBbmFseXppbmcgYG1tODF4X21hY19yZWdpc3RlcmAqKlxuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCBgbW04MXhfbWFjX3JlZ2lzdGVyYC4gSW1tZWRpYXRlbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgY29udGV4dC4gV2hhdCBpcyB0aGlzIGZ1bmN0aW9uIGRvaW5nPyBUaGUgbmFtZSBzdWdnZXN0cyBpdCdzIGxpa2VseSBkZWFsaW5nIHdpdGggcmVnaXN0ZXJpbmcgYSBNZWRpYSBBY2Nlc3MgQ29udHJvbGxlciAoTUFDKSBkZXZpY2UsIGFuZCB0aGUgXCJtbTgxeFwiIHByZWZpeCBpcyBhbG1vc3QgY2VydGFpbmx5IGFuIGluZGljYXRvciBvZiB0aGUgc3BlY2lmaWMgaGFyZHdhcmUgb3IgZHJpdmVyIGl0IHJlbGF0ZXMgdG8uIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhlcmUncyBzb21lIGRldmljZS1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiBvciBjb25maWd1cmF0aW9uIGludm9sdmVkLlxuXG5JJ2Qgd2FudCB0byBrbm93OlxuXG4qICAgKipXaGF0IGFyZSB3ZSByZWdpc3RlcmluZz8qKiBJcyB0aGlzIGEgcGh5c2ljYWwgTUFDLCBhIHZpcnR1YWwgaW50ZXJmYWNlLCBvciBzb21ldGhpbmcgbW9yZSBjb21wbGV4P1xuKiAgICoqV2hhdCBraW5kIG9mIGRhdGEgc3RydWN0dXJlIGlzIGludm9sdmVkPyoqIGBtbTgxeF9gIGltcGxpZXMgc29tZSBjb21wYW55IG9yIHNwZWNpZmljIGhhcmR3YXJlLCBzbyB3aGF0J3MgdGhlIGRhdGEgc3RydWN0dXJlIHR5cGUgZm9yIHRoZSBNQUMgYmVpbmcgdXNlZD8gSXMgaXQgYSBzdGFuZGFyZCBzdHJ1Y3R1cmUsIG9yIHByb3ByaWV0YXJ5PyBIb3cgZG8gd2UgaW50ZXJmYWNlIHdpdGggdGhpcyBzdHJ1Y3R1cmUuXG4qICAgKipXaGF0IGlzIHRoZSByZWdpc3RlciBtYXA/KiogYHJlZ2lzdGVyYCBpbXBsaWVzIHNvbWUgYWRkcmVzcy4gQXJlIHdlIG1hcHBpbmcgbWVtb3J5IGluIGtlcm5lbC1zcGFjZSwgb3Igc29tZSBvdGhlciBvcGVyYXRpb24/IERvIHdlIG5lZWQgdG8gZGVmaW5lIHRoZSByZWdpc3RlciBiYXNlIGFkZHJlc3M/XG4qICAgKipXaGF0IGRyaXZlciBtb2RlbCBpcyBiZWluZyB1c2VkPyoqIElzIGl0IGEgc3RhbmRhcmQgbmV0d29yayBkcml2ZXIgZnJhbWV3b3JrIG9yIHNvbWV0aGluZyBjdXN0b20/IElzIGl0IHVzaW5nIE5ldGxpbmssIHN5c2ZzLCBvciBhbm90aGVyIGludGVyZmFjZT8gV2hhdCBhcmUgdGhlIHN0YW5kYXJkIGNhbGxzIGJlaW5nIG1hZGU/XG4qICAgKipBcmUgdGhlcmUgYW55IG11dGV4ZXMvbG9ja3MgaW4gdXNlPyoqIEknbSBpbW1lZGlhdGVseSBsb29raW5nIGZvciBjb25jdXJyZW5jeSBwcm90ZWN0aW9uOyBNQUMgZGV2aWNlcyBhcmUgb2Z0ZW4gc2hhcmVkIHJlc291cmNlcywgc28gaXQncyBjcml0aWNhbCB0byBlbnN1cmUgcHJvcGVyIGxvY2tpbmcuIFJhY2UgY29uZGl0aW9ucyBhcmUgbmFzdHkuXG4qICAgKipFcnJvciBoYW5kbGluZz8qKiBIb3cgZG9lcyB0aGUgZnVuY3Rpb24gaGFuZGxlIGZhaWx1cmVzPyBEb2VzIGl0IHJldHVybiBlcnJvciBjb2RlcywgbG9nIG1lc3NhZ2VzLCBvciBzb21ldGhpbmcgZWxzZT8gSXMgaXQgYSByb2J1c3QgY2hlY2s/XG5cbkknbSBtZW50YWxseSBwcmVwYXJpbmcgdG8gdHJhY2UgdGhyb3VnaCB0aGUgY29kZSwgbG9va2luZyBmb3IgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2VzLCBwb3RlbnRpYWxseSBpbnRlcnJ1cHQgcmVnaXN0cmF0aW9uIChpZiBpdCdzIGEgaGFyZHdhcmUgTUFDKSwgYW5kIHRoZSBhY3R1YWwgbWVjaGFuaXNtIG9mIHR5aW5nIHRoZSBNQUMgZGV2aWNlIGludG8gdGhlIG5ldHdvcmsgc3RhY2suIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhlIGRyaXZlci4gTGV0J3Mgc2VlIGhvdyBpdCB3b3JrcyFcblxuXG4iLCJJbnB1dFRva2VucyI6MjQ5OTAsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNzowNToyNi4zMjQ2NTA5MzZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxNjg2ODI2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtbTgxeF9md19pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYz0yMTA3PXN0YXRpYyBpbnQgbW04MXhfbWFjX3Jlc3RhcnQoc3RydWN0IG1tODF4ICptb3JzKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTM5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjE0MDpcXHRyZXQgPSBtbTgxeF9md19pbml0KG1vcnMsIHRydWUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjE0MS1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNzowNToyNy4xNDE1MjYwNDhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI1MjQ1MzkxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuKipJbnZlc3RpZ2F0aW5nIG1tODF4IEZpcm13YXJlIEluaXRpYWxpemF0aW9uKipcblxuUmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgbW04MXhgIGRyaXZlciBjb2RlIGFnYWluLiBJdCdzIGNsZWFyIHRoYXQgYG1tODF4X2Z3X2luaXRgIGlzIGludm9rZWQgd2l0aGluIGBtbTgxeF9tYWNfcmVzdGFydGAuIFRoYXQncyB0aGUgZmlyc3QgY29ubmVjdGlvbiBJJ3ZlIGlkZW50aWZpZWQuIE5vdywgdGhlIG5leHQgbG9naWNhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIGBtbTgxeF9tYWNfcmVzdGFydGAgaXRzZWxmIGlzIGNhbGxlZCB3aXRoaW4gYG1tODF4X21hY19yZWdpc3RlcmAuIEtub3dpbmcgdGhpcyByZWxhdGlvbnNoaXAgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgaW5pdGlhbGl6YXRpb24gYW5kIHJlc3RhcnQgc2VxdWVuY2UuIEl0J3MgYSBrZXkgcGllY2Ugb2YgdGhlIHB1enpsZSB0byBkZXRlcm1pbmUgdGhlIG92ZXJhbGwgc3RhdGUgbWFjaGluZSBhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCBkdXJpbmcgZGV2aWNlIGJyaW5ndXAgb3IgZXJyb3IgcmVjb3ZlcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NjcxLCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDc6MDU6MzAuMzkzOTg0ODY1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODk4Nzg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtbTgxeF9tYWNfcmVzdGFydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM9MjA3MT1zdGF0aWMgdTMyIG1tODF4X2dldF9leHBlY3RlZF90aHJvdWdocHV0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMDkwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjA5MTpzdGF0aWMgdm9pZCBtbTgxeF9tYWNfcmVzdGFydF9jbGVhbnVwX2l0ZXIodm9pZCAqZGF0YSwgdTggKm1hYyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIwOTItXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjA5Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jOjIwOTg6c3RhdGljIHZvaWQgbW04MXhfbWFjX3Jlc3RhcnRfY2xlYW51cChzdHJ1Y3QgbW04MXggKm1vcnMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMDk5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjEwMS1cXHRcXHRcXHRcXHRcXHQgICAgSUVFRTgwMjExX0lGQUNFX0lURVJfTk9STUFMLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjEwMjpcXHRcXHRcXHRcXHRcXHQgICAgbW04MXhfbWFjX3Jlc3RhcnRfY2xlYW51cF9pdGVyLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjEwMy1cXHRcXHRcXHRcXHRcXHQgICAgTlVMTCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxMDYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYzoyMTA3OnN0YXRpYyBpbnQgbW04MXhfbWFjX3Jlc3RhcnQoc3RydWN0IG1tODF4ICptb3JzKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjEwOC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxMzctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYzoyMTM4OlxcdG1tODF4X21hY19yZXN0YXJ0X2NsZWFudXAobW9ycyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTM5LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYz0yMTcwPXN0YXRpYyBpbnQgbW04MXhfbWFjX29wc19hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTgwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjE4MTpcXHRcXHRyZXQgPSBtbTgxeF9tYWNfcmVzdGFydChtb3JzKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxODItXFx0XFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYz0yMjYxPXN0YXRpYyB2b2lkIG1tODF4X3JlZ19ub3RpZmllcihzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMjcyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjI3MzpcXHRyZXQgPSBtbTgxeF9tYWNfcmVzdGFydChtb3JzKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIyNzQtXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDc6MDU6MzAuNDYyOTc4NTk1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NjQwMjA2NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOlxuXG4qKkFuYWx5emluZyB0aGUgSW50ZXJmYWNlIEFkZGl0aW9uIFByb2NlZHVyZSoqXG5cbk9rYXksIHNvIGBtbTgxeF9tYWNfb3BzX2FkZF9pbnRlcmZhY2VgIGlzIHRoZSBrZXkgZnVuY3Rpb24gdHJpZ2dlcmVkIHdoZW4gYSBuZXcgaW50ZXJmYWNlIGlzIGFkZGVkLiBUaGF0IG1ha2VzIHNlbnNlOyBhZGRpbmcgYW4gaW50ZXJmYWNlLCBlc3BlY2lhbGx5IGluIGEgd2lyZWxlc3MgY29udGV4dCB1c2luZyBubDgwMjExLCBpcyBhIHNpZ25pZmljYW50IGV2ZW50LiBJJ20gdGhpbmtpbmcsIHRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIGFsbCB0aGUgbmVjZXNzYXJ5IGRhdGEgc3RydWN0dXJlcyBhbmQgY29uZmlndXJhdGlvbnMgc3BlY2lmaWMgdG8gdGhlIG5ldyBpbnRlcmZhY2Ugd2l0aGluIHRoZSBNQUMgbGF5ZXIuIEl04oCZcyB0aGUgZW50cnkgcG9pbnQgdG8gbWFraW5nIHRoZSBpbnRlcmZhY2Ugb3BlcmF0aW9uYWwuXG5cbkJ1dCBiZWZvcmUgSSBkZWx2ZSBkZWVwZXIgaW50byBgbW04MXhfbWFjX29wc19hZGRfaW50ZXJmYWNlYCwgYSBxdWljayBkZXRvdXIgaXMgaW4gb3JkZXIuIExldCBtZSBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgYW5kIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLiBJIHdhbnQgdG8gcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgdGhhdCB3aXRoIGBtbTgxeF9tYWNfcmVnaXN0ZXJgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBNQUMgbGF5ZXIgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYW5kIHJlZ2lzdGVyZWQgZmlyc3QsIHNvIHRoZSBhZGRpbmcgY2FuIGdvIHNtb290aGx5LiBMZXQgbWUgdmVyaWZ5IHRoZSBmbG93IG9mIG9wZXJhdGlvbnMuIFRoaXMgcmVnaXN0cmF0aW9uIGlzIGEgZm91bmRhdGlvbmFsIHBpZWNlIGFuZCBpbmZsdWVuY2VzIGV2ZXJ5dGhpbmcgdGhhdCBjb21lcyBhZnRlci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIHdvcmtpbmcgd2l0aCBhY2N1cmF0ZSBhc3N1bXB0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY3OTgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNzowNTozNS4xMjcwMDMxOTdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyOTcyNjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1tODF4X2Z3X2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jPTY4OT1zdGF0aWMgaW50IG1tODF4X2Z3X3JlcXVlc3Qoc3RydWN0IG1tODF4ICptb3JzLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKipmdylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy03MTgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jOjcxOTppbnQgbW04MXhfZndfaW5pdChzdHJ1Y3QgbW04MXggKm1vcnMsIGJvb2wgcmVzZXQpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTcyMC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3Lmg9MTM0PXN0cnVjdCBleHRfaG9zdF90Ymwge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5oLTEzOS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3Lmg6MTQwOmludCBtbTgxeF9md19pbml0KHN0cnVjdCBtbTgxeCAqbW9ycywgYm9vbCByZXNldCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5oLTE0MS1pbnQgbW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsKHN0cnVjdCBtbTgxeCAqbW9ycyk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jPTIxMDc9c3RhdGljIGludCBtbTgxeF9tYWNfcmVzdGFydChzdHJ1Y3QgbW04MXggKm1vcnMpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxMzktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYzoyMTQwOlxcdHJldCA9IG1tODF4X2Z3X2luaXQobW9ycywgdHJ1ZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTQxLVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA3OjA1OjM1LjIxOTk4MTE2N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTUxNTEyMzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW5pdGlhbCBEaWFnbm9zdGljIFF1ZXJ5KipcblxuUmlnaHQsIGxldCdzIHNlZS4uLiB3aGF0J3MgdGhlIGZpcnN0IHRoaW5nIHRoYXQgc3ByaW5ncyB0byBtaW5kLCBiYXNlZCBvbiB0aGUgY29udGV4dC4uLiBHaXZlbiB3ZSdyZSBkZWFsaW5nIHdpdGggaW5pdGlhbGl6YXRpb24sIHRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgYWx3YXlzIGFib3V0IHRoZSBjb3JlIHNldHVwLiBBIG5hbWUgbGlrZSBgbW04MXhfY29yZV9pbml0YCBzdWdnZXN0cyBpdCdzIGEgY3JpdGljYWwgZW50cnkgcG9pbnQgZm9yIGJyaW5naW5nIGEgc3BlY2lmaWMgbWljcm9jb250cm9sbGVyIGNvcmUgb25saW5lLiBJcyB0aGlzIGEgc3lzdGVtIEkgYW0gZmFtaWxpYXIgd2l0aD8gRnJvbSBteSB5ZWFycyBvZiBleHBlcmllbmNlLCBJIGNhbiBpbW1lZGlhdGVseSBzdGFydCB0aGlua2luZyB0aHJvdWdoIHBvdGVudGlhbCBpc3N1ZXMgdGhhdCBJIHdvdWxkIHNlZSBmcm9tIHRoZSBvdXRzZXQuIEkgYW0gaW1tZWRpYXRlbHkgZ29pbmcgdG8gY29uc2lkZXI6XG5cbiogICBEb2VzIHRoaXMgaW5pdGlhbGl6YXRpb24gaGFuZGxlIGNsb2NrIGNvbmZpZ3VyYXRpb24/XG4qICAgV2hhdCBhYm91dCBtZW1vcnkgbWFwcGluZyBhbmQgcHJvdGVjdGlvbj9cbiogICBJbnRlcnJ1cHQgdmVjdG9yIHNldHVwP1xuKiAgIFBlcmlwaGVyYWwgY29uZmlndXJhdGlvbiAtIHRoaXMgaXMgb2Z0ZW4gYSBtaW5lZmllbGQhXG5cbkl0J3MgbGlrZWx5IHRoZSBzdGFydGluZyBwb2ludCBmb3IgbG93LWxldmVsIGhhcmR3YXJlIGJyaW5nLXVwLCB3aGljaCBpcyB0eXBpY2FsbHkgd2hlcmUgeW91IGZpbmQgdGhlIG1vc3Qgc3VidGxlIGFuZCBmcnVzdHJhdGluZyBidWdzLiBJcyBpdCBjYWxsaW5nIG91dCB0byB0aGUgbW9yZSBzcGVjaWFsaXplZCBzdWJzeXN0ZW0gaW5pdGlhbGl6YXRpb24/IFRoaXMgc2VlbXMgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc1ODgsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNzowNTo0MC4zNzE0OTg4NDVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3OTc3NDUwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtbTgxeF9md19pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNzowNTo0MC40Mzk0ODY5MjVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY0Mzg2NTU2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgZGlzdGlsbGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIGBtbTgxeGAgRmlybXdhcmUgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGggb2YgYG1tODF4X2Z3X2luaXRgLiBUaGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGtub3cgaXMgKndoZXJlKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4gTGV0J3Mgc3RhcnQgd2l0aCBhIHF1aWNrIHNlYXJjaCB0byBzZWUgd2hhdCdzIHdoYXQuIFJpZ2h0LCBsb29rcyBsaWtlIGl0J3Mgb25seSBjYWxsZWQgd2l0aGluIGBtbTgxeF9tYWNfcmVzdGFydGAuXG5cbkhtbSwgdGhhdCBzZWVtcyBvZGQuIEknZCBleHBlY3QgaW5pdGlhbGl6YXRpb24gdG8gaGFwcGVuIGluIG1vcmUgcGxhY2VzLCBwb3RlbnRpYWxseSBkdXJpbmcgZHJpdmVyIHJlZ2lzdHJhdGlvbiBvciBhIHBvd2VyLXVwIHNlcXVlbmNlLiBMZXQgbWUganVzdCBjb25maXJtIHRoYXQuIE9rYXksIEkndmUgZG91YmxlLWNoZWNrZWQsIGFuZCBteSBpbml0aWFsIHNlYXJjaCB3YXMgY29ycmVjdCAtIGl0J3MgKm9ubHkqIGluIGBtbTgxeF9tYWNfcmVzdGFydGAuXG5cbkkgc2hvdWxkIHByb2JhYmx5IGxvb2sgYXQgd2hhdCBlbHNlIGlzIHJlbGF0ZWQgdG8gdGhlIE1BQywgc28gSSB0aGluayBJIHdpbGwgY2hlY2sgYG1tODF4X21hY19yZWdpc3RlcmAgbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc4OTQsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNzowNTo0NC4wODMzNTU4ODlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzMjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjM2MSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIzNjE6XFx0aW50IG1tODF4X21hY19yZWdpc3RlcihzdHJ1Y3QgbW04MXggKm1vcnMpXFxuMjM2MjpcXHR7XFxuMjM2MzpcXHRcXHRpbnQgcmV0O1xcbjIzNjQ6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBtb3JzLVxcdTAwM2VodztcXG4yMzY1OlxcdFxcbjIzNjY6XFx0XFx0bW9ycy1cXHUwMDNldHhfcG93ZXJfbWJtID0gSU5UX01BWDtcXG4yMzY3OlxcdFxcdG1vcnMtXFx1MDAzZXR4X21heF9wb3dlcl9tYm0gPSBJTlRfTUFYO1xcbjIzNjg6XFx0XFx0bW9ycy1cXHUwMDNlcnRzX3RocmVzaG9sZCA9IElFRUU4MDIxMV9NQVhfUlRTX1RIUkVTSE9MRDtcXG4yMzY5OlxcdFxcbjIzNzA6XFx0XFx0cmV0ID0gbW04MXhfcHNfaW5pdChtb3JzKTtcXG4yMzcxOlxcdFxcdGlmIChyZXQpXFxuMjM3MjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjIzNzM6XFx0XFxuMjM3NDpcXHRcXHRtbTgxeF9tYWNfY29uZmlnX2h3KG1vcnMpO1xcbjIzNzU6XFx0XFx0bW04MXhfbWFjX2h3X3NjYW5faW5pdChtb3JzKTtcXG4yMzc2OlxcdFxcdG1tODF4X21hY19zdGFsZV90eF9zdGF0dXNfdGltZXJfaW5pdChtb3JzKTtcXG4yMzc3OlxcdFxcbjIzNzg6XFx0XFx0cmV0ID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KGh3KTtcXG4yMzc5OlxcdFxcdGlmIChyZXQpIHtcXG4yMzgwOlxcdFxcdFxcdGRldl9lcnIobW9ycy1cXHUwMDNlZGV2LCBcXFwiaWVlZTgwMjExX3JlZ2lzdGVyX2h3IGZhaWxlZCAlZFxcXCIsIHJldCk7XFxuMjM4MTpcXHRcXHRcXHRtbTgxeF9tYWNfdW5yZWdpc3Rlcihtb3JzKTtcXG4yMzgyOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMjM4MzpcXHRcXHR9XFxuMjM4NDpcXHRcXG4yMzg1OlxcdFxcdG1tODF4X3JjX2luaXQobW9ycyk7XFxuMjM4NjpcXHRcXG4yMzg3OlxcdFxcdC8qXFxuMjM4ODpcXHRcXHQgKiBBdCB0aGlzIHN0YWdlLCB3ZSBrbm93IGJ1cyBhbmQgcGFnZXIgc3lzdGVtIGludGVycnVwdHMgYXJlIGVuYWJsZWQuXFxuMjM4OTpcXHRcXHQgKiBUcmlnZ2VyIHRoZSByZWNlaXZlIHdvcmtxdWV1ZSB0byBkcmFpbiBhbnkgaW5jb21pbmcgY2hpcC10by1ob3N0XFxuMjM5MDpcXHRcXHQgKiBwZW5kaW5nIHBhY2tldHMgYmVlbiBwdXNoZWQgaW4gdGhlIHBlcmlvZCBiZXR3ZWVuIHRoZSBmaXJtd2FyZVxcbjIzOTE6XFx0XFx0ICogaW5pdGlhbGl6YXRpb24gYW5kIGludGVycnVwdHMgYmVpbmcgZW5hYmxlZC5cXG4yMzkyOlxcdFxcdCAqL1xcbjIzOTM6XFx0XFx0c2V0X2JpdChNTTgxWF9ISUZfRVZUX1JYX1BFTkQsIFxcdTAwMjZtb3JzLVxcdTAwM2VoaWYuZXZlbnRfZmxhZ3MpO1xcbjIzOTQ6XFx0XFx0cXVldWVfd29yayhtb3JzLVxcdTAwM2VjaGlwX3dxLCBcXHUwMDI2bW9ycy1cXHUwMDNlaGlmX3dvcmspO1xcbjIzOTU6XFx0XFxuMjM5NjpcXHRcXHRyZXR1cm4gcmV0O1xcbjIzOTc6XFx0fVxcbjIzOTg6XFx0XFxuMjM5OTpcXHR2b2lkIG1tODF4X21hY191bnJlZ2lzdGVyKHN0cnVjdCBtbTgxeCAqbW9ycylcXG4yNDAwOlxcdHtcXG4yNDAxOlxcdFxcdG1tODF4X3BzX2Rpc2FibGUobW9ycyk7XFxuMjQwMjpcXHRcXHRtbTgxeF9yY19kZWluaXQobW9ycyk7XFxuMjQwMzpcXHRcXHRtbTgxeF9tYWNfaHdfc2Nhbl9kZXN0cm95KG1vcnMpO1xcbjI0MDQ6XFx0XFxuMjQwNTpcXHRcXHRpZWVlODAyMTFfc3RvcF9xdWV1ZXMobW9ycy1cXHUwMDNlaHcpO1xcbjI0MDY6XFx0XFx0aWVlZTgwMjExX3VucmVnaXN0ZXJfaHcobW9ycy1cXHUwMDNlaHcpO1xcbjI0MDc6XFx0XFxuMjQwODpcXHRcXHRtbTgxeF9oaWZfZmx1c2hfdHhfZGF0YShtb3JzKTtcXG4yNDA5OlxcdFxcdG1tODF4X2hpZl9mbHVzaF9jbWRzKG1vcnMpO1xcbjI0MTA6XFx0XFx0bW04MXhfc3RhbGVfdHhfc3RhdHVzX3RpbWVyX2ZpbmlzaChtb3JzKTtcXG4yNDExOlxcdFxcdG1tODF4X3BzX2ZpbmlzaChtb3JzKTtcXG4yNDEyOlxcdFxcbjI0MTM6XFx0XFx0a2ZyZWUobW9ycy1cXHUwMDNlbWNhc3RfZmlsdGVyKTtcXG4yNDE0OlxcdH1cXG4yNDE1OlxcdFxcbjI0MTY6XFx0c3RydWN0IG1tODF4ICptbTgxeF9tYWNfYWxsb2Moc2l6ZV90IHByaXZfc2l6ZSwgc3RydWN0IGRldmljZSAqZGV2KVxcbjI0MTc6XFx0e1xcbjI0MTg6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9odyAqaHc7XFxuMjQxOTpcXHRcXHRzdHJ1Y3QgbW04MXggKm1vcnM7XFxuMjQyMDpcXHRcXG4yNDIxOlxcdFxcdGh3ID0gaWVlZTgwMjExX2FsbG9jX2h3KHNpemVvZigqbW9ycykgKyBwcml2X3NpemUsIFxcdTAwMjZtbTgxeF9vcHMpO1xcbjI0MjI6XFx0XFx0aWYgKCFodykge1xcbjI0MjM6XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJpZWVlODAyMTFfYWxsb2NfaHcgZmFpbGVkXFxcXHJcXFxcblxcXCIpO1xcbjI0MjQ6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMjQyNTpcXHRcXHR9XFxuMjQyNjpcXHRcXG4yNDI3OlxcdFxcdFNFVF9JRUVFODAyMTFfREVWKGh3LCBkZXYpO1xcbjI0Mjg6XFx0XFx0bWVtc2V0KGh3LVxcdTAwM2Vwcml2LCAwLCBzaXplb2YoKm1vcnMpKTtcXG4yNDI5OlxcdFxcbjI0MzA6XFx0XFx0bW9ycyA9IGh3LVxcdTAwM2Vwcml2O1xcbjI0MzE6XFx0XFx0bW9ycy1cXHUwMDNlaHcgPSBodztcXG4yNDMyOlxcdFxcdG1vcnMtXFx1MDAzZWRldiA9IGRldjtcXG4yNDMzOlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNm1vcnMtXFx1MDAzZWNtZF9sb2NrKTtcXG4yNDM0OlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNm1vcnMtXFx1MDAzZWNtZF93YWl0KTtcXG4yNDM1OlxcdFxcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXFx1MDAyNm1vcnMtXFx1MDAzZXR4X2VtcHR5X3dhaXRxKTtcXG4yNDM2OlxcdFxcbjI0Mzc6XFx0XFx0cmV0dXJuIG1vcnM7XFxuMjQzODpcXHR9XFxuMjQzOTpcXHRcXG4yNDQwOlxcdHZvaWQgbW04MXhfbWFjX2ZyZWUoc3RydWN0IG1tODF4ICptb3JzKVxcbjI0NDE6XFx0e1xcbjI0NDI6XFx0XFx0aWVlZTgwMjExX2ZyZWVfaHcobW9ycy1cXHUwMDNlaHcpO1xcbjI0NDM6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNzowNTo0NC4wODM1NjExNDlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5MTI5NTY3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBJbml0aWFsaXphdGlvbiBTZXF1ZW5jZSoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgYG1tODF4X2Z3X2luaXRgIHdhcyBhbHdheXMgY2FsbGVkIGRpcmVjdGx5IGZyb20gYG1tODF4X21hY19yZWdpc3RlcmAsIGJ1dCBJJ20gbm90IHNlZWluZyB0aGF0IGluIHRoZSBjb2RlIGZsb3cuIFRoYXQncyBhIHBvdGVudGlhbCBvdmVyc2lnaHQgb3IgcGVyaGFwcyBhIG1pc3JlbWVtYmVyZWQgZGV0YWlsIG9uIG15IHBhcnQsIG9yIGEgc3VidGxlIGNoYW5nZSBpbiB0aGUgZHJpdmVyIHN0cnVjdHVyZSBJJ20gbm90IGltbWVkaWF0ZWx5IGdyYXNwaW5nLiBJIG5lZWQgdG8gY2xhcmlmeSBob3cgdGhhdCBmaXJtd2FyZSBpbml0aWFsaXphdGlvbiBpcyBhY3R1YWxseSBoYXBwZW5pbmcuXG5cblJpZ2h0LCBsZXQncyBiYWNrIHVwIGFuZCBjaGVjayB0aGUgYnJvYWRlciBpbml0aWFsaXphdGlvbiBzY2hlbWUuIFRoZSBrZXkgc2VlbXMgdG8gbGllIGVsc2V3aGVyZSwgc28gSSdsbCBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiBgbW04MXhfY29yZV9pbml0YC4gVGhhdCdzIHdoZXJlIHRoZSBsb2dpY2FsIGZsb3cgaXMgYmVpbmcgaGFuZGxlZCwgc28gdGhhdCBtdXN0IGJlIHdoZXJlIHRoZSBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NTYzLCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNzowNTo0Ny40NzQ4NjAzNzVaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4NzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY3LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2NzpcXHRpbnQgbW04MXhfY29yZV9pbml0KHN0cnVjdCBtbTgxeCAqbW9ycylcXG4gIDY4OlxcdHtcXG4gIDY5OlxcdFxcdGludCByZXQ7XFxuICA3MDpcXHRcXG4gIDcxOlxcdFxcdHNldF9iaXQoTU04MVhfU1RBVEVfQ0hJUF9VTlJFU1BPTlNJVkUsIFxcdTAwMjZtb3JzLVxcdTAwM2VzdGF0ZV9mbGFncyk7XFxuICA3MjpcXHRcXHRzZXRfYml0KE1NODFYX1NUQVRFX1JFTE9BRF9GV19BRlRFUl9TVEFSVCwgXFx1MDAyNm1vcnMtXFx1MDAzZXN0YXRlX2ZsYWdzKTtcXG4gIDczOlxcdFxcbiAgNzQ6XFx0XFx0bW04MXhfY29yZV9pbml0X21hY19hZGRyKG1vcnMpO1xcbiAgNzU6XFx0XFxuICA3NjpcXHRcXHRyZXQgPSBtbTgxeF9jb3JlX2F0dGFjaF9yZWdzKG1vcnMpO1xcbiAgNzc6XFx0XFx0aWYgKHJldClcXG4gIDc4OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuICA3OTpcXHRcXG4gIDgwOlxcdFxcdG1vcnMtXFx1MDAzZWNoaXBfd3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShcXFwiY2hpcF93cVxcXCIpO1xcbiAgODE6XFx0XFx0aWYgKCFtb3JzLVxcdTAwM2VjaGlwX3dxKVxcbiAgODI6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuICA4MzpcXHRcXG4gIDg0OlxcdFxcdG1vcnMtXFx1MDAzZW5ldF93cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKFxcXCJuZXRfd3FcXFwiKTtcXG4gIDg1OlxcdFxcdGlmICghbW9ycy1cXHUwMDNlbmV0X3dxKSB7XFxuICA4NjpcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbiAgODc6XFx0XFx0XFx0Z290byBlcnJfY2hpcF93cTtcXG4gIDg4OlxcdFxcdH1cXG4gIDg5OlxcdFxcbiAgOTA6XFx0XFx0cmV0ID0gbW04MXhfaGlmX2luaXQobW9ycyk7XFxuICA5MTpcXHRcXHRpZiAocmV0KVxcbiAgOTI6XFx0XFx0XFx0Z290byBlcnJfd3FzO1xcbiAgOTM6XFx0XFxuICA5NDpcXHRcXHRyZXR1cm4gMDtcXG4gIDk1OlxcdFxcbiAgOTY6XFx0ZXJyX3dxczpcXG4gIDk3OlxcdFxcdGZsdXNoX3dvcmtxdWV1ZShtb3JzLVxcdTAwM2VuZXRfd3EpO1xcbiAgOTg6XFx0XFx0ZGVzdHJveV93b3JrcXVldWUobW9ycy1cXHUwMDNlbmV0X3dxKTtcXG4gIDk5OlxcdFxcbiAxMDA6XFx0ZXJyX2NoaXBfd3E6XFxuIDEwMTpcXHRcXHRmbHVzaF93b3JrcXVldWUobW9ycy1cXHUwMDNlY2hpcF93cSk7XFxuIDEwMjpcXHRcXHRkZXN0cm95X3dvcmtxdWV1ZShtb3JzLVxcdTAwM2VjaGlwX3dxKTtcXG4gMTAzOlxcdFxcbiAxMDQ6XFx0XFx0cmV0dXJuIHJldDtcXG4gMTA1OlxcdH1cXG4gMTA2OlxcdEVYUE9SVF9TWU1CT0xfR1BMKG1tODF4X2NvcmVfaW5pdCk7XFxuIDEwNzpcXHRcXG4gMTA4OlxcdGludCBtbTgxeF9jb3JlX3JlZ2lzdGVyKHN0cnVjdCBtbTgxeCAqbW9ycylcXG4gMTA5OlxcdHtcXG4gMTEwOlxcdFxcdHJldHVybiBtbTgxeF9tYWNfcmVnaXN0ZXIobW9ycyk7XFxuIDExMTpcXHR9XFxuIDExMjpcXHRFWFBPUlRfU1lNQk9MX0dQTChtbTgxeF9jb3JlX3JlZ2lzdGVyKTtcXG4gMTEzOlxcdFxcbiAxMTQ6XFx0dm9pZCBtbTgxeF9jb3JlX3VucmVnaXN0ZXIoc3RydWN0IG1tODF4ICptb3JzKVxcbiAxMTU6XFx0e1xcbiAxMTY6XFx0XFx0bW04MXhfbWFjX3VucmVnaXN0ZXIobW9ycyk7XFxuIDExNzpcXHR9XFxuIDExODpcXHRFWFBPUlRfU1lNQk9MX0dQTChtbTgxeF9jb3JlX3VucmVnaXN0ZXIpO1xcbiAxMTk6XFx0XFxuIDEyMDpcXHR2b2lkIG1tODF4X2NvcmVfZGVpbml0KHN0cnVjdCBtbTgxeCAqbW9ycylcXG4gMTIxOlxcdHtcXG4gMTIyOlxcdFxcdG1tODF4X2hpZl9maW5pc2gobW9ycyk7XFxuIDEyMzpcXHRcXHRmbHVzaF93b3JrcXVldWUobW9ycy1cXHUwMDNlbmV0X3dxKTtcXG4gMTI0OlxcdFxcdGRlc3Ryb3lfd29ya3F1ZXVlKG1vcnMtXFx1MDAzZW5ldF93cSk7XFxuIDEyNTpcXHRcXHRmbHVzaF93b3JrcXVldWUobW9ycy1cXHUwMDNlY2hpcF93cSk7XFxuIDEyNjpcXHRcXHRkZXN0cm95X3dvcmtxdWV1ZShtb3JzLVxcdTAwM2VjaGlwX3dxKTtcXG4gMTI3OlxcdH1cXG4gMTI4OlxcdEVYUE9SVF9TWU1CT0xfR1BMKG1tODF4X2NvcmVfZGVpbml0KTtcXG4gMTI5OlxcdFxcbiAxMzA6XFx0dm9pZCBtbTgxeF9jb3JlX2ZyZWUoc3RydWN0IG1tODF4ICptb3JzKVxcbiAxMzE6XFx0e1xcbiAxMzI6XFx0XFx0bW04MXhfbWFjX2ZyZWUobW9ycyk7XFxuIDEzMzpcXHR9XFxuIDEzNDpcXHRFWFBPUlRfU1lNQk9MX0dQTChtbTgxeF9jb3JlX2ZyZWUpO1xcbiAxMzU6XFx0XFxuIDEzNjpcXHRNT0RVTEVfQVVUSE9SKFxcXCJNb3JzZSBNaWNyb1xcXCIpO1xcbiAxMzc6XFx0TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJEcml2ZXIgc3VwcG9ydCBmb3IgTW9yc2UgTWljcm8gTU04MVggY29yZVxcXCIpO1xcbiAxMzg6XFx0TU9EVUxFX0xJQ0VOU0UoXFxcIkR1YWwgQlNEL0dQTFxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNzowNTo0Ny40NzQ5ODE0NzVaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM1ODM3NDE1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZpcm13YXJlIExvYWRpbmcgTG9naWMqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBtbTgxeF9md19pbml0YCBmdW5jdGlvbiBpcyBhY3R1YWxseSB0cmlnZ2VyZWQuIEhtbSwgaXQgbG9va3MgbGlrZSBpdCdzIG9ubHkgY2FsbGVkIHdpdGhpbiBgbW04MXhfbWFjX3Jlc3RhcnRgLiBOb3csIHdoZXJlIGRvZXMgKnRoYXQqIGdldCBjYWxsZWQ/IFJpZ2h0LCBgbW04MXhfbWFjX3Jlc3RhcnRgIGlzIGNhbGxlZCBmcm9tIGBtbTgxeF9tYWNfb3BzX2FkZF9pbnRlcmZhY2VgIGFuZCBhbHNvIGBtbTgxeF9yZWdfbm90aWZpZXJgLiBTbywgYWRkaW5nIGFuIGludGVyZmFjZSByZXN0YXJ0cyB0aGUgTUFDLCBhbmQgKnRoYXQqIGxvYWRzIHRoZSBmaXJtd2FyZS4gTWFrZXMgc2Vuc2UsIHRoYXQncyBhIGNvbXBsZXRlbHkgdmFsaWQgcGF0aC4gVGhpcyBzaG91bGQgYmUgYSByZWFjaGFibGUgcG9pbnQuXG5cblRoZSBwYXRjaCBpdHNlbGYgZm9jdXNlcyBvbiB0aGUgZmlybXdhcmUgcGFyc2luZywgd2hpY2ggbWFrZXMgc2Vuc2UgaWYgdGhlIGxvYWRpbmcgcHJvY2VzcyBpcyBzb2xpZC4gVGhlIGZpcm13YXJlJ3MgbG9hZGVkIHVzaW5nIGByZXF1ZXN0X2Zpcm13YXJlYCwgd2hpY2ggaXMgcHJldHR5IHN0YW5kYXJkLiBOb3csIGNhbiBzeXprYWxsZXIgYWN0dWFsbHkgKmZ1enoqIHRoaXM/IExldCBtZSBzZWXigKYgSSBrbm93IHN5emthbGxlciBoYXMgYHN5el9tb3VudF9pbWFnZWAsIG9yIGNhbiBtb2NrIGByZXF1ZXN0X2Zpcm13YXJlYCBpZiBzdXBwb3J0ZWQuLi4gYnV0LCB3YWl0LCBpdCBjYW4gYWxzbyBqdXN0IGRyb3AgZmlsZXMgaW4gYC9saWIvZmlybXdhcmVgLCBvciB1c2UgdGhlIGZpcm13YXJlIGxvYWRlciBmYWxsYmFjay4gT2gsIHllYWgsIHN5emthbGxlciAqZG9lcyogZnV6eiBmaXJtd2FyZSBsb2FkaW5nIHZpYSBgcmVxdWVzdF9maXJtd2FyZWAsIGJ5IGludGVyY2VwdGluZyBpdCBvciBwcm92aWRpbmcgZmlsZXMgZGlyZWN0bHkuXG5cbkFscmlnaHQsIGxldCdzIG5haWwgZG93biBwcmVjaXNlbHkgd2hpY2ggZnVuY3Rpb25zIGFyZSBiZWluZyBtb2RpZmllZCBoZXJlLiBMb29rcyBsaWtlOiBgbW04MXhfZndfcGFyc2VfaW5mb2AsIGBtbTgxeF9md19sb2FkX2Z3YCwgYG1tODF4X2Z3X3JlYWRfZXh0X2hvc3RfdGFibGVgLCBhbmQgYG1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibGAuXG5cbk5vdyB0aGUgcXVlc3Rpb24gaXMsICppcyogYG1tODF4X2Z3X3BhcnNlX2luZm9gIHJlYWNoYWJsZT8gV2UgbmVlZCB0byB2ZXJpZnkgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA4ODQsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNzowNTo1My44MzMzNTc4NTFaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzMxMDMwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtbTgxeF9md19wYXJzZV9pbmZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYz0yOD1zdGF0aWMgaW50IG1tODF4X2Z3X2dldF9oZWFkZXIoY29uc3QgdTggKmRhdGEsIEVsZjMyX0VoZHIgKmVoZHIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmMtNTQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jOjU1OnN0YXRpYyB2b2lkIG1tODF4X2Z3X3BhcnNlX2luZm8oc3RydWN0IG1tODF4ICptb3JzLCBjb25zdCB1OCAqZGF0YSwgaW50IGxlbmd0aClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmMtNTYte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jPTExMD1zdGF0aWMgaW50IG1tODF4X2Z3X2xvYWRfZncoc3RydWN0IG1tODF4ICptb3JzLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTE4NC1cXHRcXHRcXHQgICAgIHNpemVvZihcXFwiLmZ3X2luZm9cXFwiKSkpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jOjE4NTpcXHRcXHRcXHRtbTgxeF9md19wYXJzZV9pbmZvKG1vcnMsIGZ3LVxcdTAwM2VkYXRhICsgc2hkci5zaF9vZmZzZXQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTE4Ni1cXHRcXHRcXHRcXHRcXHQgICAgc2hkci5zaF9zaXplKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDc6MDU6NTMuOTQwNjc0NzNaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY5NzY3NTU3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBGaXJtd2FyZSBMb2FkaW5nIFNlcXVlbmNlKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGZpcm13YXJlIGxvYWRpbmcgcHJvY2Vzcy4gSSBzZWUgdGhhdCB0aGUgZnVuY3Rpb24gYG1tODF4X2Z3X2xvYWRfZndgIGlzIGRlZmluaXRlbHkgdGhlIG9uZSBpbml0aWF0aW5nIHRoZSBsb2FkLCB0aGF0J3MgY2xlYXIgZW5vdWdoLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3csIGhvdyBpdCdzIGJlaW5nIGZlZCwgd2hlcmUgdGhlIGFjdHVhbCBmaXJtd2FyZSBpbWFnZSBjb21lcyBmcm9tLCBhbmQgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGJlaW5nIGxvYWRlZC4gSSdtIG5vdGluZyB0aGF0LlxuXG5MZXQgbWUgYWxzbyBjaGVjayB3aGF0IGBtbTgxeF9md19yZWFkX2V4dF9ob3N0X3RhYmxlYCBpcyBhYm91dC4gSXMgaXQgcmVhZGluZyBhIGZpbGU/IEZyb20gZXh0ZXJuYWwgbWVtb3J5PyBPciBwZXJoYXBzIGFuIGludGVybmFsIGxvb2t1cCB0YWJsZT8gSXMgdGhhdCB0aGUgdGFibGUgb2YgXCJleHRlcm5hbCBob3N0XCIgaW5mb3JtYXRpb24/IEknbGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSB0aGF0IGZ1bmN0aW9uIHRvIGRldGVybWluZSB3aGF0IGl0IGRvZXMsIHRoZSBuYXR1cmUgb2YgdGhlIGRhdGEgaW52b2x2ZWQgYW5kIGhvdyB0aGlzIHJlbGF0ZXMgdG8gbXkgZmlybXdhcmUgbG9hZGluZyBzZXF1ZW5jZS4gSXQncyBsaWtlbHkgaW52b2x2ZWQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgYnJvYWRlciBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTkzMCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA3OjA1OjU4LjYzODM1MzIzM1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU2MjI4NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW04MXhfZndfcmVhZF9leHRfaG9zdF90YWJsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmM9NDQyPXN0YXRpYyBpbnQgbW04MXhfZndfZ2V0X2hvc3RfdGFibGVfcHRyKHN0cnVjdCBtbTgxeCAqbW9ycylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy00NTctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jOjQ1ODpzdGF0aWMgaW50IG1tODF4X2Z3X3JlYWRfZXh0X2hvc3RfdGFibGUoc3RydWN0IG1tODF4ICptb3JzLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy00NTktXFx0XFx0XFx0XFx0XFx0c3RydWN0IGV4dF9ob3N0X3RibCAqKmV4dF9ob3N0X3RhYmxlKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jPTU2ND1pbnQgbW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsKHN0cnVjdCBtbTgxeCAqbW9ycylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYy01NzAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jOjU3MTpcXHRyZXQgPSBtbTgxeF9md19yZWFkX2V4dF9ob3N0X3RhYmxlKG1vcnMsIFxcdTAwMjZleHRfaG9zdF90YWJsZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTU3Mi1cXHRpZiAocmV0IHx8ICFleHRfaG9zdF90YWJsZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDc6MDU6NTguNzEzOTg0NzkyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMjc1MzAxOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgRmlybXdhcmUgUGFyc2luZyoqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgZmlybXdhcmUgcGFyc2luZywgc3BlY2lmaWNhbGx5IHRoZSBgbW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsYCBmdW5jdGlvbi4gTXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvIHRoZSBwb3RlbnRpYWwgY29tcGxleGl0aWVzLiBUaGlzIGZ1bmN0aW9uIG5hbWUgc3Ryb25nbHkgc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIGFuIGV4dGVuZGVkIGhvc3QgdGFibGUsIG1lYW5pbmcgd2UncmUgbGlrZWx5IHByb2Nlc3NpbmcgbW9yZSB0aGFuIGp1c3QgYmFzaWMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGhvc3Qgc3lzdGVtLiBJdCBjb3VsZCBiZSBwYXJzaW5nIGNvbmZpZ3VyYXRpb25zLCByZXNvdXJjZSBhbGxvY2F0aW9ucywgZGV2aWNlLXNwZWNpZmljIHNldHRpbmdzLi4uIHRoZSBwb3NzaWJpbGl0aWVzIGFyZSB2YXN0LlxuXG5JJ20gc3RhcnRpbmcgdG8gdGhpbmsgYWJvdXQgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzLiBXaGF0IGZvcm1hdCBpcyB0aGlzIGhvc3QgdGFibGUgaW4/IElzIGl0IGEgc3RhbmRhcmQgZm9ybWF0IG9yIHNvbWV0aGluZyBwcm9wcmlldGFyeT8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBiaW5hcnkgYmxvYiwgYSBzdHJ1Y3R1cmVkIHRleHQgZmlsZSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFdoYXQga2luZCBvZiBlcnJvciBoYW5kbGluZyBpcyBpbiBwbGFjZT8gQXJlIHRoZXJlIGNoZWNrc3VtcyBvciBpbnRlZ3JpdHkgY2hlY2tzIHRvIGVuc3VyZSBkYXRhIHZhbGlkaXR5P1xuXG5NeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoaXMgd2lsbCBpbnZvbHZlIGJpdC1sZXZlbCBtYW5pcHVsYXRpb24sIG1lbW9yeSBtYW5hZ2VtZW50IGNvbnNpZGVyYXRpb25zIGlmIHRoZSB0YWJsZSBpcyBsYXJnZSwgYW5kIHBvdGVudGlhbGx5IGRlYWxpbmcgd2l0aCBlbmRpYW5uZXNzIGlzc3VlcyBkZXBlbmRpbmcgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuIEnigJlsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjYWxsIHdpdGhpbiB0aGUgbGFyZ2VyIGZpcm13YXJlIGltYWdlIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGluZm9ybWF0aW9uIGlzIHVzZWQuIFRoaXMga2luZCBvZiBwYXJzaW5nIGZ1bmN0aW9uIGlzIHdoZXJlIHZ1bG5lcmFiaWxpdGllcyBsaWtlIGJ1ZmZlciBvdmVyZmxvd3Mgb3IgZm9ybWF0IHN0cmluZyBidWdzIHRlbmQgdG8gaGlkZSwgc28gSSdtIGFscmVhZHkgbWVudGFsbHkgcHJlcGFyaW5nIHRvIHNjcnV0aW5pemUgdGhlIGNvZGUgZm9yIHRob3NlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjU2MywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA3OjA2OjAyLjc0MTUxNzEzMloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwNjA3NDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmM9NTU0PXN0YXRpYyB2b2lkIG1tODF4X2Z3X3VwZGF0ZV92YWxpZGF0ZV9za2JfY2hlY2tzdW0oXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmMtNTYzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYzo1NjQ6aW50IG1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibChzdHJ1Y3QgbW04MXggKm1vcnMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTU2NS17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3Lmg9MTQwPWludCBtbTgxeF9md19pbml0KHN0cnVjdCBtbTgxeCAqbW9ycywgYm9vbCByZXNldCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5oOjE0MTppbnQgbW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsKHN0cnVjdCBtbTgxeCAqbW9ycyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5oLTE0Mi1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM9MjEwNz1zdGF0aWMgaW50IG1tODF4X21hY19yZXN0YXJ0KHN0cnVjdCBtbTgxeCAqbW9ycylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjE0Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jOjIxNDg6XFx0cmV0ID0gbW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsKG1vcnMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjE0OS1cXHRpZiAocmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA3OjA2OjAyLjg0MjEzMTMwMVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4Mzc2ODk3OTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKipcblxuT2theSwgc28gSSd2ZSB0cmFjZWQgZG93biBob3cgdGhpcyBgbW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsYCBmdW5jdGlvbiBpcyBjYWxsZWQsIGFuZCBpdCBsb29rcyBsaWtlIGl0J3MgYWxzbyBjYWxsZWQgZnJvbSBgbW04MXhfbWFjX3Jlc3RhcnRgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIHdoaWNoIG1lYW5zIHRoZSBmaXJtd2FyZSBwYXJzaW5nIGxvZ2ljIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGR1cmluZyBydW50aW1lIGFuZCB0aGVyZWZvcmUgYSB2YWxpZCB0YXJnZXQgZm9yIGZ1enppbmcuIEV4Y2VsbGVudCFcblxuTm93LCB3aGljaCBmdW5jdGlvbnMgYXJlIHRoZSBtb3N0IHByb21pc2luZz8gTGV0J3Mgc2VlLi4uIEluaXRpYWxseSwgSSB3YXMgbG9va2luZyBhdCBgbW04MXhfZndfcGFyc2VfaW5mb2AuIEl0J3Mgc3RhdGljLCBzbyBpdCdzIGEgYml0IGxlc3MgYXR0cmFjdGl2ZSBidXQgaXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB3aGVyZSB3ZSdyZSBnb2luZy4gTGV0J3MgZGlnIGRlZXBlci4gSXQgbG9va3MgbGlrZSBpdCdzIGEgd2hpbGUgbG9vcCB3aXRoIGEgc3dpdGNoIHN0YXRlbWVudC4gSXQncyBwcm9iYWJseSBub3QgaW5saW5lZCBiZWNhdXNlIHRoYXQncyBhIGRlY2VudCBzaXplLCBldmVuIHRob3VnaCBpdCdzIHN0YXRpYy4gQmV0dGVyIHRvIHBpdm90IGFuZCBmb2N1cyBvbiBgbW04MXhfZndfbG9hZF9md2Agc2luY2UgaXQgY2FsbHMgYG1tODF4X2Z3X3BhcnNlX2luZm9gLiBcblxuV2FpdCBhIG1pbnV0ZSwgYG1tODF4X2Z3X2luaXRgIGlzICpub3QqIHN0YXRpYywgc28gdGhhdCdzIGRlZmluaXRlbHkgYSBwb2ludCBvZiBpbnRlcmVzdCwgYW5kIGBtbTgxeF9md19wYXJzZV9leHRfaG9zdF90YmxgIGlzIGFsc28gbm9uLXN0YXRpYywgc28gd2UndmUgZ290IGEgY291cGxlIG9mIGdvb2QgbGVhZHMgdGhlcmUhXG5cbk9rYXksIGxldCdzIHByaW9yaXRpemUgYW5kIGludmVzdGlnYXRlIGBtbTgxeF9md19pbml0YCBhbmQgYG1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibGAgYW5kIHNlZSB3aGVyZSB3ZSBhcmUuXG5cbkp1c3QgdG8gYmUgc2FmZSwgSSdsbCBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIHRvIHNlZSBpZiB0aGUgYE1NODFYYCBzeW1ib2wgaXMgZGVmaW5lZC4gR290dGEgY2hlY2sgdGhhdCBvZmYgdGhlIGxpc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMzMzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA3OjA2OjExLjIxOTAzMjM0OVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4NDM1MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNTTgxWFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L0tjb25maWctMi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L0tjb25maWc6Mzpjb25maWcgTU04MVhcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L0tjb25maWctNC1cXHR0cmlzdGF0ZSBcXFwiTW9yc2UgTWljcm8gTU04MXggd2lyZWxlc3MgZGV2aWNlc1xcXCIgaWYgQ09NUElMRV9URVNUXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L0tjb25maWctMTEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9LY29uZmlnOjEyOmNvbmZpZyBNTTgxWF9VU0JcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L0tjb25maWctMTMtXFx0dHJpc3RhdGUgXFxcIk1vcnNlIE1pY3JvIE1NODF4IFVTQiBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9LY29uZmlnLTE5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvS2NvbmZpZzoyMDpjb25maWcgTU04MVhfU0RJT1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvS2NvbmZpZy0yMS1cXHR0cmlzdGF0ZSBcXFwiTW9yc2UgTWljcm8gTU04MXggU0RJTyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNzowNjoxMS4zMjc0NzExNjhaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU5Mzc0NjgyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgTW9kdWxlIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBNTTgxWF9VU0JgIGFuZCBgTU04MVhgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkcmlsbCBkb3duIGludG8gdGhlaXIgaW50ZXJkZXBlbmRlbmNpZXMuIFRoaXMgaXMgYSBjcnVjaWFsIGZpcnN0IHN0ZXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoaWNoIG90aGVyIG1vZHVsZXMsIGRyaXZlcnMsIGxpYnJhcmllcywgb3IgZXZlbiBzcGVjaWZpYyBoYXJkd2FyZSBjb21wb25lbnRzIHRoZXNlIHJlbHkgb24uIEFyZSB3ZSB0YWxraW5nIGFib3V0IGNvcmUga2VybmVsIG1vZHVsZXMsIHVzZXItc3BhY2UgdXRpbGl0aWVzLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZCB3aXRoaW4gb3VyIHByb3ByaWV0YXJ5IHN0YWNrPyBJIG5lZWQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIOKAkyBhIGRlcGVuZGVuY3kgZ3JhcGggcmVhbGx5IOKAkyB0byBzZWUgdGhlIGZ1bGwgc2NvcGUuXG5cblNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0OlxuXG4qICAgKipFeHBsaWNpdCBEZXBlbmRlbmNpZXM6KiogV2hhdCdzIGxpc3RlZCBpbiB0aGUgbWFrZWZpbGVzIG9yIGNvbmZpZ3VyYXRpb24gZmlsZXM/IEFueSBvYnZpb3VzIGByZXF1aXJlc2AgZGlyZWN0aXZlcyBvciBidWlsZCBmbGFncz9cbiogICAqKkltcGxpY2l0IERlcGVuZGVuY2llczoqKiBXaGVyZSBkbyB0aGV5ICp1c2UqIGZ1bmN0aW9uYWxpdHkgdGhhdCBpc24ndCBkaXJlY3RseSBkZWNsYXJlZD8gQXJlIHRoZXJlIHNoYXJlZCByZXNvdXJjZXMgbGlrZSBtZW1vcnkgcmVnaW9ucywgaW50ZXJydXB0IGhhbmRsZXJzLCBvciBkZXZpY2UgcmVnaXN0ZXJzP1xuKiAgICoqVmVyc2lvbmluZyBhbmQgQ29tcGF0aWJpbGl0eToqKiBBcmUgdGhlcmUgdmVyc2lvbiBjb25zdHJhaW50cyBvbiB0aGUgbW9kdWxlcyB0aGV5IGRlcGVuZCBvbj8gV2hhdCBoYXBwZW5zIGlmIGEgZGVwZW5kZW50IG1vZHVsZSBpcyB1cGRhdGVkIG9yIHBhdGNoZWQ/IENvbXBhdGliaWxpdHkgcHJvYmxlbXMgaGVyZSBhcmUgdGhlIHdvcnN0LlxuKiAgICoqSGFyZHdhcmUgQWJzdHJhY3Rpb24gTGF5ZXIgKEhBTCk6KiogSG93IGFic3RyYWN0IGlzIHRoZSBoYXJkd2FyZSBhY2Nlc3M/IEFyZSB0aGV5IHRhbGtpbmcgZGlyZWN0bHkgdG8gcmVnaXN0ZXJzIG9yIHJlbHlpbmcgb24gYSB3ZWxsLWRlZmluZWQgSEFMIHRoYXQgSSdtIGFscmVhZHkgZmFtaWxpYXIgd2l0aD8gVGhpcyBjYW4gZ2l2ZSBtZSBzb21lIGhpbnRzIHRvIHN0YXJ0IHdpdGguXG4qICAgKipFeHRlcm5hbCBMaWJyYXJpZXM6KiogSSdsbCBuZWVkIHRvIGNoZWNrIGZvciBleHRlcm5hbCBsaWJyYXJpZXMgYW5kIHRoZWlyIHZlcnNpb25zLiBBbnkgaXNzdWVzIGluIHRoZSBwYXN0PyBBbnkga25vd24gdnVsbmVyYWJpbGl0aWVzIHRoYXQgY291bGQgYWZmZWN0IHRoZXNlP1xuXG5UaGUgZ29hbCBpcyB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB3aGVyZSBjaGFuZ2VzIGluIGVpdGhlciBgTU04MVhfVVNCYCBvciBgTU04MVhgIGNvdWxkIHByb3BhZ2F0ZSBhbmQgd2hhdCBwb3RlbnRpYWwgaW1wYWN0IHRoZXkgY291bGQgaGF2ZSBvbiB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLiBUaGlzIGJhc2VsaW5lIGtub3dsZWRnZSBpcyBjcml0aWNhbCBmb3IgZWZmaWNpZW50IGRlYnVnZ2luZywgZmVhdHVyZSBpbXBsZW1lbnRhdGlvbiwgYW5kIGFueSBzb3J0IG9mIG1vZGlmaWNhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQyNDgsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNzowNjoxNS45MjEyMjA3NDJaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ1NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0XFxuICAgMzpcXHRjb25maWcgTU04MVhcXG4gICA0OlxcdFxcdHRyaXN0YXRlIFxcXCJNb3JzZSBNaWNybyBNTTgxeCB3aXJlbGVzcyBkZXZpY2VzXFxcIiBpZiBDT01QSUxFX1RFU1RcXG4gICA1OlxcdFxcdGRlcGVuZHMgb24gTUFDODAyMTFcXG4gICA2OlxcdFxcdHNlbGVjdCBGV19MT0FERVJcXG4gICA3OlxcdFxcdHNlbGVjdCBDUkM3XFxuICAgODpcXHRcXHRoZWxwXFxuICAgOTpcXHRcXHQgIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3Igd2lyZWxlc3MgZGV2aWNlcyBiYXNlZFxcbiAgMTA6XFx0XFx0ICBvbiBNb3JzZSBNaWNybyBNTTgxeHggY2hpcHNldHMuXFxuICAxMTpcXHRcXG4gIDEyOlxcdGNvbmZpZyBNTTgxWF9VU0JcXG4gIDEzOlxcdFxcdHRyaXN0YXRlIFxcXCJNb3JzZSBNaWNybyBNTTgxeCBVU0Igc3VwcG9ydFxcXCJcXG4gIDE0OlxcdFxcdGRlcGVuZHMgb24gTUFDODAyMTEgXFx1MDAyNlxcdTAwMjYgVVNCXFxuICAxNTpcXHRcXHRzZWxlY3QgTU04MVhcXG4gIDE2OlxcdFxcdGhlbHBcXG4gIDE3OlxcdFxcdCAgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciB0aGUgVVNCIGludGVyZmFjZSBvZlxcbiAgMTg6XFx0XFx0ICBkZXZpY2VzIHVzaW5nIHRoZSBNb3JzZSBNaWNybyBNTTgxeCBjaGlwc2V0LlxcbiAgMTk6XFx0XFxuICAyMDpcXHRjb25maWcgTU04MVhfU0RJT1xcbiAgMjE6XFx0XFx0dHJpc3RhdGUgXFxcIk1vcnNlIE1pY3JvIE1NODF4IFNESU8gc3VwcG9ydFxcXCJcXG4gIDIyOlxcdFxcdGRlcGVuZHMgb24gTUFDODAyMTEgXFx1MDAyNlxcdTAwMjYgTU1DXFxuICAyMzpcXHRcXHRzZWxlY3QgTU04MVhcXG4gIDI0OlxcdFxcdGhlbHBcXG4gIDI1OlxcdFxcdCAgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciB0aGUgU0RJTyBpbnRlcmZhY2Ugb2ZcXG4gIDI2OlxcdFxcdCAgZGV2aWNlcyB1c2luZyB0aGUgTW9yc2UgTWljcm8gTU04MXggY2hpcHNldC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDc6MDY6MTUuOTIxMzE3MTcyWiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNzkwMTg2OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZC5cblxuKipFbmFibGluZyBVU0IgR2FkZ2V0IFRlc3RpbmcgYW5kIFdMQU4gVmVuZG9yIFN1cHBvcnQqKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcsIHRvIGdldCB0aGlzIFVTQiBnYWRnZXQgdGVzdGluZyBmb3IgdGhlIE1NODFYIHdvcmtpbmcsIHdlIGFic29sdXRlbHkgbmVlZCB0byBlbnN1cmUgYE1NODFYX1VTQmAgaXMgZW5hYmxlZC4gVGhhdCdzIGEgbm8tYnJhaW5lciwgdGhhdCdzIHdoYXQncyBnb2luZyB0byBhbGxvdyB0aGUgc3lzdGVtIHRvIHJlY29nbml6ZSB0aGUgVVNCIGdhZGdldCBmdW5jdGlvbmFsaXR5IG9mIHRoaXMgc3BlY2lmaWMgcGllY2Ugb2YgaGFyZHdhcmUuIEkgY2FuJ3QgZXZlbiAqdGhpbmsqIGFib3V0IHRlc3Rpbmcgd2l0aG91dCB0aGF0LlxuXG5BbmQgdGhlbiwgYWxvbmdzaWRlIHRoYXQsIEknbSBtYWtpbmcgc3VyZSBgV0xBTl9WRU5ET1JfTU9SU0VNSUNST2AgaXMgZW5hYmxlZCB0b28uIEl0J3MgY3J1Y2lhbCB3ZSBkb24ndCBvdmVybG9vayBhbnkgZGVwZW5kZW5jaWVzIG9yIHVuZGVybHlpbmcgdmVuZG9yLXNwZWNpZmljIHJlcXVpcmVtZW50cy4gV2l0aG91dCBlbmFibGluZyB0aGlzIHN1cHBvcnQsIHdlJ3JlIGxpa2VseSBnb2luZyB0byBydW4gaW50byBpc3N1ZXMgd2l0aCB0aGUgd2lyZWxlc3MgY29tcG9uZW50cyB3aGVuIHdlIHN0YXJ0IHRlc3RpbmcuIEl0IGlzIGEgZ29vZCBwcmFjdGljZSB0byBlbnN1cmUgYWxsIHRoZSByZWxldmFudCBwYXJ0cyBvZiB0aGUgc3lzdGVtIGFyZSB1cCBhbmQgcnVubmluZywgdG8gYXZvaWQgdGhlIGZydXN0cmF0aW9uIG9mIHRyb3VibGVzaG9vdGluZyB0aGUgd3JvbmcgdGhpbmdzLiBCZXN0IHRvIGJlIHByZXBhcmVkLCByaWdodD9cblxuXG4iLCJJbnB1dFRva2VucyI6MzUwNTIsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA3OjA2OjIwLjMwMDM0MDI1OFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc1MjMyNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFdMQU5fVkVORE9SX01PUlNFTUlDUk9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9LY29uZmlnOjI6Y29uZmlnIFdMQU5fVkVORE9SX01PUlNFTUlDUk9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL0tjb25maWctMy1cXHRib29sIFxcXCJNb3JzZSBNaWNybyBkZXZpY2VzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNzowNjoyMC4zODc4NzI1MzdaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTkwNTU2ODQ5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1vcnNlIE1pY3JvIEZpcm13YXJlIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGBXTEFOX1ZFTkRPUl9NT1JTRU1JQ1JPYCBhbmQgYE1NODFYX1VTQmAgY29uZmlndXJhdGlvbnMgaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gc3BlY2lmaWMgZnVuY3Rpb25zIHdpdGhpbiB0aGUgTW9yc2UgTWljcm8gZHJpdmVyIHRvIHVuZGVyc3RhbmQgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBmaXJtd2FyZSBsb2FkaW5nIHByb2Nlc3MuIEknbSBzZWVpbmcgdGhhdCBgbW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsYCBhbmQgYG1tODF4X2Z3X2luaXRgIGFyZSBrZXkuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBtbTgxeF9md19sb2FkX2Z3YCwgYF9fbW04MXhfZndfZmxhc2hgLCBhbmQgYG1tODF4X2Z3X2ZsYXNoYC4gSXQgbG9va3MgbGlrZSBgbW04MXhfZndfbG9hZF9md2AgaXMgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZywgYnV0IGl0J3MgY2FsbGVkIGJ5IGBfX21tODF4X2Z3X2ZsYXNoYCwgd2hpY2ggaXMgdGhlbiBjYWxsZWQgYnkgYG1tODF4X2Z3X2ZsYXNoYCwgYW5kIGZpbmFsbHksIHRoYXQgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGBtbTgxeF9md19pbml0YC4gU2luY2UgYG1tODF4X2Z3X2luaXRgIGlzIGF0IHRoZSBjb3JlIG9mIHRoaXMgY2hhaW4sIGl0IGxvb2tzIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIGNhbiBxdWlja2x5IHNlZSB0aGF0IGBtbTgxeF9md19wYXJzZV9leHRfaG9zdF90YmxgIGlzIG5vdCBzdGF0aWMuXG5cbkknbSBjb25maXJtaW5nIHRoYXQgYG1tODF4X2Z3X2luaXRgIGlzIG5vbi1zdGF0aWMgYXMgd2VsbC4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYG1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibGAgaXMgZGVmaW5pdGVseSBub24tc3RhdGljLCBhbmQgYWxzbyB0aGF0IGBtbTgxeF9md19pbml0YCBpcywgdG9vLlxuXG5Ob3cgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBhY3R1YWwgY29kZSBmb3IgYG1tODF4X2Z3X2luaXRgLiBJJ2xsIGZpbmQgaXQgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuY2AgYW5kIHN0YXJ0IGRpZ2dpbmcgZGVlcGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTQ0OSwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNzowNjoyNi4yOTM0NDUwOTlaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwNjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MTksXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MTk6XFx0aW50IG1tODF4X2Z3X2luaXQoc3RydWN0IG1tODF4ICptb3JzLCBib29sIHJlc2V0KVxcbiA3MjA6XFx0e1xcbiA3MjE6XFx0XFx0aW50IHJldDtcXG4gNzIyOlxcdFxcdGludCBib2FyZF9pZDtcXG4gNzIzOlxcdFxcdGNoYXIgKmJjZl9wYXRoID0gTlVMTDtcXG4gNzI0OlxcdFxcdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncgPSBOVUxMO1xcbiA3MjU6XFx0XFx0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpiY2YgPSBOVUxMO1xcbiA3MjY6XFx0XFxuIDcyNzpcXHRcXHRib2FyZF9pZCA9IG1tODF4X2h3X290cF9nZXRfYm9hcmRfdHlwZShtb3JzKTtcXG4gNzI4OlxcdFxcbiA3Mjk6XFx0XFx0aWYgKCFtbTgxeF9od19vdHBfdmFsaWRfYm9hcmRfdHlwZShib2FyZF9pZCkpIHtcXG4gNzMwOlxcdFxcdFxcdGRldl9lcnIobW9ycy1cXHUwMDNlZGV2LFxcbiA3MzE6XFx0XFx0XFx0XFx0XFxcIk9UUCBub3Qgc2V0LCB1bmFibGUgdG8gZGV0ZXJtaW5lIEJDRiB0byB1c2VcXFwiKTtcXG4gNzMyOlxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuIDczMzpcXHRcXHRcXHRnb3RvIG91dDtcXG4gNzM0OlxcdFxcdH1cXG4gNzM1OlxcdFxcbiA3MzY6XFx0XFx0ZGV2X2RiZyhtb3JzLVxcdTAwM2VkZXYsIFxcXCJVc2luZyBib2FyZCB0eXBlIDB4JTA0eCBmcm9tIE9UUFxcXCIsIGJvYXJkX2lkKTtcXG4gNzM3OlxcdFxcbiA3Mzg6XFx0XFx0cmV0ID0gbW04MXhfZndfcmVxdWVzdChtb3JzLCBcXHUwMDI2ZncpO1xcbiA3Mzk6XFx0XFx0aWYgKHJldClcXG4gNzQwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA3NDE6XFx0XFxuIDc0MjpcXHRcXHRiY2ZfcGF0aCA9IGthc3ByaW50ZihHRlBfS0VSTkVMLFxcbiA3NDM6XFx0XFx0XFx0XFx0ICAgICBNTTgxWF9GV19ESVJcXG4gNzQ0OlxcdFxcdFxcdFxcdCAgICAgXFxcIi92JXUvYmNmX2JvYXJkdHlwZV8lMDR4XFxcIiBNTTgxWF9GV19FWFQsXFxuIDc0NTpcXHRcXHRcXHRcXHQgICAgIG1vcnMtXFx1MDAzZWZ3X21ham9yLCBib2FyZF9pZCk7XFxuIDc0NjpcXHRcXHRpZiAoIWJjZl9wYXRoKSB7XFxuIDc0NzpcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbiA3NDg6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDc0OTpcXHRcXHR9XFxuIDc1MDpcXHRcXG4gNzUxOlxcdFxcdHJldCA9IHJlcXVlc3RfZmlybXdhcmUoXFx1MDAyNmJjZiwgYmNmX3BhdGgsIG1vcnMtXFx1MDAzZWRldik7XFxuIDc1MjpcXHRcXHRpZiAocmV0KSB7XFxuIDc1MzpcXHRcXHRcXHRpZiAocmV0ID09IC1FTk9FTlQpXFxuIDc1NDpcXHRcXHRcXHRcXHRkZXZfZXJyKG1vcnMtXFx1MDAzZWRldiwgXFxcIkJDRiAlcyBub3QgZm91bmRcXFxcblxcXCIsIGJjZl9wYXRoKTtcXG4gNzU1OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA3NTY6XFx0XFx0fVxcbiA3NTc6XFx0XFxuIDc1ODpcXHRcXHRkZXZfaW5mbyhtb3JzLVxcdTAwM2VkZXYsIFxcXCJMb2FkZWQgQkNGIGZyb20gJXMsIHNpemUgJXp1LCBjcmMzMiAweCUwOHhcXFxcblxcXCIsXFxuIDc1OTpcXHRcXHRcXHQgYmNmX3BhdGgsIGJjZi1cXHUwMDNlc2l6ZSwgYmluYXJ5X2NyYyhiY2YpKTtcXG4gNzYwOlxcdFxcbiA3NjE6XFx0XFx0cmV0ID0gbW04MXhfZndfZmxhc2gobW9ycywgZncsIGJjZiwgcmVzZXQpO1xcbiA3NjI6XFx0XFx0aWYgKHJldCkge1xcbiA3NjM6XFx0XFx0XFx0ZGV2X2Vycihtb3JzLVxcdTAwM2VkZXYsIFxcXCJmYWlsZWQgdG8gZmxhc2ggZmlybXdhcmU6ICVkXFxcIiwgcmV0KTtcXG4gNzY0OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA3NjU6XFx0XFx0fVxcbiA3NjY6XFx0XFxuIDc2NzpcXHRcXHRyZXQgPSBtbTgxeF9md19nZXRfZmxhZ3MobW9ycyk7XFxuIDc2ODpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDc6MDY6MjYuMjkzNTg4NTU5WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjI3NTUxNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKkZvY3VzaW5nIG9uIEZpcm13YXJlIEluaXRpYWxpemF0aW9uIGFuZCBUYWJsZSBQYXJzaW5nKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHdoZXJlIHRvIGRpZyBpbnRvIHRoaXMgZmlybXdhcmUgaW5pdGlhbGl6YXRpb24uIGBtbTgxeF9md19pbml0YCBzZWVtcyBsaWtlIGEgc29saWQgZW50cnkgcG9pbnQsIGFuZCB3b3J0aCBhIGRlZXBlciBkaXZlIHRvIHNlZSBob3cgdGhlIG92ZXJhbGwgc3lzdGVtIGdldHMgc3RhcnRlZC4gSSdtIGFsc28gcmVhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGhhbmRsZXMgZXh0ZXJuYWwgaG9zdCB0YWJsZXMuIFRoYXQncyB3aHkgSSdtIG5vdyBob25pbmcgaW4gb24gYG1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibGAuIEdpdmVuIHRoZSBuYW1lLCBJJ20gZ3Vlc3NpbmcgaXQncyByZXNwb25zaWJsZSBmb3IgaW50ZXJwcmV0aW5nIGNvbmZpZ3VyYXRpb24gZGF0YSBwYXNzZWQgaW4gZnJvbSB0aGUgaG9zdCBzaWRlLCBwcm9iYWJseSBkZWZpbmluZyBwYXJhbWV0ZXJzIG9yIGNvbmZpZ3VyYXRpb25zIHNwZWNpZmljIHRvIHRoaXMgbW9kdWxlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgdG8gc2VlIHdoYXQga2luZCBvZiB0YWJsZSBpdCBoYW5kbGVzLCBob3cgaXQncyB2YWxpZGF0ZWQsIGFuZCBob3cgaXQgaXMgdXNlZC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBtbTgxeF9md19wYXJzZV9leHRfaG9zdF90YmxgIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmNgIHRvIHVuZGVyc3RhbmQgdGhpcyBwcm9jZXNzIGluIGRldGFpbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY5NDksIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA3OjA2OjMwLjAxNjM0Njk3MloiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzAzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU2NCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU2NDpcXHRpbnQgbW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsKHN0cnVjdCBtbTgxeCAqbW9ycylcXG4gNTY1OlxcdHtcXG4gNTY2OlxcdFxcdGludCByZXQ7XFxuIDU2NzpcXHRcXHR1OCAqaGVhZDtcXG4gNTY4OlxcdFxcdHU4ICplbmQ7XFxuIDU2OTpcXHRcXHRzdHJ1Y3QgZXh0X2hvc3RfdGJsICpleHRfaG9zdF90YWJsZSA9IE5VTEw7XFxuIDU3MDpcXHRcXG4gNTcxOlxcdFxcdHJldCA9IG1tODF4X2Z3X3JlYWRfZXh0X2hvc3RfdGFibGUobW9ycywgXFx1MDAyNmV4dF9ob3N0X3RhYmxlKTtcXG4gNTcyOlxcdFxcdGlmIChyZXQgfHwgIWV4dF9ob3N0X3RhYmxlKVxcbiA1NzM6XFx0XFx0XFx0Z290byBleGl0O1xcbiA1NzQ6XFx0XFxuIDU3NTpcXHRcXHQvKiBQYXJzZSB0aGUgVExWcyAqL1xcbiA1NzY6XFx0XFx0aGVhZCA9IGV4dF9ob3N0X3RhYmxlLVxcdTAwM2VleHRfaG9zdF90YWJsZV9kYXRhX3RsdnM7XFxuIDU3NzpcXHRcXHRlbmQgPSAoKHU4ICopZXh0X2hvc3RfdGFibGUpICtcXG4gNTc4OlxcdFxcdCAgICAgIGxlMzJfdG9fY3B1KGV4dF9ob3N0X3RhYmxlLVxcdTAwM2VleHRfaG9zdF90YmxfbGVuZ3RoKTtcXG4gNTc5OlxcdFxcbiA1ODA6XFx0XFx0d2hpbGUgKGVuZCAtIGhlYWQgXFx1MDAzZT0gKHB0cmRpZmZfdClzaXplb2Yoc3RydWN0IGV4dF9ob3N0X3RibF90bHZfaGRyKSkge1xcbiA1ODE6XFx0XFx0XFx0c3RydWN0IGV4dF9ob3N0X3RibF90bHZfaGRyICpoZHIgPVxcbiA1ODI6XFx0XFx0XFx0XFx0KHN0cnVjdCBleHRfaG9zdF90YmxfdGx2X2hkciAqKWhlYWQ7XFxuIDU4MzpcXHRcXHRcXHR1MTYgdGx2X2xlbiA9IGxlMTZfdG9fY3B1KGhkci1cXHUwMDNlbGVuZ3RoKTtcXG4gNTg0OlxcdFxcbiA1ODU6XFx0XFx0XFx0aWYgKHRsdl9sZW4gXFx1MDAzYyBzaXplb2YoKmhkcikgfHwgdGx2X2xlbiBcXHUwMDNlIGVuZCAtIGhlYWQpXFxuIDU4NjpcXHRcXHRcXHRcXHRicmVhaztcXG4gNTg3OlxcdFxcbiA1ODg6XFx0XFx0XFx0c3dpdGNoIChsZTE2X3RvX2NwdShoZHItXFx1MDAzZXRhZykpIHtcXG4gNTg5OlxcdFxcdFxcdGNhc2UgTU04MVhfRldfSE9TVF9UQUJMRV9UQUdfUzFHX0NBUEFCSUxJVElFUzoge1xcbiA1OTA6XFx0XFx0XFx0XFx0c3RydWN0IGV4dF9ob3N0X3RibF9zMWdfY2FwcyAqY2FwcyA9ICh2b2lkICopaGRyO1xcbiA1OTE6XFx0XFxuIDU5MjpcXHRcXHRcXHRcXHRpZiAodGx2X2xlbiBcXHUwMDNlPSBzaXplb2YoKmNhcHMpKVxcbiA1OTM6XFx0XFx0XFx0XFx0XFx0bW04MXhfZndfdXBkYXRlX2NhcGFiaWxpdGllcyhtb3JzLCBjYXBzKTtcXG4gNTk0OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA1OTU6XFx0XFx0XFx0fVxcbiA1OTY6XFx0XFx0XFx0Y2FzZSBNTTgxWF9GV19IT1NUX1RBQkxFX1RBR19JTlNFUlRfU0tCX0NIRUNLU1VNOiB7XFxuIDU5NzpcXHRcXHRcXHRcXHRzdHJ1Y3QgZXh0X2hvc3RfdGJsX2luc2VydF9za2JfY2hlY2tzdW0gKmNzdW0gPVxcbiA1OTg6XFx0XFx0XFx0XFx0XFx0KHZvaWQgKiloZHI7XFxuIDU5OTpcXHRcXG4gNjAwOlxcdFxcdFxcdFxcdGlmICh0bHZfbGVuIFxcdTAwM2U9IHNpemVvZigqY3N1bSkpXFxuIDYwMTpcXHRcXHRcXHRcXHRcXHRtbTgxeF9md191cGRhdGVfdmFsaWRhdGVfc2tiX2NoZWNrc3VtKG1vcnMsXFxuIDYwMjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBjc3VtKTtcXG4gNjAzOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA2MDQ6XFx0XFx0XFx0fVxcbiA2MDU6XFx0XFx0XFx0Y2FzZSBNTTgxWF9GV19IT1NUX1RBQkxFX1RBR19ZQVBTX1RBQkxFOiB7XFxuIDYwNjpcXHRcXHRcXHRcXHRzdHJ1Y3QgZXh0X2hvc3RfdGJsX3lhcHNfdGFibGUgKnlhcHMgPSAodm9pZCAqKWhkcjtcXG4gNjA3OlxcdFxcbiA2MDg6XFx0XFx0XFx0XFx0aWYgKHRsdl9sZW4gXFx1MDAzZT0gc2l6ZW9mKCp5YXBzKSlcXG4gNjA5OlxcdFxcdFxcdFxcdFxcdG1tODF4X3lhcHNfaHdfcmVhZF90YWJsZShtb3JzLFxcbiA2MTA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZ5YXBzLVxcdTAwM2V5YXBzX3RhYmxlKTtcXG4gNjExOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA2MTI6XFx0XFx0XFx0fVxcbiA2MTM6XFx0XFx0XFx0ZGVmYXVsdDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDc6MDY6MzAuMDE2NDc5MDQyWiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MTU2ODk1NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24gYW5kIERlcGVuZGVuY3kgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnMsIGBtbTgxeF9md19pbml0YCBhbmQgYG1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibGAuIFRoZXkncmUgbm9uLXN0YXRpYywgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgdGhlbSBpbnRlcmVzdGluZyB0YXJnZXRzIGZvciBmdXp6aW5nLiBTZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuTm93LCBiZWZvcmUgSSBkaXZlIGluIHRvbyBkZWVwLCBsZXQncyBzZWUgd2hhdCBjb25maWdzIGFyZSByZXF1aXJlZCB0byBnZXQgdGhlc2UgZnVuY3Rpb25zIGJ1aWx0IGFuZCBydW5uaW5nIGNvcnJlY3RseS4gSSBzZWUgYFdMQU5fVkVORE9SX01PUlNFTUlDUk9gIGFuZCBgTU04MVhfVVNCYCBtZW50aW9uZWQuIEFoLCByaWdodCwgYE1NODFYYCBpcyBzZWxlY3RlZCBieSBgTU04MVhfVVNCYCwgc28gYE1NODFYYCBpcyBpbmRpcmVjdGx5IHJlbGV2YW50LlxuXG5MZXQgbWUgY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBmb3IgYE1NODFYYC4gSXQgbG9va3MgbGlrZSBpdCBuZWVkcyBgTUFDODAyMTFgLiBPa2F5LCBzbyBgTUFDODAyMTFgIGlzIGRlZmluaXRlbHkgZXNzZW50aWFsLlxuXG5CdXQgaXMgdGhhdCAqYWxsKj8gTGV0IG1lIGRvdWJsZS1jaGVjay4gT2theSwgYE1NODFYX1VTQmAgaXRzZWxmIGRlcGVuZHMgb24gYE1BQzgwMjExIFx1MDAyNlx1MDAyNiBVU0JgLiBTbywganVzdCB0byBiZSBhYnNvbHV0ZWx5IHRob3JvdWdoLCBJJ2xsIG5lZWQgdG8gaW5jbHVkZSBgV0xBTl9WRU5ET1JfTU9SU0VNSUNST2AgYW5kIGBNTTgxWF9VU0JgIGFsb25nIHdpdGggdGhlaXIgZGVwZW5kZW5jaWVzLlxuXG5BbHJpZ2h0LCBsZXQgbWUganVzdCBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIG9idmlvdXMuIExldCdzIGRpZyBpbnRvIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL0tjb25maWdgIGFuZCB2ZXJpZnkgdGhhdCBJIGhhdmUgZXZlcnl0aGluZy4gTmVlZCB0byBiZSBzdXJlIGJlZm9yZSBJIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgxNzksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNzowNjozNS40MzIxNzA4MDFaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgV0xBTl9WRU5ET1JfTU9SU0VNSUNST1xcbiAgIDM6XFx0XFx0Ym9vbCBcXFwiTW9yc2UgTWljcm8gZGV2aWNlc1xcXCJcXG4gICA0OlxcdFxcdGRlZmF1bHQgeVxcbiAgIDU6XFx0XFx0aGVscFxcbiAgIDY6XFx0XFx0ICBJZiB5b3UgaGF2ZSBhIHdpcmVsZXNzIGNhcmQgYmVsb25naW5nIHRvIHRoaXMgY2xhc3MsIHNheSBZLlxcbiAgIDc6XFx0XFxuICAgODpcXHRcXHQgIE5vdGUgdGhhdCB0aGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gZG9lc24ndCBkaXJlY3RseSBhZmZlY3QgdGhlXFxuICAgOTpcXHRcXHQgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGwgdGhlXFxuICAxMDpcXHRcXHQgIHF1ZXN0aW9ucyBhYm91dCB0aGVzZSBjYXJkcy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbCBiZSBhc2tlZCBmb3JcXG4gIDExOlxcdFxcdCAgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxcbiAgMTI6XFx0XFxuICAxMzpcXHRpZiBXTEFOX1ZFTkRPUl9NT1JTRU1JQ1JPXFxuICAxNDpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvS2NvbmZpZ1xcXCJcXG4gIDE1OlxcdGVuZGlmICMgV0xBTl9WRU5ET1JfTU9SU0VNSUNST1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNzowNjozNS40MzIyMzA2NzFaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzY5Njg3NjYxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNb3JzZSBNaWNybyBGdXp6aW5nIFRhcmdldHMqKlxuXG5Pa2F5LCBhZnRlciByZXZpZXdpbmcgdGhlIGRldGFpbHMsIEkndmUgZ290IGEgc29saWQgcGljdHVyZSBvZiB3aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBoZXJlLiBNeSBjb25jbHVzaW9uIGlzIHRoYXQgYFdMQU5fVkVORE9SX01PUlNFTUlDUk9gIGFuZCBgTU04MVhfVVNCYCBhcmUgdGhlIGtleSBjb25maWd1cmF0aW9ucyB3ZSBuZWVkIHRvIGVuYWJsZSBmb3IgdGhpcy4gXG5cbkhlcmXigJlzIHRoZSBicmVha2Rvd24gaW4gbXkgaGVhZDpcblxuKiAgICoqV29ydGhGdXp6aW5nOioqIEFic29sdXRlbHksIHRoaXMgaXMgYSBkZWZpbml0ZSBcInllcy5cIiBXZSd2ZSBnb3QgdnVsbmVyYWJpbGl0aWVzIOKAkyBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBtZW1vcnkgbGVha3Mg4oCTIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGZpcm13YXJlIHBhcnNpbmcgbG9naWMgb2YgdGhlIE1vcnNlIE1pY3JvIG1tODF4IGRyaXZlci4gVGhpcyBpcyBjbGFzc2ljIGZ1enppbmcgdGVycml0b3J5LlxuKiAgICoqRm9jdXNTeW1ib2xzOioqIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGNvbmNlbnRyYXRlIG9uIGBtbTgxeF9md19pbml0YCBhbmQgYG1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibGAuIFRob3NlIHNlZW0gdG8gYmUgd2hlcmUgdGhlIGJ1Z3MgYXJlIGhpZGluZywgYmFzZWQgb24gdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBwYXRjaCBhbmQgdGhlIHZ1bG5lcmFibGUgY29kZS4gVGhleSdyZSBjbGVhcmx5IGNyaXRpY2FsIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGZpcm13YXJlIHBhcnNpbmcgcHJvY2Vzcy5cbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogQWdhaW4sIGBXTEFOX1ZFTkRPUl9NT1JTRU1JQ1JPYCBhbmQgYE1NODFYX1VTQmAgYXJlIHdoYXQncyBnb2luZyB0byBhbGxvdyB1cyB0byB0cmlnZ2VyIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLiBUaGUgVVNCIGludGVyZmFjZSBpcyB0aGUgcm91dGUgZm9yIGludGVyYWN0aW9uIGhlcmUsIGFuZCB0aGUgdmVuZG9yIGZsYWcgYWxsb3dzIHVzIHRvIGVuZ2FnZS5cbiogICAqKlJlYXNvbmluZzoqKiBUaGUgZHJpdmVyIGhhbmRsZXMgZmlybXdhcmUgcGFyc2luZywgYW5kIHRoYXTigJlzIHdoZXJlIHRoZSBidWdzIGFyZS4gVGhlIFVTQiBpbnRlcmZhY2UsIHdoZXRoZXIgdGhyb3VnaCBhIGR1bW15IEhDRCBvciBzeXprYWxsZXIsIHByb3ZpZGVzIHRoZSBhdHRhY2sgc3VyZmFjZS4gVGhpcyBjb2RlIGlzIHRyaWdnZXJlZCBkdXJpbmcgZGV2aWNlIHByb2JpbmcgYW5kIGludGVyZmFjZSBzdGFydHVwLCBtYWtpbmcgaXQgcmVhY2hhYmxlIHdpdGggdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb25zLiBJdOKAmXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCDigJMgYnJpbmcgdGhlIGRldmljZSB1cCwgbG9hZCB0aGUgZmlybXdhcmUgKHdoaWNoIGlzIHRoZSBwYXJzaW5nIHRhcmdldCksIGFuZCBsZXQgdGhlIGZ1enppbmcgYmVnaW4uIFdlIGhhdmUgYSBjbGVhciBwYXRoIHRvIHRyaWdnZXIgdGhlIHZ1bG5lcmFibGUgY29kZSwgc28gSSdtIG9wdGltaXN0aWMgYWJvdXQgZmluZGluZyBzb21lIG5ldyBidWdzIHdpdGggdGhlIGZ1enppbmcgYXBwcm9hY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4OTkyLCJPdXRwdXRUb2tlbnMiOjE1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA3OjA2OjQzLjEyOTEwOTg5N1oiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NTY0OTk5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiV0xBTl9WRU5ET1JfTU9SU0VNSUNST1wiLFxuICAgIFwiTU04MVhfVVNCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibW04MXhfZndfaW5pdFwiLFxuICAgIFwibW04MXhfZndfcGFyc2VfZXh0X2hvc3RfdGJsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgbWVtb3J5IGxlYWtzIGluIHRoZSBmaXJtd2FyZSBwYXJzaW5nIGxvZ2ljIG9mIHRoZSBNb3JzZSBNaWNybyBtbTgxeCBkcml2ZXIuIFRoZSBkcml2ZXIgY2FuIGJlIHRlc3RlZCB2aWEgdGhlIFVTQiBpbnRlcmZhY2UgdXNpbmcgYSBkdW1teSBIQ0Qgb3Igc3l6a2FsbGVyJ3MgVVNCIGZ1enppbmcgY2FwYWJpbGl0aWVzLiBUaGUgZmlybXdhcmUgbG9hZGluZyBhbmQgcGFyc2luZyBsb2dpYyBpcyByZWFjaGFibGUgd2hlbiB0aGUgZGV2aWNlIGlzIHByb2JlZCBhbmQgdGhlIGludGVyZmFjZSBpcyBicm91Z2h0IHVwLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIldMQU5fVkVORE9SX01PUlNFTUlDUk9cIixcbiAgICBcIk1NODFYX1VTQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1tODF4X2Z3X2luaXRcIixcbiAgICBcIm1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIG1lbW9yeSBsZWFrcyBpbiB0aGUgZmlybXdhcmUgcGFyc2luZyBsb2dpYyBvZiB0aGUgTW9yc2UgTWljcm8gbW04MXggZHJpdmVyLiBUaGUgZHJpdmVyIGNhbiBiZSB0ZXN0ZWQgdmlhIHRoZSBVU0IgaW50ZXJmYWNlIHVzaW5nIGEgZHVtbXkgSENEIG9yIHN5emthbGxlcidzIFVTQiBmdXp6aW5nIGNhcGFiaWxpdGllcy4gVGhlIGZpcm13YXJlIGxvYWRpbmcgYW5kIHBhcnNpbmcgbG9naWMgaXMgcmVhY2hhYmxlIHdoZW4gdGhlIGRldmljZSBpcyBwcm9iZWQgYW5kIHRoZSBpbnRlcmZhY2UgaXMgYnJvdWdodCB1cC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDc6MDY6NDMuNDE0NzY5NzM0WiIsIlNlcSI6NTEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Nzc5ODA4NzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDc6MDY6NDMuNDE1Nzg2MTc0WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg3Nzg3ODc3MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIG1lbW9yeSBsZWFrcyBkdXJpbmcgZmlybXdhcmUgcGFyc2luZy4gVGhlIGJvdW5kcyBjaGVja3MgcHJldmVudCByZWFkaW5nIHBhc3QgdGhlIGVuZCBvZiBhbGxvY2F0ZWQgYnVmZmVycyBjb250YWluaW5nIGZpcm13YXJlIGRhdGEsIHdoaWNoIGFyZSBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2VzLiBLQVNBTiBpcyBmdWxseSBjYXBhYmxlIG9mIGRldGVjdGluZyB0aGVzZSBvdXQtb2YtYm91bmRzIHJlYWRzLCBhbmQga21lbWxlYWsgZGV0ZWN0cyB0aGUgZml4ZWQgbWVtb3J5IGxlYWtzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIGNvbnRyb2wgZmxvdywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDA2NjA3MDVlZDZmY2E4NzNhMDI5ZWUzYzI1MmZjM2ZiODhhMTU0YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDA3OjA0OjQzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jXG5pbmRleCBkNmQyYWQwODZjMzI4Li41MGZhOWU0YjVmODAzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmNcbkBAIC01NCwyMSArNTQsMjkgQEAgc3RhdGljIGludCBtbTgxeF9md19nZXRfaGVhZGVyKGNvbnN0IHU4ICpkYXRhLCBFbGYzMl9FaGRyICplaGRyKVxuIFxuIHN0YXRpYyB2b2lkIG1tODF4X2Z3X3BhcnNlX2luZm8oc3RydWN0IG1tODF4ICptb3JzLCBjb25zdCB1OCAqZGF0YSwgaW50IGxlbmd0aClcbiB7XG4tXHRjb25zdCBzdHJ1Y3QgbW04MXhfZndfaW5mb190bHYgKnRsdiA9XG4tXHRcdChjb25zdCBzdHJ1Y3QgbW04MXhfZndfaW5mb190bHYgKilkYXRhO1xuK1x0Y29uc3QgdTggKmVuZCA9IGRhdGEgKyBsZW5ndGg7XG4rXHRjb25zdCB1OCAqcG9zID0gZGF0YTtcbitcbitcdHdoaWxlIChlbmQgLSBwb3MgXHUwMDNlPSAocHRyZGlmZl90KXNpemVvZihzdHJ1Y3QgbW04MXhfZndfaW5mb190bHYpKSB7XG4rXHRcdGNvbnN0IHN0cnVjdCBtbTgxeF9md19pbmZvX3RsdiAqdGx2ID1cbitcdFx0XHQoY29uc3Qgc3RydWN0IG1tODF4X2Z3X2luZm9fdGx2ICopcG9zO1xuK1x0XHR1MTYgdGx2X2xlbiA9IGxlMTZfdG9fY3B1KHRsdi1cdTAwM2VsZW5ndGgpO1xuK1xuK1x0XHRwb3MgPSB0bHYtXHUwMDNldmFsO1xuK1x0XHRpZiAodGx2X2xlbiBcdTAwM2UgZW5kIC0gcG9zKVxuK1x0XHRcdGJyZWFrO1xuIFxuLVx0d2hpbGUgKCh1OCAqKXRsdiBcdTAwM2MgKGRhdGEgKyBsZW5ndGgpKSB7XG4gXHRcdHN3aXRjaCAobGUxNl90b19jcHUodGx2LVx1MDAzZXR5cGUpKSB7XG4gXHRcdGNhc2UgTU04MVhfRldfSU5GT19UTFZfQkNGX0FERFI6XG4tXHRcdFx0bW9ycy1cdTAwM2ViY2ZfYWRkcmVzcyA9IGdldF91bmFsaWduZWRfbGUzMih0bHYtXHUwMDNldmFsKTtcbitcdFx0XHRpZiAodGx2X2xlbiBcdTAwM2U9IHNpemVvZihfX2xlMzIpKVxuK1x0XHRcdFx0bW9ycy1cdTAwM2ViY2ZfYWRkcmVzcyA9XG4rXHRcdFx0XHRcdGdldF91bmFsaWduZWRfbGUzMih0bHYtXHUwMDNldmFsKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuLVx0XHR0bHYgPSAoY29uc3Qgc3RydWN0IG1tODF4X2Z3X2luZm9fdGx2ICopKCh1OCAqKXRsdiArXG4tXHRcdFx0XHRcdFx0XHQgbGUxNl90b19jcHUoXG4tXHRcdFx0XHRcdFx0XHRcdCB0bHYtXHUwMDNlbGVuZ3RoKSArXG4tXHRcdFx0XHRcdFx0XHQgc2l6ZW9mKCp0bHYpKTtcbitcbitcdFx0cG9zICs9IHRsdl9sZW47XG4gXHR9XG4gfVxuIFxuQEAgLTExNywxMyArMTI1LDE1IEBAIHN0YXRpYyBpbnQgbW04MXhfZndfbG9hZF9mdyhzdHJ1Y3QgbW04MXggKm1vcnMsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpXG4gXG4gXHRpZiAobW04MXhfZndfZ2V0X2hlYWRlcihmdy1cdTAwM2VkYXRhLCBcdTAwMjZlaGRyKSkge1xuIFx0XHRkZXZfZXJyKG1vcnMtXHUwMDNlZGV2LCBcIldyb25nIGZpbGUgZm9ybWF0XCIpO1xuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0Z290byBvdXRfZnJlZTtcbiBcdH1cbiBcbiBcdGlmIChtbTgxeF9md19nZXRfc2VjdGlvbl9oZWFkZXIoZnctXHUwMDNlZGF0YSwgXHUwMDI2ZWhkciwgXHUwMDI2c2hfc3RydGFiLFxuIFx0XHRcdFx0XHRlaGRyLmVfc2hzdHJuZHgpKSB7XG4gXHRcdGRldl9lcnIobW9ycy1cdTAwM2VkZXYsIFwiSW52YWxpZCBmaXJtd2FyZS4gTWlzc2luZyBzdHJpbmcgdGFibGVcIik7XG4tXHRcdHJldHVybiAtRU5PRU5UO1xuK1x0XHRyZXQgPSAtRU5PRU5UO1xuK1x0XHRnb3RvIG91dF9mcmVlO1xuIFx0fVxuIFxuIFx0c2hfc3RycyA9IChjb25zdCBjaGFyICopZnctXHUwMDNlZGF0YSArIHNoX3N0cnRhYi5zaF9vZmZzZXQ7XG5AQCAtMTYwLDcgKzE3MCw3IEBAIHN0YXRpYyBpbnQgbW04MXhfZndfbG9hZF9mdyhzdHJ1Y3QgbW04MXggKm1vcnMsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpXG4gXHRcdFx0bW04MXhfcmVsZWFzZV9idXMobW9ycyk7XG4gXHRcdFx0aWYgKHN0YXR1cykge1xuIFx0XHRcdFx0cmV0ID0gLUVJTztcbi1cdFx0XHRcdGJyZWFrO1xuK1x0XHRcdFx0Z290byBvdXRfZnJlZTtcbiBcdFx0XHR9XG4gXHRcdH1cbiBcdH1cbkBAIC0xNzksNiArMTg5LDcgQEAgc3RhdGljIGludCBtbTgxeF9md19sb2FkX2Z3KHN0cnVjdCBtbTgxeCAqbW9ycywgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcbiBcdGlmIChlaGRyLmVfZW50cnkpXG4gXHRcdHJldCA9IG1tODF4X2Z3X3NldF9ib290X2FkZHIobW9ycywgZWhkci5lX2VudHJ5KTtcbiBcbitvdXRfZnJlZTpcbiBcdGRldm1fa2ZyZWUobW9ycy1cdTAwM2VkZXYsIGZ3X2J1Zik7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC00OTIsNiArNTAzLDEzIEBAIHN0YXRpYyBpbnQgbW04MXhfZndfcmVhZF9leHRfaG9zdF90YWJsZShzdHJ1Y3QgbW04MXggKm1vcnMsXG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIGV4aXQ7XG4gXG4rXHQvKiBUaGUgdGFibGUgZGVzY3JpYmVzIGl0cyBvd24gbGVuZ3RoOyBpdCBtdXN0IGZpdCB3aGF0IHdhcyByZWFkICovXG4rXHRpZiAobGUzMl90b19jcHUoaG9zdF90YmwtXHUwMDNlZXh0X2hvc3RfdGJsX2xlbmd0aCkgXHUwMDNjIHNpemVvZigqaG9zdF90YmwpIHx8XG4rXHQgICAgbGUzMl90b19jcHUoaG9zdF90YmwtXHUwMDNlZXh0X2hvc3RfdGJsX2xlbmd0aCkgXHUwMDNlIGV4dF9ob3N0X3RibF9sZW4pIHtcbitcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0Z290byBleGl0O1xuK1x0fVxuK1xuIFx0bW04MXhfcmVsZWFzZV9idXMobW9ycyk7XG4gXHQqZXh0X2hvc3RfdGFibGUgPSBob3N0X3RibDtcbiBcdHJldHVybiByZXQ7XG5AQCAtNTU5LDM0ICs1NzcsNDQgQEAgaW50IG1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibChzdHJ1Y3QgbW04MXggKm1vcnMpXG4gXHRlbmQgPSAoKHU4ICopZXh0X2hvc3RfdGFibGUpICtcbiBcdCAgICAgIGxlMzJfdG9fY3B1KGV4dF9ob3N0X3RhYmxlLVx1MDAzZWV4dF9ob3N0X3RibF9sZW5ndGgpO1xuIFxuLVx0d2hpbGUgKGhlYWQgXHUwMDNjIGVuZCkge1xuK1x0d2hpbGUgKGVuZCAtIGhlYWQgXHUwMDNlPSAocHRyZGlmZl90KXNpemVvZihzdHJ1Y3QgZXh0X2hvc3RfdGJsX3Rsdl9oZHIpKSB7XG4gXHRcdHN0cnVjdCBleHRfaG9zdF90YmxfdGx2X2hkciAqaGRyID1cbiBcdFx0XHQoc3RydWN0IGV4dF9ob3N0X3RibF90bHZfaGRyICopaGVhZDtcbitcdFx0dTE2IHRsdl9sZW4gPSBsZTE2X3RvX2NwdShoZHItXHUwMDNlbGVuZ3RoKTtcbitcbitcdFx0aWYgKHRsdl9sZW4gXHUwMDNjIHNpemVvZigqaGRyKSB8fCB0bHZfbGVuIFx1MDAzZSBlbmQgLSBoZWFkKVxuK1x0XHRcdGJyZWFrO1xuIFxuIFx0XHRzd2l0Y2ggKGxlMTZfdG9fY3B1KGhkci1cdTAwM2V0YWcpKSB7XG4tXHRcdGNhc2UgTU04MVhfRldfSE9TVF9UQUJMRV9UQUdfUzFHX0NBUEFCSUxJVElFUzpcbi1cdFx0XHRtbTgxeF9md191cGRhdGVfY2FwYWJpbGl0aWVzKFxuLVx0XHRcdFx0bW9ycywgKHN0cnVjdCBleHRfaG9zdF90YmxfczFnX2NhcHMgKiloZHIpO1xuK1x0XHRjYXNlIE1NODFYX0ZXX0hPU1RfVEFCTEVfVEFHX1MxR19DQVBBQklMSVRJRVM6IHtcbitcdFx0XHRzdHJ1Y3QgZXh0X2hvc3RfdGJsX3MxZ19jYXBzICpjYXBzID0gKHZvaWQgKiloZHI7XG4rXG4rXHRcdFx0aWYgKHRsdl9sZW4gXHUwMDNlPSBzaXplb2YoKmNhcHMpKVxuK1x0XHRcdFx0bW04MXhfZndfdXBkYXRlX2NhcGFiaWxpdGllcyhtb3JzLCBjYXBzKTtcbiBcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0XHRjYXNlIE1NODFYX0ZXX0hPU1RfVEFCTEVfVEFHX0lOU0VSVF9TS0JfQ0hFQ0tTVU06IHtcbitcdFx0XHRzdHJ1Y3QgZXh0X2hvc3RfdGJsX2luc2VydF9za2JfY2hlY2tzdW0gKmNzdW0gPVxuK1x0XHRcdFx0KHZvaWQgKiloZHI7XG4gXG4tXHRcdGNhc2UgTU04MVhfRldfSE9TVF9UQUJMRV9UQUdfSU5TRVJUX1NLQl9DSEVDS1NVTTpcbi1cdFx0XHRtbTgxeF9md191cGRhdGVfdmFsaWRhdGVfc2tiX2NoZWNrc3VtKFxuLVx0XHRcdFx0bW9ycyxcbi1cdFx0XHRcdChzdHJ1Y3QgZXh0X2hvc3RfdGJsX2luc2VydF9za2JfY2hlY2tzdW0gKiloZHIpO1xuK1x0XHRcdGlmICh0bHZfbGVuIFx1MDAzZT0gc2l6ZW9mKCpjc3VtKSlcbitcdFx0XHRcdG1tODF4X2Z3X3VwZGF0ZV92YWxpZGF0ZV9za2JfY2hlY2tzdW0obW9ycyxcbitcdFx0XHRcdFx0XHRcdFx0ICAgICAgY3N1bSk7XG4gXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdFx0Y2FzZSBNTTgxWF9GV19IT1NUX1RBQkxFX1RBR19ZQVBTX1RBQkxFOiB7XG4rXHRcdFx0c3RydWN0IGV4dF9ob3N0X3RibF95YXBzX3RhYmxlICp5YXBzID0gKHZvaWQgKiloZHI7XG4gXG4tXHRcdGNhc2UgTU04MVhfRldfSE9TVF9UQUJMRV9UQUdfWUFQU19UQUJMRTpcbi1cdFx0XHRtbTgxeF95YXBzX2h3X3JlYWRfdGFibGUoXG4tXHRcdFx0XHRtb3JzLCBcdTAwMjYoKHN0cnVjdCBleHRfaG9zdF90YmxfeWFwc190YWJsZSAqKWhkcilcbi1cdFx0XHRcdFx0ICAgICAgIC1cdTAwM2V5YXBzX3RhYmxlKTtcbitcdFx0XHRpZiAodGx2X2xlbiBcdTAwM2U9IHNpemVvZigqeWFwcykpXG4rXHRcdFx0XHRtbTgxeF95YXBzX2h3X3JlYWRfdGFibGUobW9ycyxcbitcdFx0XHRcdFx0XHRcdCBcdTAwMjZ5YXBzLVx1MDAzZXlhcHNfdGFibGUpO1xuIFx0XHRcdGJyZWFrO1xuK1x0XHR9XG4gXHRcdGRlZmF1bHQ6XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcbi1cdFx0aGVhZCArPSBsZTE2X3RvX2NwdShoZHItXHUwMDNlbGVuZ3RoKTtcbi1cdFx0aWYgKCFoZHItXHUwMDNlbGVuZ3RoKVxuLVx0XHRcdGJyZWFrO1xuK1x0XHRoZWFkICs9IHRsdl9sZW47XG4gXHR9XG4gXG4gXHRrZnJlZShleHRfaG9zdF90YWJsZSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNzowNjo0My40MTU3ODgxNjRaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODc3ODc2MTQ2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1vcnNlIE1pY3JvIEZpcm13YXJlIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhbmluZyB1cCBzb21lIGZpcm13YXJlIHBhcnNpbmcgcm91dGluZXMgd2l0aGluIHRoZSBgbW04MXhgIHdpcmVsZXNzIGRyaXZlci4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQncyBhIHN0cmFpZ2h0Zm9yd2FyZCBpbXByb3ZlbWVudCwgcHJpbWFyaWx5IGZvY3VzZWQgb24gaGFyZGVuaW5nIGFnYWluc3QgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gVGhlIGNoYW5nZXMgYXJlIGFsbCBsb2NhbGl6ZWQgd2l0aGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmNgLlxuXG5TcGVjaWZpY2FsbHksIEkgc2VlIGZpeGVzIHRvIGZvdXIgZnVuY3Rpb25zOiBgbW04MXhfZndfcGFyc2VfaW5mb2AsIGBtbTgxeF9md19sb2FkX2Z3YCwgYG1tODF4X2Z3X3JlYWRfZXh0X2hvc3RfdGFibGVgLCBhbmQgYG1tODF4X2Z3X3BhcnNlX2V4dF9ob3N0X3RibGAuIFRoZSBjb3JlIG9mIHRoZSBwYXRjaCBzZWVtcyB0byBiZSBhZGRpbmcgYm91bmRzIGNoZWNraW5nIGR1cmluZyBUTFYgKFR5cGUtTGVuZ3RoLVZhbHVlKSBwYXJzaW5nIHdpdGhpbiB0aGUgZmlybXdhcmUgZGF0YSBhbmQgYWRkcmVzc2luZyBtZW1vcnkgbGVha3MgaW4gdGhlIGZpcm13YXJlIGxvYWRpbmcgcHJvY2Vzcy4gVGhlIG1lbW9yeSBsZWFrIGZpeCBpbiBgbW04MXhfZndfbG9hZF9md2AgaXMgYSBzdGFuZGFyZCBgZ290byBvdXRfZnJlZWAgd2hpY2ggaXMgd2hhdCBJIHdvdWxkIGV4cGVjdC5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGFyZSB3ZSBkZWFsaW5nIHdpdGggYW55ICp1bmluaXRpYWxpemVkKiBtZW1vcnkgZXhwb3N1cmVzPyBJIG5lZWQgdG8gYmUgc3VyZS4gVGhlIHBhdGNoIGl0c2VsZiBpcyB1c2luZyBLQVNBTiB0byBjYXRjaCB0aGUgT09CIHJlYWRzIGFuZCBrbWVtbGVhayB0byBjYXRjaCB0aGUgbWVtb3J5IGxlYWtzLiBUaGUgZGF0YSBpdHNlbGYgc2VlbXMgdG8gY29tZSBmcm9tIHRoZSBmaXJtd2FyZSBpbWFnZSAoYGZ3LVx1MDAzZWRhdGFgKSBvciBpcyByZWFkIGZyb20gdGhlIGRldmljZSBoYXJkd2FyZSBpdHNlbGYgKGluIHRoZSBjYXNlIG9mIHRoZSBleHRlbmRlZCBob3N0IHRhYmxlKS4gU28sIHRoZXJlIHNob3VsZG4ndCBiZSBhbnl0aGluZyB1bmluaXRpYWxpemVkIGJlaW5nIGV4cG9zZWQsIGJ1dCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guXG5cbkxldCdzIGJyZWFrIGRvd24gdGhlIGF0dGFjayBzdXJmYWNlLiBJZiB0aGUgYHRsdl9sZW5gIGlzIHRvbyBsYXJnZSwgaXQgcmVzdWx0cyBpbiBhbiBvdXQtb2YtYm91bmRzIHJlYWQgYW5kIGlzIGNhdWdodCBieSBLQVNBTi4gTm93LCB3aGF0IGlmIGB0bHZfbGVuYCBpcyBzbWFsbGVyLCAqcG90ZW50aWFsbHkqIGxlYWRpbmcgdG8gYW4gdW5pbml0aWFsaXplZCByZWFkPyBObywgaXQncyBub3QgZ29pbmcgdG8gcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWNhdXNlIHRoZSBidWZmZXIgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCB3aXRoIGZpcm13YXJlIGRhdGEuIElmIHdlJ3JlIHJlYWRpbmcgcGFzdCB0aGUgZW5kIG9mIHRoZSBkYXRhLCBpdCdzIHN0aWxsIG91dC1vZi1ib3VuZHMsIGFuZCBLQVNBTiB3aWxsIGNhdGNoIGl0LiBUaGUgc2FtZSBsb2dpYyBhcHBsaWVzIHRvIGBob3N0X3RibC1cdTAwM2VleHRfaG9zdF90YmxfbGVuZ3RoYCB2ZXJzdXMgYGV4dF9ob3N0X3RibF9sZW5gLiBLQVNBTiBzaG91bGQgYmUgYWJsZSB0byBjYXRjaCB0aGUgT09CIHJlYWRzIHRoZXJlLlxuXG5HaXZlbiB0aGF0LCBJIGRvbid0IHNlZSBhbnkgaW1tZWRpYXRlIGNvbmNlcm5zIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGxlYWtlZC4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgcGF0Y2guIFN0YW5kYXJkIE9PQiBhbmQgbWVtb3J5IGxlYWsgZml4ZXMuIE5vIEtNU0FOIGlzIG5lY2Vzc2FyeSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODY2LCJPdXRwdXRUb2tlbnMiOjEzMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA3OjA2OjUyLjE5NDU1MjU4WiIsIlNlcSI6NTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBtZW1vcnkgbGVha3MgZHVyaW5nIGZpcm13YXJlIHBhcnNpbmcuIFRoZSBib3VuZHMgY2hlY2tzIHByZXZlbnQgcmVhZGluZyBwYXN0IHRoZSBlbmQgb2YgYWxsb2NhdGVkIGJ1ZmZlcnMgY29udGFpbmluZyBmaXJtd2FyZSBkYXRhLCB3aGljaCBhcmUgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlcy4gS0FTQU4gaXMgZnVsbHkgY2FwYWJsZSBvZiBkZXRlY3RpbmcgdGhlc2Ugb3V0LW9mLWJvdW5kcyByZWFkcywgYW5kIGttZW1sZWFrIGRldGVjdHMgdGhlIGZpeGVkIG1lbW9yeSBsZWFrcy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBjb250cm9sIGZsb3csIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIG1lbW9yeSBsZWFrcyBkdXJpbmcgZmlybXdhcmUgcGFyc2luZy4gVGhlIGJvdW5kcyBjaGVja3MgcHJldmVudCByZWFkaW5nIHBhc3QgdGhlIGVuZCBvZiBhbGxvY2F0ZWQgYnVmZmVycyBjb250YWluaW5nIGZpcm13YXJlIGRhdGEsIHdoaWNoIGFyZSBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2VzLiBLQVNBTiBpcyBmdWxseSBjYXBhYmxlIG9mIGRldGVjdGluZyB0aGVzZSBvdXQtb2YtYm91bmRzIHJlYWRzLCBhbmQga21lbWxlYWsgZGV0ZWN0cyB0aGUgZml4ZWQgbWVtb3J5IGxlYWtzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIGNvbnRyb2wgZmxvdywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmcbqs[1] Phase: Succeeded StartedAt: 2026-08-12 07:07:04 +0000 UTC FinishedAt: 2026-08-12 07:07:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcbqs[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-12 07:07:04 +0000 UTC FinishedAt: 2026-08-12 07:07:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcbqs[2] Phase: Succeeded StartedAt: 2026-08-12 07:07:04 +0000 UTC FinishedAt: 2026-08-12 08:41:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcbqs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_fw_init","mm81x_fw_parse_ext_host_tbl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"053aaec5-683d-4ead-b07e-689ade500d05","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-12 07:07:04 +0000 UTC FinishedAt: 2026-08-12 08:41:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_fw_init","mm81x_fw_parse_ext_host_tbl"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"053aaec5-683d-4ead-b07e-689ade500d05","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowmcbqs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_fw_init","mm81x_fw_parse_ext_host_tbl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"053aaec5-683d-4ead-b07e-689ade500d05","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-12 07:07:04 +0000 UTC FinishedAt: 2026-08-12 07:07:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcbqs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_fw_init","mm81x_fw_parse_ext_host_tbl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"053aaec5-683d-4ead-b07e-689ade500d05","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-12 07:07:04 +0000 UTC FinishedAt: 2026-08-12 07:07:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowmcbqs/series-workflowmcbqs-convert-artifact-3241257073/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmcbqs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_fw_init","mm81x_fw_parse_ext_host_tbl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"053aaec5-683d-4ead-b07e-689ade500d05","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-12 07:07:14 +0000 UTC FinishedAt: 2026-08-12 07:23:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcbqs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_fw_init","mm81x_fw_parse_ext_host_tbl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"053aaec5-683d-4ead-b07e-689ade500d05","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-12 07:07:14 +0000 UTC FinishedAt: 2026-08-12 07:23:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d3706b5f-0018-4445-98ba-e5f1c867dce7,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-workflowmcbqs/series-workflowmcbqs-convert-artifact-3241257073/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": "fb4e66f9-8b0f-48a3-b4eb-3a8862322eeb", "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-workflowmcbqs/series-workflowmcbqs-build-action-3986449055/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmcbqs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_fw_init","mm81x_fw_parse_ext_host_tbl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"053aaec5-683d-4ead-b07e-689ade500d05","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-12 07:07:14 +0000 UTC FinishedAt: 2026-08-12 07:23:19 +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:*d3706b5f-0018-4445-98ba-e5f1c867dce7,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-workflowmcbqs/series-workflowmcbqs-convert-artifact-3241257073/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": "fb4e66f9-8b0f-48a3-b4eb-3a8862322eeb", "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-workflowmcbqs/series-workflowmcbqs-build-action-3986449055/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmcbqs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_fw_init","mm81x_fw_parse_ext_host_tbl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"053aaec5-683d-4ead-b07e-689ade500d05","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-12 07:23:30 +0000 UTC FinishedAt: 2026-08-12 07:23:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcbqs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_fw_init","mm81x_fw_parse_ext_host_tbl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"053aaec5-683d-4ead-b07e-689ade500d05","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-12 07:23:30 +0000 UTC FinishedAt: 2026-08-12 07:23:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcbqs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_fw_init","mm81x_fw_parse_ext_host_tbl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"053aaec5-683d-4ead-b07e-689ade500d05","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-12 07:23:30 +0000 UTC FinishedAt: 2026-08-12 07:23:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcbqs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_fw_init","mm81x_fw_parse_ext_host_tbl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"053aaec5-683d-4ead-b07e-689ade500d05","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-12 07:23:30 +0000 UTC FinishedAt: 2026-08-12 07:23:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"053aaec5-683d-4ead-b07e-689ade500d05","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowmcbqs/series-workflowmcbqs-convert-artifact-99682756/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmcbqs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_fw_init","mm81x_fw_parse_ext_host_tbl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"053aaec5-683d-4ead-b07e-689ade500d05","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-12 07:23:40 +0000 UTC FinishedAt: 2026-08-12 07:25:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcbqs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_fw_init","mm81x_fw_parse_ext_host_tbl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"053aaec5-683d-4ead-b07e-689ade500d05","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-12 07:23:40 +0000 UTC FinishedAt: 2026-08-12 07:25:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fb4e66f9-8b0f-48a3-b4eb-3a8862322eeb,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-workflowmcbqs/series-workflowmcbqs-build-action-3986449055/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-workflowmcbqs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_fw_init","mm81x_fw_parse_ext_host_tbl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"053aaec5-683d-4ead-b07e-689ade500d05","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-12 07:25:45 +0000 UTC FinishedAt: 2026-08-12 07:25:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcbqs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_fw_init","mm81x_fw_parse_ext_host_tbl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"053aaec5-683d-4ead-b07e-689ade500d05","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-12 07:25:45 +0000 UTC FinishedAt: 2026-08-12 07:25:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcbqs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_fw_init","mm81x_fw_parse_ext_host_tbl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"053aaec5-683d-4ead-b07e-689ade500d05","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-12 07:25:45 +0000 UTC FinishedAt: 2026-08-12 07:42:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcbqs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_fw_init","mm81x_fw_parse_ext_host_tbl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"053aaec5-683d-4ead-b07e-689ade500d05","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-12 07:25:45 +0000 UTC FinishedAt: 2026-08-12 07:42:16 +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:*d3706b5f-0018-4445-98ba-e5f1c867dce7,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-workflowmcbqs/series-workflowmcbqs-convert-artifact-99682756/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": "ce2626a7-9bd4-4915-b0f5-af27fecf87c7", "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-workflowmcbqs/series-workflowmcbqs-build-action-1969697232/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmcbqs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_fw_init","mm81x_fw_parse_ext_host_tbl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"053aaec5-683d-4ead-b07e-689ade500d05","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-12 07:25:45 +0000 UTC FinishedAt: 2026-08-12 07:42:06 +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:*d3706b5f-0018-4445-98ba-e5f1c867dce7,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-workflowmcbqs/series-workflowmcbqs-convert-artifact-99682756/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": "ce2626a7-9bd4-4915-b0f5-af27fecf87c7", "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-workflowmcbqs/series-workflowmcbqs-build-action-1969697232/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmcbqs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_fw_init","mm81x_fw_parse_ext_host_tbl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"053aaec5-683d-4ead-b07e-689ade500d05","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-12 07:42:16 +0000 UTC FinishedAt: 2026-08-12 07:42:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcbqs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_fw_init","mm81x_fw_parse_ext_host_tbl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"053aaec5-683d-4ead-b07e-689ade500d05","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-12 07:42:16 +0000 UTC FinishedAt: 2026-08-12 07:42:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcbqs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_fw_init","mm81x_fw_parse_ext_host_tbl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"053aaec5-683d-4ead-b07e-689ade500d05","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-12 07:42:16 +0000 UTC FinishedAt: 2026-08-12 07:44:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcbqs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_fw_init","mm81x_fw_parse_ext_host_tbl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"053aaec5-683d-4ead-b07e-689ade500d05","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-12 07:42:16 +0000 UTC FinishedAt: 2026-08-12 07:44:04 +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:*ce2626a7-9bd4-4915-b0f5-af27fecf87c7,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-workflowmcbqs/series-workflowmcbqs-build-action-1969697232/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-workflowmcbqs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_fw_init","mm81x_fw_parse_ext_host_tbl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"053aaec5-683d-4ead-b07e-689ade500d05","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-12 07:44:14 +0000 UTC FinishedAt: 2026-08-12 08:41:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcbqs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_fw_init","mm81x_fw_parse_ext_host_tbl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"053aaec5-683d-4ead-b07e-689ade500d05","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-12 07:44:14 +0000 UTC FinishedAt: 2026-08-12 08:41:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_fw_init","mm81x_fw_parse_ext_host_tbl"],"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:*fb4e66f9-8b0f-48a3-b4eb-3a8862322eeb,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ce2626a7-9bd4-4915-b0f5-af27fecf87c7,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-workflowmcbqs/series-workflowmcbqs-build-action-3986449055/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-workflowmcbqs/series-workflowmcbqs-build-action-1969697232/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowmcbqs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_fw_init","mm81x_fw_parse_ext_host_tbl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"053aaec5-683d-4ead-b07e-689ade500d05","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-12 07:44:14 +0000 UTC FinishedAt: 2026-08-12 07:44:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcbqs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_fw_init","mm81x_fw_parse_ext_host_tbl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"053aaec5-683d-4ead-b07e-689ade500d05","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-12 07:44:14 +0000 UTC FinishedAt: 2026-08-12 07:44:19 +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":["mm81x_fw_init","mm81x_fw_parse_ext_host_tbl"],"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-workflowmcbqs/series-workflowmcbqs-convert-artifact-2070394829/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmcbqs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_fw_init","mm81x_fw_parse_ext_host_tbl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"053aaec5-683d-4ead-b07e-689ade500d05","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-12 07:44:14 +0000 UTC FinishedAt: 2026-08-12 07:44:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcbqs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_fw_init","mm81x_fw_parse_ext_host_tbl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"053aaec5-683d-4ead-b07e-689ade500d05","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-12 07:44:14 +0000 UTC FinishedAt: 2026-08-12 07:44:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcbqs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_fw_init","mm81x_fw_parse_ext_host_tbl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"053aaec5-683d-4ead-b07e-689ade500d05","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-12 07:44:14 +0000 UTC FinishedAt: 2026-08-12 07:44:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcbqs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_fw_init","mm81x_fw_parse_ext_host_tbl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"053aaec5-683d-4ead-b07e-689ade500d05","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-12 07:44:24 +0000 UTC FinishedAt: 2026-08-12 08:41:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcbqs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_fw_init","mm81x_fw_parse_ext_host_tbl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X_USB"],"series_id":"053aaec5-683d-4ead-b07e-689ade500d05","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-12 07:44:24 +0000 UTC FinishedAt: 2026-08-12 08:41:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fb4e66f9-8b0f-48a3-b4eb-3a8862322eeb,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ce2626a7-9bd4-4915-b0f5-af27fecf87c7,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-workflowmcbqs/series-workflowmcbqs-build-action-3986449055/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-workflowmcbqs/series-workflowmcbqs-build-action-1969697232/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-workflowmcbqs/series-workflowmcbqs-convert-artifact-2070394829/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,}