Name: series-workflowcf8x6 Phase: Succeeded StartedAt: 2026-08-04 04:08:32 +0000 UTC FinishedAt: 2026-08-04 08:39:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcf8x6[0] Phase: Succeeded StartedAt: 2026-08-04 04:08:32 +0000 UTC FinishedAt: 2026-08-04 04:53:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcf8x6[0].run-triage Phase: Succeeded StartedAt: 2026-08-04 04:08:32 +0000 UTC FinishedAt: 2026-08-04 04:53:49 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_FAILURE", "TRANSPARENT_HUGEPAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_FAILURE", "TRANSPARENT_HUGEPAGE" ], "series_id": "9e99173b-863b-4bcf-af5d-9f5f700128eb" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "soft_offline_page" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c29mdF9vZmZsaW5lX3BhZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtaXNzaW5nIGZvbGlvX3B1dCAocmVmY291bnQgbGVhaykgaW4gc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlIHdoZW4gc29mdCBvZmZsaW5pbmcgYSBUSFAgcGFnZSBmYWlscyBiZWNhdXNlIG5ld19vcmRlciBpcyBub24temVyby4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcHJldmVudHMgYSBtZW1vcnkgbGVhayBhbmQgaXMgcmVhY2hhYmxlIHZpYSBtYWR2aXNlKE1BRFZfU09GVF9PRkZMSU5FKSBvciBzeXNmcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQ3YzgzYzU4NmEzZGM2NjM3ZGFmMmM4NDk4NmIxY2Y2MjdjOWQ0MjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDA0OjUxOjE0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5pbmRleCA1MTUwOGE1NWM0MDU1Li4zYjFlNjk0NjgyMWJiIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuQEAgLTI3NzYsNiAmIzQzOzI3NzYsOSBAQCBFWFBPUlRfU1lNQk9MKHVucG9pc29uX21lbW9yeSk7XG4gICogc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlIGhhbmRsZXMgaHVnZXRsYi1wYWdlcyBhbmQgbm9uLWh1Z2V0bGIgcGFnZXMuXG4gICogSWYgdGhlIHBhZ2UgaXMgYSBub24tZGlydHkgdW5tYXBwZWQgcGFnZS1jYWNoZSBwYWdlLCBpdCBzaW1wbHkgaW52YWxpZGF0ZXMuXG4gICogSWYgdGhlIHBhZ2UgaXMgbWFwcGVkLCBpdCBtaWdyYXRlcyB0aGUgY29udGVudHMgb3Zlci5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIGZvbGlvIHJlZmNvdW50IGhhcyBiZWVuIGluY3JlbWVudGVkIGJlZm9yZSBlbnRlcmluZyB0aGlzIGZ1bmN0aW9uLlxuJiM0MzsgKiBUaGlzIGZvbGlvIHJlZmVyZW5jZSBtdXN0IGJlIHJlbGVhc2VkIGJlZm9yZSB0aGUgZnVuY3Rpb24gcmV0dXJucyBvbiBhbGwgcGF0aHMuXG4gICovXG4gc3RhdGljIGludCBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuQEAgLTI4MDEsOSAmIzQzOzI4MDQsMTkgQEAgc3RhdGljIGludCBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4gXHRcdCAqIE5PVEU6IGlmIG1pbmltaXppbmcgdGhlIG51bWJlciBvZiBzb2Z0IG9mZmxpbmUgcGFnZXMgaXNcbiBcdFx0ICogcHJlZmVycmVkLCBzcGxpdCBpdCB0byBub24temVybyBuZXdfb3JkZXIgbGlrZSBpdCBpcyBkb25lIGluXG4gXHRcdCAqIG1lbW9yeV9mYWlsdXJlKCkuXG4mIzQzO1x0XHQgKlxuJiM0MztcdFx0ICogRHJvcCB0aGUgcmVmZXJlbmNlIG9idGFpbmVkIHVwb24gZW50cnk7XG4mIzQzO1x0XHQgKiB0cnlfdG9fc3BsaXRfdGhwX3BhZ2UoLi4uLCByZWxlYXNlPXRydWUpIGhhbmRsZXMgcmVmY291bnRpbmcgaXRzZWxmXG4mIzQzO1x0XHQgKiB3aGVuIHRoZSBzcGxpdCBmYWlscy5cbiBcdFx0ICovXG4tXHRcdGlmIChuZXdfb3JkZXIgfHwgdHJ5X3RvX3NwbGl0X3RocF9wYWdlKHBhZ2UsIC8qIG5ld19vcmRlcj0gKi8gMCxcbi1cdFx0XHRcdFx0XHQgICAgICAgLyogcmVsZWFzZT0gKi8gdHJ1ZSkpIHtcbiYjNDM7XHRcdGlmIChuZXdfb3JkZXIpIHtcbiYjNDM7XHRcdFx0cHJfaW5mbyhcJiMzNDslI2x4OiBvcmRlci0lZCBmb2xpbyBjYW5ub3Qgc29mdCBvZmZsaW5lXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdHBmbiwgbmV3X29yZGVyKTtcbiYjNDM7XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmICh0cnlfdG9fc3BsaXRfdGhwX3BhZ2UocGFnZSwgLyogbmV3X29yZGVyPSAqLyAwLFxuJiM0MztcdFx0XHRcdFx0IC8qIHJlbGVhc2U9ICovIHRydWUpKSB7XG4gXHRcdFx0cHJfaW5mbyhcJiMzNDslI2x4OiB0aHAgc3BsaXQgZmFpbGVkXFxuXCYjMzQ7LCBwZm4pO1xuIFx0XHRcdHJldHVybiAtRUJVU1k7XG4gXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzb2Z0X29mZmxpbmVfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG1pc3NpbmcgZm9saW9fcHV0IChyZWZjb3VudCBsZWFrKSBpbiBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Ugd2hlbiBzb2Z0IG9mZmxpbmluZyBhIFRIUCBwYWdlIGZhaWxzIGJlY2F1c2UgbmV3X29yZGVyIGlzIG5vbi16ZXJvLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBwcmV2ZW50cyBhIG1lbW9yeSBsZWFrIGFuZCBpcyByZWFjaGFibGUgdmlhIG1hZHZpc2UoTUFEVl9TT0ZUX09GRkxJTkUpIG9yIHN5c2ZzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDdjODNjNTg2YTNkYzY2MzdkYWYyYzg0OTg2YjFjZjYyN2M5ZDQyNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDQgMDQ6NTE6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuYwppbmRleCA1MTUwOGE1NWM0MDU1Li4zYjFlNjk0NjgyMWJiIDEwMDY0NAotLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS1mYWlsdXJlLmMKQEAgLTI3NzYsNiAmIzQzOzI3NzYsOSBAQCBFWFBPUlRfU1lNQk9MKHVucG9pc29uX21lbW9yeSk7CiAgKiBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2UgaGFuZGxlcyBodWdldGxiLXBhZ2VzIGFuZCBub24taHVnZXRsYiBwYWdlcy4KICAqIElmIHRoZSBwYWdlIGlzIGEgbm9uLWRpcnR5IHVubWFwcGVkIHBhZ2UtY2FjaGUgcGFnZSwgaXQgc2ltcGx5IGludmFsaWRhdGVzLgogICogSWYgdGhlIHBhZ2UgaXMgbWFwcGVkLCBpdCBtaWdyYXRlcyB0aGUgY29udGVudHMgb3Zlci4KJiM0MzsgKgomIzQzOyAqIFRoZSBmb2xpbyByZWZjb3VudCBoYXMgYmVlbiBpbmNyZW1lbnRlZCBiZWZvcmUgZW50ZXJpbmcgdGhpcyBmdW5jdGlvbi4KJiM0MzsgKiBUaGlzIGZvbGlvIHJlZmVyZW5jZSBtdXN0IGJlIHJlbGVhc2VkIGJlZm9yZSB0aGUgZnVuY3Rpb24gcmV0dXJucyBvbiBhbGwgcGF0aHMuCiAgKi8KIHN0YXRpYyBpbnQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQogewpAQCAtMjgwMSw5ICYjNDM7MjgwNCwxOSBAQCBzdGF0aWMgaW50IHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKIAkJICogTk9URTogaWYgbWluaW1pemluZyB0aGUgbnVtYmVyIG9mIHNvZnQgb2ZmbGluZSBwYWdlcyBpcwogCQkgKiBwcmVmZXJyZWQsIHNwbGl0IGl0IHRvIG5vbi16ZXJvIG5ld19vcmRlciBsaWtlIGl0IGlzIGRvbmUgaW4KIAkJICogbWVtb3J5X2ZhaWx1cmUoKS4KJiM0MzsJCSAqCiYjNDM7CQkgKiBEcm9wIHRoZSByZWZlcmVuY2Ugb2J0YWluZWQgdXBvbiBlbnRyeTsKJiM0MzsJCSAqIHRyeV90b19zcGxpdF90aHBfcGFnZSguLi4sIHJlbGVhc2U9dHJ1ZSkgaGFuZGxlcyByZWZjb3VudGluZyBpdHNlbGYKJiM0MzsJCSAqIHdoZW4gdGhlIHNwbGl0IGZhaWxzLgogCQkgKi8KLQkJaWYgKG5ld19vcmRlciB8fCB0cnlfdG9fc3BsaXRfdGhwX3BhZ2UocGFnZSwgLyogbmV3X29yZGVyPSAqLyAwLAotCQkJCQkJICAgICAgIC8qIHJlbGVhc2U9ICovIHRydWUpKSB7CiYjNDM7CQlpZiAobmV3X29yZGVyKSB7CiYjNDM7CQkJcHJfaW5mbygmIzM0OyUjbHg6IG9yZGVyLSVkIGZvbGlvIGNhbm5vdCBzb2Z0IG9mZmxpbmVcbiYjMzQ7LAomIzQzOwkJCQlwZm4sIG5ld19vcmRlcik7CiYjNDM7CQkJZm9saW9fcHV0KGZvbGlvKTsKJiM0MzsJCQlyZXR1cm4gLUVCVVNZOwomIzQzOwkJfQomIzQzOwkJaWYgKHRyeV90b19zcGxpdF90aHBfcGFnZShwYWdlLCAvKiBuZXdfb3JkZXI9ICovIDAsCiYjNDM7CQkJCQkgLyogcmVsZWFzZT0gKi8gdHJ1ZSkpIHsKIAkJCXByX2luZm8oJiMzNDslI2x4OiB0aHAgc3BsaXQgZmFpbGVkXG4mIzM0OywgcGZuKTsKIAkJCXJldHVybiAtRUJVU1k7CiAJCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM3OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBNZW1vcnkgRmFpbHVyZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBzb2Z0IG9mZmxpbmluZyBUSFAgKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMpIHBhZ2VzLCBhbmQgdGhlIGNvcmUgY2hhbmdlIGlzIGluIGhvdyBpdCBoYW5kbGVzIGEgc3BlY2lmaWMgY2hlY2suIEluaXRpYWxseSwgdGhlIGNvZGUgd2FzIHVzaW5nIGEgc2hvcnQtY2lyY3VpdGluZyBPUiAoYHx8YCkgdG8gZGV0ZXJtaW5lIGlmIGEgVEhQIHBhZ2UgbmVlZGVkIHRvIGJlIHNwbGl0LiBUaGUgb3JpZ2luYWwgbG9naWMgd2FzIGBpZiAobmV3X29yZGVyIHx8IHRyeV90b19zcGxpdF90aHBfcGFnZShwYWdlLCAvKiBuZXdfb3JkZXI9ICovIDAsIC8qIHJlbGVhc2U9ICovIHRydWUpKWAuIFRoaXMgcGF0Y2ggZWZmZWN0aXZlbHkgc2VwYXJhdGVzIHRob3NlIHR3byBjaGVja3MuCgpUaGUgcHJvYmxlbSwgYXMgSSB1bmRlcnN0YW5kIGl0LCBpcyB0aGF0IHdoZW4gYG5ld19vcmRlcmAgd2FzbiYjMzk7dCB6ZXJvLCBpdCB3b3VsZCAqc2hvcnQtY2lyY3VpdCogdGhlIE9SLiBUaGlzIG1lYW50IGB0cnlfdG9fc3BsaXRfdGhwX3BhZ2VgIHdvdWxkbiYjMzk7dCBiZSBjYWxsZWQuIENydWNpYWxseSwgdGhlICpvcmlnaW5hbCogY29kZSBoYWQgYSBgZm9saW9fcHV0KGZvbGlvKWAgaW5zaWRlIG9mIHRoZSBgaWZgIGJsb2NrLiBJZiBgdHJ5X3RvX3NwbGl0X3RocF9wYWdlYCB3YXMgZXhlY3V0ZWQsIGl0IHdvdWxkIGRlYWwgd2l0aCB0aGUgcmVmY291bnQuIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgdGhlIHNob3J0LWNpcmN1aXRpbmcsIHRoZSBvcmlnaW5hbCBjb2RlIG1pc3NlZCB0aGUgZGVjcmVtZW50IGluIHRoZSBjYXNlIG9mIGBuZXdfb3JkZXJgIGJlaW5nIG5vbi16ZXJvLiBUaGUgcGF0Y2gsIHRoZXJlZm9yZSwgc2VwYXJhdGVzIHRoZSBjaGVja3MsIGFkZGluZyBhbiBleHBsaWNpdCBgZm9saW9fcHV0KGZvbGlvKWAgaW4gdGhlIG5ldyBjb2RlIGJsb2NrIHdoZW4gYG5ld19vcmRlcmAgaXMgbm9uLXplcm8sIGFuZCBpdCBhbHNvIGNhbGxzIGB0cnlfdG9fc3BsaXRfdGhwX3BhZ2VgIGFmdGVyIGluIGEgc2VwYXJhdGUgYGlmYCBibG9jay4KClRoaXMgZml4ZXMgYSBtaXNzaW5nIGBmb2xpb19wdXRgLCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIHJlc291cmNlIGxlYWsuIE5vdywgSSBuZWVkIHRvIGxvb2sgaW50byB0aGlzIGZ1bmN0aW9uIG1vcmUgZ2VuZXJhbGx5IGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBMZXQmIzM5O3Mgc2VlIGlmIEkgY2FuIGZpbmQgdGhlIHJlbGF0ZWQgY29uZmlnIG9wdGlvbnMgZm9yIGBtbS9tZW1vcnktZmFpbHVyZS5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1vcnktZmFpbHVyZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbW9yeS1mYWlsdXJlLmM9Mjc3MD1FWFBPUlRfU1lNQk9MKHVucG9pc29uX21lbW9yeSk7XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzc1LS8qXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI3NzY6ICogc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlIGhhbmRsZXMgaHVnZXRsYi1wYWdlcyBhbmQgbm9uLWh1Z2V0bGIgcGFnZXMuXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3NzctICogSWYgdGhlIHBhZ2UgaXMgYSBub24tZGlydHkgdW5tYXBwZWQgcGFnZS1jYWNoZSBwYWdlLCBpdCBzaW1wbHkgaW52YWxpZGF0ZXMuXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzgyLSAqL1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyNzgzOnN0YXRpYyBpbnQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzg0LXtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTI5MTE9aW50IHNvZnRfb2ZmbGluZV9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yOTU3LVx0aWYgKHJldCBcdTAwM2UgMCkge1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyOTU4Olx0XHRyZXQgPSBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2UocGFnZSk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI5NTktXHR9IGVsc2UgaWYgKHJldCA9PSAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQyNAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBPZmZsaW5lIFBhZ2UgSGFuZGxpbmcqKgoKUmlnaHQsIHNvIGBzb2Z0X29mZmxpbmVfcGFnZWAg4oCTIHRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHRoYXQga2lja3Mgb2ZmIHRoZSBzb2Z0IG9mZmxpbmUgcHJvY2Vzcy4gSXQgbG9va3MgbGlrZSBpdCBkaXJlY3RseSBjYWxscyBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYC4gTWFrZXMgc2Vuc2U7IG9uZSBoYW5kbGVzIHRoZSBpbml0aWFsIHRyaWdnZXJpbmcsIHRoZSBvdGhlciBwcm9iYWJseSBkb2VzIHRoZSBjb3JlIHdvcmsgb24gdGhlIHBhZ2UgdGhhdCYjMzk7cyBnb2luZyBzb2Z0IG9mZmxpbmUuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCAqZW5hYmxlKiB0aGlzIHdob2xlIG1lbW9yeSBmYWlsdXJlIHBhdGgsIHNwZWNpZmljYWxseSB0aGUgZW5hYmxpbmcgY29uZGl0aW9ucyBvZiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4gV2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGtlcm5lbCBwYXJhbWV0ZXJzLCBvciBoYXJkd2FyZSBmZWF0dXJlcyBuZWVkIHRvIGJlIGluIHBsYXkgZm9yIHRoZSBzb2Z0IG9mZmxpbmUgbWVjaGFuaXNtIHRvIGV2ZW4gKmJlKiBhY3RpdmU/IEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyB0byBzZWUgd2hhdCB0cmlnZ2VycyBpdC4gVGhhdOKAmXMgdGhlIGtleS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1vcnktZmFpbHVyZS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9MTExPW9iai0kKENPTkZJR19ETUFQT09MX1RFU1QpICYjNDM7PSBkbWFwb29sX3Rlc3Qub1xubW0vTWFrZWZpbGU6MTEyOm9iai0kKENPTkZJR19NRU1PUllfRkFJTFVSRSkgJiM0Mzs9IG1lbW9yeS1mYWlsdXJlLm9cbm1tL01ha2VmaWxlLTExMy1vYmotJChDT05GSUdfSFdQT0lTT05fSU5KRUNUKSAmIzQzOz0gaHdwb2lzb24taW5qZWN0Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzY4CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBmb3IgU29mdCBPZmZsaW5lIFBhZ2UgQWNjZXNzaWJpbGl0eSoqCgpBbHJpZ2h0LCB0aGUgcmVxdWlyZW1lbnQgZm9yIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIGNsZWFyOyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIG1lbW9yeSBmYWlsdXJlIHNjZW5hcmlvcy4gTm93LCB0aGUgbmV4dCBjcnVjaWFsIHN0ZXAgaXMgZGV0ZXJtaW5pbmcgaG93IHRvIGludGVyYWN0IHdpdGggdGhpcyBmdW5jdGlvbmFsaXR5LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciB0aGUgYHNvZnRfb2ZmbGluZV9wYWdlYCBmdW5jdGlvbiBvciB2YXJpYWJsZSDigJMgaWYgaXQmIzM5O3MgYSB2YXJpYWJsZSDigJMgaXMgYWN0dWFsbHkgYWNjZXNzaWJsZSBvciBleHBvc2VkIHRvIHVzZXJzcGFjZS4gVGhpcyBpcyBjcml0aWNhbC4gSWYgaXQgaXNuJiMzOTt0LCB0aGVuIGV2ZW4gaWYgd2UgaGF2ZSBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBlbmFibGVkLCB3ZSB3b24mIzM5O3QgYmUgYWJsZSB0byBsZXZlcmFnZSBpdCBlZmZlY3RpdmVseSBmcm9tIGFuIGFwcGxpY2F0aW9uIG9yIHV0aWxpdHkgcnVubmluZyBpbiB1c2Vyc3BhY2UgdG8gbWFuYWdlIHNvZnQgb2ZmbGluZSBwYWdlcy4gV2UgbmVlZCB0byBiZSBhYmxlIHRvICp1c2UqIHRoYXQgY2FwYWJpbGl0eSwgc28gSSYjMzk7bSBpbW1lZGlhdGVseSBtb3ZpbmcgdG8gYXNzZXNzIHRoZSBleHBvcnQgb3IgcmVhY2hhYmlsaXR5IG9mIHRoaXMgc3ltYm9sLiBUaGlzIGludmVzdGlnYXRpb24gd2lsbCBndWlkZSBtZSBvbiB0aGUgc3Vic2VxdWVudCBpbXBsZW1lbnRhdGlvbiBvciwgcG90ZW50aWFsbHksIHRoZSBuZWVkIGZvciBrZXJuZWwgbW9kaWZpY2F0aW9ucyB0byBleHBvc2UgdGhlIHJlcXVpcmVkIGludGVyZmFjZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c29mdF9vZmZsaW5lX3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1tZW1vcnktcGFnZS1vZmZsaW5lOjE6V2hhdDpcdFx0L3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvc29mdF9vZmZsaW5lX3BhZ2VcbkRvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtbWVtb3J5LXBhZ2Utb2ZmbGluZS0yLURhdGU6XHRcdFNlcCAyMDA5XG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tZW1vcnktaG90cGx1Zy5yc3Q9Mjc2PVRoZSBmb2xsb3dpbmcgZmlsZXMgYXJlIGN1cnJlbnRseSBkZWZpbmVkOlxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0LTMwNy0gIFdoZW4gdGhlIENPTkZJR19NRU1PUllfRkFJTFVSRSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZW5hYmxlZCwgdHdvXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL21lbW9yeS1ob3RwbHVnLnJzdDozMDg6ICBhZGRpdGlvbmFsIGZpbGVzIGBgaGFyZF9vZmZsaW5lX3BhZ2VgYCBhbmQgYGBzb2Z0X29mZmxpbmVfcGFnZWBgIGFyZSBhdmFpbGFibGVcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0LTMwOS0gIHRvIHRyaWdnZXIgaHdwb2lzb25pbmcgb2YgcGFnZXMsIGZvciBleGFtcGxlLCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4gTm90ZSB0aGF0XG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL3BkdC5jPTI0Nz1zdGF0aWMgaW50IHBkdF9tYWlubG9vcCh2b2lkICp1bnVzZWQpXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL3BkdC5jLTMzNS1cdFx0XHRlbHNlXG5hcmNoL3BhcmlzYy9rZXJuZWwvcGR0LmM6MzM2Olx0XHRcdFx0c29mdF9vZmZsaW5lX3BhZ2UocGRlIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULCAwKTtcbmFyY2gvcGFyaXNjL2tlcm5lbC9wZHQuYy0zMzctI2Vsc2Vcbi0tXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM9NTk1PXN0YXRpYyBERVZJQ0VfQVRUUl9XTyhwcm9iZSk7XG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTYwMy0vKiBTb2Z0IG9mZmxpbmUgYSBwYWdlICovXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6NjA0OnN0YXRpYyBzc2l6ZV90IHNvZnRfb2ZmbGluZV9wYWdlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy02MDUtXHRcdFx0XHQgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTYxNC1cdHBmbiBcdTAwM2VcdTAwM2U9IFBBR0VfU0hJRlQ7XG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6NjE1Olx0cmV0ID0gc29mdF9vZmZsaW5lX3BhZ2UocGZuLCAwKTtcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy02MTYtXHRyZXR1cm4gcmV0ID09IDAgPyBjb3VudCA6IHJldDtcbi0tXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM9NjIwPXN0YXRpYyBzc2l6ZV90IGhhcmRfb2ZmbGluZV9wYWdlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtNjM2LVxuZHJpdmVycy9iYXNlL21lbW9yeS5jOjYzNzpzdGF0aWMgREVWSUNFX0FUVFJfV08oc29mdF9vZmZsaW5lX3BhZ2UpO1xuZHJpdmVycy9iYXNlL21lbW9yeS5jLTYzOC1zdGF0aWMgREVWSUNFX0FUVFJfV08oaGFyZF9vZmZsaW5lX3BhZ2UpO1xuLS1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz05MTE9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKm1lbW9yeV9yb290X2F0dHJzW10gPSB7XG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTkxNi0jaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6OTE3Olx0XHUwMDI2ZGV2X2F0dHJfc29mdF9vZmZsaW5lX3BhZ2UuYXR0cixcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy05MTgtXHRcdTAwMjZkZXZfYXR0cl9oYXJkX29mZmxpbmVfcGFnZS5hdHRyLFxuLS1cbmluY2x1ZGUvbGludXgvbW0uaD00OTk2PWV4dGVybiBhdG9taWNfbG9uZ190IG51bV9wb2lzb25lZF9wYWdlcyBfX3JlYWRfbW9zdGx5O1xuaW5jbHVkZS9saW51eC9tbS5oOjQ5OTc6ZXh0ZXJuIGludCBzb2Z0X29mZmxpbmVfcGFnZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKTtcbmluY2x1ZGUvbGludXgvbW0uaC00OTk4LSNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVcbi0tXG5tbS9tYWR2aXNlLmM9MTQ0Nz1zdGF0aWMgaW50IG1hZHZpc2VfaW5qZWN0X2Vycm9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNDc1LVx0XHRcdFx0IHBmbiwgc3RhcnQpO1xubW0vbWFkdmlzZS5jOjE0NzY6XHRcdFx0cmV0ID0gc29mdF9vZmZsaW5lX3BhZ2UocGZuLCBNRl9DT1VOVF9JTkNSRUFTRUQpO1xubW0vbWFkdmlzZS5jLTE0NzctXHRcdH0gZWxzZSB7XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yNjA4PXN0YXRpYyB2b2lkIG1lbW9yeV9mYWlsdXJlX3dvcmtfZnVuYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjIyLVx0XHRpZiAoZW50cnkuZmxhZ3MgXHUwMDI2IE1GX1NPRlRfT0ZGTElORSlcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjYyMzpcdFx0XHRzb2Z0X29mZmxpbmVfcGFnZShlbnRyeS5wZm4sIGVudHJ5LmZsYWdzKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjYyNC1cdFx0ZWxzZVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9Mjc4Mz1zdGF0aWMgaW50IHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI4ODYtLyoqXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI4ODc6ICogc29mdF9vZmZsaW5lX3BhZ2UgLSBTb2Z0IG9mZmxpbmUgYSBwYWdlLlxubW0vbWVtb3J5LWZhaWx1cmUuYy0yODg4LSAqIEBwZm46IHBmbiB0byBzb2Z0LW9mZmxpbmVcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI5MTAtICovXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI5MTE6aW50IHNvZnRfb2ZmbGluZV9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI5MTIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxOTEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIHdlbGwtdmVyc2VkIGluIHRoaXMgYXJlYToKCioqRGVjb25zdHJ1Y3RpbmcgYSBWdWxuZXJhYmlsaXR5IFBhdGg6IGBtYWR2aXNlX2luamVjdF9lcnJvcmAgYW5kIGBNQURWX1NPRlRfT0ZGTElORWAqKgoKUmlnaHQsIHNvIEkmIzM5O20gZm9sbG93aW5nIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgcGF0aCBoZXJlLiBJJiMzOTttIHNlZWluZyB0aGF0IGBtYWR2aXNlX2luamVjdF9lcnJvcmAgaXMgdGhlIGtleSwgYW5kIGl0IHNlZW1zIHRvIGJlIHRyaWdnZXJlZCBieSBgTUFEVl9TT0ZUX09GRkxJTkVgIHdpdGhpbiB0aGUgYG1hZHZpc2VgIHN5c3RlbSBjYWxsLiBUaGlzIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSXQmIzM5O3Mgbm90IHRoZSBtb3N0IGNvbW1vbiB2ZWN0b3IsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBNeSBuZXh0IHN0ZXAgaXMgY2xlYXIg4oCTIEkmIzM5O20gZ29pbmcgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSBgbWFkdmlzZS5jYCBzb3VyY2UgY29kZS4gVGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBtZWF0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBhbmQgdW5kZXJzdGFuZCB0aGUgZXhhY3QgbWVjaGFuaWNzIG9mIGhvdyBgTUFEVl9TT0ZUX09GRkxJTkVgIGxlYWRzIHRvIGEgY2FsbCB0byBgbWFkdmlzZV9pbmplY3RfZXJyb3JgLiBJIG5lZWQgdG8gc2VlIHRoZSBjb25kaXRpb25hbCBsb2dpYywgdGhlIGRhdGEgc3RydWN0dXJlcyBiZWluZyBtYW5pcHVsYXRlZCwgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIG90aGVyIGV4cGxvaXRhYmxlIGJlaGF2aW9ycy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01BRFZfU09GVF9PRkZMSU5FJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYz0xNDQ3PXN0YXRpYyBpbnQgbWFkdmlzZV9pbmplY3RfZXJyb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTE0NzItXG5tbS9tYWR2aXNlLmM6MTQ3MzpcdFx0aWYgKG1hZHZfYmVoYXZpb3ItXHUwMDNlYmVoYXZpb3IgPT0gTUFEVl9TT0ZUX09GRkxJTkUpIHtcbm1tL21hZHZpc2UuYy0xNDc0LVx0XHRcdHByX2luZm8oXCYjMzQ7U29mdCBvZmZsaW5pbmcgcGZuICUjbHggYXQgcHJvY2VzcyB2aXJ0dWFsIGFkZHJlc3MgJSNseFxcblwmIzM0Oyxcbi0tXG5tbS9tYWR2aXNlLmM9MTQ5Mj1zdGF0aWMgYm9vbCBpc19tZW1vcnlfZmFpbHVyZShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTQ5NS1cdGNhc2UgTUFEVl9IV1BPSVNPTjpcbm1tL21hZHZpc2UuYzoxNDk2Olx0Y2FzZSBNQURWX1NPRlRfT0ZGTElORTpcbm1tL21hZHZpc2UuYy0xNDk3LVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5tbS9tYWR2aXNlLmM9MTUxOD1tYWR2aXNlX2JlaGF2aW9yX3ZhbGlkKGludCBiZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTU1MC0jaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXG5tbS9tYWR2aXNlLmM6MTU1MTpcdGNhc2UgTUFEVl9TT0ZUX09GRkxJTkU6XG5tbS9tYWR2aXNlLmMtMTU1Mi1cdGNhc2UgTUFEVl9IV1BPSVNPTjpcbi0tXG5tbS9tYWR2aXNlLmM9MTg4Nz1zdGF0aWMgaW50IG1hZHZpc2VfZG9fYmVoYXZpb3IodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbixcbi0tXG5tbS9tYWR2aXNlLmMtMTk0NS0gKlx0XHR3ZXJlIGNvcnJ1cHRlZCBieSB1bnJlY292ZXJhYmxlIGhhcmR3YXJlIG1lbW9yeSBmYWlsdXJlLlxubW0vbWFkdmlzZS5jOjE5NDY6ICogIE1BRFZfU09GVF9PRkZMSU5FIC0gdHJ5IHRvIHNvZnQtb2ZmbGluZSB0aGUgZ2l2ZW4gcmFuZ2Ugb2YgbWVtb3J5LlxubW0vbWFkdmlzZS5jLTE5NDctICogIE1BRFZfTUVSR0VBQkxFIC0gdGhlIGFwcGxpY2F0aW9uIHJlY29tbWVuZHMgdGhhdCBLU00gdHJ5IHRvIG1lcmdlIHBhZ2VzIGluXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5NzIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIE1lbW9yeSBMZWFrIEZpeCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIHByZXR0eSBzcGVjaWZpYyBpc3N1ZTogdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYE1BRFZfU09GVF9PRkZMSU5FYCwgYHNvZnRfb2ZmbGluZV9wYWdlYCwgYW5kIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgLiBJdCBzZWVtcyBsaWtlIGEgY3J1Y2lhbCBgZm9saW9fcHV0YCBjYWxsIHdhcyBiZWluZyBtaXNzZWQgd2hlbiBgbmV3X29yZGVyYCB3YXNuJiMzOTt0IHplcm8uIFRoaXMgaXMgYSBjbGVhciBpbmRpY2F0b3Igb2YgYSBmdW5jdGlvbmFsIGJ1Zy4gSSYjMzk7bSByZWFkaW5nIHRoaXMgYXMgYSBkZWZpbml0ZSBtZW1vcnkgbGVhayBvciwgYXQgdGhlIHZlcnkgbGVhc3QsIGEgcmVmY291bnQgbGVhay4gRWl0aGVyIHdheSwgaXQmIzM5O3Mgc29tZXRoaW5nIHdlIG5lZWQgdG8gc3F1YXNoLgoKVGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmcgdG8gbWFrZSBzdXJlIHRoaXMgaXMgY29tcGxldGVseSByZXNvbHZlZC4KCk5vdywgbGV0IG1lIGp1c3QgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhpcyBmaXguIEkgc2VlIHRoYXQgYENPTkZJR19NRU1PUllfRkFJTFVSRWAgaXMgcmVxdWlyZWQsIGJ1dCBJJiMzOTttIGdvaW5nIHRvIGRvdWJsZS1jaGVjayBgbW0vS2NvbmZpZ2AgZm9yIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgb3IgY29udGV4dCBhcm91bmQgYE1FTU9SWV9GQUlMVVJFYC4gV2UgYWx3YXlzIG5lZWQgdG8gYmUgdGhvcm91Z2ggd2l0aCB0aGVzZSBraW5kcyBvZiBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNT1JZX0ZBSUxVUkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9Nzc0PWNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXG4tLVxubW0vS2NvbmZpZy03NzYtXG5tbS9LY29uZmlnOjc3Nzpjb25maWcgTUVNT1JZX0ZBSUxVUkVcbm1tL0tjb25maWctNzc4LVx0ZGVwZW5kcyBvbiBNTVVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQwMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb24sIGZyYW1lZCBhcyBhIGZpcnN0LXBlcnNvbiBhY2NvdW50OgoKKipBbmFseXppbmcgdGhlIERlcGVuZGVuY3kgQ2hhaW4gZm9yIE1FTU9SWV9GQUlMVVJFKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJvb3QgY2F1c2Ugb2YgdGhpcyBgTUVNT1JZX0ZBSUxVUkVgLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gdHJhY2UgYmFjayBpdHMgZGVwZW5kZW5jaWVzIOKAkyBJJiMzOTttIHRoaW5raW5nLCAmIzM0O1doZXJlIGRvZXMgdGhpcyBmYWlsdXJlIG9yaWdpbmF0ZT8mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2F1c2FsIGNoYWluLiBUaGlzIG1lYW5zIGRpZ2dpbmcgaW50byB0aGUgY29kZSwgY29uZmlndXJhdGlvbiBmaWxlcywgYW5kIHN5c3RlbSBsb2dzIHRvIGlkZW50aWZ5IHdoYXQgZmFjdG9ycyBtaWdodCBsZWFkIHRvIHRoaXMgc3RhdGUuIE15IGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIGlkZW50aWZ5aW5nIHRoZSBwb3RlbnRpYWwgYm90dGxlbmVja3MsIHJlc291cmNlIGNvbnRlbnRpb24gcG9pbnRzLCBhbmQgYW55IGtub3duIHZ1bG5lcmFiaWxpdGllcyBpbiB0aGUgc3lzdGVtIHRoYXQgY291bGQgdHJpZ2dlciBhIG1lbW9yeSBpc3N1ZS4gRXNzZW50aWFsbHksIEkmIzM5O20gZ29pbmcgdG8gZm9sbG93IHRoZSBicmVhZGNydW1icyB1bnRpbCBJIGZpbmQgdGhlIGNyaXRpY2FsIHBhdGggdGhhdCBsZWFkcyB0byBgTUVNT1JZX0ZBSUxVUkVgLiBUaGUgZ29hbCBpcyBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlICYjMzk7d2h5JiMzOTsgYmVmb3JlIEkgY2FuIGV2ZW4gYmVnaW4gdG8gdGFja2xlIHRoZSAmIzM5O2hvdy4mIzM5OyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBsaWtlIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9ycywgbGVha3MsIGV4Y2Vzc2l2ZSBwYWdpbmcsIG9yIGFueSBvdGhlciBhbm9tYWx5IHRoYXQgY291bGQgcG9pbnQgdG8gdGhlIHByb2JsZW0mIzM5O3Mgc291cmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NzcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc3NzpcdGNvbmZpZyBNRU1PUllfRkFJTFVSRVxuIDc3ODpcdFx0ZGVwZW5kcyBvbiBNTVVcbiA3Nzk6XHRcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxuIDc4MDpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgcmVjb3ZlcnkgZnJvbSBoYXJkd2FyZSBtZW1vcnkgZXJyb3JzXCYjMzQ7XG4gNzgxOlx0XHRzZWxlY3QgSU5URVJWQUxfVFJFRVxuIDc4MjpcdFx0aGVscFxuIDc4MzpcdFx0ICBFbmFibGVzIGNvZGUgdG8gcmVjb3ZlciBmcm9tIHNvbWUgbWVtb3J5IGZhaWx1cmVzIG9uIHN5c3RlbXNcbiA3ODQ6XHRcdCAgd2l0aCBNQ0EgcmVjb3ZlcnkuIFRoaXMgYWxsb3dzIGEgc3lzdGVtIHRvIGNvbnRpbnVlIHJ1bm5pbmdcbiA3ODU6XHRcdCAgZXZlbiB3aGVuIHNvbWUgb2YgaXRzIG1lbW9yeSBoYXMgdW5jb3JyZWN0ZWQgZXJyb3JzLiBUaGlzIHJlcXVpcmVzXG4gNzg2Olx0XHQgIHNwZWNpYWwgaGFyZHdhcmUgc3VwcG9ydCBhbmQgdHlwaWNhbGx5IEVDQyBtZW1vcnkuXG4gNzg3Olx0XG4gNzg4Olx0Y29uZmlnIEhXUE9JU09OX0lOSkVDVFxuIDc4OTpcdFx0dHJpc3RhdGUgXCYjMzQ7SFdQb2lzb24gcGFnZXMgaW5qZWN0b3JcJiMzNDtcbiA3OTA6XHRcdGRlcGVuZHMgb24gTUVNT1JZX0ZBSUxVUkUgXHUwMDI2XHUwMDI2IERFQlVHX0tFUk5FTCBcdTAwMjZcdTAwMjYgUFJPQ19GU1xuIDc5MTpcdFx0c2VsZWN0IFBST0NfUEFHRV9NT05JVE9SXG4gNzkyOlx0XG4gNzkzOlx0Y29uZmlnIE5PTU1VX0lOSVRJQUxfVFJJTV9FWENFU1NcbiA3OTQ6XHRcdGludCBcJiMzNDtUdXJuIG9uIG1tYXAoKSBleGNlc3Mgc3BhY2UgdHJpbW1pbmcgYmVmb3JlIGJvb3RpbmdcJiMzNDtcbiA3OTU6XHRcdGRlcGVuZHMgb24gIU1NVVxuIDc5NjpcdFx0ZGVmYXVsdCAxXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NjgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBGYWlsdXJlIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgTUVNT1JZX0ZBSUxVUkVgIHNpdHVhdGlvbi4gSXQmIzM5O3MgY2xlYXIgdGhhdCBpdCBoaW5nZXMgb24gYm90aCB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgVW5pdCwgb3IgYE1NVWAsIGFuZCB3aGV0aGVyIHRoZSB1bmRlcmx5aW5nIGFyY2hpdGVjdHVyZSBhY3R1YWxseSBzdXBwb3J0cyBtZW1vcnkgZmFpbHVyZSwgd2hpY2ggaXMgY29udHJvbGxlZCBieSBgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRWAuIE1ha2VzIHNlbnNlLCBgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRWAgaXMgdGhlIGFyY2hpdGVjdHVyZSYjMzk7cyBjYWxsLCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBzdGFydC4gQnV0IGJlZm9yZSBJIGdvIHRvbyBkZWVwLCBJIHNob3VsZCBwcm9iYWJseSBzY2FuIGZvciBhbnkgb3RoZXIgY3J1Y2lhbCBjb25maWdzIHRoYXQgcGxheSBhIHJvbGUgaGVyZS4KClRoZSBwYXRjaCBpdHNlbGYgc2VlbXMgdG8gYmUgdG91Y2hpbmcgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAuIFRoYXQgcmluZ3MgYSBiZWxsLi4uIHRoYXQmIzM5O3MgdGhlIFRIUCBwYWdlIGhhbmRsZXIsIGlzbiYjMzk7dCBpdD8gU28sIHRvIGFjdHVhbGx5IHRyaWdnZXIgdGhpcyBjb2RlLCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCB3b3VsZCBhbG1vc3QgY2VydGFpbmx5IGhhdmUgdG8gYmUgZW5hYmxlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dC4KCkxldCYjMzk7cyBkaWcgaW50byBgbW0vbWVtb3J5LWZhaWx1cmUuY2AgYW5kIHNwZWNpZmljYWxseSBsb29rIGF0IGB0cnlfdG9fc3BsaXRfdGhwX3BhZ2VgLiBUaGF0JiMzOTtsbCBjb25maXJtIGlmIHRoaXMgVEhQIGludGVyYWN0aW9uIGlzIGNlbnRyYWwgdG8gdGhlIHByb2JsZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV90b19zcGxpdF90aHBfcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbW9yeS1mYWlsdXJlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LWZhaWx1cmUuYz0xNjI5PXN0YXRpYyBpbnQgaWRlbnRpZnlfcGFnZV9zdGF0ZSh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2UgKnAsXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNjU2LSAqL1xubW0vbWVtb3J5LWZhaWx1cmUuYzoxNjU3OnN0YXRpYyBpbnQgdHJ5X3RvX3NwbGl0X3RocF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNjU4LVx0XHRib29sIHJlbGVhc2UpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMzMwPWludCBtZW1vcnlfZmFpbHVyZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQ1OS1cdFx0Zm9saW9fc2V0X2hhc19od3BvaXNvbmVkKGZvbGlvKTtcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjQ2MDpcdFx0ZXJyID0gdHJ5X3RvX3NwbGl0X3RocF9wYWdlKHAsIG5ld19vcmRlciwgLyogcmVsZWFzZT0gKi8gZmFsc2UpO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0yNDYxLVx0XHQvKlxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9Mjc4Mz1zdGF0aWMgaW50IHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI4MDgtXHRcdCAqIERyb3AgdGhlIHJlZmVyZW5jZSBvYnRhaW5lZCB1cG9uIGVudHJ5O1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyODA5Olx0XHQgKiB0cnlfdG9fc3BsaXRfdGhwX3BhZ2UoLi4uLCByZWxlYXNlPXRydWUpIGhhbmRsZXMgcmVmY291bnRpbmcgaXRzZWxmXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI4MTAtXHRcdCAqIHdoZW4gdGhlIHNwbGl0IGZhaWxzLlxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjgxNy1cdFx0fVxubW0vbWVtb3J5LWZhaWx1cmUuYzoyODE4Olx0XHRpZiAodHJ5X3RvX3NwbGl0X3RocF9wYWdlKHBhZ2UsIC8qIG5ld19vcmRlcj0gKi8gMCxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjgxOS1cdFx0XHRcdFx0IC8qIHJlbGVhc2U9ICovIHRydWUpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3OTQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyBDb25kaXRpb25hbCBDb21waWxhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlLiBNeSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBpcyB0aGF0IGB0cnlfdG9fc3BsaXRfdGhwX3BhZ2VgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgd2hldGhlciBpdCYjMzk7cyBjb21waWxlZCBjb25kaXRpb25hbGx5IG9yIG5vdC4gVGhpcyBpcyBhIGNydWNpYWwgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIGl0cyBvdmVyYWxsIGJlaGF2aW9yIGFuZCBpdHMgaW1wYWN0IG9uIHBlcmZvcm1hbmNlIGFuZCBwb3J0YWJpbGl0eS4gQSBzaW1wbGUgY2hlY2sgd2lsbCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiB0aGF0IEkgbmVlZCB0byBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtb3J5LWZhaWx1cmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2NTcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTY1NzpcdHN0YXRpYyBpbnQgdHJ5X3RvX3NwbGl0X3RocF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxuMTY1ODpcdFx0XHRib29sIHJlbGVhc2UpXG4xNjU5Olx0e1xuMTY2MDpcdFx0aW50IHJldDtcbjE2NjE6XHRcbjE2NjI6XHRcdGxvY2tfcGFnZShwYWdlKTtcbjE2NjM6XHRcdHJldCA9IHNwbGl0X2h1Z2VfcGFnZV90b19vcmRlcihwYWdlLCBuZXdfb3JkZXIpO1xuMTY2NDpcdFx0dW5sb2NrX3BhZ2UocGFnZSk7XG4xNjY1Olx0XG4xNjY2Olx0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZWxlYXNlKVxuMTY2NzpcdFx0XHRwdXRfcGFnZShwYWdlKTtcbjE2Njg6XHRcbjE2Njk6XHRcdHJldHVybiByZXQ7XG4xNjcwOlx0fVxuMTY3MTpcdFxuMTY3MjpcdHN0YXRpYyB2b2lkIHVubWFwX2FuZF9raWxsKHN0cnVjdCBsaXN0X2hlYWQgKnRvX2tpbGwsIHVuc2lnbmVkIGxvbmcgcGZuLFxuMTY3MzpcdFx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBpbmRleCwgaW50IGZsYWdzKVxuMTY3NDpcdHtcbjE2NzU6XHRcdHN0cnVjdCB0b19raWxsICp0aztcbjE2NzY6XHRcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IDA7XG4xNjc3Olx0XG4xNjc4Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHRrLCB0b19raWxsLCBuZClcbjE2Nzk6XHRcdFx0aWYgKHRrLVx1MDAzZXNpemVfc2hpZnQpXG4xNjgwOlx0XHRcdFx0c2l6ZSA9IG1heChzaXplLCAxVUwgXHUwMDNjXHUwMDNjIHRrLVx1MDAzZXNpemVfc2hpZnQpO1xuMTY4MTpcdFxuMTY4MjpcdFx0aWYgKHNpemUpIHtcbjE2ODM6XHRcdFx0LypcbjE2ODQ6XHRcdFx0ICogVW5tYXAgdGhlIGxhcmdlc3QgbWFwcGluZyB0byBhdm9pZCBicmVha2luZyB1cCBkZXZpY2UtZGF4XG4xNjg1Olx0XHRcdCAqIG1hcHBpbmdzIHdoaWNoIGFyZSBjb25zdGFudCBzaXplLiBUaGUgYWN0dWFsIHNpemUgb2YgdGhlXG4xNjg2Olx0XHRcdCAqIG1hcHBpbmcgYmVpbmcgdG9ybiBkb3duIGlzIGNvbW11bmljYXRlZCBpbiBzaWdpbmZvLCBzZWVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM3MgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGBzcGxpdF9odWdlX3BhZ2VfdG9fb3JkZXJgKioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiBUaGUgY29kZSBpcyB1c2luZyBgc3BsaXRfaHVnZV9wYWdlX3RvX29yZGVyYC4gVGhpcyBpcyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHRoZSBjb250ZXh0IGhlcmUuIEkmIzM5O20gYXNzdW1pbmcgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCwgbGlrZWx5IHJlbGF0ZWQgdG8gTlVNQSBhcmNoaXRlY3R1cmVzIG9yIG9wdGltaXphdGlvbnMgZm9yIGxhcmdlIG1lbW9yeSBwYWdlcy4gVGhlIGZ1bmN0aW9uIG5hbWUgaXRzZWxmIHN1Z2dlc3RzIGEgcHJvY2VzcyBvZiBicmVha2luZyBkb3duIGEgbGFyZ2UgcGFnZSBpbnRvIHNtYWxsZXIsIHBvdGVudGlhbGx5IG1vcmUgbWFuYWdlYWJsZSB1bml0cywgYW5kIGFycmFuZ2luZyB0aGVtIGluIGEgcGFydGljdWxhciBvcmRlci4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyByZWxhdGVzIHRvIHRoZSBvdmVyYWxsIG1lbW9yeSBhbGxvY2F0aW9uIHN0cmF0ZWd5LiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYHNwbGl0X2h1Z2VfcGFnZV90b19vcmRlcmAgbm93LiBXaGF0IGFyZSB0aGUgaW5wdXRzPyBXaGF0JiMzOTtzIHRoZSBpbnRlbmRlZCBvdXRwdXQ/IElzIHRoaXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIGEgd29ya2Fyb3VuZCBmb3IgaGFyZHdhcmUgbGltaXRhdGlvbnMsIG9yIHBhcnQgb2YgYSBtb3JlIGNvbXBsZXggbWVtb3J5IG1hbmFnZW1lbnQgYWxnb3JpdGhtPyBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IHRoaXMgbWlnaHQgYmUgZGVhbGluZyB3aXRoIGZyYWdtZW50YXRpb24sIG9yIHBvdGVudGlhbGx5IHJlZHVjaW5nIHRoZSBvdmVyaGVhZCBvZiBhbGxvY2F0aW5nIGh1Z2UgcGFnZXMgdW5kZXIgc3BlY2lmaWMgY2lyY3Vtc3RhbmNlcy4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3BsaXRfaHVnZV9wYWdlX3RvX29yZGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZV9tbS5oPTQxMj1zdGF0aWMgaW5saW5lIGludCBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00MTYtfVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NDE3OnN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZV90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG5ld19vcmRlcilcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQxOC17XG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NjMwPXNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTYzNS19XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo2MzY6c3RhdGljIGlubGluZSBpbnQgc3BsaXRfaHVnZV9wYWdlX3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNjM3LXtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTE2NTc9c3RhdGljIGludCB0cnlfdG9fc3BsaXRfdGhwX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNjYyLVx0bG9ja19wYWdlKHBhZ2UpO1xubW0vbWVtb3J5LWZhaWx1cmUuYzoxNjYzOlx0cmV0ID0gc3BsaXRfaHVnZV9wYWdlX3RvX29yZGVyKHBhZ2UsIG5ld19vcmRlcik7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTE2NjQtXHR1bmxvY2tfcGFnZShwYWdlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTAyMAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGEgSHVnZSBQYWdlIERlZmluaXRpb24qKgoKQWxyaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXJ0aWN1bGFyIG1hY3JvIG9yIGRlZmluaXRpb24uIE15IGZpcnN0IG1vdmUgaXMgdG8gbG9jYXRlIGl0cyBkZWZpbml0aXZlIGRlY2xhcmF0aW9uLiBUaGUgaGludCBwb2ludHMgbWUgZGlyZWN0bHkgdG8gYGluY2x1ZGUvbGludXgvaHVnZV9tbS5oYC4gVGhhdCBtYWtlcyBzZW5zZTsgaHVnZSBwYWdlIGRlZmluaXRpb25zIGFyZSB0eXBpY2FsbHkgdHVja2VkIGF3YXkgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGhlYWRlci4gTm93LCBJJiMzOTttIG5vdCBqdXN0IGdvaW5nIHRvICphc3N1bWUqIEkga25vdyB3aGF0IGl0IGRvZXMgYmFzZWQgb24gdGhlIGZpbGUgbmFtZS4gVGhlIG5leHQgY3JpdGljYWwgc3RlcCBpcyB0byBxdWlja2x5IHNjYW4gZm9yIGFueSBwcmVwcm9jZXNzb3IgY29uZGl0aW9uYWxzLCBwYXJ0aWN1bGFybHkgdGhlIGAjaWZkZWZgIGRpcmVjdGl2ZXMgdGhhdCBtaWdodCBjb250cm9sIGl0cyBhdmFpbGFiaWxpdHkgb3IgbWVhbmluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHRzIGluIHdoaWNoIHRoaXMgdGhpbmcgaXMgYWN0dWFsbHkgZGVmaW5lZCBhbmQgKmhvdyogaXQmIzM5O3MgZGVmaW5lZCwgYmVmb3JlIEkgY2FuIG1ha2UgYW55IGFzc3VtcHRpb25zIGFib3V0IGl0cyB1c2FnZSBvciBwdXJwb3NlLiBBbnkgYCNpZmRlZmAgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50IGluIHRlbGxpbmcgbWUgd2hlbiBhbmQgd2hlcmUgdGhlIGRlZmluaXRpb24gaXMgdmFsaWQuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIGl0cyBiZWhhdmlvciBjaGFuZ2VzIHVuZGVyIGRpZmZlcmVudCBrZXJuZWwgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdlX21tLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQwMDpcdH07XG4gNDAxOlx0XG4gNDAyOlx0aW50IF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXG4gNDAzOlx0XHRcdHVuc2lnbmVkIGludCBuZXdfb3JkZXIpO1xuIDQwNDpcdGludCBmb2xpb19zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKTtcbiA0MDU6XHR1bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiA0MDY6XHRpbnQgc3BsaXRfZm9saW9fdG9fbGlzdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KTtcbiA0MDc6XHRpbnQgZm9saW9fY2hlY2tfc3BsaXR0YWJsZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxuIDQwODpcdFx0XHRcdCAgIGVudW0gc3BsaXRfdHlwZSBzcGxpdF90eXBlKTtcbiA0MDk6XHRpbnQgZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlciwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gNDEwOlx0XHRcdHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpO1xuIDQxMTpcdFxuIDQxMjpcdHN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxuIDQxMzpcdFx0XHR1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxuIDQxNDpcdHtcbiA0MTU6XHRcdHJldHVybiBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHBhZ2UsIGxpc3QsIG5ld19vcmRlcik7XG4gNDE2Olx0fVxuIDQxNzpcdHN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZV90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG5ld19vcmRlcilcbiA0MTg6XHR7XG4gNDE5Olx0XHRyZXR1cm4gc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIocGFnZSwgTlVMTCwgbmV3X29yZGVyKTtcbiA0MjA6XHR9XG4gNDIxOlx0XG4gNDIyOlx0c3RhdGljIGlubGluZSBpbnQgc3BsaXRfaHVnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuIDQyMzpcdHtcbiA0MjQ6XHRcdHJldHVybiBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihwYWdlLCBOVUxMLCAwKTtcbiA0MjU6XHR9XG4gNDI2Olx0XG4gNDI3Olx0aW50IGZvbGlvX21lbWNnX2FsbG9jX2RlZmVycmVkKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIDQyODpcdFxuIDQyOTpcdHZvaWQgZGVmZXJyZWRfc3BsaXRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBwYXJ0aWFsbHlfbWFwcGVkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg0MwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIGZpZ3VyaW5nIG91dCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbiBlbmFibGVzIHRoYXQgc3BlY2lmaWMgbGluZToKCioqUGlucG9pbnRpbmcgdGhlIENvbmZpZ3VyYXRpb24gU291cmNlKioKCkFscmlnaHQsIHRoZSBvYmplY3RpdmUgaGVyZSBpcyB0byBkZXRlcm1pbmUgdGhlIEtjb25maWcgb3B0aW9uIHRoYXQgdWx0aW1hdGVseSByZXN1bHRzIGluIHRoZSBpbmNsdXNpb24gb2YgbGluZSA0MDAgd2l0aGluIGBpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaGAuIEkmIzM5O3ZlIGdvdCB0byB0cmFjZSB0aGlzIGJhY2sgdGhyb3VnaCB0aGUga2VybmVsJiMzOTtzIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdG8gYXBwcm9hY2ggdGhpcyBpbiBhIG1ldGhvZGljYWwgd2F5LiBJJiMzOTttIGdvaW5nIHRvIGxldmVyYWdlIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGtlcm5lbCYjMzk7cyBidWlsZCBzeXN0ZW0gYW5kIGNvbmZpZ3VyYXRpb24gbWVjaGFuaWNzIHRvIGdldCB0byB0aGUgcm9vdCBjYXVzZSwgYW5kIHRoZW4gSSYjMzk7bGwgY29uc2lkZXIgaG93IGJlc3QgdG8gcHJlc2VudCB0aGF0IGluZm9ybWF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD0xMjc9ZW51bSBtdGhwX3N0YXRfaXRlbSB7XG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMTUyLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6MTUzOiNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1NZU0ZTKVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMTU0LXN0cnVjdCBtdGhwX3N0YXQge1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTE3OD1zdGF0aWMgaW5saW5lIHZvaWQgY291bnRfbXRocF9zdGF0KGludCBvcmRlciwgZW51bSBtdGhwX3N0YXRfaXRlbSBpdGVtKVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTE4Mi1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjE4MzojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0xODQtXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NTc3PXZvaWQgbWFwX2Fub25fZm9saW9fcG1kX25vcGYoc3RydWN0IGZvbGlvICpmb2xpbywgcG1kX3QgKnBtZCxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC01NzktXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo1ODA6I2Vsc2UgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC01ODEtXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9Nzg5PXN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfaHVnZShwbWRfdCBwbWQpXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNzkyLX1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjc5MzojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC03OTQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDUyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIEh1Z2UgUGFnZXMgYW5kIFNvZnQgT2ZmbGluZSBQYWdlcyoqCgpBbHJpZ2h0LCByaWdodCBvZmYgdGhlIGJhdCwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZXNzZW50aWFsIGZvciB3aGF0IEkmIzM5O20gd29ya2luZyBvbi4gTm93LCBsZXQgbWUgY2lyY2xlIGJhY2sgYW5kIGRvdWJsZS1jaGVjayBteSB1bmRlcnN0YW5kaW5nIGFuZCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGF0IGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgIHZhcmlhYmxlLiBUaGVyZSYjMzk7cyBwcm9iYWJseSBhbiBpbnRlcmFjdGlvbiB0aGVyZSB0aGF0IEkgbmVlZCB0byByZS1ldmFsdWF0ZSBiYXNlZCBvbiB0aGUgaHVnZSBwYWdlIGNvbmZpZ3VyYXRpb24uIExldCYjMzk7cyBtYWtlIHN1cmUgSSYjMzk7bSBjb25uZWN0aW5nIGFsbCB0aGUgZG90cyBjb3JyZWN0bHkgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbi4gSXQmIzM5O3MgdGltZSBmb3IgYSBtb3JlIGdyYW51bGFyIGluc3BlY3Rpb24gb2YgdGhhdCBzcGVjaWZpYyBhc3BlY3QsIGdpdmVuIHRoZSBicm9hZGVyIGNvbnRleHQgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbW9yeS1mYWlsdXJlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzgzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI3ODM6XHRzdGF0aWMgaW50IHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbjI3ODQ6XHR7XG4yNzg1Olx0XHRsb25nIHJldCA9IDA7XG4yNzg2Olx0XHR1bnNpZ25lZCBsb25nIHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpO1xuMjc4NzpcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG4yNzg4Olx0XHRjaGFyIGNvbnN0ICptc2dfcGFnZVtdID0ge1wmIzM0O3BhZ2VcJiMzNDssIFwmIzM0O2h1Z2VwYWdlXCYjMzQ7fTtcbjI3ODk6XHRcdGJvb2wgaHVnZSA9IGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbyk7XG4yNzkwOlx0XHRib29sIGlzb2xhdGVkO1xuMjc5MTpcdFx0TElTVF9IRUFEKHBhZ2VsaXN0KTtcbjI3OTI6XHRcdHN0cnVjdCBtaWdyYXRpb25fdGFyZ2V0X2NvbnRyb2wgbXRjID0ge1xuMjc5MzpcdFx0XHQubmlkID0gTlVNQV9OT19OT0RFLFxuMjc5NDpcdFx0XHQuZ2ZwX21hc2sgPSBHRlBfVVNFUiB8IF9fR0ZQX01PVkFCTEUgfCBfX0dGUF9SRVRSWV9NQVlGQUlMLFxuMjc5NTpcdFx0XHQucmVhc29uID0gTVJfTUVNT1JZX0ZBSUxVUkUsXG4yNzk2Olx0XHR9O1xuMjc5NzpcdFxuMjc5ODpcdFx0aWYgKCFodWdlIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkge1xuMjc5OTpcdFx0XHRjb25zdCBpbnQgbmV3X29yZGVyID0gbWluX29yZGVyX2Zvcl9zcGxpdChmb2xpbyk7XG4yODAwOlx0XG4yODAxOlx0XHRcdC8qXG4yODAyOlx0XHRcdCAqIElmIG5ld19vcmRlciAodGFyZ2V0IHNwbGl0IG9yZGVyKSBpcyBub3QgMCwgZG8gbm90IHNwbGl0IHRoZVxuMjgwMzpcdFx0XHQgKiBmb2xpbyBhdCBhbGwgdG8gcmV0YWluIHRoZSBzdGlsbCBhY2Nlc3NpYmxlIGxhcmdlIGZvbGlvLlxuMjgwNDpcdFx0XHQgKiBOT1RFOiBpZiBtaW5pbWl6aW5nIHRoZSBudW1iZXIgb2Ygc29mdCBvZmZsaW5lIHBhZ2VzIGlzXG4yODA1Olx0XHRcdCAqIHByZWZlcnJlZCwgc3BsaXQgaXQgdG8gbm9uLXplcm8gbmV3X29yZGVyIGxpa2UgaXQgaXMgZG9uZSBpblxuMjgwNjpcdFx0XHQgKiBtZW1vcnlfZmFpbHVyZSgpLlxuMjgwNzpcdFx0XHQgKlxuMjgwODpcdFx0XHQgKiBEcm9wIHRoZSByZWZlcmVuY2Ugb2J0YWluZWQgdXBvbiBlbnRyeTtcbjI4MDk6XHRcdFx0ICogdHJ5X3RvX3NwbGl0X3RocF9wYWdlKC4uLiwgcmVsZWFzZT10cnVlKSBoYW5kbGVzIHJlZmNvdW50aW5nIGl0c2VsZlxuMjgxMDpcdFx0XHQgKiB3aGVuIHRoZSBzcGxpdCBmYWlscy5cbjI4MTE6XHRcdFx0ICovXG4yODEyOlx0XHRcdGlmIChuZXdfb3JkZXIpIHtcbjI4MTM6XHRcdFx0XHRwcl9pbmZvKFwmIzM0OyUjbHg6IG9yZGVyLSVkIGZvbGlvIGNhbm5vdCBzb2Z0IG9mZmxpbmVcXG5cJiMzNDssXG4yODE0Olx0XHRcdFx0XHRwZm4sIG5ld19vcmRlcik7XG4yODE1Olx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbjI4MTY6XHRcdFx0XHRyZXR1cm4gLUVCVVNZO1xuMjgxNzpcdFx0XHR9XG4yODE4Olx0XHRcdGlmICh0cnlfdG9fc3BsaXRfdGhwX3BhZ2UocGFnZSwgLyogbmV3X29yZGVyPSAqLyAwLFxuMjgxOTpcdFx0XHRcdFx0XHQgLyogcmVsZWFzZT0gKi8gdHJ1ZSkpIHtcbjI4MjA6XHRcdFx0XHRwcl9pbmZvKFwmIzM0OyUjbHg6IHRocCBzcGxpdCBmYWlsZWRcXG5cJiMzNDssIHBmbik7XG4yODIxOlx0XHRcdFx0cmV0dXJuIC1FQlVTWTtcbjI4MjI6XHRcdFx0fVxuMjgyMzpcdFx0XHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG4yODI0Olx0XHR9XG4yODI1Olx0XG4yODI2Olx0XHRmb2xpb19sb2NrKGZvbGlvKTtcbjI4Mjc6XHRcdGlmICghaHVnZSlcbjI4Mjg6XHRcdFx0Zm9saW9fd2FpdF93cml0ZWJhY2soZm9saW8pO1xuMjgyOTpcdFx0aWYgKFBhZ2VIV1BvaXNvbihwYWdlKSkge1xuMjgzMDpcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuMjgzMTpcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuMjgzMjpcdFx0XHRwcl9pbmZvKFwmIzM0OyUjbHg6IHBhZ2UgYWxyZWFkeSBwb2lzb25lZFxcblwmIzM0OywgcGZuKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0NzYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGb2xpbyBhbmQgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gdGhlIGNvZGUgaGl0cyB0aGlzIHNwZWNpZmljIHBhdGg6IGAhaHVnZSAmYW1wOyZhbXA7IGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pYC4gUmlnaHQsIHRoYXQgY2xlYXJseSBpbmRpY2F0ZXMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGxhcmdlIGZvbGlvLCBzcGVjaWZpY2FsbHkgYSBUcmFuc3BhcmVudCBIdWdlIFBhZ2UgKFRIUCksIGJ1dCAqbm90KiBhIGh1Z2V0bGIgcGFnZS4gVGhhdCYjMzk7cyB0aGUga2V5IGRpc3RpbmN0aW9uLiBHaXZlbiB0aGlzIHNjZW5hcmlvLCB0aGUgc3lzdGVtICoqYWJzb2x1dGVseSoqIG5lZWRzIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGVuYWJsZWQuIE5vIHN1cnByaXNlcyB0aGVyZS4gQW5kLCBjb25zaWRlcmluZyB0aGUgY29udGV4dCwgYENPTkZJR19NRU1PUllfRkFJTFVSRWAgaXMgYWxzbyBnb2luZyB0byBiZSBhIHJlcXVpcmVtZW50IGZvciBoYW5kbGluZyBwb3RlbnRpYWwgbWVtb3J5IGZhaWx1cmVzIHdpdGhpbiB0aGUgVEhQIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBkZXBlbmRlbnQgY29uZmlndXJhdGlvbnMuIEkmIzM5O20gdGhpbmtpbmcsIGBDT05GSUdfTUlHUkFUSU9OYCBpcyBhbG1vc3QgY2VydGFpbmx5IG5lZWRlZC4gVGhlIHByZXNlbmNlIG9mIGBzdHJ1Y3QgbWlncmF0aW9uX3RhcmdldF9jb250cm9sIG10Y2Agc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBwYWdlIG1pZ3JhdGlvbi4gQmV0dGVyIGhlYWQgb3ZlciB0byBgbW0vbWVtb3J5LWZhaWx1cmUuY2AgdG8gY29uZmlybSBteSBzdXNwaWNpb24gYW5kIHNlZSBob3cgYENPTkZJR19NSUdSQVRJT05gIGlzIHRpZWQgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX01JR1JBVElPTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbW9yeS1mYWlsdXJlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg3MAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLgoKKipJbnZlc3RpZ2F0aW5nIGEgTWlzc2luZyBNaWdyYXRpb24gQ29uZmlndXJhdGlvbioqCgpIbW0sIHNvbWV0aGluZyBzZWVtcyBvZmYuIEkgd2FzIGp1c3QgbG9va2luZyBhdCBgbW0vbWVtb3J5LWZhaWx1cmUuY2AsIGFuZCBpdCYjMzk7cyBub3QgZ3VhcmRlZCBieSBhbnkgYENPTkZJR19NSUdSQVRJT05gIGlmZGVmcz8gVGhhdCYjMzk7cyBhIGJpdCBzdXJwcmlzaW5nLiBJIHRob3VnaHQgdGhvc2UgZmVhdHVyZXMgd2VyZSBvZnRlbiB0aWVkIHRvZ2V0aGVyLiBMZXQgbWUganVzdCBkb3VibGUgY2hlY2sgdGhlIGBtbS9LY29uZmlnYCBmaWxlIGFnYWluLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIHNvbWV0aGluZyByZWxhdGVkIHRvIGBNRU1PUllfRkFJTFVSRWAgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgbWlncmF0aW9uIG9wdGlvbnMuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgc3VidGxlIGNvbmRpdGlvbmFsIGRlcGVuZGVuY3kgSSBvdmVybG9va2VkLCBvciBwZXJoYXBzIGl0JiMzOTtzIGhhbmRsZWQgZGlmZmVyZW50bHkgdGhhbiBJIGluaXRpYWxseSBhc3N1bWVkLiBCZXR0ZXIgdG8gYmUgY2VydGFpbiBhbmQgbm90IGp1bXAgdG8gYW55IGluY29ycmVjdCBhc3N1bXB0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTU9SWV9GQUlMVVJFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTc3ND1jb25maWcgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxuLS1cbm1tL0tjb25maWctNzc2LVxubW0vS2NvbmZpZzo3Nzc6Y29uZmlnIE1FTU9SWV9GQUlMVVJFXG5tbS9LY29uZmlnLTc3OC1cdGRlcGVuZHMgb24gTU1VXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTY1CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgTWlncmF0aW9uIENvbmZpZ3VyYXRpb24gaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYE1JR1JBVElPTmAgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgYnVpbGQgc3lzdGVtLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSB0eXBpY2FsIHBsYWNlIHdoZXJlIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgYXJlIGRlZmluZWQsIGFuZCBgTUlHUkFUSU9OYCBzb3VuZHMgbGlrZSBpdCYjMzk7ZCBmYWxsIHNxdWFyZWx5IHdpdGhpbiB0aGF0IGRvbWFpbi4gSXQmIzM5O3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgY29udHJvbHMgdGhpcyBmZWF0dXJlIOKAkyBpcyBpdCBhIGJvb2xlYW4gb3B0aW9uLCBhbiBpbnRlZ2VyLCBwZXJoYXBzPyBBcmUgdGhlcmUgYW55IGRlcGVuZGVuY2llcz8gV2hhdCBvdGhlciBvcHRpb25zIGFyZSByZWxhdGVkPyBJJiMzOTtsbCBuZWVkIHRvIGNhcmVmdWxseSBleGFtaW5lIHRoYXQgZmlsZS4gSWYgaXQmIzM5O3Mgbm90IHRoZXJlIEkmIzM5O2xsIGhhdmUgdG8gYnJvYWRlbiBteSBzZWFyY2ggdG8gb3RoZXIgcmVsZXZhbnQgYEtjb25maWdgIGZpbGVzLCBidXQgZm9yIG5vdywgYG1tL0tjb25maWdgIGlzIHRoZSBiZXN0IGJldC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNSUdSQVRJT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9Njg1PWNvbmZpZyBOVU1BX01JR1JBVElPTlxuLS1cbm1tL0tjb25maWctNjk1LVxubW0vS2NvbmZpZzo2OTY6Y29uZmlnIE1JR1JBVElPTlxubW0vS2NvbmZpZy02OTctXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDcwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgYG1tL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBNSUdSQVRJT05gIG9wdGlvbnMuCgoqKkRpdmluZyBpbnRvIGBtbS9LY29uZmlnYCBhbmQgdGhlIGBNSUdSQVRJT05gIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG1tL0tjb25maWdgLCBzcGVjaWZpY2FsbHkgemVyb2luZyBpbiBvbiBhbnl0aGluZyByZWxhdGVkIHRvIG1lbW9yeSBtaWdyYXRpb24uIFRoaXMgaXMgYSBjcml0aWNhbCBhcmVhLCBlc3BlY2lhbGx5IGZvciBzeXN0ZW1zIHRoYXQgbmVlZCB0byBkeW5hbWljYWxseSBtYW5hZ2UgbWVtb3J5LCBOVU1BIHNldHVwcywgb3IgaGFuZGxlIG9ubGluZSBtZW1vcnkgcmVzaXppbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBhdmFpbGFibGUgYW5kIGhvdyB0aGV5IGluZmx1ZW5jZSB0aGUga2VybmVsJiMzOTtzIGJlaGF2aW9yLiBUaGUgYE1JR1JBVElPTmAgb3B0aW9ucyBhcmUgY2xlYXJseSB0aGUgcGxhY2UgdG8gc3RhcnQuCgpJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIHJlbGF0ZWQgdG8gdGhlIGNvcmUgbWlncmF0aW9uIGZ1bmN0aW9uYWxpdGllczogcGFnZSBtaWdyYXRpb24sIG5vZGUgbWlncmF0aW9uLCBvbmxpbmUgbWVtb3J5IGFkZC9yZW1vdmUuIEkmIzM5O20gaG9waW5nIHRvIHNlZSBjbGVhciBkZXBlbmRlbmNpZXMgYmV0d2VlbiB0aGVzZSBvcHRpb25zLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSB1bmRlcmx5aW5nIGFyY2hpdGVjdHVyZSwgTlVNQSBzdXBwb3J0LCBhbmQgaG90cGx1ZyBjYXBhYmlsaXRpZXMuIEkmIzM5O20gYWxzbyBsb29raW5nIGZvciBhbnkgY29uZGl0aW9uYWwgY29uZmlndXJhdGlvbnMsIGZlYXR1cmVzIHRoYXQgYXJlIG9ubHkgZW5hYmxlZCB3aGVuIG90aGVycyBhcmUgYWxzby4KCkkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55ICYjMzQ7ZXhwZXJ0JiMzNDsgb3B0aW9ucyBvciB0aG9zZSBtYXJrZWQgYXMgJiMzNDtFWFBFUklNRU5UQUwmIzM0OyBvciAmIzM0O0RFQlVHJiMzNDsgYmVjYXVzZSB0aGVzZSB0ZW5kIHRvIGdpdmUgY2x1ZXMgYWJvdXQgdGhlIGludGVybmFsIHdvcmtpbmdzIGFuZCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgdHJhZGUtb2Zmcy4gSXQmIzM5O3MgYWxzbyBwb3NzaWJsZSB0aGF0IHRoZXJlIGFyZSBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSBzcGVjaWZpYyB0byBjZXJ0YWluIGhhcmR3YXJlIHBsYXRmb3JtcyB0aGF0IGNvdWxkIGJlIG9mIGludGVyZXN0LgoKTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgYXJlIGhpZGRlbiBpbiB0aGlzIGZpbGUuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGF2YWlsYWJsZSBjb250cm9scyB0aGF0IEkgaGF2ZSwgYXMgd2VsbCBhcyB0aGUgZGVzaWduIGNob2ljZXMgYmVoaW5kIHRoZW0uIFRoaXMgd2lsbCBiZXR0ZXIgaW5mb3JtIGhvdyBJIGNvbmZpZ3VyZSB0aGUga2VybmVsIGZvciBhIG5ldyBzeXN0ZW0gdGhhdCBJIGhhdmUgY29taW5nIG9ubGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjk2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2OTY6XHRjb25maWcgTUlHUkFUSU9OXG4gNjk3Olx0XHRib29sXG4gNjk4Olx0XHRkZXBlbmRzIG9uIE1NVVxuIDY5OTpcdFxuIDcwMDpcdGNvbmZpZyBERVZJQ0VfTUlHUkFUSU9OXG4gNzAxOlx0XHRkZWZfYm9vbCBNSUdSQVRJT04gXHUwMDI2XHUwMDI2IFpPTkVfREVWSUNFXG4gNzAyOlx0XG4gNzAzOlx0Y29uZmlnIEFSQ0hfRU5BQkxFX0hVR0VQQUdFX01JR1JBVElPTlxuIDcwNDpcdFx0Ym9vbFxuIDcwNTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk2NQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBNSUdSQVRJT05gIFZhcmlhYmxlKioKCk9rYXksIHNvIGBNSUdSQVRJT05gIGlzIGEgYm9vbGVhbiwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgZWl0aGVyIHRydWUgb3IgZmFsc2UsIGFuZCBpdCYjMzk7cyBiZWluZyBzZXQgYnkgb3RoZXIgY29uZmlndXJhdGlvbiBzZXR0aW5ncy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7d2hvJiMzOTtzIGZsaXBwaW5nIHRoaXMgc3dpdGNoPyYjMzQ7IEl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCB3aGVyZSB0aGlzIHZhcmlhYmxlIGlzIGJlaW5nIGNvbnRyb2xsZWQuIEtub3dpbmcgdGhlIGNhbGxlcnMgd2lsbCBoZWxwIG1lIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIGltcGxpY2F0aW9ucyBvZiBgTUlHUkFUSU9OYCBiZWluZyBpbiBhIHBhcnRpY3VsYXIgc3RhdGUuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGFuZCBpZGVudGlmeSBhbGwgdGhlIG90aGVyIGNvbmZpZ3MgdGhhdCBhcmUgdG91Y2hpbmcgdGhpcyBib29sZWFuIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGZ1bGx5LiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgYWxsIG9mIHRoZSBwb3NzaWJsZSBjYWxsZXJzIGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBgTUlHUkFUSU9OYCBpcyBhZmZlY3RlZC4gVGhhdCYjMzk7cyB0aGUgcHJpb3JpdHkgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgTUlHUkFUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NTkxPWNvbmZpZyBNRU1PUllfSE9UUkVNT1ZFXG4tLVxubW0vS2NvbmZpZy01OTQtXHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHXG5tbS9LY29uZmlnOjU5NTpcdHNlbGVjdCBNSUdSQVRJT05cbm1tL0tjb25maWctNTk2LVxuLS1cbm1tL0tjb25maWc9NjU0PWNvbmZpZyBDT01QQUNUSU9OXG4tLVxubW0vS2NvbmZpZy02NTYtXHRkZWZhdWx0IHlcbm1tL0tjb25maWc6NjU3Olx0c2VsZWN0IE1JR1JBVElPTlxubW0vS2NvbmZpZy02NTgtXHRkZXBlbmRzIG9uIE1NVVxuLS1cbm1tL0tjb25maWc9Njg1PWNvbmZpZyBOVU1BX01JR1JBVElPTlxuLS1cbm1tL0tjb25maWctNjg4LVx0ZGVwZW5kcyBvbiBOVU1BIFx1MDAyNlx1MDAyNiBNTVVcbm1tL0tjb25maWc6Njg5Olx0c2VsZWN0IE1JR1JBVElPTlxubW0vS2NvbmZpZy02OTAtXHRoZWxwXG4tLVxubW0vS2NvbmZpZz0xMDY3PWNvbmZpZyBDTUFcbi0tXG5tbS9LY29uZmlnLTEwNjktXHRkZXBlbmRzIG9uIE1NVVxubW0vS2NvbmZpZzoxMDcwOlx0c2VsZWN0IE1JR1JBVElPTlxubW0vS2NvbmZpZy0xMDcxLVx0c2VsZWN0IE1FTU9SWV9JU09MQVRJT05cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0NDYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gY29uZmlndXJpbmcgdGhpcyBzeXN0ZW0gYW5kIHRoZSBhdXRvbWF0aWMgc2VsZWN0aW9uIGZhdm9ycyBgTUlHUkFUSU9OYCBiZWNhdXNlIGBDT01QQUNUSU9OYCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZXhwbGljaXRseSBpbmNsdWRlIGBNRU1PUllfRkFJTFVSRWAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYXMgaW1wb3J0YW50IGNvbnNpZGVyYXRpb25zIGluIG15IHNldCB1cC4gSnVzdCB3YW50IHRvIHRha2UgYSBtb21lbnQgYW5kIHRoaW5rIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWdzIEkgbmVlZCB0byBhZGRyZXNzLiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgYmVoYXZpb3Igb2YgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIGFzIGl0IGludGVyYWN0cyB3aXRoIHRoZXNlIG90aGVycy4gSSBzaG91bGQgY29uZmlybSBpdHMgc2V0dGluZ3MsIGFuZCBob3cgaXQgaW1wYWN0cyBmcmFnbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaW5fb3JkZXJfZm9yX3NwbGl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZV9tbS5oPTQwND1pbnQgZm9saW9fc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcik7XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo0MDU6dW5zaWduZWQgaW50IG1pbl9vcmRlcl9mb3Jfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbyk7XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00MDYtaW50IHNwbGl0X2ZvbGlvX3RvX2xpc3Qoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCk7XG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NjQxPXN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC02NDYtXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo2NDc6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNjQ4LXtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQzMjk9aW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00MzM2LS8qKlxubW0vaHVnZV9tZW1vcnkuYzo0MzM3OiAqIG1pbl9vcmRlcl9mb3Jfc3BsaXQoKSAtIGdldCB0aGUgbWluaW11bSBvcmRlciBAZm9saW8gY2FuIGJlIHNwbGl0IHRvXG5tbS9odWdlX21lbW9yeS5jLTQzMzgtICogQGZvbGlvOiBmb2xpbyB0byBzcGxpdFxubW0vaHVnZV9tZW1vcnkuYy00MzM5LSAqXG5tbS9odWdlX21lbW9yeS5jOjQzNDA6ICogbWluX29yZGVyX2Zvcl9zcGxpdCgpIHRlbGxzIHRoZSBtaW5pbXVtIG9yZGVyIEBmb2xpbyBjYW4gYmUgc3BsaXQgdG8uXG5tbS9odWdlX21lbW9yeS5jLTQzNDEtICogSWYgYSBmaWxlLWJhY2tlZCBmb2xpbyBpcyB0cnVuY2F0ZWQsIDAgd2lsbCBiZSByZXR1cm5lZC4gQW55IHN1YnNlcXVlbnRcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQzNDUtICovXG5tbS9odWdlX21lbW9yeS5jOjQzNDY6dW5zaWduZWQgaW50IG1pbl9vcmRlcl9mb3Jfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL2h1Z2VfbWVtb3J5LmMtNDM0Ny17XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMzMwPWludCBtZW1vcnlfZmFpbHVyZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQ0Mi1cdGlmIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkge1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyNDQzOlx0XHRjb25zdCBpbnQgbmV3X29yZGVyID0gbWluX29yZGVyX2Zvcl9zcGxpdChmb2xpbyk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0NDQtXHRcdGludCBlcnI7XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yNzgzPXN0YXRpYyBpbnQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjc5OC1cdGlmICghaHVnZSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9sYXJnZShmb2xpbykpIHtcbm1tL21lbW9yeS1mYWlsdXJlLmM6Mjc5OTpcdFx0Y29uc3QgaW50IG5ld19vcmRlciA9IG1pbl9vcmRlcl9mb3Jfc3BsaXQoZm9saW8pO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0yODAwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDMyNwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIE9yaWdpbiBvZiBgbWluX29yZGVyX2Zvcl9zcGxpdGAqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgbWluX29yZGVyX2Zvcl9zcGxpdGAuIEkgc2VlbSB0byByZWNhbGwgaXQgYmVpbmcgaW4gdGhlIGh1Z2UgcGFnZXMgY29kZSwgc28gSSYjMzk7bSBiZXR0aW5nIGl0JiMzOTtzIGluIGBtbS9odWdlX21lbW9yeS5jYC4gVGhhdCBtYWtlcyBzZW5zZTsgaXTigJlzIHRoZSB1c3VhbCBwbGFjZSBmb3IgdGhlc2UgdGhpbmdzLiBOb3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgY29tcGlsYXRpb24gY29uZGl0aW9ucy4gUmlnaHQsIGBtbS9odWdlX21lbW9yeS5jYCBpcyBjb21waWxlZCBiYXNlZCBvbiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYC4gTm8gc3VycHJpc2VzIHRoZXJlLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgdGhvcm91Z2ggdGhvdWdoLCBsZXQmIzM5O3MgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYG1tL01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBvYmplY3QgZmlsZSBmb3IgYGh1Z2VfbWVtb3J5LmNgIGlzIGFjdHVhbGx5IGBodWdlX21lbW9yeS5vYCwganVzdCB0byBydWxlIG91dCBhbnkgcG90ZW50aWFsIG5hbWluZyBkaXNjcmVwYW5jaWVzIG9yIGNvbmRpdGlvbmFsIGluY2x1c2lvbnMgSSYjMzk7bSBub3QgaW1tZWRpYXRlbHkgY29uc2lkZXJpbmcuIEJldHRlciB0byBiZSBjZXJ0YWluIHRoYW4gdG8gd2FzdGUgdGltZSBjaGFzaW5nIGdob3N0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZV9tZW1vcnkubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTEwMD1vYmotJChDT05GSUdfREVWSUNFX01JR1JBVElPTikgJiM0Mzs9IG1pZ3JhdGVfZGV2aWNlLm9cbm1tL01ha2VmaWxlOjEwMTpvYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICYjNDM7PSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQub1xubW0vTWFrZWZpbGUtMTAyLW9iai0kKENPTkZJR19QQUdFX0NPVU5URVIpICYjNDM7PSBwYWdlX2NvdW50ZXIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDcxOQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKioKCk9rYXksIHNvIHdlJiMzOTtyZSBkZWZpbml0ZWx5IGdvaW5nIHRvIG5lZWQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgZW5hYmxlZC4gVGhhdCYjMzk7cyBhIGdpdmVuLiBOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYEhXUE9JU09OX0lOSkVDVGAuIFdoaWxlIGl0JiMzOTtzIG5vdCBhIGNvcmUgcmVxdWlyZW1lbnQgaW4gdGhlIHNhbWUgd2F5LCBJIHJlY2FsbCBpdCYjMzk7cyBpbmNyZWRpYmx5IHZhbHVhYmxlIGZvciBzaW11bGF0aW5nIGFuZCB0ZXN0aW5nIG1lbW9yeSBjb3JydXB0aW9uIHNjZW5hcmlvcy4gR2l2ZXMgdXMgYSByZWFsbHkgcm9idXN0IHdheSB0byB0ZXN0IG91ciBmYWlsdXJlIGhhbmRsaW5nLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGZvciBgSFdQT0lTT05fSU5KRUNUYCB0byBjb25maXJtIGl0cyBzdGF0dXMuIEkgd2FudCB0byBtYWtlIHN1cmUgd2UgaGF2ZSB0aGF0IG9wdGlvbiBhdmFpbGFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIV1BPSVNPTl9JTkpFQ1QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9Nzc3PWNvbmZpZyBNRU1PUllfRkFJTFVSRVxuLS1cbm1tL0tjb25maWctNzg3LVxubW0vS2NvbmZpZzo3ODg6Y29uZmlnIEhXUE9JU09OX0lOSkVDVFxubW0vS2NvbmZpZy03ODktXHR0cmlzdGF0ZSBcJiMzNDtIV1BvaXNvbiBwYWdlcyBpbmplY3RvclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTAwOAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSFdQT0lTT04gSW5qZWN0aW9uIE1lY2hhbmlzbSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYEhXUE9JU09OX0lOSkVDVGAgdGhpbmcuIEl0JiMzOTtzIGEgdHJpc3RhdGUsIGludGVyZXN0aW5nLiBJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyIGhvdyBgTUVNT1JZX0ZBSUxVUkVgIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGludGVyYWN0IHdpdGggaXQgYXMgd2VsbCwgZXNwZWNpYWxseSBjb25zaWRlcmluZyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0mIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQuIFRoZSBtYWluIGZ1bmN0aW9uIG9mIGludGVyZXN0IGlzIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgLCB0aG91Z2ggdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBzdGF0aWMgaXMgYSBiaXQgb2YgYSB3cmlua2xlLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIHdvcmsgYXJvdW5kIHRoYXQsIGJ1dCBJIHN1c3BlY3QgdGhlIGVudHJ5IHBvaW50IHRvIGJlIGBzb2Z0X29mZmxpbmVfcGFnZWAsIHNvIGxldCYjMzk7cyBzdGFydCB0aGVyZS4gVGhlIGZpcnN0IHRoaW5nIEkgd2lsbCBkbyBpcyBjb25maXJtIHRoYXQgYHNvZnRfb2ZmbGluZV9wYWdlYCBpcyBhY3R1YWxseSBleHBvcnRlZCBhbmQgYWNjZXNzaWJsZSBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qc29mdF9vZmZsaW5lX3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1vcnktZmFpbHVyZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzMTkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBrZXJuZWwgZGVidWdnaW5nOgoKKipEZWJ1Z2dpbmcgYSBNaXNzaW5nIEV4cG9ydCoqCgpIbW0sIHdhaXQgYSBzZWNvbmQuLi4gdGhpcyBgc29mdF9vZmZsaW5lX3BhZ2VgIHN5bWJvbCBpc24mIzM5O3Qgc2hvd2luZyB1cCBhcyBleHBvcnRlZD8gVGhhdCYjMzk7cyBub3QgcmlnaHQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGl0JiMzOTtzIGRlZmluZWQgYW5kIGlmIGl0ICpzaG91bGQqIGJlIHZpc2libGUuIE9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBtbS9tZW1vcnktZmFpbHVyZS5jYCBmaWxlLiBUaGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciBgc29mdF9vZmZsaW5lX3BhZ2VgLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGRlZmluaXRpb24gb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCB1c2FnZSwgcmVzaWRlcy4gTGV0JiMzOTtzIHNlZSBpZiBpdCYjMzk7cyBnb3QgdGhlIHJpZ2h0IEVYUE9SVF9TWU1CT0wgbWFjcm9zIG9yIGlmIHRoZXJlJiMzOTtzIHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gcHJldmVudGluZyBpdCBmcm9tIGJlaW5nIHZpc2libGUuIFRoaXMgY291bGQgYmUgYSBjcml0aWNhbCBpc3N1ZSEgVGltZSB0byBnbyBodW50aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2Z0X29mZmxpbmVfcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbW9yeS1mYWlsdXJlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LWZhaWx1cmUuYz0yNjA4PXN0YXRpYyB2b2lkIG1lbW9yeV9mYWlsdXJlX3dvcmtfZnVuYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjIyLVx0XHRpZiAoZW50cnkuZmxhZ3MgXHUwMDI2IE1GX1NPRlRfT0ZGTElORSlcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjYyMzpcdFx0XHRzb2Z0X29mZmxpbmVfcGFnZShlbnRyeS5wZm4sIGVudHJ5LmZsYWdzKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjYyNC1cdFx0ZWxzZVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9Mjc4Mz1zdGF0aWMgaW50IHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI4ODYtLyoqXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI4ODc6ICogc29mdF9vZmZsaW5lX3BhZ2UgLSBTb2Z0IG9mZmxpbmUgYSBwYWdlLlxubW0vbWVtb3J5LWZhaWx1cmUuYy0yODg4LSAqIEBwZm46IHBmbiB0byBzb2Z0LW9mZmxpbmVcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI5MTAtICovXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI5MTE6aW50IHNvZnRfb2ZmbGluZV9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI5MTIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTg0NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLgoKKipBbmFseXppbmcgdGhlIEdsb2JhbCBWaXNpYmlsaXR5IG9mIGBzb2Z0X29mZmxpbmVfcGFnZWAqKgoKU28sIGBzb2Z0X29mZmxpbmVfcGFnZWAgaXNuJiMzOTt0IGV4cGxpY2l0bHkgZXhwb3J0ZWQsIGJ1dCBpdCYjMzk7cyBnbG9iYWxseSB2aXNpYmxlLCB3aGljaCBpbW1lZGlhdGVseSByYWlzZXMgcXVlc3Rpb25zIGFib3V0IHdoZXJlIGl0JiMzOTtzIGJlaW5nIGFjY2Vzc2VkLiBXYWl0LCBJIHJlY2FsbCB0aGF0IGBzb2Z0X29mZmxpbmVfcGFnZWAgaXMgY2FsbGVkIGZyb20gYG1tL21hZHZpc2UuY2AsIHdoaWNoIGlzIGEgY29yZSBidWlsdC1pbiBjb21wb25lbnQuIFRoYXQgbmFycm93cyB0aGUgc2VhcmNoIHNvbWV3aGF0LCBidXQgYXJlIHRoZXJlIG90aGVyIHBvdGVudGlhbCBlbnRyeSBwb2ludHMgSSYjMzk7bSBtaXNzaW5nPyBJIG5lZWQgdG8gY29uc2lkZXIgYWxsIHRoZSBwb3NzaWJpbGl0aWVzLiBUaGlua2luZyBhYm91dCBpdCwgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBpbiBgbW0vbWFkdmlzZS5jYCBpcyB0aGUgcHJpbWFyeSBtZWNoYW5pc20gdG8gY2FsbCBgc29mdF9vZmZsaW5lX3BhZ2VgLiBOb3cgSSBzaG91bGQgcmVhbGx5IGNoZWNrIG91dCBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIHRvIHVuZGVyc3RhbmQgdGhpcyBiZXR0ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hZHZpc2VfaW5qZWN0X2Vycm9yJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYz0xMzM4PXN0YXRpYyBpbnQgbWFkdmlzZV92bWFfYmVoYXZpb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTE0NDYtICovXG5tbS9tYWR2aXNlLmM6MTQ0NzpzdGF0aWMgaW50IG1hZHZpc2VfaW5qZWN0X2Vycm9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxubW0vbWFkdmlzZS5jLTE0NDgte1xuLS1cbm1tL21hZHZpc2UuYz0xNDkyPXN0YXRpYyBib29sIGlzX21lbW9yeV9mYWlsdXJlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNTA0LVxubW0vbWFkdmlzZS5jOjE1MDU6c3RhdGljIGludCBtYWR2aXNlX2luamVjdF9lcnJvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbm1tL21hZHZpc2UuYy0xNTA2LXtcbi0tXG5tbS9tYWR2aXNlLmM9MTg4Nz1zdGF0aWMgaW50IG1hZHZpc2VfZG9fYmVoYXZpb3IodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbixcbi0tXG5tbS9tYWR2aXNlLmMtMTg5Ni1cdFx0cmFuZ2UtXHUwMDNlZW5kID0gc3RhcnQgJiM0MzsgbGVuX2luO1xubW0vbWFkdmlzZS5jOjE4OTc6XHRcdHJldHVybiBtYWR2aXNlX2luamVjdF9lcnJvcihtYWR2X2JlaGF2aW9yKTtcbm1tL21hZHZpc2UuYy0xODk4LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQ2MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3Qgd2F5IHRvIGZ1enogaXQgZWZmZWN0aXZlbHkuIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgaXMgc3RhdGljLCBzbyBJIGNhbiYjMzk7dCB1c2UgdGhhdCBhcyBhIGRpcmVjdCBmb2N1cy4gYHNvZnRfb2ZmbGluZV9wYWdlYCBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBjb25zaWRlcmVkIGBtYWR2aXNlX2RvX2JlaGF2aW9yYCBhbmQgYHN5c19tYWR2aXNlYCBhcyBwb3NzaWJpbGl0aWVzLCBidXQgYHNvZnRfb2ZmbGluZV9wYWdlYCBpcyBtdWNoIG1vcmUgc3BlY2lmaWMgdG8gdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBiZWluZyBjaGFuZ2VkIGhlcmUuIExldCBtZSBjb25maXJtIGBzb2Z0X29mZmxpbmVfcGFnZWAmIzM5O3MgbG9jYXRpb247IGl0IHNob3VsZCBiZSBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuIFllcCwgdGhlcmUgaXQgaXMuCgpJIGJyaWVmbHkgY29uc2lkZXJlZCBgdHJ5X3RvX3NwbGl0X3RocF9wYWdlYCwgYnV0IHRoYXQmIzM5O3MgYWxzbyBzdGF0aWMsIHNvIGl0IHdvbiYjMzk7dCB3b3JrIGFzIGEgZm9jdXMgc3ltYm9sLiBUaGVuLCBJIHJlYWxpemVkIHRoYXQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAgaXMgc3RhdGljIHRvbywgc28gSSBjYW4mIzM5O3QgZGlyZWN0bHkgdXNlIHRoYXQuIFdhaXQsIHRoZSBwYXRjaCAqZG9lcyogbW9kaWZ5IGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgc29mdF9vZmZsaW5lX3BhZ2VgLiBUaGVyZWZvcmUsIGBzb2Z0X29mZmxpbmVfcGFnZWAgaXMgdGhlIGNvcnJlY3Qgc3ltYm9sIHRvIGZvY3VzIG9uLgoKU28sIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSBmb3IgZnV6emluZyBwdXJwb3NlczoKCiogICAqKldvcnRoRnV6emluZzoqKiBUcnVlIC0gVGhpcyBmaXhlcyBhIGZ1bmN0aW9uYWwgaXNzdWUsIHNwZWNpZmljYWxseSBhIG1pc3NpbmcgYGZvbGlvX3B1dGAgbGVhZGluZyB0byBhIHJlZmNvdW50IGxlYWsgaW4gYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAgd2hlbiBzb2Z0IG9mZmxpbmluZyBhIFRIUCBwYWdlIGZhaWxzIChkdWUgdG8gYG5ld19vcmRlcmAgYmVpbmcgbm9uLXplcm8pLiBUaGlzIHJlcHJlc2VudHMgYSBkaXJlY3QgbWVtb3J5IGxlYWssIHNvIGl0IGlzIGhpZ2ggcHJpb3JpdHkuCiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayByZWxhdGVkIHRvIGhhbmRsaW5nIHNvZnQgb2ZmbGluaW5nIG9mIFRIUCBwYWdlcy4gVGhpcyBpcyBhIGNydWNpYWwgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBwcmV2ZW50cyBhIG1lbW9yeSBsZWFrLgoqICAgKipGb2N1c1N5bWJvbHM6KiogYHNvZnRfb2ZmbGluZV9wYWdlYCAtIFRoaXMgaXMgdGhlIHByaW1hcnkgZnVuY3Rpb24gaW52b2x2ZWQgYW5kIGlzIGNhbGxlZCBmcm9tIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgLgoqICAgKipFbmFibGVDb25maWdzOioqIGBNRU1PUllfRkFJTFVSRWAsIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgLSBUaGVzZSBhcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLgoKTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZyBkZXBlbmRlbmNpZXMuIERvZXMgYE1FTU9SWV9GQUlMVVJFYCByZWx5IG9uIGFueXRoaW5nIGVsc2U/IFllcywgYE1NVWAgYW5kIGBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFYC4gYEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVgIGlzIHNlbGVjdGVkIGJ5IHg4NiwgYXJtNjQsIHBvd2VycGMsIGV0Yy4sIHNvIHdlJiMzOTtyZSBnb29kIHRoZXJlLiBBbmQgZm9yIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGl0IGRlcGVuZHMgb24gYEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBTWVNGU2AuIFRob3NlIHNob3VsZCBiZSBzdGFuZGFyZCwgdG9vLiBBbGwgY2xlYXIuCgpJcyB0aGVyZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbj8gYEhXUE9JU09OX0lOSkVDVGAgd291bGQgYmUgdXNlZnVsIGZvciBpbmplY3Rpb24gdGVzdGluZywgYnV0IGBtYWR2aXNlKE1BRFZfU09GVF9PRkZMSU5FKWAgaXMgYXZhaWxhYmxlIHdpdGhvdXQgaXQsIHNvIGl0JiMzOTtzIG5vdCBzdHJpY3RseSBuZWNlc3NhcnkuIExldCYjMzk7cyBtYWtlIHN1cmUgYE1BRFZfU09GVF9PRkZMSU5FYCBpcyB3aGF0IHdlIHRoaW5rIGl0IGlzIGJ5IGxvb2tpbmcgaW4gYG1tL21hZHZpc2UuY2AuIE9rYXksIGFsbCBkb25lLiBUaGF0IHNob3VsZCBjb3ZlciBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TUFEVl9TT0ZUX09GRkxJTkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jPTE0NDc9c3RhdGljIGludCBtYWR2aXNlX2luamVjdF9lcnJvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTQ3Mi1cbm1tL21hZHZpc2UuYzoxNDczOlx0XHRpZiAobWFkdl9iZWhhdmlvci1cdTAwM2ViZWhhdmlvciA9PSBNQURWX1NPRlRfT0ZGTElORSkge1xubW0vbWFkdmlzZS5jLTE0NzQtXHRcdFx0cHJfaW5mbyhcJiMzNDtTb2Z0IG9mZmxpbmluZyBwZm4gJSNseCBhdCBwcm9jZXNzIHZpcnR1YWwgYWRkcmVzcyAlI2x4XFxuXCYjMzQ7LFxuLS1cbm1tL21hZHZpc2UuYz0xNDkyPXN0YXRpYyBib29sIGlzX21lbW9yeV9mYWlsdXJlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNDk1LVx0Y2FzZSBNQURWX0hXUE9JU09OOlxubW0vbWFkdmlzZS5jOjE0OTY6XHRjYXNlIE1BRFZfU09GVF9PRkZMSU5FOlxubW0vbWFkdmlzZS5jLTE0OTctXHRcdHJldHVybiB0cnVlO1xuLS1cbm1tL21hZHZpc2UuYz0xNTE4PW1hZHZpc2VfYmVoYXZpb3JfdmFsaWQoaW50IGJlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNTUwLSNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVcbm1tL21hZHZpc2UuYzoxNTUxOlx0Y2FzZSBNQURWX1NPRlRfT0ZGTElORTpcbm1tL21hZHZpc2UuYy0xNTUyLVx0Y2FzZSBNQURWX0hXUE9JU09OOlxuLS1cbm1tL21hZHZpc2UuYz0xODg3PXN0YXRpYyBpbnQgbWFkdmlzZV9kb19iZWhhdmlvcih1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuX2luLFxuLS1cbm1tL21hZHZpc2UuYy0xOTQ1LSAqXHRcdHdlcmUgY29ycnVwdGVkIGJ5IHVucmVjb3ZlcmFibGUgaGFyZHdhcmUgbWVtb3J5IGZhaWx1cmUuXG5tbS9tYWR2aXNlLmM6MTk0NjogKiAgTUFEVl9TT0ZUX09GRkxJTkUgLSB0cnkgdG8gc29mdC1vZmZsaW5lIHRoZSBnaXZlbiByYW5nZSBvZiBtZW1vcnkuXG5tbS9tYWR2aXNlLmMtMTk0Ny0gKiAgTUFEVl9NRVJHRUFCTEUgLSB0aGUgYXBwbGljYXRpb24gcmVjb21tZW5kcyB0aGF0IEtTTSB0cnkgdG8gbWVyZ2UgcGFnZXMgaW5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxMTQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBFcnJvciBJbmplY3Rpb24gQ2FwYWJpbGl0aWVzKioKCkFscmlnaHQsIHNvIGBNQURWX1NPRlRfT0ZGTElORWAgaXMgYXZhaWxhYmxlLiBUaGF0IG1ha2VzIHNlbnNlLCBidXQgb25seSBpZiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBpcyBmbGlwcGVkIG9uLiBUaGF0JiMzOTtzIGEgZ29vZCBwcmVyZXF1aXNpdGUgdG8ga2VlcCBpbiBtaW5kLiBOb3csIEkgbmVlZCB0byBkaWcgYSBsaXR0bGUgZGVlcGVyLiBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgdGhlIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgZnVuY3Rpb24sIHdoaWNoIEkmIzM5O2xsIGJlIHVzaW5nIGluIHJlbGF0aW9uIHRvIHRoaXMsIGhhcyBzb21lIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgc28gbGV0JiMzOTtzIGNoZWNrIGl0cyByZXF1aXJlbWVudHMuIEl0IGxvb2tzIGxpa2UgYENBUF9TWVNfQURNSU5gIGlzIGdvaW5nIHRvIGJlIG5lZWRlZC4gSSBmaWd1cmVkIGFzIG11Y2guIFRpbWUgdG8gY29uZmlybSB0aGUgZGV0YWlscyBhbmQgbW92ZSBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0NDcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQ0NzpcdHN0YXRpYyBpbnQgbWFkdmlzZV9pbmplY3RfZXJyb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4xNDQ4Olx0e1xuMTQ0OTpcdFx0dW5zaWduZWQgbG9uZyBzaXplO1xuMTQ1MDpcdFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IG1hZHZfYmVoYXZpb3ItXHUwMDNlcmFuZ2Uuc3RhcnQ7XG4xNDUxOlx0XHR1bnNpZ25lZCBsb25nIGVuZCA9IG1hZHZfYmVoYXZpb3ItXHUwMDNlcmFuZ2UuZW5kO1xuMTQ1MjpcdFxuMTQ1MzpcdFx0aWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKVxuMTQ1NDpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuMTQ1NTpcdFxuMTQ1NjpcdFx0Zm9yICg7IHN0YXJ0IFx1MDAzYyBlbmQ7IHN0YXJ0ICYjNDM7PSBzaXplKSB7XG4xNDU3Olx0XHRcdHVuc2lnbmVkIGxvbmcgcGZuO1xuMTQ1ODpcdFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbjE0NTk6XHRcdFx0aW50IHJldDtcbjE0NjA6XHRcbjE0NjE6XHRcdFx0cmV0ID0gZ2V0X3VzZXJfcGFnZXNfZmFzdChzdGFydCwgMSwgMCwgXHUwMDI2cGFnZSk7XG4xNDYyOlx0XHRcdGlmIChyZXQgIT0gMSlcbjE0NjM6XHRcdFx0XHRyZXR1cm4gcmV0O1xuMTQ2NDpcdFx0XHRwZm4gPSBwYWdlX3RvX3BmbihwYWdlKTtcbjE0NjU6XHRcbjE0NjY6XHRcdFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2MzkKCQkJCQkJCW91dHB1dDogMTI0CgkJCQkJCQl0aG91Z2h0czogMTM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU29mdCBPZmZsaW5lIFBhZ2UgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIGBzb2Z0X29mZmxpbmVfcGFnZWAgc2l0dWF0aW9uLiBJdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCB0cmlnZ2VyaW5nIGl0IGRpcmVjdGx5IHRocm91Z2ggdGhlIGtlcm5lbCByZXF1aXJlcyBgQ0FQX1NZU19BRE1JTmAuIFRoYXQgbWFrZXMgc2Vuc2UuIEkga25vdyBTeXprYWxsZXIgdHlwaWNhbGx5IHJ1bnMgd2l0aCBgQ0FQX1NZU19BRE1JTmAgaW4gaXRzIGlzb2xhdGVkIG5hbWVzcGFjZXMsIGJ1dCB0aGUgYGNhcGFibGUoQ0FQX1NZU19BRE1JTilgIGNoZWNrIGlzIGdvaW5nIHRvIGxvb2sgYXQgdGhlICppbml0aWFsKiB1c2VyIG5hbWVzcGFjZSwgd2hpY2ggU3l6a2FsbGVyIHByb2JhYmx5IGhhcywgc2luY2UgaXQgdXN1YWxseSBydW5zIGFzIHJvb3Qgd2l0aGluIHRoZSBWTSBpdCYjMzk7cyB1c2luZy4KCkkgd29uZGVyLCB0aG91Z2gsIGlmIHRoZXJlJiMzOTtzIGFuIGFsdGVybmF0aXZlIHJvdXRlLCBzb21ldGhpbmcgbGVzcyBkaXJlY3Q/IEFoLCB5ZXMhIFN5c2ZzISBTcGVjaWZpY2FsbHksIGAvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9zb2Z0X29mZmxpbmVfcGFnZWAuIFN5emthbGxlciAqY2FuKiB3cml0ZSB0byBzeXNmczsgSSYjMzk7dmUgdXNlZCB0aGF0IGJlZm9yZS4gVGhhdCBjb3VsZCBiZSBhIGZlYXNpYmxlIHRyaWdnZXIgcGF0aC4KClNvLCB0aGlua2luZyBhYm91dCB0aGUgYnJvYWRlciBzZXR1cC4uLiBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9ucyBpbnZvbHZlZC4gVGhhdCYjMzk7bGwgYmUgYE1FTU9SWV9GQUlMVVJFYCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgbmF0dXJhbGx5LgoKUmlnaHQsIEkmIzM5O3ZlIGdvdCBhIGhhbmRsZSBvbiB0aGUga2V5IGVsZW1lbnRzLiBOb3cgSSBqdXN0IG5lZWQgdG8gcmVjb3JkIHRoZXNlIGZpbmRpbmdzIGZvciBmdXR1cmUgcmVmZXJlbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzb2Z0X29mZmxpbmVfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG1pc3NpbmcgZm9saW9fcHV0IChyZWZjb3VudCBsZWFrKSBpbiBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Ugd2hlbiBzb2Z0IG9mZmxpbmluZyBhIFRIUCBwYWdlIGZhaWxzIGJlY2F1c2UgbmV3X29yZGVyIGlzIG5vbi16ZXJvLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBwcmV2ZW50cyBhIG1lbW9yeSBsZWFrIGFuZCBpcyByZWFjaGFibGUgdmlhIG1hZHZpc2UoTUFEVl9TT0ZUX09GRkxJTkUpIG9yIHN5c2ZzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NvZnRfb2ZmbGluZV9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWlzc2luZyBmb2xpb19wdXQgKHJlZmNvdW50IGxlYWspIGluIHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZSB3aGVuIHNvZnQgb2ZmbGluaW5nIGEgVEhQIHBhZ2UgZmFpbHMgYmVjYXVzZSBuZXdfb3JkZXIgaXMgbm9uLXplcm8uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHByZXZlbnRzIGEgbWVtb3J5IGxlYWsgYW5kIGlzIHJlYWNoYWJsZSB2aWEgbWFkdmlzZShNQURWX1NPRlRfT0ZGTElORSkgb3Igc3lzZnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1MToxNi4xNjM0OTA1MzJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE5MTg0NDUxMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic29mdF9vZmZsaW5lX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1pc3NpbmcgZm9saW9fcHV0IChyZWZjb3VudCBsZWFrKSBpbiBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Ugd2hlbiBzb2Z0IG9mZmxpbmluZyBhIFRIUCBwYWdlIGZhaWxzIGJlY2F1c2UgbmV3X29yZGVyIGlzIG5vbi16ZXJvLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBwcmV2ZW50cyBhIG1lbW9yeSBsZWFrIGFuZCBpcyByZWFjaGFibGUgdmlhIG1hZHZpc2UoTUFEVl9TT0ZUX09GRkxJTkUpIG9yIHN5c2ZzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1MToxNi4xNjM0OTk5NjJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTE1OTMxMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkN2M4M2M1ODZhM2RjNjYzN2RhZjJjODQ5ODZiMWNmNjI3YzlkNDI0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDQgMDQ6NTE6MTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmNcXG5pbmRleCA1MTUwOGE1NWM0MDU1Li4zYjFlNjk0NjgyMWJiIDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmNcXG4rKysgYi9tbS9tZW1vcnktZmFpbHVyZS5jXFxuQEAgLTI3NzYsNiArMjc3Niw5IEBAIEVYUE9SVF9TWU1CT0wodW5wb2lzb25fbWVtb3J5KTtcXG4gICogc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlIGhhbmRsZXMgaHVnZXRsYi1wYWdlcyBhbmQgbm9uLWh1Z2V0bGIgcGFnZXMuXFxuICAqIElmIHRoZSBwYWdlIGlzIGEgbm9uLWRpcnR5IHVubWFwcGVkIHBhZ2UtY2FjaGUgcGFnZSwgaXQgc2ltcGx5IGludmFsaWRhdGVzLlxcbiAgKiBJZiB0aGUgcGFnZSBpcyBtYXBwZWQsIGl0IG1pZ3JhdGVzIHRoZSBjb250ZW50cyBvdmVyLlxcbisgKlxcbisgKiBUaGUgZm9saW8gcmVmY291bnQgaGFzIGJlZW4gaW5jcmVtZW50ZWQgYmVmb3JlIGVudGVyaW5nIHRoaXMgZnVuY3Rpb24uXFxuKyAqIFRoaXMgZm9saW8gcmVmZXJlbmNlIG11c3QgYmUgcmVsZWFzZWQgYmVmb3JlIHRoZSBmdW5jdGlvbiByZXR1cm5zIG9uIGFsbCBwYXRocy5cXG4gICovXFxuIHN0YXRpYyBpbnQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxcbiB7XFxuQEAgLTI4MDEsOSArMjgwNCwxOSBAQCBzdGF0aWMgaW50IHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4gXFx0XFx0ICogTk9URTogaWYgbWluaW1pemluZyB0aGUgbnVtYmVyIG9mIHNvZnQgb2ZmbGluZSBwYWdlcyBpc1xcbiBcXHRcXHQgKiBwcmVmZXJyZWQsIHNwbGl0IGl0IHRvIG5vbi16ZXJvIG5ld19vcmRlciBsaWtlIGl0IGlzIGRvbmUgaW5cXG4gXFx0XFx0ICogbWVtb3J5X2ZhaWx1cmUoKS5cXG4rXFx0XFx0ICpcXG4rXFx0XFx0ICogRHJvcCB0aGUgcmVmZXJlbmNlIG9idGFpbmVkIHVwb24gZW50cnk7XFxuK1xcdFxcdCAqIHRyeV90b19zcGxpdF90aHBfcGFnZSguLi4sIHJlbGVhc2U9dHJ1ZSkgaGFuZGxlcyByZWZjb3VudGluZyBpdHNlbGZcXG4rXFx0XFx0ICogd2hlbiB0aGUgc3BsaXQgZmFpbHMuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRpZiAobmV3X29yZGVyIHx8IHRyeV90b19zcGxpdF90aHBfcGFnZShwYWdlLCAvKiBuZXdfb3JkZXI9ICovIDAsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICAvKiByZWxlYXNlPSAqLyB0cnVlKSkge1xcbitcXHRcXHRpZiAobmV3X29yZGVyKSB7XFxuK1xcdFxcdFxcdHByX2luZm8oXFxcIiUjbHg6IG9yZGVyLSVkIGZvbGlvIGNhbm5vdCBzb2Z0IG9mZmxpbmVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdHBmbiwgbmV3X29yZGVyKTtcXG4rXFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAodHJ5X3RvX3NwbGl0X3RocF9wYWdlKHBhZ2UsIC8qIG5ld19vcmRlcj0gKi8gMCxcXG4rXFx0XFx0XFx0XFx0XFx0IC8qIHJlbGVhc2U9ICovIHRydWUpKSB7XFxuIFxcdFxcdFxcdHByX2luZm8oXFxcIiUjbHg6IHRocCBzcGxpdCBmYWlsZWRcXFxcblxcXCIsIHBmbik7XFxuIFxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTE6MTcuNTU2MDQ1ODg0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTQwNTI1ODgwMjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNvZnRfb2ZmbGluZV9wYWdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtaXNzaW5nIGZvbGlvX3B1dCAocmVmY291bnQgbGVhaykgaW4gc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlIHdoZW4gc29mdCBvZmZsaW5pbmcgYSBUSFAgcGFnZSBmYWlscyBiZWNhdXNlIG5ld19vcmRlciBpcyBub24temVyby4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcHJldmVudHMgYSBtZW1vcnkgbGVhayBhbmQgaXMgcmVhY2hhYmxlIHZpYSBtYWR2aXNlKE1BRFZfU09GVF9PRkZMSU5FKSBvciBzeXNmcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDdjODNjNTg2YTNkYzY2MzdkYWYyYzg0OTg2YjFjZjYyN2M5ZDQyNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDQgMDQ6NTE6MTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuaW5kZXggNTE1MDhhNTVjNDA1NS4uM2IxZTY5NDY4MjFiYiAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmNcbisrKyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbkBAIC0yNzc2LDYgKzI3NzYsOSBAQCBFWFBPUlRfU1lNQk9MKHVucG9pc29uX21lbW9yeSk7XG4gICogc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlIGhhbmRsZXMgaHVnZXRsYi1wYWdlcyBhbmQgbm9uLWh1Z2V0bGIgcGFnZXMuXG4gICogSWYgdGhlIHBhZ2UgaXMgYSBub24tZGlydHkgdW5tYXBwZWQgcGFnZS1jYWNoZSBwYWdlLCBpdCBzaW1wbHkgaW52YWxpZGF0ZXMuXG4gICogSWYgdGhlIHBhZ2UgaXMgbWFwcGVkLCBpdCBtaWdyYXRlcyB0aGUgY29udGVudHMgb3Zlci5cbisgKlxuKyAqIFRoZSBmb2xpbyByZWZjb3VudCBoYXMgYmVlbiBpbmNyZW1lbnRlZCBiZWZvcmUgZW50ZXJpbmcgdGhpcyBmdW5jdGlvbi5cbisgKiBUaGlzIGZvbGlvIHJlZmVyZW5jZSBtdXN0IGJlIHJlbGVhc2VkIGJlZm9yZSB0aGUgZnVuY3Rpb24gcmV0dXJucyBvbiBhbGwgcGF0aHMuXG4gICovXG4gc3RhdGljIGludCBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuQEAgLTI4MDEsOSArMjgwNCwxOSBAQCBzdGF0aWMgaW50IHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcdFx0ICogTk9URTogaWYgbWluaW1pemluZyB0aGUgbnVtYmVyIG9mIHNvZnQgb2ZmbGluZSBwYWdlcyBpc1xuIFx0XHQgKiBwcmVmZXJyZWQsIHNwbGl0IGl0IHRvIG5vbi16ZXJvIG5ld19vcmRlciBsaWtlIGl0IGlzIGRvbmUgaW5cbiBcdFx0ICogbWVtb3J5X2ZhaWx1cmUoKS5cbitcdFx0ICpcbitcdFx0ICogRHJvcCB0aGUgcmVmZXJlbmNlIG9idGFpbmVkIHVwb24gZW50cnk7XG4rXHRcdCAqIHRyeV90b19zcGxpdF90aHBfcGFnZSguLi4sIHJlbGVhc2U9dHJ1ZSkgaGFuZGxlcyByZWZjb3VudGluZyBpdHNlbGZcbitcdFx0ICogd2hlbiB0aGUgc3BsaXQgZmFpbHMuXG4gXHRcdCAqL1xuLVx0XHRpZiAobmV3X29yZGVyIHx8IHRyeV90b19zcGxpdF90aHBfcGFnZShwYWdlLCAvKiBuZXdfb3JkZXI9ICovIDAsXG4tXHRcdFx0XHRcdFx0ICAgICAgIC8qIHJlbGVhc2U9ICovIHRydWUpKSB7XG4rXHRcdGlmIChuZXdfb3JkZXIpIHtcbitcdFx0XHRwcl9pbmZvKFwiJSNseDogb3JkZXItJWQgZm9saW8gY2Fubm90IHNvZnQgb2ZmbGluZVxcblwiLFxuK1x0XHRcdFx0cGZuLCBuZXdfb3JkZXIpO1xuK1x0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4rXHRcdFx0cmV0dXJuIC1FQlVTWTtcbitcdFx0fVxuK1x0XHRpZiAodHJ5X3RvX3NwbGl0X3RocF9wYWdlKHBhZ2UsIC8qIG5ld19vcmRlcj0gKi8gMCxcbitcdFx0XHRcdFx0IC8qIHJlbGVhc2U9ICovIHRydWUpKSB7XG4gXHRcdFx0cHJfaW5mbyhcIiUjbHg6IHRocCBzcGxpdCBmYWlsZWRcXG5cIiwgcGZuKTtcbiBcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIFx0XHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1MToxNy41NTYwNDg0NDRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODgyNDMzNTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE1lbW9yeSBGYWlsdXJlIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIGl0J3MgZGVhbGluZyB3aXRoIHNvZnQgb2ZmbGluaW5nIFRIUCAoVHJhbnNwYXJlbnQgSHVnZSBQYWdlcykgcGFnZXMsIGFuZCB0aGUgY29yZSBjaGFuZ2UgaXMgaW4gaG93IGl0IGhhbmRsZXMgYSBzcGVjaWZpYyBjaGVjay4gSW5pdGlhbGx5LCB0aGUgY29kZSB3YXMgdXNpbmcgYSBzaG9ydC1jaXJjdWl0aW5nIE9SIChgfHxgKSB0byBkZXRlcm1pbmUgaWYgYSBUSFAgcGFnZSBuZWVkZWQgdG8gYmUgc3BsaXQuIFRoZSBvcmlnaW5hbCBsb2dpYyB3YXMgYGlmIChuZXdfb3JkZXIgfHwgdHJ5X3RvX3NwbGl0X3RocF9wYWdlKHBhZ2UsIC8qIG5ld19vcmRlcj0gKi8gMCwgLyogcmVsZWFzZT0gKi8gdHJ1ZSkpYC4gVGhpcyBwYXRjaCBlZmZlY3RpdmVseSBzZXBhcmF0ZXMgdGhvc2UgdHdvIGNoZWNrcy5cblxuVGhlIHByb2JsZW0sIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgdGhhdCB3aGVuIGBuZXdfb3JkZXJgIHdhc24ndCB6ZXJvLCBpdCB3b3VsZCAqc2hvcnQtY2lyY3VpdCogdGhlIE9SLiBUaGlzIG1lYW50IGB0cnlfdG9fc3BsaXRfdGhwX3BhZ2VgIHdvdWxkbid0IGJlIGNhbGxlZC4gQ3J1Y2lhbGx5LCB0aGUgKm9yaWdpbmFsKiBjb2RlIGhhZCBhIGBmb2xpb19wdXQoZm9saW8pYCBpbnNpZGUgb2YgdGhlIGBpZmAgYmxvY2suIElmIGB0cnlfdG9fc3BsaXRfdGhwX3BhZ2VgIHdhcyBleGVjdXRlZCwgaXQgd291bGQgZGVhbCB3aXRoIHRoZSByZWZjb3VudC4gSG93ZXZlciwgYmVjYXVzZSBvZiB0aGUgc2hvcnQtY2lyY3VpdGluZywgdGhlIG9yaWdpbmFsIGNvZGUgbWlzc2VkIHRoZSBkZWNyZW1lbnQgaW4gdGhlIGNhc2Ugb2YgYG5ld19vcmRlcmAgYmVpbmcgbm9uLXplcm8uIFRoZSBwYXRjaCwgdGhlcmVmb3JlLCBzZXBhcmF0ZXMgdGhlIGNoZWNrcywgYWRkaW5nIGFuIGV4cGxpY2l0IGBmb2xpb19wdXQoZm9saW8pYCBpbiB0aGUgbmV3IGNvZGUgYmxvY2sgd2hlbiBgbmV3X29yZGVyYCBpcyBub24temVybywgYW5kIGl0IGFsc28gY2FsbHMgYHRyeV90b19zcGxpdF90aHBfcGFnZWAgYWZ0ZXIgaW4gYSBzZXBhcmF0ZSBgaWZgIGJsb2NrLlxuXG5UaGlzIGZpeGVzIGEgbWlzc2luZyBgZm9saW9fcHV0YCwgcHJldmVudGluZyBhIHBvdGVudGlhbCByZXNvdXJjZSBsZWFrLiBOb3csIEkgbmVlZCB0byBsb29rIGludG8gdGhpcyBmdW5jdGlvbiBtb3JlIGdlbmVyYWxseSBhbmQgdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gTGV0J3Mgc2VlIGlmIEkgY2FuIGZpbmQgdGhlIHJlbGF0ZWQgY29uZmlnIG9wdGlvbnMgZm9yIGBtbS9tZW1vcnktZmFpbHVyZS5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM3OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjUxOjIzLjQzODQ4NjQyNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTI4ODQwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtb3J5LWZhaWx1cmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnktZmFpbHVyZS5jPTI3NzA9RVhQT1JUX1NZTUJPTCh1bnBvaXNvbl9tZW1vcnkpO1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzc1LS8qXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNzc2OiAqIHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZSBoYW5kbGVzIGh1Z2V0bGItcGFnZXMgYW5kIG5vbi1odWdldGxiIHBhZ2VzLlxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjc3Ny0gKiBJZiB0aGUgcGFnZSBpcyBhIG5vbi1kaXJ0eSB1bm1hcHBlZCBwYWdlLWNhY2hlIHBhZ2UsIGl0IHNpbXBseSBpbnZhbGlkYXRlcy5cXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjc4Mi0gKi9cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI3ODM6c3RhdGljIGludCBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzg0LXtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MjkxMT1pbnQgc29mdF9vZmZsaW5lX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjk1Ny1cXHRpZiAocmV0IFxcdTAwM2UgMCkge1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6Mjk1ODpcXHRcXHRyZXQgPSBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2UocGFnZSk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yOTU5LVxcdH0gZWxzZSBpZiAocmV0ID09IDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTE6MjMuNDk3NzgwMDAxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5ODI2Mzg0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIE9mZmxpbmUgUGFnZSBIYW5kbGluZyoqXG5cblJpZ2h0LCBzbyBgc29mdF9vZmZsaW5lX3BhZ2VgIOKAkyB0aGF0J3MgdGhlIGZ1bmN0aW9uIHRoYXQga2lja3Mgb2ZmIHRoZSBzb2Z0IG9mZmxpbmUgcHJvY2Vzcy4gSXQgbG9va3MgbGlrZSBpdCBkaXJlY3RseSBjYWxscyBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYC4gTWFrZXMgc2Vuc2U7IG9uZSBoYW5kbGVzIHRoZSBpbml0aWFsIHRyaWdnZXJpbmcsIHRoZSBvdGhlciBwcm9iYWJseSBkb2VzIHRoZSBjb3JlIHdvcmsgb24gdGhlIHBhZ2UgdGhhdCdzIGdvaW5nIHNvZnQgb2ZmbGluZS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9ucyB0aGF0ICplbmFibGUqIHRoaXMgd2hvbGUgbWVtb3J5IGZhaWx1cmUgcGF0aCwgc3BlY2lmaWNhbGx5IHRoZSBlbmFibGluZyBjb25kaXRpb25zIG9mIGBtbS9tZW1vcnktZmFpbHVyZS5jYC4gVGhhdCdzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuIFdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBrZXJuZWwgcGFyYW1ldGVycywgb3IgaGFyZHdhcmUgZmVhdHVyZXMgbmVlZCB0byBiZSBpbiBwbGF5IGZvciB0aGUgc29mdCBvZmZsaW5lIG1lY2hhbmlzbSB0byBldmVuICpiZSogYWN0aXZlPyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMgdG8gc2VlIHdoYXQgdHJpZ2dlcnMgaXQuIFRoYXTigJlzIHRoZSBrZXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MjQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1MToyNi44OTYwNDU4NzZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgzODE2NjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtb3J5LWZhaWx1cmUub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0xMTE9b2JqLSQoQ09ORklHX0RNQVBPT0xfVEVTVCkgKz0gZG1hcG9vbF90ZXN0Lm9cXG5tbS9NYWtlZmlsZToxMTI6b2JqLSQoQ09ORklHX01FTU9SWV9GQUlMVVJFKSArPSBtZW1vcnktZmFpbHVyZS5vXFxubW0vTWFrZWZpbGUtMTEzLW9iai0kKENPTkZJR19IV1BPSVNPTl9JTkpFQ1QpICs9IGh3cG9pc29uLWluamVjdC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjUxOjI2Ljk5NDQzMTY1OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzU1MjM5MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgZm9yIFNvZnQgT2ZmbGluZSBQYWdlIEFjY2Vzc2liaWxpdHkqKlxuXG5BbHJpZ2h0LCB0aGUgcmVxdWlyZW1lbnQgZm9yIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIGNsZWFyOyB3ZSdyZSBkZWFsaW5nIHdpdGggbWVtb3J5IGZhaWx1cmUgc2NlbmFyaW9zLiBOb3csIHRoZSBuZXh0IGNydWNpYWwgc3RlcCBpcyBkZXRlcm1pbmluZyBob3cgdG8gaW50ZXJhY3Qgd2l0aCB0aGlzIGZ1bmN0aW9uYWxpdHkuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIHRoZSBgc29mdF9vZmZsaW5lX3BhZ2VgIGZ1bmN0aW9uIG9yIHZhcmlhYmxlIOKAkyBpZiBpdCdzIGEgdmFyaWFibGUg4oCTIGlzIGFjdHVhbGx5IGFjY2Vzc2libGUgb3IgZXhwb3NlZCB0byB1c2Vyc3BhY2UuIFRoaXMgaXMgY3JpdGljYWwuIElmIGl0IGlzbid0LCB0aGVuIGV2ZW4gaWYgd2UgaGF2ZSBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBlbmFibGVkLCB3ZSB3b24ndCBiZSBhYmxlIHRvIGxldmVyYWdlIGl0IGVmZmVjdGl2ZWx5IGZyb20gYW4gYXBwbGljYXRpb24gb3IgdXRpbGl0eSBydW5uaW5nIGluIHVzZXJzcGFjZSB0byBtYW5hZ2Ugc29mdCBvZmZsaW5lIHBhZ2VzLiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gKnVzZSogdGhhdCBjYXBhYmlsaXR5LCBzbyBJJ20gaW1tZWRpYXRlbHkgbW92aW5nIHRvIGFzc2VzcyB0aGUgZXhwb3J0IG9yIHJlYWNoYWJpbGl0eSBvZiB0aGlzIHN5bWJvbC4gVGhpcyBpbnZlc3RpZ2F0aW9uIHdpbGwgZ3VpZGUgbWUgb24gdGhlIHN1YnNlcXVlbnQgaW1wbGVtZW50YXRpb24gb3IsIHBvdGVudGlhbGx5LCB0aGUgbmVlZCBmb3Iga2VybmVsIG1vZGlmaWNhdGlvbnMgdG8gZXhwb3NlIHRoZSByZXF1aXJlZCBpbnRlcmZhY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzY4LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTE6MzAuMjY5OTU5OTQzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNjg5NDYzOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic29mdF9vZmZsaW5lX3BhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtbWVtb3J5LXBhZ2Utb2ZmbGluZToxOldoYXQ6XFx0XFx0L3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvc29mdF9vZmZsaW5lX3BhZ2VcXG5Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLW1lbW9yeS1wYWdlLW9mZmxpbmUtMi1EYXRlOlxcdFxcdFNlcCAyMDA5XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL21lbW9yeS1ob3RwbHVnLnJzdD0yNzY9VGhlIGZvbGxvd2luZyBmaWxlcyBhcmUgY3VycmVudGx5IGRlZmluZWQ6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL21lbW9yeS1ob3RwbHVnLnJzdC0zMDctICBXaGVuIHRoZSBDT05GSUdfTUVNT1JZX0ZBSUxVUkUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGVuYWJsZWQsIHR3b1xcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0OjMwODogIGFkZGl0aW9uYWwgZmlsZXMgYGBoYXJkX29mZmxpbmVfcGFnZWBgIGFuZCBgYHNvZnRfb2ZmbGluZV9wYWdlYGAgYXJlIGF2YWlsYWJsZVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0LTMwOS0gIHRvIHRyaWdnZXIgaHdwb2lzb25pbmcgb2YgcGFnZXMsIGZvciBleGFtcGxlLCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4gTm90ZSB0aGF0XFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvcGR0LmM9MjQ3PXN0YXRpYyBpbnQgcGR0X21haW5sb29wKHZvaWQgKnVudXNlZClcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9wZHQuYy0zMzUtXFx0XFx0XFx0ZWxzZVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9wZHQuYzozMzY6XFx0XFx0XFx0XFx0c29mdF9vZmZsaW5lX3BhZ2UocGRlIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQsIDApO1xcbmFyY2gvcGFyaXNjL2tlcm5lbC9wZHQuYy0zMzctI2Vsc2VcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz01OTU9c3RhdGljIERFVklDRV9BVFRSX1dPKHByb2JlKTtcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy02MDMtLyogU29mdCBvZmZsaW5lIGEgcGFnZSAqL1xcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzo2MDQ6c3RhdGljIHNzaXplX3Qgc29mdF9vZmZsaW5lX3BhZ2Vfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy02MDUtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTYxNC1cXHRwZm4gXFx1MDAzZVxcdTAwM2U9IFBBR0VfU0hJRlQ7XFxuZHJpdmVycy9iYXNlL21lbW9yeS5jOjYxNTpcXHRyZXQgPSBzb2Z0X29mZmxpbmVfcGFnZShwZm4sIDApO1xcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy02MTYtXFx0cmV0dXJuIHJldCA9PSAwID8gY291bnQgOiByZXQ7XFxuLS1cXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM9NjIwPXN0YXRpYyBzc2l6ZV90IGhhcmRfb2ZmbGluZV9wYWdlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy02MzYtXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jOjYzNzpzdGF0aWMgREVWSUNFX0FUVFJfV08oc29mdF9vZmZsaW5lX3BhZ2UpO1xcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy02Mzgtc3RhdGljIERFVklDRV9BVFRSX1dPKGhhcmRfb2ZmbGluZV9wYWdlKTtcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz05MTE9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKm1lbW9yeV9yb290X2F0dHJzW10gPSB7XFxuLS1cXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtOTE2LSNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVcXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6OTE3OlxcdFxcdTAwMjZkZXZfYXR0cl9zb2Z0X29mZmxpbmVfcGFnZS5hdHRyLFxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy05MTgtXFx0XFx1MDAyNmRldl9hdHRyX2hhcmRfb2ZmbGluZV9wYWdlLmF0dHIsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9NDk5Nj1leHRlcm4gYXRvbWljX2xvbmdfdCBudW1fcG9pc29uZWRfcGFnZXMgX19yZWFkX21vc3RseTtcXG5pbmNsdWRlL2xpbnV4L21tLmg6NDk5NzpleHRlcm4gaW50IHNvZnRfb2ZmbGluZV9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpO1xcbmluY2x1ZGUvbGludXgvbW0uaC00OTk4LSNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVcXG4tLVxcbm1tL21hZHZpc2UuYz0xNDQ3PXN0YXRpYyBpbnQgbWFkdmlzZV9pbmplY3RfZXJyb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTQ3NS1cXHRcXHRcXHRcXHQgcGZuLCBzdGFydCk7XFxubW0vbWFkdmlzZS5jOjE0NzY6XFx0XFx0XFx0cmV0ID0gc29mdF9vZmZsaW5lX3BhZ2UocGZuLCBNRl9DT1VOVF9JTkNSRUFTRUQpO1xcbm1tL21hZHZpc2UuYy0xNDc3LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTI2MDg9c3RhdGljIHZvaWQgbWVtb3J5X2ZhaWx1cmVfd29ya19mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjYyMi1cXHRcXHRpZiAoZW50cnkuZmxhZ3MgXFx1MDAyNiBNRl9TT0ZUX09GRkxJTkUpXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjIzOlxcdFxcdFxcdHNvZnRfb2ZmbGluZV9wYWdlKGVudHJ5LnBmbiwgZW50cnkuZmxhZ3MpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjYyNC1cXHRcXHRlbHNlXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTI3ODM9c3RhdGljIGludCBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI4ODYtLyoqXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyODg3OiAqIHNvZnRfb2ZmbGluZV9wYWdlIC0gU29mdCBvZmZsaW5lIGEgcGFnZS5cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI4ODgtICogQHBmbjogcGZuIHRvIHNvZnQtb2ZmbGluZVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yOTEwLSAqL1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjkxMTppbnQgc29mdF9vZmZsaW5lX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI5MTIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1MTozMi41Mzg5MTM4ODZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDAzNzYyMzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSB3ZWxsLXZlcnNlZCBpbiB0aGlzIGFyZWE6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYSBWdWxuZXJhYmlsaXR5IFBhdGg6IGBtYWR2aXNlX2luamVjdF9lcnJvcmAgYW5kIGBNQURWX1NPRlRfT0ZGTElORWAqKlxuXG5SaWdodCwgc28gSSdtIGZvbGxvd2luZyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IHBhdGggaGVyZS4gSSdtIHNlZWluZyB0aGF0IGBtYWR2aXNlX2luamVjdF9lcnJvcmAgaXMgdGhlIGtleSwgYW5kIGl0IHNlZW1zIHRvIGJlIHRyaWdnZXJlZCBieSBgTUFEVl9TT0ZUX09GRkxJTkVgIHdpdGhpbiB0aGUgYG1hZHZpc2VgIHN5c3RlbSBjYWxsLiBUaGlzIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSXQncyBub3QgdGhlIG1vc3QgY29tbW9uIHZlY3Rvciwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIuIE15IG5leHQgc3RlcCBpcyBjbGVhciDigJMgSSdtIGdvaW5nIHRvIGRpdmUgcmlnaHQgaW50byB0aGUgYG1hZHZpc2UuY2Agc291cmNlIGNvZGUuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBtZWF0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBhbmQgdW5kZXJzdGFuZCB0aGUgZXhhY3QgbWVjaGFuaWNzIG9mIGhvdyBgTUFEVl9TT0ZUX09GRkxJTkVgIGxlYWRzIHRvIGEgY2FsbCB0byBgbWFkdmlzZV9pbmplY3RfZXJyb3JgLiBJIG5lZWQgdG8gc2VlIHRoZSBjb25kaXRpb25hbCBsb2dpYywgdGhlIGRhdGEgc3RydWN0dXJlcyBiZWluZyBtYW5pcHVsYXRlZCwgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIG90aGVyIGV4cGxvaXRhYmxlIGJlaGF2aW9ycy4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE5MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjUxOjM2LjU0MjY3ODk3NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY3MzkxMjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUFEVl9TT0ZUX09GRkxJTkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWFkdmlzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21hZHZpc2UuYz0xNDQ3PXN0YXRpYyBpbnQgbWFkdmlzZV9pbmplY3RfZXJyb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTQ3Mi1cXG5tbS9tYWR2aXNlLmM6MTQ3MzpcXHRcXHRpZiAobWFkdl9iZWhhdmlvci1cXHUwMDNlYmVoYXZpb3IgPT0gTUFEVl9TT0ZUX09GRkxJTkUpIHtcXG5tbS9tYWR2aXNlLmMtMTQ3NC1cXHRcXHRcXHRwcl9pbmZvKFxcXCJTb2Z0IG9mZmxpbmluZyBwZm4gJSNseCBhdCBwcm9jZXNzIHZpcnR1YWwgYWRkcmVzcyAlI2x4XFxcXG5cXFwiLFxcbi0tXFxubW0vbWFkdmlzZS5jPTE0OTI9c3RhdGljIGJvb2wgaXNfbWVtb3J5X2ZhaWx1cmUoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTQ5NS1cXHRjYXNlIE1BRFZfSFdQT0lTT046XFxubW0vbWFkdmlzZS5jOjE0OTY6XFx0Y2FzZSBNQURWX1NPRlRfT0ZGTElORTpcXG5tbS9tYWR2aXNlLmMtMTQ5Ny1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbm1tL21hZHZpc2UuYz0xNTE4PW1hZHZpc2VfYmVoYXZpb3JfdmFsaWQoaW50IGJlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTE1NTAtI2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxcbm1tL21hZHZpc2UuYzoxNTUxOlxcdGNhc2UgTUFEVl9TT0ZUX09GRkxJTkU6XFxubW0vbWFkdmlzZS5jLTE1NTItXFx0Y2FzZSBNQURWX0hXUE9JU09OOlxcbi0tXFxubW0vbWFkdmlzZS5jPTE4ODc9c3RhdGljIGludCBtYWR2aXNlX2RvX2JlaGF2aW9yKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW5faW4sXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTk0NS0gKlxcdFxcdHdlcmUgY29ycnVwdGVkIGJ5IHVucmVjb3ZlcmFibGUgaGFyZHdhcmUgbWVtb3J5IGZhaWx1cmUuXFxubW0vbWFkdmlzZS5jOjE5NDY6ICogIE1BRFZfU09GVF9PRkZMSU5FIC0gdHJ5IHRvIHNvZnQtb2ZmbGluZSB0aGUgZ2l2ZW4gcmFuZ2Ugb2YgbWVtb3J5Llxcbm1tL21hZHZpc2UuYy0xOTQ3LSAqICBNQURWX01FUkdFQUJMRSAtIHRoZSBhcHBsaWNhdGlvbiByZWNvbW1lbmRzIHRoYXQgS1NNIHRyeSB0byBtZXJnZSBwYWdlcyBpblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1MTozNi41OTk0MjYxMloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzkxMTA0MTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBNZW1vcnkgTGVhayBGaXgqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIHByZXR0eSBzcGVjaWZpYyBpc3N1ZTogdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYE1BRFZfU09GVF9PRkZMSU5FYCwgYHNvZnRfb2ZmbGluZV9wYWdlYCwgYW5kIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgLiBJdCBzZWVtcyBsaWtlIGEgY3J1Y2lhbCBgZm9saW9fcHV0YCBjYWxsIHdhcyBiZWluZyBtaXNzZWQgd2hlbiBgbmV3X29yZGVyYCB3YXNuJ3QgemVyby4gVGhpcyBpcyBhIGNsZWFyIGluZGljYXRvciBvZiBhIGZ1bmN0aW9uYWwgYnVnLiBJJ20gcmVhZGluZyB0aGlzIGFzIGEgZGVmaW5pdGUgbWVtb3J5IGxlYWsgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCBhIHJlZmNvdW50IGxlYWsuIEVpdGhlciB3YXksIGl0J3Mgc29tZXRoaW5nIHdlIG5lZWQgdG8gc3F1YXNoLlxuXG5UaGlzIGRlZmluaXRlbHkgd2FycmFudHMgZnV6emluZyB0byBtYWtlIHN1cmUgdGhpcyBpcyBjb21wbGV0ZWx5IHJlc29sdmVkLlxuXG5Ob3csIGxldCBtZSBqdXN0IGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZml4LiBJIHNlZSB0aGF0IGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIHJlcXVpcmVkLCBidXQgSSdtIGdvaW5nIHRvIGRvdWJsZS1jaGVjayBgbW0vS2NvbmZpZ2AgZm9yIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgb3IgY29udGV4dCBhcm91bmQgYE1FTU9SWV9GQUlMVVJFYC4gV2UgYWx3YXlzIG5lZWQgdG8gYmUgdGhvcm91Z2ggd2l0aCB0aGVzZSBraW5kcyBvZiBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTcyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjUxOjQwLjk5MDUzMjczOFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NjU5MTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1PUllfRkFJTFVSRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9Nzc0PWNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXFxuLS1cXG5tbS9LY29uZmlnLTc3Ni1cXG5tbS9LY29uZmlnOjc3Nzpjb25maWcgTUVNT1JZX0ZBSUxVUkVcXG5tbS9LY29uZmlnLTc3OC1cXHRkZXBlbmRzIG9uIE1NVVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1MTo0MS4wOTcxOTcxMVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjUxOTM4MjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbiwgZnJhbWVkIGFzIGEgZmlyc3QtcGVyc29uIGFjY291bnQ6XG5cbioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IENoYWluIGZvciBNRU1PUllfRkFJTFVSRSoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcm9vdCBjYXVzZSBvZiB0aGlzIGBNRU1PUllfRkFJTFVSRWAuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byB0cmFjZSBiYWNrIGl0cyBkZXBlbmRlbmNpZXMg4oCTIEknbSB0aGlua2luZywgXCJXaGVyZSBkb2VzIHRoaXMgZmFpbHVyZSBvcmlnaW5hdGU/XCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhdXNhbCBjaGFpbi4gVGhpcyBtZWFucyBkaWdnaW5nIGludG8gdGhlIGNvZGUsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGFuZCBzeXN0ZW0gbG9ncyB0byBpZGVudGlmeSB3aGF0IGZhY3RvcnMgbWlnaHQgbGVhZCB0byB0aGlzIHN0YXRlLiBNeSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiBpZGVudGlmeWluZyB0aGUgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCByZXNvdXJjZSBjb250ZW50aW9uIHBvaW50cywgYW5kIGFueSBrbm93biB2dWxuZXJhYmlsaXRpZXMgaW4gdGhlIHN5c3RlbSB0aGF0IGNvdWxkIHRyaWdnZXIgYSBtZW1vcnkgaXNzdWUuIEVzc2VudGlhbGx5LCBJJ20gZ29pbmcgdG8gZm9sbG93IHRoZSBicmVhZGNydW1icyB1bnRpbCBJIGZpbmQgdGhlIGNyaXRpY2FsIHBhdGggdGhhdCBsZWFkcyB0byBgTUVNT1JZX0ZBSUxVUkVgLiBUaGUgZ29hbCBpcyBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlICd3aHknIGJlZm9yZSBJIGNhbiBldmVuIGJlZ2luIHRvIHRhY2tsZSB0aGUgJ2hvdy4nIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgbGlrZSBtZW1vcnkgYWxsb2NhdGlvbiBlcnJvcnMsIGxlYWtzLCBleGNlc3NpdmUgcGFnaW5nLCBvciBhbnkgb3RoZXIgYW5vbWFseSB0aGF0IGNvdWxkIHBvaW50IHRvIHRoZSBwcm9ibGVtJ3Mgc291cmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDAyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTE6NDQuMzQ5MTM5NjA2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc3NyxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc3NzpcXHRjb25maWcgTUVNT1JZX0ZBSUxVUkVcXG4gNzc4OlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuIDc3OTpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcXG4gNzgwOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSByZWNvdmVyeSBmcm9tIGhhcmR3YXJlIG1lbW9yeSBlcnJvcnNcXFwiXFxuIDc4MTpcXHRcXHRzZWxlY3QgSU5URVJWQUxfVFJFRVxcbiA3ODI6XFx0XFx0aGVscFxcbiA3ODM6XFx0XFx0ICBFbmFibGVzIGNvZGUgdG8gcmVjb3ZlciBmcm9tIHNvbWUgbWVtb3J5IGZhaWx1cmVzIG9uIHN5c3RlbXNcXG4gNzg0OlxcdFxcdCAgd2l0aCBNQ0EgcmVjb3ZlcnkuIFRoaXMgYWxsb3dzIGEgc3lzdGVtIHRvIGNvbnRpbnVlIHJ1bm5pbmdcXG4gNzg1OlxcdFxcdCAgZXZlbiB3aGVuIHNvbWUgb2YgaXRzIG1lbW9yeSBoYXMgdW5jb3JyZWN0ZWQgZXJyb3JzLiBUaGlzIHJlcXVpcmVzXFxuIDc4NjpcXHRcXHQgIHNwZWNpYWwgaGFyZHdhcmUgc3VwcG9ydCBhbmQgdHlwaWNhbGx5IEVDQyBtZW1vcnkuXFxuIDc4NzpcXHRcXG4gNzg4OlxcdGNvbmZpZyBIV1BPSVNPTl9JTkpFQ1RcXG4gNzg5OlxcdFxcdHRyaXN0YXRlIFxcXCJIV1BvaXNvbiBwYWdlcyBpbmplY3RvclxcXCJcXG4gNzkwOlxcdFxcdGRlcGVuZHMgb24gTUVNT1JZX0ZBSUxVUkUgXFx1MDAyNlxcdTAwMjYgREVCVUdfS0VSTkVMIFxcdTAwMjZcXHUwMDI2IFBST0NfRlNcXG4gNzkxOlxcdFxcdHNlbGVjdCBQUk9DX1BBR0VfTU9OSVRPUlxcbiA3OTI6XFx0XFxuIDc5MzpcXHRjb25maWcgTk9NTVVfSU5JVElBTF9UUklNX0VYQ0VTU1xcbiA3OTQ6XFx0XFx0aW50IFxcXCJUdXJuIG9uIG1tYXAoKSBleGNlc3Mgc3BhY2UgdHJpbW1pbmcgYmVmb3JlIGJvb3RpbmdcXFwiXFxuIDc5NTpcXHRcXHRkZXBlbmRzIG9uICFNTVVcXG4gNzk2OlxcdFxcdGRlZmF1bHQgMVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1MTo0NC4zNDkyODQwOTdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjczMjEzMDE2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IEZhaWx1cmUgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgTUVNT1JZX0ZBSUxVUkVgIHNpdHVhdGlvbi4gSXQncyBjbGVhciB0aGF0IGl0IGhpbmdlcyBvbiBib3RoIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBVbml0LCBvciBgTU1VYCwgYW5kIHdoZXRoZXIgdGhlIHVuZGVybHlpbmcgYXJjaGl0ZWN0dXJlIGFjdHVhbGx5IHN1cHBvcnRzIG1lbW9yeSBmYWlsdXJlLCB3aGljaCBpcyBjb250cm9sbGVkIGJ5IGBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFYC4gTWFrZXMgc2Vuc2UsIGBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFYCBpcyB0aGUgYXJjaGl0ZWN0dXJlJ3MgY2FsbCwgc28gdGhhdCdzIHdoZXJlIEkgbmVlZCB0byBzdGFydC4gQnV0IGJlZm9yZSBJIGdvIHRvbyBkZWVwLCBJIHNob3VsZCBwcm9iYWJseSBzY2FuIGZvciBhbnkgb3RoZXIgY3J1Y2lhbCBjb25maWdzIHRoYXQgcGxheSBhIHJvbGUgaGVyZS5cblxuVGhlIHBhdGNoIGl0c2VsZiBzZWVtcyB0byBiZSB0b3VjaGluZyBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYC4gVGhhdCByaW5ncyBhIGJlbGwuLi4gdGhhdCdzIHRoZSBUSFAgcGFnZSBoYW5kbGVyLCBpc24ndCBpdD8gU28sIHRvIGFjdHVhbGx5IHRyaWdnZXIgdGhpcyBjb2RlLCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCB3b3VsZCBhbG1vc3QgY2VydGFpbmx5IGhhdmUgdG8gYmUgZW5hYmxlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dC5cblxuTGV0J3MgZGlnIGludG8gYG1tL21lbW9yeS1mYWlsdXJlLmNgIGFuZCBzcGVjaWZpY2FsbHkgbG9vayBhdCBgdHJ5X3RvX3NwbGl0X3RocF9wYWdlYC4gVGhhdCdsbCBjb25maXJtIGlmIHRoaXMgVEhQIGludGVyYWN0aW9uIGlzIGNlbnRyYWwgdG8gdGhlIHByb2JsZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NjgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1MTo1MS4wODE0MTY3OTJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTM0NDk3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfdG9fc3BsaXRfdGhwX3BhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtb3J5LWZhaWx1cmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnktZmFpbHVyZS5jPTE2Mjk9c3RhdGljIGludCBpZGVudGlmeV9wYWdlX3N0YXRlKHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZSAqcCxcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTY1Ni0gKi9cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE2NTc6c3RhdGljIGludCB0cnlfdG9fc3BsaXRfdGhwX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNjU4LVxcdFxcdGJvb2wgcmVsZWFzZSlcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MjMzMD1pbnQgbWVtb3J5X2ZhaWx1cmUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQ1OS1cXHRcXHRmb2xpb19zZXRfaGFzX2h3cG9pc29uZWQoZm9saW8pO1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjQ2MDpcXHRcXHRlcnIgPSB0cnlfdG9fc3BsaXRfdGhwX3BhZ2UocCwgbmV3X29yZGVyLCAvKiByZWxlYXNlPSAqLyBmYWxzZSk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNDYxLVxcdFxcdC8qXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTI3ODM9c3RhdGljIGludCBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI4MDgtXFx0XFx0ICogRHJvcCB0aGUgcmVmZXJlbmNlIG9idGFpbmVkIHVwb24gZW50cnk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyODA5OlxcdFxcdCAqIHRyeV90b19zcGxpdF90aHBfcGFnZSguLi4sIHJlbGVhc2U9dHJ1ZSkgaGFuZGxlcyByZWZjb3VudGluZyBpdHNlbGZcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI4MTAtXFx0XFx0ICogd2hlbiB0aGUgc3BsaXQgZmFpbHMuXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI4MTctXFx0XFx0fVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjgxODpcXHRcXHRpZiAodHJ5X3RvX3NwbGl0X3RocF9wYWdlKHBhZ2UsIC8qIG5ld19vcmRlcj0gKi8gMCxcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI4MTktXFx0XFx0XFx0XFx0XFx0IC8qIHJlbGVhc2U9ICovIHRydWUpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjUxOjUxLjE4Mjc2NTc1M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODEyMDIwODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKipcblxuT2theSwgbGV0J3Mgc2VlLiBNeSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBpcyB0aGF0IGB0cnlfdG9fc3BsaXRfdGhwX3BhZ2VgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgd2hldGhlciBpdCdzIGNvbXBpbGVkIGNvbmRpdGlvbmFsbHkgb3Igbm90LiBUaGlzIGlzIGEgY3J1Y2lhbCBzdGVwIGluIHVuZGVyc3RhbmRpbmcgaXRzIG92ZXJhbGwgYmVoYXZpb3IgYW5kIGl0cyBpbXBhY3Qgb24gcGVyZm9ybWFuY2UgYW5kIHBvcnRhYmlsaXR5LiBBIHNpbXBsZSBjaGVjayB3aWxsIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIHRoYXQgSSBuZWVkIHRvIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzc5NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjUxOjUzLjk5NDc4ODYxNFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtb3J5LWZhaWx1cmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjU3LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjU3OlxcdHN0YXRpYyBpbnQgdHJ5X3RvX3NwbGl0X3RocF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbjE2NTg6XFx0XFx0XFx0Ym9vbCByZWxlYXNlKVxcbjE2NTk6XFx0e1xcbjE2NjA6XFx0XFx0aW50IHJldDtcXG4xNjYxOlxcdFxcbjE2NjI6XFx0XFx0bG9ja19wYWdlKHBhZ2UpO1xcbjE2NjM6XFx0XFx0cmV0ID0gc3BsaXRfaHVnZV9wYWdlX3RvX29yZGVyKHBhZ2UsIG5ld19vcmRlcik7XFxuMTY2NDpcXHRcXHR1bmxvY2tfcGFnZShwYWdlKTtcXG4xNjY1OlxcdFxcbjE2NjY6XFx0XFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiByZWxlYXNlKVxcbjE2Njc6XFx0XFx0XFx0cHV0X3BhZ2UocGFnZSk7XFxuMTY2ODpcXHRcXG4xNjY5OlxcdFxcdHJldHVybiByZXQ7XFxuMTY3MDpcXHR9XFxuMTY3MTpcXHRcXG4xNjcyOlxcdHN0YXRpYyB2b2lkIHVubWFwX2FuZF9raWxsKHN0cnVjdCBsaXN0X2hlYWQgKnRvX2tpbGwsIHVuc2lnbmVkIGxvbmcgcGZuLFxcbjE2NzM6XFx0XFx0XFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgaW5kZXgsIGludCBmbGFncylcXG4xNjc0OlxcdHtcXG4xNjc1OlxcdFxcdHN0cnVjdCB0b19raWxsICp0aztcXG4xNjc2OlxcdFxcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IDA7XFxuMTY3NzpcXHRcXG4xNjc4OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkodGssIHRvX2tpbGwsIG5kKVxcbjE2Nzk6XFx0XFx0XFx0aWYgKHRrLVxcdTAwM2VzaXplX3NoaWZ0KVxcbjE2ODA6XFx0XFx0XFx0XFx0c2l6ZSA9IG1heChzaXplLCAxVUwgXFx1MDAzY1xcdTAwM2MgdGstXFx1MDAzZXNpemVfc2hpZnQpO1xcbjE2ODE6XFx0XFxuMTY4MjpcXHRcXHRpZiAoc2l6ZSkge1xcbjE2ODM6XFx0XFx0XFx0LypcXG4xNjg0OlxcdFxcdFxcdCAqIFVubWFwIHRoZSBsYXJnZXN0IG1hcHBpbmcgdG8gYXZvaWQgYnJlYWtpbmcgdXAgZGV2aWNlLWRheFxcbjE2ODU6XFx0XFx0XFx0ICogbWFwcGluZ3Mgd2hpY2ggYXJlIGNvbnN0YW50IHNpemUuIFRoZSBhY3R1YWwgc2l6ZSBvZiB0aGVcXG4xNjg2OlxcdFxcdFxcdCAqIG1hcHBpbmcgYmVpbmcgdG9ybiBkb3duIGlzIGNvbW11bmljYXRlZCBpbiBzaWdpbmZvLCBzZWVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTE6NTMuOTk0OTUxNTg0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMjA5MjM3MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYHNwbGl0X2h1Z2VfcGFnZV90b19vcmRlcmAqKlxuXG5SaWdodCwgbGV0J3Mgc2VlLiBUaGUgY29kZSBpcyB1c2luZyBgc3BsaXRfaHVnZV9wYWdlX3RvX29yZGVyYC4gVGhpcyBpcyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHRoZSBjb250ZXh0IGhlcmUuIEknbSBhc3N1bWluZyB3ZSdyZSBkZWFsaW5nIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQsIGxpa2VseSByZWxhdGVkIHRvIE5VTUEgYXJjaGl0ZWN0dXJlcyBvciBvcHRpbWl6YXRpb25zIGZvciBsYXJnZSBtZW1vcnkgcGFnZXMuIFRoZSBmdW5jdGlvbiBuYW1lIGl0c2VsZiBzdWdnZXN0cyBhIHByb2Nlc3Mgb2YgYnJlYWtpbmcgZG93biBhIGxhcmdlIHBhZ2UgaW50byBzbWFsbGVyLCBwb3RlbnRpYWxseSBtb3JlIG1hbmFnZWFibGUgdW5pdHMsIGFuZCBhcnJhbmdpbmcgdGhlbSBpbiBhIHBhcnRpY3VsYXIgb3JkZXIuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgcmVsYXRlcyB0byB0aGUgb3ZlcmFsbCBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVneS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYHNwbGl0X2h1Z2VfcGFnZV90b19vcmRlcmAgbm93LiBXaGF0IGFyZSB0aGUgaW5wdXRzPyBXaGF0J3MgdGhlIGludGVuZGVkIG91dHB1dD8gSXMgdGhpcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgYSB3b3JrYXJvdW5kIGZvciBoYXJkd2FyZSBsaW1pdGF0aW9ucywgb3IgcGFydCBvZiBhIG1vcmUgY29tcGxleCBtZW1vcnkgbWFuYWdlbWVudCBhbGdvcml0aG0/IEknbSBhbnRpY2lwYXRpbmcgdGhhdCB0aGlzIG1pZ2h0IGJlIGRlYWxpbmcgd2l0aCBmcmFnbWVudGF0aW9uLCBvciBwb3RlbnRpYWxseSByZWR1Y2luZyB0aGUgb3ZlcmhlYWQgb2YgYWxsb2NhdGluZyBodWdlIHBhZ2VzIHVuZGVyIHNwZWNpZmljIGNpcmN1bXN0YW5jZXMuIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM3MiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTE6NTkuMzE1ODgwNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxOTA4Mzk3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzcGxpdF9odWdlX3BhZ2VfdG9fb3JkZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTQxMj1zdGF0aWMgaW5saW5lIGludCBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQxNi19XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NDE3OnN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZV90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG5ld19vcmRlcilcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00MTgte1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NjMwPXNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNjM1LX1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo2MzY6c3RhdGljIGlubGluZSBpbnQgc3BsaXRfaHVnZV9wYWdlX3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTYzNy17XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTE2NTc9c3RhdGljIGludCB0cnlfdG9fc3BsaXRfdGhwX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE2NjItXFx0bG9ja19wYWdlKHBhZ2UpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTY2MzpcXHRyZXQgPSBzcGxpdF9odWdlX3BhZ2VfdG9fb3JkZXIocGFnZSwgbmV3X29yZGVyKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE2NjQtXFx0dW5sb2NrX3BhZ2UocGFnZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjUyOjAxLjUzNDk3MDI4N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODQxOTk0ODkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgSHVnZSBQYWdlIERlZmluaXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhcnRpY3VsYXIgbWFjcm8gb3IgZGVmaW5pdGlvbi4gTXkgZmlyc3QgbW92ZSBpcyB0byBsb2NhdGUgaXRzIGRlZmluaXRpdmUgZGVjbGFyYXRpb24uIFRoZSBoaW50IHBvaW50cyBtZSBkaXJlY3RseSB0byBgaW5jbHVkZS9saW51eC9odWdlX21tLmhgLiBUaGF0IG1ha2VzIHNlbnNlOyBodWdlIHBhZ2UgZGVmaW5pdGlvbnMgYXJlIHR5cGljYWxseSB0dWNrZWQgYXdheSBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgaGVhZGVyLiBOb3csIEknbSBub3QganVzdCBnb2luZyB0byAqYXNzdW1lKiBJIGtub3cgd2hhdCBpdCBkb2VzIGJhc2VkIG9uIHRoZSBmaWxlIG5hbWUuIFRoZSBuZXh0IGNyaXRpY2FsIHN0ZXAgaXMgdG8gcXVpY2tseSBzY2FuIGZvciBhbnkgcHJlcHJvY2Vzc29yIGNvbmRpdGlvbmFscywgcGFydGljdWxhcmx5IHRoZSBgI2lmZGVmYCBkaXJlY3RpdmVzIHRoYXQgbWlnaHQgY29udHJvbCBpdHMgYXZhaWxhYmlsaXR5IG9yIG1lYW5pbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0cyBpbiB3aGljaCB0aGlzIHRoaW5nIGlzIGFjdHVhbGx5IGRlZmluZWQgYW5kICpob3cqIGl0J3MgZGVmaW5lZCwgYmVmb3JlIEkgY2FuIG1ha2UgYW55IGFzc3VtcHRpb25zIGFib3V0IGl0cyB1c2FnZSBvciBwdXJwb3NlLiBBbnkgYCNpZmRlZmAgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50IGluIHRlbGxpbmcgbWUgd2hlbiBhbmQgd2hlcmUgdGhlIGRlZmluaXRpb24gaXMgdmFsaWQuIEknbGwgbmVlZCB0byBrbm93IHdoZXRoZXIgaXRzIGJlaGF2aW9yIGNoYW5nZXMgdW5kZXIgZGlmZmVyZW50IGtlcm5lbCBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTAyMCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjUyOjA1LjM3Njk2NzMxOFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9odWdlX21tLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNDAwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDAwOlxcdH07XFxuIDQwMTpcXHRcXG4gNDAyOlxcdGludCBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxcbiA0MDM6XFx0XFx0XFx0dW5zaWduZWQgaW50IG5ld19vcmRlcik7XFxuIDQwNDpcXHRpbnQgZm9saW9fc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcik7XFxuIDQwNTpcXHR1bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4gNDA2OlxcdGludCBzcGxpdF9mb2xpb190b19saXN0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpO1xcbiA0MDc6XFx0aW50IGZvbGlvX2NoZWNrX3NwbGl0dGFibGUoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG4gNDA4OlxcdFxcdFxcdFxcdCAgIGVudW0gc3BsaXRfdHlwZSBzcGxpdF90eXBlKTtcXG4gNDA5OlxcdGludCBmb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4gNDEwOlxcdFxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpO1xcbiA0MTE6XFx0XFxuIDQxMjpcXHRzdGF0aWMgaW5saW5lIGludCBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcXG4gNDEzOlxcdFxcdFxcdHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXFxuIDQxNDpcXHR7XFxuIDQxNTpcXHRcXHRyZXR1cm4gX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihwYWdlLCBsaXN0LCBuZXdfb3JkZXIpO1xcbiA0MTY6XFx0fVxcbiA0MTc6XFx0c3RhdGljIGlubGluZSBpbnQgc3BsaXRfaHVnZV9wYWdlX3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxcbiA0MTg6XFx0e1xcbiA0MTk6XFx0XFx0cmV0dXJuIHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHBhZ2UsIE5VTEwsIG5ld19vcmRlcik7XFxuIDQyMDpcXHR9XFxuIDQyMTpcXHRcXG4gNDIyOlxcdHN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4gNDIzOlxcdHtcXG4gNDI0OlxcdFxcdHJldHVybiBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihwYWdlLCBOVUxMLCAwKTtcXG4gNDI1OlxcdH1cXG4gNDI2OlxcdFxcbiA0Mjc6XFx0aW50IGZvbGlvX21lbWNnX2FsbG9jX2RlZmVycmVkKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiA0Mjg6XFx0XFxuIDQyOTpcXHR2b2lkIGRlZmVycmVkX3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcGFydGlhbGx5X21hcHBlZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjUyOjA1LjM3NzA4MDU1OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTc4NDg4NDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBmaWd1cmluZyBvdXQgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb24gZW5hYmxlcyB0aGF0IHNwZWNpZmljIGxpbmU6XG5cbioqUGlucG9pbnRpbmcgdGhlIENvbmZpZ3VyYXRpb24gU291cmNlKipcblxuQWxyaWdodCwgdGhlIG9iamVjdGl2ZSBoZXJlIGlzIHRvIGRldGVybWluZSB0aGUgS2NvbmZpZyBvcHRpb24gdGhhdCB1bHRpbWF0ZWx5IHJlc3VsdHMgaW4gdGhlIGluY2x1c2lvbiBvZiBsaW5lIDQwMCB3aXRoaW4gYGluY2x1ZGUvbGludXgvaHVnZV9tbS5oYC4gSSd2ZSBnb3QgdG8gdHJhY2UgdGhpcyBiYWNrIHRocm91Z2ggdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdG8gYXBwcm9hY2ggdGhpcyBpbiBhIG1ldGhvZGljYWwgd2F5LiBJJ20gZ29pbmcgdG8gbGV2ZXJhZ2UgbXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUga2VybmVsJ3MgYnVpbGQgc3lzdGVtIGFuZCBjb25maWd1cmF0aW9uIG1lY2hhbmljcyB0byBnZXQgdG8gdGhlIHJvb3QgY2F1c2UsIGFuZCB0aGVuIEknbGwgY29uc2lkZXIgaG93IGJlc3QgdG8gcHJlc2VudCB0aGF0IGluZm9ybWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODQzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1MjowOC45NTU1NzE2NzlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MzgyNjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD0xMjc9ZW51bSBtdGhwX3N0YXRfaXRlbSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0xNTItXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6MTUzOiNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfU1lTRlMpXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMTU0LXN0cnVjdCBtdGhwX3N0YXQge1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9MTc4PXN0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF9tdGhwX3N0YXQoaW50IG9yZGVyLCBlbnVtIG10aHBfc3RhdF9pdGVtIGl0ZW0pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0xODItXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6MTgzOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0xODQtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD01Nzc9dm9pZCBtYXBfYW5vbl9mb2xpb19wbWRfbm9wZihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBwbWRfdCAqcG1kLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTc5LVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjU4MDojZWxzZSAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC01ODEtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD03ODk9c3RhdGljIGlubGluZSBib29sIHBtZF9pc19odWdlKHBtZF90IHBtZClcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTc5Mi19XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NzkzOiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC03OTQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjUyOjA5LjAxMTk2NDEwNFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDQ5NjgwNjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgSHVnZSBQYWdlcyBhbmQgU29mdCBPZmZsaW5lIFBhZ2VzKipcblxuQWxyaWdodCwgcmlnaHQgb2ZmIHRoZSBiYXQsIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZXNzZW50aWFsIGZvciB3aGF0IEknbSB3b3JraW5nIG9uLiBOb3csIGxldCBtZSBjaXJjbGUgYmFjayBhbmQgZG91YmxlLWNoZWNrIG15IHVuZGVyc3RhbmRpbmcgYW5kIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoYXQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAgdmFyaWFibGUuIFRoZXJlJ3MgcHJvYmFibHkgYW4gaW50ZXJhY3Rpb24gdGhlcmUgdGhhdCBJIG5lZWQgdG8gcmUtZXZhbHVhdGUgYmFzZWQgb24gdGhlIGh1Z2UgcGFnZSBjb25maWd1cmF0aW9uLiBMZXQncyBtYWtlIHN1cmUgSSdtIGNvbm5lY3RpbmcgYWxsIHRoZSBkb3RzIGNvcnJlY3RseSBpbiB0aGlzIGltcGxlbWVudGF0aW9uLiBJdCdzIHRpbWUgZm9yIGEgbW9yZSBncmFudWxhciBpbnNwZWN0aW9uIG9mIHRoYXQgc3BlY2lmaWMgYXNwZWN0LCBnaXZlbiB0aGUgYnJvYWRlciBjb250ZXh0IG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0NTIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1MjoxMi40NjE2NDgxNTZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM5MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbW9yeS1mYWlsdXJlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjc4MyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjc4MzpcXHRzdGF0aWMgaW50IHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4yNzg0OlxcdHtcXG4yNzg1OlxcdFxcdGxvbmcgcmV0ID0gMDtcXG4yNzg2OlxcdFxcdHVuc2lnbmVkIGxvbmcgcGZuID0gcGFnZV90b19wZm4ocGFnZSk7XFxuMjc4NzpcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcXG4yNzg4OlxcdFxcdGNoYXIgY29uc3QgKm1zZ19wYWdlW10gPSB7XFxcInBhZ2VcXFwiLCBcXFwiaHVnZXBhZ2VcXFwifTtcXG4yNzg5OlxcdFxcdGJvb2wgaHVnZSA9IGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbyk7XFxuMjc5MDpcXHRcXHRib29sIGlzb2xhdGVkO1xcbjI3OTE6XFx0XFx0TElTVF9IRUFEKHBhZ2VsaXN0KTtcXG4yNzkyOlxcdFxcdHN0cnVjdCBtaWdyYXRpb25fdGFyZ2V0X2NvbnRyb2wgbXRjID0ge1xcbjI3OTM6XFx0XFx0XFx0Lm5pZCA9IE5VTUFfTk9fTk9ERSxcXG4yNzk0OlxcdFxcdFxcdC5nZnBfbWFzayA9IEdGUF9VU0VSIHwgX19HRlBfTU9WQUJMRSB8IF9fR0ZQX1JFVFJZX01BWUZBSUwsXFxuMjc5NTpcXHRcXHRcXHQucmVhc29uID0gTVJfTUVNT1JZX0ZBSUxVUkUsXFxuMjc5NjpcXHRcXHR9O1xcbjI3OTc6XFx0XFxuMjc5ODpcXHRcXHRpZiAoIWh1Z2UgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9sYXJnZShmb2xpbykpIHtcXG4yNzk5OlxcdFxcdFxcdGNvbnN0IGludCBuZXdfb3JkZXIgPSBtaW5fb3JkZXJfZm9yX3NwbGl0KGZvbGlvKTtcXG4yODAwOlxcdFxcbjI4MDE6XFx0XFx0XFx0LypcXG4yODAyOlxcdFxcdFxcdCAqIElmIG5ld19vcmRlciAodGFyZ2V0IHNwbGl0IG9yZGVyKSBpcyBub3QgMCwgZG8gbm90IHNwbGl0IHRoZVxcbjI4MDM6XFx0XFx0XFx0ICogZm9saW8gYXQgYWxsIHRvIHJldGFpbiB0aGUgc3RpbGwgYWNjZXNzaWJsZSBsYXJnZSBmb2xpby5cXG4yODA0OlxcdFxcdFxcdCAqIE5PVEU6IGlmIG1pbmltaXppbmcgdGhlIG51bWJlciBvZiBzb2Z0IG9mZmxpbmUgcGFnZXMgaXNcXG4yODA1OlxcdFxcdFxcdCAqIHByZWZlcnJlZCwgc3BsaXQgaXQgdG8gbm9uLXplcm8gbmV3X29yZGVyIGxpa2UgaXQgaXMgZG9uZSBpblxcbjI4MDY6XFx0XFx0XFx0ICogbWVtb3J5X2ZhaWx1cmUoKS5cXG4yODA3OlxcdFxcdFxcdCAqXFxuMjgwODpcXHRcXHRcXHQgKiBEcm9wIHRoZSByZWZlcmVuY2Ugb2J0YWluZWQgdXBvbiBlbnRyeTtcXG4yODA5OlxcdFxcdFxcdCAqIHRyeV90b19zcGxpdF90aHBfcGFnZSguLi4sIHJlbGVhc2U9dHJ1ZSkgaGFuZGxlcyByZWZjb3VudGluZyBpdHNlbGZcXG4yODEwOlxcdFxcdFxcdCAqIHdoZW4gdGhlIHNwbGl0IGZhaWxzLlxcbjI4MTE6XFx0XFx0XFx0ICovXFxuMjgxMjpcXHRcXHRcXHRpZiAobmV3X29yZGVyKSB7XFxuMjgxMzpcXHRcXHRcXHRcXHRwcl9pbmZvKFxcXCIlI2x4OiBvcmRlci0lZCBmb2xpbyBjYW5ub3Qgc29mdCBvZmZsaW5lXFxcXG5cXFwiLFxcbjI4MTQ6XFx0XFx0XFx0XFx0XFx0cGZuLCBuZXdfb3JkZXIpO1xcbjI4MTU6XFx0XFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4yODE2OlxcdFxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuMjgxNzpcXHRcXHRcXHR9XFxuMjgxODpcXHRcXHRcXHRpZiAodHJ5X3RvX3NwbGl0X3RocF9wYWdlKHBhZ2UsIC8qIG5ld19vcmRlcj0gKi8gMCxcXG4yODE5OlxcdFxcdFxcdFxcdFxcdFxcdCAvKiByZWxlYXNlPSAqLyB0cnVlKSkge1xcbjI4MjA6XFx0XFx0XFx0XFx0cHJfaW5mbyhcXFwiJSNseDogdGhwIHNwbGl0IGZhaWxlZFxcXFxuXFxcIiwgcGZuKTtcXG4yODIxOlxcdFxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuMjgyMjpcXHRcXHRcXHR9XFxuMjgyMzpcXHRcXHRcXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuMjgyNDpcXHRcXHR9XFxuMjgyNTpcXHRcXG4yODI2OlxcdFxcdGZvbGlvX2xvY2soZm9saW8pO1xcbjI4Mjc6XFx0XFx0aWYgKCFodWdlKVxcbjI4Mjg6XFx0XFx0XFx0Zm9saW9fd2FpdF93cml0ZWJhY2soZm9saW8pO1xcbjI4Mjk6XFx0XFx0aWYgKFBhZ2VIV1BvaXNvbihwYWdlKSkge1xcbjI4MzA6XFx0XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4yODMxOlxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuMjgzMjpcXHRcXHRcXHRwcl9pbmZvKFxcXCIlI2x4OiBwYWdlIGFscmVhZHkgcG9pc29uZWRcXFxcblxcXCIsIHBmbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjUyOjEyLjQ2MTk5MTA5NloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjg3MTI1NTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRm9saW8gYW5kIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gdGhlIGNvZGUgaGl0cyB0aGlzIHNwZWNpZmljIHBhdGg6IGAhaHVnZSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9sYXJnZShmb2xpbylgLiBSaWdodCwgdGhhdCBjbGVhcmx5IGluZGljYXRlcyB3ZSdyZSBkZWFsaW5nIHdpdGggYSBsYXJnZSBmb2xpbywgc3BlY2lmaWNhbGx5IGEgVHJhbnNwYXJlbnQgSHVnZSBQYWdlIChUSFApLCBidXQgKm5vdCogYSBodWdldGxiIHBhZ2UuIFRoYXQncyB0aGUga2V5IGRpc3RpbmN0aW9uLiBHaXZlbiB0aGlzIHNjZW5hcmlvLCB0aGUgc3lzdGVtICoqYWJzb2x1dGVseSoqIG5lZWRzIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGVuYWJsZWQuIE5vIHN1cnByaXNlcyB0aGVyZS4gQW5kLCBjb25zaWRlcmluZyB0aGUgY29udGV4dCwgYENPTkZJR19NRU1PUllfRkFJTFVSRWAgaXMgYWxzbyBnb2luZyB0byBiZSBhIHJlcXVpcmVtZW50IGZvciBoYW5kbGluZyBwb3RlbnRpYWwgbWVtb3J5IGZhaWx1cmVzIHdpdGhpbiB0aGUgVEhQIGNvbnRleHQuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgZGVwZW5kZW50IGNvbmZpZ3VyYXRpb25zLiBJJ20gdGhpbmtpbmcsIGBDT05GSUdfTUlHUkFUSU9OYCBpcyBhbG1vc3QgY2VydGFpbmx5IG5lZWRlZC4gVGhlIHByZXNlbmNlIG9mIGBzdHJ1Y3QgbWlncmF0aW9uX3RhcmdldF9jb250cm9sIG10Y2Agc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIHBhZ2UgbWlncmF0aW9uLiBCZXR0ZXIgaGVhZCBvdmVyIHRvIGBtbS9tZW1vcnktZmFpbHVyZS5jYCB0byBjb25maXJtIG15IHN1c3BpY2lvbiBhbmQgc2VlIGhvdyBgQ09ORklHX01JR1JBVElPTmAgaXMgdGllZCBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NzYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1MjoxNi43NDkxMjAyMjJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2OTU3OTk2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTUlHUkFUSU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbW9yeS1mYWlsdXJlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjUyOjE2LjgwNjA4NTUyOFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDU3Mjg3Mzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG4qKkludmVzdGlnYXRpbmcgYSBNaXNzaW5nIE1pZ3JhdGlvbiBDb25maWd1cmF0aW9uKipcblxuSG1tLCBzb21ldGhpbmcgc2VlbXMgb2ZmLiBJIHdhcyBqdXN0IGxvb2tpbmcgYXQgYG1tL21lbW9yeS1mYWlsdXJlLmNgLCBhbmQgaXQncyBub3QgZ3VhcmRlZCBieSBhbnkgYENPTkZJR19NSUdSQVRJT05gIGlmZGVmcz8gVGhhdCdzIGEgYml0IHN1cnByaXNpbmcuIEkgdGhvdWdodCB0aG9zZSBmZWF0dXJlcyB3ZXJlIG9mdGVuIHRpZWQgdG9nZXRoZXIuIExldCBtZSBqdXN0IGRvdWJsZSBjaGVjayB0aGUgYG1tL0tjb25maWdgIGZpbGUgYWdhaW4uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBzb21ldGhpbmcgcmVsYXRlZCB0byBgTUVNT1JZX0ZBSUxVUkVgIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIG1pZ3JhdGlvbiBvcHRpb25zLiBUaGVyZSBtaWdodCBiZSBzb21lIHN1YnRsZSBjb25kaXRpb25hbCBkZXBlbmRlbmN5IEkgb3Zlcmxvb2tlZCwgb3IgcGVyaGFwcyBpdCdzIGhhbmRsZWQgZGlmZmVyZW50bHkgdGhhbiBJIGluaXRpYWxseSBhc3N1bWVkLiBCZXR0ZXIgdG8gYmUgY2VydGFpbiBhbmQgbm90IGp1bXAgdG8gYW55IGluY29ycmVjdCBhc3N1bXB0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4NzAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1MjoyMS44NjMzNzg2MTRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NTg3MzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1PUllfRkFJTFVSRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9Nzc0PWNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXFxuLS1cXG5tbS9LY29uZmlnLTc3Ni1cXG5tbS9LY29uZmlnOjc3Nzpjb25maWcgTUVNT1JZX0ZBSUxVUkVcXG5tbS9LY29uZmlnLTc3OC1cXHRkZXBlbmRzIG9uIE1NVVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1MjoyMS45MjE5NzUyNDlaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMwODQ5MTkxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgTWlncmF0aW9uIENvbmZpZ3VyYXRpb24gaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBgTUlHUkFUSU9OYCB3aXRoaW4gdGhlIGtlcm5lbCdzIGJ1aWxkIHN5c3RlbS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSB0eXBpY2FsIHBsYWNlIHdoZXJlIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgYXJlIGRlZmluZWQsIGFuZCBgTUlHUkFUSU9OYCBzb3VuZHMgbGlrZSBpdCdkIGZhbGwgc3F1YXJlbHkgd2l0aGluIHRoYXQgZG9tYWluLiBJdCdzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbnRyb2xzIHRoaXMgZmVhdHVyZSDigJMgaXMgaXQgYSBib29sZWFuIG9wdGlvbiwgYW4gaW50ZWdlciwgcGVyaGFwcz8gQXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXM/IFdoYXQgb3RoZXIgb3B0aW9ucyBhcmUgcmVsYXRlZD8gSSdsbCBuZWVkIHRvIGNhcmVmdWxseSBleGFtaW5lIHRoYXQgZmlsZS4gSWYgaXQncyBub3QgdGhlcmUgSSdsbCBoYXZlIHRvIGJyb2FkZW4gbXkgc2VhcmNoIHRvIG90aGVyIHJlbGV2YW50IGBLY29uZmlnYCBmaWxlcywgYnV0IGZvciBub3csIGBtbS9LY29uZmlnYCBpcyB0aGUgYmVzdCBiZXQuIExldCdzIHNlZSB3aGF0IHdlIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTY1LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTI6MjUuMjMwNDcwNjIxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzUzOTczNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUlHUkFUSU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz02ODU9Y29uZmlnIE5VTUFfTUlHUkFUSU9OXFxuLS1cXG5tbS9LY29uZmlnLTY5NS1cXG5tbS9LY29uZmlnOjY5Njpjb25maWcgTUlHUkFUSU9OXFxubW0vS2NvbmZpZy02OTctXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1MjoyNS4yOTQwMTQ1MTZaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTcwMjM0NzAwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGBtbS9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgTUlHUkFUSU9OYCBvcHRpb25zLlxuXG4qKkRpdmluZyBpbnRvIGBtbS9LY29uZmlnYCBhbmQgdGhlIGBNSUdSQVRJT05gIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBtbS9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IHplcm9pbmcgaW4gb24gYW55dGhpbmcgcmVsYXRlZCB0byBtZW1vcnkgbWlncmF0aW9uLiBUaGlzIGlzIGEgY3JpdGljYWwgYXJlYSwgZXNwZWNpYWxseSBmb3Igc3lzdGVtcyB0aGF0IG5lZWQgdG8gZHluYW1pY2FsbHkgbWFuYWdlIG1lbW9yeSwgTlVNQSBzZXR1cHMsIG9yIGhhbmRsZSBvbmxpbmUgbWVtb3J5IHJlc2l6aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGFuZCBob3cgdGhleSBpbmZsdWVuY2UgdGhlIGtlcm5lbCdzIGJlaGF2aW9yLiBUaGUgYE1JR1JBVElPTmAgb3B0aW9ucyBhcmUgY2xlYXJseSB0aGUgcGxhY2UgdG8gc3RhcnQuXG5cbkknbSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyByZWxhdGVkIHRvIHRoZSBjb3JlIG1pZ3JhdGlvbiBmdW5jdGlvbmFsaXRpZXM6IHBhZ2UgbWlncmF0aW9uLCBub2RlIG1pZ3JhdGlvbiwgb25saW5lIG1lbW9yeSBhZGQvcmVtb3ZlLiBJJ20gaG9waW5nIHRvIHNlZSBjbGVhciBkZXBlbmRlbmNpZXMgYmV0d2VlbiB0aGVzZSBvcHRpb25zLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSB1bmRlcmx5aW5nIGFyY2hpdGVjdHVyZSwgTlVNQSBzdXBwb3J0LCBhbmQgaG90cGx1ZyBjYXBhYmlsaXRpZXMuIEknbSBhbHNvIGxvb2tpbmcgZm9yIGFueSBjb25kaXRpb25hbCBjb25maWd1cmF0aW9ucywgZmVhdHVyZXMgdGhhdCBhcmUgb25seSBlbmFibGVkIHdoZW4gb3RoZXJzIGFyZSBhbHNvLlxuXG5JJ2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IFwiZXhwZXJ0XCIgb3B0aW9ucyBvciB0aG9zZSBtYXJrZWQgYXMgXCJFWFBFUklNRU5UQUxcIiBvciBcIkRFQlVHXCIgYmVjYXVzZSB0aGVzZSB0ZW5kIHRvIGdpdmUgY2x1ZXMgYWJvdXQgdGhlIGludGVybmFsIHdvcmtpbmdzIGFuZCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgdHJhZGUtb2Zmcy4gSXQncyBhbHNvIHBvc3NpYmxlIHRoYXQgdGhlcmUgYXJlIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIHNwZWNpZmljIHRvIGNlcnRhaW4gaGFyZHdhcmUgcGxhdGZvcm1zIHRoYXQgY291bGQgYmUgb2YgaW50ZXJlc3QuXG5cbkxldCdzIHNlZSB3aGF0IGdlbXMgYXJlIGhpZGRlbiBpbiB0aGlzIGZpbGUuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGF2YWlsYWJsZSBjb250cm9scyB0aGF0IEkgaGF2ZSwgYXMgd2VsbCBhcyB0aGUgZGVzaWduIGNob2ljZXMgYmVoaW5kIHRoZW0uIFRoaXMgd2lsbCBiZXR0ZXIgaW5mb3JtIGhvdyBJIGNvbmZpZ3VyZSB0aGUga2VybmVsIGZvciBhIG5ldyBzeXN0ZW0gdGhhdCBJIGhhdmUgY29taW5nIG9ubGluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0NzAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1MjozMC45OTYzNjMzNjJaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTUwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2OTYsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2OTY6XFx0Y29uZmlnIE1JR1JBVElPTlxcbiA2OTc6XFx0XFx0Ym9vbFxcbiA2OTg6XFx0XFx0ZGVwZW5kcyBvbiBNTVVcXG4gNjk5OlxcdFxcbiA3MDA6XFx0Y29uZmlnIERFVklDRV9NSUdSQVRJT05cXG4gNzAxOlxcdFxcdGRlZl9ib29sIE1JR1JBVElPTiBcXHUwMDI2XFx1MDAyNiBaT05FX0RFVklDRVxcbiA3MDI6XFx0XFxuIDcwMzpcXHRjb25maWcgQVJDSF9FTkFCTEVfSFVHRVBBR0VfTUlHUkFUSU9OXFxuIDcwNDpcXHRcXHRib29sXFxuIDcwNTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTI6MzAuOTk2NDYxMTkyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0OTIzNTQ5ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBNSUdSQVRJT05gIFZhcmlhYmxlKipcblxuT2theSwgc28gYE1JR1JBVElPTmAgaXMgYSBib29sZWFuLCB3aGljaCBtZWFucyBpdCdzIGVpdGhlciB0cnVlIG9yIGZhbHNlLCBhbmQgaXQncyBiZWluZyBzZXQgYnkgb3RoZXIgY29uZmlndXJhdGlvbiBzZXR0aW5ncy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwid2hvJ3MgZmxpcHBpbmcgdGhpcyBzd2l0Y2g/XCIgSXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgd2hlcmUgdGhpcyB2YXJpYWJsZSBpcyBiZWluZyBjb250cm9sbGVkLiBLbm93aW5nIHRoZSBjYWxsZXJzIHdpbGwgaGVscCBtZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBpbXBsaWNhdGlvbnMgb2YgYE1JR1JBVElPTmAgYmVpbmcgaW4gYSBwYXJ0aWN1bGFyIHN0YXRlLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBhbmQgaWRlbnRpZnkgYWxsIHRoZSBvdGhlciBjb25maWdzIHRoYXQgYXJlIHRvdWNoaW5nIHRoaXMgYm9vbGVhbiB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBmdWxseS4gSSdsbCBuZWVkIHRvIGtub3cgYWxsIG9mIHRoZSBwb3NzaWJsZSBjYWxsZXJzIGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBgTUlHUkFUSU9OYCBpcyBhZmZlY3RlZC4gVGhhdCdzIHRoZSBwcmlvcml0eSBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTY1LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1MjozNi40ODg4MTg4ODRaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMDYwNzg4NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IE1JR1JBVElPTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz01OTE9Y29uZmlnIE1FTU9SWV9IT1RSRU1PVkVcXG4tLVxcbm1tL0tjb25maWctNTk0LVxcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFBMVUdcXG5tbS9LY29uZmlnOjU5NTpcXHRzZWxlY3QgTUlHUkFUSU9OXFxubW0vS2NvbmZpZy01OTYtXFxuLS1cXG5tbS9LY29uZmlnPTY1ND1jb25maWcgQ09NUEFDVElPTlxcbi0tXFxubW0vS2NvbmZpZy02NTYtXFx0ZGVmYXVsdCB5XFxubW0vS2NvbmZpZzo2NTc6XFx0c2VsZWN0IE1JR1JBVElPTlxcbm1tL0tjb25maWctNjU4LVxcdGRlcGVuZHMgb24gTU1VXFxuLS1cXG5tbS9LY29uZmlnPTY4NT1jb25maWcgTlVNQV9NSUdSQVRJT05cXG4tLVxcbm1tL0tjb25maWctNjg4LVxcdGRlcGVuZHMgb24gTlVNQSBcXHUwMDI2XFx1MDAyNiBNTVVcXG5tbS9LY29uZmlnOjY4OTpcXHRzZWxlY3QgTUlHUkFUSU9OXFxubW0vS2NvbmZpZy02OTAtXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZz0xMDY3PWNvbmZpZyBDTUFcXG4tLVxcbm1tL0tjb25maWctMTA2OS1cXHRkZXBlbmRzIG9uIE1NVVxcbm1tL0tjb25maWc6MTA3MDpcXHRzZWxlY3QgTUlHUkFUSU9OXFxubW0vS2NvbmZpZy0xMDcxLVxcdHNlbGVjdCBNRU1PUllfSVNPTEFUSU9OXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjUyOjM4LjY5NDkwMzAzMVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzM3ODI0MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gY29uZmlndXJpbmcgdGhpcyBzeXN0ZW0gYW5kIHRoZSBhdXRvbWF0aWMgc2VsZWN0aW9uIGZhdm9ycyBgTUlHUkFUSU9OYCBiZWNhdXNlIGBDT01QQUNUSU9OYCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZXhwbGljaXRseSBpbmNsdWRlIGBNRU1PUllfRkFJTFVSRWAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYXMgaW1wb3J0YW50IGNvbnNpZGVyYXRpb25zIGluIG15IHNldCB1cC4gSnVzdCB3YW50IHRvIHRha2UgYSBtb21lbnQgYW5kIHRoaW5rIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWdzIEkgbmVlZCB0byBhZGRyZXNzLiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgYmVoYXZpb3Igb2YgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIGFzIGl0IGludGVyYWN0cyB3aXRoIHRoZXNlIG90aGVycy4gSSBzaG91bGQgY29uZmlybSBpdHMgc2V0dGluZ3MsIGFuZCBob3cgaXQgaW1wYWN0cyBmcmFnbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ0NiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjUyOjQyLjQzMjczMDM0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDk0NjI4MDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pbl9vcmRlcl9mb3Jfc3BsaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTQwND1pbnQgZm9saW9fc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcik7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NDA1OnVuc2lnbmVkIGludCBtaW5fb3JkZXJfZm9yX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQwNi1pbnQgc3BsaXRfZm9saW9fdG9fbGlzdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTY0MT1zdGF0aWMgaW5saW5lIGludCBzcGxpdF9odWdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC02NDYtXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NjQ3OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG1pbl9vcmRlcl9mb3Jfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC02NDgte1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00MzI5PWludCBmb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MzM2LS8qKlxcbm1tL2h1Z2VfbWVtb3J5LmM6NDMzNzogKiBtaW5fb3JkZXJfZm9yX3NwbGl0KCkgLSBnZXQgdGhlIG1pbmltdW0gb3JkZXIgQGZvbGlvIGNhbiBiZSBzcGxpdCB0b1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDMzOC0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XFxubW0vaHVnZV9tZW1vcnkuYy00MzM5LSAqXFxubW0vaHVnZV9tZW1vcnkuYzo0MzQwOiAqIG1pbl9vcmRlcl9mb3Jfc3BsaXQoKSB0ZWxscyB0aGUgbWluaW11bSBvcmRlciBAZm9saW8gY2FuIGJlIHNwbGl0IHRvLlxcbm1tL2h1Z2VfbWVtb3J5LmMtNDM0MS0gKiBJZiBhIGZpbGUtYmFja2VkIGZvbGlvIGlzIHRydW5jYXRlZCwgMCB3aWxsIGJlIHJldHVybmVkLiBBbnkgc3Vic2VxdWVudFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MzQ1LSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDM0Njp1bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDM0Ny17XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIzMzA9aW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0NDItXFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNDQzOlxcdFxcdGNvbnN0IGludCBuZXdfb3JkZXIgPSBtaW5fb3JkZXJfZm9yX3NwbGl0KGZvbGlvKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0NDQtXFx0XFx0aW50IGVycjtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9Mjc4Mz1zdGF0aWMgaW50IHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjc5OC1cXHRpZiAoIWh1Z2UgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9sYXJnZShmb2xpbykpIHtcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI3OTk6XFx0XFx0Y29uc3QgaW50IG5ld19vcmRlciA9IG1pbl9vcmRlcl9mb3Jfc3BsaXQoZm9saW8pO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjgwMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTI6NDQuNTI3MzY0MTc3WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNDM1OTUxOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgT3JpZ2luIG9mIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgbWluX29yZGVyX2Zvcl9zcGxpdGAuIEkgc2VlbSB0byByZWNhbGwgaXQgYmVpbmcgaW4gdGhlIGh1Z2UgcGFnZXMgY29kZSwgc28gSSdtIGJldHRpbmcgaXQncyBpbiBgbW0vaHVnZV9tZW1vcnkuY2AuIFRoYXQgbWFrZXMgc2Vuc2U7IGl04oCZcyB0aGUgdXN1YWwgcGxhY2UgZm9yIHRoZXNlIHRoaW5ncy4gTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIGNvbXBpbGF0aW9uIGNvbmRpdGlvbnMuIFJpZ2h0LCBgbW0vaHVnZV9tZW1vcnkuY2AgaXMgY29tcGlsZWQgYmFzZWQgb24gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAuIE5vIHN1cnByaXNlcyB0aGVyZS4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHRob3JvdWdoIHRob3VnaCwgbGV0J3MgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYG1tL01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBvYmplY3QgZmlsZSBmb3IgYGh1Z2VfbWVtb3J5LmNgIGlzIGFjdHVhbGx5IGBodWdlX21lbW9yeS5vYCwganVzdCB0byBydWxlIG91dCBhbnkgcG90ZW50aWFsIG5hbWluZyBkaXNjcmVwYW5jaWVzIG9yIGNvbmRpdGlvbmFsIGluY2x1c2lvbnMgSSdtIG5vdCBpbW1lZGlhdGVseSBjb25zaWRlcmluZy4gQmV0dGVyIHRvIGJlIGNlcnRhaW4gdGhhbiB0byB3YXN0ZSB0aW1lIGNoYXNpbmcgZ2hvc3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDMyNywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjUyOjQ4Ljc3MDk2Mjg2NVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg5NzM5MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZV9tZW1vcnkub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICs9IG1pZ3JhdGVfZGV2aWNlLm9cXG5tbS9NYWtlZmlsZToxMDE6b2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSArPSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQub1xcbm1tL01ha2VmaWxlLTEwMi1vYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSArPSBwYWdlX2NvdW50ZXIub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1Mjo0OC44NTk5NDE3NzlaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzAyNDk4OTY5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqXG5cbk9rYXksIHNvIHdlJ3JlIGRlZmluaXRlbHkgZ29pbmcgdG8gbmVlZCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBlbmFibGVkLiBUaGF0J3MgYSBnaXZlbi4gTm93LCBJJ20gdGhpbmtpbmcgYWJvdXQgYEhXUE9JU09OX0lOSkVDVGAuIFdoaWxlIGl0J3Mgbm90IGEgY29yZSByZXF1aXJlbWVudCBpbiB0aGUgc2FtZSB3YXksIEkgcmVjYWxsIGl0J3MgaW5jcmVkaWJseSB2YWx1YWJsZSBmb3Igc2ltdWxhdGluZyBhbmQgdGVzdGluZyBtZW1vcnkgY29ycnVwdGlvbiBzY2VuYXJpb3MuIEdpdmVzIHVzIGEgcmVhbGx5IHJvYnVzdCB3YXkgdG8gdGVzdCBvdXIgZmFpbHVyZSBoYW5kbGluZy4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGZvciBgSFdQT0lTT05fSU5KRUNUYCB0byBjb25maXJtIGl0cyBzdGF0dXMuIEkgd2FudCB0byBtYWtlIHN1cmUgd2UgaGF2ZSB0aGF0IG9wdGlvbiBhdmFpbGFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzE5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTI6NTUuODg0OTMzODVaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2Mjc3MjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIV1BPSVNPTl9JTkpFQ1RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTc3Nz1jb25maWcgTUVNT1JZX0ZBSUxVUkVcXG4tLVxcbm1tL0tjb25maWctNzg3LVxcbm1tL0tjb25maWc6Nzg4OmNvbmZpZyBIV1BPSVNPTl9JTkpFQ1RcXG5tbS9LY29uZmlnLTc4OS1cXHR0cmlzdGF0ZSBcXFwiSFdQb2lzb24gcGFnZXMgaW5qZWN0b3JcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjUyOjU1Ljk3MTIxNjM2M1oiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTY5NTMwNDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSFdQT0lTT04gSW5qZWN0aW9uIE1lY2hhbmlzbSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBIV1BPSVNPTl9JTkpFQ1RgIHRoaW5nLiBJdCdzIGEgdHJpc3RhdGUsIGludGVyZXN0aW5nLiBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgaG93IGBNRU1PUllfRkFJTFVSRWAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaW50ZXJhY3Qgd2l0aCBpdCBhcyB3ZWxsLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSdzIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGUgbWFpbiBmdW5jdGlvbiBvZiBpbnRlcmVzdCBpcyBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYCwgdGhvdWdoIHRoZSBmYWN0IHRoYXQgaXQncyBzdGF0aWMgaXMgYSBiaXQgb2YgYSB3cmlua2xlLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gd29yayBhcm91bmQgdGhhdCwgYnV0IEkgc3VzcGVjdCB0aGUgZW50cnkgcG9pbnQgdG8gYmUgYHNvZnRfb2ZmbGluZV9wYWdlYCwgc28gbGV0J3Mgc3RhcnQgdGhlcmUuIFRoZSBmaXJzdCB0aGluZyBJIHdpbGwgZG8gaXMgY29uZmlybSB0aGF0IGBzb2Z0X29mZmxpbmVfcGFnZWAgaXMgYWN0dWFsbHkgZXhwb3J0ZWQgYW5kIGFjY2Vzc2libGUgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTAwOCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjUyOjU5Ljk0MDc1MDM2MloiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU3OTI0NzUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnNvZnRfb2ZmbGluZV9wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbW9yeS1mYWlsdXJlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjUyOjU5Ljk5NjU1MTU5OFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQ1ODM0NzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBrZXJuZWwgZGVidWdnaW5nOlxuXG4qKkRlYnVnZ2luZyBhIE1pc3NpbmcgRXhwb3J0KipcblxuSG1tLCB3YWl0IGEgc2Vjb25kLi4uIHRoaXMgYHNvZnRfb2ZmbGluZV9wYWdlYCBzeW1ib2wgaXNuJ3Qgc2hvd2luZyB1cCBhcyBleHBvcnRlZD8gVGhhdCdzIG5vdCByaWdodC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgaXQncyBkZWZpbmVkIGFuZCBpZiBpdCAqc2hvdWxkKiBiZSB2aXNpYmxlLiBPa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGBtbS9tZW1vcnktZmFpbHVyZS5jYCBmaWxlLiBUaGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciBgc29mdF9vZmZsaW5lX3BhZ2VgLiBJJ20gZ3Vlc3NpbmcgdGhhdCdzIHdoZXJlIHRoZSBkZWZpbml0aW9uIG9yLCBhdCB0aGUgdmVyeSBsZWFzdCwgdXNhZ2UsIHJlc2lkZXMuIExldCdzIHNlZSBpZiBpdCdzIGdvdCB0aGUgcmlnaHQgRVhQT1JUX1NZTUJPTCBtYWNyb3Mgb3IgaWYgdGhlcmUncyBzb21lIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHByZXZlbnRpbmcgaXQgZnJvbSBiZWluZyB2aXNpYmxlLiBUaGlzIGNvdWxkIGJlIGEgY3JpdGljYWwgaXNzdWUhIFRpbWUgdG8gZ28gaHVudGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzMTksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1MzowMy42NDIzOTAxOThaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NDc5MDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvZnRfb2ZmbGluZV9wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbW9yeS1mYWlsdXJlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5LWZhaWx1cmUuYz0yNjA4PXN0YXRpYyB2b2lkIG1lbW9yeV9mYWlsdXJlX3dvcmtfZnVuYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2MjItXFx0XFx0aWYgKGVudHJ5LmZsYWdzIFxcdTAwMjYgTUZfU09GVF9PRkZMSU5FKVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjYyMzpcXHRcXHRcXHRzb2Z0X29mZmxpbmVfcGFnZShlbnRyeS5wZm4sIGVudHJ5LmZsYWdzKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2MjQtXFx0XFx0ZWxzZVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0yNzgzPXN0YXRpYyBpbnQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yODg2LS8qKlxcbm1tL21lbW9yeS1mYWlsdXJlLmM6Mjg4NzogKiBzb2Z0X29mZmxpbmVfcGFnZSAtIFNvZnQgb2ZmbGluZSBhIHBhZ2UuXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yODg4LSAqIEBwZm46IHBmbiB0byBzb2Z0LW9mZmxpbmVcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjkxMC0gKi9cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI5MTE6aW50IHNvZnRfb2ZmbGluZV9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yOTEyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTM6MDMuNjk5ODc3MTg0WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMzYyNTk3NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guXG5cbioqQW5hbHl6aW5nIHRoZSBHbG9iYWwgVmlzaWJpbGl0eSBvZiBgc29mdF9vZmZsaW5lX3BhZ2VgKipcblxuU28sIGBzb2Z0X29mZmxpbmVfcGFnZWAgaXNuJ3QgZXhwbGljaXRseSBleHBvcnRlZCwgYnV0IGl0J3MgZ2xvYmFsbHkgdmlzaWJsZSwgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VzIHF1ZXN0aW9ucyBhYm91dCB3aGVyZSBpdCdzIGJlaW5nIGFjY2Vzc2VkLiBXYWl0LCBJIHJlY2FsbCB0aGF0IGBzb2Z0X29mZmxpbmVfcGFnZWAgaXMgY2FsbGVkIGZyb20gYG1tL21hZHZpc2UuY2AsIHdoaWNoIGlzIGEgY29yZSBidWlsdC1pbiBjb21wb25lbnQuIFRoYXQgbmFycm93cyB0aGUgc2VhcmNoIHNvbWV3aGF0LCBidXQgYXJlIHRoZXJlIG90aGVyIHBvdGVudGlhbCBlbnRyeSBwb2ludHMgSSdtIG1pc3Npbmc/IEkgbmVlZCB0byBjb25zaWRlciBhbGwgdGhlIHBvc3NpYmlsaXRpZXMuIFRoaW5raW5nIGFib3V0IGl0LCBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIGluIGBtbS9tYWR2aXNlLmNgIGlzIHRoZSBwcmltYXJ5IG1lY2hhbmlzbSB0byBjYWxsIGBzb2Z0X29mZmxpbmVfcGFnZWAuIE5vdyBJIHNob3VsZCByZWFsbHkgY2hlY2sgb3V0IGBtYWR2aXNlX2luamVjdF9lcnJvcmAgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4NDcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1MzowOC43MzYxNDA2MDFaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMDE0NjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hZHZpc2VfaW5qZWN0X2Vycm9yXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21hZHZpc2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tYWR2aXNlLmM9MTMzOD1zdGF0aWMgaW50IG1hZHZpc2Vfdm1hX2JlaGF2aW9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTE0NDYtICovXFxubW0vbWFkdmlzZS5jOjE0NDc6c3RhdGljIGludCBtYWR2aXNlX2luamVjdF9lcnJvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG5tbS9tYWR2aXNlLmMtMTQ0OC17XFxuLS1cXG5tbS9tYWR2aXNlLmM9MTQ5Mj1zdGF0aWMgYm9vbCBpc19tZW1vcnlfZmFpbHVyZShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xNTA0LVxcbm1tL21hZHZpc2UuYzoxNTA1OnN0YXRpYyBpbnQgbWFkdmlzZV9pbmplY3RfZXJyb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxubW0vbWFkdmlzZS5jLTE1MDYte1xcbi0tXFxubW0vbWFkdmlzZS5jPTE4ODc9c3RhdGljIGludCBtYWR2aXNlX2RvX2JlaGF2aW9yKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW5faW4sXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTg5Ni1cXHRcXHRyYW5nZS1cXHUwMDNlZW5kID0gc3RhcnQgKyBsZW5faW47XFxubW0vbWFkdmlzZS5jOjE4OTc6XFx0XFx0cmV0dXJuIG1hZHZpc2VfaW5qZWN0X2Vycm9yKG1hZHZfYmVoYXZpb3IpO1xcbm1tL21hZHZpc2UuYy0xODk4LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTM6MDguODA2MTU5NjI2WiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0OTkxMDQyOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgYmVzdCB3YXkgdG8gZnV6eiBpdCBlZmZlY3RpdmVseS4gYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBpcyBzdGF0aWMsIHNvIEkgY2FuJ3QgdXNlIHRoYXQgYXMgYSBkaXJlY3QgZm9jdXMuIGBzb2Z0X29mZmxpbmVfcGFnZWAgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgY29uc2lkZXJlZCBgbWFkdmlzZV9kb19iZWhhdmlvcmAgYW5kIGBzeXNfbWFkdmlzZWAgYXMgcG9zc2liaWxpdGllcywgYnV0IGBzb2Z0X29mZmxpbmVfcGFnZWAgaXMgbXVjaCBtb3JlIHNwZWNpZmljIHRvIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgYmVpbmcgY2hhbmdlZCBoZXJlLiBMZXQgbWUgY29uZmlybSBgc29mdF9vZmZsaW5lX3BhZ2VgJ3MgbG9jYXRpb247IGl0IHNob3VsZCBiZSBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuIFllcCwgdGhlcmUgaXQgaXMuXG5cbkkgYnJpZWZseSBjb25zaWRlcmVkIGB0cnlfdG9fc3BsaXRfdGhwX3BhZ2VgLCBidXQgdGhhdCdzIGFsc28gc3RhdGljLCBzbyBpdCB3b24ndCB3b3JrIGFzIGEgZm9jdXMgc3ltYm9sLiBUaGVuLCBJIHJlYWxpemVkIHRoYXQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAgaXMgc3RhdGljIHRvbywgc28gSSBjYW4ndCBkaXJlY3RseSB1c2UgdGhhdC4gV2FpdCwgdGhlIHBhdGNoICpkb2VzKiBtb2RpZnkgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBzb2Z0X29mZmxpbmVfcGFnZWAuIFRoZXJlZm9yZSwgYHNvZnRfb2ZmbGluZV9wYWdlYCBpcyB0aGUgY29ycmVjdCBzeW1ib2wgdG8gZm9jdXMgb24uXG5cblNvLCBoZXJlJ3MgbXkgc3VtbWFyeSBmb3IgZnV6emluZyBwdXJwb3NlczpcblxuKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWUgLSBUaGlzIGZpeGVzIGEgZnVuY3Rpb25hbCBpc3N1ZSwgc3BlY2lmaWNhbGx5IGEgbWlzc2luZyBgZm9saW9fcHV0YCBsZWFkaW5nIHRvIGEgcmVmY291bnQgbGVhayBpbiBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYCB3aGVuIHNvZnQgb2ZmbGluaW5nIGEgVEhQIHBhZ2UgZmFpbHMgKGR1ZSB0byBgbmV3X29yZGVyYCBiZWluZyBub24temVybykuIFRoaXMgcmVwcmVzZW50cyBhIGRpcmVjdCBtZW1vcnkgbGVhaywgc28gaXQgaXMgaGlnaCBwcmlvcml0eS5cbiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayByZWxhdGVkIHRvIGhhbmRsaW5nIHNvZnQgb2ZmbGluaW5nIG9mIFRIUCBwYWdlcy4gVGhpcyBpcyBhIGNydWNpYWwgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBwcmV2ZW50cyBhIG1lbW9yeSBsZWFrLlxuKiAgICoqRm9jdXNTeW1ib2xzOioqIGBzb2Z0X29mZmxpbmVfcGFnZWAgLSBUaGlzIGlzIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIGludm9sdmVkIGFuZCBpcyBjYWxsZWQgZnJvbSBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYC5cbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYE1FTU9SWV9GQUlMVVJFYCwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCAtIFRoZXNlIGFyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuXG5cbk5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBjb25maWcgZGVwZW5kZW5jaWVzLiBEb2VzIGBNRU1PUllfRkFJTFVSRWAgcmVseSBvbiBhbnl0aGluZyBlbHNlPyBZZXMsIGBNTVVgIGFuZCBgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRWAuIGBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFYCBpcyBzZWxlY3RlZCBieSB4ODYsIGFybTY0LCBwb3dlcnBjLCBldGMuLCBzbyB3ZSdyZSBnb29kIHRoZXJlLiBBbmQgZm9yIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGl0IGRlcGVuZHMgb24gYEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBTWVNGU2AuIFRob3NlIHNob3VsZCBiZSBzdGFuZGFyZCwgdG9vLiBBbGwgY2xlYXIuXG5cbklzIHRoZXJlIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9uPyBgSFdQT0lTT05fSU5KRUNUYCB3b3VsZCBiZSB1c2VmdWwgZm9yIGluamVjdGlvbiB0ZXN0aW5nLCBidXQgYG1hZHZpc2UoTUFEVl9TT0ZUX09GRkxJTkUpYCBpcyBhdmFpbGFibGUgd2l0aG91dCBpdCwgc28gaXQncyBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LiBMZXQncyBtYWtlIHN1cmUgYE1BRFZfU09GVF9PRkZMSU5FYCBpcyB3aGF0IHdlIHRoaW5rIGl0IGlzIGJ5IGxvb2tpbmcgaW4gYG1tL21hZHZpc2UuY2AuIE9rYXksIGFsbCBkb25lLiBUaGF0IHNob3VsZCBjb3ZlciBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0NjIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTM6MTcuMzA1MjY2NDIzWiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzIwOTE1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJNQURWX1NPRlRfT0ZGTElORVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tYWR2aXNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWFkdmlzZS5jPTE0NDc9c3RhdGljIGludCBtYWR2aXNlX2luamVjdF9lcnJvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xNDcyLVxcbm1tL21hZHZpc2UuYzoxNDczOlxcdFxcdGlmIChtYWR2X2JlaGF2aW9yLVxcdTAwM2ViZWhhdmlvciA9PSBNQURWX1NPRlRfT0ZGTElORSkge1xcbm1tL21hZHZpc2UuYy0xNDc0LVxcdFxcdFxcdHByX2luZm8oXFxcIlNvZnQgb2ZmbGluaW5nIHBmbiAlI2x4IGF0IHByb2Nlc3MgdmlydHVhbCBhZGRyZXNzICUjbHhcXFxcblxcXCIsXFxuLS1cXG5tbS9tYWR2aXNlLmM9MTQ5Mj1zdGF0aWMgYm9vbCBpc19tZW1vcnlfZmFpbHVyZShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xNDk1LVxcdGNhc2UgTUFEVl9IV1BPSVNPTjpcXG5tbS9tYWR2aXNlLmM6MTQ5NjpcXHRjYXNlIE1BRFZfU09GVF9PRkZMSU5FOlxcbm1tL21hZHZpc2UuYy0xNDk3LVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxubW0vbWFkdmlzZS5jPTE1MTg9bWFkdmlzZV9iZWhhdmlvcl92YWxpZChpbnQgYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTU1MC0jaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXFxubW0vbWFkdmlzZS5jOjE1NTE6XFx0Y2FzZSBNQURWX1NPRlRfT0ZGTElORTpcXG5tbS9tYWR2aXNlLmMtMTU1Mi1cXHRjYXNlIE1BRFZfSFdQT0lTT046XFxuLS1cXG5tbS9tYWR2aXNlLmM9MTg4Nz1zdGF0aWMgaW50IG1hZHZpc2VfZG9fYmVoYXZpb3IodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbixcXG4tLVxcbm1tL21hZHZpc2UuYy0xOTQ1LSAqXFx0XFx0d2VyZSBjb3JydXB0ZWQgYnkgdW5yZWNvdmVyYWJsZSBoYXJkd2FyZSBtZW1vcnkgZmFpbHVyZS5cXG5tbS9tYWR2aXNlLmM6MTk0NjogKiAgTUFEVl9TT0ZUX09GRkxJTkUgLSB0cnkgdG8gc29mdC1vZmZsaW5lIHRoZSBnaXZlbiByYW5nZSBvZiBtZW1vcnkuXFxubW0vbWFkdmlzZS5jLTE5NDctICogIE1BRFZfTUVSR0VBQkxFIC0gdGhlIGFwcGxpY2F0aW9uIHJlY29tbWVuZHMgdGhhdCBLU00gdHJ5IHRvIG1lcmdlIHBhZ2VzIGluXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjUzOjE3LjM4MjQ4MDIzN1oiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDk1MjQ0ODkyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBNZW1vcnkgRXJyb3IgSW5qZWN0aW9uIENhcGFiaWxpdGllcyoqXG5cbkFscmlnaHQsIHNvIGBNQURWX1NPRlRfT0ZGTElORWAgaXMgYXZhaWxhYmxlLiBUaGF0IG1ha2VzIHNlbnNlLCBidXQgb25seSBpZiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBpcyBmbGlwcGVkIG9uLiBUaGF0J3MgYSBnb29kIHByZXJlcXVpc2l0ZSB0byBrZWVwIGluIG1pbmQuIE5vdywgSSBuZWVkIHRvIGRpZyBhIGxpdHRsZSBkZWVwZXIuIEkgc2VlbSB0byByZWNhbGwgdGhhdCB0aGUgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBmdW5jdGlvbiwgd2hpY2ggSSdsbCBiZSB1c2luZyBpbiByZWxhdGlvbiB0byB0aGlzLCBoYXMgc29tZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIHNvIGxldCdzIGNoZWNrIGl0cyByZXF1aXJlbWVudHMuIEl0IGxvb2tzIGxpa2UgYENBUF9TWVNfQURNSU5gIGlzIGdvaW5nIHRvIGJlIG5lZWRlZC4gSSBmaWd1cmVkIGFzIG11Y2guIFRpbWUgdG8gY29uZmlybSB0aGUgZGV0YWlscyBhbmQgbW92ZSBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODExNCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjUzOjMyLjMzNDkzMjMxMloiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODMxNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWFkdmlzZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0NDcsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0NDc6XFx0c3RhdGljIGludCBtYWR2aXNlX2luamVjdF9lcnJvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4xNDQ4OlxcdHtcXG4xNDQ5OlxcdFxcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcXG4xNDUwOlxcdFxcdHVuc2lnbmVkIGxvbmcgc3RhcnQgPSBtYWR2X2JlaGF2aW9yLVxcdTAwM2VyYW5nZS5zdGFydDtcXG4xNDUxOlxcdFxcdHVuc2lnbmVkIGxvbmcgZW5kID0gbWFkdl9iZWhhdmlvci1cXHUwMDNlcmFuZ2UuZW5kO1xcbjE0NTI6XFx0XFxuMTQ1MzpcXHRcXHRpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpXFxuMTQ1NDpcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbjE0NTU6XFx0XFxuMTQ1NjpcXHRcXHRmb3IgKDsgc3RhcnQgXFx1MDAzYyBlbmQ7IHN0YXJ0ICs9IHNpemUpIHtcXG4xNDU3OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgcGZuO1xcbjE0NTg6XFx0XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuMTQ1OTpcXHRcXHRcXHRpbnQgcmV0O1xcbjE0NjA6XFx0XFxuMTQ2MTpcXHRcXHRcXHRyZXQgPSBnZXRfdXNlcl9wYWdlc19mYXN0KHN0YXJ0LCAxLCAwLCBcXHUwMDI2cGFnZSk7XFxuMTQ2MjpcXHRcXHRcXHRpZiAocmV0ICE9IDEpXFxuMTQ2MzpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE0NjQ6XFx0XFx0XFx0cGZuID0gcGFnZV90b19wZm4ocGFnZSk7XFxuMTQ2NTpcXHRcXG4xNDY2OlxcdFxcdFxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjUzOjMyLjMzNTExODU3MloiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjA2MjU2NzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU29mdCBPZmZsaW5lIFBhZ2UgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBgc29mdF9vZmZsaW5lX3BhZ2VgIHNpdHVhdGlvbi4gSXQncyBwcmV0dHkgY2xlYXIgdGhhdCB0cmlnZ2VyaW5nIGl0IGRpcmVjdGx5IHRocm91Z2ggdGhlIGtlcm5lbCByZXF1aXJlcyBgQ0FQX1NZU19BRE1JTmAuIFRoYXQgbWFrZXMgc2Vuc2UuIEkga25vdyBTeXprYWxsZXIgdHlwaWNhbGx5IHJ1bnMgd2l0aCBgQ0FQX1NZU19BRE1JTmAgaW4gaXRzIGlzb2xhdGVkIG5hbWVzcGFjZXMsIGJ1dCB0aGUgYGNhcGFibGUoQ0FQX1NZU19BRE1JTilgIGNoZWNrIGlzIGdvaW5nIHRvIGxvb2sgYXQgdGhlICppbml0aWFsKiB1c2VyIG5hbWVzcGFjZSwgd2hpY2ggU3l6a2FsbGVyIHByb2JhYmx5IGhhcywgc2luY2UgaXQgdXN1YWxseSBydW5zIGFzIHJvb3Qgd2l0aGluIHRoZSBWTSBpdCdzIHVzaW5nLlxuXG5JIHdvbmRlciwgdGhvdWdoLCBpZiB0aGVyZSdzIGFuIGFsdGVybmF0aXZlIHJvdXRlLCBzb21ldGhpbmcgbGVzcyBkaXJlY3Q/IEFoLCB5ZXMhIFN5c2ZzISBTcGVjaWZpY2FsbHksIGAvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9zb2Z0X29mZmxpbmVfcGFnZWAuIFN5emthbGxlciAqY2FuKiB3cml0ZSB0byBzeXNmczsgSSd2ZSB1c2VkIHRoYXQgYmVmb3JlLiBUaGF0IGNvdWxkIGJlIGEgZmVhc2libGUgdHJpZ2dlciBwYXRoLlxuXG5TbywgdGhpbmtpbmcgYWJvdXQgdGhlIGJyb2FkZXIgc2V0dXAuLi4gSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQuIFRoYXQnbGwgYmUgYE1FTU9SWV9GQUlMVVJFYCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgbmF0dXJhbGx5LlxuXG5SaWdodCwgSSd2ZSBnb3QgYSBoYW5kbGUgb24gdGhlIGtleSBlbGVtZW50cy4gTm93IEkganVzdCBuZWVkIHRvIHJlY29yZCB0aGVzZSBmaW5kaW5ncyBmb3IgZnV0dXJlIHJlZmVyZW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2MzksIk91dHB1dFRva2VucyI6MTI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTM6MzcuOTQxMzc4Mjc1WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwNTQzNzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzb2Z0X29mZmxpbmVfcGFnZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWlzc2luZyBmb2xpb19wdXQgKHJlZmNvdW50IGxlYWspIGluIHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZSB3aGVuIHNvZnQgb2ZmbGluaW5nIGEgVEhQIHBhZ2UgZmFpbHMgYmVjYXVzZSBuZXdfb3JkZXIgaXMgbm9uLXplcm8uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHByZXZlbnRzIGEgbWVtb3J5IGxlYWsgYW5kIGlzIHJlYWNoYWJsZSB2aWEgbWFkdmlzZShNQURWX1NPRlRfT0ZGTElORSkgb3Igc3lzZnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic29mdF9vZmZsaW5lX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1pc3NpbmcgZm9saW9fcHV0IChyZWZjb3VudCBsZWFrKSBpbiBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Ugd2hlbiBzb2Z0IG9mZmxpbmluZyBhIFRIUCBwYWdlIGZhaWxzIGJlY2F1c2UgbmV3X29yZGVyIGlzIG5vbi16ZXJvLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBwcmV2ZW50cyBhIG1lbW9yeSBsZWFrIGFuZCBpcyByZWFjaGFibGUgdmlhIG1hZHZpc2UoTUFEVl9TT0ZUX09GRkxJTkUpIG9yIHN5c2ZzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowcf8x6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-04 04:08:32 +0000 UTC FinishedAt: 2026-08-04 04:53:39 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_FAILURE", "TRANSPARENT_HUGEPAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_FAILURE", "TRANSPARENT_HUGEPAGE" ], "series_id": "9e99173b-863b-4bcf-af5d-9f5f700128eb" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "soft_offline_page" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c29mdF9vZmZsaW5lX3BhZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtaXNzaW5nIGZvbGlvX3B1dCAocmVmY291bnQgbGVhaykgaW4gc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlIHdoZW4gc29mdCBvZmZsaW5pbmcgYSBUSFAgcGFnZSBmYWlscyBiZWNhdXNlIG5ld19vcmRlciBpcyBub24temVyby4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcHJldmVudHMgYSBtZW1vcnkgbGVhayBhbmQgaXMgcmVhY2hhYmxlIHZpYSBtYWR2aXNlKE1BRFZfU09GVF9PRkZMSU5FKSBvciBzeXNmcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQ3YzgzYzU4NmEzZGM2NjM3ZGFmMmM4NDk4NmIxY2Y2MjdjOWQ0MjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDA0OjUxOjE0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5pbmRleCA1MTUwOGE1NWM0MDU1Li4zYjFlNjk0NjgyMWJiIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuQEAgLTI3NzYsNiAmIzQzOzI3NzYsOSBAQCBFWFBPUlRfU1lNQk9MKHVucG9pc29uX21lbW9yeSk7XG4gICogc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlIGhhbmRsZXMgaHVnZXRsYi1wYWdlcyBhbmQgbm9uLWh1Z2V0bGIgcGFnZXMuXG4gICogSWYgdGhlIHBhZ2UgaXMgYSBub24tZGlydHkgdW5tYXBwZWQgcGFnZS1jYWNoZSBwYWdlLCBpdCBzaW1wbHkgaW52YWxpZGF0ZXMuXG4gICogSWYgdGhlIHBhZ2UgaXMgbWFwcGVkLCBpdCBtaWdyYXRlcyB0aGUgY29udGVudHMgb3Zlci5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIGZvbGlvIHJlZmNvdW50IGhhcyBiZWVuIGluY3JlbWVudGVkIGJlZm9yZSBlbnRlcmluZyB0aGlzIGZ1bmN0aW9uLlxuJiM0MzsgKiBUaGlzIGZvbGlvIHJlZmVyZW5jZSBtdXN0IGJlIHJlbGVhc2VkIGJlZm9yZSB0aGUgZnVuY3Rpb24gcmV0dXJucyBvbiBhbGwgcGF0aHMuXG4gICovXG4gc3RhdGljIGludCBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuQEAgLTI4MDEsOSAmIzQzOzI4MDQsMTkgQEAgc3RhdGljIGludCBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4gXHRcdCAqIE5PVEU6IGlmIG1pbmltaXppbmcgdGhlIG51bWJlciBvZiBzb2Z0IG9mZmxpbmUgcGFnZXMgaXNcbiBcdFx0ICogcHJlZmVycmVkLCBzcGxpdCBpdCB0byBub24temVybyBuZXdfb3JkZXIgbGlrZSBpdCBpcyBkb25lIGluXG4gXHRcdCAqIG1lbW9yeV9mYWlsdXJlKCkuXG4mIzQzO1x0XHQgKlxuJiM0MztcdFx0ICogRHJvcCB0aGUgcmVmZXJlbmNlIG9idGFpbmVkIHVwb24gZW50cnk7XG4mIzQzO1x0XHQgKiB0cnlfdG9fc3BsaXRfdGhwX3BhZ2UoLi4uLCByZWxlYXNlPXRydWUpIGhhbmRsZXMgcmVmY291bnRpbmcgaXRzZWxmXG4mIzQzO1x0XHQgKiB3aGVuIHRoZSBzcGxpdCBmYWlscy5cbiBcdFx0ICovXG4tXHRcdGlmIChuZXdfb3JkZXIgfHwgdHJ5X3RvX3NwbGl0X3RocF9wYWdlKHBhZ2UsIC8qIG5ld19vcmRlcj0gKi8gMCxcbi1cdFx0XHRcdFx0XHQgICAgICAgLyogcmVsZWFzZT0gKi8gdHJ1ZSkpIHtcbiYjNDM7XHRcdGlmIChuZXdfb3JkZXIpIHtcbiYjNDM7XHRcdFx0cHJfaW5mbyhcJiMzNDslI2x4OiBvcmRlci0lZCBmb2xpbyBjYW5ub3Qgc29mdCBvZmZsaW5lXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdHBmbiwgbmV3X29yZGVyKTtcbiYjNDM7XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmICh0cnlfdG9fc3BsaXRfdGhwX3BhZ2UocGFnZSwgLyogbmV3X29yZGVyPSAqLyAwLFxuJiM0MztcdFx0XHRcdFx0IC8qIHJlbGVhc2U9ICovIHRydWUpKSB7XG4gXHRcdFx0cHJfaW5mbyhcJiMzNDslI2x4OiB0aHAgc3BsaXQgZmFpbGVkXFxuXCYjMzQ7LCBwZm4pO1xuIFx0XHRcdHJldHVybiAtRUJVU1k7XG4gXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzb2Z0X29mZmxpbmVfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG1pc3NpbmcgZm9saW9fcHV0IChyZWZjb3VudCBsZWFrKSBpbiBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Ugd2hlbiBzb2Z0IG9mZmxpbmluZyBhIFRIUCBwYWdlIGZhaWxzIGJlY2F1c2UgbmV3X29yZGVyIGlzIG5vbi16ZXJvLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBwcmV2ZW50cyBhIG1lbW9yeSBsZWFrIGFuZCBpcyByZWFjaGFibGUgdmlhIG1hZHZpc2UoTUFEVl9TT0ZUX09GRkxJTkUpIG9yIHN5c2ZzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDdjODNjNTg2YTNkYzY2MzdkYWYyYzg0OTg2YjFjZjYyN2M5ZDQyNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDQgMDQ6NTE6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuYwppbmRleCA1MTUwOGE1NWM0MDU1Li4zYjFlNjk0NjgyMWJiIDEwMDY0NAotLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS1mYWlsdXJlLmMKQEAgLTI3NzYsNiAmIzQzOzI3NzYsOSBAQCBFWFBPUlRfU1lNQk9MKHVucG9pc29uX21lbW9yeSk7CiAgKiBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2UgaGFuZGxlcyBodWdldGxiLXBhZ2VzIGFuZCBub24taHVnZXRsYiBwYWdlcy4KICAqIElmIHRoZSBwYWdlIGlzIGEgbm9uLWRpcnR5IHVubWFwcGVkIHBhZ2UtY2FjaGUgcGFnZSwgaXQgc2ltcGx5IGludmFsaWRhdGVzLgogICogSWYgdGhlIHBhZ2UgaXMgbWFwcGVkLCBpdCBtaWdyYXRlcyB0aGUgY29udGVudHMgb3Zlci4KJiM0MzsgKgomIzQzOyAqIFRoZSBmb2xpbyByZWZjb3VudCBoYXMgYmVlbiBpbmNyZW1lbnRlZCBiZWZvcmUgZW50ZXJpbmcgdGhpcyBmdW5jdGlvbi4KJiM0MzsgKiBUaGlzIGZvbGlvIHJlZmVyZW5jZSBtdXN0IGJlIHJlbGVhc2VkIGJlZm9yZSB0aGUgZnVuY3Rpb24gcmV0dXJucyBvbiBhbGwgcGF0aHMuCiAgKi8KIHN0YXRpYyBpbnQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQogewpAQCAtMjgwMSw5ICYjNDM7MjgwNCwxOSBAQCBzdGF0aWMgaW50IHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKIAkJICogTk9URTogaWYgbWluaW1pemluZyB0aGUgbnVtYmVyIG9mIHNvZnQgb2ZmbGluZSBwYWdlcyBpcwogCQkgKiBwcmVmZXJyZWQsIHNwbGl0IGl0IHRvIG5vbi16ZXJvIG5ld19vcmRlciBsaWtlIGl0IGlzIGRvbmUgaW4KIAkJICogbWVtb3J5X2ZhaWx1cmUoKS4KJiM0MzsJCSAqCiYjNDM7CQkgKiBEcm9wIHRoZSByZWZlcmVuY2Ugb2J0YWluZWQgdXBvbiBlbnRyeTsKJiM0MzsJCSAqIHRyeV90b19zcGxpdF90aHBfcGFnZSguLi4sIHJlbGVhc2U9dHJ1ZSkgaGFuZGxlcyByZWZjb3VudGluZyBpdHNlbGYKJiM0MzsJCSAqIHdoZW4gdGhlIHNwbGl0IGZhaWxzLgogCQkgKi8KLQkJaWYgKG5ld19vcmRlciB8fCB0cnlfdG9fc3BsaXRfdGhwX3BhZ2UocGFnZSwgLyogbmV3X29yZGVyPSAqLyAwLAotCQkJCQkJICAgICAgIC8qIHJlbGVhc2U9ICovIHRydWUpKSB7CiYjNDM7CQlpZiAobmV3X29yZGVyKSB7CiYjNDM7CQkJcHJfaW5mbygmIzM0OyUjbHg6IG9yZGVyLSVkIGZvbGlvIGNhbm5vdCBzb2Z0IG9mZmxpbmVcbiYjMzQ7LAomIzQzOwkJCQlwZm4sIG5ld19vcmRlcik7CiYjNDM7CQkJZm9saW9fcHV0KGZvbGlvKTsKJiM0MzsJCQlyZXR1cm4gLUVCVVNZOwomIzQzOwkJfQomIzQzOwkJaWYgKHRyeV90b19zcGxpdF90aHBfcGFnZShwYWdlLCAvKiBuZXdfb3JkZXI9ICovIDAsCiYjNDM7CQkJCQkgLyogcmVsZWFzZT0gKi8gdHJ1ZSkpIHsKIAkJCXByX2luZm8oJiMzNDslI2x4OiB0aHAgc3BsaXQgZmFpbGVkXG4mIzM0OywgcGZuKTsKIAkJCXJldHVybiAtRUJVU1k7CiAJCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM3OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBNZW1vcnkgRmFpbHVyZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBzb2Z0IG9mZmxpbmluZyBUSFAgKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMpIHBhZ2VzLCBhbmQgdGhlIGNvcmUgY2hhbmdlIGlzIGluIGhvdyBpdCBoYW5kbGVzIGEgc3BlY2lmaWMgY2hlY2suIEluaXRpYWxseSwgdGhlIGNvZGUgd2FzIHVzaW5nIGEgc2hvcnQtY2lyY3VpdGluZyBPUiAoYHx8YCkgdG8gZGV0ZXJtaW5lIGlmIGEgVEhQIHBhZ2UgbmVlZGVkIHRvIGJlIHNwbGl0LiBUaGUgb3JpZ2luYWwgbG9naWMgd2FzIGBpZiAobmV3X29yZGVyIHx8IHRyeV90b19zcGxpdF90aHBfcGFnZShwYWdlLCAvKiBuZXdfb3JkZXI9ICovIDAsIC8qIHJlbGVhc2U9ICovIHRydWUpKWAuIFRoaXMgcGF0Y2ggZWZmZWN0aXZlbHkgc2VwYXJhdGVzIHRob3NlIHR3byBjaGVja3MuCgpUaGUgcHJvYmxlbSwgYXMgSSB1bmRlcnN0YW5kIGl0LCBpcyB0aGF0IHdoZW4gYG5ld19vcmRlcmAgd2FzbiYjMzk7dCB6ZXJvLCBpdCB3b3VsZCAqc2hvcnQtY2lyY3VpdCogdGhlIE9SLiBUaGlzIG1lYW50IGB0cnlfdG9fc3BsaXRfdGhwX3BhZ2VgIHdvdWxkbiYjMzk7dCBiZSBjYWxsZWQuIENydWNpYWxseSwgdGhlICpvcmlnaW5hbCogY29kZSBoYWQgYSBgZm9saW9fcHV0KGZvbGlvKWAgaW5zaWRlIG9mIHRoZSBgaWZgIGJsb2NrLiBJZiBgdHJ5X3RvX3NwbGl0X3RocF9wYWdlYCB3YXMgZXhlY3V0ZWQsIGl0IHdvdWxkIGRlYWwgd2l0aCB0aGUgcmVmY291bnQuIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgdGhlIHNob3J0LWNpcmN1aXRpbmcsIHRoZSBvcmlnaW5hbCBjb2RlIG1pc3NlZCB0aGUgZGVjcmVtZW50IGluIHRoZSBjYXNlIG9mIGBuZXdfb3JkZXJgIGJlaW5nIG5vbi16ZXJvLiBUaGUgcGF0Y2gsIHRoZXJlZm9yZSwgc2VwYXJhdGVzIHRoZSBjaGVja3MsIGFkZGluZyBhbiBleHBsaWNpdCBgZm9saW9fcHV0KGZvbGlvKWAgaW4gdGhlIG5ldyBjb2RlIGJsb2NrIHdoZW4gYG5ld19vcmRlcmAgaXMgbm9uLXplcm8sIGFuZCBpdCBhbHNvIGNhbGxzIGB0cnlfdG9fc3BsaXRfdGhwX3BhZ2VgIGFmdGVyIGluIGEgc2VwYXJhdGUgYGlmYCBibG9jay4KClRoaXMgZml4ZXMgYSBtaXNzaW5nIGBmb2xpb19wdXRgLCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIHJlc291cmNlIGxlYWsuIE5vdywgSSBuZWVkIHRvIGxvb2sgaW50byB0aGlzIGZ1bmN0aW9uIG1vcmUgZ2VuZXJhbGx5IGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBMZXQmIzM5O3Mgc2VlIGlmIEkgY2FuIGZpbmQgdGhlIHJlbGF0ZWQgY29uZmlnIG9wdGlvbnMgZm9yIGBtbS9tZW1vcnktZmFpbHVyZS5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1vcnktZmFpbHVyZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbW9yeS1mYWlsdXJlLmM9Mjc3MD1FWFBPUlRfU1lNQk9MKHVucG9pc29uX21lbW9yeSk7XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzc1LS8qXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI3NzY6ICogc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlIGhhbmRsZXMgaHVnZXRsYi1wYWdlcyBhbmQgbm9uLWh1Z2V0bGIgcGFnZXMuXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3NzctICogSWYgdGhlIHBhZ2UgaXMgYSBub24tZGlydHkgdW5tYXBwZWQgcGFnZS1jYWNoZSBwYWdlLCBpdCBzaW1wbHkgaW52YWxpZGF0ZXMuXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzgyLSAqL1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyNzgzOnN0YXRpYyBpbnQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzg0LXtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTI5MTE9aW50IHNvZnRfb2ZmbGluZV9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yOTU3LVx0aWYgKHJldCBcdTAwM2UgMCkge1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyOTU4Olx0XHRyZXQgPSBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2UocGFnZSk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI5NTktXHR9IGVsc2UgaWYgKHJldCA9PSAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQyNAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBPZmZsaW5lIFBhZ2UgSGFuZGxpbmcqKgoKUmlnaHQsIHNvIGBzb2Z0X29mZmxpbmVfcGFnZWAg4oCTIHRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHRoYXQga2lja3Mgb2ZmIHRoZSBzb2Z0IG9mZmxpbmUgcHJvY2Vzcy4gSXQgbG9va3MgbGlrZSBpdCBkaXJlY3RseSBjYWxscyBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYC4gTWFrZXMgc2Vuc2U7IG9uZSBoYW5kbGVzIHRoZSBpbml0aWFsIHRyaWdnZXJpbmcsIHRoZSBvdGhlciBwcm9iYWJseSBkb2VzIHRoZSBjb3JlIHdvcmsgb24gdGhlIHBhZ2UgdGhhdCYjMzk7cyBnb2luZyBzb2Z0IG9mZmxpbmUuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCAqZW5hYmxlKiB0aGlzIHdob2xlIG1lbW9yeSBmYWlsdXJlIHBhdGgsIHNwZWNpZmljYWxseSB0aGUgZW5hYmxpbmcgY29uZGl0aW9ucyBvZiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4gV2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGtlcm5lbCBwYXJhbWV0ZXJzLCBvciBoYXJkd2FyZSBmZWF0dXJlcyBuZWVkIHRvIGJlIGluIHBsYXkgZm9yIHRoZSBzb2Z0IG9mZmxpbmUgbWVjaGFuaXNtIHRvIGV2ZW4gKmJlKiBhY3RpdmU/IEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyB0byBzZWUgd2hhdCB0cmlnZ2VycyBpdC4gVGhhdOKAmXMgdGhlIGtleS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1vcnktZmFpbHVyZS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9MTExPW9iai0kKENPTkZJR19ETUFQT09MX1RFU1QpICYjNDM7PSBkbWFwb29sX3Rlc3Qub1xubW0vTWFrZWZpbGU6MTEyOm9iai0kKENPTkZJR19NRU1PUllfRkFJTFVSRSkgJiM0Mzs9IG1lbW9yeS1mYWlsdXJlLm9cbm1tL01ha2VmaWxlLTExMy1vYmotJChDT05GSUdfSFdQT0lTT05fSU5KRUNUKSAmIzQzOz0gaHdwb2lzb24taW5qZWN0Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzY4CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBmb3IgU29mdCBPZmZsaW5lIFBhZ2UgQWNjZXNzaWJpbGl0eSoqCgpBbHJpZ2h0LCB0aGUgcmVxdWlyZW1lbnQgZm9yIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIGNsZWFyOyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIG1lbW9yeSBmYWlsdXJlIHNjZW5hcmlvcy4gTm93LCB0aGUgbmV4dCBjcnVjaWFsIHN0ZXAgaXMgZGV0ZXJtaW5pbmcgaG93IHRvIGludGVyYWN0IHdpdGggdGhpcyBmdW5jdGlvbmFsaXR5LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciB0aGUgYHNvZnRfb2ZmbGluZV9wYWdlYCBmdW5jdGlvbiBvciB2YXJpYWJsZSDigJMgaWYgaXQmIzM5O3MgYSB2YXJpYWJsZSDigJMgaXMgYWN0dWFsbHkgYWNjZXNzaWJsZSBvciBleHBvc2VkIHRvIHVzZXJzcGFjZS4gVGhpcyBpcyBjcml0aWNhbC4gSWYgaXQgaXNuJiMzOTt0LCB0aGVuIGV2ZW4gaWYgd2UgaGF2ZSBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBlbmFibGVkLCB3ZSB3b24mIzM5O3QgYmUgYWJsZSB0byBsZXZlcmFnZSBpdCBlZmZlY3RpdmVseSBmcm9tIGFuIGFwcGxpY2F0aW9uIG9yIHV0aWxpdHkgcnVubmluZyBpbiB1c2Vyc3BhY2UgdG8gbWFuYWdlIHNvZnQgb2ZmbGluZSBwYWdlcy4gV2UgbmVlZCB0byBiZSBhYmxlIHRvICp1c2UqIHRoYXQgY2FwYWJpbGl0eSwgc28gSSYjMzk7bSBpbW1lZGlhdGVseSBtb3ZpbmcgdG8gYXNzZXNzIHRoZSBleHBvcnQgb3IgcmVhY2hhYmlsaXR5IG9mIHRoaXMgc3ltYm9sLiBUaGlzIGludmVzdGlnYXRpb24gd2lsbCBndWlkZSBtZSBvbiB0aGUgc3Vic2VxdWVudCBpbXBsZW1lbnRhdGlvbiBvciwgcG90ZW50aWFsbHksIHRoZSBuZWVkIGZvciBrZXJuZWwgbW9kaWZpY2F0aW9ucyB0byBleHBvc2UgdGhlIHJlcXVpcmVkIGludGVyZmFjZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c29mdF9vZmZsaW5lX3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1tZW1vcnktcGFnZS1vZmZsaW5lOjE6V2hhdDpcdFx0L3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvc29mdF9vZmZsaW5lX3BhZ2VcbkRvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtbWVtb3J5LXBhZ2Utb2ZmbGluZS0yLURhdGU6XHRcdFNlcCAyMDA5XG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tZW1vcnktaG90cGx1Zy5yc3Q9Mjc2PVRoZSBmb2xsb3dpbmcgZmlsZXMgYXJlIGN1cnJlbnRseSBkZWZpbmVkOlxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0LTMwNy0gIFdoZW4gdGhlIENPTkZJR19NRU1PUllfRkFJTFVSRSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZW5hYmxlZCwgdHdvXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL21lbW9yeS1ob3RwbHVnLnJzdDozMDg6ICBhZGRpdGlvbmFsIGZpbGVzIGBgaGFyZF9vZmZsaW5lX3BhZ2VgYCBhbmQgYGBzb2Z0X29mZmxpbmVfcGFnZWBgIGFyZSBhdmFpbGFibGVcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0LTMwOS0gIHRvIHRyaWdnZXIgaHdwb2lzb25pbmcgb2YgcGFnZXMsIGZvciBleGFtcGxlLCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4gTm90ZSB0aGF0XG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL3BkdC5jPTI0Nz1zdGF0aWMgaW50IHBkdF9tYWlubG9vcCh2b2lkICp1bnVzZWQpXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL3BkdC5jLTMzNS1cdFx0XHRlbHNlXG5hcmNoL3BhcmlzYy9rZXJuZWwvcGR0LmM6MzM2Olx0XHRcdFx0c29mdF9vZmZsaW5lX3BhZ2UocGRlIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULCAwKTtcbmFyY2gvcGFyaXNjL2tlcm5lbC9wZHQuYy0zMzctI2Vsc2Vcbi0tXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM9NTk1PXN0YXRpYyBERVZJQ0VfQVRUUl9XTyhwcm9iZSk7XG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTYwMy0vKiBTb2Z0IG9mZmxpbmUgYSBwYWdlICovXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6NjA0OnN0YXRpYyBzc2l6ZV90IHNvZnRfb2ZmbGluZV9wYWdlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy02MDUtXHRcdFx0XHQgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTYxNC1cdHBmbiBcdTAwM2VcdTAwM2U9IFBBR0VfU0hJRlQ7XG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6NjE1Olx0cmV0ID0gc29mdF9vZmZsaW5lX3BhZ2UocGZuLCAwKTtcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy02MTYtXHRyZXR1cm4gcmV0ID09IDAgPyBjb3VudCA6IHJldDtcbi0tXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM9NjIwPXN0YXRpYyBzc2l6ZV90IGhhcmRfb2ZmbGluZV9wYWdlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtNjM2LVxuZHJpdmVycy9iYXNlL21lbW9yeS5jOjYzNzpzdGF0aWMgREVWSUNFX0FUVFJfV08oc29mdF9vZmZsaW5lX3BhZ2UpO1xuZHJpdmVycy9iYXNlL21lbW9yeS5jLTYzOC1zdGF0aWMgREVWSUNFX0FUVFJfV08oaGFyZF9vZmZsaW5lX3BhZ2UpO1xuLS1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz05MTE9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKm1lbW9yeV9yb290X2F0dHJzW10gPSB7XG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTkxNi0jaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6OTE3Olx0XHUwMDI2ZGV2X2F0dHJfc29mdF9vZmZsaW5lX3BhZ2UuYXR0cixcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy05MTgtXHRcdTAwMjZkZXZfYXR0cl9oYXJkX29mZmxpbmVfcGFnZS5hdHRyLFxuLS1cbmluY2x1ZGUvbGludXgvbW0uaD00OTk2PWV4dGVybiBhdG9taWNfbG9uZ190IG51bV9wb2lzb25lZF9wYWdlcyBfX3JlYWRfbW9zdGx5O1xuaW5jbHVkZS9saW51eC9tbS5oOjQ5OTc6ZXh0ZXJuIGludCBzb2Z0X29mZmxpbmVfcGFnZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKTtcbmluY2x1ZGUvbGludXgvbW0uaC00OTk4LSNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVcbi0tXG5tbS9tYWR2aXNlLmM9MTQ0Nz1zdGF0aWMgaW50IG1hZHZpc2VfaW5qZWN0X2Vycm9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNDc1LVx0XHRcdFx0IHBmbiwgc3RhcnQpO1xubW0vbWFkdmlzZS5jOjE0NzY6XHRcdFx0cmV0ID0gc29mdF9vZmZsaW5lX3BhZ2UocGZuLCBNRl9DT1VOVF9JTkNSRUFTRUQpO1xubW0vbWFkdmlzZS5jLTE0NzctXHRcdH0gZWxzZSB7XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yNjA4PXN0YXRpYyB2b2lkIG1lbW9yeV9mYWlsdXJlX3dvcmtfZnVuYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjIyLVx0XHRpZiAoZW50cnkuZmxhZ3MgXHUwMDI2IE1GX1NPRlRfT0ZGTElORSlcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjYyMzpcdFx0XHRzb2Z0X29mZmxpbmVfcGFnZShlbnRyeS5wZm4sIGVudHJ5LmZsYWdzKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjYyNC1cdFx0ZWxzZVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9Mjc4Mz1zdGF0aWMgaW50IHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI4ODYtLyoqXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI4ODc6ICogc29mdF9vZmZsaW5lX3BhZ2UgLSBTb2Z0IG9mZmxpbmUgYSBwYWdlLlxubW0vbWVtb3J5LWZhaWx1cmUuYy0yODg4LSAqIEBwZm46IHBmbiB0byBzb2Z0LW9mZmxpbmVcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI5MTAtICovXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI5MTE6aW50IHNvZnRfb2ZmbGluZV9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI5MTIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxOTEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIHdlbGwtdmVyc2VkIGluIHRoaXMgYXJlYToKCioqRGVjb25zdHJ1Y3RpbmcgYSBWdWxuZXJhYmlsaXR5IFBhdGg6IGBtYWR2aXNlX2luamVjdF9lcnJvcmAgYW5kIGBNQURWX1NPRlRfT0ZGTElORWAqKgoKUmlnaHQsIHNvIEkmIzM5O20gZm9sbG93aW5nIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgcGF0aCBoZXJlLiBJJiMzOTttIHNlZWluZyB0aGF0IGBtYWR2aXNlX2luamVjdF9lcnJvcmAgaXMgdGhlIGtleSwgYW5kIGl0IHNlZW1zIHRvIGJlIHRyaWdnZXJlZCBieSBgTUFEVl9TT0ZUX09GRkxJTkVgIHdpdGhpbiB0aGUgYG1hZHZpc2VgIHN5c3RlbSBjYWxsLiBUaGlzIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSXQmIzM5O3Mgbm90IHRoZSBtb3N0IGNvbW1vbiB2ZWN0b3IsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBNeSBuZXh0IHN0ZXAgaXMgY2xlYXIg4oCTIEkmIzM5O20gZ29pbmcgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSBgbWFkdmlzZS5jYCBzb3VyY2UgY29kZS4gVGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBtZWF0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBhbmQgdW5kZXJzdGFuZCB0aGUgZXhhY3QgbWVjaGFuaWNzIG9mIGhvdyBgTUFEVl9TT0ZUX09GRkxJTkVgIGxlYWRzIHRvIGEgY2FsbCB0byBgbWFkdmlzZV9pbmplY3RfZXJyb3JgLiBJIG5lZWQgdG8gc2VlIHRoZSBjb25kaXRpb25hbCBsb2dpYywgdGhlIGRhdGEgc3RydWN0dXJlcyBiZWluZyBtYW5pcHVsYXRlZCwgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIG90aGVyIGV4cGxvaXRhYmxlIGJlaGF2aW9ycy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01BRFZfU09GVF9PRkZMSU5FJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYz0xNDQ3PXN0YXRpYyBpbnQgbWFkdmlzZV9pbmplY3RfZXJyb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTE0NzItXG5tbS9tYWR2aXNlLmM6MTQ3MzpcdFx0aWYgKG1hZHZfYmVoYXZpb3ItXHUwMDNlYmVoYXZpb3IgPT0gTUFEVl9TT0ZUX09GRkxJTkUpIHtcbm1tL21hZHZpc2UuYy0xNDc0LVx0XHRcdHByX2luZm8oXCYjMzQ7U29mdCBvZmZsaW5pbmcgcGZuICUjbHggYXQgcHJvY2VzcyB2aXJ0dWFsIGFkZHJlc3MgJSNseFxcblwmIzM0Oyxcbi0tXG5tbS9tYWR2aXNlLmM9MTQ5Mj1zdGF0aWMgYm9vbCBpc19tZW1vcnlfZmFpbHVyZShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTQ5NS1cdGNhc2UgTUFEVl9IV1BPSVNPTjpcbm1tL21hZHZpc2UuYzoxNDk2Olx0Y2FzZSBNQURWX1NPRlRfT0ZGTElORTpcbm1tL21hZHZpc2UuYy0xNDk3LVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5tbS9tYWR2aXNlLmM9MTUxOD1tYWR2aXNlX2JlaGF2aW9yX3ZhbGlkKGludCBiZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTU1MC0jaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXG5tbS9tYWR2aXNlLmM6MTU1MTpcdGNhc2UgTUFEVl9TT0ZUX09GRkxJTkU6XG5tbS9tYWR2aXNlLmMtMTU1Mi1cdGNhc2UgTUFEVl9IV1BPSVNPTjpcbi0tXG5tbS9tYWR2aXNlLmM9MTg4Nz1zdGF0aWMgaW50IG1hZHZpc2VfZG9fYmVoYXZpb3IodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbixcbi0tXG5tbS9tYWR2aXNlLmMtMTk0NS0gKlx0XHR3ZXJlIGNvcnJ1cHRlZCBieSB1bnJlY292ZXJhYmxlIGhhcmR3YXJlIG1lbW9yeSBmYWlsdXJlLlxubW0vbWFkdmlzZS5jOjE5NDY6ICogIE1BRFZfU09GVF9PRkZMSU5FIC0gdHJ5IHRvIHNvZnQtb2ZmbGluZSB0aGUgZ2l2ZW4gcmFuZ2Ugb2YgbWVtb3J5LlxubW0vbWFkdmlzZS5jLTE5NDctICogIE1BRFZfTUVSR0VBQkxFIC0gdGhlIGFwcGxpY2F0aW9uIHJlY29tbWVuZHMgdGhhdCBLU00gdHJ5IHRvIG1lcmdlIHBhZ2VzIGluXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5NzIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIE1lbW9yeSBMZWFrIEZpeCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIHByZXR0eSBzcGVjaWZpYyBpc3N1ZTogdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYE1BRFZfU09GVF9PRkZMSU5FYCwgYHNvZnRfb2ZmbGluZV9wYWdlYCwgYW5kIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgLiBJdCBzZWVtcyBsaWtlIGEgY3J1Y2lhbCBgZm9saW9fcHV0YCBjYWxsIHdhcyBiZWluZyBtaXNzZWQgd2hlbiBgbmV3X29yZGVyYCB3YXNuJiMzOTt0IHplcm8uIFRoaXMgaXMgYSBjbGVhciBpbmRpY2F0b3Igb2YgYSBmdW5jdGlvbmFsIGJ1Zy4gSSYjMzk7bSByZWFkaW5nIHRoaXMgYXMgYSBkZWZpbml0ZSBtZW1vcnkgbGVhayBvciwgYXQgdGhlIHZlcnkgbGVhc3QsIGEgcmVmY291bnQgbGVhay4gRWl0aGVyIHdheSwgaXQmIzM5O3Mgc29tZXRoaW5nIHdlIG5lZWQgdG8gc3F1YXNoLgoKVGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmcgdG8gbWFrZSBzdXJlIHRoaXMgaXMgY29tcGxldGVseSByZXNvbHZlZC4KCk5vdywgbGV0IG1lIGp1c3QgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhpcyBmaXguIEkgc2VlIHRoYXQgYENPTkZJR19NRU1PUllfRkFJTFVSRWAgaXMgcmVxdWlyZWQsIGJ1dCBJJiMzOTttIGdvaW5nIHRvIGRvdWJsZS1jaGVjayBgbW0vS2NvbmZpZ2AgZm9yIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgb3IgY29udGV4dCBhcm91bmQgYE1FTU9SWV9GQUlMVVJFYC4gV2UgYWx3YXlzIG5lZWQgdG8gYmUgdGhvcm91Z2ggd2l0aCB0aGVzZSBraW5kcyBvZiBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNT1JZX0ZBSUxVUkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9Nzc0PWNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXG4tLVxubW0vS2NvbmZpZy03NzYtXG5tbS9LY29uZmlnOjc3Nzpjb25maWcgTUVNT1JZX0ZBSUxVUkVcbm1tL0tjb25maWctNzc4LVx0ZGVwZW5kcyBvbiBNTVVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQwMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb24sIGZyYW1lZCBhcyBhIGZpcnN0LXBlcnNvbiBhY2NvdW50OgoKKipBbmFseXppbmcgdGhlIERlcGVuZGVuY3kgQ2hhaW4gZm9yIE1FTU9SWV9GQUlMVVJFKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJvb3QgY2F1c2Ugb2YgdGhpcyBgTUVNT1JZX0ZBSUxVUkVgLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gdHJhY2UgYmFjayBpdHMgZGVwZW5kZW5jaWVzIOKAkyBJJiMzOTttIHRoaW5raW5nLCAmIzM0O1doZXJlIGRvZXMgdGhpcyBmYWlsdXJlIG9yaWdpbmF0ZT8mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2F1c2FsIGNoYWluLiBUaGlzIG1lYW5zIGRpZ2dpbmcgaW50byB0aGUgY29kZSwgY29uZmlndXJhdGlvbiBmaWxlcywgYW5kIHN5c3RlbSBsb2dzIHRvIGlkZW50aWZ5IHdoYXQgZmFjdG9ycyBtaWdodCBsZWFkIHRvIHRoaXMgc3RhdGUuIE15IGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIGlkZW50aWZ5aW5nIHRoZSBwb3RlbnRpYWwgYm90dGxlbmVja3MsIHJlc291cmNlIGNvbnRlbnRpb24gcG9pbnRzLCBhbmQgYW55IGtub3duIHZ1bG5lcmFiaWxpdGllcyBpbiB0aGUgc3lzdGVtIHRoYXQgY291bGQgdHJpZ2dlciBhIG1lbW9yeSBpc3N1ZS4gRXNzZW50aWFsbHksIEkmIzM5O20gZ29pbmcgdG8gZm9sbG93IHRoZSBicmVhZGNydW1icyB1bnRpbCBJIGZpbmQgdGhlIGNyaXRpY2FsIHBhdGggdGhhdCBsZWFkcyB0byBgTUVNT1JZX0ZBSUxVUkVgLiBUaGUgZ29hbCBpcyBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlICYjMzk7d2h5JiMzOTsgYmVmb3JlIEkgY2FuIGV2ZW4gYmVnaW4gdG8gdGFja2xlIHRoZSAmIzM5O2hvdy4mIzM5OyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBsaWtlIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9ycywgbGVha3MsIGV4Y2Vzc2l2ZSBwYWdpbmcsIG9yIGFueSBvdGhlciBhbm9tYWx5IHRoYXQgY291bGQgcG9pbnQgdG8gdGhlIHByb2JsZW0mIzM5O3Mgc291cmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NzcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc3NzpcdGNvbmZpZyBNRU1PUllfRkFJTFVSRVxuIDc3ODpcdFx0ZGVwZW5kcyBvbiBNTVVcbiA3Nzk6XHRcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxuIDc4MDpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgcmVjb3ZlcnkgZnJvbSBoYXJkd2FyZSBtZW1vcnkgZXJyb3JzXCYjMzQ7XG4gNzgxOlx0XHRzZWxlY3QgSU5URVJWQUxfVFJFRVxuIDc4MjpcdFx0aGVscFxuIDc4MzpcdFx0ICBFbmFibGVzIGNvZGUgdG8gcmVjb3ZlciBmcm9tIHNvbWUgbWVtb3J5IGZhaWx1cmVzIG9uIHN5c3RlbXNcbiA3ODQ6XHRcdCAgd2l0aCBNQ0EgcmVjb3ZlcnkuIFRoaXMgYWxsb3dzIGEgc3lzdGVtIHRvIGNvbnRpbnVlIHJ1bm5pbmdcbiA3ODU6XHRcdCAgZXZlbiB3aGVuIHNvbWUgb2YgaXRzIG1lbW9yeSBoYXMgdW5jb3JyZWN0ZWQgZXJyb3JzLiBUaGlzIHJlcXVpcmVzXG4gNzg2Olx0XHQgIHNwZWNpYWwgaGFyZHdhcmUgc3VwcG9ydCBhbmQgdHlwaWNhbGx5IEVDQyBtZW1vcnkuXG4gNzg3Olx0XG4gNzg4Olx0Y29uZmlnIEhXUE9JU09OX0lOSkVDVFxuIDc4OTpcdFx0dHJpc3RhdGUgXCYjMzQ7SFdQb2lzb24gcGFnZXMgaW5qZWN0b3JcJiMzNDtcbiA3OTA6XHRcdGRlcGVuZHMgb24gTUVNT1JZX0ZBSUxVUkUgXHUwMDI2XHUwMDI2IERFQlVHX0tFUk5FTCBcdTAwMjZcdTAwMjYgUFJPQ19GU1xuIDc5MTpcdFx0c2VsZWN0IFBST0NfUEFHRV9NT05JVE9SXG4gNzkyOlx0XG4gNzkzOlx0Y29uZmlnIE5PTU1VX0lOSVRJQUxfVFJJTV9FWENFU1NcbiA3OTQ6XHRcdGludCBcJiMzNDtUdXJuIG9uIG1tYXAoKSBleGNlc3Mgc3BhY2UgdHJpbW1pbmcgYmVmb3JlIGJvb3RpbmdcJiMzNDtcbiA3OTU6XHRcdGRlcGVuZHMgb24gIU1NVVxuIDc5NjpcdFx0ZGVmYXVsdCAxXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NjgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBGYWlsdXJlIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgTUVNT1JZX0ZBSUxVUkVgIHNpdHVhdGlvbi4gSXQmIzM5O3MgY2xlYXIgdGhhdCBpdCBoaW5nZXMgb24gYm90aCB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgVW5pdCwgb3IgYE1NVWAsIGFuZCB3aGV0aGVyIHRoZSB1bmRlcmx5aW5nIGFyY2hpdGVjdHVyZSBhY3R1YWxseSBzdXBwb3J0cyBtZW1vcnkgZmFpbHVyZSwgd2hpY2ggaXMgY29udHJvbGxlZCBieSBgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRWAuIE1ha2VzIHNlbnNlLCBgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRWAgaXMgdGhlIGFyY2hpdGVjdHVyZSYjMzk7cyBjYWxsLCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBzdGFydC4gQnV0IGJlZm9yZSBJIGdvIHRvbyBkZWVwLCBJIHNob3VsZCBwcm9iYWJseSBzY2FuIGZvciBhbnkgb3RoZXIgY3J1Y2lhbCBjb25maWdzIHRoYXQgcGxheSBhIHJvbGUgaGVyZS4KClRoZSBwYXRjaCBpdHNlbGYgc2VlbXMgdG8gYmUgdG91Y2hpbmcgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAuIFRoYXQgcmluZ3MgYSBiZWxsLi4uIHRoYXQmIzM5O3MgdGhlIFRIUCBwYWdlIGhhbmRsZXIsIGlzbiYjMzk7dCBpdD8gU28sIHRvIGFjdHVhbGx5IHRyaWdnZXIgdGhpcyBjb2RlLCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCB3b3VsZCBhbG1vc3QgY2VydGFpbmx5IGhhdmUgdG8gYmUgZW5hYmxlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dC4KCkxldCYjMzk7cyBkaWcgaW50byBgbW0vbWVtb3J5LWZhaWx1cmUuY2AgYW5kIHNwZWNpZmljYWxseSBsb29rIGF0IGB0cnlfdG9fc3BsaXRfdGhwX3BhZ2VgLiBUaGF0JiMzOTtsbCBjb25maXJtIGlmIHRoaXMgVEhQIGludGVyYWN0aW9uIGlzIGNlbnRyYWwgdG8gdGhlIHByb2JsZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV90b19zcGxpdF90aHBfcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbW9yeS1mYWlsdXJlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LWZhaWx1cmUuYz0xNjI5PXN0YXRpYyBpbnQgaWRlbnRpZnlfcGFnZV9zdGF0ZSh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2UgKnAsXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNjU2LSAqL1xubW0vbWVtb3J5LWZhaWx1cmUuYzoxNjU3OnN0YXRpYyBpbnQgdHJ5X3RvX3NwbGl0X3RocF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNjU4LVx0XHRib29sIHJlbGVhc2UpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMzMwPWludCBtZW1vcnlfZmFpbHVyZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQ1OS1cdFx0Zm9saW9fc2V0X2hhc19od3BvaXNvbmVkKGZvbGlvKTtcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjQ2MDpcdFx0ZXJyID0gdHJ5X3RvX3NwbGl0X3RocF9wYWdlKHAsIG5ld19vcmRlciwgLyogcmVsZWFzZT0gKi8gZmFsc2UpO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0yNDYxLVx0XHQvKlxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9Mjc4Mz1zdGF0aWMgaW50IHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI4MDgtXHRcdCAqIERyb3AgdGhlIHJlZmVyZW5jZSBvYnRhaW5lZCB1cG9uIGVudHJ5O1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyODA5Olx0XHQgKiB0cnlfdG9fc3BsaXRfdGhwX3BhZ2UoLi4uLCByZWxlYXNlPXRydWUpIGhhbmRsZXMgcmVmY291bnRpbmcgaXRzZWxmXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI4MTAtXHRcdCAqIHdoZW4gdGhlIHNwbGl0IGZhaWxzLlxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjgxNy1cdFx0fVxubW0vbWVtb3J5LWZhaWx1cmUuYzoyODE4Olx0XHRpZiAodHJ5X3RvX3NwbGl0X3RocF9wYWdlKHBhZ2UsIC8qIG5ld19vcmRlcj0gKi8gMCxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjgxOS1cdFx0XHRcdFx0IC8qIHJlbGVhc2U9ICovIHRydWUpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3OTQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyBDb25kaXRpb25hbCBDb21waWxhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlLiBNeSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBpcyB0aGF0IGB0cnlfdG9fc3BsaXRfdGhwX3BhZ2VgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgd2hldGhlciBpdCYjMzk7cyBjb21waWxlZCBjb25kaXRpb25hbGx5IG9yIG5vdC4gVGhpcyBpcyBhIGNydWNpYWwgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIGl0cyBvdmVyYWxsIGJlaGF2aW9yIGFuZCBpdHMgaW1wYWN0IG9uIHBlcmZvcm1hbmNlIGFuZCBwb3J0YWJpbGl0eS4gQSBzaW1wbGUgY2hlY2sgd2lsbCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiB0aGF0IEkgbmVlZCB0byBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtb3J5LWZhaWx1cmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2NTcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTY1NzpcdHN0YXRpYyBpbnQgdHJ5X3RvX3NwbGl0X3RocF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxuMTY1ODpcdFx0XHRib29sIHJlbGVhc2UpXG4xNjU5Olx0e1xuMTY2MDpcdFx0aW50IHJldDtcbjE2NjE6XHRcbjE2NjI6XHRcdGxvY2tfcGFnZShwYWdlKTtcbjE2NjM6XHRcdHJldCA9IHNwbGl0X2h1Z2VfcGFnZV90b19vcmRlcihwYWdlLCBuZXdfb3JkZXIpO1xuMTY2NDpcdFx0dW5sb2NrX3BhZ2UocGFnZSk7XG4xNjY1Olx0XG4xNjY2Olx0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZWxlYXNlKVxuMTY2NzpcdFx0XHRwdXRfcGFnZShwYWdlKTtcbjE2Njg6XHRcbjE2Njk6XHRcdHJldHVybiByZXQ7XG4xNjcwOlx0fVxuMTY3MTpcdFxuMTY3MjpcdHN0YXRpYyB2b2lkIHVubWFwX2FuZF9raWxsKHN0cnVjdCBsaXN0X2hlYWQgKnRvX2tpbGwsIHVuc2lnbmVkIGxvbmcgcGZuLFxuMTY3MzpcdFx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBpbmRleCwgaW50IGZsYWdzKVxuMTY3NDpcdHtcbjE2NzU6XHRcdHN0cnVjdCB0b19raWxsICp0aztcbjE2NzY6XHRcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IDA7XG4xNjc3Olx0XG4xNjc4Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHRrLCB0b19raWxsLCBuZClcbjE2Nzk6XHRcdFx0aWYgKHRrLVx1MDAzZXNpemVfc2hpZnQpXG4xNjgwOlx0XHRcdFx0c2l6ZSA9IG1heChzaXplLCAxVUwgXHUwMDNjXHUwMDNjIHRrLVx1MDAzZXNpemVfc2hpZnQpO1xuMTY4MTpcdFxuMTY4MjpcdFx0aWYgKHNpemUpIHtcbjE2ODM6XHRcdFx0LypcbjE2ODQ6XHRcdFx0ICogVW5tYXAgdGhlIGxhcmdlc3QgbWFwcGluZyB0byBhdm9pZCBicmVha2luZyB1cCBkZXZpY2UtZGF4XG4xNjg1Olx0XHRcdCAqIG1hcHBpbmdzIHdoaWNoIGFyZSBjb25zdGFudCBzaXplLiBUaGUgYWN0dWFsIHNpemUgb2YgdGhlXG4xNjg2Olx0XHRcdCAqIG1hcHBpbmcgYmVpbmcgdG9ybiBkb3duIGlzIGNvbW11bmljYXRlZCBpbiBzaWdpbmZvLCBzZWVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM3MgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGBzcGxpdF9odWdlX3BhZ2VfdG9fb3JkZXJgKioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiBUaGUgY29kZSBpcyB1c2luZyBgc3BsaXRfaHVnZV9wYWdlX3RvX29yZGVyYC4gVGhpcyBpcyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHRoZSBjb250ZXh0IGhlcmUuIEkmIzM5O20gYXNzdW1pbmcgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCwgbGlrZWx5IHJlbGF0ZWQgdG8gTlVNQSBhcmNoaXRlY3R1cmVzIG9yIG9wdGltaXphdGlvbnMgZm9yIGxhcmdlIG1lbW9yeSBwYWdlcy4gVGhlIGZ1bmN0aW9uIG5hbWUgaXRzZWxmIHN1Z2dlc3RzIGEgcHJvY2VzcyBvZiBicmVha2luZyBkb3duIGEgbGFyZ2UgcGFnZSBpbnRvIHNtYWxsZXIsIHBvdGVudGlhbGx5IG1vcmUgbWFuYWdlYWJsZSB1bml0cywgYW5kIGFycmFuZ2luZyB0aGVtIGluIGEgcGFydGljdWxhciBvcmRlci4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyByZWxhdGVzIHRvIHRoZSBvdmVyYWxsIG1lbW9yeSBhbGxvY2F0aW9uIHN0cmF0ZWd5LiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYHNwbGl0X2h1Z2VfcGFnZV90b19vcmRlcmAgbm93LiBXaGF0IGFyZSB0aGUgaW5wdXRzPyBXaGF0JiMzOTtzIHRoZSBpbnRlbmRlZCBvdXRwdXQ/IElzIHRoaXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIGEgd29ya2Fyb3VuZCBmb3IgaGFyZHdhcmUgbGltaXRhdGlvbnMsIG9yIHBhcnQgb2YgYSBtb3JlIGNvbXBsZXggbWVtb3J5IG1hbmFnZW1lbnQgYWxnb3JpdGhtPyBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IHRoaXMgbWlnaHQgYmUgZGVhbGluZyB3aXRoIGZyYWdtZW50YXRpb24sIG9yIHBvdGVudGlhbGx5IHJlZHVjaW5nIHRoZSBvdmVyaGVhZCBvZiBhbGxvY2F0aW5nIGh1Z2UgcGFnZXMgdW5kZXIgc3BlY2lmaWMgY2lyY3Vtc3RhbmNlcy4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3BsaXRfaHVnZV9wYWdlX3RvX29yZGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZV9tbS5oPTQxMj1zdGF0aWMgaW5saW5lIGludCBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00MTYtfVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NDE3OnN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZV90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG5ld19vcmRlcilcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQxOC17XG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NjMwPXNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTYzNS19XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo2MzY6c3RhdGljIGlubGluZSBpbnQgc3BsaXRfaHVnZV9wYWdlX3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNjM3LXtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTE2NTc9c3RhdGljIGludCB0cnlfdG9fc3BsaXRfdGhwX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNjYyLVx0bG9ja19wYWdlKHBhZ2UpO1xubW0vbWVtb3J5LWZhaWx1cmUuYzoxNjYzOlx0cmV0ID0gc3BsaXRfaHVnZV9wYWdlX3RvX29yZGVyKHBhZ2UsIG5ld19vcmRlcik7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTE2NjQtXHR1bmxvY2tfcGFnZShwYWdlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTAyMAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGEgSHVnZSBQYWdlIERlZmluaXRpb24qKgoKQWxyaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXJ0aWN1bGFyIG1hY3JvIG9yIGRlZmluaXRpb24uIE15IGZpcnN0IG1vdmUgaXMgdG8gbG9jYXRlIGl0cyBkZWZpbml0aXZlIGRlY2xhcmF0aW9uLiBUaGUgaGludCBwb2ludHMgbWUgZGlyZWN0bHkgdG8gYGluY2x1ZGUvbGludXgvaHVnZV9tbS5oYC4gVGhhdCBtYWtlcyBzZW5zZTsgaHVnZSBwYWdlIGRlZmluaXRpb25zIGFyZSB0eXBpY2FsbHkgdHVja2VkIGF3YXkgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGhlYWRlci4gTm93LCBJJiMzOTttIG5vdCBqdXN0IGdvaW5nIHRvICphc3N1bWUqIEkga25vdyB3aGF0IGl0IGRvZXMgYmFzZWQgb24gdGhlIGZpbGUgbmFtZS4gVGhlIG5leHQgY3JpdGljYWwgc3RlcCBpcyB0byBxdWlja2x5IHNjYW4gZm9yIGFueSBwcmVwcm9jZXNzb3IgY29uZGl0aW9uYWxzLCBwYXJ0aWN1bGFybHkgdGhlIGAjaWZkZWZgIGRpcmVjdGl2ZXMgdGhhdCBtaWdodCBjb250cm9sIGl0cyBhdmFpbGFiaWxpdHkgb3IgbWVhbmluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHRzIGluIHdoaWNoIHRoaXMgdGhpbmcgaXMgYWN0dWFsbHkgZGVmaW5lZCBhbmQgKmhvdyogaXQmIzM5O3MgZGVmaW5lZCwgYmVmb3JlIEkgY2FuIG1ha2UgYW55IGFzc3VtcHRpb25zIGFib3V0IGl0cyB1c2FnZSBvciBwdXJwb3NlLiBBbnkgYCNpZmRlZmAgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50IGluIHRlbGxpbmcgbWUgd2hlbiBhbmQgd2hlcmUgdGhlIGRlZmluaXRpb24gaXMgdmFsaWQuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIGl0cyBiZWhhdmlvciBjaGFuZ2VzIHVuZGVyIGRpZmZlcmVudCBrZXJuZWwgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdlX21tLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQwMDpcdH07XG4gNDAxOlx0XG4gNDAyOlx0aW50IF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXG4gNDAzOlx0XHRcdHVuc2lnbmVkIGludCBuZXdfb3JkZXIpO1xuIDQwNDpcdGludCBmb2xpb19zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKTtcbiA0MDU6XHR1bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiA0MDY6XHRpbnQgc3BsaXRfZm9saW9fdG9fbGlzdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KTtcbiA0MDc6XHRpbnQgZm9saW9fY2hlY2tfc3BsaXR0YWJsZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxuIDQwODpcdFx0XHRcdCAgIGVudW0gc3BsaXRfdHlwZSBzcGxpdF90eXBlKTtcbiA0MDk6XHRpbnQgZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlciwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gNDEwOlx0XHRcdHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpO1xuIDQxMTpcdFxuIDQxMjpcdHN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxuIDQxMzpcdFx0XHR1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxuIDQxNDpcdHtcbiA0MTU6XHRcdHJldHVybiBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHBhZ2UsIGxpc3QsIG5ld19vcmRlcik7XG4gNDE2Olx0fVxuIDQxNzpcdHN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZV90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG5ld19vcmRlcilcbiA0MTg6XHR7XG4gNDE5Olx0XHRyZXR1cm4gc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIocGFnZSwgTlVMTCwgbmV3X29yZGVyKTtcbiA0MjA6XHR9XG4gNDIxOlx0XG4gNDIyOlx0c3RhdGljIGlubGluZSBpbnQgc3BsaXRfaHVnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuIDQyMzpcdHtcbiA0MjQ6XHRcdHJldHVybiBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihwYWdlLCBOVUxMLCAwKTtcbiA0MjU6XHR9XG4gNDI2Olx0XG4gNDI3Olx0aW50IGZvbGlvX21lbWNnX2FsbG9jX2RlZmVycmVkKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIDQyODpcdFxuIDQyOTpcdHZvaWQgZGVmZXJyZWRfc3BsaXRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBwYXJ0aWFsbHlfbWFwcGVkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg0MwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIGZpZ3VyaW5nIG91dCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbiBlbmFibGVzIHRoYXQgc3BlY2lmaWMgbGluZToKCioqUGlucG9pbnRpbmcgdGhlIENvbmZpZ3VyYXRpb24gU291cmNlKioKCkFscmlnaHQsIHRoZSBvYmplY3RpdmUgaGVyZSBpcyB0byBkZXRlcm1pbmUgdGhlIEtjb25maWcgb3B0aW9uIHRoYXQgdWx0aW1hdGVseSByZXN1bHRzIGluIHRoZSBpbmNsdXNpb24gb2YgbGluZSA0MDAgd2l0aGluIGBpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaGAuIEkmIzM5O3ZlIGdvdCB0byB0cmFjZSB0aGlzIGJhY2sgdGhyb3VnaCB0aGUga2VybmVsJiMzOTtzIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdG8gYXBwcm9hY2ggdGhpcyBpbiBhIG1ldGhvZGljYWwgd2F5LiBJJiMzOTttIGdvaW5nIHRvIGxldmVyYWdlIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGtlcm5lbCYjMzk7cyBidWlsZCBzeXN0ZW0gYW5kIGNvbmZpZ3VyYXRpb24gbWVjaGFuaWNzIHRvIGdldCB0byB0aGUgcm9vdCBjYXVzZSwgYW5kIHRoZW4gSSYjMzk7bGwgY29uc2lkZXIgaG93IGJlc3QgdG8gcHJlc2VudCB0aGF0IGluZm9ybWF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD0xMjc9ZW51bSBtdGhwX3N0YXRfaXRlbSB7XG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMTUyLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6MTUzOiNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1NZU0ZTKVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMTU0LXN0cnVjdCBtdGhwX3N0YXQge1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTE3OD1zdGF0aWMgaW5saW5lIHZvaWQgY291bnRfbXRocF9zdGF0KGludCBvcmRlciwgZW51bSBtdGhwX3N0YXRfaXRlbSBpdGVtKVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTE4Mi1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjE4MzojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0xODQtXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NTc3PXZvaWQgbWFwX2Fub25fZm9saW9fcG1kX25vcGYoc3RydWN0IGZvbGlvICpmb2xpbywgcG1kX3QgKnBtZCxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC01NzktXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo1ODA6I2Vsc2UgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC01ODEtXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9Nzg5PXN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfaHVnZShwbWRfdCBwbWQpXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNzkyLX1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjc5MzojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC03OTQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDUyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIEh1Z2UgUGFnZXMgYW5kIFNvZnQgT2ZmbGluZSBQYWdlcyoqCgpBbHJpZ2h0LCByaWdodCBvZmYgdGhlIGJhdCwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZXNzZW50aWFsIGZvciB3aGF0IEkmIzM5O20gd29ya2luZyBvbi4gTm93LCBsZXQgbWUgY2lyY2xlIGJhY2sgYW5kIGRvdWJsZS1jaGVjayBteSB1bmRlcnN0YW5kaW5nIGFuZCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGF0IGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgIHZhcmlhYmxlLiBUaGVyZSYjMzk7cyBwcm9iYWJseSBhbiBpbnRlcmFjdGlvbiB0aGVyZSB0aGF0IEkgbmVlZCB0byByZS1ldmFsdWF0ZSBiYXNlZCBvbiB0aGUgaHVnZSBwYWdlIGNvbmZpZ3VyYXRpb24uIExldCYjMzk7cyBtYWtlIHN1cmUgSSYjMzk7bSBjb25uZWN0aW5nIGFsbCB0aGUgZG90cyBjb3JyZWN0bHkgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbi4gSXQmIzM5O3MgdGltZSBmb3IgYSBtb3JlIGdyYW51bGFyIGluc3BlY3Rpb24gb2YgdGhhdCBzcGVjaWZpYyBhc3BlY3QsIGdpdmVuIHRoZSBicm9hZGVyIGNvbnRleHQgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbW9yeS1mYWlsdXJlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzgzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI3ODM6XHRzdGF0aWMgaW50IHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbjI3ODQ6XHR7XG4yNzg1Olx0XHRsb25nIHJldCA9IDA7XG4yNzg2Olx0XHR1bnNpZ25lZCBsb25nIHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpO1xuMjc4NzpcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG4yNzg4Olx0XHRjaGFyIGNvbnN0ICptc2dfcGFnZVtdID0ge1wmIzM0O3BhZ2VcJiMzNDssIFwmIzM0O2h1Z2VwYWdlXCYjMzQ7fTtcbjI3ODk6XHRcdGJvb2wgaHVnZSA9IGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbyk7XG4yNzkwOlx0XHRib29sIGlzb2xhdGVkO1xuMjc5MTpcdFx0TElTVF9IRUFEKHBhZ2VsaXN0KTtcbjI3OTI6XHRcdHN0cnVjdCBtaWdyYXRpb25fdGFyZ2V0X2NvbnRyb2wgbXRjID0ge1xuMjc5MzpcdFx0XHQubmlkID0gTlVNQV9OT19OT0RFLFxuMjc5NDpcdFx0XHQuZ2ZwX21hc2sgPSBHRlBfVVNFUiB8IF9fR0ZQX01PVkFCTEUgfCBfX0dGUF9SRVRSWV9NQVlGQUlMLFxuMjc5NTpcdFx0XHQucmVhc29uID0gTVJfTUVNT1JZX0ZBSUxVUkUsXG4yNzk2Olx0XHR9O1xuMjc5NzpcdFxuMjc5ODpcdFx0aWYgKCFodWdlIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkge1xuMjc5OTpcdFx0XHRjb25zdCBpbnQgbmV3X29yZGVyID0gbWluX29yZGVyX2Zvcl9zcGxpdChmb2xpbyk7XG4yODAwOlx0XG4yODAxOlx0XHRcdC8qXG4yODAyOlx0XHRcdCAqIElmIG5ld19vcmRlciAodGFyZ2V0IHNwbGl0IG9yZGVyKSBpcyBub3QgMCwgZG8gbm90IHNwbGl0IHRoZVxuMjgwMzpcdFx0XHQgKiBmb2xpbyBhdCBhbGwgdG8gcmV0YWluIHRoZSBzdGlsbCBhY2Nlc3NpYmxlIGxhcmdlIGZvbGlvLlxuMjgwNDpcdFx0XHQgKiBOT1RFOiBpZiBtaW5pbWl6aW5nIHRoZSBudW1iZXIgb2Ygc29mdCBvZmZsaW5lIHBhZ2VzIGlzXG4yODA1Olx0XHRcdCAqIHByZWZlcnJlZCwgc3BsaXQgaXQgdG8gbm9uLXplcm8gbmV3X29yZGVyIGxpa2UgaXQgaXMgZG9uZSBpblxuMjgwNjpcdFx0XHQgKiBtZW1vcnlfZmFpbHVyZSgpLlxuMjgwNzpcdFx0XHQgKlxuMjgwODpcdFx0XHQgKiBEcm9wIHRoZSByZWZlcmVuY2Ugb2J0YWluZWQgdXBvbiBlbnRyeTtcbjI4MDk6XHRcdFx0ICogdHJ5X3RvX3NwbGl0X3RocF9wYWdlKC4uLiwgcmVsZWFzZT10cnVlKSBoYW5kbGVzIHJlZmNvdW50aW5nIGl0c2VsZlxuMjgxMDpcdFx0XHQgKiB3aGVuIHRoZSBzcGxpdCBmYWlscy5cbjI4MTE6XHRcdFx0ICovXG4yODEyOlx0XHRcdGlmIChuZXdfb3JkZXIpIHtcbjI4MTM6XHRcdFx0XHRwcl9pbmZvKFwmIzM0OyUjbHg6IG9yZGVyLSVkIGZvbGlvIGNhbm5vdCBzb2Z0IG9mZmxpbmVcXG5cJiMzNDssXG4yODE0Olx0XHRcdFx0XHRwZm4sIG5ld19vcmRlcik7XG4yODE1Olx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbjI4MTY6XHRcdFx0XHRyZXR1cm4gLUVCVVNZO1xuMjgxNzpcdFx0XHR9XG4yODE4Olx0XHRcdGlmICh0cnlfdG9fc3BsaXRfdGhwX3BhZ2UocGFnZSwgLyogbmV3X29yZGVyPSAqLyAwLFxuMjgxOTpcdFx0XHRcdFx0XHQgLyogcmVsZWFzZT0gKi8gdHJ1ZSkpIHtcbjI4MjA6XHRcdFx0XHRwcl9pbmZvKFwmIzM0OyUjbHg6IHRocCBzcGxpdCBmYWlsZWRcXG5cJiMzNDssIHBmbik7XG4yODIxOlx0XHRcdFx0cmV0dXJuIC1FQlVTWTtcbjI4MjI6XHRcdFx0fVxuMjgyMzpcdFx0XHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG4yODI0Olx0XHR9XG4yODI1Olx0XG4yODI2Olx0XHRmb2xpb19sb2NrKGZvbGlvKTtcbjI4Mjc6XHRcdGlmICghaHVnZSlcbjI4Mjg6XHRcdFx0Zm9saW9fd2FpdF93cml0ZWJhY2soZm9saW8pO1xuMjgyOTpcdFx0aWYgKFBhZ2VIV1BvaXNvbihwYWdlKSkge1xuMjgzMDpcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuMjgzMTpcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuMjgzMjpcdFx0XHRwcl9pbmZvKFwmIzM0OyUjbHg6IHBhZ2UgYWxyZWFkeSBwb2lzb25lZFxcblwmIzM0OywgcGZuKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0NzYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGb2xpbyBhbmQgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gdGhlIGNvZGUgaGl0cyB0aGlzIHNwZWNpZmljIHBhdGg6IGAhaHVnZSAmYW1wOyZhbXA7IGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pYC4gUmlnaHQsIHRoYXQgY2xlYXJseSBpbmRpY2F0ZXMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGxhcmdlIGZvbGlvLCBzcGVjaWZpY2FsbHkgYSBUcmFuc3BhcmVudCBIdWdlIFBhZ2UgKFRIUCksIGJ1dCAqbm90KiBhIGh1Z2V0bGIgcGFnZS4gVGhhdCYjMzk7cyB0aGUga2V5IGRpc3RpbmN0aW9uLiBHaXZlbiB0aGlzIHNjZW5hcmlvLCB0aGUgc3lzdGVtICoqYWJzb2x1dGVseSoqIG5lZWRzIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGVuYWJsZWQuIE5vIHN1cnByaXNlcyB0aGVyZS4gQW5kLCBjb25zaWRlcmluZyB0aGUgY29udGV4dCwgYENPTkZJR19NRU1PUllfRkFJTFVSRWAgaXMgYWxzbyBnb2luZyB0byBiZSBhIHJlcXVpcmVtZW50IGZvciBoYW5kbGluZyBwb3RlbnRpYWwgbWVtb3J5IGZhaWx1cmVzIHdpdGhpbiB0aGUgVEhQIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBkZXBlbmRlbnQgY29uZmlndXJhdGlvbnMuIEkmIzM5O20gdGhpbmtpbmcsIGBDT05GSUdfTUlHUkFUSU9OYCBpcyBhbG1vc3QgY2VydGFpbmx5IG5lZWRlZC4gVGhlIHByZXNlbmNlIG9mIGBzdHJ1Y3QgbWlncmF0aW9uX3RhcmdldF9jb250cm9sIG10Y2Agc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBwYWdlIG1pZ3JhdGlvbi4gQmV0dGVyIGhlYWQgb3ZlciB0byBgbW0vbWVtb3J5LWZhaWx1cmUuY2AgdG8gY29uZmlybSBteSBzdXNwaWNpb24gYW5kIHNlZSBob3cgYENPTkZJR19NSUdSQVRJT05gIGlzIHRpZWQgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX01JR1JBVElPTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbW9yeS1mYWlsdXJlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg3MAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLgoKKipJbnZlc3RpZ2F0aW5nIGEgTWlzc2luZyBNaWdyYXRpb24gQ29uZmlndXJhdGlvbioqCgpIbW0sIHNvbWV0aGluZyBzZWVtcyBvZmYuIEkgd2FzIGp1c3QgbG9va2luZyBhdCBgbW0vbWVtb3J5LWZhaWx1cmUuY2AsIGFuZCBpdCYjMzk7cyBub3QgZ3VhcmRlZCBieSBhbnkgYENPTkZJR19NSUdSQVRJT05gIGlmZGVmcz8gVGhhdCYjMzk7cyBhIGJpdCBzdXJwcmlzaW5nLiBJIHRob3VnaHQgdGhvc2UgZmVhdHVyZXMgd2VyZSBvZnRlbiB0aWVkIHRvZ2V0aGVyLiBMZXQgbWUganVzdCBkb3VibGUgY2hlY2sgdGhlIGBtbS9LY29uZmlnYCBmaWxlIGFnYWluLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIHNvbWV0aGluZyByZWxhdGVkIHRvIGBNRU1PUllfRkFJTFVSRWAgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgbWlncmF0aW9uIG9wdGlvbnMuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgc3VidGxlIGNvbmRpdGlvbmFsIGRlcGVuZGVuY3kgSSBvdmVybG9va2VkLCBvciBwZXJoYXBzIGl0JiMzOTtzIGhhbmRsZWQgZGlmZmVyZW50bHkgdGhhbiBJIGluaXRpYWxseSBhc3N1bWVkLiBCZXR0ZXIgdG8gYmUgY2VydGFpbiBhbmQgbm90IGp1bXAgdG8gYW55IGluY29ycmVjdCBhc3N1bXB0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTU9SWV9GQUlMVVJFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTc3ND1jb25maWcgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxuLS1cbm1tL0tjb25maWctNzc2LVxubW0vS2NvbmZpZzo3Nzc6Y29uZmlnIE1FTU9SWV9GQUlMVVJFXG5tbS9LY29uZmlnLTc3OC1cdGRlcGVuZHMgb24gTU1VXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTY1CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgTWlncmF0aW9uIENvbmZpZ3VyYXRpb24gaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYE1JR1JBVElPTmAgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgYnVpbGQgc3lzdGVtLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSB0eXBpY2FsIHBsYWNlIHdoZXJlIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgYXJlIGRlZmluZWQsIGFuZCBgTUlHUkFUSU9OYCBzb3VuZHMgbGlrZSBpdCYjMzk7ZCBmYWxsIHNxdWFyZWx5IHdpdGhpbiB0aGF0IGRvbWFpbi4gSXQmIzM5O3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgY29udHJvbHMgdGhpcyBmZWF0dXJlIOKAkyBpcyBpdCBhIGJvb2xlYW4gb3B0aW9uLCBhbiBpbnRlZ2VyLCBwZXJoYXBzPyBBcmUgdGhlcmUgYW55IGRlcGVuZGVuY2llcz8gV2hhdCBvdGhlciBvcHRpb25zIGFyZSByZWxhdGVkPyBJJiMzOTtsbCBuZWVkIHRvIGNhcmVmdWxseSBleGFtaW5lIHRoYXQgZmlsZS4gSWYgaXQmIzM5O3Mgbm90IHRoZXJlIEkmIzM5O2xsIGhhdmUgdG8gYnJvYWRlbiBteSBzZWFyY2ggdG8gb3RoZXIgcmVsZXZhbnQgYEtjb25maWdgIGZpbGVzLCBidXQgZm9yIG5vdywgYG1tL0tjb25maWdgIGlzIHRoZSBiZXN0IGJldC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNSUdSQVRJT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9Njg1PWNvbmZpZyBOVU1BX01JR1JBVElPTlxuLS1cbm1tL0tjb25maWctNjk1LVxubW0vS2NvbmZpZzo2OTY6Y29uZmlnIE1JR1JBVElPTlxubW0vS2NvbmZpZy02OTctXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDcwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgYG1tL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBNSUdSQVRJT05gIG9wdGlvbnMuCgoqKkRpdmluZyBpbnRvIGBtbS9LY29uZmlnYCBhbmQgdGhlIGBNSUdSQVRJT05gIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG1tL0tjb25maWdgLCBzcGVjaWZpY2FsbHkgemVyb2luZyBpbiBvbiBhbnl0aGluZyByZWxhdGVkIHRvIG1lbW9yeSBtaWdyYXRpb24uIFRoaXMgaXMgYSBjcml0aWNhbCBhcmVhLCBlc3BlY2lhbGx5IGZvciBzeXN0ZW1zIHRoYXQgbmVlZCB0byBkeW5hbWljYWxseSBtYW5hZ2UgbWVtb3J5LCBOVU1BIHNldHVwcywgb3IgaGFuZGxlIG9ubGluZSBtZW1vcnkgcmVzaXppbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBhdmFpbGFibGUgYW5kIGhvdyB0aGV5IGluZmx1ZW5jZSB0aGUga2VybmVsJiMzOTtzIGJlaGF2aW9yLiBUaGUgYE1JR1JBVElPTmAgb3B0aW9ucyBhcmUgY2xlYXJseSB0aGUgcGxhY2UgdG8gc3RhcnQuCgpJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIHJlbGF0ZWQgdG8gdGhlIGNvcmUgbWlncmF0aW9uIGZ1bmN0aW9uYWxpdGllczogcGFnZSBtaWdyYXRpb24sIG5vZGUgbWlncmF0aW9uLCBvbmxpbmUgbWVtb3J5IGFkZC9yZW1vdmUuIEkmIzM5O20gaG9waW5nIHRvIHNlZSBjbGVhciBkZXBlbmRlbmNpZXMgYmV0d2VlbiB0aGVzZSBvcHRpb25zLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSB1bmRlcmx5aW5nIGFyY2hpdGVjdHVyZSwgTlVNQSBzdXBwb3J0LCBhbmQgaG90cGx1ZyBjYXBhYmlsaXRpZXMuIEkmIzM5O20gYWxzbyBsb29raW5nIGZvciBhbnkgY29uZGl0aW9uYWwgY29uZmlndXJhdGlvbnMsIGZlYXR1cmVzIHRoYXQgYXJlIG9ubHkgZW5hYmxlZCB3aGVuIG90aGVycyBhcmUgYWxzby4KCkkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55ICYjMzQ7ZXhwZXJ0JiMzNDsgb3B0aW9ucyBvciB0aG9zZSBtYXJrZWQgYXMgJiMzNDtFWFBFUklNRU5UQUwmIzM0OyBvciAmIzM0O0RFQlVHJiMzNDsgYmVjYXVzZSB0aGVzZSB0ZW5kIHRvIGdpdmUgY2x1ZXMgYWJvdXQgdGhlIGludGVybmFsIHdvcmtpbmdzIGFuZCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgdHJhZGUtb2Zmcy4gSXQmIzM5O3MgYWxzbyBwb3NzaWJsZSB0aGF0IHRoZXJlIGFyZSBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSBzcGVjaWZpYyB0byBjZXJ0YWluIGhhcmR3YXJlIHBsYXRmb3JtcyB0aGF0IGNvdWxkIGJlIG9mIGludGVyZXN0LgoKTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgYXJlIGhpZGRlbiBpbiB0aGlzIGZpbGUuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGF2YWlsYWJsZSBjb250cm9scyB0aGF0IEkgaGF2ZSwgYXMgd2VsbCBhcyB0aGUgZGVzaWduIGNob2ljZXMgYmVoaW5kIHRoZW0uIFRoaXMgd2lsbCBiZXR0ZXIgaW5mb3JtIGhvdyBJIGNvbmZpZ3VyZSB0aGUga2VybmVsIGZvciBhIG5ldyBzeXN0ZW0gdGhhdCBJIGhhdmUgY29taW5nIG9ubGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjk2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2OTY6XHRjb25maWcgTUlHUkFUSU9OXG4gNjk3Olx0XHRib29sXG4gNjk4Olx0XHRkZXBlbmRzIG9uIE1NVVxuIDY5OTpcdFxuIDcwMDpcdGNvbmZpZyBERVZJQ0VfTUlHUkFUSU9OXG4gNzAxOlx0XHRkZWZfYm9vbCBNSUdSQVRJT04gXHUwMDI2XHUwMDI2IFpPTkVfREVWSUNFXG4gNzAyOlx0XG4gNzAzOlx0Y29uZmlnIEFSQ0hfRU5BQkxFX0hVR0VQQUdFX01JR1JBVElPTlxuIDcwNDpcdFx0Ym9vbFxuIDcwNTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk2NQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBNSUdSQVRJT05gIFZhcmlhYmxlKioKCk9rYXksIHNvIGBNSUdSQVRJT05gIGlzIGEgYm9vbGVhbiwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgZWl0aGVyIHRydWUgb3IgZmFsc2UsIGFuZCBpdCYjMzk7cyBiZWluZyBzZXQgYnkgb3RoZXIgY29uZmlndXJhdGlvbiBzZXR0aW5ncy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7d2hvJiMzOTtzIGZsaXBwaW5nIHRoaXMgc3dpdGNoPyYjMzQ7IEl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCB3aGVyZSB0aGlzIHZhcmlhYmxlIGlzIGJlaW5nIGNvbnRyb2xsZWQuIEtub3dpbmcgdGhlIGNhbGxlcnMgd2lsbCBoZWxwIG1lIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIGltcGxpY2F0aW9ucyBvZiBgTUlHUkFUSU9OYCBiZWluZyBpbiBhIHBhcnRpY3VsYXIgc3RhdGUuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGFuZCBpZGVudGlmeSBhbGwgdGhlIG90aGVyIGNvbmZpZ3MgdGhhdCBhcmUgdG91Y2hpbmcgdGhpcyBib29sZWFuIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGZ1bGx5LiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgYWxsIG9mIHRoZSBwb3NzaWJsZSBjYWxsZXJzIGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBgTUlHUkFUSU9OYCBpcyBhZmZlY3RlZC4gVGhhdCYjMzk7cyB0aGUgcHJpb3JpdHkgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgTUlHUkFUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NTkxPWNvbmZpZyBNRU1PUllfSE9UUkVNT1ZFXG4tLVxubW0vS2NvbmZpZy01OTQtXHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHXG5tbS9LY29uZmlnOjU5NTpcdHNlbGVjdCBNSUdSQVRJT05cbm1tL0tjb25maWctNTk2LVxuLS1cbm1tL0tjb25maWc9NjU0PWNvbmZpZyBDT01QQUNUSU9OXG4tLVxubW0vS2NvbmZpZy02NTYtXHRkZWZhdWx0IHlcbm1tL0tjb25maWc6NjU3Olx0c2VsZWN0IE1JR1JBVElPTlxubW0vS2NvbmZpZy02NTgtXHRkZXBlbmRzIG9uIE1NVVxuLS1cbm1tL0tjb25maWc9Njg1PWNvbmZpZyBOVU1BX01JR1JBVElPTlxuLS1cbm1tL0tjb25maWctNjg4LVx0ZGVwZW5kcyBvbiBOVU1BIFx1MDAyNlx1MDAyNiBNTVVcbm1tL0tjb25maWc6Njg5Olx0c2VsZWN0IE1JR1JBVElPTlxubW0vS2NvbmZpZy02OTAtXHRoZWxwXG4tLVxubW0vS2NvbmZpZz0xMDY3PWNvbmZpZyBDTUFcbi0tXG5tbS9LY29uZmlnLTEwNjktXHRkZXBlbmRzIG9uIE1NVVxubW0vS2NvbmZpZzoxMDcwOlx0c2VsZWN0IE1JR1JBVElPTlxubW0vS2NvbmZpZy0xMDcxLVx0c2VsZWN0IE1FTU9SWV9JU09MQVRJT05cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0NDYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gY29uZmlndXJpbmcgdGhpcyBzeXN0ZW0gYW5kIHRoZSBhdXRvbWF0aWMgc2VsZWN0aW9uIGZhdm9ycyBgTUlHUkFUSU9OYCBiZWNhdXNlIGBDT01QQUNUSU9OYCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZXhwbGljaXRseSBpbmNsdWRlIGBNRU1PUllfRkFJTFVSRWAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYXMgaW1wb3J0YW50IGNvbnNpZGVyYXRpb25zIGluIG15IHNldCB1cC4gSnVzdCB3YW50IHRvIHRha2UgYSBtb21lbnQgYW5kIHRoaW5rIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWdzIEkgbmVlZCB0byBhZGRyZXNzLiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgYmVoYXZpb3Igb2YgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIGFzIGl0IGludGVyYWN0cyB3aXRoIHRoZXNlIG90aGVycy4gSSBzaG91bGQgY29uZmlybSBpdHMgc2V0dGluZ3MsIGFuZCBob3cgaXQgaW1wYWN0cyBmcmFnbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaW5fb3JkZXJfZm9yX3NwbGl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZV9tbS5oPTQwND1pbnQgZm9saW9fc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcik7XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo0MDU6dW5zaWduZWQgaW50IG1pbl9vcmRlcl9mb3Jfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbyk7XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00MDYtaW50IHNwbGl0X2ZvbGlvX3RvX2xpc3Qoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCk7XG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NjQxPXN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC02NDYtXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo2NDc6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNjQ4LXtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQzMjk9aW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00MzM2LS8qKlxubW0vaHVnZV9tZW1vcnkuYzo0MzM3OiAqIG1pbl9vcmRlcl9mb3Jfc3BsaXQoKSAtIGdldCB0aGUgbWluaW11bSBvcmRlciBAZm9saW8gY2FuIGJlIHNwbGl0IHRvXG5tbS9odWdlX21lbW9yeS5jLTQzMzgtICogQGZvbGlvOiBmb2xpbyB0byBzcGxpdFxubW0vaHVnZV9tZW1vcnkuYy00MzM5LSAqXG5tbS9odWdlX21lbW9yeS5jOjQzNDA6ICogbWluX29yZGVyX2Zvcl9zcGxpdCgpIHRlbGxzIHRoZSBtaW5pbXVtIG9yZGVyIEBmb2xpbyBjYW4gYmUgc3BsaXQgdG8uXG5tbS9odWdlX21lbW9yeS5jLTQzNDEtICogSWYgYSBmaWxlLWJhY2tlZCBmb2xpbyBpcyB0cnVuY2F0ZWQsIDAgd2lsbCBiZSByZXR1cm5lZC4gQW55IHN1YnNlcXVlbnRcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQzNDUtICovXG5tbS9odWdlX21lbW9yeS5jOjQzNDY6dW5zaWduZWQgaW50IG1pbl9vcmRlcl9mb3Jfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL2h1Z2VfbWVtb3J5LmMtNDM0Ny17XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMzMwPWludCBtZW1vcnlfZmFpbHVyZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQ0Mi1cdGlmIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkge1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyNDQzOlx0XHRjb25zdCBpbnQgbmV3X29yZGVyID0gbWluX29yZGVyX2Zvcl9zcGxpdChmb2xpbyk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0NDQtXHRcdGludCBlcnI7XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yNzgzPXN0YXRpYyBpbnQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjc5OC1cdGlmICghaHVnZSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9sYXJnZShmb2xpbykpIHtcbm1tL21lbW9yeS1mYWlsdXJlLmM6Mjc5OTpcdFx0Y29uc3QgaW50IG5ld19vcmRlciA9IG1pbl9vcmRlcl9mb3Jfc3BsaXQoZm9saW8pO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0yODAwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDMyNwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIE9yaWdpbiBvZiBgbWluX29yZGVyX2Zvcl9zcGxpdGAqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgbWluX29yZGVyX2Zvcl9zcGxpdGAuIEkgc2VlbSB0byByZWNhbGwgaXQgYmVpbmcgaW4gdGhlIGh1Z2UgcGFnZXMgY29kZSwgc28gSSYjMzk7bSBiZXR0aW5nIGl0JiMzOTtzIGluIGBtbS9odWdlX21lbW9yeS5jYC4gVGhhdCBtYWtlcyBzZW5zZTsgaXTigJlzIHRoZSB1c3VhbCBwbGFjZSBmb3IgdGhlc2UgdGhpbmdzLiBOb3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgY29tcGlsYXRpb24gY29uZGl0aW9ucy4gUmlnaHQsIGBtbS9odWdlX21lbW9yeS5jYCBpcyBjb21waWxlZCBiYXNlZCBvbiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYC4gTm8gc3VycHJpc2VzIHRoZXJlLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgdGhvcm91Z2ggdGhvdWdoLCBsZXQmIzM5O3MgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYG1tL01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBvYmplY3QgZmlsZSBmb3IgYGh1Z2VfbWVtb3J5LmNgIGlzIGFjdHVhbGx5IGBodWdlX21lbW9yeS5vYCwganVzdCB0byBydWxlIG91dCBhbnkgcG90ZW50aWFsIG5hbWluZyBkaXNjcmVwYW5jaWVzIG9yIGNvbmRpdGlvbmFsIGluY2x1c2lvbnMgSSYjMzk7bSBub3QgaW1tZWRpYXRlbHkgY29uc2lkZXJpbmcuIEJldHRlciB0byBiZSBjZXJ0YWluIHRoYW4gdG8gd2FzdGUgdGltZSBjaGFzaW5nIGdob3N0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZV9tZW1vcnkubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTEwMD1vYmotJChDT05GSUdfREVWSUNFX01JR1JBVElPTikgJiM0Mzs9IG1pZ3JhdGVfZGV2aWNlLm9cbm1tL01ha2VmaWxlOjEwMTpvYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICYjNDM7PSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQub1xubW0vTWFrZWZpbGUtMTAyLW9iai0kKENPTkZJR19QQUdFX0NPVU5URVIpICYjNDM7PSBwYWdlX2NvdW50ZXIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDcxOQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKioKCk9rYXksIHNvIHdlJiMzOTtyZSBkZWZpbml0ZWx5IGdvaW5nIHRvIG5lZWQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgZW5hYmxlZC4gVGhhdCYjMzk7cyBhIGdpdmVuLiBOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYEhXUE9JU09OX0lOSkVDVGAuIFdoaWxlIGl0JiMzOTtzIG5vdCBhIGNvcmUgcmVxdWlyZW1lbnQgaW4gdGhlIHNhbWUgd2F5LCBJIHJlY2FsbCBpdCYjMzk7cyBpbmNyZWRpYmx5IHZhbHVhYmxlIGZvciBzaW11bGF0aW5nIGFuZCB0ZXN0aW5nIG1lbW9yeSBjb3JydXB0aW9uIHNjZW5hcmlvcy4gR2l2ZXMgdXMgYSByZWFsbHkgcm9idXN0IHdheSB0byB0ZXN0IG91ciBmYWlsdXJlIGhhbmRsaW5nLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGZvciBgSFdQT0lTT05fSU5KRUNUYCB0byBjb25maXJtIGl0cyBzdGF0dXMuIEkgd2FudCB0byBtYWtlIHN1cmUgd2UgaGF2ZSB0aGF0IG9wdGlvbiBhdmFpbGFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIV1BPSVNPTl9JTkpFQ1QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9Nzc3PWNvbmZpZyBNRU1PUllfRkFJTFVSRVxuLS1cbm1tL0tjb25maWctNzg3LVxubW0vS2NvbmZpZzo3ODg6Y29uZmlnIEhXUE9JU09OX0lOSkVDVFxubW0vS2NvbmZpZy03ODktXHR0cmlzdGF0ZSBcJiMzNDtIV1BvaXNvbiBwYWdlcyBpbmplY3RvclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTAwOAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSFdQT0lTT04gSW5qZWN0aW9uIE1lY2hhbmlzbSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYEhXUE9JU09OX0lOSkVDVGAgdGhpbmcuIEl0JiMzOTtzIGEgdHJpc3RhdGUsIGludGVyZXN0aW5nLiBJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyIGhvdyBgTUVNT1JZX0ZBSUxVUkVgIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGludGVyYWN0IHdpdGggaXQgYXMgd2VsbCwgZXNwZWNpYWxseSBjb25zaWRlcmluZyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0mIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQuIFRoZSBtYWluIGZ1bmN0aW9uIG9mIGludGVyZXN0IGlzIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgLCB0aG91Z2ggdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBzdGF0aWMgaXMgYSBiaXQgb2YgYSB3cmlua2xlLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIHdvcmsgYXJvdW5kIHRoYXQsIGJ1dCBJIHN1c3BlY3QgdGhlIGVudHJ5IHBvaW50IHRvIGJlIGBzb2Z0X29mZmxpbmVfcGFnZWAsIHNvIGxldCYjMzk7cyBzdGFydCB0aGVyZS4gVGhlIGZpcnN0IHRoaW5nIEkgd2lsbCBkbyBpcyBjb25maXJtIHRoYXQgYHNvZnRfb2ZmbGluZV9wYWdlYCBpcyBhY3R1YWxseSBleHBvcnRlZCBhbmQgYWNjZXNzaWJsZSBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qc29mdF9vZmZsaW5lX3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1vcnktZmFpbHVyZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzMTkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBrZXJuZWwgZGVidWdnaW5nOgoKKipEZWJ1Z2dpbmcgYSBNaXNzaW5nIEV4cG9ydCoqCgpIbW0sIHdhaXQgYSBzZWNvbmQuLi4gdGhpcyBgc29mdF9vZmZsaW5lX3BhZ2VgIHN5bWJvbCBpc24mIzM5O3Qgc2hvd2luZyB1cCBhcyBleHBvcnRlZD8gVGhhdCYjMzk7cyBub3QgcmlnaHQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGl0JiMzOTtzIGRlZmluZWQgYW5kIGlmIGl0ICpzaG91bGQqIGJlIHZpc2libGUuIE9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBtbS9tZW1vcnktZmFpbHVyZS5jYCBmaWxlLiBUaGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciBgc29mdF9vZmZsaW5lX3BhZ2VgLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGRlZmluaXRpb24gb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCB1c2FnZSwgcmVzaWRlcy4gTGV0JiMzOTtzIHNlZSBpZiBpdCYjMzk7cyBnb3QgdGhlIHJpZ2h0IEVYUE9SVF9TWU1CT0wgbWFjcm9zIG9yIGlmIHRoZXJlJiMzOTtzIHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gcHJldmVudGluZyBpdCBmcm9tIGJlaW5nIHZpc2libGUuIFRoaXMgY291bGQgYmUgYSBjcml0aWNhbCBpc3N1ZSEgVGltZSB0byBnbyBodW50aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2Z0X29mZmxpbmVfcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbW9yeS1mYWlsdXJlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LWZhaWx1cmUuYz0yNjA4PXN0YXRpYyB2b2lkIG1lbW9yeV9mYWlsdXJlX3dvcmtfZnVuYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjIyLVx0XHRpZiAoZW50cnkuZmxhZ3MgXHUwMDI2IE1GX1NPRlRfT0ZGTElORSlcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjYyMzpcdFx0XHRzb2Z0X29mZmxpbmVfcGFnZShlbnRyeS5wZm4sIGVudHJ5LmZsYWdzKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjYyNC1cdFx0ZWxzZVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9Mjc4Mz1zdGF0aWMgaW50IHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI4ODYtLyoqXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI4ODc6ICogc29mdF9vZmZsaW5lX3BhZ2UgLSBTb2Z0IG9mZmxpbmUgYSBwYWdlLlxubW0vbWVtb3J5LWZhaWx1cmUuYy0yODg4LSAqIEBwZm46IHBmbiB0byBzb2Z0LW9mZmxpbmVcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI5MTAtICovXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI5MTE6aW50IHNvZnRfb2ZmbGluZV9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI5MTIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTg0NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLgoKKipBbmFseXppbmcgdGhlIEdsb2JhbCBWaXNpYmlsaXR5IG9mIGBzb2Z0X29mZmxpbmVfcGFnZWAqKgoKU28sIGBzb2Z0X29mZmxpbmVfcGFnZWAgaXNuJiMzOTt0IGV4cGxpY2l0bHkgZXhwb3J0ZWQsIGJ1dCBpdCYjMzk7cyBnbG9iYWxseSB2aXNpYmxlLCB3aGljaCBpbW1lZGlhdGVseSByYWlzZXMgcXVlc3Rpb25zIGFib3V0IHdoZXJlIGl0JiMzOTtzIGJlaW5nIGFjY2Vzc2VkLiBXYWl0LCBJIHJlY2FsbCB0aGF0IGBzb2Z0X29mZmxpbmVfcGFnZWAgaXMgY2FsbGVkIGZyb20gYG1tL21hZHZpc2UuY2AsIHdoaWNoIGlzIGEgY29yZSBidWlsdC1pbiBjb21wb25lbnQuIFRoYXQgbmFycm93cyB0aGUgc2VhcmNoIHNvbWV3aGF0LCBidXQgYXJlIHRoZXJlIG90aGVyIHBvdGVudGlhbCBlbnRyeSBwb2ludHMgSSYjMzk7bSBtaXNzaW5nPyBJIG5lZWQgdG8gY29uc2lkZXIgYWxsIHRoZSBwb3NzaWJpbGl0aWVzLiBUaGlua2luZyBhYm91dCBpdCwgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBpbiBgbW0vbWFkdmlzZS5jYCBpcyB0aGUgcHJpbWFyeSBtZWNoYW5pc20gdG8gY2FsbCBgc29mdF9vZmZsaW5lX3BhZ2VgLiBOb3cgSSBzaG91bGQgcmVhbGx5IGNoZWNrIG91dCBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIHRvIHVuZGVyc3RhbmQgdGhpcyBiZXR0ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hZHZpc2VfaW5qZWN0X2Vycm9yJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYz0xMzM4PXN0YXRpYyBpbnQgbWFkdmlzZV92bWFfYmVoYXZpb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTE0NDYtICovXG5tbS9tYWR2aXNlLmM6MTQ0NzpzdGF0aWMgaW50IG1hZHZpc2VfaW5qZWN0X2Vycm9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxubW0vbWFkdmlzZS5jLTE0NDgte1xuLS1cbm1tL21hZHZpc2UuYz0xNDkyPXN0YXRpYyBib29sIGlzX21lbW9yeV9mYWlsdXJlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNTA0LVxubW0vbWFkdmlzZS5jOjE1MDU6c3RhdGljIGludCBtYWR2aXNlX2luamVjdF9lcnJvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbm1tL21hZHZpc2UuYy0xNTA2LXtcbi0tXG5tbS9tYWR2aXNlLmM9MTg4Nz1zdGF0aWMgaW50IG1hZHZpc2VfZG9fYmVoYXZpb3IodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbixcbi0tXG5tbS9tYWR2aXNlLmMtMTg5Ni1cdFx0cmFuZ2UtXHUwMDNlZW5kID0gc3RhcnQgJiM0MzsgbGVuX2luO1xubW0vbWFkdmlzZS5jOjE4OTc6XHRcdHJldHVybiBtYWR2aXNlX2luamVjdF9lcnJvcihtYWR2X2JlaGF2aW9yKTtcbm1tL21hZHZpc2UuYy0xODk4LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQ2MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3Qgd2F5IHRvIGZ1enogaXQgZWZmZWN0aXZlbHkuIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgaXMgc3RhdGljLCBzbyBJIGNhbiYjMzk7dCB1c2UgdGhhdCBhcyBhIGRpcmVjdCBmb2N1cy4gYHNvZnRfb2ZmbGluZV9wYWdlYCBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBjb25zaWRlcmVkIGBtYWR2aXNlX2RvX2JlaGF2aW9yYCBhbmQgYHN5c19tYWR2aXNlYCBhcyBwb3NzaWJpbGl0aWVzLCBidXQgYHNvZnRfb2ZmbGluZV9wYWdlYCBpcyBtdWNoIG1vcmUgc3BlY2lmaWMgdG8gdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBiZWluZyBjaGFuZ2VkIGhlcmUuIExldCBtZSBjb25maXJtIGBzb2Z0X29mZmxpbmVfcGFnZWAmIzM5O3MgbG9jYXRpb247IGl0IHNob3VsZCBiZSBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuIFllcCwgdGhlcmUgaXQgaXMuCgpJIGJyaWVmbHkgY29uc2lkZXJlZCBgdHJ5X3RvX3NwbGl0X3RocF9wYWdlYCwgYnV0IHRoYXQmIzM5O3MgYWxzbyBzdGF0aWMsIHNvIGl0IHdvbiYjMzk7dCB3b3JrIGFzIGEgZm9jdXMgc3ltYm9sLiBUaGVuLCBJIHJlYWxpemVkIHRoYXQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAgaXMgc3RhdGljIHRvbywgc28gSSBjYW4mIzM5O3QgZGlyZWN0bHkgdXNlIHRoYXQuIFdhaXQsIHRoZSBwYXRjaCAqZG9lcyogbW9kaWZ5IGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgc29mdF9vZmZsaW5lX3BhZ2VgLiBUaGVyZWZvcmUsIGBzb2Z0X29mZmxpbmVfcGFnZWAgaXMgdGhlIGNvcnJlY3Qgc3ltYm9sIHRvIGZvY3VzIG9uLgoKU28sIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSBmb3IgZnV6emluZyBwdXJwb3NlczoKCiogICAqKldvcnRoRnV6emluZzoqKiBUcnVlIC0gVGhpcyBmaXhlcyBhIGZ1bmN0aW9uYWwgaXNzdWUsIHNwZWNpZmljYWxseSBhIG1pc3NpbmcgYGZvbGlvX3B1dGAgbGVhZGluZyB0byBhIHJlZmNvdW50IGxlYWsgaW4gYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAgd2hlbiBzb2Z0IG9mZmxpbmluZyBhIFRIUCBwYWdlIGZhaWxzIChkdWUgdG8gYG5ld19vcmRlcmAgYmVpbmcgbm9uLXplcm8pLiBUaGlzIHJlcHJlc2VudHMgYSBkaXJlY3QgbWVtb3J5IGxlYWssIHNvIGl0IGlzIGhpZ2ggcHJpb3JpdHkuCiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayByZWxhdGVkIHRvIGhhbmRsaW5nIHNvZnQgb2ZmbGluaW5nIG9mIFRIUCBwYWdlcy4gVGhpcyBpcyBhIGNydWNpYWwgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBwcmV2ZW50cyBhIG1lbW9yeSBsZWFrLgoqICAgKipGb2N1c1N5bWJvbHM6KiogYHNvZnRfb2ZmbGluZV9wYWdlYCAtIFRoaXMgaXMgdGhlIHByaW1hcnkgZnVuY3Rpb24gaW52b2x2ZWQgYW5kIGlzIGNhbGxlZCBmcm9tIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgLgoqICAgKipFbmFibGVDb25maWdzOioqIGBNRU1PUllfRkFJTFVSRWAsIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgLSBUaGVzZSBhcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLgoKTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZyBkZXBlbmRlbmNpZXMuIERvZXMgYE1FTU9SWV9GQUlMVVJFYCByZWx5IG9uIGFueXRoaW5nIGVsc2U/IFllcywgYE1NVWAgYW5kIGBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFYC4gYEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVgIGlzIHNlbGVjdGVkIGJ5IHg4NiwgYXJtNjQsIHBvd2VycGMsIGV0Yy4sIHNvIHdlJiMzOTtyZSBnb29kIHRoZXJlLiBBbmQgZm9yIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGl0IGRlcGVuZHMgb24gYEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBTWVNGU2AuIFRob3NlIHNob3VsZCBiZSBzdGFuZGFyZCwgdG9vLiBBbGwgY2xlYXIuCgpJcyB0aGVyZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbj8gYEhXUE9JU09OX0lOSkVDVGAgd291bGQgYmUgdXNlZnVsIGZvciBpbmplY3Rpb24gdGVzdGluZywgYnV0IGBtYWR2aXNlKE1BRFZfU09GVF9PRkZMSU5FKWAgaXMgYXZhaWxhYmxlIHdpdGhvdXQgaXQsIHNvIGl0JiMzOTtzIG5vdCBzdHJpY3RseSBuZWNlc3NhcnkuIExldCYjMzk7cyBtYWtlIHN1cmUgYE1BRFZfU09GVF9PRkZMSU5FYCBpcyB3aGF0IHdlIHRoaW5rIGl0IGlzIGJ5IGxvb2tpbmcgaW4gYG1tL21hZHZpc2UuY2AuIE9rYXksIGFsbCBkb25lLiBUaGF0IHNob3VsZCBjb3ZlciBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TUFEVl9TT0ZUX09GRkxJTkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jPTE0NDc9c3RhdGljIGludCBtYWR2aXNlX2luamVjdF9lcnJvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTQ3Mi1cbm1tL21hZHZpc2UuYzoxNDczOlx0XHRpZiAobWFkdl9iZWhhdmlvci1cdTAwM2ViZWhhdmlvciA9PSBNQURWX1NPRlRfT0ZGTElORSkge1xubW0vbWFkdmlzZS5jLTE0NzQtXHRcdFx0cHJfaW5mbyhcJiMzNDtTb2Z0IG9mZmxpbmluZyBwZm4gJSNseCBhdCBwcm9jZXNzIHZpcnR1YWwgYWRkcmVzcyAlI2x4XFxuXCYjMzQ7LFxuLS1cbm1tL21hZHZpc2UuYz0xNDkyPXN0YXRpYyBib29sIGlzX21lbW9yeV9mYWlsdXJlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNDk1LVx0Y2FzZSBNQURWX0hXUE9JU09OOlxubW0vbWFkdmlzZS5jOjE0OTY6XHRjYXNlIE1BRFZfU09GVF9PRkZMSU5FOlxubW0vbWFkdmlzZS5jLTE0OTctXHRcdHJldHVybiB0cnVlO1xuLS1cbm1tL21hZHZpc2UuYz0xNTE4PW1hZHZpc2VfYmVoYXZpb3JfdmFsaWQoaW50IGJlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNTUwLSNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVcbm1tL21hZHZpc2UuYzoxNTUxOlx0Y2FzZSBNQURWX1NPRlRfT0ZGTElORTpcbm1tL21hZHZpc2UuYy0xNTUyLVx0Y2FzZSBNQURWX0hXUE9JU09OOlxuLS1cbm1tL21hZHZpc2UuYz0xODg3PXN0YXRpYyBpbnQgbWFkdmlzZV9kb19iZWhhdmlvcih1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuX2luLFxuLS1cbm1tL21hZHZpc2UuYy0xOTQ1LSAqXHRcdHdlcmUgY29ycnVwdGVkIGJ5IHVucmVjb3ZlcmFibGUgaGFyZHdhcmUgbWVtb3J5IGZhaWx1cmUuXG5tbS9tYWR2aXNlLmM6MTk0NjogKiAgTUFEVl9TT0ZUX09GRkxJTkUgLSB0cnkgdG8gc29mdC1vZmZsaW5lIHRoZSBnaXZlbiByYW5nZSBvZiBtZW1vcnkuXG5tbS9tYWR2aXNlLmMtMTk0Ny0gKiAgTUFEVl9NRVJHRUFCTEUgLSB0aGUgYXBwbGljYXRpb24gcmVjb21tZW5kcyB0aGF0IEtTTSB0cnkgdG8gbWVyZ2UgcGFnZXMgaW5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxMTQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBFcnJvciBJbmplY3Rpb24gQ2FwYWJpbGl0aWVzKioKCkFscmlnaHQsIHNvIGBNQURWX1NPRlRfT0ZGTElORWAgaXMgYXZhaWxhYmxlLiBUaGF0IG1ha2VzIHNlbnNlLCBidXQgb25seSBpZiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBpcyBmbGlwcGVkIG9uLiBUaGF0JiMzOTtzIGEgZ29vZCBwcmVyZXF1aXNpdGUgdG8ga2VlcCBpbiBtaW5kLiBOb3csIEkgbmVlZCB0byBkaWcgYSBsaXR0bGUgZGVlcGVyLiBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgdGhlIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgZnVuY3Rpb24sIHdoaWNoIEkmIzM5O2xsIGJlIHVzaW5nIGluIHJlbGF0aW9uIHRvIHRoaXMsIGhhcyBzb21lIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgc28gbGV0JiMzOTtzIGNoZWNrIGl0cyByZXF1aXJlbWVudHMuIEl0IGxvb2tzIGxpa2UgYENBUF9TWVNfQURNSU5gIGlzIGdvaW5nIHRvIGJlIG5lZWRlZC4gSSBmaWd1cmVkIGFzIG11Y2guIFRpbWUgdG8gY29uZmlybSB0aGUgZGV0YWlscyBhbmQgbW92ZSBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0NDcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQ0NzpcdHN0YXRpYyBpbnQgbWFkdmlzZV9pbmplY3RfZXJyb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4xNDQ4Olx0e1xuMTQ0OTpcdFx0dW5zaWduZWQgbG9uZyBzaXplO1xuMTQ1MDpcdFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IG1hZHZfYmVoYXZpb3ItXHUwMDNlcmFuZ2Uuc3RhcnQ7XG4xNDUxOlx0XHR1bnNpZ25lZCBsb25nIGVuZCA9IG1hZHZfYmVoYXZpb3ItXHUwMDNlcmFuZ2UuZW5kO1xuMTQ1MjpcdFxuMTQ1MzpcdFx0aWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKVxuMTQ1NDpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuMTQ1NTpcdFxuMTQ1NjpcdFx0Zm9yICg7IHN0YXJ0IFx1MDAzYyBlbmQ7IHN0YXJ0ICYjNDM7PSBzaXplKSB7XG4xNDU3Olx0XHRcdHVuc2lnbmVkIGxvbmcgcGZuO1xuMTQ1ODpcdFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbjE0NTk6XHRcdFx0aW50IHJldDtcbjE0NjA6XHRcbjE0NjE6XHRcdFx0cmV0ID0gZ2V0X3VzZXJfcGFnZXNfZmFzdChzdGFydCwgMSwgMCwgXHUwMDI2cGFnZSk7XG4xNDYyOlx0XHRcdGlmIChyZXQgIT0gMSlcbjE0NjM6XHRcdFx0XHRyZXR1cm4gcmV0O1xuMTQ2NDpcdFx0XHRwZm4gPSBwYWdlX3RvX3BmbihwYWdlKTtcbjE0NjU6XHRcbjE0NjY6XHRcdFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2MzkKCQkJCQkJCW91dHB1dDogMTI0CgkJCQkJCQl0aG91Z2h0czogMTM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU29mdCBPZmZsaW5lIFBhZ2UgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIGBzb2Z0X29mZmxpbmVfcGFnZWAgc2l0dWF0aW9uLiBJdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCB0cmlnZ2VyaW5nIGl0IGRpcmVjdGx5IHRocm91Z2ggdGhlIGtlcm5lbCByZXF1aXJlcyBgQ0FQX1NZU19BRE1JTmAuIFRoYXQgbWFrZXMgc2Vuc2UuIEkga25vdyBTeXprYWxsZXIgdHlwaWNhbGx5IHJ1bnMgd2l0aCBgQ0FQX1NZU19BRE1JTmAgaW4gaXRzIGlzb2xhdGVkIG5hbWVzcGFjZXMsIGJ1dCB0aGUgYGNhcGFibGUoQ0FQX1NZU19BRE1JTilgIGNoZWNrIGlzIGdvaW5nIHRvIGxvb2sgYXQgdGhlICppbml0aWFsKiB1c2VyIG5hbWVzcGFjZSwgd2hpY2ggU3l6a2FsbGVyIHByb2JhYmx5IGhhcywgc2luY2UgaXQgdXN1YWxseSBydW5zIGFzIHJvb3Qgd2l0aGluIHRoZSBWTSBpdCYjMzk7cyB1c2luZy4KCkkgd29uZGVyLCB0aG91Z2gsIGlmIHRoZXJlJiMzOTtzIGFuIGFsdGVybmF0aXZlIHJvdXRlLCBzb21ldGhpbmcgbGVzcyBkaXJlY3Q/IEFoLCB5ZXMhIFN5c2ZzISBTcGVjaWZpY2FsbHksIGAvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9zb2Z0X29mZmxpbmVfcGFnZWAuIFN5emthbGxlciAqY2FuKiB3cml0ZSB0byBzeXNmczsgSSYjMzk7dmUgdXNlZCB0aGF0IGJlZm9yZS4gVGhhdCBjb3VsZCBiZSBhIGZlYXNpYmxlIHRyaWdnZXIgcGF0aC4KClNvLCB0aGlua2luZyBhYm91dCB0aGUgYnJvYWRlciBzZXR1cC4uLiBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9ucyBpbnZvbHZlZC4gVGhhdCYjMzk7bGwgYmUgYE1FTU9SWV9GQUlMVVJFYCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgbmF0dXJhbGx5LgoKUmlnaHQsIEkmIzM5O3ZlIGdvdCBhIGhhbmRsZSBvbiB0aGUga2V5IGVsZW1lbnRzLiBOb3cgSSBqdXN0IG5lZWQgdG8gcmVjb3JkIHRoZXNlIGZpbmRpbmdzIGZvciBmdXR1cmUgcmVmZXJlbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzb2Z0X29mZmxpbmVfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG1pc3NpbmcgZm9saW9fcHV0IChyZWZjb3VudCBsZWFrKSBpbiBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Ugd2hlbiBzb2Z0IG9mZmxpbmluZyBhIFRIUCBwYWdlIGZhaWxzIGJlY2F1c2UgbmV3X29yZGVyIGlzIG5vbi16ZXJvLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBwcmV2ZW50cyBhIG1lbW9yeSBsZWFrIGFuZCBpcyByZWFjaGFibGUgdmlhIG1hZHZpc2UoTUFEVl9TT0ZUX09GRkxJTkUpIG9yIHN5c2ZzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NvZnRfb2ZmbGluZV9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWlzc2luZyBmb2xpb19wdXQgKHJlZmNvdW50IGxlYWspIGluIHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZSB3aGVuIHNvZnQgb2ZmbGluaW5nIGEgVEhQIHBhZ2UgZmFpbHMgYmVjYXVzZSBuZXdfb3JkZXIgaXMgbm9uLXplcm8uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHByZXZlbnRzIGEgbWVtb3J5IGxlYWsgYW5kIGlzIHJlYWNoYWJsZSB2aWEgbWFkdmlzZShNQURWX1NPRlRfT0ZGTElORSkgb3Igc3lzZnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1MToxNi4xNjM0OTA1MzJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE5MTg0NDUxMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic29mdF9vZmZsaW5lX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1pc3NpbmcgZm9saW9fcHV0IChyZWZjb3VudCBsZWFrKSBpbiBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Ugd2hlbiBzb2Z0IG9mZmxpbmluZyBhIFRIUCBwYWdlIGZhaWxzIGJlY2F1c2UgbmV3X29yZGVyIGlzIG5vbi16ZXJvLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBwcmV2ZW50cyBhIG1lbW9yeSBsZWFrIGFuZCBpcyByZWFjaGFibGUgdmlhIG1hZHZpc2UoTUFEVl9TT0ZUX09GRkxJTkUpIG9yIHN5c2ZzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1MToxNi4xNjM0OTk5NjJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTE1OTMxMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkN2M4M2M1ODZhM2RjNjYzN2RhZjJjODQ5ODZiMWNmNjI3YzlkNDI0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDQgMDQ6NTE6MTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmNcXG5pbmRleCA1MTUwOGE1NWM0MDU1Li4zYjFlNjk0NjgyMWJiIDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmNcXG4rKysgYi9tbS9tZW1vcnktZmFpbHVyZS5jXFxuQEAgLTI3NzYsNiArMjc3Niw5IEBAIEVYUE9SVF9TWU1CT0wodW5wb2lzb25fbWVtb3J5KTtcXG4gICogc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlIGhhbmRsZXMgaHVnZXRsYi1wYWdlcyBhbmQgbm9uLWh1Z2V0bGIgcGFnZXMuXFxuICAqIElmIHRoZSBwYWdlIGlzIGEgbm9uLWRpcnR5IHVubWFwcGVkIHBhZ2UtY2FjaGUgcGFnZSwgaXQgc2ltcGx5IGludmFsaWRhdGVzLlxcbiAgKiBJZiB0aGUgcGFnZSBpcyBtYXBwZWQsIGl0IG1pZ3JhdGVzIHRoZSBjb250ZW50cyBvdmVyLlxcbisgKlxcbisgKiBUaGUgZm9saW8gcmVmY291bnQgaGFzIGJlZW4gaW5jcmVtZW50ZWQgYmVmb3JlIGVudGVyaW5nIHRoaXMgZnVuY3Rpb24uXFxuKyAqIFRoaXMgZm9saW8gcmVmZXJlbmNlIG11c3QgYmUgcmVsZWFzZWQgYmVmb3JlIHRoZSBmdW5jdGlvbiByZXR1cm5zIG9uIGFsbCBwYXRocy5cXG4gICovXFxuIHN0YXRpYyBpbnQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxcbiB7XFxuQEAgLTI4MDEsOSArMjgwNCwxOSBAQCBzdGF0aWMgaW50IHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4gXFx0XFx0ICogTk9URTogaWYgbWluaW1pemluZyB0aGUgbnVtYmVyIG9mIHNvZnQgb2ZmbGluZSBwYWdlcyBpc1xcbiBcXHRcXHQgKiBwcmVmZXJyZWQsIHNwbGl0IGl0IHRvIG5vbi16ZXJvIG5ld19vcmRlciBsaWtlIGl0IGlzIGRvbmUgaW5cXG4gXFx0XFx0ICogbWVtb3J5X2ZhaWx1cmUoKS5cXG4rXFx0XFx0ICpcXG4rXFx0XFx0ICogRHJvcCB0aGUgcmVmZXJlbmNlIG9idGFpbmVkIHVwb24gZW50cnk7XFxuK1xcdFxcdCAqIHRyeV90b19zcGxpdF90aHBfcGFnZSguLi4sIHJlbGVhc2U9dHJ1ZSkgaGFuZGxlcyByZWZjb3VudGluZyBpdHNlbGZcXG4rXFx0XFx0ICogd2hlbiB0aGUgc3BsaXQgZmFpbHMuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRpZiAobmV3X29yZGVyIHx8IHRyeV90b19zcGxpdF90aHBfcGFnZShwYWdlLCAvKiBuZXdfb3JkZXI9ICovIDAsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICAvKiByZWxlYXNlPSAqLyB0cnVlKSkge1xcbitcXHRcXHRpZiAobmV3X29yZGVyKSB7XFxuK1xcdFxcdFxcdHByX2luZm8oXFxcIiUjbHg6IG9yZGVyLSVkIGZvbGlvIGNhbm5vdCBzb2Z0IG9mZmxpbmVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdHBmbiwgbmV3X29yZGVyKTtcXG4rXFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAodHJ5X3RvX3NwbGl0X3RocF9wYWdlKHBhZ2UsIC8qIG5ld19vcmRlcj0gKi8gMCxcXG4rXFx0XFx0XFx0XFx0XFx0IC8qIHJlbGVhc2U9ICovIHRydWUpKSB7XFxuIFxcdFxcdFxcdHByX2luZm8oXFxcIiUjbHg6IHRocCBzcGxpdCBmYWlsZWRcXFxcblxcXCIsIHBmbik7XFxuIFxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTE6MTcuNTU2MDQ1ODg0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTQwNTI1ODgwMjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNvZnRfb2ZmbGluZV9wYWdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtaXNzaW5nIGZvbGlvX3B1dCAocmVmY291bnQgbGVhaykgaW4gc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlIHdoZW4gc29mdCBvZmZsaW5pbmcgYSBUSFAgcGFnZSBmYWlscyBiZWNhdXNlIG5ld19vcmRlciBpcyBub24temVyby4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcHJldmVudHMgYSBtZW1vcnkgbGVhayBhbmQgaXMgcmVhY2hhYmxlIHZpYSBtYWR2aXNlKE1BRFZfU09GVF9PRkZMSU5FKSBvciBzeXNmcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDdjODNjNTg2YTNkYzY2MzdkYWYyYzg0OTg2YjFjZjYyN2M5ZDQyNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDQgMDQ6NTE6MTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuaW5kZXggNTE1MDhhNTVjNDA1NS4uM2IxZTY5NDY4MjFiYiAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmNcbisrKyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbkBAIC0yNzc2LDYgKzI3NzYsOSBAQCBFWFBPUlRfU1lNQk9MKHVucG9pc29uX21lbW9yeSk7XG4gICogc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlIGhhbmRsZXMgaHVnZXRsYi1wYWdlcyBhbmQgbm9uLWh1Z2V0bGIgcGFnZXMuXG4gICogSWYgdGhlIHBhZ2UgaXMgYSBub24tZGlydHkgdW5tYXBwZWQgcGFnZS1jYWNoZSBwYWdlLCBpdCBzaW1wbHkgaW52YWxpZGF0ZXMuXG4gICogSWYgdGhlIHBhZ2UgaXMgbWFwcGVkLCBpdCBtaWdyYXRlcyB0aGUgY29udGVudHMgb3Zlci5cbisgKlxuKyAqIFRoZSBmb2xpbyByZWZjb3VudCBoYXMgYmVlbiBpbmNyZW1lbnRlZCBiZWZvcmUgZW50ZXJpbmcgdGhpcyBmdW5jdGlvbi5cbisgKiBUaGlzIGZvbGlvIHJlZmVyZW5jZSBtdXN0IGJlIHJlbGVhc2VkIGJlZm9yZSB0aGUgZnVuY3Rpb24gcmV0dXJucyBvbiBhbGwgcGF0aHMuXG4gICovXG4gc3RhdGljIGludCBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuQEAgLTI4MDEsOSArMjgwNCwxOSBAQCBzdGF0aWMgaW50IHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcdFx0ICogTk9URTogaWYgbWluaW1pemluZyB0aGUgbnVtYmVyIG9mIHNvZnQgb2ZmbGluZSBwYWdlcyBpc1xuIFx0XHQgKiBwcmVmZXJyZWQsIHNwbGl0IGl0IHRvIG5vbi16ZXJvIG5ld19vcmRlciBsaWtlIGl0IGlzIGRvbmUgaW5cbiBcdFx0ICogbWVtb3J5X2ZhaWx1cmUoKS5cbitcdFx0ICpcbitcdFx0ICogRHJvcCB0aGUgcmVmZXJlbmNlIG9idGFpbmVkIHVwb24gZW50cnk7XG4rXHRcdCAqIHRyeV90b19zcGxpdF90aHBfcGFnZSguLi4sIHJlbGVhc2U9dHJ1ZSkgaGFuZGxlcyByZWZjb3VudGluZyBpdHNlbGZcbitcdFx0ICogd2hlbiB0aGUgc3BsaXQgZmFpbHMuXG4gXHRcdCAqL1xuLVx0XHRpZiAobmV3X29yZGVyIHx8IHRyeV90b19zcGxpdF90aHBfcGFnZShwYWdlLCAvKiBuZXdfb3JkZXI9ICovIDAsXG4tXHRcdFx0XHRcdFx0ICAgICAgIC8qIHJlbGVhc2U9ICovIHRydWUpKSB7XG4rXHRcdGlmIChuZXdfb3JkZXIpIHtcbitcdFx0XHRwcl9pbmZvKFwiJSNseDogb3JkZXItJWQgZm9saW8gY2Fubm90IHNvZnQgb2ZmbGluZVxcblwiLFxuK1x0XHRcdFx0cGZuLCBuZXdfb3JkZXIpO1xuK1x0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4rXHRcdFx0cmV0dXJuIC1FQlVTWTtcbitcdFx0fVxuK1x0XHRpZiAodHJ5X3RvX3NwbGl0X3RocF9wYWdlKHBhZ2UsIC8qIG5ld19vcmRlcj0gKi8gMCxcbitcdFx0XHRcdFx0IC8qIHJlbGVhc2U9ICovIHRydWUpKSB7XG4gXHRcdFx0cHJfaW5mbyhcIiUjbHg6IHRocCBzcGxpdCBmYWlsZWRcXG5cIiwgcGZuKTtcbiBcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIFx0XHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1MToxNy41NTYwNDg0NDRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODgyNDMzNTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE1lbW9yeSBGYWlsdXJlIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIGl0J3MgZGVhbGluZyB3aXRoIHNvZnQgb2ZmbGluaW5nIFRIUCAoVHJhbnNwYXJlbnQgSHVnZSBQYWdlcykgcGFnZXMsIGFuZCB0aGUgY29yZSBjaGFuZ2UgaXMgaW4gaG93IGl0IGhhbmRsZXMgYSBzcGVjaWZpYyBjaGVjay4gSW5pdGlhbGx5LCB0aGUgY29kZSB3YXMgdXNpbmcgYSBzaG9ydC1jaXJjdWl0aW5nIE9SIChgfHxgKSB0byBkZXRlcm1pbmUgaWYgYSBUSFAgcGFnZSBuZWVkZWQgdG8gYmUgc3BsaXQuIFRoZSBvcmlnaW5hbCBsb2dpYyB3YXMgYGlmIChuZXdfb3JkZXIgfHwgdHJ5X3RvX3NwbGl0X3RocF9wYWdlKHBhZ2UsIC8qIG5ld19vcmRlcj0gKi8gMCwgLyogcmVsZWFzZT0gKi8gdHJ1ZSkpYC4gVGhpcyBwYXRjaCBlZmZlY3RpdmVseSBzZXBhcmF0ZXMgdGhvc2UgdHdvIGNoZWNrcy5cblxuVGhlIHByb2JsZW0sIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgdGhhdCB3aGVuIGBuZXdfb3JkZXJgIHdhc24ndCB6ZXJvLCBpdCB3b3VsZCAqc2hvcnQtY2lyY3VpdCogdGhlIE9SLiBUaGlzIG1lYW50IGB0cnlfdG9fc3BsaXRfdGhwX3BhZ2VgIHdvdWxkbid0IGJlIGNhbGxlZC4gQ3J1Y2lhbGx5LCB0aGUgKm9yaWdpbmFsKiBjb2RlIGhhZCBhIGBmb2xpb19wdXQoZm9saW8pYCBpbnNpZGUgb2YgdGhlIGBpZmAgYmxvY2suIElmIGB0cnlfdG9fc3BsaXRfdGhwX3BhZ2VgIHdhcyBleGVjdXRlZCwgaXQgd291bGQgZGVhbCB3aXRoIHRoZSByZWZjb3VudC4gSG93ZXZlciwgYmVjYXVzZSBvZiB0aGUgc2hvcnQtY2lyY3VpdGluZywgdGhlIG9yaWdpbmFsIGNvZGUgbWlzc2VkIHRoZSBkZWNyZW1lbnQgaW4gdGhlIGNhc2Ugb2YgYG5ld19vcmRlcmAgYmVpbmcgbm9uLXplcm8uIFRoZSBwYXRjaCwgdGhlcmVmb3JlLCBzZXBhcmF0ZXMgdGhlIGNoZWNrcywgYWRkaW5nIGFuIGV4cGxpY2l0IGBmb2xpb19wdXQoZm9saW8pYCBpbiB0aGUgbmV3IGNvZGUgYmxvY2sgd2hlbiBgbmV3X29yZGVyYCBpcyBub24temVybywgYW5kIGl0IGFsc28gY2FsbHMgYHRyeV90b19zcGxpdF90aHBfcGFnZWAgYWZ0ZXIgaW4gYSBzZXBhcmF0ZSBgaWZgIGJsb2NrLlxuXG5UaGlzIGZpeGVzIGEgbWlzc2luZyBgZm9saW9fcHV0YCwgcHJldmVudGluZyBhIHBvdGVudGlhbCByZXNvdXJjZSBsZWFrLiBOb3csIEkgbmVlZCB0byBsb29rIGludG8gdGhpcyBmdW5jdGlvbiBtb3JlIGdlbmVyYWxseSBhbmQgdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gTGV0J3Mgc2VlIGlmIEkgY2FuIGZpbmQgdGhlIHJlbGF0ZWQgY29uZmlnIG9wdGlvbnMgZm9yIGBtbS9tZW1vcnktZmFpbHVyZS5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM3OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjUxOjIzLjQzODQ4NjQyNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTI4ODQwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtb3J5LWZhaWx1cmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnktZmFpbHVyZS5jPTI3NzA9RVhQT1JUX1NZTUJPTCh1bnBvaXNvbl9tZW1vcnkpO1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzc1LS8qXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNzc2OiAqIHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZSBoYW5kbGVzIGh1Z2V0bGItcGFnZXMgYW5kIG5vbi1odWdldGxiIHBhZ2VzLlxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjc3Ny0gKiBJZiB0aGUgcGFnZSBpcyBhIG5vbi1kaXJ0eSB1bm1hcHBlZCBwYWdlLWNhY2hlIHBhZ2UsIGl0IHNpbXBseSBpbnZhbGlkYXRlcy5cXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjc4Mi0gKi9cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI3ODM6c3RhdGljIGludCBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzg0LXtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MjkxMT1pbnQgc29mdF9vZmZsaW5lX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjk1Ny1cXHRpZiAocmV0IFxcdTAwM2UgMCkge1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6Mjk1ODpcXHRcXHRyZXQgPSBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2UocGFnZSk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yOTU5LVxcdH0gZWxzZSBpZiAocmV0ID09IDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTE6MjMuNDk3NzgwMDAxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5ODI2Mzg0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIE9mZmxpbmUgUGFnZSBIYW5kbGluZyoqXG5cblJpZ2h0LCBzbyBgc29mdF9vZmZsaW5lX3BhZ2VgIOKAkyB0aGF0J3MgdGhlIGZ1bmN0aW9uIHRoYXQga2lja3Mgb2ZmIHRoZSBzb2Z0IG9mZmxpbmUgcHJvY2Vzcy4gSXQgbG9va3MgbGlrZSBpdCBkaXJlY3RseSBjYWxscyBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYC4gTWFrZXMgc2Vuc2U7IG9uZSBoYW5kbGVzIHRoZSBpbml0aWFsIHRyaWdnZXJpbmcsIHRoZSBvdGhlciBwcm9iYWJseSBkb2VzIHRoZSBjb3JlIHdvcmsgb24gdGhlIHBhZ2UgdGhhdCdzIGdvaW5nIHNvZnQgb2ZmbGluZS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9ucyB0aGF0ICplbmFibGUqIHRoaXMgd2hvbGUgbWVtb3J5IGZhaWx1cmUgcGF0aCwgc3BlY2lmaWNhbGx5IHRoZSBlbmFibGluZyBjb25kaXRpb25zIG9mIGBtbS9tZW1vcnktZmFpbHVyZS5jYC4gVGhhdCdzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuIFdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBrZXJuZWwgcGFyYW1ldGVycywgb3IgaGFyZHdhcmUgZmVhdHVyZXMgbmVlZCB0byBiZSBpbiBwbGF5IGZvciB0aGUgc29mdCBvZmZsaW5lIG1lY2hhbmlzbSB0byBldmVuICpiZSogYWN0aXZlPyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMgdG8gc2VlIHdoYXQgdHJpZ2dlcnMgaXQuIFRoYXTigJlzIHRoZSBrZXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MjQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1MToyNi44OTYwNDU4NzZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgzODE2NjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtb3J5LWZhaWx1cmUub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0xMTE9b2JqLSQoQ09ORklHX0RNQVBPT0xfVEVTVCkgKz0gZG1hcG9vbF90ZXN0Lm9cXG5tbS9NYWtlZmlsZToxMTI6b2JqLSQoQ09ORklHX01FTU9SWV9GQUlMVVJFKSArPSBtZW1vcnktZmFpbHVyZS5vXFxubW0vTWFrZWZpbGUtMTEzLW9iai0kKENPTkZJR19IV1BPSVNPTl9JTkpFQ1QpICs9IGh3cG9pc29uLWluamVjdC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjUxOjI2Ljk5NDQzMTY1OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzU1MjM5MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgZm9yIFNvZnQgT2ZmbGluZSBQYWdlIEFjY2Vzc2liaWxpdHkqKlxuXG5BbHJpZ2h0LCB0aGUgcmVxdWlyZW1lbnQgZm9yIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIGNsZWFyOyB3ZSdyZSBkZWFsaW5nIHdpdGggbWVtb3J5IGZhaWx1cmUgc2NlbmFyaW9zLiBOb3csIHRoZSBuZXh0IGNydWNpYWwgc3RlcCBpcyBkZXRlcm1pbmluZyBob3cgdG8gaW50ZXJhY3Qgd2l0aCB0aGlzIGZ1bmN0aW9uYWxpdHkuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIHRoZSBgc29mdF9vZmZsaW5lX3BhZ2VgIGZ1bmN0aW9uIG9yIHZhcmlhYmxlIOKAkyBpZiBpdCdzIGEgdmFyaWFibGUg4oCTIGlzIGFjdHVhbGx5IGFjY2Vzc2libGUgb3IgZXhwb3NlZCB0byB1c2Vyc3BhY2UuIFRoaXMgaXMgY3JpdGljYWwuIElmIGl0IGlzbid0LCB0aGVuIGV2ZW4gaWYgd2UgaGF2ZSBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBlbmFibGVkLCB3ZSB3b24ndCBiZSBhYmxlIHRvIGxldmVyYWdlIGl0IGVmZmVjdGl2ZWx5IGZyb20gYW4gYXBwbGljYXRpb24gb3IgdXRpbGl0eSBydW5uaW5nIGluIHVzZXJzcGFjZSB0byBtYW5hZ2Ugc29mdCBvZmZsaW5lIHBhZ2VzLiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gKnVzZSogdGhhdCBjYXBhYmlsaXR5LCBzbyBJJ20gaW1tZWRpYXRlbHkgbW92aW5nIHRvIGFzc2VzcyB0aGUgZXhwb3J0IG9yIHJlYWNoYWJpbGl0eSBvZiB0aGlzIHN5bWJvbC4gVGhpcyBpbnZlc3RpZ2F0aW9uIHdpbGwgZ3VpZGUgbWUgb24gdGhlIHN1YnNlcXVlbnQgaW1wbGVtZW50YXRpb24gb3IsIHBvdGVudGlhbGx5LCB0aGUgbmVlZCBmb3Iga2VybmVsIG1vZGlmaWNhdGlvbnMgdG8gZXhwb3NlIHRoZSByZXF1aXJlZCBpbnRlcmZhY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzY4LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTE6MzAuMjY5OTU5OTQzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNjg5NDYzOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic29mdF9vZmZsaW5lX3BhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtbWVtb3J5LXBhZ2Utb2ZmbGluZToxOldoYXQ6XFx0XFx0L3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvc29mdF9vZmZsaW5lX3BhZ2VcXG5Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLW1lbW9yeS1wYWdlLW9mZmxpbmUtMi1EYXRlOlxcdFxcdFNlcCAyMDA5XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL21lbW9yeS1ob3RwbHVnLnJzdD0yNzY9VGhlIGZvbGxvd2luZyBmaWxlcyBhcmUgY3VycmVudGx5IGRlZmluZWQ6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL21lbW9yeS1ob3RwbHVnLnJzdC0zMDctICBXaGVuIHRoZSBDT05GSUdfTUVNT1JZX0ZBSUxVUkUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGVuYWJsZWQsIHR3b1xcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0OjMwODogIGFkZGl0aW9uYWwgZmlsZXMgYGBoYXJkX29mZmxpbmVfcGFnZWBgIGFuZCBgYHNvZnRfb2ZmbGluZV9wYWdlYGAgYXJlIGF2YWlsYWJsZVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0LTMwOS0gIHRvIHRyaWdnZXIgaHdwb2lzb25pbmcgb2YgcGFnZXMsIGZvciBleGFtcGxlLCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4gTm90ZSB0aGF0XFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvcGR0LmM9MjQ3PXN0YXRpYyBpbnQgcGR0X21haW5sb29wKHZvaWQgKnVudXNlZClcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9wZHQuYy0zMzUtXFx0XFx0XFx0ZWxzZVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9wZHQuYzozMzY6XFx0XFx0XFx0XFx0c29mdF9vZmZsaW5lX3BhZ2UocGRlIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQsIDApO1xcbmFyY2gvcGFyaXNjL2tlcm5lbC9wZHQuYy0zMzctI2Vsc2VcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz01OTU9c3RhdGljIERFVklDRV9BVFRSX1dPKHByb2JlKTtcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy02MDMtLyogU29mdCBvZmZsaW5lIGEgcGFnZSAqL1xcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzo2MDQ6c3RhdGljIHNzaXplX3Qgc29mdF9vZmZsaW5lX3BhZ2Vfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy02MDUtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTYxNC1cXHRwZm4gXFx1MDAzZVxcdTAwM2U9IFBBR0VfU0hJRlQ7XFxuZHJpdmVycy9iYXNlL21lbW9yeS5jOjYxNTpcXHRyZXQgPSBzb2Z0X29mZmxpbmVfcGFnZShwZm4sIDApO1xcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy02MTYtXFx0cmV0dXJuIHJldCA9PSAwID8gY291bnQgOiByZXQ7XFxuLS1cXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM9NjIwPXN0YXRpYyBzc2l6ZV90IGhhcmRfb2ZmbGluZV9wYWdlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy02MzYtXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jOjYzNzpzdGF0aWMgREVWSUNFX0FUVFJfV08oc29mdF9vZmZsaW5lX3BhZ2UpO1xcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy02Mzgtc3RhdGljIERFVklDRV9BVFRSX1dPKGhhcmRfb2ZmbGluZV9wYWdlKTtcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz05MTE9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKm1lbW9yeV9yb290X2F0dHJzW10gPSB7XFxuLS1cXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtOTE2LSNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVcXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6OTE3OlxcdFxcdTAwMjZkZXZfYXR0cl9zb2Z0X29mZmxpbmVfcGFnZS5hdHRyLFxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy05MTgtXFx0XFx1MDAyNmRldl9hdHRyX2hhcmRfb2ZmbGluZV9wYWdlLmF0dHIsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9NDk5Nj1leHRlcm4gYXRvbWljX2xvbmdfdCBudW1fcG9pc29uZWRfcGFnZXMgX19yZWFkX21vc3RseTtcXG5pbmNsdWRlL2xpbnV4L21tLmg6NDk5NzpleHRlcm4gaW50IHNvZnRfb2ZmbGluZV9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpO1xcbmluY2x1ZGUvbGludXgvbW0uaC00OTk4LSNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVcXG4tLVxcbm1tL21hZHZpc2UuYz0xNDQ3PXN0YXRpYyBpbnQgbWFkdmlzZV9pbmplY3RfZXJyb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTQ3NS1cXHRcXHRcXHRcXHQgcGZuLCBzdGFydCk7XFxubW0vbWFkdmlzZS5jOjE0NzY6XFx0XFx0XFx0cmV0ID0gc29mdF9vZmZsaW5lX3BhZ2UocGZuLCBNRl9DT1VOVF9JTkNSRUFTRUQpO1xcbm1tL21hZHZpc2UuYy0xNDc3LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTI2MDg9c3RhdGljIHZvaWQgbWVtb3J5X2ZhaWx1cmVfd29ya19mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjYyMi1cXHRcXHRpZiAoZW50cnkuZmxhZ3MgXFx1MDAyNiBNRl9TT0ZUX09GRkxJTkUpXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjIzOlxcdFxcdFxcdHNvZnRfb2ZmbGluZV9wYWdlKGVudHJ5LnBmbiwgZW50cnkuZmxhZ3MpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjYyNC1cXHRcXHRlbHNlXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTI3ODM9c3RhdGljIGludCBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI4ODYtLyoqXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyODg3OiAqIHNvZnRfb2ZmbGluZV9wYWdlIC0gU29mdCBvZmZsaW5lIGEgcGFnZS5cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI4ODgtICogQHBmbjogcGZuIHRvIHNvZnQtb2ZmbGluZVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yOTEwLSAqL1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjkxMTppbnQgc29mdF9vZmZsaW5lX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI5MTIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1MTozMi41Mzg5MTM4ODZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDAzNzYyMzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSB3ZWxsLXZlcnNlZCBpbiB0aGlzIGFyZWE6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYSBWdWxuZXJhYmlsaXR5IFBhdGg6IGBtYWR2aXNlX2luamVjdF9lcnJvcmAgYW5kIGBNQURWX1NPRlRfT0ZGTElORWAqKlxuXG5SaWdodCwgc28gSSdtIGZvbGxvd2luZyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IHBhdGggaGVyZS4gSSdtIHNlZWluZyB0aGF0IGBtYWR2aXNlX2luamVjdF9lcnJvcmAgaXMgdGhlIGtleSwgYW5kIGl0IHNlZW1zIHRvIGJlIHRyaWdnZXJlZCBieSBgTUFEVl9TT0ZUX09GRkxJTkVgIHdpdGhpbiB0aGUgYG1hZHZpc2VgIHN5c3RlbSBjYWxsLiBUaGlzIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSXQncyBub3QgdGhlIG1vc3QgY29tbW9uIHZlY3Rvciwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIuIE15IG5leHQgc3RlcCBpcyBjbGVhciDigJMgSSdtIGdvaW5nIHRvIGRpdmUgcmlnaHQgaW50byB0aGUgYG1hZHZpc2UuY2Agc291cmNlIGNvZGUuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBtZWF0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBhbmQgdW5kZXJzdGFuZCB0aGUgZXhhY3QgbWVjaGFuaWNzIG9mIGhvdyBgTUFEVl9TT0ZUX09GRkxJTkVgIGxlYWRzIHRvIGEgY2FsbCB0byBgbWFkdmlzZV9pbmplY3RfZXJyb3JgLiBJIG5lZWQgdG8gc2VlIHRoZSBjb25kaXRpb25hbCBsb2dpYywgdGhlIGRhdGEgc3RydWN0dXJlcyBiZWluZyBtYW5pcHVsYXRlZCwgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIG90aGVyIGV4cGxvaXRhYmxlIGJlaGF2aW9ycy4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE5MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjUxOjM2LjU0MjY3ODk3NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY3MzkxMjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUFEVl9TT0ZUX09GRkxJTkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWFkdmlzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21hZHZpc2UuYz0xNDQ3PXN0YXRpYyBpbnQgbWFkdmlzZV9pbmplY3RfZXJyb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTQ3Mi1cXG5tbS9tYWR2aXNlLmM6MTQ3MzpcXHRcXHRpZiAobWFkdl9iZWhhdmlvci1cXHUwMDNlYmVoYXZpb3IgPT0gTUFEVl9TT0ZUX09GRkxJTkUpIHtcXG5tbS9tYWR2aXNlLmMtMTQ3NC1cXHRcXHRcXHRwcl9pbmZvKFxcXCJTb2Z0IG9mZmxpbmluZyBwZm4gJSNseCBhdCBwcm9jZXNzIHZpcnR1YWwgYWRkcmVzcyAlI2x4XFxcXG5cXFwiLFxcbi0tXFxubW0vbWFkdmlzZS5jPTE0OTI9c3RhdGljIGJvb2wgaXNfbWVtb3J5X2ZhaWx1cmUoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTQ5NS1cXHRjYXNlIE1BRFZfSFdQT0lTT046XFxubW0vbWFkdmlzZS5jOjE0OTY6XFx0Y2FzZSBNQURWX1NPRlRfT0ZGTElORTpcXG5tbS9tYWR2aXNlLmMtMTQ5Ny1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbm1tL21hZHZpc2UuYz0xNTE4PW1hZHZpc2VfYmVoYXZpb3JfdmFsaWQoaW50IGJlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTE1NTAtI2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxcbm1tL21hZHZpc2UuYzoxNTUxOlxcdGNhc2UgTUFEVl9TT0ZUX09GRkxJTkU6XFxubW0vbWFkdmlzZS5jLTE1NTItXFx0Y2FzZSBNQURWX0hXUE9JU09OOlxcbi0tXFxubW0vbWFkdmlzZS5jPTE4ODc9c3RhdGljIGludCBtYWR2aXNlX2RvX2JlaGF2aW9yKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW5faW4sXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTk0NS0gKlxcdFxcdHdlcmUgY29ycnVwdGVkIGJ5IHVucmVjb3ZlcmFibGUgaGFyZHdhcmUgbWVtb3J5IGZhaWx1cmUuXFxubW0vbWFkdmlzZS5jOjE5NDY6ICogIE1BRFZfU09GVF9PRkZMSU5FIC0gdHJ5IHRvIHNvZnQtb2ZmbGluZSB0aGUgZ2l2ZW4gcmFuZ2Ugb2YgbWVtb3J5Llxcbm1tL21hZHZpc2UuYy0xOTQ3LSAqICBNQURWX01FUkdFQUJMRSAtIHRoZSBhcHBsaWNhdGlvbiByZWNvbW1lbmRzIHRoYXQgS1NNIHRyeSB0byBtZXJnZSBwYWdlcyBpblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1MTozNi41OTk0MjYxMloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzkxMTA0MTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBNZW1vcnkgTGVhayBGaXgqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIHByZXR0eSBzcGVjaWZpYyBpc3N1ZTogdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYE1BRFZfU09GVF9PRkZMSU5FYCwgYHNvZnRfb2ZmbGluZV9wYWdlYCwgYW5kIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgLiBJdCBzZWVtcyBsaWtlIGEgY3J1Y2lhbCBgZm9saW9fcHV0YCBjYWxsIHdhcyBiZWluZyBtaXNzZWQgd2hlbiBgbmV3X29yZGVyYCB3YXNuJ3QgemVyby4gVGhpcyBpcyBhIGNsZWFyIGluZGljYXRvciBvZiBhIGZ1bmN0aW9uYWwgYnVnLiBJJ20gcmVhZGluZyB0aGlzIGFzIGEgZGVmaW5pdGUgbWVtb3J5IGxlYWsgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCBhIHJlZmNvdW50IGxlYWsuIEVpdGhlciB3YXksIGl0J3Mgc29tZXRoaW5nIHdlIG5lZWQgdG8gc3F1YXNoLlxuXG5UaGlzIGRlZmluaXRlbHkgd2FycmFudHMgZnV6emluZyB0byBtYWtlIHN1cmUgdGhpcyBpcyBjb21wbGV0ZWx5IHJlc29sdmVkLlxuXG5Ob3csIGxldCBtZSBqdXN0IGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZml4LiBJIHNlZSB0aGF0IGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIHJlcXVpcmVkLCBidXQgSSdtIGdvaW5nIHRvIGRvdWJsZS1jaGVjayBgbW0vS2NvbmZpZ2AgZm9yIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgb3IgY29udGV4dCBhcm91bmQgYE1FTU9SWV9GQUlMVVJFYC4gV2UgYWx3YXlzIG5lZWQgdG8gYmUgdGhvcm91Z2ggd2l0aCB0aGVzZSBraW5kcyBvZiBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTcyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjUxOjQwLjk5MDUzMjczOFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NjU5MTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1PUllfRkFJTFVSRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9Nzc0PWNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXFxuLS1cXG5tbS9LY29uZmlnLTc3Ni1cXG5tbS9LY29uZmlnOjc3Nzpjb25maWcgTUVNT1JZX0ZBSUxVUkVcXG5tbS9LY29uZmlnLTc3OC1cXHRkZXBlbmRzIG9uIE1NVVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1MTo0MS4wOTcxOTcxMVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjUxOTM4MjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbiwgZnJhbWVkIGFzIGEgZmlyc3QtcGVyc29uIGFjY291bnQ6XG5cbioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IENoYWluIGZvciBNRU1PUllfRkFJTFVSRSoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcm9vdCBjYXVzZSBvZiB0aGlzIGBNRU1PUllfRkFJTFVSRWAuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byB0cmFjZSBiYWNrIGl0cyBkZXBlbmRlbmNpZXMg4oCTIEknbSB0aGlua2luZywgXCJXaGVyZSBkb2VzIHRoaXMgZmFpbHVyZSBvcmlnaW5hdGU/XCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhdXNhbCBjaGFpbi4gVGhpcyBtZWFucyBkaWdnaW5nIGludG8gdGhlIGNvZGUsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGFuZCBzeXN0ZW0gbG9ncyB0byBpZGVudGlmeSB3aGF0IGZhY3RvcnMgbWlnaHQgbGVhZCB0byB0aGlzIHN0YXRlLiBNeSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiBpZGVudGlmeWluZyB0aGUgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCByZXNvdXJjZSBjb250ZW50aW9uIHBvaW50cywgYW5kIGFueSBrbm93biB2dWxuZXJhYmlsaXRpZXMgaW4gdGhlIHN5c3RlbSB0aGF0IGNvdWxkIHRyaWdnZXIgYSBtZW1vcnkgaXNzdWUuIEVzc2VudGlhbGx5LCBJJ20gZ29pbmcgdG8gZm9sbG93IHRoZSBicmVhZGNydW1icyB1bnRpbCBJIGZpbmQgdGhlIGNyaXRpY2FsIHBhdGggdGhhdCBsZWFkcyB0byBgTUVNT1JZX0ZBSUxVUkVgLiBUaGUgZ29hbCBpcyBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlICd3aHknIGJlZm9yZSBJIGNhbiBldmVuIGJlZ2luIHRvIHRhY2tsZSB0aGUgJ2hvdy4nIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgbGlrZSBtZW1vcnkgYWxsb2NhdGlvbiBlcnJvcnMsIGxlYWtzLCBleGNlc3NpdmUgcGFnaW5nLCBvciBhbnkgb3RoZXIgYW5vbWFseSB0aGF0IGNvdWxkIHBvaW50IHRvIHRoZSBwcm9ibGVtJ3Mgc291cmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDAyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTE6NDQuMzQ5MTM5NjA2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc3NyxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc3NzpcXHRjb25maWcgTUVNT1JZX0ZBSUxVUkVcXG4gNzc4OlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuIDc3OTpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcXG4gNzgwOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSByZWNvdmVyeSBmcm9tIGhhcmR3YXJlIG1lbW9yeSBlcnJvcnNcXFwiXFxuIDc4MTpcXHRcXHRzZWxlY3QgSU5URVJWQUxfVFJFRVxcbiA3ODI6XFx0XFx0aGVscFxcbiA3ODM6XFx0XFx0ICBFbmFibGVzIGNvZGUgdG8gcmVjb3ZlciBmcm9tIHNvbWUgbWVtb3J5IGZhaWx1cmVzIG9uIHN5c3RlbXNcXG4gNzg0OlxcdFxcdCAgd2l0aCBNQ0EgcmVjb3ZlcnkuIFRoaXMgYWxsb3dzIGEgc3lzdGVtIHRvIGNvbnRpbnVlIHJ1bm5pbmdcXG4gNzg1OlxcdFxcdCAgZXZlbiB3aGVuIHNvbWUgb2YgaXRzIG1lbW9yeSBoYXMgdW5jb3JyZWN0ZWQgZXJyb3JzLiBUaGlzIHJlcXVpcmVzXFxuIDc4NjpcXHRcXHQgIHNwZWNpYWwgaGFyZHdhcmUgc3VwcG9ydCBhbmQgdHlwaWNhbGx5IEVDQyBtZW1vcnkuXFxuIDc4NzpcXHRcXG4gNzg4OlxcdGNvbmZpZyBIV1BPSVNPTl9JTkpFQ1RcXG4gNzg5OlxcdFxcdHRyaXN0YXRlIFxcXCJIV1BvaXNvbiBwYWdlcyBpbmplY3RvclxcXCJcXG4gNzkwOlxcdFxcdGRlcGVuZHMgb24gTUVNT1JZX0ZBSUxVUkUgXFx1MDAyNlxcdTAwMjYgREVCVUdfS0VSTkVMIFxcdTAwMjZcXHUwMDI2IFBST0NfRlNcXG4gNzkxOlxcdFxcdHNlbGVjdCBQUk9DX1BBR0VfTU9OSVRPUlxcbiA3OTI6XFx0XFxuIDc5MzpcXHRjb25maWcgTk9NTVVfSU5JVElBTF9UUklNX0VYQ0VTU1xcbiA3OTQ6XFx0XFx0aW50IFxcXCJUdXJuIG9uIG1tYXAoKSBleGNlc3Mgc3BhY2UgdHJpbW1pbmcgYmVmb3JlIGJvb3RpbmdcXFwiXFxuIDc5NTpcXHRcXHRkZXBlbmRzIG9uICFNTVVcXG4gNzk2OlxcdFxcdGRlZmF1bHQgMVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1MTo0NC4zNDkyODQwOTdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjczMjEzMDE2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IEZhaWx1cmUgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgTUVNT1JZX0ZBSUxVUkVgIHNpdHVhdGlvbi4gSXQncyBjbGVhciB0aGF0IGl0IGhpbmdlcyBvbiBib3RoIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBVbml0LCBvciBgTU1VYCwgYW5kIHdoZXRoZXIgdGhlIHVuZGVybHlpbmcgYXJjaGl0ZWN0dXJlIGFjdHVhbGx5IHN1cHBvcnRzIG1lbW9yeSBmYWlsdXJlLCB3aGljaCBpcyBjb250cm9sbGVkIGJ5IGBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFYC4gTWFrZXMgc2Vuc2UsIGBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFYCBpcyB0aGUgYXJjaGl0ZWN0dXJlJ3MgY2FsbCwgc28gdGhhdCdzIHdoZXJlIEkgbmVlZCB0byBzdGFydC4gQnV0IGJlZm9yZSBJIGdvIHRvbyBkZWVwLCBJIHNob3VsZCBwcm9iYWJseSBzY2FuIGZvciBhbnkgb3RoZXIgY3J1Y2lhbCBjb25maWdzIHRoYXQgcGxheSBhIHJvbGUgaGVyZS5cblxuVGhlIHBhdGNoIGl0c2VsZiBzZWVtcyB0byBiZSB0b3VjaGluZyBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYC4gVGhhdCByaW5ncyBhIGJlbGwuLi4gdGhhdCdzIHRoZSBUSFAgcGFnZSBoYW5kbGVyLCBpc24ndCBpdD8gU28sIHRvIGFjdHVhbGx5IHRyaWdnZXIgdGhpcyBjb2RlLCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCB3b3VsZCBhbG1vc3QgY2VydGFpbmx5IGhhdmUgdG8gYmUgZW5hYmxlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dC5cblxuTGV0J3MgZGlnIGludG8gYG1tL21lbW9yeS1mYWlsdXJlLmNgIGFuZCBzcGVjaWZpY2FsbHkgbG9vayBhdCBgdHJ5X3RvX3NwbGl0X3RocF9wYWdlYC4gVGhhdCdsbCBjb25maXJtIGlmIHRoaXMgVEhQIGludGVyYWN0aW9uIGlzIGNlbnRyYWwgdG8gdGhlIHByb2JsZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NjgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1MTo1MS4wODE0MTY3OTJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTM0NDk3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfdG9fc3BsaXRfdGhwX3BhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtb3J5LWZhaWx1cmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnktZmFpbHVyZS5jPTE2Mjk9c3RhdGljIGludCBpZGVudGlmeV9wYWdlX3N0YXRlKHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZSAqcCxcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTY1Ni0gKi9cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE2NTc6c3RhdGljIGludCB0cnlfdG9fc3BsaXRfdGhwX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNjU4LVxcdFxcdGJvb2wgcmVsZWFzZSlcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MjMzMD1pbnQgbWVtb3J5X2ZhaWx1cmUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQ1OS1cXHRcXHRmb2xpb19zZXRfaGFzX2h3cG9pc29uZWQoZm9saW8pO1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjQ2MDpcXHRcXHRlcnIgPSB0cnlfdG9fc3BsaXRfdGhwX3BhZ2UocCwgbmV3X29yZGVyLCAvKiByZWxlYXNlPSAqLyBmYWxzZSk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNDYxLVxcdFxcdC8qXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTI3ODM9c3RhdGljIGludCBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI4MDgtXFx0XFx0ICogRHJvcCB0aGUgcmVmZXJlbmNlIG9idGFpbmVkIHVwb24gZW50cnk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyODA5OlxcdFxcdCAqIHRyeV90b19zcGxpdF90aHBfcGFnZSguLi4sIHJlbGVhc2U9dHJ1ZSkgaGFuZGxlcyByZWZjb3VudGluZyBpdHNlbGZcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI4MTAtXFx0XFx0ICogd2hlbiB0aGUgc3BsaXQgZmFpbHMuXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI4MTctXFx0XFx0fVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjgxODpcXHRcXHRpZiAodHJ5X3RvX3NwbGl0X3RocF9wYWdlKHBhZ2UsIC8qIG5ld19vcmRlcj0gKi8gMCxcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI4MTktXFx0XFx0XFx0XFx0XFx0IC8qIHJlbGVhc2U9ICovIHRydWUpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjUxOjUxLjE4Mjc2NTc1M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODEyMDIwODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKipcblxuT2theSwgbGV0J3Mgc2VlLiBNeSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBpcyB0aGF0IGB0cnlfdG9fc3BsaXRfdGhwX3BhZ2VgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgd2hldGhlciBpdCdzIGNvbXBpbGVkIGNvbmRpdGlvbmFsbHkgb3Igbm90LiBUaGlzIGlzIGEgY3J1Y2lhbCBzdGVwIGluIHVuZGVyc3RhbmRpbmcgaXRzIG92ZXJhbGwgYmVoYXZpb3IgYW5kIGl0cyBpbXBhY3Qgb24gcGVyZm9ybWFuY2UgYW5kIHBvcnRhYmlsaXR5LiBBIHNpbXBsZSBjaGVjayB3aWxsIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIHRoYXQgSSBuZWVkIHRvIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzc5NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjUxOjUzLjk5NDc4ODYxNFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtb3J5LWZhaWx1cmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjU3LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjU3OlxcdHN0YXRpYyBpbnQgdHJ5X3RvX3NwbGl0X3RocF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbjE2NTg6XFx0XFx0XFx0Ym9vbCByZWxlYXNlKVxcbjE2NTk6XFx0e1xcbjE2NjA6XFx0XFx0aW50IHJldDtcXG4xNjYxOlxcdFxcbjE2NjI6XFx0XFx0bG9ja19wYWdlKHBhZ2UpO1xcbjE2NjM6XFx0XFx0cmV0ID0gc3BsaXRfaHVnZV9wYWdlX3RvX29yZGVyKHBhZ2UsIG5ld19vcmRlcik7XFxuMTY2NDpcXHRcXHR1bmxvY2tfcGFnZShwYWdlKTtcXG4xNjY1OlxcdFxcbjE2NjY6XFx0XFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiByZWxlYXNlKVxcbjE2Njc6XFx0XFx0XFx0cHV0X3BhZ2UocGFnZSk7XFxuMTY2ODpcXHRcXG4xNjY5OlxcdFxcdHJldHVybiByZXQ7XFxuMTY3MDpcXHR9XFxuMTY3MTpcXHRcXG4xNjcyOlxcdHN0YXRpYyB2b2lkIHVubWFwX2FuZF9raWxsKHN0cnVjdCBsaXN0X2hlYWQgKnRvX2tpbGwsIHVuc2lnbmVkIGxvbmcgcGZuLFxcbjE2NzM6XFx0XFx0XFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgaW5kZXgsIGludCBmbGFncylcXG4xNjc0OlxcdHtcXG4xNjc1OlxcdFxcdHN0cnVjdCB0b19raWxsICp0aztcXG4xNjc2OlxcdFxcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IDA7XFxuMTY3NzpcXHRcXG4xNjc4OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkodGssIHRvX2tpbGwsIG5kKVxcbjE2Nzk6XFx0XFx0XFx0aWYgKHRrLVxcdTAwM2VzaXplX3NoaWZ0KVxcbjE2ODA6XFx0XFx0XFx0XFx0c2l6ZSA9IG1heChzaXplLCAxVUwgXFx1MDAzY1xcdTAwM2MgdGstXFx1MDAzZXNpemVfc2hpZnQpO1xcbjE2ODE6XFx0XFxuMTY4MjpcXHRcXHRpZiAoc2l6ZSkge1xcbjE2ODM6XFx0XFx0XFx0LypcXG4xNjg0OlxcdFxcdFxcdCAqIFVubWFwIHRoZSBsYXJnZXN0IG1hcHBpbmcgdG8gYXZvaWQgYnJlYWtpbmcgdXAgZGV2aWNlLWRheFxcbjE2ODU6XFx0XFx0XFx0ICogbWFwcGluZ3Mgd2hpY2ggYXJlIGNvbnN0YW50IHNpemUuIFRoZSBhY3R1YWwgc2l6ZSBvZiB0aGVcXG4xNjg2OlxcdFxcdFxcdCAqIG1hcHBpbmcgYmVpbmcgdG9ybiBkb3duIGlzIGNvbW11bmljYXRlZCBpbiBzaWdpbmZvLCBzZWVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTE6NTMuOTk0OTUxNTg0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMjA5MjM3MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYHNwbGl0X2h1Z2VfcGFnZV90b19vcmRlcmAqKlxuXG5SaWdodCwgbGV0J3Mgc2VlLiBUaGUgY29kZSBpcyB1c2luZyBgc3BsaXRfaHVnZV9wYWdlX3RvX29yZGVyYC4gVGhpcyBpcyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHRoZSBjb250ZXh0IGhlcmUuIEknbSBhc3N1bWluZyB3ZSdyZSBkZWFsaW5nIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQsIGxpa2VseSByZWxhdGVkIHRvIE5VTUEgYXJjaGl0ZWN0dXJlcyBvciBvcHRpbWl6YXRpb25zIGZvciBsYXJnZSBtZW1vcnkgcGFnZXMuIFRoZSBmdW5jdGlvbiBuYW1lIGl0c2VsZiBzdWdnZXN0cyBhIHByb2Nlc3Mgb2YgYnJlYWtpbmcgZG93biBhIGxhcmdlIHBhZ2UgaW50byBzbWFsbGVyLCBwb3RlbnRpYWxseSBtb3JlIG1hbmFnZWFibGUgdW5pdHMsIGFuZCBhcnJhbmdpbmcgdGhlbSBpbiBhIHBhcnRpY3VsYXIgb3JkZXIuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgcmVsYXRlcyB0byB0aGUgb3ZlcmFsbCBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVneS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYHNwbGl0X2h1Z2VfcGFnZV90b19vcmRlcmAgbm93LiBXaGF0IGFyZSB0aGUgaW5wdXRzPyBXaGF0J3MgdGhlIGludGVuZGVkIG91dHB1dD8gSXMgdGhpcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgYSB3b3JrYXJvdW5kIGZvciBoYXJkd2FyZSBsaW1pdGF0aW9ucywgb3IgcGFydCBvZiBhIG1vcmUgY29tcGxleCBtZW1vcnkgbWFuYWdlbWVudCBhbGdvcml0aG0/IEknbSBhbnRpY2lwYXRpbmcgdGhhdCB0aGlzIG1pZ2h0IGJlIGRlYWxpbmcgd2l0aCBmcmFnbWVudGF0aW9uLCBvciBwb3RlbnRpYWxseSByZWR1Y2luZyB0aGUgb3ZlcmhlYWQgb2YgYWxsb2NhdGluZyBodWdlIHBhZ2VzIHVuZGVyIHNwZWNpZmljIGNpcmN1bXN0YW5jZXMuIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM3MiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTE6NTkuMzE1ODgwNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxOTA4Mzk3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzcGxpdF9odWdlX3BhZ2VfdG9fb3JkZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTQxMj1zdGF0aWMgaW5saW5lIGludCBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQxNi19XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NDE3OnN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZV90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG5ld19vcmRlcilcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00MTgte1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NjMwPXNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNjM1LX1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo2MzY6c3RhdGljIGlubGluZSBpbnQgc3BsaXRfaHVnZV9wYWdlX3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTYzNy17XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTE2NTc9c3RhdGljIGludCB0cnlfdG9fc3BsaXRfdGhwX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE2NjItXFx0bG9ja19wYWdlKHBhZ2UpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTY2MzpcXHRyZXQgPSBzcGxpdF9odWdlX3BhZ2VfdG9fb3JkZXIocGFnZSwgbmV3X29yZGVyKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE2NjQtXFx0dW5sb2NrX3BhZ2UocGFnZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjUyOjAxLjUzNDk3MDI4N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODQxOTk0ODkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgSHVnZSBQYWdlIERlZmluaXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhcnRpY3VsYXIgbWFjcm8gb3IgZGVmaW5pdGlvbi4gTXkgZmlyc3QgbW92ZSBpcyB0byBsb2NhdGUgaXRzIGRlZmluaXRpdmUgZGVjbGFyYXRpb24uIFRoZSBoaW50IHBvaW50cyBtZSBkaXJlY3RseSB0byBgaW5jbHVkZS9saW51eC9odWdlX21tLmhgLiBUaGF0IG1ha2VzIHNlbnNlOyBodWdlIHBhZ2UgZGVmaW5pdGlvbnMgYXJlIHR5cGljYWxseSB0dWNrZWQgYXdheSBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgaGVhZGVyLiBOb3csIEknbSBub3QganVzdCBnb2luZyB0byAqYXNzdW1lKiBJIGtub3cgd2hhdCBpdCBkb2VzIGJhc2VkIG9uIHRoZSBmaWxlIG5hbWUuIFRoZSBuZXh0IGNyaXRpY2FsIHN0ZXAgaXMgdG8gcXVpY2tseSBzY2FuIGZvciBhbnkgcHJlcHJvY2Vzc29yIGNvbmRpdGlvbmFscywgcGFydGljdWxhcmx5IHRoZSBgI2lmZGVmYCBkaXJlY3RpdmVzIHRoYXQgbWlnaHQgY29udHJvbCBpdHMgYXZhaWxhYmlsaXR5IG9yIG1lYW5pbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0cyBpbiB3aGljaCB0aGlzIHRoaW5nIGlzIGFjdHVhbGx5IGRlZmluZWQgYW5kICpob3cqIGl0J3MgZGVmaW5lZCwgYmVmb3JlIEkgY2FuIG1ha2UgYW55IGFzc3VtcHRpb25zIGFib3V0IGl0cyB1c2FnZSBvciBwdXJwb3NlLiBBbnkgYCNpZmRlZmAgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50IGluIHRlbGxpbmcgbWUgd2hlbiBhbmQgd2hlcmUgdGhlIGRlZmluaXRpb24gaXMgdmFsaWQuIEknbGwgbmVlZCB0byBrbm93IHdoZXRoZXIgaXRzIGJlaGF2aW9yIGNoYW5nZXMgdW5kZXIgZGlmZmVyZW50IGtlcm5lbCBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTAyMCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjUyOjA1LjM3Njk2NzMxOFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9odWdlX21tLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNDAwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDAwOlxcdH07XFxuIDQwMTpcXHRcXG4gNDAyOlxcdGludCBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxcbiA0MDM6XFx0XFx0XFx0dW5zaWduZWQgaW50IG5ld19vcmRlcik7XFxuIDQwNDpcXHRpbnQgZm9saW9fc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcik7XFxuIDQwNTpcXHR1bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4gNDA2OlxcdGludCBzcGxpdF9mb2xpb190b19saXN0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpO1xcbiA0MDc6XFx0aW50IGZvbGlvX2NoZWNrX3NwbGl0dGFibGUoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG4gNDA4OlxcdFxcdFxcdFxcdCAgIGVudW0gc3BsaXRfdHlwZSBzcGxpdF90eXBlKTtcXG4gNDA5OlxcdGludCBmb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4gNDEwOlxcdFxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpO1xcbiA0MTE6XFx0XFxuIDQxMjpcXHRzdGF0aWMgaW5saW5lIGludCBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcXG4gNDEzOlxcdFxcdFxcdHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXFxuIDQxNDpcXHR7XFxuIDQxNTpcXHRcXHRyZXR1cm4gX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihwYWdlLCBsaXN0LCBuZXdfb3JkZXIpO1xcbiA0MTY6XFx0fVxcbiA0MTc6XFx0c3RhdGljIGlubGluZSBpbnQgc3BsaXRfaHVnZV9wYWdlX3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxcbiA0MTg6XFx0e1xcbiA0MTk6XFx0XFx0cmV0dXJuIHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHBhZ2UsIE5VTEwsIG5ld19vcmRlcik7XFxuIDQyMDpcXHR9XFxuIDQyMTpcXHRcXG4gNDIyOlxcdHN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4gNDIzOlxcdHtcXG4gNDI0OlxcdFxcdHJldHVybiBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihwYWdlLCBOVUxMLCAwKTtcXG4gNDI1OlxcdH1cXG4gNDI2OlxcdFxcbiA0Mjc6XFx0aW50IGZvbGlvX21lbWNnX2FsbG9jX2RlZmVycmVkKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiA0Mjg6XFx0XFxuIDQyOTpcXHR2b2lkIGRlZmVycmVkX3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcGFydGlhbGx5X21hcHBlZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjUyOjA1LjM3NzA4MDU1OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTc4NDg4NDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBmaWd1cmluZyBvdXQgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb24gZW5hYmxlcyB0aGF0IHNwZWNpZmljIGxpbmU6XG5cbioqUGlucG9pbnRpbmcgdGhlIENvbmZpZ3VyYXRpb24gU291cmNlKipcblxuQWxyaWdodCwgdGhlIG9iamVjdGl2ZSBoZXJlIGlzIHRvIGRldGVybWluZSB0aGUgS2NvbmZpZyBvcHRpb24gdGhhdCB1bHRpbWF0ZWx5IHJlc3VsdHMgaW4gdGhlIGluY2x1c2lvbiBvZiBsaW5lIDQwMCB3aXRoaW4gYGluY2x1ZGUvbGludXgvaHVnZV9tbS5oYC4gSSd2ZSBnb3QgdG8gdHJhY2UgdGhpcyBiYWNrIHRocm91Z2ggdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdG8gYXBwcm9hY2ggdGhpcyBpbiBhIG1ldGhvZGljYWwgd2F5LiBJJ20gZ29pbmcgdG8gbGV2ZXJhZ2UgbXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUga2VybmVsJ3MgYnVpbGQgc3lzdGVtIGFuZCBjb25maWd1cmF0aW9uIG1lY2hhbmljcyB0byBnZXQgdG8gdGhlIHJvb3QgY2F1c2UsIGFuZCB0aGVuIEknbGwgY29uc2lkZXIgaG93IGJlc3QgdG8gcHJlc2VudCB0aGF0IGluZm9ybWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODQzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1MjowOC45NTU1NzE2NzlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MzgyNjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD0xMjc9ZW51bSBtdGhwX3N0YXRfaXRlbSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0xNTItXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6MTUzOiNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfU1lTRlMpXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMTU0LXN0cnVjdCBtdGhwX3N0YXQge1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9MTc4PXN0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF9tdGhwX3N0YXQoaW50IG9yZGVyLCBlbnVtIG10aHBfc3RhdF9pdGVtIGl0ZW0pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0xODItXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6MTgzOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0xODQtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD01Nzc9dm9pZCBtYXBfYW5vbl9mb2xpb19wbWRfbm9wZihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBwbWRfdCAqcG1kLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTc5LVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjU4MDojZWxzZSAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC01ODEtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD03ODk9c3RhdGljIGlubGluZSBib29sIHBtZF9pc19odWdlKHBtZF90IHBtZClcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTc5Mi19XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NzkzOiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC03OTQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjUyOjA5LjAxMTk2NDEwNFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDQ5NjgwNjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgSHVnZSBQYWdlcyBhbmQgU29mdCBPZmZsaW5lIFBhZ2VzKipcblxuQWxyaWdodCwgcmlnaHQgb2ZmIHRoZSBiYXQsIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZXNzZW50aWFsIGZvciB3aGF0IEknbSB3b3JraW5nIG9uLiBOb3csIGxldCBtZSBjaXJjbGUgYmFjayBhbmQgZG91YmxlLWNoZWNrIG15IHVuZGVyc3RhbmRpbmcgYW5kIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoYXQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAgdmFyaWFibGUuIFRoZXJlJ3MgcHJvYmFibHkgYW4gaW50ZXJhY3Rpb24gdGhlcmUgdGhhdCBJIG5lZWQgdG8gcmUtZXZhbHVhdGUgYmFzZWQgb24gdGhlIGh1Z2UgcGFnZSBjb25maWd1cmF0aW9uLiBMZXQncyBtYWtlIHN1cmUgSSdtIGNvbm5lY3RpbmcgYWxsIHRoZSBkb3RzIGNvcnJlY3RseSBpbiB0aGlzIGltcGxlbWVudGF0aW9uLiBJdCdzIHRpbWUgZm9yIGEgbW9yZSBncmFudWxhciBpbnNwZWN0aW9uIG9mIHRoYXQgc3BlY2lmaWMgYXNwZWN0LCBnaXZlbiB0aGUgYnJvYWRlciBjb250ZXh0IG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0NTIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1MjoxMi40NjE2NDgxNTZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM5MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbW9yeS1mYWlsdXJlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjc4MyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjc4MzpcXHRzdGF0aWMgaW50IHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4yNzg0OlxcdHtcXG4yNzg1OlxcdFxcdGxvbmcgcmV0ID0gMDtcXG4yNzg2OlxcdFxcdHVuc2lnbmVkIGxvbmcgcGZuID0gcGFnZV90b19wZm4ocGFnZSk7XFxuMjc4NzpcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcXG4yNzg4OlxcdFxcdGNoYXIgY29uc3QgKm1zZ19wYWdlW10gPSB7XFxcInBhZ2VcXFwiLCBcXFwiaHVnZXBhZ2VcXFwifTtcXG4yNzg5OlxcdFxcdGJvb2wgaHVnZSA9IGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbyk7XFxuMjc5MDpcXHRcXHRib29sIGlzb2xhdGVkO1xcbjI3OTE6XFx0XFx0TElTVF9IRUFEKHBhZ2VsaXN0KTtcXG4yNzkyOlxcdFxcdHN0cnVjdCBtaWdyYXRpb25fdGFyZ2V0X2NvbnRyb2wgbXRjID0ge1xcbjI3OTM6XFx0XFx0XFx0Lm5pZCA9IE5VTUFfTk9fTk9ERSxcXG4yNzk0OlxcdFxcdFxcdC5nZnBfbWFzayA9IEdGUF9VU0VSIHwgX19HRlBfTU9WQUJMRSB8IF9fR0ZQX1JFVFJZX01BWUZBSUwsXFxuMjc5NTpcXHRcXHRcXHQucmVhc29uID0gTVJfTUVNT1JZX0ZBSUxVUkUsXFxuMjc5NjpcXHRcXHR9O1xcbjI3OTc6XFx0XFxuMjc5ODpcXHRcXHRpZiAoIWh1Z2UgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9sYXJnZShmb2xpbykpIHtcXG4yNzk5OlxcdFxcdFxcdGNvbnN0IGludCBuZXdfb3JkZXIgPSBtaW5fb3JkZXJfZm9yX3NwbGl0KGZvbGlvKTtcXG4yODAwOlxcdFxcbjI4MDE6XFx0XFx0XFx0LypcXG4yODAyOlxcdFxcdFxcdCAqIElmIG5ld19vcmRlciAodGFyZ2V0IHNwbGl0IG9yZGVyKSBpcyBub3QgMCwgZG8gbm90IHNwbGl0IHRoZVxcbjI4MDM6XFx0XFx0XFx0ICogZm9saW8gYXQgYWxsIHRvIHJldGFpbiB0aGUgc3RpbGwgYWNjZXNzaWJsZSBsYXJnZSBmb2xpby5cXG4yODA0OlxcdFxcdFxcdCAqIE5PVEU6IGlmIG1pbmltaXppbmcgdGhlIG51bWJlciBvZiBzb2Z0IG9mZmxpbmUgcGFnZXMgaXNcXG4yODA1OlxcdFxcdFxcdCAqIHByZWZlcnJlZCwgc3BsaXQgaXQgdG8gbm9uLXplcm8gbmV3X29yZGVyIGxpa2UgaXQgaXMgZG9uZSBpblxcbjI4MDY6XFx0XFx0XFx0ICogbWVtb3J5X2ZhaWx1cmUoKS5cXG4yODA3OlxcdFxcdFxcdCAqXFxuMjgwODpcXHRcXHRcXHQgKiBEcm9wIHRoZSByZWZlcmVuY2Ugb2J0YWluZWQgdXBvbiBlbnRyeTtcXG4yODA5OlxcdFxcdFxcdCAqIHRyeV90b19zcGxpdF90aHBfcGFnZSguLi4sIHJlbGVhc2U9dHJ1ZSkgaGFuZGxlcyByZWZjb3VudGluZyBpdHNlbGZcXG4yODEwOlxcdFxcdFxcdCAqIHdoZW4gdGhlIHNwbGl0IGZhaWxzLlxcbjI4MTE6XFx0XFx0XFx0ICovXFxuMjgxMjpcXHRcXHRcXHRpZiAobmV3X29yZGVyKSB7XFxuMjgxMzpcXHRcXHRcXHRcXHRwcl9pbmZvKFxcXCIlI2x4OiBvcmRlci0lZCBmb2xpbyBjYW5ub3Qgc29mdCBvZmZsaW5lXFxcXG5cXFwiLFxcbjI4MTQ6XFx0XFx0XFx0XFx0XFx0cGZuLCBuZXdfb3JkZXIpO1xcbjI4MTU6XFx0XFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4yODE2OlxcdFxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuMjgxNzpcXHRcXHRcXHR9XFxuMjgxODpcXHRcXHRcXHRpZiAodHJ5X3RvX3NwbGl0X3RocF9wYWdlKHBhZ2UsIC8qIG5ld19vcmRlcj0gKi8gMCxcXG4yODE5OlxcdFxcdFxcdFxcdFxcdFxcdCAvKiByZWxlYXNlPSAqLyB0cnVlKSkge1xcbjI4MjA6XFx0XFx0XFx0XFx0cHJfaW5mbyhcXFwiJSNseDogdGhwIHNwbGl0IGZhaWxlZFxcXFxuXFxcIiwgcGZuKTtcXG4yODIxOlxcdFxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuMjgyMjpcXHRcXHRcXHR9XFxuMjgyMzpcXHRcXHRcXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuMjgyNDpcXHRcXHR9XFxuMjgyNTpcXHRcXG4yODI2OlxcdFxcdGZvbGlvX2xvY2soZm9saW8pO1xcbjI4Mjc6XFx0XFx0aWYgKCFodWdlKVxcbjI4Mjg6XFx0XFx0XFx0Zm9saW9fd2FpdF93cml0ZWJhY2soZm9saW8pO1xcbjI4Mjk6XFx0XFx0aWYgKFBhZ2VIV1BvaXNvbihwYWdlKSkge1xcbjI4MzA6XFx0XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4yODMxOlxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuMjgzMjpcXHRcXHRcXHRwcl9pbmZvKFxcXCIlI2x4OiBwYWdlIGFscmVhZHkgcG9pc29uZWRcXFxcblxcXCIsIHBmbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjUyOjEyLjQ2MTk5MTA5NloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjg3MTI1NTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRm9saW8gYW5kIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gdGhlIGNvZGUgaGl0cyB0aGlzIHNwZWNpZmljIHBhdGg6IGAhaHVnZSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9sYXJnZShmb2xpbylgLiBSaWdodCwgdGhhdCBjbGVhcmx5IGluZGljYXRlcyB3ZSdyZSBkZWFsaW5nIHdpdGggYSBsYXJnZSBmb2xpbywgc3BlY2lmaWNhbGx5IGEgVHJhbnNwYXJlbnQgSHVnZSBQYWdlIChUSFApLCBidXQgKm5vdCogYSBodWdldGxiIHBhZ2UuIFRoYXQncyB0aGUga2V5IGRpc3RpbmN0aW9uLiBHaXZlbiB0aGlzIHNjZW5hcmlvLCB0aGUgc3lzdGVtICoqYWJzb2x1dGVseSoqIG5lZWRzIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGVuYWJsZWQuIE5vIHN1cnByaXNlcyB0aGVyZS4gQW5kLCBjb25zaWRlcmluZyB0aGUgY29udGV4dCwgYENPTkZJR19NRU1PUllfRkFJTFVSRWAgaXMgYWxzbyBnb2luZyB0byBiZSBhIHJlcXVpcmVtZW50IGZvciBoYW5kbGluZyBwb3RlbnRpYWwgbWVtb3J5IGZhaWx1cmVzIHdpdGhpbiB0aGUgVEhQIGNvbnRleHQuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgZGVwZW5kZW50IGNvbmZpZ3VyYXRpb25zLiBJJ20gdGhpbmtpbmcsIGBDT05GSUdfTUlHUkFUSU9OYCBpcyBhbG1vc3QgY2VydGFpbmx5IG5lZWRlZC4gVGhlIHByZXNlbmNlIG9mIGBzdHJ1Y3QgbWlncmF0aW9uX3RhcmdldF9jb250cm9sIG10Y2Agc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIHBhZ2UgbWlncmF0aW9uLiBCZXR0ZXIgaGVhZCBvdmVyIHRvIGBtbS9tZW1vcnktZmFpbHVyZS5jYCB0byBjb25maXJtIG15IHN1c3BpY2lvbiBhbmQgc2VlIGhvdyBgQ09ORklHX01JR1JBVElPTmAgaXMgdGllZCBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NzYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1MjoxNi43NDkxMjAyMjJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2OTU3OTk2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTUlHUkFUSU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbW9yeS1mYWlsdXJlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjUyOjE2LjgwNjA4NTUyOFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDU3Mjg3Mzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG4qKkludmVzdGlnYXRpbmcgYSBNaXNzaW5nIE1pZ3JhdGlvbiBDb25maWd1cmF0aW9uKipcblxuSG1tLCBzb21ldGhpbmcgc2VlbXMgb2ZmLiBJIHdhcyBqdXN0IGxvb2tpbmcgYXQgYG1tL21lbW9yeS1mYWlsdXJlLmNgLCBhbmQgaXQncyBub3QgZ3VhcmRlZCBieSBhbnkgYENPTkZJR19NSUdSQVRJT05gIGlmZGVmcz8gVGhhdCdzIGEgYml0IHN1cnByaXNpbmcuIEkgdGhvdWdodCB0aG9zZSBmZWF0dXJlcyB3ZXJlIG9mdGVuIHRpZWQgdG9nZXRoZXIuIExldCBtZSBqdXN0IGRvdWJsZSBjaGVjayB0aGUgYG1tL0tjb25maWdgIGZpbGUgYWdhaW4uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBzb21ldGhpbmcgcmVsYXRlZCB0byBgTUVNT1JZX0ZBSUxVUkVgIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIG1pZ3JhdGlvbiBvcHRpb25zLiBUaGVyZSBtaWdodCBiZSBzb21lIHN1YnRsZSBjb25kaXRpb25hbCBkZXBlbmRlbmN5IEkgb3Zlcmxvb2tlZCwgb3IgcGVyaGFwcyBpdCdzIGhhbmRsZWQgZGlmZmVyZW50bHkgdGhhbiBJIGluaXRpYWxseSBhc3N1bWVkLiBCZXR0ZXIgdG8gYmUgY2VydGFpbiBhbmQgbm90IGp1bXAgdG8gYW55IGluY29ycmVjdCBhc3N1bXB0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4NzAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1MjoyMS44NjMzNzg2MTRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NTg3MzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1PUllfRkFJTFVSRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9Nzc0PWNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXFxuLS1cXG5tbS9LY29uZmlnLTc3Ni1cXG5tbS9LY29uZmlnOjc3Nzpjb25maWcgTUVNT1JZX0ZBSUxVUkVcXG5tbS9LY29uZmlnLTc3OC1cXHRkZXBlbmRzIG9uIE1NVVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1MjoyMS45MjE5NzUyNDlaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMwODQ5MTkxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgTWlncmF0aW9uIENvbmZpZ3VyYXRpb24gaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBgTUlHUkFUSU9OYCB3aXRoaW4gdGhlIGtlcm5lbCdzIGJ1aWxkIHN5c3RlbS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSB0eXBpY2FsIHBsYWNlIHdoZXJlIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgYXJlIGRlZmluZWQsIGFuZCBgTUlHUkFUSU9OYCBzb3VuZHMgbGlrZSBpdCdkIGZhbGwgc3F1YXJlbHkgd2l0aGluIHRoYXQgZG9tYWluLiBJdCdzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbnRyb2xzIHRoaXMgZmVhdHVyZSDigJMgaXMgaXQgYSBib29sZWFuIG9wdGlvbiwgYW4gaW50ZWdlciwgcGVyaGFwcz8gQXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXM/IFdoYXQgb3RoZXIgb3B0aW9ucyBhcmUgcmVsYXRlZD8gSSdsbCBuZWVkIHRvIGNhcmVmdWxseSBleGFtaW5lIHRoYXQgZmlsZS4gSWYgaXQncyBub3QgdGhlcmUgSSdsbCBoYXZlIHRvIGJyb2FkZW4gbXkgc2VhcmNoIHRvIG90aGVyIHJlbGV2YW50IGBLY29uZmlnYCBmaWxlcywgYnV0IGZvciBub3csIGBtbS9LY29uZmlnYCBpcyB0aGUgYmVzdCBiZXQuIExldCdzIHNlZSB3aGF0IHdlIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTY1LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTI6MjUuMjMwNDcwNjIxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzUzOTczNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUlHUkFUSU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz02ODU9Y29uZmlnIE5VTUFfTUlHUkFUSU9OXFxuLS1cXG5tbS9LY29uZmlnLTY5NS1cXG5tbS9LY29uZmlnOjY5Njpjb25maWcgTUlHUkFUSU9OXFxubW0vS2NvbmZpZy02OTctXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1MjoyNS4yOTQwMTQ1MTZaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTcwMjM0NzAwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGBtbS9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgTUlHUkFUSU9OYCBvcHRpb25zLlxuXG4qKkRpdmluZyBpbnRvIGBtbS9LY29uZmlnYCBhbmQgdGhlIGBNSUdSQVRJT05gIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBtbS9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IHplcm9pbmcgaW4gb24gYW55dGhpbmcgcmVsYXRlZCB0byBtZW1vcnkgbWlncmF0aW9uLiBUaGlzIGlzIGEgY3JpdGljYWwgYXJlYSwgZXNwZWNpYWxseSBmb3Igc3lzdGVtcyB0aGF0IG5lZWQgdG8gZHluYW1pY2FsbHkgbWFuYWdlIG1lbW9yeSwgTlVNQSBzZXR1cHMsIG9yIGhhbmRsZSBvbmxpbmUgbWVtb3J5IHJlc2l6aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGFuZCBob3cgdGhleSBpbmZsdWVuY2UgdGhlIGtlcm5lbCdzIGJlaGF2aW9yLiBUaGUgYE1JR1JBVElPTmAgb3B0aW9ucyBhcmUgY2xlYXJseSB0aGUgcGxhY2UgdG8gc3RhcnQuXG5cbkknbSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyByZWxhdGVkIHRvIHRoZSBjb3JlIG1pZ3JhdGlvbiBmdW5jdGlvbmFsaXRpZXM6IHBhZ2UgbWlncmF0aW9uLCBub2RlIG1pZ3JhdGlvbiwgb25saW5lIG1lbW9yeSBhZGQvcmVtb3ZlLiBJJ20gaG9waW5nIHRvIHNlZSBjbGVhciBkZXBlbmRlbmNpZXMgYmV0d2VlbiB0aGVzZSBvcHRpb25zLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSB1bmRlcmx5aW5nIGFyY2hpdGVjdHVyZSwgTlVNQSBzdXBwb3J0LCBhbmQgaG90cGx1ZyBjYXBhYmlsaXRpZXMuIEknbSBhbHNvIGxvb2tpbmcgZm9yIGFueSBjb25kaXRpb25hbCBjb25maWd1cmF0aW9ucywgZmVhdHVyZXMgdGhhdCBhcmUgb25seSBlbmFibGVkIHdoZW4gb3RoZXJzIGFyZSBhbHNvLlxuXG5JJ2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IFwiZXhwZXJ0XCIgb3B0aW9ucyBvciB0aG9zZSBtYXJrZWQgYXMgXCJFWFBFUklNRU5UQUxcIiBvciBcIkRFQlVHXCIgYmVjYXVzZSB0aGVzZSB0ZW5kIHRvIGdpdmUgY2x1ZXMgYWJvdXQgdGhlIGludGVybmFsIHdvcmtpbmdzIGFuZCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgdHJhZGUtb2Zmcy4gSXQncyBhbHNvIHBvc3NpYmxlIHRoYXQgdGhlcmUgYXJlIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIHNwZWNpZmljIHRvIGNlcnRhaW4gaGFyZHdhcmUgcGxhdGZvcm1zIHRoYXQgY291bGQgYmUgb2YgaW50ZXJlc3QuXG5cbkxldCdzIHNlZSB3aGF0IGdlbXMgYXJlIGhpZGRlbiBpbiB0aGlzIGZpbGUuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGF2YWlsYWJsZSBjb250cm9scyB0aGF0IEkgaGF2ZSwgYXMgd2VsbCBhcyB0aGUgZGVzaWduIGNob2ljZXMgYmVoaW5kIHRoZW0uIFRoaXMgd2lsbCBiZXR0ZXIgaW5mb3JtIGhvdyBJIGNvbmZpZ3VyZSB0aGUga2VybmVsIGZvciBhIG5ldyBzeXN0ZW0gdGhhdCBJIGhhdmUgY29taW5nIG9ubGluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0NzAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1MjozMC45OTYzNjMzNjJaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTUwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2OTYsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2OTY6XFx0Y29uZmlnIE1JR1JBVElPTlxcbiA2OTc6XFx0XFx0Ym9vbFxcbiA2OTg6XFx0XFx0ZGVwZW5kcyBvbiBNTVVcXG4gNjk5OlxcdFxcbiA3MDA6XFx0Y29uZmlnIERFVklDRV9NSUdSQVRJT05cXG4gNzAxOlxcdFxcdGRlZl9ib29sIE1JR1JBVElPTiBcXHUwMDI2XFx1MDAyNiBaT05FX0RFVklDRVxcbiA3MDI6XFx0XFxuIDcwMzpcXHRjb25maWcgQVJDSF9FTkFCTEVfSFVHRVBBR0VfTUlHUkFUSU9OXFxuIDcwNDpcXHRcXHRib29sXFxuIDcwNTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTI6MzAuOTk2NDYxMTkyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0OTIzNTQ5ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBNSUdSQVRJT05gIFZhcmlhYmxlKipcblxuT2theSwgc28gYE1JR1JBVElPTmAgaXMgYSBib29sZWFuLCB3aGljaCBtZWFucyBpdCdzIGVpdGhlciB0cnVlIG9yIGZhbHNlLCBhbmQgaXQncyBiZWluZyBzZXQgYnkgb3RoZXIgY29uZmlndXJhdGlvbiBzZXR0aW5ncy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwid2hvJ3MgZmxpcHBpbmcgdGhpcyBzd2l0Y2g/XCIgSXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgd2hlcmUgdGhpcyB2YXJpYWJsZSBpcyBiZWluZyBjb250cm9sbGVkLiBLbm93aW5nIHRoZSBjYWxsZXJzIHdpbGwgaGVscCBtZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBpbXBsaWNhdGlvbnMgb2YgYE1JR1JBVElPTmAgYmVpbmcgaW4gYSBwYXJ0aWN1bGFyIHN0YXRlLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBhbmQgaWRlbnRpZnkgYWxsIHRoZSBvdGhlciBjb25maWdzIHRoYXQgYXJlIHRvdWNoaW5nIHRoaXMgYm9vbGVhbiB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBmdWxseS4gSSdsbCBuZWVkIHRvIGtub3cgYWxsIG9mIHRoZSBwb3NzaWJsZSBjYWxsZXJzIGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBgTUlHUkFUSU9OYCBpcyBhZmZlY3RlZC4gVGhhdCdzIHRoZSBwcmlvcml0eSBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTY1LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1MjozNi40ODg4MTg4ODRaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMDYwNzg4NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IE1JR1JBVElPTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz01OTE9Y29uZmlnIE1FTU9SWV9IT1RSRU1PVkVcXG4tLVxcbm1tL0tjb25maWctNTk0LVxcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFBMVUdcXG5tbS9LY29uZmlnOjU5NTpcXHRzZWxlY3QgTUlHUkFUSU9OXFxubW0vS2NvbmZpZy01OTYtXFxuLS1cXG5tbS9LY29uZmlnPTY1ND1jb25maWcgQ09NUEFDVElPTlxcbi0tXFxubW0vS2NvbmZpZy02NTYtXFx0ZGVmYXVsdCB5XFxubW0vS2NvbmZpZzo2NTc6XFx0c2VsZWN0IE1JR1JBVElPTlxcbm1tL0tjb25maWctNjU4LVxcdGRlcGVuZHMgb24gTU1VXFxuLS1cXG5tbS9LY29uZmlnPTY4NT1jb25maWcgTlVNQV9NSUdSQVRJT05cXG4tLVxcbm1tL0tjb25maWctNjg4LVxcdGRlcGVuZHMgb24gTlVNQSBcXHUwMDI2XFx1MDAyNiBNTVVcXG5tbS9LY29uZmlnOjY4OTpcXHRzZWxlY3QgTUlHUkFUSU9OXFxubW0vS2NvbmZpZy02OTAtXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZz0xMDY3PWNvbmZpZyBDTUFcXG4tLVxcbm1tL0tjb25maWctMTA2OS1cXHRkZXBlbmRzIG9uIE1NVVxcbm1tL0tjb25maWc6MTA3MDpcXHRzZWxlY3QgTUlHUkFUSU9OXFxubW0vS2NvbmZpZy0xMDcxLVxcdHNlbGVjdCBNRU1PUllfSVNPTEFUSU9OXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjUyOjM4LjY5NDkwMzAzMVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzM3ODI0MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gY29uZmlndXJpbmcgdGhpcyBzeXN0ZW0gYW5kIHRoZSBhdXRvbWF0aWMgc2VsZWN0aW9uIGZhdm9ycyBgTUlHUkFUSU9OYCBiZWNhdXNlIGBDT01QQUNUSU9OYCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZXhwbGljaXRseSBpbmNsdWRlIGBNRU1PUllfRkFJTFVSRWAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYXMgaW1wb3J0YW50IGNvbnNpZGVyYXRpb25zIGluIG15IHNldCB1cC4gSnVzdCB3YW50IHRvIHRha2UgYSBtb21lbnQgYW5kIHRoaW5rIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWdzIEkgbmVlZCB0byBhZGRyZXNzLiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgYmVoYXZpb3Igb2YgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIGFzIGl0IGludGVyYWN0cyB3aXRoIHRoZXNlIG90aGVycy4gSSBzaG91bGQgY29uZmlybSBpdHMgc2V0dGluZ3MsIGFuZCBob3cgaXQgaW1wYWN0cyBmcmFnbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ0NiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjUyOjQyLjQzMjczMDM0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDk0NjI4MDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pbl9vcmRlcl9mb3Jfc3BsaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTQwND1pbnQgZm9saW9fc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcik7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NDA1OnVuc2lnbmVkIGludCBtaW5fb3JkZXJfZm9yX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQwNi1pbnQgc3BsaXRfZm9saW9fdG9fbGlzdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTY0MT1zdGF0aWMgaW5saW5lIGludCBzcGxpdF9odWdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC02NDYtXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NjQ3OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG1pbl9vcmRlcl9mb3Jfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC02NDgte1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00MzI5PWludCBmb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MzM2LS8qKlxcbm1tL2h1Z2VfbWVtb3J5LmM6NDMzNzogKiBtaW5fb3JkZXJfZm9yX3NwbGl0KCkgLSBnZXQgdGhlIG1pbmltdW0gb3JkZXIgQGZvbGlvIGNhbiBiZSBzcGxpdCB0b1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDMzOC0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XFxubW0vaHVnZV9tZW1vcnkuYy00MzM5LSAqXFxubW0vaHVnZV9tZW1vcnkuYzo0MzQwOiAqIG1pbl9vcmRlcl9mb3Jfc3BsaXQoKSB0ZWxscyB0aGUgbWluaW11bSBvcmRlciBAZm9saW8gY2FuIGJlIHNwbGl0IHRvLlxcbm1tL2h1Z2VfbWVtb3J5LmMtNDM0MS0gKiBJZiBhIGZpbGUtYmFja2VkIGZvbGlvIGlzIHRydW5jYXRlZCwgMCB3aWxsIGJlIHJldHVybmVkLiBBbnkgc3Vic2VxdWVudFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MzQ1LSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDM0Njp1bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDM0Ny17XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIzMzA9aW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0NDItXFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNDQzOlxcdFxcdGNvbnN0IGludCBuZXdfb3JkZXIgPSBtaW5fb3JkZXJfZm9yX3NwbGl0KGZvbGlvKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0NDQtXFx0XFx0aW50IGVycjtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9Mjc4Mz1zdGF0aWMgaW50IHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjc5OC1cXHRpZiAoIWh1Z2UgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9sYXJnZShmb2xpbykpIHtcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI3OTk6XFx0XFx0Y29uc3QgaW50IG5ld19vcmRlciA9IG1pbl9vcmRlcl9mb3Jfc3BsaXQoZm9saW8pO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjgwMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTI6NDQuNTI3MzY0MTc3WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNDM1OTUxOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgT3JpZ2luIG9mIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgbWluX29yZGVyX2Zvcl9zcGxpdGAuIEkgc2VlbSB0byByZWNhbGwgaXQgYmVpbmcgaW4gdGhlIGh1Z2UgcGFnZXMgY29kZSwgc28gSSdtIGJldHRpbmcgaXQncyBpbiBgbW0vaHVnZV9tZW1vcnkuY2AuIFRoYXQgbWFrZXMgc2Vuc2U7IGl04oCZcyB0aGUgdXN1YWwgcGxhY2UgZm9yIHRoZXNlIHRoaW5ncy4gTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIGNvbXBpbGF0aW9uIGNvbmRpdGlvbnMuIFJpZ2h0LCBgbW0vaHVnZV9tZW1vcnkuY2AgaXMgY29tcGlsZWQgYmFzZWQgb24gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAuIE5vIHN1cnByaXNlcyB0aGVyZS4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHRob3JvdWdoIHRob3VnaCwgbGV0J3MgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYG1tL01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBvYmplY3QgZmlsZSBmb3IgYGh1Z2VfbWVtb3J5LmNgIGlzIGFjdHVhbGx5IGBodWdlX21lbW9yeS5vYCwganVzdCB0byBydWxlIG91dCBhbnkgcG90ZW50aWFsIG5hbWluZyBkaXNjcmVwYW5jaWVzIG9yIGNvbmRpdGlvbmFsIGluY2x1c2lvbnMgSSdtIG5vdCBpbW1lZGlhdGVseSBjb25zaWRlcmluZy4gQmV0dGVyIHRvIGJlIGNlcnRhaW4gdGhhbiB0byB3YXN0ZSB0aW1lIGNoYXNpbmcgZ2hvc3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDMyNywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjUyOjQ4Ljc3MDk2Mjg2NVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg5NzM5MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZV9tZW1vcnkub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICs9IG1pZ3JhdGVfZGV2aWNlLm9cXG5tbS9NYWtlZmlsZToxMDE6b2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSArPSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQub1xcbm1tL01ha2VmaWxlLTEwMi1vYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSArPSBwYWdlX2NvdW50ZXIub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1Mjo0OC44NTk5NDE3NzlaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzAyNDk4OTY5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqXG5cbk9rYXksIHNvIHdlJ3JlIGRlZmluaXRlbHkgZ29pbmcgdG8gbmVlZCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBlbmFibGVkLiBUaGF0J3MgYSBnaXZlbi4gTm93LCBJJ20gdGhpbmtpbmcgYWJvdXQgYEhXUE9JU09OX0lOSkVDVGAuIFdoaWxlIGl0J3Mgbm90IGEgY29yZSByZXF1aXJlbWVudCBpbiB0aGUgc2FtZSB3YXksIEkgcmVjYWxsIGl0J3MgaW5jcmVkaWJseSB2YWx1YWJsZSBmb3Igc2ltdWxhdGluZyBhbmQgdGVzdGluZyBtZW1vcnkgY29ycnVwdGlvbiBzY2VuYXJpb3MuIEdpdmVzIHVzIGEgcmVhbGx5IHJvYnVzdCB3YXkgdG8gdGVzdCBvdXIgZmFpbHVyZSBoYW5kbGluZy4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGZvciBgSFdQT0lTT05fSU5KRUNUYCB0byBjb25maXJtIGl0cyBzdGF0dXMuIEkgd2FudCB0byBtYWtlIHN1cmUgd2UgaGF2ZSB0aGF0IG9wdGlvbiBhdmFpbGFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzE5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTI6NTUuODg0OTMzODVaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2Mjc3MjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIV1BPSVNPTl9JTkpFQ1RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTc3Nz1jb25maWcgTUVNT1JZX0ZBSUxVUkVcXG4tLVxcbm1tL0tjb25maWctNzg3LVxcbm1tL0tjb25maWc6Nzg4OmNvbmZpZyBIV1BPSVNPTl9JTkpFQ1RcXG5tbS9LY29uZmlnLTc4OS1cXHR0cmlzdGF0ZSBcXFwiSFdQb2lzb24gcGFnZXMgaW5qZWN0b3JcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjUyOjU1Ljk3MTIxNjM2M1oiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTY5NTMwNDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSFdQT0lTT04gSW5qZWN0aW9uIE1lY2hhbmlzbSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBIV1BPSVNPTl9JTkpFQ1RgIHRoaW5nLiBJdCdzIGEgdHJpc3RhdGUsIGludGVyZXN0aW5nLiBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgaG93IGBNRU1PUllfRkFJTFVSRWAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaW50ZXJhY3Qgd2l0aCBpdCBhcyB3ZWxsLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSdzIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGUgbWFpbiBmdW5jdGlvbiBvZiBpbnRlcmVzdCBpcyBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYCwgdGhvdWdoIHRoZSBmYWN0IHRoYXQgaXQncyBzdGF0aWMgaXMgYSBiaXQgb2YgYSB3cmlua2xlLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gd29yayBhcm91bmQgdGhhdCwgYnV0IEkgc3VzcGVjdCB0aGUgZW50cnkgcG9pbnQgdG8gYmUgYHNvZnRfb2ZmbGluZV9wYWdlYCwgc28gbGV0J3Mgc3RhcnQgdGhlcmUuIFRoZSBmaXJzdCB0aGluZyBJIHdpbGwgZG8gaXMgY29uZmlybSB0aGF0IGBzb2Z0X29mZmxpbmVfcGFnZWAgaXMgYWN0dWFsbHkgZXhwb3J0ZWQgYW5kIGFjY2Vzc2libGUgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTAwOCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjUyOjU5Ljk0MDc1MDM2MloiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU3OTI0NzUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnNvZnRfb2ZmbGluZV9wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbW9yeS1mYWlsdXJlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjUyOjU5Ljk5NjU1MTU5OFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQ1ODM0NzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBrZXJuZWwgZGVidWdnaW5nOlxuXG4qKkRlYnVnZ2luZyBhIE1pc3NpbmcgRXhwb3J0KipcblxuSG1tLCB3YWl0IGEgc2Vjb25kLi4uIHRoaXMgYHNvZnRfb2ZmbGluZV9wYWdlYCBzeW1ib2wgaXNuJ3Qgc2hvd2luZyB1cCBhcyBleHBvcnRlZD8gVGhhdCdzIG5vdCByaWdodC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgaXQncyBkZWZpbmVkIGFuZCBpZiBpdCAqc2hvdWxkKiBiZSB2aXNpYmxlLiBPa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGBtbS9tZW1vcnktZmFpbHVyZS5jYCBmaWxlLiBUaGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciBgc29mdF9vZmZsaW5lX3BhZ2VgLiBJJ20gZ3Vlc3NpbmcgdGhhdCdzIHdoZXJlIHRoZSBkZWZpbml0aW9uIG9yLCBhdCB0aGUgdmVyeSBsZWFzdCwgdXNhZ2UsIHJlc2lkZXMuIExldCdzIHNlZSBpZiBpdCdzIGdvdCB0aGUgcmlnaHQgRVhQT1JUX1NZTUJPTCBtYWNyb3Mgb3IgaWYgdGhlcmUncyBzb21lIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHByZXZlbnRpbmcgaXQgZnJvbSBiZWluZyB2aXNpYmxlLiBUaGlzIGNvdWxkIGJlIGEgY3JpdGljYWwgaXNzdWUhIFRpbWUgdG8gZ28gaHVudGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzMTksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1MzowMy42NDIzOTAxOThaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NDc5MDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvZnRfb2ZmbGluZV9wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbW9yeS1mYWlsdXJlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5LWZhaWx1cmUuYz0yNjA4PXN0YXRpYyB2b2lkIG1lbW9yeV9mYWlsdXJlX3dvcmtfZnVuYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2MjItXFx0XFx0aWYgKGVudHJ5LmZsYWdzIFxcdTAwMjYgTUZfU09GVF9PRkZMSU5FKVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjYyMzpcXHRcXHRcXHRzb2Z0X29mZmxpbmVfcGFnZShlbnRyeS5wZm4sIGVudHJ5LmZsYWdzKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2MjQtXFx0XFx0ZWxzZVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0yNzgzPXN0YXRpYyBpbnQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yODg2LS8qKlxcbm1tL21lbW9yeS1mYWlsdXJlLmM6Mjg4NzogKiBzb2Z0X29mZmxpbmVfcGFnZSAtIFNvZnQgb2ZmbGluZSBhIHBhZ2UuXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yODg4LSAqIEBwZm46IHBmbiB0byBzb2Z0LW9mZmxpbmVcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjkxMC0gKi9cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI5MTE6aW50IHNvZnRfb2ZmbGluZV9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yOTEyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTM6MDMuNjk5ODc3MTg0WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMzYyNTk3NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guXG5cbioqQW5hbHl6aW5nIHRoZSBHbG9iYWwgVmlzaWJpbGl0eSBvZiBgc29mdF9vZmZsaW5lX3BhZ2VgKipcblxuU28sIGBzb2Z0X29mZmxpbmVfcGFnZWAgaXNuJ3QgZXhwbGljaXRseSBleHBvcnRlZCwgYnV0IGl0J3MgZ2xvYmFsbHkgdmlzaWJsZSwgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VzIHF1ZXN0aW9ucyBhYm91dCB3aGVyZSBpdCdzIGJlaW5nIGFjY2Vzc2VkLiBXYWl0LCBJIHJlY2FsbCB0aGF0IGBzb2Z0X29mZmxpbmVfcGFnZWAgaXMgY2FsbGVkIGZyb20gYG1tL21hZHZpc2UuY2AsIHdoaWNoIGlzIGEgY29yZSBidWlsdC1pbiBjb21wb25lbnQuIFRoYXQgbmFycm93cyB0aGUgc2VhcmNoIHNvbWV3aGF0LCBidXQgYXJlIHRoZXJlIG90aGVyIHBvdGVudGlhbCBlbnRyeSBwb2ludHMgSSdtIG1pc3Npbmc/IEkgbmVlZCB0byBjb25zaWRlciBhbGwgdGhlIHBvc3NpYmlsaXRpZXMuIFRoaW5raW5nIGFib3V0IGl0LCBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIGluIGBtbS9tYWR2aXNlLmNgIGlzIHRoZSBwcmltYXJ5IG1lY2hhbmlzbSB0byBjYWxsIGBzb2Z0X29mZmxpbmVfcGFnZWAuIE5vdyBJIHNob3VsZCByZWFsbHkgY2hlY2sgb3V0IGBtYWR2aXNlX2luamVjdF9lcnJvcmAgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4NDcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1MzowOC43MzYxNDA2MDFaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMDE0NjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hZHZpc2VfaW5qZWN0X2Vycm9yXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21hZHZpc2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tYWR2aXNlLmM9MTMzOD1zdGF0aWMgaW50IG1hZHZpc2Vfdm1hX2JlaGF2aW9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTE0NDYtICovXFxubW0vbWFkdmlzZS5jOjE0NDc6c3RhdGljIGludCBtYWR2aXNlX2luamVjdF9lcnJvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG5tbS9tYWR2aXNlLmMtMTQ0OC17XFxuLS1cXG5tbS9tYWR2aXNlLmM9MTQ5Mj1zdGF0aWMgYm9vbCBpc19tZW1vcnlfZmFpbHVyZShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xNTA0LVxcbm1tL21hZHZpc2UuYzoxNTA1OnN0YXRpYyBpbnQgbWFkdmlzZV9pbmplY3RfZXJyb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxubW0vbWFkdmlzZS5jLTE1MDYte1xcbi0tXFxubW0vbWFkdmlzZS5jPTE4ODc9c3RhdGljIGludCBtYWR2aXNlX2RvX2JlaGF2aW9yKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW5faW4sXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTg5Ni1cXHRcXHRyYW5nZS1cXHUwMDNlZW5kID0gc3RhcnQgKyBsZW5faW47XFxubW0vbWFkdmlzZS5jOjE4OTc6XFx0XFx0cmV0dXJuIG1hZHZpc2VfaW5qZWN0X2Vycm9yKG1hZHZfYmVoYXZpb3IpO1xcbm1tL21hZHZpc2UuYy0xODk4LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTM6MDguODA2MTU5NjI2WiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0OTkxMDQyOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgYmVzdCB3YXkgdG8gZnV6eiBpdCBlZmZlY3RpdmVseS4gYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBpcyBzdGF0aWMsIHNvIEkgY2FuJ3QgdXNlIHRoYXQgYXMgYSBkaXJlY3QgZm9jdXMuIGBzb2Z0X29mZmxpbmVfcGFnZWAgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgY29uc2lkZXJlZCBgbWFkdmlzZV9kb19iZWhhdmlvcmAgYW5kIGBzeXNfbWFkdmlzZWAgYXMgcG9zc2liaWxpdGllcywgYnV0IGBzb2Z0X29mZmxpbmVfcGFnZWAgaXMgbXVjaCBtb3JlIHNwZWNpZmljIHRvIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgYmVpbmcgY2hhbmdlZCBoZXJlLiBMZXQgbWUgY29uZmlybSBgc29mdF9vZmZsaW5lX3BhZ2VgJ3MgbG9jYXRpb247IGl0IHNob3VsZCBiZSBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuIFllcCwgdGhlcmUgaXQgaXMuXG5cbkkgYnJpZWZseSBjb25zaWRlcmVkIGB0cnlfdG9fc3BsaXRfdGhwX3BhZ2VgLCBidXQgdGhhdCdzIGFsc28gc3RhdGljLCBzbyBpdCB3b24ndCB3b3JrIGFzIGEgZm9jdXMgc3ltYm9sLiBUaGVuLCBJIHJlYWxpemVkIHRoYXQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAgaXMgc3RhdGljIHRvbywgc28gSSBjYW4ndCBkaXJlY3RseSB1c2UgdGhhdC4gV2FpdCwgdGhlIHBhdGNoICpkb2VzKiBtb2RpZnkgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBzb2Z0X29mZmxpbmVfcGFnZWAuIFRoZXJlZm9yZSwgYHNvZnRfb2ZmbGluZV9wYWdlYCBpcyB0aGUgY29ycmVjdCBzeW1ib2wgdG8gZm9jdXMgb24uXG5cblNvLCBoZXJlJ3MgbXkgc3VtbWFyeSBmb3IgZnV6emluZyBwdXJwb3NlczpcblxuKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWUgLSBUaGlzIGZpeGVzIGEgZnVuY3Rpb25hbCBpc3N1ZSwgc3BlY2lmaWNhbGx5IGEgbWlzc2luZyBgZm9saW9fcHV0YCBsZWFkaW5nIHRvIGEgcmVmY291bnQgbGVhayBpbiBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYCB3aGVuIHNvZnQgb2ZmbGluaW5nIGEgVEhQIHBhZ2UgZmFpbHMgKGR1ZSB0byBgbmV3X29yZGVyYCBiZWluZyBub24temVybykuIFRoaXMgcmVwcmVzZW50cyBhIGRpcmVjdCBtZW1vcnkgbGVhaywgc28gaXQgaXMgaGlnaCBwcmlvcml0eS5cbiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayByZWxhdGVkIHRvIGhhbmRsaW5nIHNvZnQgb2ZmbGluaW5nIG9mIFRIUCBwYWdlcy4gVGhpcyBpcyBhIGNydWNpYWwgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBwcmV2ZW50cyBhIG1lbW9yeSBsZWFrLlxuKiAgICoqRm9jdXNTeW1ib2xzOioqIGBzb2Z0X29mZmxpbmVfcGFnZWAgLSBUaGlzIGlzIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIGludm9sdmVkIGFuZCBpcyBjYWxsZWQgZnJvbSBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYC5cbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYE1FTU9SWV9GQUlMVVJFYCwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCAtIFRoZXNlIGFyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuXG5cbk5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBjb25maWcgZGVwZW5kZW5jaWVzLiBEb2VzIGBNRU1PUllfRkFJTFVSRWAgcmVseSBvbiBhbnl0aGluZyBlbHNlPyBZZXMsIGBNTVVgIGFuZCBgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRWAuIGBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFYCBpcyBzZWxlY3RlZCBieSB4ODYsIGFybTY0LCBwb3dlcnBjLCBldGMuLCBzbyB3ZSdyZSBnb29kIHRoZXJlLiBBbmQgZm9yIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGl0IGRlcGVuZHMgb24gYEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBTWVNGU2AuIFRob3NlIHNob3VsZCBiZSBzdGFuZGFyZCwgdG9vLiBBbGwgY2xlYXIuXG5cbklzIHRoZXJlIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9uPyBgSFdQT0lTT05fSU5KRUNUYCB3b3VsZCBiZSB1c2VmdWwgZm9yIGluamVjdGlvbiB0ZXN0aW5nLCBidXQgYG1hZHZpc2UoTUFEVl9TT0ZUX09GRkxJTkUpYCBpcyBhdmFpbGFibGUgd2l0aG91dCBpdCwgc28gaXQncyBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LiBMZXQncyBtYWtlIHN1cmUgYE1BRFZfU09GVF9PRkZMSU5FYCBpcyB3aGF0IHdlIHRoaW5rIGl0IGlzIGJ5IGxvb2tpbmcgaW4gYG1tL21hZHZpc2UuY2AuIE9rYXksIGFsbCBkb25lLiBUaGF0IHNob3VsZCBjb3ZlciBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0NjIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTM6MTcuMzA1MjY2NDIzWiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzIwOTE1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJNQURWX1NPRlRfT0ZGTElORVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tYWR2aXNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWFkdmlzZS5jPTE0NDc9c3RhdGljIGludCBtYWR2aXNlX2luamVjdF9lcnJvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xNDcyLVxcbm1tL21hZHZpc2UuYzoxNDczOlxcdFxcdGlmIChtYWR2X2JlaGF2aW9yLVxcdTAwM2ViZWhhdmlvciA9PSBNQURWX1NPRlRfT0ZGTElORSkge1xcbm1tL21hZHZpc2UuYy0xNDc0LVxcdFxcdFxcdHByX2luZm8oXFxcIlNvZnQgb2ZmbGluaW5nIHBmbiAlI2x4IGF0IHByb2Nlc3MgdmlydHVhbCBhZGRyZXNzICUjbHhcXFxcblxcXCIsXFxuLS1cXG5tbS9tYWR2aXNlLmM9MTQ5Mj1zdGF0aWMgYm9vbCBpc19tZW1vcnlfZmFpbHVyZShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xNDk1LVxcdGNhc2UgTUFEVl9IV1BPSVNPTjpcXG5tbS9tYWR2aXNlLmM6MTQ5NjpcXHRjYXNlIE1BRFZfU09GVF9PRkZMSU5FOlxcbm1tL21hZHZpc2UuYy0xNDk3LVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxubW0vbWFkdmlzZS5jPTE1MTg9bWFkdmlzZV9iZWhhdmlvcl92YWxpZChpbnQgYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTU1MC0jaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXFxubW0vbWFkdmlzZS5jOjE1NTE6XFx0Y2FzZSBNQURWX1NPRlRfT0ZGTElORTpcXG5tbS9tYWR2aXNlLmMtMTU1Mi1cXHRjYXNlIE1BRFZfSFdQT0lTT046XFxuLS1cXG5tbS9tYWR2aXNlLmM9MTg4Nz1zdGF0aWMgaW50IG1hZHZpc2VfZG9fYmVoYXZpb3IodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbixcXG4tLVxcbm1tL21hZHZpc2UuYy0xOTQ1LSAqXFx0XFx0d2VyZSBjb3JydXB0ZWQgYnkgdW5yZWNvdmVyYWJsZSBoYXJkd2FyZSBtZW1vcnkgZmFpbHVyZS5cXG5tbS9tYWR2aXNlLmM6MTk0NjogKiAgTUFEVl9TT0ZUX09GRkxJTkUgLSB0cnkgdG8gc29mdC1vZmZsaW5lIHRoZSBnaXZlbiByYW5nZSBvZiBtZW1vcnkuXFxubW0vbWFkdmlzZS5jLTE5NDctICogIE1BRFZfTUVSR0VBQkxFIC0gdGhlIGFwcGxpY2F0aW9uIHJlY29tbWVuZHMgdGhhdCBLU00gdHJ5IHRvIG1lcmdlIHBhZ2VzIGluXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjUzOjE3LjM4MjQ4MDIzN1oiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDk1MjQ0ODkyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBNZW1vcnkgRXJyb3IgSW5qZWN0aW9uIENhcGFiaWxpdGllcyoqXG5cbkFscmlnaHQsIHNvIGBNQURWX1NPRlRfT0ZGTElORWAgaXMgYXZhaWxhYmxlLiBUaGF0IG1ha2VzIHNlbnNlLCBidXQgb25seSBpZiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBpcyBmbGlwcGVkIG9uLiBUaGF0J3MgYSBnb29kIHByZXJlcXVpc2l0ZSB0byBrZWVwIGluIG1pbmQuIE5vdywgSSBuZWVkIHRvIGRpZyBhIGxpdHRsZSBkZWVwZXIuIEkgc2VlbSB0byByZWNhbGwgdGhhdCB0aGUgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBmdW5jdGlvbiwgd2hpY2ggSSdsbCBiZSB1c2luZyBpbiByZWxhdGlvbiB0byB0aGlzLCBoYXMgc29tZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIHNvIGxldCdzIGNoZWNrIGl0cyByZXF1aXJlbWVudHMuIEl0IGxvb2tzIGxpa2UgYENBUF9TWVNfQURNSU5gIGlzIGdvaW5nIHRvIGJlIG5lZWRlZC4gSSBmaWd1cmVkIGFzIG11Y2guIFRpbWUgdG8gY29uZmlybSB0aGUgZGV0YWlscyBhbmQgbW92ZSBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODExNCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjUzOjMyLjMzNDkzMjMxMloiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODMxNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWFkdmlzZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0NDcsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0NDc6XFx0c3RhdGljIGludCBtYWR2aXNlX2luamVjdF9lcnJvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4xNDQ4OlxcdHtcXG4xNDQ5OlxcdFxcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcXG4xNDUwOlxcdFxcdHVuc2lnbmVkIGxvbmcgc3RhcnQgPSBtYWR2X2JlaGF2aW9yLVxcdTAwM2VyYW5nZS5zdGFydDtcXG4xNDUxOlxcdFxcdHVuc2lnbmVkIGxvbmcgZW5kID0gbWFkdl9iZWhhdmlvci1cXHUwMDNlcmFuZ2UuZW5kO1xcbjE0NTI6XFx0XFxuMTQ1MzpcXHRcXHRpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpXFxuMTQ1NDpcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbjE0NTU6XFx0XFxuMTQ1NjpcXHRcXHRmb3IgKDsgc3RhcnQgXFx1MDAzYyBlbmQ7IHN0YXJ0ICs9IHNpemUpIHtcXG4xNDU3OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgcGZuO1xcbjE0NTg6XFx0XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuMTQ1OTpcXHRcXHRcXHRpbnQgcmV0O1xcbjE0NjA6XFx0XFxuMTQ2MTpcXHRcXHRcXHRyZXQgPSBnZXRfdXNlcl9wYWdlc19mYXN0KHN0YXJ0LCAxLCAwLCBcXHUwMDI2cGFnZSk7XFxuMTQ2MjpcXHRcXHRcXHRpZiAocmV0ICE9IDEpXFxuMTQ2MzpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE0NjQ6XFx0XFx0XFx0cGZuID0gcGFnZV90b19wZm4ocGFnZSk7XFxuMTQ2NTpcXHRcXG4xNDY2OlxcdFxcdFxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjUzOjMyLjMzNTExODU3MloiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjA2MjU2NzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU29mdCBPZmZsaW5lIFBhZ2UgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBgc29mdF9vZmZsaW5lX3BhZ2VgIHNpdHVhdGlvbi4gSXQncyBwcmV0dHkgY2xlYXIgdGhhdCB0cmlnZ2VyaW5nIGl0IGRpcmVjdGx5IHRocm91Z2ggdGhlIGtlcm5lbCByZXF1aXJlcyBgQ0FQX1NZU19BRE1JTmAuIFRoYXQgbWFrZXMgc2Vuc2UuIEkga25vdyBTeXprYWxsZXIgdHlwaWNhbGx5IHJ1bnMgd2l0aCBgQ0FQX1NZU19BRE1JTmAgaW4gaXRzIGlzb2xhdGVkIG5hbWVzcGFjZXMsIGJ1dCB0aGUgYGNhcGFibGUoQ0FQX1NZU19BRE1JTilgIGNoZWNrIGlzIGdvaW5nIHRvIGxvb2sgYXQgdGhlICppbml0aWFsKiB1c2VyIG5hbWVzcGFjZSwgd2hpY2ggU3l6a2FsbGVyIHByb2JhYmx5IGhhcywgc2luY2UgaXQgdXN1YWxseSBydW5zIGFzIHJvb3Qgd2l0aGluIHRoZSBWTSBpdCdzIHVzaW5nLlxuXG5JIHdvbmRlciwgdGhvdWdoLCBpZiB0aGVyZSdzIGFuIGFsdGVybmF0aXZlIHJvdXRlLCBzb21ldGhpbmcgbGVzcyBkaXJlY3Q/IEFoLCB5ZXMhIFN5c2ZzISBTcGVjaWZpY2FsbHksIGAvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9zb2Z0X29mZmxpbmVfcGFnZWAuIFN5emthbGxlciAqY2FuKiB3cml0ZSB0byBzeXNmczsgSSd2ZSB1c2VkIHRoYXQgYmVmb3JlLiBUaGF0IGNvdWxkIGJlIGEgZmVhc2libGUgdHJpZ2dlciBwYXRoLlxuXG5TbywgdGhpbmtpbmcgYWJvdXQgdGhlIGJyb2FkZXIgc2V0dXAuLi4gSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQuIFRoYXQnbGwgYmUgYE1FTU9SWV9GQUlMVVJFYCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgbmF0dXJhbGx5LlxuXG5SaWdodCwgSSd2ZSBnb3QgYSBoYW5kbGUgb24gdGhlIGtleSBlbGVtZW50cy4gTm93IEkganVzdCBuZWVkIHRvIHJlY29yZCB0aGVzZSBmaW5kaW5ncyBmb3IgZnV0dXJlIHJlZmVyZW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2MzksIk91dHB1dFRva2VucyI6MTI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTM6MzcuOTQxMzc4Mjc1WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwNTQzNzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzb2Z0X29mZmxpbmVfcGFnZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWlzc2luZyBmb2xpb19wdXQgKHJlZmNvdW50IGxlYWspIGluIHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZSB3aGVuIHNvZnQgb2ZmbGluaW5nIGEgVEhQIHBhZ2UgZmFpbHMgYmVjYXVzZSBuZXdfb3JkZXIgaXMgbm9uLXplcm8uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHByZXZlbnRzIGEgbWVtb3J5IGxlYWsgYW5kIGlzIHJlYWNoYWJsZSB2aWEgbWFkdmlzZShNQURWX1NPRlRfT0ZGTElORSkgb3Igc3lzZnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic29mdF9vZmZsaW5lX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1pc3NpbmcgZm9saW9fcHV0IChyZWZjb3VudCBsZWFrKSBpbiBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Ugd2hlbiBzb2Z0IG9mZmxpbmluZyBhIFRIUCBwYWdlIGZhaWxzIGJlY2F1c2UgbmV3X29yZGVyIGlzIG5vbi16ZXJvLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBwcmV2ZW50cyBhIG1lbW9yeSBsZWFrIGFuZCBpcyByZWFjaGFibGUgdmlhIG1hZHZpc2UoTUFEVl9TT0ZUX09GRkxJTkUpIG9yIHN5c2ZzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowcf8x6[1] Phase: Succeeded StartedAt: 2026-08-04 04:53:49 +0000 UTC FinishedAt: 2026-08-04 04:53:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcf8x6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-04 04:53:49 +0000 UTC FinishedAt: 2026-08-04 04:53:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcf8x6[2] Phase: Succeeded StartedAt: 2026-08-04 04:53:49 +0000 UTC FinishedAt: 2026-08-04 08:39:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcf8x6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["soft_offline_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"9e99173b-863b-4bcf-af5d-9f5f700128eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-04 04:53:49 +0000 UTC FinishedAt: 2026-08-04 08:39:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["soft_offline_page"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"9e99173b-863b-4bcf-af5d-9f5f700128eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowcf8x6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["soft_offline_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"9e99173b-863b-4bcf-af5d-9f5f700128eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-04 04:53:49 +0000 UTC FinishedAt: 2026-08-04 04:53:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcf8x6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["soft_offline_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"9e99173b-863b-4bcf-af5d-9f5f700128eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-04 04:53:49 +0000 UTC FinishedAt: 2026-08-04 04:53:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcf8x6/series-workflowcf8x6-convert-artifact-2788866988/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcf8x6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["soft_offline_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"9e99173b-863b-4bcf-af5d-9f5f700128eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-04 04:53:59 +0000 UTC FinishedAt: 2026-08-04 05:14:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcf8x6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["soft_offline_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"9e99173b-863b-4bcf-af5d-9f5f700128eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-04 04:53:59 +0000 UTC FinishedAt: 2026-08-04 05:14:08 +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:*c25a2b9a-fe36-47a9-9190-4d02e9704028,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-workflowcf8x6/series-workflowcf8x6-convert-artifact-2788866988/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": "0e3db034-b4ef-453a-936f-a890ab556e52", "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-workflowcf8x6/series-workflowcf8x6-build-action-1878901210/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcf8x6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["soft_offline_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"9e99173b-863b-4bcf-af5d-9f5f700128eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-04 04:53:59 +0000 UTC FinishedAt: 2026-08-04 05:13:58 +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:*c25a2b9a-fe36-47a9-9190-4d02e9704028,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-workflowcf8x6/series-workflowcf8x6-convert-artifact-2788866988/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": "0e3db034-b4ef-453a-936f-a890ab556e52", "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-workflowcf8x6/series-workflowcf8x6-build-action-1878901210/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcf8x6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["soft_offline_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"9e99173b-863b-4bcf-af5d-9f5f700128eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-04 05:14:08 +0000 UTC FinishedAt: 2026-08-04 05:14:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcf8x6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["soft_offline_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"9e99173b-863b-4bcf-af5d-9f5f700128eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-04 05:14:08 +0000 UTC FinishedAt: 2026-08-04 05:14:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcf8x6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["soft_offline_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"9e99173b-863b-4bcf-af5d-9f5f700128eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-04 05:14:08 +0000 UTC FinishedAt: 2026-08-04 05:14:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcf8x6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["soft_offline_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"9e99173b-863b-4bcf-af5d-9f5f700128eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-04 05:14:08 +0000 UTC FinishedAt: 2026-08-04 05:14:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"9e99173b-863b-4bcf-af5d-9f5f700128eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcf8x6/series-workflowcf8x6-convert-artifact-671386475/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcf8x6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["soft_offline_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"9e99173b-863b-4bcf-af5d-9f5f700128eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-04 05:14:18 +0000 UTC FinishedAt: 2026-08-04 05:16:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcf8x6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["soft_offline_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"9e99173b-863b-4bcf-af5d-9f5f700128eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-04 05:14:18 +0000 UTC FinishedAt: 2026-08-04 05:16:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0e3db034-b4ef-453a-936f-a890ab556e52,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-workflowcf8x6/series-workflowcf8x6-build-action-1878901210/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-workflowcf8x6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["soft_offline_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"9e99173b-863b-4bcf-af5d-9f5f700128eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-04 05:16:20 +0000 UTC FinishedAt: 2026-08-04 05:16:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcf8x6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["soft_offline_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"9e99173b-863b-4bcf-af5d-9f5f700128eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-04 05:16:20 +0000 UTC FinishedAt: 2026-08-04 05:16:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcf8x6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["soft_offline_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"9e99173b-863b-4bcf-af5d-9f5f700128eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-04 05:16:20 +0000 UTC FinishedAt: 2026-08-04 05:34:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcf8x6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["soft_offline_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"9e99173b-863b-4bcf-af5d-9f5f700128eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-04 05:16:20 +0000 UTC FinishedAt: 2026-08-04 05:34:31 +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:*c25a2b9a-fe36-47a9-9190-4d02e9704028,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-workflowcf8x6/series-workflowcf8x6-convert-artifact-671386475/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": "778c51e2-03d7-40dc-aa04-e7f3764bb94d", "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-workflowcf8x6/series-workflowcf8x6-build-action-2251933839/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcf8x6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["soft_offline_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"9e99173b-863b-4bcf-af5d-9f5f700128eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-04 05:16:20 +0000 UTC FinishedAt: 2026-08-04 05:34:21 +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:*c25a2b9a-fe36-47a9-9190-4d02e9704028,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-workflowcf8x6/series-workflowcf8x6-convert-artifact-671386475/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": "778c51e2-03d7-40dc-aa04-e7f3764bb94d", "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-workflowcf8x6/series-workflowcf8x6-build-action-2251933839/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcf8x6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["soft_offline_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"9e99173b-863b-4bcf-af5d-9f5f700128eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-04 05:34:31 +0000 UTC FinishedAt: 2026-08-04 05:34:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcf8x6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["soft_offline_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"9e99173b-863b-4bcf-af5d-9f5f700128eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-04 05:34:31 +0000 UTC FinishedAt: 2026-08-04 05:34:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcf8x6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["soft_offline_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"9e99173b-863b-4bcf-af5d-9f5f700128eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-04 05:34:31 +0000 UTC FinishedAt: 2026-08-04 05:36:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcf8x6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["soft_offline_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"9e99173b-863b-4bcf-af5d-9f5f700128eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-04 05:34:31 +0000 UTC FinishedAt: 2026-08-04 05:36:27 +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:*778c51e2-03d7-40dc-aa04-e7f3764bb94d,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-workflowcf8x6/series-workflowcf8x6-build-action-2251933839/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-workflowcf8x6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["soft_offline_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"9e99173b-863b-4bcf-af5d-9f5f700128eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-04 05:36:36 +0000 UTC FinishedAt: 2026-08-04 08:39:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcf8x6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["soft_offline_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"9e99173b-863b-4bcf-af5d-9f5f700128eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-04 05:36:36 +0000 UTC FinishedAt: 2026-08-04 08:39:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["soft_offline_page"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*0e3db034-b4ef-453a-936f-a890ab556e52,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*778c51e2-03d7-40dc-aa04-e7f3764bb94d,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-workflowcf8x6/series-workflowcf8x6-build-action-1878901210/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-workflowcf8x6/series-workflowcf8x6-build-action-2251933839/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowcf8x6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["soft_offline_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"9e99173b-863b-4bcf-af5d-9f5f700128eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-04 05:36:36 +0000 UTC FinishedAt: 2026-08-04 05:36:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcf8x6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["soft_offline_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"9e99173b-863b-4bcf-af5d-9f5f700128eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-04 05:36:36 +0000 UTC FinishedAt: 2026-08-04 05:36:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["soft_offline_page"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcf8x6/series-workflowcf8x6-convert-artifact-2368029316/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcf8x6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["soft_offline_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"9e99173b-863b-4bcf-af5d-9f5f700128eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-04 05:36:36 +0000 UTC FinishedAt: 2026-08-04 05:36:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcf8x6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["soft_offline_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"9e99173b-863b-4bcf-af5d-9f5f700128eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-04 05:36:36 +0000 UTC FinishedAt: 2026-08-04 05:36:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcf8x6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["soft_offline_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"9e99173b-863b-4bcf-af5d-9f5f700128eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-04 05:36:36 +0000 UTC FinishedAt: 2026-08-04 05:36:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcf8x6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["soft_offline_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"9e99173b-863b-4bcf-af5d-9f5f700128eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-04 05:36:46 +0000 UTC FinishedAt: 2026-08-04 08:39:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcf8x6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["soft_offline_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c3cd2bce550dbc6f3685dfd063cf9eca8c53aba6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"9e99173b-863b-4bcf-af5d-9f5f700128eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-04 05:36:46 +0000 UTC FinishedAt: 2026-08-04 08:39:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0e3db034-b4ef-453a-936f-a890ab556e52,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*778c51e2-03d7-40dc-aa04-e7f3764bb94d,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-workflowcf8x6/series-workflowcf8x6-build-action-1878901210/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-workflowcf8x6/series-workflowcf8x6-build-action-2251933839/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-workflowcf8x6/series-workflowcf8x6-convert-artifact-2368029316/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,}