Name: series-workflowzpx96 Phase: Succeeded StartedAt: 2026-08-19 03:12:06 +0000 UTC FinishedAt: 2026-08-19 07:51:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzpx96[0] Phase: Succeeded StartedAt: 2026-08-19 03:12:06 +0000 UTC FinishedAt: 2026-08-19 04:00:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzpx96[0].run-triage Phase: Succeeded StartedAt: 2026-08-19 03:12:06 +0000 UTC FinishedAt: 2026-08-19 04:00: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": "f5f9327e251a4efb9a98774093ef4675a4b170b9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USERFAULTFD", "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": "f5f9327e251a4efb9a98774093ef4675a4b170b9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USERFAULTFD", "TRANSPARENT_HUGEPAGE" ], "series_id": "6ed49760-aed3-4f4d-87cb-53e2a51703be" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "userfaultfd_ioctl", "userfaultfd_move", "move_pages_huge_pmd" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTRVJGQVVMVEZEJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXNlcmZhdWx0ZmRfaW9jdGwmIzM0OywKICAgICYjMzQ7dXNlcmZhdWx0ZmRfbW92ZSYjMzQ7LAogICAgJiMzNDttb3ZlX3BhZ2VzX2h1Z2VfcG1kJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBjb250cm9sIGZsb3cgYnVnIGluIGBtb3ZlX3BhZ2VzKClgIGluIGBtbS91c2VyZmF1bHRmZC5jYC4gUHJpb3IgdG8gdGhlIHBhdGNoLCBpZiBhIHBhZ2UgbW92ZSBvcGVyYXRpb24gcmV0dXJuZWQgYC1FQUdBSU5gLCB0aGUgbG9vcCB3b3VsZCBgY29udGludWVgIGJ1dCBmYWlsIHRvIHJlc2V0IHRoZSBgZXJyYCB2YXJpYWJsZSB0byAwLiBCZWNhdXNlIGBlcnJgIGlzIG5vdCB1bmNvbmRpdGlvbmFsbHkgb3ZlcndyaXR0ZW4gb24gc3VjY2Vzc2Z1bCBwYWdlIG1vdmVzIChlLmcuLCB3aGVuIGBtb3ZlX3BhZ2VzX3B0ZXMoKWAgcmV0dXJucyBhIHBvc2l0aXZlIHN0ZXAgc2l6ZSksIGBlcnJgIHdvdWxkIHJlbWFpbiBgLUVBR0FJTmAuIFRoaXMgY2F1c2VkIHRoZSBsb29wIHRvIGluZmluaXRlbHkgcmV0cnkgdGhlIHNhbWUgYWRkcmVzcyB3aXRob3V0IGFkdmFuY2luZyBgc3JjX2FkZHJgIGFuZCBgZHN0X2FkZHJgLCBsZWFkaW5nIHRvIGEgaGFuZy4gVGhlIHBhdGNoIHNpbXBseSByZXNldHMgYGVyciA9IDBgIGJlZm9yZSBjb250aW51aW5nLCBmaXhpbmcgdGhlIGluZmluaXRlIGxvb3AuXG5cblRoaXMgYnVnIGlzIGEgcHVyZSBjb250cm9sIGZsb3cgaXNzdWUgcmVzdWx0aW5nIGluIGEgaGFuZy4gSXQgZG9lcyBub3QgaW52b2x2ZSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBsZWFrIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBTdGFuZGFyZCBmdXp6aW5nICh3aXRoIEtBU0FOLCBMT0NLREVQLCBhbmQgc29mdCBsb2NrdXAgZGV0ZWN0b3JzKSBpcyBwZXJmZWN0bHkgY2FwYWJsZSBvZiBkZXRlY3RpbmcgaGFuZ3MgYW5kIGluZmluaXRlIGxvb3BzLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGlzIHBhdGNoIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIFVGRkRJT19NT1ZFIGlvY3RsIGhhbmRsZXIgd2hlcmUgYW4gLUVBR0FJTiBlcnJvciB3YXMgbm90IHJlc2V0IHRvIDAgYmVmb3JlIGNvbnRpbnVpbmcgdGhlIGxvb3AuIElmIG5vdCByZXNldCwgYSBzdWJzZXF1ZW50IHN1Y2Nlc3NmdWwgcGFnZSBtb3ZlIHdvdWxkIGxlYXZlIGVyciBhcyAtRUFHQUlOLCBjYXVzaW5nIHRoZSBsb29wIHRvIHNraXAgYWR2YW5jaW5nIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3Nlcy4gVGhpcyByZXN1bHRzIGluIGFuIGluZmluaXRlIGxvb3Agb3IgcmVwZWF0ZWQgYXR0ZW1wdHMgdG8gbW92ZSB0aGUgc2FtZSBwYWdlLiBUaGUgZml4IGVuc3VyZXMgZXJyIGlzIHJlc2V0IHRvIDAsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgdXNlcmZhdWx0ZmQgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkMWM0ODZkYTlhY2Q0ZmExN2E1NjViZWVhYzQyMjc4YzljZTcwM2YxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTkgMDM6NTc6MDEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdXNlcmZhdWx0ZmQuYyBiL21tL3VzZXJmYXVsdGZkLmNcbmluZGV4IGMzYWRlZGFhZjdkNTQuLmVjNWQ1MTFiZDE3OTEgMTAwNjQ0XG4tLS0gYS9tbS91c2VyZmF1bHRmZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS91c2VyZmF1bHRmZC5jXG5AQCAtMjA4NSw4ICYjNDM7MjA4NSwxMCBAQCBzdGF0aWMgc3NpemVfdCBtb3ZlX3BhZ2VzKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsXG4gXHRcdH1cbiBcbiBcdFx0aWYgKGVycikge1xuLVx0XHRcdGlmIChlcnIgPT0gLUVBR0FJTilcbiYjNDM7XHRcdFx0aWYgKGVyciA9PSAtRUFHQUlOKSB7XG4mIzQzO1x0XHRcdFx0ZXJyID0gMDtcbiBcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHR9XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNFUkZBVUxURkQmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1c2VyZmF1bHRmZF9pb2N0bCYjMzQ7LAogICAgJiMzNDt1c2VyZmF1bHRmZF9tb3ZlJiMzNDssCiAgICAmIzM0O21vdmVfcGFnZXNfaHVnZV9wbWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIFVGRkRJT19NT1ZFIGlvY3RsIGhhbmRsZXIgd2hlcmUgYW4gLUVBR0FJTiBlcnJvciB3YXMgbm90IHJlc2V0IHRvIDAgYmVmb3JlIGNvbnRpbnVpbmcgdGhlIGxvb3AuIElmIG5vdCByZXNldCwgYSBzdWJzZXF1ZW50IHN1Y2Nlc3NmdWwgcGFnZSBtb3ZlIHdvdWxkIGxlYXZlIGVyciBhcyAtRUFHQUlOLCBjYXVzaW5nIHRoZSBsb29wIHRvIHNraXAgYWR2YW5jaW5nIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3Nlcy4gVGhpcyByZXN1bHRzIGluIGFuIGluZmluaXRlIGxvb3Agb3IgcmVwZWF0ZWQgYXR0ZW1wdHMgdG8gbW92ZSB0aGUgc2FtZSBwYWdlLiBUaGUgZml4IGVuc3VyZXMgZXJyIGlzIHJlc2V0IHRvIDAsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgdXNlcmZhdWx0ZmQgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkMWM0ODZkYTlhY2Q0ZmExN2E1NjViZWVhYzQyMjc4YzljZTcwM2YxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTkgMDM6NTc6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS91c2VyZmF1bHRmZC5jIGIvbW0vdXNlcmZhdWx0ZmQuYwppbmRleCBjM2FkZWRhYWY3ZDU0Li5lYzVkNTExYmQxNzkxIDEwMDY0NAotLS0gYS9tbS91c2VyZmF1bHRmZC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3VzZXJmYXVsdGZkLmMKQEAgLTIwODUsOCAmIzQzOzIwODUsMTAgQEAgc3RhdGljIHNzaXplX3QgbW92ZV9wYWdlcyhzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsIHVuc2lnbmVkIGxvbmcgZHN0X3N0YXJ0LAogCQl9CiAKIAkJaWYgKGVycikgewotCQkJaWYgKGVyciA9PSAtRUFHQUlOKQomIzQzOwkJCWlmIChlcnIgPT0gLUVBR0FJTikgewomIzQzOwkJCQllcnIgPSAwOwogCQkJCWNvbnRpbnVlOwomIzQzOwkJCX0KIAkJCWJyZWFrOwogCQl9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk1NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBVc2VyZmF1bHRmZCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0JiMzOTtzIHRvdWNoZWQgYG1tL3VzZXJmYXVsdGZkLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBtb3ZlX3BhZ2VzYCBmdW5jdGlvbi4gSG1tLCBsb29rcyBsaWtlIHRoZXJlJiMzOTtzIGEgbW9kaWZpY2F0aW9uIGluIHRoZSBlcnJvciBoYW5kbGluZy4gSW5pdGlhbGx5LCBpZiBgbW92ZV9wYWdlc2AgcmV0dXJuZWQgYC1FQUdBSU5gLCBpdCB3b3VsZCBzaW1wbHkgYmUgcGFzc2VkIGJhY2sgdXAgdGhlIGNhbGwgc3RhY2suIE5vdywgaXQgYXBwZWFycyB0aGlzIGAtRUFHQUlOYCBpcyBiZWluZyBjYXVnaHQsIHRoZSBlcnJvciBjb2RlIGlzIGJlaW5nIHJlc2V0IHRvIDAsIGFuZCB0aGUgbG9vcCBjb250aW51ZXMuIEludGVyZXN0aW5nLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQmIzM5O3MgZHJpdmluZyB0aGlzIGNoYW5nZT8gV2h5IGFyZSB3ZSBhYnNvcmJpbmcgYC1FQUdBSU5gIGFuZCBjb250aW51aW5nIHRoZSBgbW92ZV9wYWdlc2Agb3BlcmF0aW9uPyBJcyB0aGlzIHJlbGF0ZWQgdG8gc29tZSBraW5kIG9mIHJldHJ5IGxvZ2ljPyBJcyBpdCBpbnRlbmRlZCB0byBoYW5kbGUgdHJhbnNpZW50IHJlc291cmNlIGNvbnRlbnRpb24/IElzIGl0IHNhZmUgdG8gaWdub3JlIGEgZmFpbGVkIGBtb3ZlX3BhZ2VzYCBvcGVyYXRpb24/IEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb250ZXh0LgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBzaXR1YXRpb25zIHRyaWdnZXIgYW4gYC1FQUdBSU5gIGZyb20gYG1vdmVfcGFnZXNgIHdpdGhpbiB0aGlzIGB1c2VyZmF1bHRmZGAgY29udGV4dC4gVGhlbiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgYWxsIHRoZSBjYWxsZXJzIG9mIGBtb3ZlX3BhZ2VzYCB3aXRoaW4gYG1tL3VzZXJmYXVsdGZkLmNgIGFuZCBob3cgdGhleSByZWFjdCB0byB0aGUgcmV0dXJuZWQgZXJyb3IgY29kZXMuIFRoaXMgbG9va3MgbGlrZSBhIHBvdGVudGlhbGx5IHNpZ25pZmljYW50IGNoYW5nZSB0byB0aGUgZmF1bHQgaGFuZGxpbmcgYmVoYXZpb3IsIHNvIGl0IHdhcnJhbnRzIGEgdGhvcm91Z2ggaW52ZXN0aWdhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggZnJvbSB0aGUgcG9pbnQgb2YgdGhlIHVzZXJmYXVsdCB0byB0aGlzIHNwZWNpZmljIGBtb3ZlX3BhZ2VzYCBjYWxsIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb3ZlX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdXNlcmZhdWx0ZmQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS91c2VyZmF1bHRmZC5jPTEzODI9c3RhdGljIGludCBtb3ZlX3plcm9wYWdlX3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTE0MTQtICovXG5tbS91c2VyZmF1bHRmZC5jOjE0MTU6c3RhdGljIGxvbmcgbW92ZV9wYWdlc19wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWQsXG5tbS91c2VyZmF1bHRmZC5jLTE0MTYtXHRcdFx0ICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcbi0tXG5tbS91c2VyZmF1bHRmZC5jPTE4NTk9c3RhdGljIHZvaWQgdWZmZF9tb3ZlX3VubG9jayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0xODY3LS8qKlxubW0vdXNlcmZhdWx0ZmQuYzoxODY4OiAqIG1vdmVfcGFnZXMgLSBtb3ZlIGFyYml0cmFyeSBhbm9ueW1vdXMgcGFnZXMgb2YgYW4gZXhpc3Rpbmcgdm1hXG5tbS91c2VyZmF1bHRmZC5jLTE4NjktICogQGN0eDogcG9pbnRlciB0byB0aGUgdXNlcmZhdWx0ZmQgY29udGV4dFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTg3Ni0gKlxubW0vdXNlcmZhdWx0ZmQuYzoxODc3OiAqIG1vdmVfcGFnZXMoKSByZW1hcHMgYXJiaXRyYXJ5IGFub255bW91cyBwYWdlcyBhdG9taWNhbGx5IGluIHplcm9cbm1tL3VzZXJmYXVsdGZkLmMtMTg3OC0gKiBjb3B5LiBJdCBvbmx5IHdvcmtzIG9uIG5vbiBzaGFyZWQgYW5vbnltb3VzIHBhZ2VzIGJlY2F1c2UgdGhvc2UgY2FuXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0xODg4LSAqIHN0b3JhZ2Ugb3IgYW55IG90aGVyIEkvTyBkZXZpY2UgKE1BRFZfRE9OVEZPUksgaW4gdGhlIHNvdXJjZSB2bWFcbm1tL3VzZXJmYXVsdGZkLmM6MTg4OTogKiBhdm9pZHMgbW92ZV9wYWdlcygpIHRvIGZhaWwgd2l0aCAtRUJVU1kgaWYgdGhlIHByb2Nlc3MgZm9ya3MgYmVmb3JlXG5tbS91c2VyZmF1bHRmZC5jOjE4OTA6ICogbW92ZV9wYWdlcygpIGlzIGNhbGxlZCksIHRoZW4gaXQgd2lsbCBjYWxsIG1vdmVfcGFnZXMoKSB0byBtYXAgdGhlXG5tbS91c2VyZmF1bHRmZC5jLTE4OTEtICogcGFnZSBpbiB0aGUgZmF1bHRpbmcgYWRkcmVzcyBpbiB0aGUgZGVzdGluYXRpb24gdm1hLlxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTkwNS0gKiB0aGUgZGVzdGluYXRpb24gdmlydHVhbCBtZW1vcnkgcmFuZ2UgaXMgbm90IGEgd2hvbGUgdW5tYXBwZWQgaG9sZSxcbm1tL3VzZXJmYXVsdGZkLmM6MTkwNjogKiBtb3ZlX3BhZ2VzKCkgd2lsbCBmYWlsIHJlc3BlY3RpdmVseSB3aXRoIC1FTk9FTlQgb3IgLUVFWElTVC4gVGhpc1xubW0vdXNlcmZhdWx0ZmQuYy0xOTA3LSAqIHByb3ZpZGVzIGEgdmVyeSBzdHJpY3QgYmVoYXZpb3IgdG8gYXZvaWQgYW55IGNoYW5jZSBvZiBtZW1vcnlcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTE5MTAtICogdGltZSBmb3IgYW55IGdpdmVuIGZhdWx0aW5nIGFkZHJlc3MuIFRoaXMgbWVhbnMgdGhhdCBpZiB0d28gdGhyZWFkc1xubW0vdXNlcmZhdWx0ZmQuYzoxOTExOiAqIHRyeSB0byBib3RoIGNhbGwgbW92ZV9wYWdlcygpIG9uIHRoZSBzYW1lIGRlc3RpbmF0aW9uIGFkZHJlc3MgYXQgdGhlXG5tbS91c2VyZmF1bHRmZC5jLTE5MTItICogc2FtZSB0aW1lLCB0aGUgc2Vjb25kIHRocmVhZCB3aWxsIGdldCBhbiBleHBsaWNpdCBlcnJvciBmcm9tIHRoaXNcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTE5MjAtICogYW4gYW1vdW50IG9mIGJ5dGVzIHN1Y2Nlc3NmdWxseSBtb3ZlZC4gSWYgdGhlIHJldHZhbCByZXBvcnRzIGFcbm1tL3VzZXJmYXVsdGZkLmM6MTkyMTogKiBcJiMzNDtzaG9ydFwmIzM0OyByZW1hcCwgdGhlIG1vdmVfcGFnZXMoKSBjb21tYW5kIHNob3VsZCBiZSByZXBlYXRlZCBieVxubW0vdXNlcmZhdWx0ZmQuYy0xOTIyLSAqIHVzZXJsYW5kIHdpdGggc3JjJiM0MztyZXR2YWwsIGRzdCYjNDM7cmV2YWwsIGxlbi1yZXR2YWwgaWYgaXQgd2FudHMgdG8ga25vd1xuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTkzMy0gKi9cbm1tL3VzZXJmYXVsdGZkLmM6MTkzNDpzdGF0aWMgc3NpemVfdCBtb3ZlX3BhZ2VzKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsXG5tbS91c2VyZmF1bHRmZC5jLTE5MzUtXHRcdCAgIHVuc2lnbmVkIGxvbmcgc3JjX3N0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbiwgX191NjQgbW9kZSlcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTIwMTQtXHRcdCAqIGJlIHN0cmljdC4gSWYgZHN0X3BtZCBjaGFuZ2VzIGludG8gVFBIIGFmdGVyIHRoaXMgY2hlY2ssIHRoZVxubW0vdXNlcmZhdWx0ZmQuYzoyMDE1Olx0XHQgKiBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgcmV0cnlcbm1tL3VzZXJmYXVsdGZkLmM6MjAxNjpcdFx0ICogd2hpbGUgbW92ZV9wYWdlc19wdGUoKSB3aWxsIGRldGVjdCB0aGUgY2hhbmdlIGFuZCBmYWlsLlxubW0vdXNlcmZhdWx0ZmQuYy0yMDE3LVx0XHQgKi9cbi0tXG5tbS91c2VyZmF1bHRmZC5jLTIwNDEtXHRcdFx0XHRzcGxpdF9odWdlX3BtZChzcmNfdm1hLCBzcmNfcG1kLCBzcmNfYWRkcik7XG5tbS91c2VyZmF1bHRmZC5jOjIwNDI6XHRcdFx0XHQvKiBUaGUgZm9saW8gd2lsbCBiZSBzcGxpdCBieSBtb3ZlX3BhZ2VzX3B0ZSgpICovXG5tbS91c2VyZmF1bHRmZC5jLTIwNDMtXHRcdFx0XHRjb250aW51ZTtcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTIwNDUtXG5tbS91c2VyZmF1bHRmZC5jOjIwNDY6XHRcdFx0ZXJyID0gbW92ZV9wYWdlc19odWdlX3BtZChtbSwgZHN0X3BtZCwgc3JjX3BtZCxcbm1tL3VzZXJmYXVsdGZkLmMtMjA0Ny1cdFx0XHRcdFx0XHQgIGRzdF9wbWR2YWwsIGRzdF92bWEsIHNyY192bWEsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0yMDY4LVxubW0vdXNlcmZhdWx0ZmQuYzoyMDY5Olx0XHRcdHJldCA9IG1vdmVfcGFnZXNfcHRlcyhtbSwgZHN0X3BtZCwgc3JjX3BtZCxcbm1tL3VzZXJmYXVsdGZkLmMtMjA3MC1cdFx0XHRcdFx0ICAgICAgZHN0X3ZtYSwgc3JjX3ZtYSwgZHN0X2FkZHIsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYz00MjE2PXN0YXRpYyBpbnQgdXNlcmZhdWx0ZmRfbW92ZShzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy00MjU1LVx0aWYgKG1tZ2V0X25vdF96ZXJvKG1tKSkge1xubW0vdXNlcmZhdWx0ZmQuYzo0MjU2Olx0XHRyZXQgPSBtb3ZlX3BhZ2VzKGN0eCwgdWZmZGlvX21vdmUuZHN0LCB1ZmZkaW9fbW92ZS5zcmMsXG5tbS91c2VyZmF1bHRmZC5jLTQyNTctXHRcdFx0XHQgdWZmZGlvX21vdmUubGVuLCB1ZmZkaW9fbW92ZS5tb2RlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzIzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIHRoZSBQYWdlIE1vdmVtZW50IEZsb3cqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBwYWdlIG1pZ3JhdGlvbiBjb2RlLCBhbmQgaXQgbG9va3MgbGlrZSBgbW92ZV9wYWdlc2AgaXMgdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgdWx0aW1hdGVseSBkb2luZyB0aGUgaGVhdnkgbGlmdGluZywgYXMgZXhwZWN0ZWQuIE5vdywgd2hlcmUgaXMgdGhpcyBgbW92ZV9wYWdlc2AgYWN0dWFsbHkgYmVpbmcgKmNhbGxlZCogZnJvbT8gQWgsIGxvb2tzIGxpa2UgYHVzZXJmYXVsdGZkX21vdmVgIGlzIHRoZSBpbW1lZGlhdGUgY2FsbGVyLiBUaGF0JiMzOTtzIGEga2V5IHBvaW50IHRvIHJlbWVtYmVyLiBJdCBtYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIG5hbWUuIEFuZCBgdXNlcmZhdWx0ZmRfbW92ZWAsIGFzIGJlc3QgYXMgSSBjYW4gdGVsbCBmcm9tIGEgcXVpY2sgZ2xhbmNlLCBzZWVtcyB0byBiZSBpbnZva2VkIHZpYSBgdXNlcmZhdWx0ZmRfaW9jdGxgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBsaWtlbHkgYSByZWxhdGVkIHN5c3RlbSBjYWxsIGZvciB1c2VyZmF1bHRmZCBvcGVyYXRpb25zLiBSaWdodCwgbWFrZXMgc2Vuc2UgaW4gdGhlIGdyZWF0ZXIgY29udGV4dC4KClNvLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGVsdmUgaW50byBgdXNlcmZhdWx0ZmRfbW92ZWAgaXRzZWxmIGFuZCBmaWd1cmUgb3V0IGhvdyBpdCYjMzk7cyBzZXR0aW5nIHVwIHRoZSBjYWxsIHRvIGBtb3ZlX3BhZ2VzYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGFyZ3VtZW50cyBpdCYjMzk7cyBwYXNzaW5nLCBhbnkgY29udGV4dCBpdCYjMzk7cyBwcm92aWRpbmcsIGFuZCB3aGF0IGNoZWNrcyBpdCBtaWdodCBiZSBwZXJmb3JtaW5nIGJlZm9yZSB0cmlnZ2VyaW5nIHRoZSBwYWdlIG1pZ3JhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBpbiBwbGFjZSB0aGVyZSwgYmVjYXVzZSB0aGF0JiMzOTtzIHdoZXJlIGFueSBwb3NzaWJsZSBwcm9ibGVtcyBhcmUgbW9zdCBsaWtlbHkgdG8gbGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyZmF1bHRmZF9tb3ZlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdXNlcmZhdWx0ZmQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS91c2VyZmF1bHRmZC5jPTQyMDc9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdWZmZF9jdHhfZmVhdHVyZXMoX191NjQgdXNlcl9mZWF0dXJlcylcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTQyMTUtXG5tbS91c2VyZmF1bHRmZC5jOjQyMTY6c3RhdGljIGludCB1c2VyZmF1bHRmZF9tb3ZlKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCxcbm1tL3VzZXJmYXVsdGZkLmMtNDIxNy1cdFx0XHQgICAgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxubW0vdXNlcmZhdWx0ZmQuYz00MzUwPXN0YXRpYyBsb25nIHVzZXJmYXVsdGZkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBjbWQsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy00Mzc4LVx0Y2FzZSBVRkZESU9fTU9WRTpcbm1tL3VzZXJmYXVsdGZkLmM6NDM3OTpcdFx0cmV0ID0gdXNlcmZhdWx0ZmRfbW92ZShjdHgsIGFyZyk7XG5tbS91c2VyZmF1bHRmZC5jLTQzODAtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNjgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBVc2VyZmF1bHRmZCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgc3BlY2lmaWNhbGx5IHRoZSBjaGFuZ2UgaW4gYG1vdmVfcGFnZXNgIHdpdGhpbiBgbW0vdXNlcmZhdWx0ZmQuY2AuIFRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gc2VlbXMgdG8gYmUgaW4gaG93IGl0IGhhbmRsZXMgdGhlIGAtRUFHQUlOYCBlcnJvci4gTGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gQmVmb3JlLCBpZiBgZXJyYCB3YXMgYC1FQUdBSU5gLCB0aGUgY29kZSB3b3VsZCBqdXN0IGBjb250aW51ZWAgdGhlIGxvb3AuIE5vdywgaXQmIzM5O3Mgc2V0dGluZyBgZXJyYCB0byBgMGAgKmJlZm9yZSogY29udGludWluZy4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aHkgdGhlIGV4dHJhIGFzc2lnbm1lbnQ/IFRoZSBvcmlnaW5hbCBjb2RlIGhhZCB0aGlzOgoKYGBgYwoJCWlmIChlcnIpIHsKCQkJaWYgKGVyciA9PSAtRUFHQUlOKQoJCQkJY29udGludWU7CgkJCWJyZWFrOwoJCX0KYGBgCgpBbmQgbm93IGl0JiMzOTtzIHRoaXM6CgpgYGBjCgkJaWYgKGVycikgewoJCQlpZiAoZXJyID09IC1FQUdBSU4pIHsKCQkJCWVyciA9IDA7CgkJCQljb250aW51ZTsKCQkJfQoJCQlicmVhazsKCQl9CmBgYAoKU28gYmFzaWNhbGx5IGl0IHNlZW1zIGxpa2UgdGhleSYjMzk7cmUgdHJ5aW5nIHRvIHByZXZlbnQgYC1FQUdBSU5gIGZyb20gYmVpbmcgdGhlIGZpbmFsIGVycm9yIGNvZGUgcmV0dXJuZWQgaWYgdGhlIGxvb3AgZW5kcyBhZnRlciBoaXR0aW5nIHRoYXQgZXJyb3IuIEJ1dCBpcyB0aGUgZXh0cmEgYXNzaWdubWVudCAqbmVjZXNzYXJ5Kj8gV2hhdCYjMzk7cyB0aGUgY29udGV4dCBoZXJlPyBJZiB0aGUgbG9vcCBlbmRzIHdpdGhvdXQgcmVzZXR0aW5nIGBlcnJgIGluIHRoZSBuZXh0IGl0ZXJhdGlvbiwgYW5kIGlmIHdlJiMzOTtyZSAqbm90KiByZXNldHRpbmcgYGVycmAsIGl0IHNlZW1zIGxpa2Ugd2UgbWlnaHQgcmV0dXJuIGAtRUFHQUlOYCBlcnJvbmVvdXNseS4KCkkgbmVlZCB0byBxdWlja2x5IGFuYWx5emUgdGhlIGBtb3ZlX3BhZ2VzYCBsb29wIGxvZ2ljIHRvIGJlIGNlcnRhaW4uIExldCBtZSBkcmlsbCBkb3duIGFuZCBsb29rIGF0IHRoZSBjb250cm9sIGZsb3cgaW4gbW9yZSBkZXRhaWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZXJlIGFyZSBzcGVjaWZpYyBzY2VuYXJpb3Mgd2hlcmUgYGVycmAgbWlnaHQgYmUgbGVmdCBhcyBgLUVBR0FJTmAgYXQgdGhlIGVuZCBvZiB0aGUgbG9vcCwgb3IgaWYgaXQgaXMgYWx3YXlzIHJlc2V0IGluIHN1YnNlcXVlbnQgaXRlcmF0aW9ucy4gVGhpcyBzdWJ0bGUgY2hhbmdlIGNvdWxkIGltcGFjdCBlcnJvciBoYW5kbGluZyBzaWduaWZpY2FudGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdXNlcmZhdWx0ZmQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIwNDA6XHRcdFx0XHRcdHNwaW5fdW5sb2NrKHB0bCk7XG4yMDQxOlx0XHRcdFx0XHRzcGxpdF9odWdlX3BtZChzcmNfdm1hLCBzcmNfcG1kLCBzcmNfYWRkcik7XG4yMDQyOlx0XHRcdFx0XHQvKiBUaGUgZm9saW8gd2lsbCBiZSBzcGxpdCBieSBtb3ZlX3BhZ2VzX3B0ZSgpICovXG4yMDQzOlx0XHRcdFx0XHRjb250aW51ZTtcbjIwNDQ6XHRcdFx0XHR9XG4yMDQ1Olx0XG4yMDQ2Olx0XHRcdFx0ZXJyID0gbW92ZV9wYWdlc19odWdlX3BtZChtbSwgZHN0X3BtZCwgc3JjX3BtZCxcbjIwNDc6XHRcdFx0XHRcdFx0XHQgIGRzdF9wbWR2YWwsIGRzdF92bWEsIHNyY192bWEsXG4yMDQ4Olx0XHRcdFx0XHRcdFx0ICBkc3RfYWRkciwgc3JjX2FkZHIpO1xuMjA0OTpcdFx0XHRcdHN0ZXBfc2l6ZSA9IEhQQUdFX1BNRF9TSVpFO1xuMjA1MDpcdFx0XHR9IGVsc2Uge1xuMjA1MTpcdFx0XHRcdGxvbmcgcmV0O1xuMjA1MjpcdFxuMjA1MzpcdFx0XHRcdGlmIChwbWRfbm9uZSgqc3JjX3BtZCkpIHtcbjIwNTQ6XHRcdFx0XHRcdGlmICghKG1vZGUgXHUwMDI2IFVGRkRJT19NT1ZFX01PREVfQUxMT1dfU1JDX0hPTEVTKSkge1xuMjA1NTpcdFx0XHRcdFx0XHRlcnIgPSAtRU5PRU5UO1xuMjA1NjpcdFx0XHRcdFx0XHRicmVhaztcbjIwNTc6XHRcdFx0XHRcdH1cbjIwNTg6XHRcdFx0XHRcdGlmICh1bmxpa2VseShfX3B0ZV9hbGxvYyhtbSwgc3JjX3BtZCkpKSB7XG4yMDU5Olx0XHRcdFx0XHRcdGVyciA9IC1FTk9NRU07XG4yMDYwOlx0XHRcdFx0XHRcdGJyZWFrO1xuMjA2MTpcdFx0XHRcdFx0fVxuMjA2MjpcdFx0XHRcdH1cbjIwNjM6XHRcbjIwNjQ6XHRcdFx0XHRpZiAodW5saWtlbHkocHRlX2FsbG9jKG1tLCBkc3RfcG1kKSkpIHtcbjIwNjU6XHRcdFx0XHRcdGVyciA9IC1FTk9NRU07XG4yMDY2Olx0XHRcdFx0XHRicmVhaztcbjIwNjc6XHRcdFx0XHR9XG4yMDY4Olx0XG4yMDY5Olx0XHRcdFx0cmV0ID0gbW92ZV9wYWdlc19wdGVzKG1tLCBkc3RfcG1kLCBzcmNfcG1kLFxuMjA3MDpcdFx0XHRcdFx0XHQgICAgICBkc3Rfdm1hLCBzcmNfdm1hLCBkc3RfYWRkcixcbjIwNzE6XHRcdFx0XHRcdFx0ICAgICAgc3JjX2FkZHIsIHNyY19lbmQgLSBzcmNfYWRkciwgbW9kZSk7XG4yMDcyOlx0XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbjIwNzM6XHRcdFx0XHRcdGVyciA9IHJldDtcbjIwNzQ6XHRcdFx0XHRlbHNlXG4yMDc1Olx0XHRcdFx0XHRzdGVwX3NpemUgPSByZXQ7XG4yMDc2Olx0XHRcdH1cbjIwNzc6XHRcbjIwNzg6XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4yMDc5Olx0XG4yMDgwOlx0XHRcdGlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xuMjA4MTpcdFx0XHRcdC8qIERvIG5vdCBvdmVycmlkZSBhbiBlcnJvciAqL1xuMjA4MjpcdFx0XHRcdGlmICghZXJyIHx8IGVyciA9PSAtRUFHQUlOKVxuMjA4MzpcdFx0XHRcdFx0ZXJyID0gLUVJTlRSO1xuMjA4NDpcdFx0XHRcdGJyZWFrO1xuMjA4NTpcdFx0XHR9XG4yMDg2Olx0XG4yMDg3Olx0XHRcdGlmIChlcnIpIHtcbjIwODg6XHRcdFx0XHRpZiAoZXJyID09IC1FQUdBSU4pIHtcbjIwODk6XHRcdFx0XHRcdGVyciA9IDA7XG4yMDkwOlx0XHRcdFx0XHRjb250aW51ZTtcbjIwOTE6XHRcdFx0XHR9XG4yMDkyOlx0XHRcdFx0YnJlYWs7XG4yMDkzOlx0XHRcdH1cbjIwOTQ6XHRcbjIwOTU6XHRcdFx0LyogUHJvY2VlZCB0byB0aGUgbmV4dCBwYWdlICovXG4yMDk2Olx0XHRcdGRzdF9hZGRyICYjNDM7PSBzdGVwX3NpemU7XG4yMDk3Olx0XHRcdHNyY19hZGRyICYjNDM7PSBzdGVwX3NpemU7XG4yMDk4Olx0XHRcdG1vdmVkICYjNDM7PSBzdGVwX3NpemU7XG4yMDk5Olx0XHR9XG4yMTAwOlx0XG4yMTAxOlx0b3V0X3VubG9jazpcbjIxMDI6XHRcdHVwX3JlYWQoXHUwMDI2Y3R4LVx1MDAzZW1hcF9jaGFuZ2luZ19sb2NrKTtcbjIxMDM6XHRcdHVmZmRfbW92ZV91bmxvY2soZHN0X3ZtYSwgc3JjX3ZtYSk7XG4yMTA0Olx0b3V0OlxuMjEwNTpcdFx0Vk1fV0FSTl9PTl9PTkNFKG1vdmVkIFx1MDAzYyAwKTtcbjIxMDY6XHRcdFZNX1dBUk5fT05fT05DRShlcnIgXHUwMDNlIDApO1xuMjEwNzpcdFx0Vk1fV0FSTl9PTl9PTkNFKCFtb3ZlZCBcdTAwMjZcdTAwMjYgIWVycik7XG4yMTA4Olx0XHRyZXR1cm4gbW92ZWQgPyBtb3ZlZCA6IGVycjtcbjIxMDk6XHR9XG4yMTEwOlx0XG4yMTExOlx0c3RhdGljIGJvb2wgdm1hX2Nhbl91c2VyZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXG4yMTEyOlx0XHRcdCAgICAgICBib29sIHdwX2FzeW5jKVxuMjExMzpcdHtcbjIxMTQ6XHRcdGNvbnN0IHN0cnVjdCB2bV91ZmZkX29wcyAqb3BzID0gdm1hX3VmZmRfb3BzKHZtYSk7XG4yMTE1Olx0XG4yMTE2Olx0XHRpZiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiAoVk1fRFJPUFBBQkxFIHwgVk1fU0hBRE9XX1NUQUNLKSlcbjIxMTc6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMjExODpcdFxuMjExOTpcdFx0aWYgKCFpc192bV9odWdldGxiX3BhZ2Uodm1hKSBcdTAwMjZcdTAwMjYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fU1BFQ0lBTCkpXG4yMTIwOlx0XHRcdHJldHVybiBmYWxzZTtcbjIxMjE6XHRcbjIxMjI6XHRcdHZtX2ZsYWdzIFx1MDAyNj0gX19WTV9VRkZEX0ZMQUdTO1xuMjEyMzpcdFxuMjEyNDpcdFx0LypcbjIxMjU6XHRcdCAqIElmIFdQIGlzIHRoZSBvbmx5IG1vZGUgZW5hYmxlZCBhbmQgY29udGV4dCBpcyB3cCBhc3luYywgYWxsb3cgYW55XG4yMTI2Olx0XHQgKiBtZW1vcnkgdHlwZS5cbjIxMjc6XHRcdCAqL1xuMjEyODpcdFx0aWYgKHdwX2FzeW5jIFx1MDAyNlx1MDAyNiAodm1fZmxhZ3MgPT0gVk1fVUZGRF9XUCkpXG4yMTI5Olx0XHRcdHJldHVybiB0cnVlO1xuMjEzMDpcdFxuMjEzMTpcdFx0LyogRm9yIGFueSBvdGhlciBtb2RlIHJlamVjdCBWTUFzIHRoYXQgZG9uJiMzOTt0IGltcGxlbWVudCB2bV91ZmZkX29wcyAqL1xuMjEzMjpcdFx0aWYgKCFvcHMpXG4yMTMzOlx0XHRcdHJldHVybiBmYWxzZTtcbjIxMzQ6XHRcbjIxMzU6XHRcdC8qXG4yMTM2Olx0XHQgKiBJZiB1c2VyIHJlcXVlc3RlZCB1ZmZkLXdwIGJ1dCBub3QgZW5hYmxlZCBwdGUgbWFya2VycyBmb3JcbjIxMzc6XHRcdCAqIHVmZmQtd3AsIHRoZW4gb25seSBhbm9ueW1vdXMgbWVtb3J5IGlzIHN1cHBvcnRlZFxuMjEzODpcdFx0ICovXG4yMTM5Olx0XHRpZiAoIXVmZmRfc3VwcG9ydHNfd3BfbWFya2VyKCkgXHUwMDI2XHUwMDI2ICh2bV9mbGFncyBcdTAwMjYgVk1fVUZGRF9XUCkgXHUwMDI2XHUwMDI2XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI5MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLgoKKipBbmFseXppbmcgdGhlIEVycm9yIEhhbmRsaW5nIExvZ2ljKioKCkhtbSwgc28gaWYgdGhlIGVycm9yIGNvZGUgaXMgYC1FQUdBSU5gLCBpdCYjMzk7cyBiZWluZyBleHBsaWNpdGx5IHJlc2V0IHRvIGAwYCBhbmQgdGhlbiB0aGUgcHJvZ3JhbSBqdXN0IGtlZXBzIGdvaW5nLiBSaWdodC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBCdXQgaWYgdGhlIGxvb3AgY29uZGl0aW9uIGlzIG1ldCBhbmQgdGhlIGxvb3AgZXhpdHMgY2xlYW5seSwgdGhlbiBgZXJyYCB3aWxsICphbHNvKiBiZSBgMGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIHdvcmtzIGluIHRoZSBjb250ZXh0IG9mIHRoZSByZXN0IG9mIHRoZSBjb2RlLiBJcyB0aGF0IHRoZSBpbnRlbnRpb24sIG9yIGlzIHNvbWV0aGluZyBlbHNlIGdvaW5nIG9uPyBJIHJlYWxseSBuZWVkIHRvIGlkZW50aWZ5IHRoYXQgbG9vcCYjMzk7cyBjb25kaXRpb24sIHRoZSBleGl0IGNvbmRpdGlvbiBpcyBub3QgY2xlYXIuIElzIGBlcnIgPSAwYCB0aGUgbm9ybWFsIGNhc2UgdG8gYnJlYWsgdGhlIGxvb3Agb3IgYW4gZWRnZSBjYXNlPyBJJiMzOTttIG1pc3Npbmcgc29tZSBjb250ZXh0IGhlcmUuIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBkaXZlIGludG8gdGhhdCBsb29wJiMzOTtzIGNvbmRpdGlvbiB0byBiZSBzdXJlIEkmIzM5O20gZm9sbG93aW5nIHRoZSBsb2dpYyBjb3JyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdXNlcmZhdWx0ZmQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE5MzA6XHQgKiB2aXJ0dWFsIHJlZ2lvbnMgd2l0aG91dCBrbm93aW5nIGlmIHRoZXJlIGFyZSB0cmFuc3BhcmVudCBodWdlcGFnZVxuMTkzMTpcdCAqIGluIHRoZSByZWdpb25zIG9yIG5vdCwgYnV0IHByZXZlbnRpbmcgdGhlIHJpc2sgb2YgaGF2aW5nIHRvIHNwbGl0XG4xOTMyOlx0ICogdGhlIGh1Z2VwbWQgZHVyaW5nIHRoZSByZW1hcC5cbjE5MzM6XHQgKi9cbjE5MzQ6XHRzdGF0aWMgc3NpemVfdCBtb3ZlX3BhZ2VzKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsXG4xOTM1Olx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc3JjX3N0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbiwgX191NjQgbW9kZSlcbjE5MzY6XHR7XG4xOTM3Olx0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN0eC1cdTAwM2VtbTtcbjE5Mzg6XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjX3ZtYSwgKmRzdF92bWE7XG4xOTM5Olx0XHR1bnNpZ25lZCBsb25nIHNyY19hZGRyLCBkc3RfYWRkciwgc3JjX2VuZDtcbjE5NDA6XHRcdHBtZF90ICpzcmNfcG1kLCAqZHN0X3BtZDtcbjE5NDE6XHRcdGxvbmcgZXJyID0gLUVJTlZBTDtcbjE5NDI6XHRcdHNzaXplX3QgbW92ZWQgPSAwO1xuMTk0MzpcdFxuMTk0NDpcdFx0LyogU2FuaXRpemUgdGhlIGNvbW1hbmQgcGFyYW1ldGVycy4gKi9cbjE5NDU6XHRcdFZNX1dBUk5fT05fT05DRShzcmNfc3RhcnQgXHUwMDI2IH5QQUdFX01BU0spO1xuMTk0NjpcdFx0Vk1fV0FSTl9PTl9PTkNFKGRzdF9zdGFydCBcdTAwMjYgflBBR0VfTUFTSyk7XG4xOTQ3Olx0XHRWTV9XQVJOX09OX09OQ0UobGVuIFx1MDAyNiB+UEFHRV9NQVNLKTtcbjE5NDg6XHRcbjE5NDk6XHRcdC8qIERvZXMgdGhlIGFkZHJlc3MgcmFuZ2Ugd3JhcCwgb3IgaXMgdGhlIHNwYW4gemVyby1zaXplZD8gKi9cbjE5NTA6XHRcdFZNX1dBUk5fT05fT05DRShzcmNfc3RhcnQgJiM0MzsgbGVuIFx1MDAzYyBzcmNfc3RhcnQpO1xuMTk1MTpcdFx0Vk1fV0FSTl9PTl9PTkNFKGRzdF9zdGFydCAmIzQzOyBsZW4gXHUwMDNjIGRzdF9zdGFydCk7XG4xOTUyOlx0XG4xOTUzOlx0XHRlcnIgPSB1ZmZkX21vdmVfbG9jayhtbSwgZHN0X3N0YXJ0LCBzcmNfc3RhcnQsIFx1MDAyNmRzdF92bWEsIFx1MDAyNnNyY192bWEpO1xuMTk1NDpcdFx0aWYgKGVycilcbjE5NTU6XHRcdFx0Z290byBvdXQ7XG4xOTU2Olx0XG4xOTU3Olx0XHQvKiBSZS1jaGVjayBhZnRlciB0YWtpbmcgbWFwX2NoYW5naW5nX2xvY2sgKi9cbjE5NTg6XHRcdGVyciA9IC1FQUdBSU47XG4xOTU5Olx0XHRkb3duX3JlYWQoXHUwMDI2Y3R4LVx1MDAzZW1hcF9jaGFuZ2luZ19sb2NrKTtcbjE5NjA6XHRcdGlmIChsaWtlbHkoYXRvbWljX3JlYWQoXHUwMDI2Y3R4LVx1MDAzZW1tYXBfY2hhbmdpbmcpKSlcbjE5NjE6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuMTk2MjpcdFx0LypcbjE5NjM6XHRcdCAqIE1ha2Ugc3VyZSB0aGUgdm1hIGlzIG5vdCBzaGFyZWQsIHRoYXQgdGhlIHNyYyBhbmQgZHN0IHJlbWFwXG4xOTY0Olx0XHQgKiByYW5nZXMgYXJlIGJvdGggdmFsaWQgYW5kIGZ1bGx5IHdpdGhpbiBhIHNpbmdsZSBleGlzdGluZ1xuMTk2NTpcdFx0ICogdm1hLlxuMTk2NjpcdFx0ICovXG4xOTY3Olx0XHRlcnIgPSAtRUlOVkFMO1xuMTk2ODpcdFx0aWYgKHNyY192bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1NIQVJFRClcbjE5Njk6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuMTk3MDpcdFx0aWYgKHNyY19zdGFydCAmIzQzOyBsZW4gXHUwMDNlIHNyY192bWEtXHUwMDNldm1fZW5kKVxuMTk3MTpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xOTcyOlx0XG4xOTczOlx0XHRpZiAoZHN0X3ZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fU0hBUkVEKVxuMTk3NDpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xOTc1Olx0XHRpZiAoZHN0X3N0YXJ0ICYjNDM7IGxlbiBcdTAwM2UgZHN0X3ZtYS1cdTAwM2V2bV9lbmQpXG4xOTc2Olx0XHRcdGdvdG8gb3V0X3VubG9jaztcbjE5Nzc6XHRcbjE5Nzg6XHRcdGVyciA9IHZhbGlkYXRlX21vdmVfYXJlYXMoY3R4LCBzcmNfdm1hLCBkc3Rfdm1hKTtcbjE5Nzk6XHRcdGlmIChlcnIpXG4xOTgwOlx0XHRcdGdvdG8gb3V0X3VubG9jaztcbjE5ODE6XHRcbjE5ODI6XHRcdGZvciAoc3JjX2FkZHIgPSBzcmNfc3RhcnQsIGRzdF9hZGRyID0gZHN0X3N0YXJ0LCBzcmNfZW5kID0gc3JjX3N0YXJ0ICYjNDM7IGxlbjtcbjE5ODM6XHRcdCAgICAgc3JjX2FkZHIgXHUwMDNjIHNyY19lbmQ7KSB7XG4xOTg0Olx0XHRcdHNwaW5sb2NrX3QgKnB0bDtcbjE5ODU6XHRcdFx0cG1kX3QgZHN0X3BtZHZhbDtcbjE5ODY6XHRcdFx0dW5zaWduZWQgbG9uZyBzdGVwX3NpemU7XG4xOTg3Olx0XG4xOTg4Olx0XHRcdC8qXG4xOTg5Olx0XHRcdCAqIEJlbG93IHdvcmtzIGJlY2F1c2UgYW5vbnltb3VzIGFyZWEgd291bGQgbm90IGhhdmUgYVxuMTk5MDpcdFx0XHQgKiB0cmFuc3BhcmVudCBodWdlIFBVRC4gSWYgZmlsZS1iYWNrZWQgc3VwcG9ydCBpcyBhZGRlZCxcbjE5OTE6XHRcdFx0ICogdGhhdCBjYXNlIHdvdWxkIG5lZWQgdG8gYmUgaGFuZGxlZCBoZXJlLlxuMTk5MjpcdFx0XHQgKi9cbjE5OTM6XHRcdFx0c3JjX3BtZCA9IG1tX2ZpbmRfcG1kKG1tLCBzcmNfYWRkcik7XG4xOTk0Olx0XHRcdGlmICh1bmxpa2VseSghc3JjX3BtZCkpIHtcbjE5OTU6XHRcdFx0XHRpZiAoIShtb2RlIFx1MDAyNiBVRkZESU9fTU9WRV9NT0RFX0FMTE9XX1NSQ19IT0xFUykpIHtcbjE5OTY6XHRcdFx0XHRcdGVyciA9IC1FTk9FTlQ7XG4xOTk3Olx0XHRcdFx0XHRicmVhaztcbjE5OTg6XHRcdFx0XHR9XG4xOTk5Olx0XHRcdFx0c3JjX3BtZCA9IG1tX2FsbG9jX3BtZChtbSwgc3JjX2FkZHIpO1xuMjAwMDpcdFx0XHRcdGlmICh1bmxpa2VseSghc3JjX3BtZCkpIHtcbjIwMDE6XHRcdFx0XHRcdGVyciA9IC1FTk9NRU07XG4yMDAyOlx0XHRcdFx0XHRicmVhaztcbjIwMDM6XHRcdFx0XHR9XG4yMDA0Olx0XHRcdH1cbjIwMDU6XHRcdFx0ZHN0X3BtZCA9IG1tX2FsbG9jX3BtZChtbSwgZHN0X2FkZHIpO1xuMjAwNjpcdFx0XHRpZiAodW5saWtlbHkoIWRzdF9wbWQpKSB7XG4yMDA3Olx0XHRcdFx0ZXJyID0gLUVOT01FTTtcbjIwMDg6XHRcdFx0XHRicmVhaztcbjIwMDk6XHRcdFx0fVxuMjAxMDpcdFxuMjAxMTpcdFx0XHRkc3RfcG1kdmFsID0gcG1kcF9nZXRfbG9ja2xlc3MoZHN0X3BtZCk7XG4yMDEyOlx0XHRcdC8qXG4yMDEzOlx0XHRcdCAqIElmIHRoZSBkc3RfcG1kIGlzIG1hcHBlZCBhcyBUSFAgZG9uJiMzOTt0IG92ZXJyaWRlIGl0IGFuZCBqdXN0XG4yMDE0Olx0XHRcdCAqIGJlIHN0cmljdC4gSWYgZHN0X3BtZCBjaGFuZ2VzIGludG8gVFBIIGFmdGVyIHRoaXMgY2hlY2ssIHRoZVxuMjAxNTpcdFx0XHQgKiBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgcmV0cnlcbjIwMTY6XHRcdFx0ICogd2hpbGUgbW92ZV9wYWdlc19wdGUoKSB3aWxsIGRldGVjdCB0aGUgY2hhbmdlIGFuZCBmYWlsLlxuMjAxNzpcdFx0XHQgKi9cbjIwMTg6XHRcdFx0aWYgKHVubGlrZWx5KHBtZF90cmFuc19odWdlKGRzdF9wbWR2YWwpKSkge1xuMjAxOTpcdFx0XHRcdGVyciA9IC1FRVhJU1Q7XG4yMDIwOlx0XHRcdFx0YnJlYWs7XG4yMDIxOlx0XHRcdH1cbjIwMjI6XHRcbjIwMjM6XHRcdFx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhzcmNfcG1kLCBzcmNfdm1hKTtcbjIwMjQ6XHRcdFx0aWYgKHB0bCkge1xuMjAyNTpcdFx0XHRcdC8qIENoZWNrIGlmIHdlIGNhbiBtb3ZlIHRoZSBwbWQgd2l0aG91dCBzcGxpdHRpbmcgaXQuICovXG4yMDI2Olx0XHRcdFx0aWYgKG1vdmVfc3BsaXRzX2h1Z2VfcG1kKGRzdF9hZGRyLCBzcmNfYWRkciwgc3JjX3N0YXJ0ICYjNDM7IGxlbikgfHxcbjIwMjc6XHRcdFx0XHQgICAgIXBtZF9ub25lKGRzdF9wbWR2YWwpKSB7XG4yMDI4Olx0XHRcdFx0XHQvKiBDYW4gYmUgYSBtaWdyYXRpb24gZW50cnkgKi9cbjIwMjk6XHRcdFx0XHRcdGlmIChwbWRfcHJlc2VudCgqc3JjX3BtZCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI0MwoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDIwNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFVzZXJmYXVsdGZkIE1vdmUgUGFnZSBMb29wKioKCk9rYXksIHNvIGhlcmUmIzM5O3MgdGhlIGJyZWFrZG93biBvZiB0aGlzIGNvZGUsIGFzIEkgc2VlIGl0LiBUaGUgY29yZSBvZiB0aGUgaXNzdWUgbGllcyB3aXRoaW4gdGhpcyBsb29wIHVzZWQgZm9yIG1vdmluZyBwYWdlcyBiZXR3ZWVuIGFkZHJlc3Mgc3BhY2VzLCBzcGVjaWZpY2FsbHkgdGhlIGhhbmRsaW5nIG9mIGAtRUFHQUlOYCBlcnJvcnMgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgbG9vcCYjMzk7cyBjb250cm9sIGZsb3cuCgpUaGUgbG9vcCwgYXMgaXQgc3RhbmRzLCB1c2VzIGEgYGNvbnRpbnVlYCBzdGF0ZW1lbnQgdG8gcmV0cnkgdGhlIHNhbWUgcGFnZSBtb3ZlIGlmIGFuIGAtRUFHQUlOYCBlcnJvciBpcyBlbmNvdW50ZXJlZC4gVGhlIGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBhIG1pc3NpbmcgYGVyciA9IDBgIGJlZm9yZSB0aGUgYGNvbnRpbnVlYCB3YXMgdGhlIHByb2JsZW0uIEhvd2V2ZXIsIGZ1cnRoZXIgaW5zcGVjdGlvbiByZXZlYWxlZCBhIG1vcmUgc3VidGxlIGZsYXcuIFRoZSBwcmltYXJ5IGlzc3VlIHN0ZW1zIGZyb20gdGhlIGludGVyYWN0aW9uIG9mIGAtRUFHQUlOYCB3aXRoIHRoZSBgbW92ZV9wYWdlc19wdGVzYCBvciBgbW92ZV9wYWdlc19odWdlX3BtZGAgY2FsbHMuCgpUaGUgY3JpdGljYWwgcGF0aCBsb29rcyBsaWtlIHRoaXM6CgoxLiAgV2UgZW50ZXIgdGhlIGxvb3AuCjIuICBJZiBgZXJyID09IC1FQUdBSU5gLCBpdCBnZXRzIGNsZWFyZWQgYW5kIHRoZSBsb29wIGBjb250aW51ZWBzLgozLiAgVGhlIG1vdmUgb3BlcmF0aW9uIChgbW92ZV9wYWdlc19wdGVzYCBvciBgbW92ZV9wYWdlc19odWdlX3BtZGApIHJ1bnMuCjQuICBJZiB0aGUgbW92ZSAqc3VjY2VlZHMqLCBidXQgYGVycmAgaXMgbm90IG92ZXJ3cml0dGVuIChpZiBgcmV0ICZndDs9IDBgKSwgdGhlbiBgZXJyYCBzdGlsbCByZXRhaW5zIHRoZSBvbGQgYC1FQUdBSU5gIHZhbHVlLiBUaGlzIGlzIGEgdmVyeSByZWFsIHBhdGguCjUuICBJZiB3ZSBoaXQgdGhlIGNvbmRpdGlvbmFsOiBgaWYgKGVyciA9PSAtRUFHQUlOKSBjb250aW51ZTtgLCB0aGUgaW5jcmVtZW50IG9mIGBzcmNfYWRkcmAsIGBkc3RfYWRkcmAsIGFuZCBgbW92ZWRgIGdldHMgc2tpcHBlZC4KNi4gIFRoZSBsb29wIGdvZXMgdG8gdGhlIHRvcCwgd2hlcmUgaXQgdHJpZXMgdG8gcmUtbW92ZSB0aGUgc2FtZSwgYWxyZWFkeSBtb3ZlZCBwYWdlLCBsZWFkaW5nIHRvIGEgbG9vcCBjb25kaXRpb24uCgpUaGUgc2NlbmFyaW8gd2hlcmUgYHNwbGl0X2h1Z2VfcG1kYCByZXR1cm5zIHRydWUgcHJlc2VudHMgYW5vdGhlciByaXNrLiBJbiB0aGlzIHBhdGgsIHRoZSBsb29wIGBjb250aW51ZWBzLCBhbmQgYGVycmAgKmlzIG5vdCBvdmVyd3JpdHRlbi4qIFNvLCBpZiBgZXJyYCBoYXMgYSBwcmV2aW91cyBgLUVBR0FJTmAsIHRoaXMgd2lsbCBjb250aW51ZS4KClRoZSBmaXgsIHRoZXJlZm9yZSwgaXMgdG8gZXhwbGljaXRseSByZXNldCBgZXJyID0gMGAgd2hlbmV2ZXIgYC1FQUdBSU5gIGlzIGVuY291bnRlcmVkIGJlZm9yZSBgY29udGludWVgaW5nLiBUaGlzIHdpbGwgZ3VhcmFudGVlIHRoYXQgc3VjY2VzcyBpbiBhbiBvcGVyYXRpb24gb3ZlcndyaXRlcyB0aGUgZXJyb3Igc3RhdGUuCgpUaGlzIGJ1ZyBvcGVucyB1cCB0aGUgcG90ZW50aWFsIGZvcjoKCiogICBJbmZpbml0ZSBsb29wczogUmVwZWF0ZWRseSB0cnlpbmcgdG8gbW92ZSB0aGUgc2FtZSwgYWxyZWFkeSBtb3ZlZCBwYWdlLgoqICAgSW5jb25zaXN0ZW50IHN0YXRlOiBNb3ZpbmcgcGFnZXMsIGJ1dCBza2lwcGluZyB0aGUgaW5jcmVtZW50LCBtYWtpbmcgZGF0YSBiZSBsb3N0IG9yIGNvcnJ1cHRlZC4KCkZ1enppbmcgdGhpcyBhcmVhIGlzIGNyaXRpY2FsLiBXZSBzaG91bGQgZm9jdXMgc3BlY2lmaWNhbGx5IG9uIHRlc3RpbmcgdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIGBtb3ZlX3BhZ2VzYCwgYHVzZXJmYXVsdGZkX21vdmVgLCBgbW92ZV9wYWdlc19wdGVzYCwgYW5kIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYCB1bmRlciB2YXJpb3VzIGVycm9yIGNvbmRpdGlvbnMsIGFuZCBlbnN1cmUgdGhlIGxvb3AgY29udHJvbCB3b3JrcyBhcyBleHBlY3RlZC4gSSYjMzk7bSBxdWl0ZSBjZXJ0YWluIHRoZXJlJiMzOTtzIGEgZnVuY3Rpb25hbCBidWcgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFVTRVJGQVVMVEZEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTM4ND1jb25maWcgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX01JTk9SXG4tLVxubW0vS2NvbmZpZy0xMzg4LVxubW0vS2NvbmZpZzoxMzg5Om1lbnVjb25maWcgVVNFUkZBVUxURkRcbm1tL0tjb25maWctMTM5MC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHVzZXJmYXVsdGZkKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBLY29uZmlnIEZpbGUqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGBtbS9LY29uZmlnYCBmaWxlIGFnYWluLiBMZXQmIzM5O3MgZ2V0IHJpZ2h0IGRvd24gdG8gaXQuIEkgd2FudCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBzZWN0aW9uLCBzbyBJJiMzOTttIGdvaW5nIHRvIGp1bXAgdG8gbGluZSAxMzg5LiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIG1lYXQgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb25zIGFyZSBkZWZpbmVkLiBJIGV4cGVjdCB0byBzZWUgdGhlIHVzdWFsIHN1c3BlY3RzIHRoZXJlOiBvcHRpb25zIHJlbGF0ZWQgdG8gTlVNQSwgc3dhcHBpbmcsIHBhZ2UgYWxsb2NhdGlvbiwgb3IgcGVyaGFwcyBzb21ldGhpbmcgbmV3IHRoZXkmIzM5O3ZlIHNudWNrIGluLi4uIEl0JiMzOTtzIGFsbCBhYm91dCBob3cgdGhlc2Ugc2V0dGluZ3MgaW5mbHVlbmNlIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IGJlaGF2aW9yLCBhbmQgSSBuZWVkIHRvIGtlZXAgdXAgd2l0aCB0aGUgaW50cmljYWNpZXMgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3VyLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24uLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzgwOlx0XHRib29sXG4xMzgxOlx0XHRoZWxwXG4xMzgyOlx0XHQgIEFyY2ggaGFzIHVzZXJmYXVsdGZkIHdyaXRlIHByb3RlY3Rpb24gc3VwcG9ydFxuMTM4MzpcdFxuMTM4NDpcdGNvbmZpZyBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1JcbjEzODU6XHRcdGJvb2xcbjEzODY6XHRcdGhlbHBcbjEzODc6XHRcdCAgQXJjaCBoYXMgdXNlcmZhdWx0ZmQgbWlub3IgZmF1bHQgc3VwcG9ydFxuMTM4ODpcdFxuMTM4OTpcdG1lbnVjb25maWcgVVNFUkZBVUxURkRcbjEzOTA6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIHVzZXJmYXVsdGZkKCkgc3lzdGVtIGNhbGxcJiMzNDtcbjEzOTE6XHRcdGRlcGVuZHMgb24gTU1VXG4xMzkyOlx0XHRoZWxwXG4xMzkzOlx0XHQgIEVuYWJsZSB0aGUgdXNlcmZhdWx0ZmQoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBpbnRlcmNlcHQgYW5kXG4xMzk0Olx0XHQgIGhhbmRsZSBwYWdlIGZhdWx0cyBpbiB1c2VybGFuZC5cbjEzOTU6XHRcbjEzOTY6XHRpZiBVU0VSRkFVTFRGRFxuMTM5NzpcdGNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1BcbjEzOTg6XHRcdGJvb2wgXCYjMzQ7VXNlcmZhdWx0ZmQgd3JpdGUgcHJvdGVjdGlvbiBzdXBwb3J0IGZvciBzaG1lbS9odWdldGxiZnNcJiMzNDtcbjEzOTk6XHRcdGRlZmF1bHQgeVxuMTQwMDpcdFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfV1BcbjE0MDE6XHRcbjE0MDI6XHRcdGhlbHBcbjE0MDM6XHRcdCAgQWxsb3dzIHRvIGNyZWF0ZSBtYXJrZXIgUFRFcyBmb3IgdXNlcmZhdWx0ZmQgd3JpdGUgcHJvdGVjdGlvblxuMTQwNDpcdFx0ICBwdXJwb3Nlcy4gIEl0IGlzIHJlcXVpcmVkIHRvIGVuYWJsZSB1c2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIG9uXG4xNDA1Olx0XHQgIGZpbGUtYmFja2VkIG1lbW9yeSB0eXBlcyBsaWtlIHNobWVtIGFuZCBodWdldGxiZnMuXG4xNDA2Olx0ZW5kaWYgIyBVU0VSRkFVTFRGRFxuMTQwNzpcdFxuMTQwODpcdCMgbXVsdGktZ2VuIExSVSB7XG4xNDA5Olx0Y29uZmlnIExSVV9HRU5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MjgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgVVNFUkZBVUxURkRgIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgVVNFUkZBVUxURkRgIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgZm9jdXMgaXMgZGVmaW5pdGVseSBnb2luZyB0byBiZSBvbiB0aGUgY29yZSBmdW5jdGlvbnM6IGBtb3ZlX3BhZ2VzYCwgYHVzZXJmYXVsdGZkX21vdmVgLCBgbW92ZV9wYWdlc19wdGVzYCwgYW5kIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYC4gV2FpdCBhIG1pbnV0ZS4uLiBJIHNlZW0gdG8gcmVjYWxsIGBtb3ZlX3BhZ2VzYCBiZWluZyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gTGV0JiMzOTtzIGp1c3QgY29uZmlybSB0aGF0Li4uIFllcCwgdGhlcmUgaXQgaXM6IGBzdGF0aWMgc3NpemVfdCBtb3ZlX3BhZ2VzKC4uLilgLiBPa2F5LCB0aGF0JiMzOTtzIG5vdCB1bmV4cGVjdGVkLiBBbmQsIGp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGRvdWJsZS1jaGVjayBgdXNlcmZhdWx0ZmRfbW92ZWAg4oCTIFl1cCwgc3RhdGljIHRvby4gT2theSwgbGV0JiMzOTtzIGxvb2sgYXQgYHVzZXJmYXVsdGZkX2lvY3RsYCwganVzdCB0byByb3VuZCBvdXQgdGhhdCB2aWV3IG9mIHRoZSBjb3JlIGZ1bmN0aW9ucy4uLiBzdGF0aWMgYWdhaW4uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBub24tc3RhdGljIGVudHJ5IHBvaW50cywgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSB0aGUgcHVibGljIGludGVyZmFjZS4gQWgsIGBzeXNfdXNlcmZhdWx0ZmRgLi4uIHRoYXQmIzM5O3MgdGhlIG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U1lTQ0FMTF9ERUZJTkUuKnVzZXJmYXVsdGZkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3VzZXJmYXVsdGZkLmM9NDQ4Mz1zdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfc3lzY2FsbF9hbGxvd2VkKGludCBmbGFncylcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTQ0OTktXG5tbS91c2VyZmF1bHRmZC5jOjQ1MDA6U1lTQ0FMTF9ERUZJTkUxKHVzZXJmYXVsdGZkLCBpbnQsIGZsYWdzKVxubW0vdXNlcmZhdWx0ZmQuYy00NTAxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwOTkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIGB1c2VyZmF1bHRmZGAgTWVjaGFuaXNtKioKCkFscmlnaHQsIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYHVzZXJmYXVsdGZkYCBoZXJlLCBhIHByZXR0eSBpbnRlcmVzdGluZyBzeXN0ZW0gY2FsbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBmaWxlIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgYHVzZXJmYXVsdGZkX2lvY3RsYCBjYWxsLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIG1hZ2ljIGhhcHBlbnMsIHJpZ2h0PyBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmVmZXJlbmNlIHRoZSBgdXNlcmZhdWx0ZmRfZm9wc2Agc3RydWN0dXJlIHRvIHJlbWluZCBteXNlbGYgb2YgdGhlIHN1cHBvcnRlZCBjb21tYW5kcyBhbmQgaG93IHRoaXMgYWxsIGZpdHMgdG9nZXRoZXIgYXQgdGhlIGZpbGUgb3BlcmF0aW9uIGxheWVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyZmF1bHRmZF9mb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdXNlcmZhdWx0ZmQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS91c2VyZmF1bHRmZC5jPTMyNTQ9c3RhdGljIF9fcG9sbF90IHVzZXJmYXVsdGZkX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0zMjg5LVxubW0vdXNlcmZhdWx0ZmQuYzozMjkwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVzZXJmYXVsdGZkX2ZvcHM7XG5tbS91c2VyZmF1bHRmZC5jLTMyOTEtXG5tbS91c2VyZmF1bHRmZC5jPTMyOTI9c3RhdGljIGludCByZXNvbHZlX3VzZXJmYXVsdF9mb3JrKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKm5ldyxcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTMyOTctXG5tbS91c2VyZmF1bHRmZC5jOjMyOTg6XHRmZCA9IGFub25faW5vZGVfY3JlYXRlX2dldGZkKFwmIzM0O1t1c2VyZmF1bHRmZF1cJiMzNDssIFx1MDAyNnVzZXJmYXVsdGZkX2ZvcHMsIG5ldyxcbm1tL3VzZXJmYXVsdGZkLmMtMzI5OS1cdFx0XHRPX1JET05MWSB8IChuZXctXHUwMDNlZmxhZ3MgXHUwMDI2IFVGRkRfU0hBUkVEX0ZDTlRMX0ZMQUdTKSwgaW5vZGUpO1xuLS1cbm1tL3VzZXJmYXVsdGZkLmM9NDM5NT1zdGF0aWMgdm9pZCB1c2VyZmF1bHRmZF9zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmKVxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtNDQyMS1cbm1tL3VzZXJmYXVsdGZkLmM6NDQyMjpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1c2VyZmF1bHRmZF9mb3BzID0ge1xubW0vdXNlcmZhdWx0ZmQuYy00NDIzLSNpZmRlZiBDT05GSUdfUFJPQ19GU1xuLS1cbm1tL3VzZXJmYXVsdGZkLmM9NDQ0NT1zdGF0aWMgaW50IG5ld191c2VyZmF1bHRmZChpbnQgZmxhZ3MpXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy00NDY5LVx0RkRfUFJFUEFSRShmZGYsIGZsYWdzIFx1MDAyNiBVRkZEX1NIQVJFRF9GQ05UTF9GTEFHUyxcbm1tL3VzZXJmYXVsdGZkLmM6NDQ3MDpcdFx0ICAgYW5vbl9pbm9kZV9jcmVhdGVfZ2V0ZmlsZShcJiMzNDtbdXNlcmZhdWx0ZmRdXCYjMzQ7LCBcdTAwMjZ1c2VyZmF1bHRmZF9mb3BzLCBjdHgsXG5tbS91c2VyZmF1bHRmZC5jLTQ0NzEtXHRcdFx0XHRcdCAgICAgT19SRE9OTFkgfCAoZmxhZ3MgXHUwMDI2IFVGRkRfU0hBUkVEX0ZDTlRMX0ZMQUdTKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3NjQKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29uc2lkZXJpbmcgdGhlIEtlcm5lbCBBUEkgRW50cnlwb2ludCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0aGUgY29yZSBpb2N0bCBmdW5jdGlvbiBzZWVtcyB0byBiZSBgdXNlcmZhdWx0ZmRfaW9jdGxgLiBCdXQgaGFuZyBvbiwgdGhlIHByb21wdCBzcGVjaWZpY2FsbHkgc2F5cyB0byBwcmVmZXIgKm5vbi1zdGF0aWMqLCAqbm9uLWlubGluZWQqIGVudHJ5IHBvaW50cyBvdmVyIGludGVybmFsIGhlbHBlcnMuIEluaXRpYWxseSwgSSB3YXMgdGhpbmtpbmcgdG8gZXhjbHVkZSBgdXNlcmZhdWx0ZmRfaW9jdGxgIGlmIGl0JiMzOTtzIHN0YXRpYywgc2luY2UgdGhlIGNvbXBpbGVyIHdvdWxkIGxpa2VseSBpbmxpbmUgaXQsIGxlYWRpbmcgdG8gbm8gZGlzdGluY3Qgc3ltYm9sLiBCdXQgdGhlbiB0aGUgcHJvbXB0IGVtcGhhc2l6ZXMgJiMzNDtQcmVmZXIgbm9uLXN0YXRpYywmIzM0OyBzbyBJIG5lZWQgdG8gY2hlY2suIEV2ZW4gaWYgaXQgKmlzKiBzdGF0aWMsIGJ1dCBpcyBhbiBlbnRyeSBwb2ludCwgSSBzaG91bGQgaW5jbHVkZSBpdCBpZiBpdCYjMzk7cyB0aGUgbW9yZSBjb3JyZWN0IG9wdGlvbi4KClRoZSBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCBpZiBgdXNlcmZhdWx0ZmRfaW9jdGxgIGlzIGV4cG9ydGVkIGFzIGEgc3ltYm9sIG9yIGlmIGl0JiMzOTtzIG9ubHkgY2FsbGVkIHdpdGhpbiBgdXNlcmZhdWx0ZmRfZm9wc2AuIEFoLCByaWdodCwgaXQmIzM5O3MgdXNlZCB3aXRoaW4gYHVzZXJmYXVsdGZkX2ZvcHNgLiBPa2F5LCBzbyB3aGF0IGFib3V0IHRoZSBzeXN0ZW0gY2FsbCBlbnRyeSBwb2ludD8gVGhhdCB3b3VsZCBiZSBgc3lzX3VzZXJmYXVsdGZkYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggYXBwcm9hY2ggaXMgYmVzdCBoZXJlIGdpdmVuIHRoZSBjb25zdHJhaW50cy4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgbm9uLXN0YXRpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXNlcmZhdWx0ZmRfbW92ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS91c2VyZmF1bHRmZC5jPTQyMDc9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdWZmZF9jdHhfZmVhdHVyZXMoX191NjQgdXNlcl9mZWF0dXJlcylcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTQyMTUtXG5tbS91c2VyZmF1bHRmZC5jOjQyMTY6c3RhdGljIGludCB1c2VyZmF1bHRmZF9tb3ZlKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCxcbm1tL3VzZXJmYXVsdGZkLmMtNDIxNy1cdFx0XHQgICAgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxubW0vdXNlcmZhdWx0ZmQuYz00MzUwPXN0YXRpYyBsb25nIHVzZXJmYXVsdGZkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBjbWQsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy00Mzc4LVx0Y2FzZSBVRkZESU9fTU9WRTpcbm1tL3VzZXJmYXVsdGZkLmM6NDM3OTpcdFx0cmV0ID0gdXNlcmZhdWx0ZmRfbW92ZShjdHgsIGFyZyk7XG5tbS91c2VyZmF1bHRmZC5jLTQzODAtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQzOQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDE1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEF0dGFjayBQbGFuKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdG8gYXBwcm9hY2ggdGhpcy4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIHF1aWNrbHkgemVybyBpbiBvbiBgdXNlcmZhdWx0ZmRfaW9jdGxgLiBUaGF0IHNlZW1zIGxpa2UgYSBwcmltZSB0YXJnZXQgYmVjYXVzZSBpdCYjMzk7cyB0aGUgaW9jdGwgaGFuZGxlciwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50LiBXYWl0LCBJIHNob3VsZCBkb3VibGUtY2hlY2s6IGBzeXNfdXNlcmZhdWx0ZmRgIGlzIHRoZSBhY3R1YWwgc3lzY2FsbCBmdW5jdGlvbi4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSAqb3RoZXIqIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIHRoZSByZWxhdGVkIGNvZGUsIGp1c3QgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcgb2J2aW91cy4KCkFscmlnaHQsIGxldCYjMzk7cyBqdXN0IGdvIGJhY2sgYW5kIGNoZWNrIGBtb3ZlX3BhZ2VzYCBhZ2Fpbi4gWWVhaCwgdGhhdCYjMzk7cyBzdGF0aWMsIHNvIGl0JiMzOTtzIG5vdCBhIGRpcmVjdCBlbnRyeSBwb2ludC4gSSYjMzk7bGwgZGVmaW5pdGVseSBrZWVwIGB1c2VyZmF1bHRmZF9pb2N0bGAgYW5kIGBzeXNfdXNlcmZhdWx0ZmRgIG9uIHRoZSBsaXN0LiBXYWl0LCBJIHByb2JhYmx5IGRvbiYjMzk7dCBuZWVkIGBzeXNfdXNlcmZhdWx0ZmRgLCB0aGF0IHdpbGwgYmUganVzdCBhbGlhc2VkIGFzIGBfX3g2NF9zeXNfdXNlcmZhdWx0ZmRgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBzbyBgdXNlcmZhdWx0ZmRfaW9jdGxgIGlzIGZpbmUuCgpOb3csIGxldCBtZSBicm9hZGVuIG15IHNjb3BlIGEgYml0LiBBcmUgdGhlcmUgYW55IHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHRoYXQgZW5hYmxlIGl0PyBMZXQmIzM5O3Mgc2VlLi4uIGBVU0VSRkFVTFRGRGAgc2VlbXMgbGlrZSB0aGUga2V5IGNvbmZpZ3VyYXRpb24uIEJ1dCBpcyB0aGVyZSBhbnl0aGluZyBlbHNlIGFzc29jaWF0ZWQgd2l0aCBgVUZGRElPX01PVkVgPyBUaGF0JiMzOTtzIHdoYXQgSSByZWFsbHkgbmVlZCB0byBkcmlsbCBkb3duIG9uIHRvIHNlZSB3aGF0IGtub2JzIGFyZSBhdmFpbGFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1VGRkRJT19NT1ZFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC91c2VyZmF1bHRmZC5oLTUzLVx0IChfX3U2NCkxIFx1MDAzY1x1MDAzYyBfVUZGRElPX1pFUk9QQUdFIHxcdFx0XFxcbmluY2x1ZGUvdWFwaS9saW51eC91c2VyZmF1bHRmZC5oOjU0Olx0IChfX3U2NCkxIFx1MDAzY1x1MDAzYyBfVUZGRElPX01PVkUgfFx0XHRcXFxuaW5jbHVkZS91YXBpL2xpbnV4L3VzZXJmYXVsdGZkLmgtNTUtXHQgKF9fdTY0KTEgXHUwMDNjXHUwMDNjIF9VRkZESU9fV1JJVEVQUk9URUNUIHxcdFxcXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3VzZXJmYXVsdGZkLmgtNzctI2RlZmluZSBfVUZGRElPX1pFUk9QQUdFXHRcdCgweDA0KVxuaW5jbHVkZS91YXBpL2xpbnV4L3VzZXJmYXVsdGZkLmg6Nzg6I2RlZmluZSBfVUZGRElPX01PVkVcdFx0XHQoMHgwNSlcbmluY2x1ZGUvdWFwaS9saW51eC91c2VyZmF1bHRmZC5oLTc5LSNkZWZpbmUgX1VGRkRJT19XUklURVBST1RFQ1RcdFx0KDB4MDYpXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3VzZXJmYXVsdGZkLmgtOTctXHRcdFx0XHQgICAgICBzdHJ1Y3QgdWZmZGlvX3plcm9wYWdlKVxuaW5jbHVkZS91YXBpL2xpbnV4L3VzZXJmYXVsdGZkLmg6OTg6I2RlZmluZSBVRkZESU9fTU9WRVx0XHRfSU9XUihVRkZESU8sIF9VRkZESU9fTU9WRSxcdFxcXG5pbmNsdWRlL3VhcGkvbGludXgvdXNlcmZhdWx0ZmQuaC05OS1cdFx0XHRcdCAgICAgIHN0cnVjdCB1ZmZkaW9fbW92ZSlcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvdXNlcmZhdWx0ZmQuaD0zNTk9c3RydWN0IHVmZmRpb19tb3ZlIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvdXNlcmZhdWx0ZmQuaC0zNjYtXHQgKi9cbmluY2x1ZGUvdWFwaS9saW51eC91c2VyZmF1bHRmZC5oOjM2NzojZGVmaW5lIFVGRkRJT19NT1ZFX01PREVfRE9OVFdBS0VcdFx0KChfX3U2NCkxXHUwMDNjXHUwMDNjMClcbmluY2x1ZGUvdWFwaS9saW51eC91c2VyZmF1bHRmZC5oOjM2ODojZGVmaW5lIFVGRkRJT19NT1ZFX01PREVfQUxMT1dfU1JDX0hPTEVTXHQoKF9fdTY0KTFcdTAwM2NcdTAwM2MxKVxuaW5jbHVkZS91YXBpL2xpbnV4L3VzZXJmYXVsdGZkLmgtMzY5LVx0X191NjQgbW9kZTtcbi0tXG5tbS9raHVnZXBhZ2VkLmM9MTI3OD1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9odWdlX3BhZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnRfYWRkcixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTMzNS1cdCAqXG5tbS9raHVnZXBhZ2VkLmM6MTMzNjpcdCAqIFVGRkRJT19NT1ZFIGlzIHByZXZlbnRlZCB0byByYWNlIGFzIHdlbGwgdGhhbmtzIHRvIHRoZVxubW0va2h1Z2VwYWdlZC5jLTEzMzctXHQgKiBtbWFwX2xvY2suXG4tLVxubW0vdXNlcmZhdWx0ZmQuYz0xNDE1PXN0YXRpYyBsb25nIG1vdmVfcGFnZXNfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTQ4OS1cdGlmIChwdGVfbm9uZShvcmlnX3NyY19wdGUpKSB7XG5tbS91c2VyZmF1bHRmZC5jOjE0OTA6XHRcdGlmICghKG1vZGUgXHUwMDI2IFVGRkRJT19NT1ZFX01PREVfQUxMT1dfU1JDX0hPTEVTKSlcbm1tL3VzZXJmYXVsdGZkLmMtMTQ5MS1cdFx0XHRyZXQgPSAtRU5PRU5UO1xuLS1cbm1tL3VzZXJmYXVsdGZkLmM9MTg1OT1zdGF0aWMgdm9pZCB1ZmZkX21vdmVfdW5sb2NrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTE5MjQtICpcbm1tL3VzZXJmYXVsdGZkLmM6MTkyNTogKiBUaGUgVUZGRElPX01PVkVfTU9ERV9BTExPV19TUkNfSE9MRVMgZmxhZyBjYW4gYmUgc3BlY2lmaWVkIHRvXG5tbS91c2VyZmF1bHRmZC5jLTE5MjYtICogcHJldmVudCAtRU5PRU5UIGVycm9ycyB0byBtYXRlcmlhbGl6ZSBpZiB0aGVyZSBhcmUgaG9sZXMgaW4gdGhlXG4tLVxubW0vdXNlcmZhdWx0ZmQuYz0xOTM0PXN0YXRpYyBzc2l6ZV90IG1vdmVfcGFnZXMoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LCB1bnNpZ25lZCBsb25nIGRzdF9zdGFydCxcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTE5OTQtXHRcdGlmICh1bmxpa2VseSghc3JjX3BtZCkpIHtcbm1tL3VzZXJmYXVsdGZkLmM6MTk5NTpcdFx0XHRpZiAoIShtb2RlIFx1MDAyNiBVRkZESU9fTU9WRV9NT0RFX0FMTE9XX1NSQ19IT0xFUykpIHtcbm1tL3VzZXJmYXVsdGZkLmMtMTk5Ni1cdFx0XHRcdGVyciA9IC1FTk9FTlQ7XG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0yMDUzLVx0XHRcdGlmIChwbWRfbm9uZSgqc3JjX3BtZCkpIHtcbm1tL3VzZXJmYXVsdGZkLmM6MjA1NDpcdFx0XHRcdGlmICghKG1vZGUgXHUwMDI2IFVGRkRJT19NT1ZFX01PREVfQUxMT1dfU1JDX0hPTEVTKSkge1xubW0vdXNlcmZhdWx0ZmQuYy0yMDU1LVx0XHRcdFx0XHRlcnIgPSAtRU5PRU5UO1xuLS1cbm1tL3VzZXJmYXVsdGZkLmM9NDIxNj1zdGF0aWMgaW50IHVzZXJmYXVsdGZkX21vdmUoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtNDI1MC1cbm1tL3VzZXJmYXVsdGZkLmM6NDI1MTpcdGlmICh1ZmZkaW9fbW92ZS5tb2RlIFx1MDAyNiB+KFVGRkRJT19NT1ZFX01PREVfQUxMT1dfU1JDX0hPTEVTfFxubW0vdXNlcmZhdWx0ZmQuYzo0MjUyOlx0XHRcdFx0IFVGRkRJT19NT1ZFX01PREVfRE9OVFdBS0UpKVxubW0vdXNlcmZhdWx0ZmQuYy00MjUzLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTQyNzAtXHRyYW5nZS5sZW4gPSByZXQ7XG5tbS91c2VyZmF1bHRmZC5jOjQyNzE6XHRpZiAoISh1ZmZkaW9fbW92ZS5tb2RlIFx1MDAyNiBVRkZESU9fTU9WRV9NT0RFX0RPTlRXQUtFKSkge1xubW0vdXNlcmZhdWx0ZmQuYy00MjcyLVx0XHRyYW5nZS5zdGFydCA9IHVmZmRpb19tb3ZlLmRzdDtcbi0tXG5tbS91c2VyZmF1bHRmZC5jPTQzNTA9c3RhdGljIGxvbmcgdXNlcmZhdWx0ZmRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGNtZCxcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTQzNzctXHRcdGJyZWFrO1xubW0vdXNlcmZhdWx0ZmQuYzo0Mzc4Olx0Y2FzZSBVRkZESU9fTU9WRTpcbm1tL3VzZXJmYXVsdGZkLmMtNDM3OS1cdFx0cmV0ID0gdXNlcmZhdWx0ZmRfbW92ZShjdHgsIGFyZyk7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3VzZXJmYXVsdGZkLmgtNTMtXHQgKF9fdTY0KTEgXHUwMDNjXHUwMDNjIF9VRkZESU9fWkVST1BBR0UgfFx0XHRcXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3VzZXJmYXVsdGZkLmg6NTQ6XHQgKF9fdTY0KTEgXHUwMDNjXHUwMDNjIF9VRkZESU9fTU9WRSB8XHRcdFxcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvdXNlcmZhdWx0ZmQuaC01NS1cdCAoX191NjQpMSBcdTAwM2NcdTAwM2MgX1VGRkRJT19XUklURVBST1RFQ1QgfFx0XFxcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvdXNlcmZhdWx0ZmQuaC03Ny0jZGVmaW5lIF9VRkZESU9fWkVST1BBR0VcdFx0KDB4MDQpXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvdXNlcmZhdWx0ZmQuaDo3ODojZGVmaW5lIF9VRkZESU9fTU9WRVx0XHRcdCgweDA1KVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3VzZXJmYXVsdGZkLmgtNzktI2RlZmluZSBfVUZGRElPX1dSSVRFUFJPVEVDVFx0XHQoMHgwNilcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvdXNlcmZhdWx0ZmQuaC05Ny1cdFx0XHRcdCAgICAgIHN0cnVjdCB1ZmZkaW9femVyb3BhZ2UpXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvdXNlcmZhdWx0ZmQuaDo5ODojZGVmaW5lIFVGRkRJT19NT1ZFXHRcdF9JT1dSKFVGRkRJTywgX1VGRkRJT19NT1ZFLFx0XFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC91c2VyZmF1bHRmZC5oLTk5LVx0XHRcdFx0ICAgICAgc3RydWN0IHVmZmRpb19tb3ZlKVxuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC91c2VyZmF1bHRmZC5oPTM1OT1zdHJ1Y3QgdWZmZGlvX21vdmUge1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC91c2VyZmF1bHRmZC5oLTM2Ni1cdCAqL1xudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3VzZXJmYXVsdGZkLmg6MzY3OiNkZWZpbmUgVUZGRElPX01PVkVfTU9ERV9ET05UV0FLRVx0XHQoKF9fdTY0KTFcdTAwM2NcdTAwM2MwKVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3VzZXJmYXVsdGZkLmg6MzY4OiNkZWZpbmUgVUZGRElPX01PVkVfTU9ERV9BTExPV19TUkNfSE9MRVNcdCgoX191NjQpMVx1MDAzY1x1MDAzYzEpXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvdXNlcmZhdWx0ZmQuaC0zNjktXHRfX3U2NCBtb2RlO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmM9NjY0PWludCBtb3ZlX3BhZ2UodWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBsZW4pXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uYy02NzItXHR1ZmZkaW9fbW92ZS5sZW4gPSBsZW47XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jOjY3MzpcdHVmZmRpb19tb3ZlLm1vZGUgPSBVRkZESU9fTU9WRV9NT0RFX0FMTE9XX1NSQ19IT0xFUztcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmMtNjc0LVx0dWZmZGlvX21vdmUubW92ZSA9IDA7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jOjY3NTpcdGlmIChpb2N0bChnb3B0cy1cdTAwM2V1ZmZkLCBVRkZESU9fTU9WRSwgXHUwMDI2dWZmZGlvX21vdmUpKSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jLTY3Ni1cdFx0LyogcmVhbCByZXR2YWwgaW4gdWZmZGlvX21vdmUubW92ZSAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uYy02NzctXHRcdGlmICh1ZmZkaW9fbW92ZS5tb3ZlICE9IC1FRVhJU1QpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jOjY3ODpcdFx0XHRlcnIoXCYjMzQ7VUZGRElPX01PVkUgZXJyb3I6ICVcJiMzNDtQUklkNjQsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jLTY3OS1cdFx0XHQgICAgKGludDY0X3QpdWZmZGlvX21vdmUubW92ZSk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uYy02ODEtXHR9IGVsc2UgaWYgKHVmZmRpb19tb3ZlLm1vdmUgIT0gbGVuKSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jOjY4MjpcdFx0ZXJyKFwmIzM0O1VGRkRJT19NT1ZFIGVycm9yOiAlXCYjMzQ7UFJJZDY0LCAoaW50NjRfdCl1ZmZkaW9fbW92ZS5tb3ZlKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmMtNjgzLVx0fSBlbHNlXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmM9MTI2Mj1ERUZJTkVfTU1BUF9DSEFOR0lOR19URVNUKGNvcHksIFVGRkRJT19DT1BZLCBjb3B5KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmM6MTI2MzpERUZJTkVfTU1BUF9DSEFOR0lOR19URVNUKG1vdmUsIFVGRkRJT19NT1ZFLCBtb3ZlKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmMtMTI2NC1ERUZJTkVfTU1BUF9DSEFOR0lOR19URVNUKHBvaXNvbiwgVUZGRElPX1BPSVNPTiwgdXBkYXRlZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYz0xNDk5PXVmZmRfdGVzdF9jYXNlX3QgdWZmZF90ZXN0c1tdID0ge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jLTE2NTMtXHRcdCAqIGFsbW9zdCBhbHdheXMgYXZhaWxhYmxlICh1bmxpa2UgaHVnZXRsYikuICBIZXJlIHdlXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYzoxNjU0Olx0XHQgKiBhYnVzZWQgU0hNRU0gZm9yIFVGRkRJT19NT1ZFLCBidXQgdGhlIHRlc3Qgd2Ugd2FudCB0b1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmMtMTY1NS1cdFx0ICogY292ZXIgZG9lc24mIzM5O3QgeWV0IG5lZWQgdGhlIGNvcnJlY3QgbWVtb3J5IHR5cGUuLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjUzMQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDdXJyZW50IEZvY3VzOiBVRkZESU9fTU9WRSBhbmQgVXNlcmZhdWx0ZmQqKgoKT2theSwgc28gSSYjMzk7bSBkcmlsbGluZyBkb3duIGludG8gaG93IGBVRkZESU9fTU9WRWAgd29ya3MuIFJpZ2h0LCBzbyBgVUZGRElPX01PVkVgIGlzIHRoZSBzcGVjaWZpYyBpb2N0bCBjb21tYW5kIEkmIzM5O20gaW50ZXJlc3RlZCBpbi4gSSB3YXMgaW5pdGlhbGx5IGEgYml0IGZ1enp5IG9uIHdoZXRoZXIgYHVzZXJmYXVsdGZkX2lvY3RsYCB3YXMgc3RhdGljIG9yIG5vdCDigJMgYnV0IHRoYXQmIzM5O3Mgc3RhdGljLCByaWdodD8gWWVzLCBjb25maXJtZWQsIGl0JiMzOTtzIHN0YXRpYy4KCk5vdywgbGV0JiMzOTtzIHNlZS4gYHN5c191c2VyZmF1bHRmZGAgaXMgdGhlIGFjdHVhbCBzeXN0ZW0gY2FsbCB0aGF0ICpjcmVhdGVzKiB0aGUgZmlsZSBkZXNjcmlwdG9yIGZvciBhbGwgdGhpcywgYnV0IHRoZSBgaW9jdGxgICptZXRob2QqIHRvIGV4ZWN1dGUgYFVGRkRJT19NT1ZFYCBpcyBoYW5kbGVkIGJ5IGB1c2VyZmF1bHRmZF9pb2N0bGAuIFNvIHRoZSBjcml0aWNhbCBpbnRlcmZhY2UgcG9pbnQgZm9yIGBVRkZESU9fTU9WRWAgaXMgdGhpcyBgaW9jdGxgIGhhbmRsZXI6IGB1c2VyZmF1bHRmZF9pb2N0bGAuCgpPa2F5LCBJIHdhcyB0aGlua2luZyBhYm91dCBhZGRpbmcgYm90aCBgdXNlcmZhdWx0ZmRfaW9jdGxgICphbmQqIGBzeXNfdXNlcmZhdWx0ZmRgIHRvIHRoZSBzeW1ib2wgbGlzdC4gV2FpdCwgbm8sIGBzeXNfdXNlcmZhdWx0ZmRgIGp1c3QgY3JlYXRlcyB0aGUgZmQhIEl0IGRvZXNuJiMzOTt0IGFjdHVhbGx5IGhhbmRsZSB0aGUgaW9jdGwuIFRoZSAqcmVhbCogaGFuZGxlciBmb3IgdGhlIGBpb2N0bGAgaXMgZGVmaW5pdGVseSBgdXNlcmZhdWx0ZmRfaW9jdGxgLiBPa2F5LCBzbyB3aGlsZSBgdXNlcmZhdWx0ZmRfaW9jdGxgIGlzIHN0YXRpYywgYmVjYXVzZSBpdCYjMzk7cyB0aGUgbWFpbiBmdW5jdGlvbiBJIHNob3VsZCBpbmNsdWRlIGl0LiBObyB3YWl0LCBpcyB0aGVyZSBhIG1vcmUgZ2VuZXJhbCBgc3lzX2lvY3RsYCB0byBpbmNsdWRlPyBUb28gZ2VuZXJpYy4uLgoKU28sIEkgc2hvdWxkIGluY2x1ZGUgYHVzZXJmYXVsdGZkX2lvY3RsYCwgYW5kIGB1c2VyZmF1bHRmZF9tb3ZlYCwgYW5kIGBtb3ZlX3BhZ2VzYC4gRXZlbiB0aG91Z2ggdGhleSYjMzk7cmUgc3RhdGljLCB0aGV5IGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBoZXJlLiBXYWl0LCBgdXNlcmZhdWx0ZmRfaW9jdGxgIGlzIHRoZSAqZmlsZSBvcGVyYXRpb24qIGhhbmRsZXIgZm9yIHRoZSBkZXZpY2UsIGFuZCBJIG5lZWQgdG8gY2hlY2sgZm9yIG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhlIHByb2Nlc3MuLi4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIsIHBvc3NpYmx5IG5vbi1zdGF0aWMgZnVuY3Rpb25zLCB0aGF0IGFyZSByZWxldmFudC4gTGV0JiMzOTtzIGxvb2sgYXQgdGhlIGV4cG9ydHMgZnJvbSBgbW0vdXNlcmZhdWx0ZmQuY2AganVzdCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS91c2VyZmF1bHRmZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyNDMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFN5bWJvbCBFeHBvc3VyZSBpbiB0aGUgTGludXggS2VybmVsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IG5vdGljaW5nIHRoZSBhYnNlbmNlIG9mIGFueSBleHBvcnRlZCBzeW1ib2xzLiBUaGF0IHRlbGxzIG1lIGV2ZXJ5dGhpbmcgaGVyZSBpcyBlaXRoZXIgc3RhdGljIG9yIG5vdCBtZWFudCBmb3IgZXh0ZXJuYWwgdXNlLiBMZXQmIzM5O3MgZm9jdXMgb24gdGhlIGZ1bmN0aW9ucyBJIHNlZSBkaXJlY3RseSByZWxldmFudDogYHVzZXJmYXVsdGZkX2lvY3RsYCwgYHVzZXJmYXVsdGZkX21vdmVgLCBhbmQgYG1vdmVfcGFnZXNgLiBIb2xkIG9uIGEgc2Vjb25kLCB3YXNuJiMzOTt0IGBtb3ZlX3BhZ2VzYCBhbHNvIGEgc3lzdGVtIGNhbGw/IFJpZ2h0LCBpdCBpcyEgSSByZW1lbWJlciBub3c7IGBzeXNfbW92ZV9wYWdlc2AgaXMgZGVmaW5lZCBvdmVyIGluIGBtbS9taWdyYXRlLmNgLiBCdXQgdGhlIGBtb3ZlX3BhZ2VzYCBJJiMzOTttIGxvb2tpbmcgYXQgaGVyZSwgd2l0aGluIGBtbS91c2VyZmF1bHRmZC5jYCwgaXMgc3BlY2lmaWNhbGx5IGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyBjcmVhdGVzIGEgcG90ZW50aWFsIGNvbmZsaWN0IGlmIEkgc2ltcGx5IGFkZCBgbW92ZV9wYWdlc2AgdG8gYSBzeW1ib2wgbGlzdCBsaWtlIGBGb2N1c1N5bWJvbHNgLiBUaGVyZSYjMzk7cyBhIHJpc2sgdGhhdCBpdCBtaWdodCBlcnJvbmVvdXNseSB0YXJnZXQgdGhhdCBzeXN0ZW0gY2FsbCBpbiBgbW0vbWlncmF0ZS5jYCBpbnN0ZWFkIG9mIHRoZSBsb2NhbCBzdGF0aWMgb25lLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlIGBtb3ZlX3BhZ2VzYCB3aXRoaW4gYG1tL3VzZXJmYXVsdGZkLmNgIGlzIHRoZSBvbmx5IG9uZSB3aXRoIHRoYXQgbmFtZS4gSSBtdXN0IGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtTWVNDQUxMX0RFRklORS4qbW92ZV9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9taWdyYXRlLmM9MjU5Mz1zdGF0aWMgaW50IGtlcm5lbF9tb3ZlX3BhZ2VzKHBpZF90IHBpZCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS9taWdyYXRlLmMtMjYyMi1cbm1tL21pZ3JhdGUuYzoyNjIzOlNZU0NBTExfREVGSU5FNihtb3ZlX3BhZ2VzLCBwaWRfdCwgcGlkLCB1bnNpZ25lZCBsb25nLCBucl9wYWdlcyxcbm1tL21pZ3JhdGUuYy0yNjI0LVx0XHRjb25zdCB2b2lkIF9fdXNlciAqIF9fdXNlciAqLCBwYWdlcyxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9udW1haWYuaD0yMz1LVk1fU1lTQ0FMTF9ERUZJTkUobWlncmF0ZV9wYWdlcywgNCwgaW50LCBwaWQsIHVuc2lnbmVkIGxvbmcsIG1heG5vZGUsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbnVtYWlmLmgtMjUtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9udW1haWYuaDoyNjpLVk1fU1lTQ0FMTF9ERUZJTkUobW92ZV9wYWdlcywgNiwgaW50LCBwaWQsIHVuc2lnbmVkIGxvbmcsIGNvdW50LCB2b2lkICosIHBhZ2VzLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbnVtYWlmLmgtMjctXHRcdCAgIGNvbnN0IGludCAqLCBub2RlcywgaW50ICosIHN0YXR1cywgaW50LCBmbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTM1CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYG1vdmVfcGFnZXNgIENvbnVuZHJ1bSoqCgpPa2F5LCBzbyBJJiMzOTttIGRlYWxpbmcgd2l0aCBgbW92ZV9wYWdlc2AgaGVyZSwgYW5kIEkga25vdyBmcm9tIG1lbW9yeSwgb3IgYSBxdWljayBjcm9zcy1yZWZlcmVuY2UsIHRoYXQgaXQmIzM5O3MgYSBzeXN0ZW0gY2FsbCBkZWZpbmVkIGluIGBtbS9taWdyYXRlLmNgLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIHBvdGVudGlhbCBmb3IgY29uZnVzaW9uLiBJZiBJIHNpbXBseSBhZGQgYG1vdmVfcGFnZXNgIHRvIGBGb2N1c1N5bWJvbHNgLCBJJiMzOTttIGdvaW5nIHRvIHBpY2sgdXAgYHN5c19tb3ZlX3BhZ2VzYCAqYW5kKiBga2VybmVsX21vdmVfcGFnZXNgLCBhbmQgdGhhdCYjMzk7cyBub3Qgd2hhdCBJJiMzOTttIGFpbWluZyBmb3IuIEkgbmVlZCB0byBiZSBtb3JlIHByZWNpc2UgaW4gbXkgdGFyZ2V0aW5nLiBJdCBsb29rcyBsaWtlIHRoZSByaWdodCByb3V0ZSBpbnZvbHZlcyBgdXNlcmZhdWx0ZmRfaW9jdGxgIGFuZCBgdXNlcmZhdWx0ZmRfbW92ZWAgaW5zdGVhZC4gTm93IEkmIzM5O20gdGhpbmtpbmcuLi53aGF0IGFib3V0IGBtb3ZlX3BhZ2VzX3B0ZXNgIGFuZCBgbW92ZV9wYWdlc19odWdlX3BtZGA/IFRoZXkmIzM5O3JlIGRlZmluZWQgYXMgYHN0YXRpY2Agd2l0aGluIGBtbS91c2VyZmF1bHRmZC5jYC4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBzb21ldGhpbmcgY3JpdGljYWwsIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGFuZCBzY2FuIGZvciBhbnkgb3RoZXIgZnVuY3Rpb24gZGVmaW5pdGlvbnMgd2l0aCB0aGF0IHBhcnRpY3VsYXIgbmFtZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW92ZV9wYWdlc19wdGVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3VzZXJmYXVsdGZkLmM9MTM4Mj1zdGF0aWMgaW50IG1vdmVfemVyb3BhZ2VfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTQxNC0gKi9cbm1tL3VzZXJmYXVsdGZkLmM6MTQxNTpzdGF0aWMgbG9uZyBtb3ZlX3BhZ2VzX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZCxcbm1tL3VzZXJmYXVsdGZkLmMtMTQxNi1cdFx0XHQgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmM9MTkzND1zdGF0aWMgc3NpemVfdCBtb3ZlX3BhZ2VzKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0yMDY4LVxubW0vdXNlcmZhdWx0ZmQuYzoyMDY5Olx0XHRcdHJldCA9IG1vdmVfcGFnZXNfcHRlcyhtbSwgZHN0X3BtZCwgc3JjX3BtZCxcbm1tL3VzZXJmYXVsdGZkLmMtMjA3MC1cdFx0XHRcdFx0ICAgICAgZHN0X3ZtYSwgc3JjX3ZtYSwgZHN0X2FkZHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NTgzCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRpdmluZyBpbnRvIFBhZ2UgTWlncmF0aW9uIE1lY2hhbmlzbXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiBgbW92ZV9wYWdlc19wdGVzYCDigJMgeWVhaCwgdGhhdCBvbmUmIzM5O3MgZ290IGEgcGFydGljdWxhciBuaWNoZSwgYSBzcGVjaWZpYyBzZXQgb2YgY2lyY3Vtc3RhbmNlcyB3aGVyZSBpdCYjMzk7cyB0aGUgcmlnaHQgdG9vbCBmb3IgdGhlIGpvYi4gQnV0IG5vdyB0aGUgcXVlc3Rpb24gdGhhdCBwb3BzIHVwIGlzLCB3aGF0IGFib3V0IGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYD8gSSBuZWVkIHRvIGFuYWx5emUgaXRzIGJlaGF2aW9yIGluIGNvbXBhcmlzb24gYW5kIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGRpdmlzaW9uIGZhbGxzLiBJIHdhbnQgdG8gaGF2ZSBhIHByZWNpc2UgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVzcGVjdGl2ZSBzdHJlbmd0aHMgb2YgdGhlc2UgZnVuY3Rpb25zLiBXaGF0IGFyZSB0aGUga2V5IGRpc3RpbmN0aW9ucyBoZXJlPyBXaGVuIGRvIHdlIGxldmVyYWdlIG9uZSBvdmVyIHRoZSBvdGhlcj8gSSBuZWVkIHRvIGJ1aWxkIGEgY29tcHJlaGVuc2l2ZSBtZW50YWwgbW9kZWwgdG8gZW5zdXJlIEkmIzM5O20gbWFraW5nIHRoZSBtb3N0IG9wdGltaXplZCBkZWNpc2lvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vdmVfcGFnZXNfaHVnZV9wbWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg9MTU1PXZvaWQgZG91YmxlX3B0X3VubG9jayhzcGlubG9ja190ICpwdGwxLCBzcGlubG9ja190ICpwdGwyKTtcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjE1NjppbnQgbW92ZV9wYWdlc19odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kLCBwbWRfdCBkc3RfcG1kdmFsLFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMTU3LVx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcbi0tXG5tbS9odWdlX21lbW9yeS5jPTI3NDQ9aW50IGNoYW5nZV9odWdlX3B1ZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTI3OTAtICovXG5tbS9odWdlX21lbW9yeS5jOjI3OTE6aW50IG1vdmVfcGFnZXNfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZCwgcG1kX3QgZHN0X3BtZHZhbCxcbm1tL2h1Z2VfbWVtb3J5LmMtMjc5Mi1cdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjX3ZtYSxcbi0tXG5tbS91c2VyZmF1bHRmZC5jPTE5MzQ9c3RhdGljIHNzaXplX3QgbW92ZV9wYWdlcyhzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsIHVuc2lnbmVkIGxvbmcgZHN0X3N0YXJ0LFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMjAxNC1cdFx0ICogYmUgc3RyaWN0LiBJZiBkc3RfcG1kIGNoYW5nZXMgaW50byBUUEggYWZ0ZXIgdGhpcyBjaGVjaywgdGhlXG5tbS91c2VyZmF1bHRmZC5jOjIwMTU6XHRcdCAqIG1vdmVfcGFnZXNfaHVnZV9wbWQoKSB3aWxsIGRldGVjdCB0aGUgY2hhbmdlIGFuZCByZXRyeVxubW0vdXNlcmZhdWx0ZmQuYy0yMDE2LVx0XHQgKiB3aGlsZSBtb3ZlX3BhZ2VzX3B0ZSgpIHdpbGwgZGV0ZWN0IHRoZSBjaGFuZ2UgYW5kIGZhaWwuXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0yMDQ1LVxubW0vdXNlcmZhdWx0ZmQuYzoyMDQ2Olx0XHRcdGVyciA9IG1vdmVfcGFnZXNfaHVnZV9wbWQobW0sIGRzdF9wbWQsIHNyY19wbWQsXG5tbS91c2VyZmF1bHRmZC5jLTIwNDctXHRcdFx0XHRcdFx0ICBkc3RfcG1kdmFsLCBkc3Rfdm1hLCBzcmNfdm1hLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTMyNwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDY0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBUaG91Z2h0IFByb2Nlc3Mgb24gSWRlbnRpZnlpbmcgRnV6emluZyBUYXJnZXRzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGJlc3QgcGxhY2VzIHRvIGZ1enogYmFzZWQgb24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBnbyBhZnRlciBgbW92ZV9wYWdlc19odWdlX3BtZGAsIHNpbmNlIGl0JiMzOTtzIG5vbi1zdGF0aWMgYW5kIGxvb2tzIGxpa2UgYSBwb3RlbnRpYWwgZW50cnkgcG9pbnQuIEJ1dCB3YWl0LCBpdCYjMzk7cyBub3QgZXhwb3J0ZWQsIGV2ZW4gdGhvdWdoIGl0ICppcyogbm9uLXN0YXRpYy4gU28sIHRoYXQmIzM5O3Mgc3RpbGwgYSBnb29kIGNhbmRpZGF0ZSwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIGNhbGwgY2hhaW4uCgpOZXh0LCBJIGNvbnNpZGVyZWQgYHVzZXJmYXVsdGZkX21vdmVgLCBidXQgcXVpY2tseSByZWFsaXplZCB0aGF0IGl0JiMzOTtzIHN0YXRpYy4gVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgcHJlZmVycyBub24tc3RhdGljIGVudHJ5IHBvaW50cywgc2luY2UgdGhlIGNvbXBpbGVyIHdvbiYjMzk7dCBpbmxpbmUgdGhlbSwgZ2l2aW5nIHRoZW0gZGlzdGluY3Qgc3ltYm9scy4gU28sIHRoYXQmIzM5O3MgbGVzcyBpZGVhbC4gSSB3YXMgZ29pbmcgdG8gaW5jbHVkZSBgdXNlcmZhdWx0ZmRfaW9jdGxgLCBgdXNlcmZhdWx0ZmRfbW92ZWAsIGBtb3ZlX3BhZ2VzX3B0ZXNgLCBgbW92ZV9wYWdlc19odWdlX3BtZGAsIGJ1dCBJJiMzOTttIHJlZmluaW5nIHRoYXQgbm93LgoKUmlnaHQsIGB1c2VyZmF1bHRmZF9pb2N0bGAgaXMgYSBmaWxlIG9wZXJhdGlvbiwgc28gaXQgaGFzIHRvIGhhdmUgYSBkaXN0aW5jdCBhZGRyZXNzLiBUaGVuLCBgdXNlcmZhdWx0ZmRfbW92ZWAgaXMgY2FsbGVkIGZyb20gYSBzd2l0Y2ggc3RhdGVtZW50IHdpdGhpbiBgdXNlcmZhdWx0ZmRfaW9jdGxgLCBzbyBpdCYjMzk7cyBhIGJpdCBvZiBhIHRvc3MtdXAgd2hldGhlciBpdCBnZXRzIGlubGluZWQgb3Igbm90LiBgbW92ZV9wYWdlc19odWdlX3BtZGAgaXMgbm9uLXN0YXRpYywgc28gbm8gaW5saW5pbmcgdGhlcmUuIGBtb3ZlX3BhZ2VzX3B0ZXNgIGlzIHN0YXRpYywgc28gaXQmIzM5O3MgcHJvYmFibHkgaW5saW5lZC4KCk9rYXksIGxldCYjMzk7cyBpbmNsdWRlOiBgdXNlcmZhdWx0ZmRfaW9jdGxgLCBgdXNlcmZhdWx0ZmRfbW92ZWAsIGFuZCBgbW92ZV9wYWdlc19odWdlX3BtZGAuIEhvd2V2ZXIsIGFmdGVyIHJlLWV2YWx1YXRpbmcgdGhlIGJ1ZyYjMzk7cyBsb2NhdGlvbiwgdGhlIGJ1ZyBpcyByZWFsbHkgaW4gdGhlIHN0YXRpYyBgbW92ZV9wYWdlc2AgZnVuY3Rpb24gaW4gYG1tL3VzZXJmYXVsdGZkLmNgLiBUaGUgYG1vdmVfcGFnZXNgIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgYFVGRkRJT19NT1ZFYCBpb2N0bC4gVGhlcmVmb3JlIEkgc2hvdWxkIGluY2x1ZGUgYHVzZXJmYXVsdGZkX2lvY3RsYCBhbmQgYHVzZXJmYXVsdGZkX21vdmVgLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgcmVhc29uaW5nIGhlcmUuIFRoZSBwYXRjaCBmaXhlcyBhIGZhaWx1cmUgdG8gcmVzZXQgdGhlIGVycm9yIGNvZGUgYGVycmAgYWZ0ZXIgZW5jb3VudGVyaW5nIGAtRUFHQUlOYC4gSWYgdGhlIGVycm9yIGlzbiYjMzk7dCByZXNldCwgdGhlIGxvb3AgY29udGludWVzIHdpdGggdGhlIHNhbWUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMsIGNhdXNpbmcgYW4gaW5maW5pdGUgbG9vcCB3aGVuIGBtb3ZlX3BhZ2VzX3B0ZXNgIChvciBvdGhlciBmdW5jdGlvbnMpIGRvZXNuJiMzOTt0IG92ZXJ3cml0ZSB0aGUgZXJyb3IuIFRoaXMgaXMgYSByZWFsIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSB1c2VyZmF1bHRmZCBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBVRkZESU9fTU9WRWAgaW9jdGwuIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLgoKRmluYWxseSwgdGhlIGNvbmZpZ3VyYXRpb25zLiBgVVNFUkZBVUxURkRgIGlzIHRoZSBtYWluIG9uZSwgYW5kIHRoYXQgZGVwZW5kcyBvbiBgTU1VYCwgc28gdGhhdCYjMzk7cyBnb29kIHRvIGtub3cuIEFuZCB3aGlsZSB0aGlua2luZyBhYm91dCBgbW92ZV9wYWdlc19odWdlX3BtZGAsIEkgaGF2ZSB0byByZW1lbWJlciB0aGF0IGBtbS9odWdlX21lbW9yeS5jYCAod2hlcmUgaXQgbGl2ZXMpIG9ubHkgZ2V0cyBjb21waWxlZCBpZiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIGEgZ29vZCBkZXBlbmRlbmN5IHRvIGNvbnNpZGVyIHdoZW4gc2V0dGluZyB1cCB0aGUgZnV6emluZyBlbnZpcm9ubWVudC4KClNvLCBpbiB0aGUgZW5kLCBpdCYjMzk7cyBgdXNlcmZhdWx0ZmRfaW9jdGxgLCBhbmQgYHVzZXJmYXVsdGZkX21vdmVgIHdpdGggYSBwb3RlbnRpYWwgZm9jdXMgb24gdGhlIGBVRkZESU9fTU9WRWAgcGF0aC4gQW5kIHJlbWVtYmVyIGBVU0VSRkFVTFRGRGAsIGBNTVVgLCBhbmQgcG9zc2libHkgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgZm9yIHRoZSBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdlX21lbW9yeS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9MTAwPW9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZV9kZXZpY2Uub1xubW0vTWFrZWZpbGU6MTAxOm9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgJiM0Mzs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXG5tbS9NYWtlZmlsZS0xMDItb2JqLSQoQ09ORklHX1BBR0VfQ09VTlRFUikgJiM0Mzs9IHBhZ2VfY291bnRlci5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNzg4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBDaGVjayoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCYjMzk7cyBjbGVhciB0aGF0IHRvIG1ha2UgYG1vdmVfcGFnZXNfaHVnZV9wbWRgIHdvcmsgY29ycmVjdGx5LCBJIGFic29sdXRlbHkgbmVlZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGVuYWJsZWQuIE5vIHF1ZXN0aW9uIHRoZXJlLiBTbywgSSYjMzk7bGwgZ28gYWhlYWQgYW5kIGFkZCB0aGF0IHRvIG15IGBFbmFibGVDb25maWdzYCBsaXN0LiBOb3csIG9uIHRvIHRoZSBuZXh0IHBpZWNlLiBJJiMzOTttIHdvbmRlcmluZyBpZiBqdXN0IGhhdmluZyBgVVNFUkZBVUxURkRgIGlzIHN1ZmZpY2llbnQgZm9yIGB1c2VyZmF1bHRmZF9pb2N0bGAuIFRoaW5raW5nIGl0IHRocm91Z2gsIHllcywgdGhhdCBzZWVtcyByaWdodCwgSSBiZWxpZXZlIEkgY2FuIHJlbHkgb24gdGhhdC4gQnV0LCBiZWZvcmUgSSBtb3ZlIG9uLCBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLiBJIHNob3VsZCBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIGRlcGVuZGVuY2llcyBpbiB0aGUgc2FtZSBhcmVhLiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIGBtbS91c2VyZmF1bHRmZC5jYCBhbmQgaXRzIGNvcnJlc3BvbmRpbmcgYG1tL01ha2VmaWxlYC4gVGhhdCBzaG91bGQgcmV2ZWFsIGFueSBvdGhlciBjb25maWcgb3B0aW9ucyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZiBhbmQgc2V0LCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBlbnN1cmUgdGhpcyBhbGwgZnVuY3Rpb25zIGFzIGludGVuZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyZmF1bHRmZC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9MTMwPW9iai0kKENPTkZJR19DTUFfU1lTRlMpICYjNDM7PSBjbWFfc3lzZnMub1xubW0vTWFrZWZpbGU6MTMxOm9iai0kKENPTkZJR19VU0VSRkFVTFRGRCkgJiM0Mzs9IHVzZXJmYXVsdGZkLm9cbm1tL01ha2VmaWxlLTEzMi1vYmotJChDT05GSUdfSURMRV9QQUdFX1RSQUNLSU5HKSAmIzQzOz0gcGFnZV9pZGxlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEyMDIKCQkJCQkJCW91dHB1dDogMTc0CgkJCQkJCQl0aG91Z2h0czogODAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgVVNFUkZBVUxURkRgIFBhdGNoKioKCk9rYXksIHNvIGBVU0VSRkFVTFRGRGAgaXMgZGVmaW5pdGVseSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZS4gTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCk15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgaW5kZWVkIHdvcnRoIGZ1enppbmcuIFRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIGxpZXMgd2l0aGluIHRoZSBgVUZGRElPX01PVkVgIGlvY3RsIGhhbmRsZXIgaW4gdGhlIGB1c2VyZmF1bHRmZGAgbWVjaGFuaXNtLiBUaGUgYnVnIHN0ZW1zIGZyb20gYSBmYWlsdXJlIHRvIHJlc2V0IHRoZSBgZXJyYCB2YXJpYWJsZSB0byAwIGFmdGVyIGVuY291bnRlcmluZyBhbiBgLUVBR0FJTmAgZXJyb3Igd2l0aGluIHRoZSBgbW92ZV9wYWdlc2AgZnVuY3Rpb24uCgpJIHNlZSB0aGF0IGBtb3ZlX3BhZ2VzYCBpcyBsaWtlbHkgdXNpbmcgYG1vdmVfcGFnZXNfcHRlc2AgYXMgd2VsbCwgb3IgYG1vdmVfcGFnZXNfaHVnZV9wbWRgLiBUaGUgcHJpbWFyeSBzeW1ib2xzIEkmIzM5O2xsIGZvY3VzIG9uIGFyZSBgdXNlcmZhdWx0ZmRfaW9jdGxgLCBgdXNlcmZhdWx0ZmRfbW92ZWAsIGFuZCBgbW92ZV9wYWdlc19odWdlX3BtZGAuIEkgY29uc2lkZXJlZCBgbW92ZV9wYWdlc19wdGVzYCwgYnV0IEkgdGhpbmsgdGhlIG90aGVycyBhcmUgc3VmZmljaWVudC4KClRoZSBsb2dpYyBmbG93IGlzIHRoaXM6IGlmIGAtRUFHQUlOYCBpc24mIzM5O3QgcmVzZXQsIGFueSBzdWJzZXF1ZW50IHN1Y2Nlc3NmdWwgcGFnZSBtb3ZlIChkb25lLCBmb3IgaW5zdGFuY2UsIGJ5IGBtb3ZlX3BhZ2VzX3B0ZXNgIG9yIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYCkgd2lsbCAqbm90KiBvdmVyd3JpdGUgYGVycmAgKHNpbmNlIHN1Y2Nlc3MgcmV0dXJucyAmZ3Q7PSAwKSBhbmQgYGVycmAgc3RpY2tzIGF0IGAtRUFHQUlOYC4gVGhpcyB0aGVuIGNhdXNlcyB0aGUgbG9vcCB0byByZS1lbnRlciB0aGUgYGlmIChlcnIgPT0gLUVBR0FJTikgY29udGludWU7YCBibG9jay4gVGhpcyBza2lwcyBhZHZhbmNpbmcgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzc2VzIChgc3JjX2FkZHJgLCBgZHN0X2FkZHJgKSwgbGVhZGluZyB0byBhIHJlcGVhdGVkIG1vdmUgb2YgdGhlIHNhbWUgcGFnZSwgcmVzdWx0aW5nIGluIGFuIGluZmluaXRlIGxvb3AuCgpJIG5lZWQgdG8gY29uZmlybSB0aGUgY29uZGl0aW9ucyB3aGVyZSBgbW92ZV9wYWdlc19wdGVzYCByZXR1cm5zIGAtRUFHQUlOYC4gTGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4uLiBJZiBgbW92ZV9wYWdlc19wdGVzYCByZXR1cm5zIGEgbmVnYXRpdmUgdmFsdWUsIHRoZSBvcmlnaW5hbCBgZXJyYCBnZXRzIG92ZXJ3cml0dGVuLCB0aHVzIHNvbHZpbmcgdGhlIHByb2JsZW0uIFRoZSBpc3N1ZSBzdXJmYWNlcyBpZiBgbW92ZV9wYWdlc19wdGVzYCByZXR1cm5zIGEgbm9uLW5lZ2F0aXZlIHZhbHVlLiBUaGUgcHJvZ3JhbSBlbmRzIHVwIHJldHJ5aW5nIHRoZSBzYW1lIHBhZ2UuIE5vdywgaWYgdGhlIHJldHJ5IGhhcHBlbnMsIGFuZCBgcG1kX25vbmUoKnNyY19wbWQpYCBpcyB0cnVlLCBvciBgcHRlX25vbmVgIGlzIHRydWUsIHRoZSBmdW5jdGlvbiB3aWxsIGxpa2VseSByZXR1cm4gYC1FTk9FTlRgIGlmIGBVRkZESU9fTU9WRV9NT0RFX0FMTE9XX1NSQ19IT0xFU2AgaXMgbm90IHNldC4gSWYgc2V0LCBpdCBtaWdodCByZXR1cm4gMCwgYW5kIGxvb3AgaW5maW5pdGVseS4gU28sIHllcywgdGhlIGJ1ZyBpcyByZWFsLgoKSSBhbHNvIGRvdWJsZS1jaGVja2VkIHRoYXQgYHVzZXJmYXVsdGZkX21vdmVgIGlzIHN0YXRpYyB3aXRoaW4gYG1tL3VzZXJmYXVsdGZkLmNgLCBidXQgaXQgaXMgc3RpbGwgYSBrZXkgc3ltYm9sIHRvIHRhcmdldC4KClNvLCBzdW1taW5nIHRoaXMgdXAsIHRoZSBmdXp6aW5nIHRhcmdldHMgc2hvdWxkIGJlIGB1c2VyZmF1bHRmZF9pb2N0bGAsIGB1c2VyZmF1bHRmZF9tb3ZlYCwgYW5kIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYCwgZW5hYmxpbmcgYFVTRVJGQVVMVEZEYCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSSBjYW4gc2VlIHRoaXMgYXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIHVzZXJmYXVsdGZkIGNvcmUgbG9naWMsIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UsIG1ha2luZyBpdCBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNFUkZBVUxURkQmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1c2VyZmF1bHRmZF9pb2N0bCYjMzQ7LAogICAgJiMzNDt1c2VyZmF1bHRmZF9tb3ZlJiMzNDssCiAgICAmIzM0O21vdmVfcGFnZXNfaHVnZV9wbWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIFVGRkRJT19NT1ZFIGlvY3RsIGhhbmRsZXIgd2hlcmUgYW4gLUVBR0FJTiBlcnJvciB3YXMgbm90IHJlc2V0IHRvIDAgYmVmb3JlIGNvbnRpbnVpbmcgdGhlIGxvb3AuIElmIG5vdCByZXNldCwgYSBzdWJzZXF1ZW50IHN1Y2Nlc3NmdWwgcGFnZSBtb3ZlIHdvdWxkIGxlYXZlIGVyciBhcyAtRUFHQUlOLCBjYXVzaW5nIHRoZSBsb29wIHRvIHNraXAgYWR2YW5jaW5nIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3Nlcy4gVGhpcyByZXN1bHRzIGluIGFuIGluZmluaXRlIGxvb3Agb3IgcmVwZWF0ZWQgYXR0ZW1wdHMgdG8gbW92ZSB0aGUgc2FtZSBwYWdlLiBUaGUgZml4IGVuc3VyZXMgZXJyIGlzIHJlc2V0IHRvIDAsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgdXNlcmZhdWx0ZmQgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTRVJGQVVMVEZEJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXNlcmZhdWx0ZmRfaW9jdGwmIzM0OywKICAgICYjMzQ7dXNlcmZhdWx0ZmRfbW92ZSYjMzQ7LAogICAgJiMzNDttb3ZlX3BhZ2VzX2h1Z2VfcG1kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBVRkZESU9fTU9WRSBpb2N0bCBoYW5kbGVyIHdoZXJlIGFuIC1FQUdBSU4gZXJyb3Igd2FzIG5vdCByZXNldCB0byAwIGJlZm9yZSBjb250aW51aW5nIHRoZSBsb29wLiBJZiBub3QgcmVzZXQsIGEgc3Vic2VxdWVudCBzdWNjZXNzZnVsIHBhZ2UgbW92ZSB3b3VsZCBsZWF2ZSBlcnIgYXMgLUVBR0FJTiwgY2F1c2luZyB0aGUgbG9vcCB0byBza2lwIGFkdmFuY2luZyB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMuIFRoaXMgcmVzdWx0cyBpbiBhbiBpbmZpbml0ZSBsb29wIG9yIHJlcGVhdGVkIGF0dGVtcHRzIHRvIG1vdmUgdGhlIHNhbWUgcGFnZS4gVGhlIGZpeCBlbnN1cmVzIGVyciBpcyByZXNldCB0byAwLCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIHVzZXJmYXVsdGZkIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNDowMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA0OjAwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgY29udHJvbCBmbG93IGJ1ZyBpbiBgbW92ZV9wYWdlcygpYCBpbiBgbW0vdXNlcmZhdWx0ZmQuY2AuIFByaW9yIHRvIHRoZSBwYXRjaCwgaWYgYSBwYWdlIG1vdmUgb3BlcmF0aW9uIHJldHVybmVkIGAtRUFHQUlOYCwgdGhlIGxvb3Agd291bGQgYGNvbnRpbnVlYCBidXQgZmFpbCB0byByZXNldCB0aGUgYGVycmAgdmFyaWFibGUgdG8gMC4gQmVjYXVzZSBgZXJyYCBpcyBub3QgdW5jb25kaXRpb25hbGx5IG92ZXJ3cml0dGVuIG9uIHN1Y2Nlc3NmdWwgcGFnZSBtb3ZlcyAoZS5nLiwgd2hlbiBgbW92ZV9wYWdlc19wdGVzKClgIHJldHVybnMgYSBwb3NpdGl2ZSBzdGVwIHNpemUpLCBgZXJyYCB3b3VsZCByZW1haW4gYC1FQUdBSU5gLiBUaGlzIGNhdXNlZCB0aGUgbG9vcCB0byBpbmZpbml0ZWx5IHJldHJ5IHRoZSBzYW1lIGFkZHJlc3Mgd2l0aG91dCBhZHZhbmNpbmcgYHNyY19hZGRyYCBhbmQgYGRzdF9hZGRyYCwgbGVhZGluZyB0byBhIGhhbmcuIFRoZSBwYXRjaCBzaW1wbHkgcmVzZXRzIGBlcnIgPSAwYCBiZWZvcmUgY29udGludWluZywgZml4aW5nIHRoZSBpbmZpbml0ZSBsb29wLlxuXG5UaGlzIGJ1ZyBpcyBhIHB1cmUgY29udHJvbCBmbG93IGlzc3VlIHJlc3VsdGluZyBpbiBhIGhhbmcuIEl0IGRvZXMgbm90IGludm9sdmUgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgbGVhayB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgZnV6emluZyAod2l0aCBLQVNBTiwgTE9DS0RFUCwgYW5kIHNvZnQgbG9ja3VwIGRldGVjdG9ycykgaXMgcGVyZmVjdGx5IGNhcGFibGUgb2YgZGV0ZWN0aW5nIGhhbmdzIGFuZCBpbmZpbml0ZSBsb29wcy4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzayBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBwYXRjaCB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQxYzQ4NmRhOWFjZDRmYTE3YTU2NWJlZWFjNDIyNzhjOWNlNzAzZjEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxOSAwMzo1NzowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3VzZXJmYXVsdGZkLmMgYi9tbS91c2VyZmF1bHRmZC5jCmluZGV4IGMzYWRlZGFhZjdkNTQuLmVjNWQ1MTFiZDE3OTEgMTAwNjQ0Ci0tLSBhL21tL3VzZXJmYXVsdGZkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdXNlcmZhdWx0ZmQuYwpAQCAtMjA4NSw4ICYjNDM7MjA4NSwxMCBAQCBzdGF0aWMgc3NpemVfdCBtb3ZlX3BhZ2VzKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsCiAJCX0KIAogCQlpZiAoZXJyKSB7Ci0JCQlpZiAoZXJyID09IC1FQUdBSU4pCiYjNDM7CQkJaWYgKGVyciA9PSAtRUFHQUlOKSB7CiYjNDM7CQkJCWVyciA9IDA7CiAJCQkJY29udGludWU7CiYjNDM7CQkJfQogCQkJYnJlYWs7CiAJCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDQ6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk1NAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBTdWJ0bGUgQnVnIEZpeCBpbiBgbW92ZV9wYWdlc2AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBtb3ZlX3BhZ2VzYCBpbiBgbW0vdXNlcmZhdWx0ZmQuY2AuIFRoZSBjaGFuZ2UgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCDigJMgaXQmIzM5O3Mgd3JhcHBpbmcgYW4gZXhpc3RpbmcgYGlmYCBzdGF0ZW1lbnQgd2l0aCBhbiBhZGRpdGlvbmFsIGN1cmx5IGJyYWNlIGFuZCBhZGRpbmcgYGVyciA9IDA7YCBpbnNpZGUgaXQuIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcsIGJlY2F1c2UgdGhlIGltcGFjdCBvZiBzZWVtaW5nbHkgc2ltcGxlIGNoYW5nZXMgY2FuIHNvbWV0aW1lcyBiZSBwcm9mb3VuZCBpbiBrZXJuZWwgY29kZS4KCkJhc2ljYWxseSwgdGhlIG9yaWdpbmFsIGNvZGUgaGFkIGEgYnVnIHdoZXJlIGlmIGBlcnJgIHdhcyBgLUVBR0FJTmAgaW4gdGhlIGBtb3ZlX3BhZ2VzYCBmdW5jdGlvbiwgaXQgd291bGQgY29udGludWUgdGhlIGxvb3AuICpCdXQqLCBjcnVjaWFsIHBvaW50IGhlcmUsIGl0ICpkaWRuJiMzOTt0KiByZXNldCBgZXJyYCB0byAwLiBUaGlzIG1lYW5zIHRoYXQgc3Vic2VxdWVudCBpdGVyYXRpb25zIGNvdWxkIHBvdGVudGlhbGx5IGluaGVyaXQgdGhpcyBlcnJvciBzdGF0dXMsIHdoaWNoIGlzIG9idmlvdXNseSBhIHByb2JsZW0uIEkmIzM5O20gd29uZGVyaW5nIHdoYXQgaXMgYWN0dWFsbHkgaGFuZGxlZCBpZiBgZXJyYCBpcyBub3QgemVybyBhbmQgaXMgcmV0dXJuZWQgZnJvbSB0aGUgZnVuY3Rpb24uCgpTbywgdGhlIGZpeCBjb3JyZWN0bHkgc2V0cyBgZXJyID0gMGAgYmVmb3JlIHRoZSBgY29udGludWVgLiBUaGUgaW1wbGljYXRpb24gaXMgdGhhdCBhIHRyYW5zaWVudCBgLUVBR0FJTmAgc2hvdWxkbiYjMzk7dCBwZXJtYW5lbnRseSB0YWludCB0aGUgZXJyb3Igc3RhdHVzIG9mIHRoZSBvdmVyYWxsIG9wZXJhdGlvbi4gVGhlIGxvb3AgY29udGludWVzLCBob3BlZnVsbHkgZXZlbnR1YWxseSBzdWNjZWVkaW5nLiBSaWdodCwgbWFrZXMgc2Vuc2UuIFRoaXMgcHJldmVudHMgdGhlIGVycm9uZW91cyBwcm9wYWdhdGlvbiBvZiB0aGUgYC1FQUdBSU5gIGVycm9yIGNvZGUuIEl0JiMzOTtzIGEgY2xhc3NpYyBleGFtcGxlIG9mIGEgc3VidGxlIGJ1ZyB0aGF0IGNvdWxkIGxlYWQgdG8gaW50ZXJtaXR0ZW50IGZhaWx1cmVzLCBlc3BlY2lhbGx5IGluIGhpZ2gtY29uY3VycmVuY3kgb3IgcmVzb3VyY2UtY29uc3RyYWluZWQgc2l0dWF0aW9ucy4gVGhpcyB0eXBlIG9mIGZpeCBpcyBlYXN5IHRvIG1pc3MsIGJ1dCBlc3NlbnRpYWwgZm9yIHJvYnVzdCBrZXJuZWwgYmVoYXZpb3IuIEkgc2hvdWxkIHByb2JhYmx5IGRpdmUgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbW92ZV9wYWdlc2AgdG8gY29uZmlybSB0aGUgZXJyb3IgaGFuZGxpbmcgc3RyYXRlZ3kgYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYmV0dGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb3ZlX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdXNlcmZhdWx0ZmQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS91c2VyZmF1bHRmZC5jPTEzODI9c3RhdGljIGludCBtb3ZlX3plcm9wYWdlX3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTE0MTQtICovXG5tbS91c2VyZmF1bHRmZC5jOjE0MTU6c3RhdGljIGxvbmcgbW92ZV9wYWdlc19wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWQsXG5tbS91c2VyZmF1bHRmZC5jLTE0MTYtXHRcdFx0ICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcbi0tXG5tbS91c2VyZmF1bHRmZC5jPTE4NTk9c3RhdGljIHZvaWQgdWZmZF9tb3ZlX3VubG9jayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0xODY3LS8qKlxubW0vdXNlcmZhdWx0ZmQuYzoxODY4OiAqIG1vdmVfcGFnZXMgLSBtb3ZlIGFyYml0cmFyeSBhbm9ueW1vdXMgcGFnZXMgb2YgYW4gZXhpc3Rpbmcgdm1hXG5tbS91c2VyZmF1bHRmZC5jLTE4NjktICogQGN0eDogcG9pbnRlciB0byB0aGUgdXNlcmZhdWx0ZmQgY29udGV4dFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTg3Ni0gKlxubW0vdXNlcmZhdWx0ZmQuYzoxODc3OiAqIG1vdmVfcGFnZXMoKSByZW1hcHMgYXJiaXRyYXJ5IGFub255bW91cyBwYWdlcyBhdG9taWNhbGx5IGluIHplcm9cbm1tL3VzZXJmYXVsdGZkLmMtMTg3OC0gKiBjb3B5LiBJdCBvbmx5IHdvcmtzIG9uIG5vbiBzaGFyZWQgYW5vbnltb3VzIHBhZ2VzIGJlY2F1c2UgdGhvc2UgY2FuXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0xODg4LSAqIHN0b3JhZ2Ugb3IgYW55IG90aGVyIEkvTyBkZXZpY2UgKE1BRFZfRE9OVEZPUksgaW4gdGhlIHNvdXJjZSB2bWFcbm1tL3VzZXJmYXVsdGZkLmM6MTg4OTogKiBhdm9pZHMgbW92ZV9wYWdlcygpIHRvIGZhaWwgd2l0aCAtRUJVU1kgaWYgdGhlIHByb2Nlc3MgZm9ya3MgYmVmb3JlXG5tbS91c2VyZmF1bHRmZC5jOjE4OTA6ICogbW92ZV9wYWdlcygpIGlzIGNhbGxlZCksIHRoZW4gaXQgd2lsbCBjYWxsIG1vdmVfcGFnZXMoKSB0byBtYXAgdGhlXG5tbS91c2VyZmF1bHRmZC5jLTE4OTEtICogcGFnZSBpbiB0aGUgZmF1bHRpbmcgYWRkcmVzcyBpbiB0aGUgZGVzdGluYXRpb24gdm1hLlxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTkwNS0gKiB0aGUgZGVzdGluYXRpb24gdmlydHVhbCBtZW1vcnkgcmFuZ2UgaXMgbm90IGEgd2hvbGUgdW5tYXBwZWQgaG9sZSxcbm1tL3VzZXJmYXVsdGZkLmM6MTkwNjogKiBtb3ZlX3BhZ2VzKCkgd2lsbCBmYWlsIHJlc3BlY3RpdmVseSB3aXRoIC1FTk9FTlQgb3IgLUVFWElTVC4gVGhpc1xubW0vdXNlcmZhdWx0ZmQuYy0xOTA3LSAqIHByb3ZpZGVzIGEgdmVyeSBzdHJpY3QgYmVoYXZpb3IgdG8gYXZvaWQgYW55IGNoYW5jZSBvZiBtZW1vcnlcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTE5MTAtICogdGltZSBmb3IgYW55IGdpdmVuIGZhdWx0aW5nIGFkZHJlc3MuIFRoaXMgbWVhbnMgdGhhdCBpZiB0d28gdGhyZWFkc1xubW0vdXNlcmZhdWx0ZmQuYzoxOTExOiAqIHRyeSB0byBib3RoIGNhbGwgbW92ZV9wYWdlcygpIG9uIHRoZSBzYW1lIGRlc3RpbmF0aW9uIGFkZHJlc3MgYXQgdGhlXG5tbS91c2VyZmF1bHRmZC5jLTE5MTItICogc2FtZSB0aW1lLCB0aGUgc2Vjb25kIHRocmVhZCB3aWxsIGdldCBhbiBleHBsaWNpdCBlcnJvciBmcm9tIHRoaXNcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTE5MjAtICogYW4gYW1vdW50IG9mIGJ5dGVzIHN1Y2Nlc3NmdWxseSBtb3ZlZC4gSWYgdGhlIHJldHZhbCByZXBvcnRzIGFcbm1tL3VzZXJmYXVsdGZkLmM6MTkyMTogKiBcJiMzNDtzaG9ydFwmIzM0OyByZW1hcCwgdGhlIG1vdmVfcGFnZXMoKSBjb21tYW5kIHNob3VsZCBiZSByZXBlYXRlZCBieVxubW0vdXNlcmZhdWx0ZmQuYy0xOTIyLSAqIHVzZXJsYW5kIHdpdGggc3JjJiM0MztyZXR2YWwsIGRzdCYjNDM7cmV2YWwsIGxlbi1yZXR2YWwgaWYgaXQgd2FudHMgdG8ga25vd1xuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTkzMy0gKi9cbm1tL3VzZXJmYXVsdGZkLmM6MTkzNDpzdGF0aWMgc3NpemVfdCBtb3ZlX3BhZ2VzKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsXG5tbS91c2VyZmF1bHRmZC5jLTE5MzUtXHRcdCAgIHVuc2lnbmVkIGxvbmcgc3JjX3N0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbiwgX191NjQgbW9kZSlcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTIwMTQtXHRcdCAqIGJlIHN0cmljdC4gSWYgZHN0X3BtZCBjaGFuZ2VzIGludG8gVFBIIGFmdGVyIHRoaXMgY2hlY2ssIHRoZVxubW0vdXNlcmZhdWx0ZmQuYzoyMDE1Olx0XHQgKiBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgcmV0cnlcbm1tL3VzZXJmYXVsdGZkLmM6MjAxNjpcdFx0ICogd2hpbGUgbW92ZV9wYWdlc19wdGUoKSB3aWxsIGRldGVjdCB0aGUgY2hhbmdlIGFuZCBmYWlsLlxubW0vdXNlcmZhdWx0ZmQuYy0yMDE3LVx0XHQgKi9cbi0tXG5tbS91c2VyZmF1bHRmZC5jLTIwNDEtXHRcdFx0XHRzcGxpdF9odWdlX3BtZChzcmNfdm1hLCBzcmNfcG1kLCBzcmNfYWRkcik7XG5tbS91c2VyZmF1bHRmZC5jOjIwNDI6XHRcdFx0XHQvKiBUaGUgZm9saW8gd2lsbCBiZSBzcGxpdCBieSBtb3ZlX3BhZ2VzX3B0ZSgpICovXG5tbS91c2VyZmF1bHRmZC5jLTIwNDMtXHRcdFx0XHRjb250aW51ZTtcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTIwNDUtXG5tbS91c2VyZmF1bHRmZC5jOjIwNDY6XHRcdFx0ZXJyID0gbW92ZV9wYWdlc19odWdlX3BtZChtbSwgZHN0X3BtZCwgc3JjX3BtZCxcbm1tL3VzZXJmYXVsdGZkLmMtMjA0Ny1cdFx0XHRcdFx0XHQgIGRzdF9wbWR2YWwsIGRzdF92bWEsIHNyY192bWEsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0yMDY4LVxubW0vdXNlcmZhdWx0ZmQuYzoyMDY5Olx0XHRcdHJldCA9IG1vdmVfcGFnZXNfcHRlcyhtbSwgZHN0X3BtZCwgc3JjX3BtZCxcbm1tL3VzZXJmYXVsdGZkLmMtMjA3MC1cdFx0XHRcdFx0ICAgICAgZHN0X3ZtYSwgc3JjX3ZtYSwgZHN0X2FkZHIsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYz00MjE2PXN0YXRpYyBpbnQgdXNlcmZhdWx0ZmRfbW92ZShzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy00MjU1LVx0aWYgKG1tZ2V0X25vdF96ZXJvKG1tKSkge1xubW0vdXNlcmZhdWx0ZmQuYzo0MjU2Olx0XHRyZXQgPSBtb3ZlX3BhZ2VzKGN0eCwgdWZmZGlvX21vdmUuZHN0LCB1ZmZkaW9fbW92ZS5zcmMsXG5tbS91c2VyZmF1bHRmZC5jLTQyNTctXHRcdFx0XHQgdWZmZGlvX21vdmUubGVuLCB1ZmZkaW9fbW92ZS5tb2RlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDQ6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc5MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgbW92ZV9wYWdlc2AgaW4gYG1tL3VzZXJmYXVsdGZkLmNgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgbW92ZV9wYWdlc2AgaXMgaGFuZGxpbmcgdGhpbmdzIGluIHRoZSBjb250ZXh0IG9mIHVzZXJmYXVsdGZkLiBUaGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvciBob3cgd2UgbWFuYWdlIHBhZ2UgbWlncmF0aW9uIGFuZCB0cmFuc2ZlciwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCB1c2VyLXNwYWNlIG1lbW9yeSBhY2Nlc3MgZmF1bHRzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUga2VybmVsIG9yY2hlc3RyYXRlcyB0aGlzIHdob2xlIGRhbmNlIGJldHdlZW4gdXNlciBzcGFjZSBhbmQga2VybmVsIHNwYWNlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB0aGUgaW50ZXJwbGF5IGJldHdlZW4gYHVzZXJmYXVsdGZkYCBhbmQgdGhlIHBhZ2UgbWlncmF0aW9uIG1hY2hpbmVyeS4gSG93IGRvZXMgaXQga25vdyB3aGVyZSBwYWdlcyBhcmUsIGFuZCBob3cgZG9lcyBpdCBkaXJlY3QgdGhlbSB3aGVyZSB0aGV5IG5lZWQgdG8gZ28/IEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgYSBkZWxpY2F0ZSBiYWxhbmNpbmcgYWN0IGhlcmUsIGVuc3VyaW5nIGRhdGEgaW50ZWdyaXR5IHdoaWxlIG1pbmltaXppbmcgdGhlIHBlcmZvcm1hbmNlIGhpdCBvZiBwYWdlIGZhdWx0cy4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSBkbyBpdC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUga2V5IGxvY2tpbmcgcHJpbWl0aXZlcywgZXJyb3IgaGFuZGxpbmcgcGF0aHMsIGFuZCB0aGUgb3ZlcmFsbCBsb2dpYyBmbG93LiBUaGlzIGNvdWxkIGdpdmUgbWUgc29tZSBncmVhdCBpbnNpZ2h0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDQ6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS91c2VyZmF1bHRmZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTkzNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTkzNDpcdHN0YXRpYyBzc2l6ZV90IG1vdmVfcGFnZXMoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LCB1bnNpZ25lZCBsb25nIGRzdF9zdGFydCxcbjE5MzU6XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBzcmNfc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuLCBfX3U2NCBtb2RlKVxuMTkzNjpcdHtcbjE5Mzc6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3R4LVx1MDAzZW1tO1xuMTkzODpcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmNfdm1hLCAqZHN0X3ZtYTtcbjE5Mzk6XHRcdHVuc2lnbmVkIGxvbmcgc3JjX2FkZHIsIGRzdF9hZGRyLCBzcmNfZW5kO1xuMTk0MDpcdFx0cG1kX3QgKnNyY19wbWQsICpkc3RfcG1kO1xuMTk0MTpcdFx0bG9uZyBlcnIgPSAtRUlOVkFMO1xuMTk0MjpcdFx0c3NpemVfdCBtb3ZlZCA9IDA7XG4xOTQzOlx0XG4xOTQ0Olx0XHQvKiBTYW5pdGl6ZSB0aGUgY29tbWFuZCBwYXJhbWV0ZXJzLiAqL1xuMTk0NTpcdFx0Vk1fV0FSTl9PTl9PTkNFKHNyY19zdGFydCBcdTAwMjYgflBBR0VfTUFTSyk7XG4xOTQ2Olx0XHRWTV9XQVJOX09OX09OQ0UoZHN0X3N0YXJ0IFx1MDAyNiB+UEFHRV9NQVNLKTtcbjE5NDc6XHRcdFZNX1dBUk5fT05fT05DRShsZW4gXHUwMDI2IH5QQUdFX01BU0spO1xuMTk0ODpcdFxuMTk0OTpcdFx0LyogRG9lcyB0aGUgYWRkcmVzcyByYW5nZSB3cmFwLCBvciBpcyB0aGUgc3BhbiB6ZXJvLXNpemVkPyAqL1xuMTk1MDpcdFx0Vk1fV0FSTl9PTl9PTkNFKHNyY19zdGFydCAmIzQzOyBsZW4gXHUwMDNjIHNyY19zdGFydCk7XG4xOTUxOlx0XHRWTV9XQVJOX09OX09OQ0UoZHN0X3N0YXJ0ICYjNDM7IGxlbiBcdTAwM2MgZHN0X3N0YXJ0KTtcbjE5NTI6XHRcbjE5NTM6XHRcdGVyciA9IHVmZmRfbW92ZV9sb2NrKG1tLCBkc3Rfc3RhcnQsIHNyY19zdGFydCwgXHUwMDI2ZHN0X3ZtYSwgXHUwMDI2c3JjX3ZtYSk7XG4xOTU0Olx0XHRpZiAoZXJyKVxuMTk1NTpcdFx0XHRnb3RvIG91dDtcbjE5NTY6XHRcbjE5NTc6XHRcdC8qIFJlLWNoZWNrIGFmdGVyIHRha2luZyBtYXBfY2hhbmdpbmdfbG9jayAqL1xuMTk1ODpcdFx0ZXJyID0gLUVBR0FJTjtcbjE5NTk6XHRcdGRvd25fcmVhZChcdTAwMjZjdHgtXHUwMDNlbWFwX2NoYW5naW5nX2xvY2spO1xuMTk2MDpcdFx0aWYgKGxpa2VseShhdG9taWNfcmVhZChcdTAwMjZjdHgtXHUwMDNlbW1hcF9jaGFuZ2luZykpKVxuMTk2MTpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xOTYyOlx0XHQvKlxuMTk2MzpcdFx0ICogTWFrZSBzdXJlIHRoZSB2bWEgaXMgbm90IHNoYXJlZCwgdGhhdCB0aGUgc3JjIGFuZCBkc3QgcmVtYXBcbjE5NjQ6XHRcdCAqIHJhbmdlcyBhcmUgYm90aCB2YWxpZCBhbmQgZnVsbHkgd2l0aGluIGEgc2luZ2xlIGV4aXN0aW5nXG4xOTY1Olx0XHQgKiB2bWEuXG4xOTY2Olx0XHQgKi9cbjE5Njc6XHRcdGVyciA9IC1FSU5WQUw7XG4xOTY4Olx0XHRpZiAoc3JjX3ZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fU0hBUkVEKVxuMTk2OTpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xOTcwOlx0XHRpZiAoc3JjX3N0YXJ0ICYjNDM7IGxlbiBcdTAwM2Ugc3JjX3ZtYS1cdTAwM2V2bV9lbmQpXG4xOTcxOlx0XHRcdGdvdG8gb3V0X3VubG9jaztcbjE5NzI6XHRcbjE5NzM6XHRcdGlmIChkc3Rfdm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9TSEFSRUQpXG4xOTc0Olx0XHRcdGdvdG8gb3V0X3VubG9jaztcbjE5NzU6XHRcdGlmIChkc3Rfc3RhcnQgJiM0MzsgbGVuIFx1MDAzZSBkc3Rfdm1hLVx1MDAzZXZtX2VuZClcbjE5NzY6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuMTk3NzpcdFxuMTk3ODpcdFx0ZXJyID0gdmFsaWRhdGVfbW92ZV9hcmVhcyhjdHgsIHNyY192bWEsIGRzdF92bWEpO1xuMTk3OTpcdFx0aWYgKGVycilcbjE5ODA6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuMTk4MTpcdFxuMTk4MjpcdFx0Zm9yIChzcmNfYWRkciA9IHNyY19zdGFydCwgZHN0X2FkZHIgPSBkc3Rfc3RhcnQsIHNyY19lbmQgPSBzcmNfc3RhcnQgJiM0MzsgbGVuO1xuMTk4MzpcdFx0ICAgICBzcmNfYWRkciBcdTAwM2Mgc3JjX2VuZDspIHtcbjE5ODQ6XHRcdFx0c3BpbmxvY2tfdCAqcHRsO1xuMTk4NTpcdFx0XHRwbWRfdCBkc3RfcG1kdmFsO1xuMTk4NjpcdFx0XHR1bnNpZ25lZCBsb25nIHN0ZXBfc2l6ZTtcbjE5ODc6XHRcbjE5ODg6XHRcdFx0LypcbjE5ODk6XHRcdFx0ICogQmVsb3cgd29ya3MgYmVjYXVzZSBhbm9ueW1vdXMgYXJlYSB3b3VsZCBub3QgaGF2ZSBhXG4xOTkwOlx0XHRcdCAqIHRyYW5zcGFyZW50IGh1Z2UgUFVELiBJZiBmaWxlLWJhY2tlZCBzdXBwb3J0IGlzIGFkZGVkLFxuMTk5MTpcdFx0XHQgKiB0aGF0IGNhc2Ugd291bGQgbmVlZCB0byBiZSBoYW5kbGVkIGhlcmUuXG4xOTkyOlx0XHRcdCAqL1xuMTk5MzpcdFx0XHRzcmNfcG1kID0gbW1fZmluZF9wbWQobW0sIHNyY19hZGRyKTtcbjE5OTQ6XHRcdFx0aWYgKHVubGlrZWx5KCFzcmNfcG1kKSkge1xuMTk5NTpcdFx0XHRcdGlmICghKG1vZGUgXHUwMDI2IFVGRkRJT19NT1ZFX01PREVfQUxMT1dfU1JDX0hPTEVTKSkge1xuMTk5NjpcdFx0XHRcdFx0ZXJyID0gLUVOT0VOVDtcbjE5OTc6XHRcdFx0XHRcdGJyZWFrO1xuMTk5ODpcdFx0XHRcdH1cbjE5OTk6XHRcdFx0XHRzcmNfcG1kID0gbW1fYWxsb2NfcG1kKG1tLCBzcmNfYWRkcik7XG4yMDAwOlx0XHRcdFx0aWYgKHVubGlrZWx5KCFzcmNfcG1kKSkge1xuMjAwMTpcdFx0XHRcdFx0ZXJyID0gLUVOT01FTTtcbjIwMDI6XHRcdFx0XHRcdGJyZWFrO1xuMjAwMzpcdFx0XHRcdH1cbjIwMDQ6XHRcdFx0fVxuMjAwNTpcdFx0XHRkc3RfcG1kID0gbW1fYWxsb2NfcG1kKG1tLCBkc3RfYWRkcik7XG4yMDA2Olx0XHRcdGlmICh1bmxpa2VseSghZHN0X3BtZCkpIHtcbjIwMDc6XHRcdFx0XHRlcnIgPSAtRU5PTUVNO1xuMjAwODpcdFx0XHRcdGJyZWFrO1xuMjAwOTpcdFx0XHR9XG4yMDEwOlx0XG4yMDExOlx0XHRcdGRzdF9wbWR2YWwgPSBwbWRwX2dldF9sb2NrbGVzcyhkc3RfcG1kKTtcbjIwMTI6XHRcdFx0LypcbjIwMTM6XHRcdFx0ICogSWYgdGhlIGRzdF9wbWQgaXMgbWFwcGVkIGFzIFRIUCBkb24mIzM5O3Qgb3ZlcnJpZGUgaXQgYW5kIGp1c3RcbjIwMTQ6XHRcdFx0ICogYmUgc3RyaWN0LiBJZiBkc3RfcG1kIGNoYW5nZXMgaW50byBUUEggYWZ0ZXIgdGhpcyBjaGVjaywgdGhlXG4yMDE1Olx0XHRcdCAqIG1vdmVfcGFnZXNfaHVnZV9wbWQoKSB3aWxsIGRldGVjdCB0aGUgY2hhbmdlIGFuZCByZXRyeVxuMjAxNjpcdFx0XHQgKiB3aGlsZSBtb3ZlX3BhZ2VzX3B0ZSgpIHdpbGwgZGV0ZWN0IHRoZSBjaGFuZ2UgYW5kIGZhaWwuXG4yMDE3Olx0XHRcdCAqL1xuMjAxODpcdFx0XHRpZiAodW5saWtlbHkocG1kX3RyYW5zX2h1Z2UoZHN0X3BtZHZhbCkpKSB7XG4yMDE5Olx0XHRcdFx0ZXJyID0gLUVFWElTVDtcbjIwMjA6XHRcdFx0XHRicmVhaztcbjIwMjE6XHRcdFx0fVxuMjAyMjpcdFxuMjAyMzpcdFx0XHRwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHNyY19wbWQsIHNyY192bWEpO1xuMjAyNDpcdFx0XHRpZiAocHRsKSB7XG4yMDI1Olx0XHRcdFx0LyogQ2hlY2sgaWYgd2UgY2FuIG1vdmUgdGhlIHBtZCB3aXRob3V0IHNwbGl0dGluZyBpdC4gKi9cbjIwMjY6XHRcdFx0XHRpZiAobW92ZV9zcGxpdHNfaHVnZV9wbWQoZHN0X2FkZHIsIHNyY19hZGRyLCBzcmNfc3RhcnQgJiM0MzsgbGVuKSB8fFxuMjAyNzpcdFx0XHRcdCAgICAhcG1kX25vbmUoZHN0X3BtZHZhbCkpIHtcbjIwMjg6XHRcdFx0XHRcdC8qIENhbiBiZSBhIG1pZ3JhdGlvbiBlbnRyeSAqL1xuMjAyOTpcdFx0XHRcdFx0aWYgKHBtZF9wcmVzZW50KCpzcmNfcG1kKSkge1xuMjAzMDpcdFx0XHRcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcG1kX2ZvbGlvKCpzcmNfcG1kKTtcbjIwMzE6XHRcbjIwMzI6XHRcdFx0XHRcdFx0aWYgKCFpc19odWdlX3plcm9fZm9saW8oZm9saW8pIFx1MDAyNlx1MDAyNlxuMjAzMzpcdFx0XHRcdFx0XHQgICAgIVBhZ2VBbm9uRXhjbHVzaXZlKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA0OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3MzMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBEZWVwZXIgaW50byBgbW92ZV9wYWdlc2AgYW5kIFVzZXJmYXVsdGZkcyoqCgpPa2F5LCB0aW1lIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgZ3V0cyBvZiBgbW92ZV9wYWdlc2Agd2l0aGluIHRoZSBgbW0vdXNlcmZhdWx0ZmQuY2AgZmlsZS4gSSYjMzk7dmUgYmVlbiB3b3JraW5nIHdpdGggdXNlcmZhdWx0ZmQgYW5kIGl0cyBpbnRlcmFjdGlvbnMgd2l0aCBwYWdlIG1pZ3JhdGlvbiBhbmQgbm93IEkgd2FudCB0byBnZXQgYSBtb3JlIGNvbmNyZXRlIHVuZGVyc3RhbmRpbmcgb2YgaXRzIGZ1bmN0aW9uYWxpdHkuIFdoYXQgc3BlY2lmaWMgbnVhbmNlcyBhcmUgdGhlcmUgaW4gYG1vdmVfcGFnZXNgIHdpdGggcmVzcGVjdCB0byB1c2VyZmF1bHRmZD8gQXJlIHRoZXJlIGFueSBjbGV2ZXIgdHJpY2tzIG9yIG9wdGltaXNhdGlvbnM/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlIGFuZCBjb25jdXJyZW5jeSwgZ2l2ZW4gdGhpcyBpcyBsaWtlbHkgYSBob3QgcGF0aD8gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIHVzZXJmYXVsdGZkIG1lY2hhbmlzbSBoYW5kbGVzIHBhZ2UgZmF1bHRzIGR1cmluZyB0aGUgbWlncmF0aW9uIHByb2Nlc3MgaXRzZWxmLiBBcmUgdGhlIHBhZ2UgZmF1bHRzIHJlLXRyaWdnZXJlZCBhbmQgaG93IGFyZSB0aGV5IHRyYWNrZWQ/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGluIGRldGFpbCB0byBhc3Nlc3MgaXRzIHN1aXRhYmlsaXR5IGluIG15IGN1cnJlbnQgcHJvamVjdC4gTGV0JiMzOTtzIHNlZSBob3cgdGhlIGtlcm5lbCBlbmdpbmVlcnMgaGFuZGxlZCBhbGwgb2YgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDQ6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS91c2VyZmF1bHRmZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAzNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjAzNDpcdFx0XHRcdFx0XHRcdHNwaW5fdW5sb2NrKHB0bCk7XG4yMDM1Olx0XHRcdFx0XHRcdFx0ZXJyID0gLUVCVVNZO1xuMjAzNjpcdFx0XHRcdFx0XHRcdGJyZWFrO1xuMjAzNzpcdFx0XHRcdFx0XHR9XG4yMDM4Olx0XHRcdFx0XHR9XG4yMDM5Olx0XG4yMDQwOlx0XHRcdFx0XHRzcGluX3VubG9jayhwdGwpO1xuMjA0MTpcdFx0XHRcdFx0c3BsaXRfaHVnZV9wbWQoc3JjX3ZtYSwgc3JjX3BtZCwgc3JjX2FkZHIpO1xuMjA0MjpcdFx0XHRcdFx0LyogVGhlIGZvbGlvIHdpbGwgYmUgc3BsaXQgYnkgbW92ZV9wYWdlc19wdGUoKSAqL1xuMjA0MzpcdFx0XHRcdFx0Y29udGludWU7XG4yMDQ0Olx0XHRcdFx0fVxuMjA0NTpcdFxuMjA0NjpcdFx0XHRcdGVyciA9IG1vdmVfcGFnZXNfaHVnZV9wbWQobW0sIGRzdF9wbWQsIHNyY19wbWQsXG4yMDQ3Olx0XHRcdFx0XHRcdFx0ICBkc3RfcG1kdmFsLCBkc3Rfdm1hLCBzcmNfdm1hLFxuMjA0ODpcdFx0XHRcdFx0XHRcdCAgZHN0X2FkZHIsIHNyY19hZGRyKTtcbjIwNDk6XHRcdFx0XHRzdGVwX3NpemUgPSBIUEFHRV9QTURfU0laRTtcbjIwNTA6XHRcdFx0fSBlbHNlIHtcbjIwNTE6XHRcdFx0XHRsb25nIHJldDtcbjIwNTI6XHRcbjIwNTM6XHRcdFx0XHRpZiAocG1kX25vbmUoKnNyY19wbWQpKSB7XG4yMDU0Olx0XHRcdFx0XHRpZiAoIShtb2RlIFx1MDAyNiBVRkZESU9fTU9WRV9NT0RFX0FMTE9XX1NSQ19IT0xFUykpIHtcbjIwNTU6XHRcdFx0XHRcdFx0ZXJyID0gLUVOT0VOVDtcbjIwNTY6XHRcdFx0XHRcdFx0YnJlYWs7XG4yMDU3Olx0XHRcdFx0XHR9XG4yMDU4Olx0XHRcdFx0XHRpZiAodW5saWtlbHkoX19wdGVfYWxsb2MobW0sIHNyY19wbWQpKSkge1xuMjA1OTpcdFx0XHRcdFx0XHRlcnIgPSAtRU5PTUVNO1xuMjA2MDpcdFx0XHRcdFx0XHRicmVhaztcbjIwNjE6XHRcdFx0XHRcdH1cbjIwNjI6XHRcdFx0XHR9XG4yMDYzOlx0XG4yMDY0Olx0XHRcdFx0aWYgKHVubGlrZWx5KHB0ZV9hbGxvYyhtbSwgZHN0X3BtZCkpKSB7XG4yMDY1Olx0XHRcdFx0XHRlcnIgPSAtRU5PTUVNO1xuMjA2NjpcdFx0XHRcdFx0YnJlYWs7XG4yMDY3Olx0XHRcdFx0fVxuMjA2ODpcdFxuMjA2OTpcdFx0XHRcdHJldCA9IG1vdmVfcGFnZXNfcHRlcyhtbSwgZHN0X3BtZCwgc3JjX3BtZCxcbjIwNzA6XHRcdFx0XHRcdFx0ICAgICAgZHN0X3ZtYSwgc3JjX3ZtYSwgZHN0X2FkZHIsXG4yMDcxOlx0XHRcdFx0XHRcdCAgICAgIHNyY19hZGRyLCBzcmNfZW5kIC0gc3JjX2FkZHIsIG1vZGUpO1xuMjA3MjpcdFx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4yMDczOlx0XHRcdFx0XHRlcnIgPSByZXQ7XG4yMDc0Olx0XHRcdFx0ZWxzZVxuMjA3NTpcdFx0XHRcdFx0c3RlcF9zaXplID0gcmV0O1xuMjA3NjpcdFx0XHR9XG4yMDc3Olx0XG4yMDc4Olx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuMjA3OTpcdFxuMjA4MDpcdFx0XHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcbjIwODE6XHRcdFx0XHQvKiBEbyBub3Qgb3ZlcnJpZGUgYW4gZXJyb3IgKi9cbjIwODI6XHRcdFx0XHRpZiAoIWVyciB8fCBlcnIgPT0gLUVBR0FJTilcbjIwODM6XHRcdFx0XHRcdGVyciA9IC1FSU5UUjtcbjIwODQ6XHRcdFx0XHRicmVhaztcbjIwODU6XHRcdFx0fVxuMjA4NjpcdFxuMjA4NzpcdFx0XHRpZiAoZXJyKSB7XG4yMDg4Olx0XHRcdFx0aWYgKGVyciA9PSAtRUFHQUlOKSB7XG4yMDg5Olx0XHRcdFx0XHRlcnIgPSAwO1xuMjA5MDpcdFx0XHRcdFx0Y29udGludWU7XG4yMDkxOlx0XHRcdFx0fVxuMjA5MjpcdFx0XHRcdGJyZWFrO1xuMjA5MzpcdFx0XHR9XG4yMDk0Olx0XG4yMDk1Olx0XHRcdC8qIFByb2NlZWQgdG8gdGhlIG5leHQgcGFnZSAqL1xuMjA5NjpcdFx0XHRkc3RfYWRkciAmIzQzOz0gc3RlcF9zaXplO1xuMjA5NzpcdFx0XHRzcmNfYWRkciAmIzQzOz0gc3RlcF9zaXplO1xuMjA5ODpcdFx0XHRtb3ZlZCAmIzQzOz0gc3RlcF9zaXplO1xuMjA5OTpcdFx0fVxuMjEwMDpcdFxuMjEwMTpcdG91dF91bmxvY2s6XG4yMTAyOlx0XHR1cF9yZWFkKFx1MDAyNmN0eC1cdTAwM2VtYXBfY2hhbmdpbmdfbG9jayk7XG4yMTAzOlx0XHR1ZmZkX21vdmVfdW5sb2NrKGRzdF92bWEsIHNyY192bWEpO1xuMjEwNDpcdG91dDpcbjIxMDU6XHRcdFZNX1dBUk5fT05fT05DRShtb3ZlZCBcdTAwM2MgMCk7XG4yMTA2Olx0XHRWTV9XQVJOX09OX09OQ0UoZXJyIFx1MDAzZSAwKTtcbjIxMDc6XHRcdFZNX1dBUk5fT05fT05DRSghbW92ZWQgXHUwMDI2XHUwMDI2ICFlcnIpO1xuMjEwODpcdFx0cmV0dXJuIG1vdmVkID8gbW92ZWQgOiBlcnI7XG4yMTA5Olx0fVxuMjExMDpcdFxuMjExMTpcdHN0YXRpYyBib29sIHZtYV9jYW5fdXNlcmZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bV9mbGFnc190IHZtX2ZsYWdzLFxuMjExMjpcdFx0XHQgICAgICAgYm9vbCB3cF9hc3luYylcbjIxMTM6XHR7XG4yMTE0Olx0XHRjb25zdCBzdHJ1Y3Qgdm1fdWZmZF9vcHMgKm9wcyA9IHZtYV91ZmZkX29wcyh2bWEpO1xuMjExNTpcdFxuMjExNjpcdFx0aWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgKFZNX0RST1BQQUJMRSB8IFZNX1NIQURPV19TVEFDSykpXG4yMTE3Olx0XHRcdHJldHVybiBmYWxzZTtcbjIxMTg6XHRcbjIxMTk6XHRcdGlmICghaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkgXHUwMDI2XHUwMDI2ICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1NQRUNJQUwpKVxuMjEyMDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4yMTIxOlx0XG4yMTIyOlx0XHR2bV9mbGFncyBcdTAwMjY9IF9fVk1fVUZGRF9GTEFHUztcbjIxMjM6XHRcbjIxMjQ6XHRcdC8qXG4yMTI1Olx0XHQgKiBJZiBXUCBpcyB0aGUgb25seSBtb2RlIGVuYWJsZWQgYW5kIGNvbnRleHQgaXMgd3AgYXN5bmMsIGFsbG93IGFueVxuMjEyNjpcdFx0ICogbWVtb3J5IHR5cGUuXG4yMTI3Olx0XHQgKi9cbjIxMjg6XHRcdGlmICh3cF9hc3luYyBcdTAwMjZcdTAwMjYgKHZtX2ZsYWdzID09IFZNX1VGRkRfV1ApKVxuMjEyOTpcdFx0XHRyZXR1cm4gdHJ1ZTtcbjIxMzA6XHRcbjIxMzE6XHRcdC8qIEZvciBhbnkgb3RoZXIgbW9kZSByZWplY3QgVk1BcyB0aGF0IGRvbiYjMzk7dCBpbXBsZW1lbnQgdm1fdWZmZF9vcHMgKi9cbjIxMzI6XHRcdGlmICghb3BzKVxuMjEzMzpcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA0OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczOTUKCQkJCQkJCW91dHB1dDogMjU0CgkJCQkJCQl0aG91Z2h0czogMTM0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBtb3ZlX3BhZ2VzYCBCdWcgYW5kIEl0cyBGaXgqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaXNzZWN0aW5nIHRoaXMgcGF0Y2ggYW5kIEkgdGhpbmsgSSYjMzk7dmUgZ290IGEgZ29vZCBoYW5kbGUgb24gd2hhdCYjMzk7cyBnb2luZyBvbiBoZXJlLiBUaGUgY29yZSBpc3N1ZSBpcyB3aXRoIGhvdyB0aGUgYGVycmAgdmFyaWFibGUgaXMgaGFuZGxlZCB3aXRoaW4gdGhpcyBsb29wLiBJbml0aWFsbHksIEkgd2FzIGEgYml0IGNvbmZ1c2VkIGJ5IHRoZSBsb2dpYywgZXNwZWNpYWxseSB3aXRoIHRoYXQgYHJldHVybiBtb3ZlZCA/IG1vdmVkIDogZXJyO2AgYXQgdGhlIGVuZC4gQnV0IG5vdyBpdCBtYWtlcyBzZW5zZS4gSXQmIzM5O3MgZXNzZW50aWFsbHkgcmV0dXJuaW5nIGVpdGhlciB0aGUgbnVtYmVyIG9mIGJ5dGVzIG1vdmVkIG9yIHRoZSBlcnJvciBjb2RlLiBUaGUgcHJvYmxlbSBhcmlzZXMgd2hlbiB3ZSBnZXQgYW4gYC1FQUdBSU5gIGVycm9yLgoKSSBzZWUgaXQgbm93OiB0aGUgYnVnIHN0ZW1zIGZyb20gYGVycmAgYmVpbmcgc2V0IHRvIGAtRUFHQUlOYCBpbnNpZGUgdGhlIGxvb3AsIGFuZCB0aGVuIGBjb250aW51ZWAgaXMgY2FsbGVkICp3aXRob3V0KiByZXNldHRpbmcgYGVycmAgdG8gMC4gVGhpcyBpcyB0aGUgY3J1Y2lhbCBiaXQuIElmLCBzYXksIGBtb3ZlX3BhZ2VzX3B0ZXNgIHJldHVybnMgYC1FQUdBSU5gLCB0aGUgY29kZSBjb250aW51ZXMgdGhlIGxvb3AuIFRoZW4sIHRoZSBzdWJzZXF1ZW50IGV4ZWN1dGlvbiBpbnNpZGUgdGhlIGxvb3AgKmRvZXNuJiMzOTt0KiByZXNldCBgZXJyYCBhdCB0aGUgc3RhcnQgb2YgdGhlIG5leHQgaXRlcmF0aW9uISBUaGlzIGlzIHRoZSBzbW9raW5nIGd1biEKCkVzc2VudGlhbGx5LCBpZiBhIHJldHJ5IGlzIG5lZWRlZCBiZWNhdXNlIG9mIGAtRUFHQUlOYCwgdGhlIGxvb3AgZG9lcyAqbm90KiBhZHZhbmNlIGBkc3RfYWRkcmAgYW5kIGBzcmNfYWRkcmAuIEluc3RlYWQsIGl0IHJldHJpZXMgdGhlIHNhbWUgbWVtb3J5IGxvY2F0aW9ucyByZXBlYXRlZGx5LiBTaW5jZSBgZXJyYCBpcyAqbm90KiByZXNldCwgdGhlIGNoZWNrIGBpZiAoZXJyKWAgd2lsbCBzdGlsbCBiZSBgdHJ1ZWAuIFNpbmNlIGBlcnJgIHJlbWFpbnMgYC1FQUdBSU5gLCBpdCBjb250aW51ZXMuIEFuZCBiZWNhdXNlIHRoZSBhZGRyZXNzZXMgZG9uJiMzOTt0IGFkdmFuY2UsIGl0IGJlY29tZXMgYW4gaW5maW5pdGUgbG9vcCEgVGhhdCYjMzk7cyBpdCEKClNvLCB0aGUgZml4IGlzIHN0cmFpZ2h0Zm9yd2FyZDogYWRkaW5nIGBlcnIgPSAwO2AgYmVmb3JlIHRoZSBgY29udGludWVgIHN0YXRlbWVudC4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGxvb3AgcmV0cmllcyBjb3JyZWN0bHksIHJlc2V0dGluZyB0aGUgZXJyb3IgY29kZSB0byB6ZXJvIHdoZW4gYC1FQUdBSU5gIGlzIGVuY291bnRlcmVkLCBhbmQgKnRoZW4qIHRoZSBgc3JjX2FkZHJgIGFuZCBgZHN0X2FkZHJgIHdpbGwgYmUgYWR2YW5jZWQuCgpOb3csIGEgcXVpY2sgc2lkZS1ub3RlIHRvIG1ha2Ugc3VyZSBpdCYjMzk7cyBub3QgYSBLTVNBTiBpc3N1ZSB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBgZXJyYCBhbmQgYHN0ZXBfc2l6ZWAgYXJlIGxvY2FsIHZhcmlhYmxlcy4gVGhlcmUmIzM5O3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBUaGlzIGlzbiYjMzk7dCBhYm91dCBLTVNBTjsgaXQmIzM5O3MgYSBwdXJlIGNvbnRyb2wtZmxvdyBidWcgdGhhdCBjYW4gYmUgZm91bmQgd2l0aCByZWd1bGFyIGZ1enppbmcgKGUuZy4sIEtBU0FOLCBMT0NLREVQLCBzb2Z0IGxvY2t1cCkuIEl0JiMzOTtzIGEgaGFuZy4gVGhlIGZpeCBpcyBhIGNvbnRyb2wgZmxvdyBjaGFuZ2UuIE5lZWRzS01TQU4gPSBmYWxzZS4KCkluIGEgbnV0c2hlbGwsIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgaGFuZyBvciBpbmZpbml0ZSBsb29wIGNvbmRpdGlvbiBpbiB0aGUgYG1vdmVfcGFnZXMoKWAgZnVuY3Rpb24gd2l0aGluIGBtbS91c2VyZmF1bHRmZC5jYC4gVGhlIGJ1ZyBvY2N1cnMgd2hlbiBhbiBvcGVyYXRpb24gZmFpbHMgd2l0aCBgLUVBR0FJTmAuIEFmdGVyIHRoYXQsIHRoZSBsb29wIGZhaWxzIHRvIHJlc2V0IGBlcnJgIHRvIDAsIGNhdXNpbmcgaXQgdG8gZW5kbGVzc2x5IHJldHJ5IHRoZSBzYW1lIGFkZHJlc3Nlcywgd2l0aG91dCBhZHZhbmNpbmcgYHNyY19hZGRyYCBvciBgZHN0X2FkZHJgLiBUaGUgZml4IHJlc2V0cyB0aGUgZXJyIGJlZm9yZSBjb250aW51aW5nLiBUaGlzIGZpeCBpcyBub3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSwgb25seSBjb250cm9sIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA0OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgY29udHJvbCBmbG93IGJ1ZyBpbiBgbW92ZV9wYWdlcygpYCBpbiBgbW0vdXNlcmZhdWx0ZmQuY2AuIFByaW9yIHRvIHRoZSBwYXRjaCwgaWYgYSBwYWdlIG1vdmUgb3BlcmF0aW9uIHJldHVybmVkIGAtRUFHQUlOYCwgdGhlIGxvb3Agd291bGQgYGNvbnRpbnVlYCBidXQgZmFpbCB0byByZXNldCB0aGUgYGVycmAgdmFyaWFibGUgdG8gMC4gQmVjYXVzZSBgZXJyYCBpcyBub3QgdW5jb25kaXRpb25hbGx5IG92ZXJ3cml0dGVuIG9uIHN1Y2Nlc3NmdWwgcGFnZSBtb3ZlcyAoZS5nLiwgd2hlbiBgbW92ZV9wYWdlc19wdGVzKClgIHJldHVybnMgYSBwb3NpdGl2ZSBzdGVwIHNpemUpLCBgZXJyYCB3b3VsZCByZW1haW4gYC1FQUdBSU5gLiBUaGlzIGNhdXNlZCB0aGUgbG9vcCB0byBpbmZpbml0ZWx5IHJldHJ5IHRoZSBzYW1lIGFkZHJlc3Mgd2l0aG91dCBhZHZhbmNpbmcgYHNyY19hZGRyYCBhbmQgYGRzdF9hZGRyYCwgbGVhZGluZyB0byBhIGhhbmcuIFRoZSBwYXRjaCBzaW1wbHkgcmVzZXRzIGBlcnIgPSAwYCBiZWZvcmUgY29udGludWluZywgZml4aW5nIHRoZSBpbmZpbml0ZSBsb29wLlxuXG5UaGlzIGJ1ZyBpcyBhIHB1cmUgY29udHJvbCBmbG93IGlzc3VlIHJlc3VsdGluZyBpbiBhIGhhbmcuIEl0IGRvZXMgbm90IGludm9sdmUgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgbGVhayB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgZnV6emluZyAod2l0aCBLQVNBTiwgTE9DS0RFUCwgYW5kIHNvZnQgbG9ja3VwIGRldGVjdG9ycykgaXMgcGVyZmVjdGx5IGNhcGFibGUgb2YgZGV0ZWN0aW5nIGhhbmdzIGFuZCBpbmZpbml0ZSBsb29wcy4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzayBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBwYXRjaCB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGNvbnRyb2wgZmxvdyBidWcgaW4gYG1vdmVfcGFnZXMoKWAgaW4gYG1tL3VzZXJmYXVsdGZkLmNgLiBQcmlvciB0byB0aGUgcGF0Y2gsIGlmIGEgcGFnZSBtb3ZlIG9wZXJhdGlvbiByZXR1cm5lZCBgLUVBR0FJTmAsIHRoZSBsb29wIHdvdWxkIGBjb250aW51ZWAgYnV0IGZhaWwgdG8gcmVzZXQgdGhlIGBlcnJgIHZhcmlhYmxlIHRvIDAuIEJlY2F1c2UgYGVycmAgaXMgbm90IHVuY29uZGl0aW9uYWxseSBvdmVyd3JpdHRlbiBvbiBzdWNjZXNzZnVsIHBhZ2UgbW92ZXMgKGUuZy4sIHdoZW4gYG1vdmVfcGFnZXNfcHRlcygpYCByZXR1cm5zIGEgcG9zaXRpdmUgc3RlcCBzaXplKSwgYGVycmAgd291bGQgcmVtYWluIGAtRUFHQUlOYC4gVGhpcyBjYXVzZWQgdGhlIGxvb3AgdG8gaW5maW5pdGVseSByZXRyeSB0aGUgc2FtZSBhZGRyZXNzIHdpdGhvdXQgYWR2YW5jaW5nIGBzcmNfYWRkcmAgYW5kIGBkc3RfYWRkcmAsIGxlYWRpbmcgdG8gYSBoYW5nLiBUaGUgcGF0Y2ggc2ltcGx5IHJlc2V0cyBgZXJyID0gMGAgYmVmb3JlIGNvbnRpbnVpbmcsIGZpeGluZyB0aGUgaW5maW5pdGUgbG9vcC5cblxuVGhpcyBidWcgaXMgYSBwdXJlIGNvbnRyb2wgZmxvdyBpc3N1ZSByZXN1bHRpbmcgaW4gYSBoYW5nLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGxlYWsgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIGZ1enppbmcgKHdpdGggS0FTQU4sIExPQ0tERVAsIGFuZCBzb2Z0IGxvY2t1cCBkZXRlY3RvcnMpIGlzIHBlcmZlY3RseSBjYXBhYmxlIG9mIGRldGVjdGluZyBoYW5ncyBhbmQgaW5maW5pdGUgbG9vcHMuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgcGF0Y2ggdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1NzowMy40MjkzMjg0MzdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDQwMTA5ODY3OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNFUkZBVUxURkRcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXNlcmZhdWx0ZmRfaW9jdGxcIixcbiAgICBcInVzZXJmYXVsdGZkX21vdmVcIixcbiAgICBcIm1vdmVfcGFnZXNfaHVnZV9wbWRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgY29udHJvbCBmbG93IGJ1ZyBpbiBgbW92ZV9wYWdlcygpYCBpbiBgbW0vdXNlcmZhdWx0ZmQuY2AuIFByaW9yIHRvIHRoZSBwYXRjaCwgaWYgYSBwYWdlIG1vdmUgb3BlcmF0aW9uIHJldHVybmVkIGAtRUFHQUlOYCwgdGhlIGxvb3Agd291bGQgYGNvbnRpbnVlYCBidXQgZmFpbCB0byByZXNldCB0aGUgYGVycmAgdmFyaWFibGUgdG8gMC4gQmVjYXVzZSBgZXJyYCBpcyBub3QgdW5jb25kaXRpb25hbGx5IG92ZXJ3cml0dGVuIG9uIHN1Y2Nlc3NmdWwgcGFnZSBtb3ZlcyAoZS5nLiwgd2hlbiBgbW92ZV9wYWdlc19wdGVzKClgIHJldHVybnMgYSBwb3NpdGl2ZSBzdGVwIHNpemUpLCBgZXJyYCB3b3VsZCByZW1haW4gYC1FQUdBSU5gLiBUaGlzIGNhdXNlZCB0aGUgbG9vcCB0byBpbmZpbml0ZWx5IHJldHJ5IHRoZSBzYW1lIGFkZHJlc3Mgd2l0aG91dCBhZHZhbmNpbmcgYHNyY19hZGRyYCBhbmQgYGRzdF9hZGRyYCwgbGVhZGluZyB0byBhIGhhbmcuIFRoZSBwYXRjaCBzaW1wbHkgcmVzZXRzIGBlcnIgPSAwYCBiZWZvcmUgY29udGludWluZywgZml4aW5nIHRoZSBpbmZpbml0ZSBsb29wLlxcblxcblRoaXMgYnVnIGlzIGEgcHVyZSBjb250cm9sIGZsb3cgaXNzdWUgcmVzdWx0aW5nIGluIGEgaGFuZy4gSXQgZG9lcyBub3QgaW52b2x2ZSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBsZWFrIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBTdGFuZGFyZCBmdXp6aW5nICh3aXRoIEtBU0FOLCBMT0NLREVQLCBhbmQgc29mdCBsb2NrdXAgZGV0ZWN0b3JzKSBpcyBwZXJmZWN0bHkgY2FwYWJsZSBvZiBkZXRlY3RpbmcgaGFuZ3MgYW5kIGluZmluaXRlIGxvb3BzLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGlzIHBhdGNoIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgVUZGRElPX01PVkUgaW9jdGwgaGFuZGxlciB3aGVyZSBhbiAtRUFHQUlOIGVycm9yIHdhcyBub3QgcmVzZXQgdG8gMCBiZWZvcmUgY29udGludWluZyB0aGUgbG9vcC4gSWYgbm90IHJlc2V0LCBhIHN1YnNlcXVlbnQgc3VjY2Vzc2Z1bCBwYWdlIG1vdmUgd291bGQgbGVhdmUgZXJyIGFzIC1FQUdBSU4sIGNhdXNpbmcgdGhlIGxvb3AgdG8gc2tpcCBhZHZhbmNpbmcgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzc2VzLiBUaGlzIHJlc3VsdHMgaW4gYW4gaW5maW5pdGUgbG9vcCBvciByZXBlYXRlZCBhdHRlbXB0cyB0byBtb3ZlIHRoZSBzYW1lIHBhZ2UuIFRoZSBmaXggZW5zdXJlcyBlcnIgaXMgcmVzZXQgdG8gMCwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSB1c2VyZmF1bHRmZCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTc6MDMuNDI5MzMzNTE3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc4MTEwNjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDFjNDg2ZGE5YWNkNGZhMTdhNTY1YmVlYWM0MjI3OGM5Y2U3MDNmMVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAxOSAwMzo1NzowMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS91c2VyZmF1bHRmZC5jIGIvbW0vdXNlcmZhdWx0ZmQuY1xcbmluZGV4IGMzYWRlZGFhZjdkNTQuLmVjNWQ1MTFiZDE3OTEgMTAwNjQ0XFxuLS0tIGEvbW0vdXNlcmZhdWx0ZmQuY1xcbisrKyBiL21tL3VzZXJmYXVsdGZkLmNcXG5AQCAtMjA4NSw4ICsyMDg1LDEwIEBAIHN0YXRpYyBzc2l6ZV90IG1vdmVfcGFnZXMoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LCB1bnNpZ25lZCBsb25nIGRzdF9zdGFydCxcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0aWYgKGVycikge1xcbi1cXHRcXHRcXHRpZiAoZXJyID09IC1FQUdBSU4pXFxuK1xcdFxcdFxcdGlmIChlcnIgPT0gLUVBR0FJTikge1xcbitcXHRcXHRcXHRcXHRlcnIgPSAwO1xcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTc6MDQuOTA4MjA1MDRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNzU2OTIyODU0ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNFUkZBVUxURkRcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXNlcmZhdWx0ZmRfaW9jdGxcIixcbiAgICBcInVzZXJmYXVsdGZkX21vdmVcIixcbiAgICBcIm1vdmVfcGFnZXNfaHVnZV9wbWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgVUZGRElPX01PVkUgaW9jdGwgaGFuZGxlciB3aGVyZSBhbiAtRUFHQUlOIGVycm9yIHdhcyBub3QgcmVzZXQgdG8gMCBiZWZvcmUgY29udGludWluZyB0aGUgbG9vcC4gSWYgbm90IHJlc2V0LCBhIHN1YnNlcXVlbnQgc3VjY2Vzc2Z1bCBwYWdlIG1vdmUgd291bGQgbGVhdmUgZXJyIGFzIC1FQUdBSU4sIGNhdXNpbmcgdGhlIGxvb3AgdG8gc2tpcCBhZHZhbmNpbmcgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzc2VzLiBUaGlzIHJlc3VsdHMgaW4gYW4gaW5maW5pdGUgbG9vcCBvciByZXBlYXRlZCBhdHRlbXB0cyB0byBtb3ZlIHRoZSBzYW1lIHBhZ2UuIFRoZSBmaXggZW5zdXJlcyBlcnIgaXMgcmVzZXQgdG8gMCwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSB1c2VyZmF1bHRmZCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDFjNDg2ZGE5YWNkNGZhMTdhNTY1YmVlYWM0MjI3OGM5Y2U3MDNmMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDE5IDAzOjU3OjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdXNlcmZhdWx0ZmQuYyBiL21tL3VzZXJmYXVsdGZkLmNcbmluZGV4IGMzYWRlZGFhZjdkNTQuLmVjNWQ1MTFiZDE3OTEgMTAwNjQ0XG4tLS0gYS9tbS91c2VyZmF1bHRmZC5jXG4rKysgYi9tbS91c2VyZmF1bHRmZC5jXG5AQCAtMjA4NSw4ICsyMDg1LDEwIEBAIHN0YXRpYyBzc2l6ZV90IG1vdmVfcGFnZXMoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LCB1bnNpZ25lZCBsb25nIGRzdF9zdGFydCxcbiBcdFx0fVxuIFxuIFx0XHRpZiAoZXJyKSB7XG4tXHRcdFx0aWYgKGVyciA9PSAtRUFHQUlOKVxuK1x0XHRcdGlmIChlcnIgPT0gLUVBR0FJTikge1xuK1x0XHRcdFx0ZXJyID0gMDtcbiBcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdH1cbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTc6MDQuOTA4MjA2NzFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODAyMDcyMzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFVzZXJmYXVsdGZkIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgdG91Y2hlZCBgbW0vdXNlcmZhdWx0ZmQuY2AsIHNwZWNpZmljYWxseSB0aGUgYG1vdmVfcGFnZXNgIGZ1bmN0aW9uLiBIbW0sIGxvb2tzIGxpa2UgdGhlcmUncyBhIG1vZGlmaWNhdGlvbiBpbiB0aGUgZXJyb3IgaGFuZGxpbmcuIEluaXRpYWxseSwgaWYgYG1vdmVfcGFnZXNgIHJldHVybmVkIGAtRUFHQUlOYCwgaXQgd291bGQgc2ltcGx5IGJlIHBhc3NlZCBiYWNrIHVwIHRoZSBjYWxsIHN0YWNrLiBOb3csIGl0IGFwcGVhcnMgdGhpcyBgLUVBR0FJTmAgaXMgYmVpbmcgY2F1Z2h0LCB0aGUgZXJyb3IgY29kZSBpcyBiZWluZyByZXNldCB0byAwLCBhbmQgdGhlIGxvb3AgY29udGludWVzLiBJbnRlcmVzdGluZy5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQncyBkcml2aW5nIHRoaXMgY2hhbmdlPyBXaHkgYXJlIHdlIGFic29yYmluZyBgLUVBR0FJTmAgYW5kIGNvbnRpbnVpbmcgdGhlIGBtb3ZlX3BhZ2VzYCBvcGVyYXRpb24/IElzIHRoaXMgcmVsYXRlZCB0byBzb21lIGtpbmQgb2YgcmV0cnkgbG9naWM/IElzIGl0IGludGVuZGVkIHRvIGhhbmRsZSB0cmFuc2llbnQgcmVzb3VyY2UgY29udGVudGlvbj8gSXMgaXQgc2FmZSB0byBpZ25vcmUgYSBmYWlsZWQgYG1vdmVfcGFnZXNgIG9wZXJhdGlvbj8gSSdsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29udGV4dC5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBzaXR1YXRpb25zIHRyaWdnZXIgYW4gYC1FQUdBSU5gIGZyb20gYG1vdmVfcGFnZXNgIHdpdGhpbiB0aGlzIGB1c2VyZmF1bHRmZGAgY29udGV4dC4gVGhlbiBJJ2xsIG5lZWQgdG8gbG9vayBhdCBhbGwgdGhlIGNhbGxlcnMgb2YgYG1vdmVfcGFnZXNgIHdpdGhpbiBgbW0vdXNlcmZhdWx0ZmQuY2AgYW5kIGhvdyB0aGV5IHJlYWN0IHRvIHRoZSByZXR1cm5lZCBlcnJvciBjb2Rlcy4gVGhpcyBsb29rcyBsaWtlIGEgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgY2hhbmdlIHRvIHRoZSBmYXVsdCBoYW5kbGluZyBiZWhhdmlvciwgc28gaXQgd2FycmFudHMgYSB0aG9yb3VnaCBpbnZlc3RpZ2F0aW9uLiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGZyb20gdGhlIHBvaW50IG9mIHRoZSB1c2VyZmF1bHQgdG8gdGhpcyBzcGVjaWZpYyBgbW92ZV9wYWdlc2AgY2FsbCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1NzowOC43MTAyODE1NzlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzMzA0MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW92ZV9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS91c2VyZmF1bHRmZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3VzZXJmYXVsdGZkLmM9MTM4Mj1zdGF0aWMgaW50IG1vdmVfemVyb3BhZ2VfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xNDE0LSAqL1xcbm1tL3VzZXJmYXVsdGZkLmM6MTQxNTpzdGF0aWMgbG9uZyBtb3ZlX3BhZ2VzX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZCxcXG5tbS91c2VyZmF1bHRmZC5jLTE0MTYtXFx0XFx0XFx0ICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmM9MTg1OT1zdGF0aWMgdm9pZCB1ZmZkX21vdmVfdW5sb2NrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMTg2Ny0vKipcXG5tbS91c2VyZmF1bHRmZC5jOjE4Njg6ICogbW92ZV9wYWdlcyAtIG1vdmUgYXJiaXRyYXJ5IGFub255bW91cyBwYWdlcyBvZiBhbiBleGlzdGluZyB2bWFcXG5tbS91c2VyZmF1bHRmZC5jLTE4NjktICogQGN0eDogcG9pbnRlciB0byB0aGUgdXNlcmZhdWx0ZmQgY29udGV4dFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xODc2LSAqXFxubW0vdXNlcmZhdWx0ZmQuYzoxODc3OiAqIG1vdmVfcGFnZXMoKSByZW1hcHMgYXJiaXRyYXJ5IGFub255bW91cyBwYWdlcyBhdG9taWNhbGx5IGluIHplcm9cXG5tbS91c2VyZmF1bHRmZC5jLTE4NzgtICogY29weS4gSXQgb25seSB3b3JrcyBvbiBub24gc2hhcmVkIGFub255bW91cyBwYWdlcyBiZWNhdXNlIHRob3NlIGNhblxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xODg4LSAqIHN0b3JhZ2Ugb3IgYW55IG90aGVyIEkvTyBkZXZpY2UgKE1BRFZfRE9OVEZPUksgaW4gdGhlIHNvdXJjZSB2bWFcXG5tbS91c2VyZmF1bHRmZC5jOjE4ODk6ICogYXZvaWRzIG1vdmVfcGFnZXMoKSB0byBmYWlsIHdpdGggLUVCVVNZIGlmIHRoZSBwcm9jZXNzIGZvcmtzIGJlZm9yZVxcbm1tL3VzZXJmYXVsdGZkLmM6MTg5MDogKiBtb3ZlX3BhZ2VzKCkgaXMgY2FsbGVkKSwgdGhlbiBpdCB3aWxsIGNhbGwgbW92ZV9wYWdlcygpIHRvIG1hcCB0aGVcXG5tbS91c2VyZmF1bHRmZC5jLTE4OTEtICogcGFnZSBpbiB0aGUgZmF1bHRpbmcgYWRkcmVzcyBpbiB0aGUgZGVzdGluYXRpb24gdm1hLlxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTA1LSAqIHRoZSBkZXN0aW5hdGlvbiB2aXJ0dWFsIG1lbW9yeSByYW5nZSBpcyBub3QgYSB3aG9sZSB1bm1hcHBlZCBob2xlLFxcbm1tL3VzZXJmYXVsdGZkLmM6MTkwNjogKiBtb3ZlX3BhZ2VzKCkgd2lsbCBmYWlsIHJlc3BlY3RpdmVseSB3aXRoIC1FTk9FTlQgb3IgLUVFWElTVC4gVGhpc1xcbm1tL3VzZXJmYXVsdGZkLmMtMTkwNy0gKiBwcm92aWRlcyBhIHZlcnkgc3RyaWN0IGJlaGF2aW9yIHRvIGF2b2lkIGFueSBjaGFuY2Ugb2YgbWVtb3J5XFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTE5MTAtICogdGltZSBmb3IgYW55IGdpdmVuIGZhdWx0aW5nIGFkZHJlc3MuIFRoaXMgbWVhbnMgdGhhdCBpZiB0d28gdGhyZWFkc1xcbm1tL3VzZXJmYXVsdGZkLmM6MTkxMTogKiB0cnkgdG8gYm90aCBjYWxsIG1vdmVfcGFnZXMoKSBvbiB0aGUgc2FtZSBkZXN0aW5hdGlvbiBhZGRyZXNzIGF0IHRoZVxcbm1tL3VzZXJmYXVsdGZkLmMtMTkxMi0gKiBzYW1lIHRpbWUsIHRoZSBzZWNvbmQgdGhyZWFkIHdpbGwgZ2V0IGFuIGV4cGxpY2l0IGVycm9yIGZyb20gdGhpc1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTIwLSAqIGFuIGFtb3VudCBvZiBieXRlcyBzdWNjZXNzZnVsbHkgbW92ZWQuIElmIHRoZSByZXR2YWwgcmVwb3J0cyBhXFxubW0vdXNlcmZhdWx0ZmQuYzoxOTIxOiAqIFxcXCJzaG9ydFxcXCIgcmVtYXAsIHRoZSBtb3ZlX3BhZ2VzKCkgY29tbWFuZCBzaG91bGQgYmUgcmVwZWF0ZWQgYnlcXG5tbS91c2VyZmF1bHRmZC5jLTE5MjItICogdXNlcmxhbmQgd2l0aCBzcmMrcmV0dmFsLCBkc3QrcmV2YWwsIGxlbi1yZXR2YWwgaWYgaXQgd2FudHMgdG8ga25vd1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTMzLSAqL1xcbm1tL3VzZXJmYXVsdGZkLmM6MTkzNDpzdGF0aWMgc3NpemVfdCBtb3ZlX3BhZ2VzKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTM1LVxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgc3JjX3N0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbiwgX191NjQgbW9kZSlcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMjAxNC1cXHRcXHQgKiBiZSBzdHJpY3QuIElmIGRzdF9wbWQgY2hhbmdlcyBpbnRvIFRQSCBhZnRlciB0aGlzIGNoZWNrLCB0aGVcXG5tbS91c2VyZmF1bHRmZC5jOjIwMTU6XFx0XFx0ICogbW92ZV9wYWdlc19odWdlX3BtZCgpIHdpbGwgZGV0ZWN0IHRoZSBjaGFuZ2UgYW5kIHJldHJ5XFxubW0vdXNlcmZhdWx0ZmQuYzoyMDE2OlxcdFxcdCAqIHdoaWxlIG1vdmVfcGFnZXNfcHRlKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgZmFpbC5cXG5tbS91c2VyZmF1bHRmZC5jLTIwMTctXFx0XFx0ICovXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTIwNDEtXFx0XFx0XFx0XFx0c3BsaXRfaHVnZV9wbWQoc3JjX3ZtYSwgc3JjX3BtZCwgc3JjX2FkZHIpO1xcbm1tL3VzZXJmYXVsdGZkLmM6MjA0MjpcXHRcXHRcXHRcXHQvKiBUaGUgZm9saW8gd2lsbCBiZSBzcGxpdCBieSBtb3ZlX3BhZ2VzX3B0ZSgpICovXFxubW0vdXNlcmZhdWx0ZmQuYy0yMDQzLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0yMDQ1LVxcbm1tL3VzZXJmYXVsdGZkLmM6MjA0NjpcXHRcXHRcXHRlcnIgPSBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKG1tLCBkc3RfcG1kLCBzcmNfcG1kLFxcbm1tL3VzZXJmYXVsdGZkLmMtMjA0Ny1cXHRcXHRcXHRcXHRcXHRcXHQgIGRzdF9wbWR2YWwsIGRzdF92bWEsIHNyY192bWEsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTIwNjgtXFxubW0vdXNlcmZhdWx0ZmQuYzoyMDY5OlxcdFxcdFxcdHJldCA9IG1vdmVfcGFnZXNfcHRlcyhtbSwgZHN0X3BtZCwgc3JjX3BtZCxcXG5tbS91c2VyZmF1bHRmZC5jLTIwNzAtXFx0XFx0XFx0XFx0XFx0ICAgICAgZHN0X3ZtYSwgc3JjX3ZtYSwgZHN0X2FkZHIsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jPTQyMTY9c3RhdGljIGludCB1c2VyZmF1bHRmZF9tb3ZlKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtNDI1NS1cXHRpZiAobW1nZXRfbm90X3plcm8obW0pKSB7XFxubW0vdXNlcmZhdWx0ZmQuYzo0MjU2OlxcdFxcdHJldCA9IG1vdmVfcGFnZXMoY3R4LCB1ZmZkaW9fbW92ZS5kc3QsIHVmZmRpb19tb3ZlLnNyYyxcXG5tbS91c2VyZmF1bHRmZC5jLTQyNTctXFx0XFx0XFx0XFx0IHVmZmRpb19tb3ZlLmxlbiwgdWZmZGlvX21vdmUubW9kZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjU3OjA4Ljc1NjYyMDE4NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4Mjk3ODYzNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyB0aGUgUGFnZSBNb3ZlbWVudCBGbG93KipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIHBhZ2UgbWlncmF0aW9uIGNvZGUsIGFuZCBpdCBsb29rcyBsaWtlIGBtb3ZlX3BhZ2VzYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCdzIHVsdGltYXRlbHkgZG9pbmcgdGhlIGhlYXZ5IGxpZnRpbmcsIGFzIGV4cGVjdGVkLiBOb3csIHdoZXJlIGlzIHRoaXMgYG1vdmVfcGFnZXNgIGFjdHVhbGx5IGJlaW5nICpjYWxsZWQqIGZyb20/IEFoLCBsb29rcyBsaWtlIGB1c2VyZmF1bHRmZF9tb3ZlYCBpcyB0aGUgaW1tZWRpYXRlIGNhbGxlci4gVGhhdCdzIGEga2V5IHBvaW50IHRvIHJlbWVtYmVyLiBJdCBtYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIG5hbWUuIEFuZCBgdXNlcmZhdWx0ZmRfbW92ZWAsIGFzIGJlc3QgYXMgSSBjYW4gdGVsbCBmcm9tIGEgcXVpY2sgZ2xhbmNlLCBzZWVtcyB0byBiZSBpbnZva2VkIHZpYSBgdXNlcmZhdWx0ZmRfaW9jdGxgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBsaWtlbHkgYSByZWxhdGVkIHN5c3RlbSBjYWxsIGZvciB1c2VyZmF1bHRmZCBvcGVyYXRpb25zLiBSaWdodCwgbWFrZXMgc2Vuc2UgaW4gdGhlIGdyZWF0ZXIgY29udGV4dC5cblxuU28sIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkZWx2ZSBpbnRvIGB1c2VyZmF1bHRmZF9tb3ZlYCBpdHNlbGYgYW5kIGZpZ3VyZSBvdXQgaG93IGl0J3Mgc2V0dGluZyB1cCB0aGUgY2FsbCB0byBgbW92ZV9wYWdlc2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBhcmd1bWVudHMgaXQncyBwYXNzaW5nLCBhbnkgY29udGV4dCBpdCdzIHByb3ZpZGluZywgYW5kIHdoYXQgY2hlY2tzIGl0IG1pZ2h0IGJlIHBlcmZvcm1pbmcgYmVmb3JlIHRyaWdnZXJpbmcgdGhlIHBhZ2UgbWlncmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaW4gcGxhY2UgdGhlcmUsIGJlY2F1c2UgdGhhdCdzIHdoZXJlIGFueSBwb3NzaWJsZSBwcm9ibGVtcyBhcmUgbW9zdCBsaWtlbHkgdG8gbGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzcyMywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjU3OjEyLjU4NjQwOTAwN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODM2MTU4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyZmF1bHRmZF9tb3ZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3VzZXJmYXVsdGZkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdXNlcmZhdWx0ZmQuYz00MjA3PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHVmZmRfY3R4X2ZlYXR1cmVzKF9fdTY0IHVzZXJfZmVhdHVyZXMpXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTQyMTUtXFxubW0vdXNlcmZhdWx0ZmQuYzo0MjE2OnN0YXRpYyBpbnQgdXNlcmZhdWx0ZmRfbW92ZShzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsXFxubW0vdXNlcmZhdWx0ZmQuYy00MjE3LVxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmM9NDM1MD1zdGF0aWMgbG9uZyB1c2VyZmF1bHRmZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgY21kLFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy00Mzc4LVxcdGNhc2UgVUZGRElPX01PVkU6XFxubW0vdXNlcmZhdWx0ZmQuYzo0Mzc5OlxcdFxcdHJldCA9IHVzZXJmYXVsdGZkX21vdmUoY3R4LCBhcmcpO1xcbm1tL3VzZXJmYXVsdGZkLmMtNDM4MC1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTc6MTIuNjM0Nzc2MDMxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA5ODI0NDQxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFVzZXJmYXVsdGZkIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgc3BlY2lmaWNhbGx5IHRoZSBjaGFuZ2UgaW4gYG1vdmVfcGFnZXNgIHdpdGhpbiBgbW0vdXNlcmZhdWx0ZmQuY2AuIFRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gc2VlbXMgdG8gYmUgaW4gaG93IGl0IGhhbmRsZXMgdGhlIGAtRUFHQUlOYCBlcnJvci4gTGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gQmVmb3JlLCBpZiBgZXJyYCB3YXMgYC1FQUdBSU5gLCB0aGUgY29kZSB3b3VsZCBqdXN0IGBjb250aW51ZWAgdGhlIGxvb3AuIE5vdywgaXQncyBzZXR0aW5nIGBlcnJgIHRvIGAwYCAqYmVmb3JlKiBjb250aW51aW5nLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2h5IHRoZSBleHRyYSBhc3NpZ25tZW50PyBUaGUgb3JpZ2luYWwgY29kZSBoYWQgdGhpczpcblxuYGBgY1xuXHRcdGlmIChlcnIpIHtcblx0XHRcdGlmIChlcnIgPT0gLUVBR0FJTilcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRicmVhaztcblx0XHR9XG5gYGBcblxuQW5kIG5vdyBpdCdzIHRoaXM6XG5cbmBgYGNcblx0XHRpZiAoZXJyKSB7XG5cdFx0XHRpZiAoZXJyID09IC1FQUdBSU4pIHtcblx0XHRcdFx0ZXJyID0gMDtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHR9XG5gYGBcblxuU28gYmFzaWNhbGx5IGl0IHNlZW1zIGxpa2UgdGhleSdyZSB0cnlpbmcgdG8gcHJldmVudCBgLUVBR0FJTmAgZnJvbSBiZWluZyB0aGUgZmluYWwgZXJyb3IgY29kZSByZXR1cm5lZCBpZiB0aGUgbG9vcCBlbmRzIGFmdGVyIGhpdHRpbmcgdGhhdCBlcnJvci4gQnV0IGlzIHRoZSBleHRyYSBhc3NpZ25tZW50ICpuZWNlc3NhcnkqPyBXaGF0J3MgdGhlIGNvbnRleHQgaGVyZT8gSWYgdGhlIGxvb3AgZW5kcyB3aXRob3V0IHJlc2V0dGluZyBgZXJyYCBpbiB0aGUgbmV4dCBpdGVyYXRpb24sIGFuZCBpZiB3ZSdyZSAqbm90KiByZXNldHRpbmcgYGVycmAsIGl0IHNlZW1zIGxpa2Ugd2UgbWlnaHQgcmV0dXJuIGAtRUFHQUlOYCBlcnJvbmVvdXNseS5cblxuSSBuZWVkIHRvIHF1aWNrbHkgYW5hbHl6ZSB0aGUgYG1vdmVfcGFnZXNgIGxvb3AgbG9naWMgdG8gYmUgY2VydGFpbi4gTGV0IG1lIGRyaWxsIGRvd24gYW5kIGxvb2sgYXQgdGhlIGNvbnRyb2wgZmxvdyBpbiBtb3JlIGRldGFpbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgYXJlIHNwZWNpZmljIHNjZW5hcmlvcyB3aGVyZSBgZXJyYCBtaWdodCBiZSBsZWZ0IGFzIGAtRUFHQUlOYCBhdCB0aGUgZW5kIG9mIHRoZSBsb29wLCBvciBpZiBpdCBpcyBhbHdheXMgcmVzZXQgaW4gc3Vic2VxdWVudCBpdGVyYXRpb25zLiBUaGlzIHN1YnRsZSBjaGFuZ2UgY291bGQgaW1wYWN0IGVycm9yIGhhbmRsaW5nIHNpZ25pZmljYW50bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyNjgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTc6MTcuNzMzMDIyMzU4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI4MTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3VzZXJmYXVsdGZkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjA0MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIwNDA6XFx0XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2socHRsKTtcXG4yMDQxOlxcdFxcdFxcdFxcdFxcdHNwbGl0X2h1Z2VfcG1kKHNyY192bWEsIHNyY19wbWQsIHNyY19hZGRyKTtcXG4yMDQyOlxcdFxcdFxcdFxcdFxcdC8qIFRoZSBmb2xpbyB3aWxsIGJlIHNwbGl0IGJ5IG1vdmVfcGFnZXNfcHRlKCkgKi9cXG4yMDQzOlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjIwNDQ6XFx0XFx0XFx0XFx0fVxcbjIwNDU6XFx0XFxuMjA0NjpcXHRcXHRcXHRcXHRlcnIgPSBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKG1tLCBkc3RfcG1kLCBzcmNfcG1kLFxcbjIwNDc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBkc3RfcG1kdmFsLCBkc3Rfdm1hLCBzcmNfdm1hLFxcbjIwNDg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBkc3RfYWRkciwgc3JjX2FkZHIpO1xcbjIwNDk6XFx0XFx0XFx0XFx0c3RlcF9zaXplID0gSFBBR0VfUE1EX1NJWkU7XFxuMjA1MDpcXHRcXHRcXHR9IGVsc2Uge1xcbjIwNTE6XFx0XFx0XFx0XFx0bG9uZyByZXQ7XFxuMjA1MjpcXHRcXG4yMDUzOlxcdFxcdFxcdFxcdGlmIChwbWRfbm9uZSgqc3JjX3BtZCkpIHtcXG4yMDU0OlxcdFxcdFxcdFxcdFxcdGlmICghKG1vZGUgXFx1MDAyNiBVRkZESU9fTU9WRV9NT0RFX0FMTE9XX1NSQ19IT0xFUykpIHtcXG4yMDU1OlxcdFxcdFxcdFxcdFxcdFxcdGVyciA9IC1FTk9FTlQ7XFxuMjA1NjpcXHRcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4yMDU3OlxcdFxcdFxcdFxcdFxcdH1cXG4yMDU4OlxcdFxcdFxcdFxcdFxcdGlmICh1bmxpa2VseShfX3B0ZV9hbGxvYyhtbSwgc3JjX3BtZCkpKSB7XFxuMjA1OTpcXHRcXHRcXHRcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbjIwNjA6XFx0XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjA2MTpcXHRcXHRcXHRcXHRcXHR9XFxuMjA2MjpcXHRcXHRcXHRcXHR9XFxuMjA2MzpcXHRcXG4yMDY0OlxcdFxcdFxcdFxcdGlmICh1bmxpa2VseShwdGVfYWxsb2MobW0sIGRzdF9wbWQpKSkge1xcbjIwNjU6XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4yMDY2OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjIwNjc6XFx0XFx0XFx0XFx0fVxcbjIwNjg6XFx0XFxuMjA2OTpcXHRcXHRcXHRcXHRyZXQgPSBtb3ZlX3BhZ2VzX3B0ZXMobW0sIGRzdF9wbWQsIHNyY19wbWQsXFxuMjA3MDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBkc3Rfdm1hLCBzcmNfdm1hLCBkc3RfYWRkcixcXG4yMDcxOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHNyY19hZGRyLCBzcmNfZW5kIC0gc3JjX2FkZHIsIG1vZGUpO1xcbjIwNzI6XFx0XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMjA3MzpcXHRcXHRcXHRcXHRcXHRlcnIgPSByZXQ7XFxuMjA3NDpcXHRcXHRcXHRcXHRlbHNlXFxuMjA3NTpcXHRcXHRcXHRcXHRcXHRzdGVwX3NpemUgPSByZXQ7XFxuMjA3NjpcXHRcXHRcXHR9XFxuMjA3NzpcXHRcXG4yMDc4OlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjIwNzk6XFx0XFxuMjA4MDpcXHRcXHRcXHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcXG4yMDgxOlxcdFxcdFxcdFxcdC8qIERvIG5vdCBvdmVycmlkZSBhbiBlcnJvciAqL1xcbjIwODI6XFx0XFx0XFx0XFx0aWYgKCFlcnIgfHwgZXJyID09IC1FQUdBSU4pXFxuMjA4MzpcXHRcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVFI7XFxuMjA4NDpcXHRcXHRcXHRcXHRicmVhaztcXG4yMDg1OlxcdFxcdFxcdH1cXG4yMDg2OlxcdFxcbjIwODc6XFx0XFx0XFx0aWYgKGVycikge1xcbjIwODg6XFx0XFx0XFx0XFx0aWYgKGVyciA9PSAtRUFHQUlOKSB7XFxuMjA4OTpcXHRcXHRcXHRcXHRcXHRlcnIgPSAwO1xcbjIwOTA6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjA5MTpcXHRcXHRcXHRcXHR9XFxuMjA5MjpcXHRcXHRcXHRcXHRicmVhaztcXG4yMDkzOlxcdFxcdFxcdH1cXG4yMDk0OlxcdFxcbjIwOTU6XFx0XFx0XFx0LyogUHJvY2VlZCB0byB0aGUgbmV4dCBwYWdlICovXFxuMjA5NjpcXHRcXHRcXHRkc3RfYWRkciArPSBzdGVwX3NpemU7XFxuMjA5NzpcXHRcXHRcXHRzcmNfYWRkciArPSBzdGVwX3NpemU7XFxuMjA5ODpcXHRcXHRcXHRtb3ZlZCArPSBzdGVwX3NpemU7XFxuMjA5OTpcXHRcXHR9XFxuMjEwMDpcXHRcXG4yMTAxOlxcdG91dF91bmxvY2s6XFxuMjEwMjpcXHRcXHR1cF9yZWFkKFxcdTAwMjZjdHgtXFx1MDAzZW1hcF9jaGFuZ2luZ19sb2NrKTtcXG4yMTAzOlxcdFxcdHVmZmRfbW92ZV91bmxvY2soZHN0X3ZtYSwgc3JjX3ZtYSk7XFxuMjEwNDpcXHRvdXQ6XFxuMjEwNTpcXHRcXHRWTV9XQVJOX09OX09OQ0UobW92ZWQgXFx1MDAzYyAwKTtcXG4yMTA2OlxcdFxcdFZNX1dBUk5fT05fT05DRShlcnIgXFx1MDAzZSAwKTtcXG4yMTA3OlxcdFxcdFZNX1dBUk5fT05fT05DRSghbW92ZWQgXFx1MDAyNlxcdTAwMjYgIWVycik7XFxuMjEwODpcXHRcXHRyZXR1cm4gbW92ZWQgPyBtb3ZlZCA6IGVycjtcXG4yMTA5OlxcdH1cXG4yMTEwOlxcdFxcbjIxMTE6XFx0c3RhdGljIGJvb2wgdm1hX2Nhbl91c2VyZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXFxuMjExMjpcXHRcXHRcXHQgICAgICAgYm9vbCB3cF9hc3luYylcXG4yMTEzOlxcdHtcXG4yMTE0OlxcdFxcdGNvbnN0IHN0cnVjdCB2bV91ZmZkX29wcyAqb3BzID0gdm1hX3VmZmRfb3BzKHZtYSk7XFxuMjExNTpcXHRcXG4yMTE2OlxcdFxcdGlmICh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgKFZNX0RST1BQQUJMRSB8IFZNX1NIQURPV19TVEFDSykpXFxuMjExNzpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMjExODpcXHRcXG4yMTE5OlxcdFxcdGlmICghaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkgXFx1MDAyNlxcdTAwMjYgKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9TUEVDSUFMKSlcXG4yMTIwOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4yMTIxOlxcdFxcbjIxMjI6XFx0XFx0dm1fZmxhZ3MgXFx1MDAyNj0gX19WTV9VRkZEX0ZMQUdTO1xcbjIxMjM6XFx0XFxuMjEyNDpcXHRcXHQvKlxcbjIxMjU6XFx0XFx0ICogSWYgV1AgaXMgdGhlIG9ubHkgbW9kZSBlbmFibGVkIGFuZCBjb250ZXh0IGlzIHdwIGFzeW5jLCBhbGxvdyBhbnlcXG4yMTI2OlxcdFxcdCAqIG1lbW9yeSB0eXBlLlxcbjIxMjc6XFx0XFx0ICovXFxuMjEyODpcXHRcXHRpZiAod3BfYXN5bmMgXFx1MDAyNlxcdTAwMjYgKHZtX2ZsYWdzID09IFZNX1VGRkRfV1ApKVxcbjIxMjk6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuMjEzMDpcXHRcXG4yMTMxOlxcdFxcdC8qIEZvciBhbnkgb3RoZXIgbW9kZSByZWplY3QgVk1BcyB0aGF0IGRvbid0IGltcGxlbWVudCB2bV91ZmZkX29wcyAqL1xcbjIxMzI6XFx0XFx0aWYgKCFvcHMpXFxuMjEzMzpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMjEzNDpcXHRcXG4yMTM1OlxcdFxcdC8qXFxuMjEzNjpcXHRcXHQgKiBJZiB1c2VyIHJlcXVlc3RlZCB1ZmZkLXdwIGJ1dCBub3QgZW5hYmxlZCBwdGUgbWFya2VycyBmb3JcXG4yMTM3OlxcdFxcdCAqIHVmZmQtd3AsIHRoZW4gb25seSBhbm9ueW1vdXMgbWVtb3J5IGlzIHN1cHBvcnRlZFxcbjIxMzg6XFx0XFx0ICovXFxuMjEzOTpcXHRcXHRpZiAoIXVmZmRfc3VwcG9ydHNfd3BfbWFya2VyKCkgXFx1MDAyNlxcdTAwMjYgKHZtX2ZsYWdzIFxcdTAwMjYgVk1fVUZGRF9XUCkgXFx1MDAyNlxcdTAwMjZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTc6MTcuNzMzMjUyMjY4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA3MjY0NDczNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuKipBbmFseXppbmcgdGhlIEVycm9yIEhhbmRsaW5nIExvZ2ljKipcblxuSG1tLCBzbyBpZiB0aGUgZXJyb3IgY29kZSBpcyBgLUVBR0FJTmAsIGl0J3MgYmVpbmcgZXhwbGljaXRseSByZXNldCB0byBgMGAgYW5kIHRoZW4gdGhlIHByb2dyYW0ganVzdCBrZWVwcyBnb2luZy4gUmlnaHQuIFRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gQnV0IGlmIHRoZSBsb29wIGNvbmRpdGlvbiBpcyBtZXQgYW5kIHRoZSBsb29wIGV4aXRzIGNsZWFubHksIHRoZW4gYGVycmAgd2lsbCAqYWxzbyogYmUgYDBgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyB3b3JrcyBpbiB0aGUgY29udGV4dCBvZiB0aGUgcmVzdCBvZiB0aGUgY29kZS4gSXMgdGhhdCB0aGUgaW50ZW50aW9uLCBvciBpcyBzb21ldGhpbmcgZWxzZSBnb2luZyBvbj8gSSByZWFsbHkgbmVlZCB0byBpZGVudGlmeSB0aGF0IGxvb3AncyBjb25kaXRpb24sIHRoZSBleGl0IGNvbmRpdGlvbiBpcyBub3QgY2xlYXIuIElzIGBlcnIgPSAwYCB0aGUgbm9ybWFsIGNhc2UgdG8gYnJlYWsgdGhlIGxvb3Agb3IgYW4gZWRnZSBjYXNlPyBJJ20gbWlzc2luZyBzb21lIGNvbnRleHQgaGVyZS4gSSdtIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBpbnRvIHRoYXQgbG9vcCdzIGNvbmRpdGlvbiB0byBiZSBzdXJlIEknbSBmb2xsb3dpbmcgdGhlIGxvZ2ljIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI5MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTc6MjAuODA1ODk4OTY0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS91c2VyZmF1bHRmZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MzAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxOTMwOlxcdCAqIHZpcnR1YWwgcmVnaW9ucyB3aXRob3V0IGtub3dpbmcgaWYgdGhlcmUgYXJlIHRyYW5zcGFyZW50IGh1Z2VwYWdlXFxuMTkzMTpcXHQgKiBpbiB0aGUgcmVnaW9ucyBvciBub3QsIGJ1dCBwcmV2ZW50aW5nIHRoZSByaXNrIG9mIGhhdmluZyB0byBzcGxpdFxcbjE5MzI6XFx0ICogdGhlIGh1Z2VwbWQgZHVyaW5nIHRoZSByZW1hcC5cXG4xOTMzOlxcdCAqL1xcbjE5MzQ6XFx0c3RhdGljIHNzaXplX3QgbW92ZV9wYWdlcyhzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsIHVuc2lnbmVkIGxvbmcgZHN0X3N0YXJ0LFxcbjE5MzU6XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBzcmNfc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuLCBfX3U2NCBtb2RlKVxcbjE5MzY6XFx0e1xcbjE5Mzc6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdHgtXFx1MDAzZW1tO1xcbjE5Mzg6XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmNfdm1hLCAqZHN0X3ZtYTtcXG4xOTM5OlxcdFxcdHVuc2lnbmVkIGxvbmcgc3JjX2FkZHIsIGRzdF9hZGRyLCBzcmNfZW5kO1xcbjE5NDA6XFx0XFx0cG1kX3QgKnNyY19wbWQsICpkc3RfcG1kO1xcbjE5NDE6XFx0XFx0bG9uZyBlcnIgPSAtRUlOVkFMO1xcbjE5NDI6XFx0XFx0c3NpemVfdCBtb3ZlZCA9IDA7XFxuMTk0MzpcXHRcXG4xOTQ0OlxcdFxcdC8qIFNhbml0aXplIHRoZSBjb21tYW5kIHBhcmFtZXRlcnMuICovXFxuMTk0NTpcXHRcXHRWTV9XQVJOX09OX09OQ0Uoc3JjX3N0YXJ0IFxcdTAwMjYgflBBR0VfTUFTSyk7XFxuMTk0NjpcXHRcXHRWTV9XQVJOX09OX09OQ0UoZHN0X3N0YXJ0IFxcdTAwMjYgflBBR0VfTUFTSyk7XFxuMTk0NzpcXHRcXHRWTV9XQVJOX09OX09OQ0UobGVuIFxcdTAwMjYgflBBR0VfTUFTSyk7XFxuMTk0ODpcXHRcXG4xOTQ5OlxcdFxcdC8qIERvZXMgdGhlIGFkZHJlc3MgcmFuZ2Ugd3JhcCwgb3IgaXMgdGhlIHNwYW4gemVyby1zaXplZD8gKi9cXG4xOTUwOlxcdFxcdFZNX1dBUk5fT05fT05DRShzcmNfc3RhcnQgKyBsZW4gXFx1MDAzYyBzcmNfc3RhcnQpO1xcbjE5NTE6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKGRzdF9zdGFydCArIGxlbiBcXHUwMDNjIGRzdF9zdGFydCk7XFxuMTk1MjpcXHRcXG4xOTUzOlxcdFxcdGVyciA9IHVmZmRfbW92ZV9sb2NrKG1tLCBkc3Rfc3RhcnQsIHNyY19zdGFydCwgXFx1MDAyNmRzdF92bWEsIFxcdTAwMjZzcmNfdm1hKTtcXG4xOTU0OlxcdFxcdGlmIChlcnIpXFxuMTk1NTpcXHRcXHRcXHRnb3RvIG91dDtcXG4xOTU2OlxcdFxcbjE5NTc6XFx0XFx0LyogUmUtY2hlY2sgYWZ0ZXIgdGFraW5nIG1hcF9jaGFuZ2luZ19sb2NrICovXFxuMTk1ODpcXHRcXHRlcnIgPSAtRUFHQUlOO1xcbjE5NTk6XFx0XFx0ZG93bl9yZWFkKFxcdTAwMjZjdHgtXFx1MDAzZW1hcF9jaGFuZ2luZ19sb2NrKTtcXG4xOTYwOlxcdFxcdGlmIChsaWtlbHkoYXRvbWljX3JlYWQoXFx1MDAyNmN0eC1cXHUwMDNlbW1hcF9jaGFuZ2luZykpKVxcbjE5NjE6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjE5NjI6XFx0XFx0LypcXG4xOTYzOlxcdFxcdCAqIE1ha2Ugc3VyZSB0aGUgdm1hIGlzIG5vdCBzaGFyZWQsIHRoYXQgdGhlIHNyYyBhbmQgZHN0IHJlbWFwXFxuMTk2NDpcXHRcXHQgKiByYW5nZXMgYXJlIGJvdGggdmFsaWQgYW5kIGZ1bGx5IHdpdGhpbiBhIHNpbmdsZSBleGlzdGluZ1xcbjE5NjU6XFx0XFx0ICogdm1hLlxcbjE5NjY6XFx0XFx0ICovXFxuMTk2NzpcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjE5Njg6XFx0XFx0aWYgKHNyY192bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fU0hBUkVEKVxcbjE5Njk6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjE5NzA6XFx0XFx0aWYgKHNyY19zdGFydCArIGxlbiBcXHUwMDNlIHNyY192bWEtXFx1MDAzZXZtX2VuZClcXG4xOTcxOlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xOTcyOlxcdFxcbjE5NzM6XFx0XFx0aWYgKGRzdF92bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fU0hBUkVEKVxcbjE5NzQ6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjE5NzU6XFx0XFx0aWYgKGRzdF9zdGFydCArIGxlbiBcXHUwMDNlIGRzdF92bWEtXFx1MDAzZXZtX2VuZClcXG4xOTc2OlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xOTc3OlxcdFxcbjE5Nzg6XFx0XFx0ZXJyID0gdmFsaWRhdGVfbW92ZV9hcmVhcyhjdHgsIHNyY192bWEsIGRzdF92bWEpO1xcbjE5Nzk6XFx0XFx0aWYgKGVycilcXG4xOTgwOlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xOTgxOlxcdFxcbjE5ODI6XFx0XFx0Zm9yIChzcmNfYWRkciA9IHNyY19zdGFydCwgZHN0X2FkZHIgPSBkc3Rfc3RhcnQsIHNyY19lbmQgPSBzcmNfc3RhcnQgKyBsZW47XFxuMTk4MzpcXHRcXHQgICAgIHNyY19hZGRyIFxcdTAwM2Mgc3JjX2VuZDspIHtcXG4xOTg0OlxcdFxcdFxcdHNwaW5sb2NrX3QgKnB0bDtcXG4xOTg1OlxcdFxcdFxcdHBtZF90IGRzdF9wbWR2YWw7XFxuMTk4NjpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHN0ZXBfc2l6ZTtcXG4xOTg3OlxcdFxcbjE5ODg6XFx0XFx0XFx0LypcXG4xOTg5OlxcdFxcdFxcdCAqIEJlbG93IHdvcmtzIGJlY2F1c2UgYW5vbnltb3VzIGFyZWEgd291bGQgbm90IGhhdmUgYVxcbjE5OTA6XFx0XFx0XFx0ICogdHJhbnNwYXJlbnQgaHVnZSBQVUQuIElmIGZpbGUtYmFja2VkIHN1cHBvcnQgaXMgYWRkZWQsXFxuMTk5MTpcXHRcXHRcXHQgKiB0aGF0IGNhc2Ugd291bGQgbmVlZCB0byBiZSBoYW5kbGVkIGhlcmUuXFxuMTk5MjpcXHRcXHRcXHQgKi9cXG4xOTkzOlxcdFxcdFxcdHNyY19wbWQgPSBtbV9maW5kX3BtZChtbSwgc3JjX2FkZHIpO1xcbjE5OTQ6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFzcmNfcG1kKSkge1xcbjE5OTU6XFx0XFx0XFx0XFx0aWYgKCEobW9kZSBcXHUwMDI2IFVGRkRJT19NT1ZFX01PREVfQUxMT1dfU1JDX0hPTEVTKSkge1xcbjE5OTY6XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVOT0VOVDtcXG4xOTk3OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjE5OTg6XFx0XFx0XFx0XFx0fVxcbjE5OTk6XFx0XFx0XFx0XFx0c3JjX3BtZCA9IG1tX2FsbG9jX3BtZChtbSwgc3JjX2FkZHIpO1xcbjIwMDA6XFx0XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFzcmNfcG1kKSkge1xcbjIwMDE6XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4yMDAyOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjIwMDM6XFx0XFx0XFx0XFx0fVxcbjIwMDQ6XFx0XFx0XFx0fVxcbjIwMDU6XFx0XFx0XFx0ZHN0X3BtZCA9IG1tX2FsbG9jX3BtZChtbSwgZHN0X2FkZHIpO1xcbjIwMDY6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFkc3RfcG1kKSkge1xcbjIwMDc6XFx0XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4yMDA4OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjIwMDk6XFx0XFx0XFx0fVxcbjIwMTA6XFx0XFxuMjAxMTpcXHRcXHRcXHRkc3RfcG1kdmFsID0gcG1kcF9nZXRfbG9ja2xlc3MoZHN0X3BtZCk7XFxuMjAxMjpcXHRcXHRcXHQvKlxcbjIwMTM6XFx0XFx0XFx0ICogSWYgdGhlIGRzdF9wbWQgaXMgbWFwcGVkIGFzIFRIUCBkb24ndCBvdmVycmlkZSBpdCBhbmQganVzdFxcbjIwMTQ6XFx0XFx0XFx0ICogYmUgc3RyaWN0LiBJZiBkc3RfcG1kIGNoYW5nZXMgaW50byBUUEggYWZ0ZXIgdGhpcyBjaGVjaywgdGhlXFxuMjAxNTpcXHRcXHRcXHQgKiBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgcmV0cnlcXG4yMDE2OlxcdFxcdFxcdCAqIHdoaWxlIG1vdmVfcGFnZXNfcHRlKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgZmFpbC5cXG4yMDE3OlxcdFxcdFxcdCAqL1xcbjIwMTg6XFx0XFx0XFx0aWYgKHVubGlrZWx5KHBtZF90cmFuc19odWdlKGRzdF9wbWR2YWwpKSkge1xcbjIwMTk6XFx0XFx0XFx0XFx0ZXJyID0gLUVFWElTVDtcXG4yMDIwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjIwMjE6XFx0XFx0XFx0fVxcbjIwMjI6XFx0XFxuMjAyMzpcXHRcXHRcXHRwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHNyY19wbWQsIHNyY192bWEpO1xcbjIwMjQ6XFx0XFx0XFx0aWYgKHB0bCkge1xcbjIwMjU6XFx0XFx0XFx0XFx0LyogQ2hlY2sgaWYgd2UgY2FuIG1vdmUgdGhlIHBtZCB3aXRob3V0IHNwbGl0dGluZyBpdC4gKi9cXG4yMDI2OlxcdFxcdFxcdFxcdGlmIChtb3ZlX3NwbGl0c19odWdlX3BtZChkc3RfYWRkciwgc3JjX2FkZHIsIHNyY19zdGFydCArIGxlbikgfHxcXG4yMDI3OlxcdFxcdFxcdFxcdCAgICAhcG1kX25vbmUoZHN0X3BtZHZhbCkpIHtcXG4yMDI4OlxcdFxcdFxcdFxcdFxcdC8qIENhbiBiZSBhIG1pZ3JhdGlvbiBlbnRyeSAqL1xcbjIwMjk6XFx0XFx0XFx0XFx0XFx0aWYgKHBtZF9wcmVzZW50KCpzcmNfcG1kKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1NzoyMC44MDYxMDEyMjRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTkwODIzMjkwMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIFVzZXJmYXVsdGZkIE1vdmUgUGFnZSBMb29wKipcblxuT2theSwgc28gaGVyZSdzIHRoZSBicmVha2Rvd24gb2YgdGhpcyBjb2RlLCBhcyBJIHNlZSBpdC4gVGhlIGNvcmUgb2YgdGhlIGlzc3VlIGxpZXMgd2l0aGluIHRoaXMgbG9vcCB1c2VkIGZvciBtb3ZpbmcgcGFnZXMgYmV0d2VlbiBhZGRyZXNzIHNwYWNlcywgc3BlY2lmaWNhbGx5IHRoZSBoYW5kbGluZyBvZiBgLUVBR0FJTmAgZXJyb3JzIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGxvb3AncyBjb250cm9sIGZsb3cuXG5cblRoZSBsb29wLCBhcyBpdCBzdGFuZHMsIHVzZXMgYSBgY29udGludWVgIHN0YXRlbWVudCB0byByZXRyeSB0aGUgc2FtZSBwYWdlIG1vdmUgaWYgYW4gYC1FQUdBSU5gIGVycm9yIGlzIGVuY291bnRlcmVkLiBUaGUgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGEgbWlzc2luZyBgZXJyID0gMGAgYmVmb3JlIHRoZSBgY29udGludWVgIHdhcyB0aGUgcHJvYmxlbS4gSG93ZXZlciwgZnVydGhlciBpbnNwZWN0aW9uIHJldmVhbGVkIGEgbW9yZSBzdWJ0bGUgZmxhdy4gVGhlIHByaW1hcnkgaXNzdWUgc3RlbXMgZnJvbSB0aGUgaW50ZXJhY3Rpb24gb2YgYC1FQUdBSU5gIHdpdGggdGhlIGBtb3ZlX3BhZ2VzX3B0ZXNgIG9yIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYCBjYWxscy5cblxuVGhlIGNyaXRpY2FsIHBhdGggbG9va3MgbGlrZSB0aGlzOlxuXG4xLiAgV2UgZW50ZXIgdGhlIGxvb3AuXG4yLiAgSWYgYGVyciA9PSAtRUFHQUlOYCwgaXQgZ2V0cyBjbGVhcmVkIGFuZCB0aGUgbG9vcCBgY29udGludWVgcy5cbjMuICBUaGUgbW92ZSBvcGVyYXRpb24gKGBtb3ZlX3BhZ2VzX3B0ZXNgIG9yIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYCkgcnVucy5cbjQuICBJZiB0aGUgbW92ZSAqc3VjY2VlZHMqLCBidXQgYGVycmAgaXMgbm90IG92ZXJ3cml0dGVuIChpZiBgcmV0IFx1MDAzZT0gMGApLCB0aGVuIGBlcnJgIHN0aWxsIHJldGFpbnMgdGhlIG9sZCBgLUVBR0FJTmAgdmFsdWUuIFRoaXMgaXMgYSB2ZXJ5IHJlYWwgcGF0aC5cbjUuICBJZiB3ZSBoaXQgdGhlIGNvbmRpdGlvbmFsOiBgaWYgKGVyciA9PSAtRUFHQUlOKSBjb250aW51ZTtgLCB0aGUgaW5jcmVtZW50IG9mIGBzcmNfYWRkcmAsIGBkc3RfYWRkcmAsIGFuZCBgbW92ZWRgIGdldHMgc2tpcHBlZC5cbjYuICBUaGUgbG9vcCBnb2VzIHRvIHRoZSB0b3AsIHdoZXJlIGl0IHRyaWVzIHRvIHJlLW1vdmUgdGhlIHNhbWUsIGFscmVhZHkgbW92ZWQgcGFnZSwgbGVhZGluZyB0byBhIGxvb3AgY29uZGl0aW9uLlxuXG5UaGUgc2NlbmFyaW8gd2hlcmUgYHNwbGl0X2h1Z2VfcG1kYCByZXR1cm5zIHRydWUgcHJlc2VudHMgYW5vdGhlciByaXNrLiBJbiB0aGlzIHBhdGgsIHRoZSBsb29wIGBjb250aW51ZWBzLCBhbmQgYGVycmAgKmlzIG5vdCBvdmVyd3JpdHRlbi4qIFNvLCBpZiBgZXJyYCBoYXMgYSBwcmV2aW91cyBgLUVBR0FJTmAsIHRoaXMgd2lsbCBjb250aW51ZS5cblxuVGhlIGZpeCwgdGhlcmVmb3JlLCBpcyB0byBleHBsaWNpdGx5IHJlc2V0IGBlcnIgPSAwYCB3aGVuZXZlciBgLUVBR0FJTmAgaXMgZW5jb3VudGVyZWQgYmVmb3JlIGBjb250aW51ZWBpbmcuIFRoaXMgd2lsbCBndWFyYW50ZWUgdGhhdCBzdWNjZXNzIGluIGFuIG9wZXJhdGlvbiBvdmVyd3JpdGVzIHRoZSBlcnJvciBzdGF0ZS5cblxuVGhpcyBidWcgb3BlbnMgdXAgdGhlIHBvdGVudGlhbCBmb3I6XG5cbiogICBJbmZpbml0ZSBsb29wczogUmVwZWF0ZWRseSB0cnlpbmcgdG8gbW92ZSB0aGUgc2FtZSwgYWxyZWFkeSBtb3ZlZCBwYWdlLlxuKiAgIEluY29uc2lzdGVudCBzdGF0ZTogTW92aW5nIHBhZ2VzLCBidXQgc2tpcHBpbmcgdGhlIGluY3JlbWVudCwgbWFraW5nIGRhdGEgYmUgbG9zdCBvciBjb3JydXB0ZWQuXG5cbkZ1enppbmcgdGhpcyBhcmVhIGlzIGNyaXRpY2FsLiBXZSBzaG91bGQgZm9jdXMgc3BlY2lmaWNhbGx5IG9uIHRlc3RpbmcgdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIGBtb3ZlX3BhZ2VzYCwgYHVzZXJmYXVsdGZkX21vdmVgLCBgbW92ZV9wYWdlc19wdGVzYCwgYW5kIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYCB1bmRlciB2YXJpb3VzIGVycm9yIGNvbmRpdGlvbnMsIGFuZCBlbnN1cmUgdGhlIGxvb3AgY29udHJvbCB3b3JrcyBhcyBleHBlY3RlZC4gSSdtIHF1aXRlIGNlcnRhaW4gdGhlcmUncyBhIGZ1bmN0aW9uYWwgYnVnIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNDMsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDc2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTc6MzkuODg4NDMzMjEyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODc0Mzc3MjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBVU0VSRkFVTFRGRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMzg0PWNvbmZpZyBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1JcXG4tLVxcbm1tL0tjb25maWctMTM4OC1cXG5tbS9LY29uZmlnOjEzODk6bWVudWNvbmZpZyBVU0VSRkFVTFRGRFxcbm1tL0tjb25maWctMTM5MC1cXHRib29sIFxcXCJFbmFibGUgdXNlcmZhdWx0ZmQoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTc6NDEuNzYyODE2MTUxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMjc3NzkwMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgS2NvbmZpZyBGaWxlKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGBtbS9LY29uZmlnYCBmaWxlIGFnYWluLiBMZXQncyBnZXQgcmlnaHQgZG93biB0byBpdC4gSSB3YW50IHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IHNlY3Rpb24sIHNvIEknbSBnb2luZyB0byBqdW1wIHRvIGxpbmUgMTM4OS4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlIG1lYXQgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb25zIGFyZSBkZWZpbmVkLiBJIGV4cGVjdCB0byBzZWUgdGhlIHVzdWFsIHN1c3BlY3RzIHRoZXJlOiBvcHRpb25zIHJlbGF0ZWQgdG8gTlVNQSwgc3dhcHBpbmcsIHBhZ2UgYWxsb2NhdGlvbiwgb3IgcGVyaGFwcyBzb21ldGhpbmcgbmV3IHRoZXkndmUgc251Y2sgaW4uLi4gSXQncyBhbGwgYWJvdXQgaG93IHRoZXNlIHNldHRpbmdzIGluZmx1ZW5jZSB0aGUga2VybmVsJ3MgbWVtb3J5IGJlaGF2aW9yLCBhbmQgSSBuZWVkIHRvIGtlZXAgdXAgd2l0aCB0aGUgaW50cmljYWNpZXMgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3VyLiBMZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDEyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTc6NDQuNzkwNTk4ODYxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzODAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzODA6XFx0XFx0Ym9vbFxcbjEzODE6XFx0XFx0aGVscFxcbjEzODI6XFx0XFx0ICBBcmNoIGhhcyB1c2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIHN1cHBvcnRcXG4xMzgzOlxcdFxcbjEzODQ6XFx0Y29uZmlnIEhBVkVfQVJDSF9VU0VSRkFVTFRGRF9NSU5PUlxcbjEzODU6XFx0XFx0Ym9vbFxcbjEzODY6XFx0XFx0aGVscFxcbjEzODc6XFx0XFx0ICBBcmNoIGhhcyB1c2VyZmF1bHRmZCBtaW5vciBmYXVsdCBzdXBwb3J0XFxuMTM4ODpcXHRcXG4xMzg5OlxcdG1lbnVjb25maWcgVVNFUkZBVUxURkRcXG4xMzkwOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSB1c2VyZmF1bHRmZCgpIHN5c3RlbSBjYWxsXFxcIlxcbjEzOTE6XFx0XFx0ZGVwZW5kcyBvbiBNTVVcXG4xMzkyOlxcdFxcdGhlbHBcXG4xMzkzOlxcdFxcdCAgRW5hYmxlIHRoZSB1c2VyZmF1bHRmZCgpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIGludGVyY2VwdCBhbmRcXG4xMzk0OlxcdFxcdCAgaGFuZGxlIHBhZ2UgZmF1bHRzIGluIHVzZXJsYW5kLlxcbjEzOTU6XFx0XFxuMTM5NjpcXHRpZiBVU0VSRkFVTFRGRFxcbjEzOTc6XFx0Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxcbjEzOTg6XFx0XFx0Ym9vbCBcXFwiVXNlcmZhdWx0ZmQgd3JpdGUgcHJvdGVjdGlvbiBzdXBwb3J0IGZvciBzaG1lbS9odWdldGxiZnNcXFwiXFxuMTM5OTpcXHRcXHRkZWZhdWx0IHlcXG4xNDAwOlxcdFxcdGRlcGVuZHMgb24gSEFWRV9BUkNIX1VTRVJGQVVMVEZEX1dQXFxuMTQwMTpcXHRcXG4xNDAyOlxcdFxcdGhlbHBcXG4xNDAzOlxcdFxcdCAgQWxsb3dzIHRvIGNyZWF0ZSBtYXJrZXIgUFRFcyBmb3IgdXNlcmZhdWx0ZmQgd3JpdGUgcHJvdGVjdGlvblxcbjE0MDQ6XFx0XFx0ICBwdXJwb3Nlcy4gIEl0IGlzIHJlcXVpcmVkIHRvIGVuYWJsZSB1c2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIG9uXFxuMTQwNTpcXHRcXHQgIGZpbGUtYmFja2VkIG1lbW9yeSB0eXBlcyBsaWtlIHNobWVtIGFuZCBodWdldGxiZnMuXFxuMTQwNjpcXHRlbmRpZiAjIFVTRVJGQVVMVEZEXFxuMTQwNzpcXHRcXG4xNDA4OlxcdCMgbXVsdGktZ2VuIExSVSB7XFxuMTQwOTpcXHRjb25maWcgTFJVX0dFTlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1Nzo0NC43OTA3MjY0NTFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgzOTU5MDU4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBVU0VSRkFVTFRGRGAgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgVVNFUkZBVUxURkRgIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgZm9jdXMgaXMgZGVmaW5pdGVseSBnb2luZyB0byBiZSBvbiB0aGUgY29yZSBmdW5jdGlvbnM6IGBtb3ZlX3BhZ2VzYCwgYHVzZXJmYXVsdGZkX21vdmVgLCBgbW92ZV9wYWdlc19wdGVzYCwgYW5kIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYC4gV2FpdCBhIG1pbnV0ZS4uLiBJIHNlZW0gdG8gcmVjYWxsIGBtb3ZlX3BhZ2VzYCBiZWluZyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gTGV0J3MganVzdCBjb25maXJtIHRoYXQuLi4gWWVwLCB0aGVyZSBpdCBpczogYHN0YXRpYyBzc2l6ZV90IG1vdmVfcGFnZXMoLi4uKWAuIE9rYXksIHRoYXQncyBub3QgdW5leHBlY3RlZC4gQW5kLCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgYHVzZXJmYXVsdGZkX21vdmVgIOKAkyBZdXAsIHN0YXRpYyB0b28uIE9rYXksIGxldCdzIGxvb2sgYXQgYHVzZXJmYXVsdGZkX2lvY3RsYCwganVzdCB0byByb3VuZCBvdXQgdGhhdCB2aWV3IG9mIHRoZSBjb3JlIGZ1bmN0aW9ucy4uLiBzdGF0aWMgYWdhaW4uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBub24tc3RhdGljIGVudHJ5IHBvaW50cywgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSB0aGUgcHVibGljIGludGVyZmFjZS4gQWgsIGBzeXNfdXNlcmZhdWx0ZmRgLi4uIHRoYXQncyB0aGUgb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTYyOCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjU3OjQ4LjYzMDMxOTgxM1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM1MTMwNjQxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJTWVNDQUxMX0RFRklORS4qdXNlcmZhdWx0ZmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3VzZXJmYXVsdGZkLmM9NDQ4Mz1zdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfc3lzY2FsbF9hbGxvd2VkKGludCBmbGFncylcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtNDQ5OS1cXG5tbS91c2VyZmF1bHRmZC5jOjQ1MDA6U1lTQ0FMTF9ERUZJTkUxKHVzZXJmYXVsdGZkLCBpbnQsIGZsYWdzKVxcbm1tL3VzZXJmYXVsdGZkLmMtNDUwMS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjU3OjUwLjk4MTYzODAxNFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzE0NTIwMjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIGB1c2VyZmF1bHRmZGAgTWVjaGFuaXNtKipcblxuQWxyaWdodCwgc28gd2UncmUgZGVhbGluZyB3aXRoIGB1c2VyZmF1bHRmZGAgaGVyZSwgYSBwcmV0dHkgaW50ZXJlc3Rpbmcgc3lzdGVtIGNhbGwuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgZmlsZSBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgdGhlIGB1c2VyZmF1bHRmZF9pb2N0bGAgY2FsbC4gVGhhdCdzIHdoZXJlIHRoZSByZWFsIG1hZ2ljIGhhcHBlbnMsIHJpZ2h0PyBJJ20gZ29pbmcgdG8gcXVpY2tseSByZWZlcmVuY2UgdGhlIGB1c2VyZmF1bHRmZF9mb3BzYCBzdHJ1Y3R1cmUgdG8gcmVtaW5kIG15c2VsZiBvZiB0aGUgc3VwcG9ydGVkIGNvbW1hbmRzIGFuZCBob3cgdGhpcyBhbGwgZml0cyB0b2dldGhlciBhdCB0aGUgZmlsZSBvcGVyYXRpb24gbGF5ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDk5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTc6NTMuNjk2MTYxMTY3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODUxNDk3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyZmF1bHRmZF9mb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3VzZXJmYXVsdGZkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdXNlcmZhdWx0ZmQuYz0zMjU0PXN0YXRpYyBfX3BvbGxfdCB1c2VyZmF1bHRmZF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KVxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0zMjg5LVxcbm1tL3VzZXJmYXVsdGZkLmM6MzI5MDpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1c2VyZmF1bHRmZF9mb3BzO1xcbm1tL3VzZXJmYXVsdGZkLmMtMzI5MS1cXG5tbS91c2VyZmF1bHRmZC5jPTMyOTI9c3RhdGljIGludCByZXNvbHZlX3VzZXJmYXVsdF9mb3JrKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKm5ldyxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMzI5Ny1cXG5tbS91c2VyZmF1bHRmZC5jOjMyOTg6XFx0ZmQgPSBhbm9uX2lub2RlX2NyZWF0ZV9nZXRmZChcXFwiW3VzZXJmYXVsdGZkXVxcXCIsIFxcdTAwMjZ1c2VyZmF1bHRmZF9mb3BzLCBuZXcsXFxubW0vdXNlcmZhdWx0ZmQuYy0zMjk5LVxcdFxcdFxcdE9fUkRPTkxZIHwgKG5ldy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBVRkZEX1NIQVJFRF9GQ05UTF9GTEFHUyksIGlub2RlKTtcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmM9NDM5NT1zdGF0aWMgdm9pZCB1c2VyZmF1bHRmZF9zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmKVxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy00NDIxLVxcbm1tL3VzZXJmYXVsdGZkLmM6NDQyMjpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1c2VyZmF1bHRmZF9mb3BzID0ge1xcbm1tL3VzZXJmYXVsdGZkLmMtNDQyMy0jaWZkZWYgQ09ORklHX1BST0NfRlNcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmM9NDQ0NT1zdGF0aWMgaW50IG5ld191c2VyZmF1bHRmZChpbnQgZmxhZ3MpXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTQ0NjktXFx0RkRfUFJFUEFSRShmZGYsIGZsYWdzIFxcdTAwMjYgVUZGRF9TSEFSRURfRkNOVExfRkxBR1MsXFxubW0vdXNlcmZhdWx0ZmQuYzo0NDcwOlxcdFxcdCAgIGFub25faW5vZGVfY3JlYXRlX2dldGZpbGUoXFxcIlt1c2VyZmF1bHRmZF1cXFwiLCBcXHUwMDI2dXNlcmZhdWx0ZmRfZm9wcywgY3R4LFxcbm1tL3VzZXJmYXVsdGZkLmMtNDQ3MS1cXHRcXHRcXHRcXHRcXHQgICAgIE9fUkRPTkxZIHwgKGZsYWdzIFxcdTAwMjYgVUZGRF9TSEFSRURfRkNOVExfRkxBR1MpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1Nzo1My43NDQ2NzkxMjFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg4NTE2MTUxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDb25zaWRlcmluZyB0aGUgS2VybmVsIEFQSSBFbnRyeXBvaW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0aGUgY29yZSBpb2N0bCBmdW5jdGlvbiBzZWVtcyB0byBiZSBgdXNlcmZhdWx0ZmRfaW9jdGxgLiBCdXQgaGFuZyBvbiwgdGhlIHByb21wdCBzcGVjaWZpY2FsbHkgc2F5cyB0byBwcmVmZXIgKm5vbi1zdGF0aWMqLCAqbm9uLWlubGluZWQqIGVudHJ5IHBvaW50cyBvdmVyIGludGVybmFsIGhlbHBlcnMuIEluaXRpYWxseSwgSSB3YXMgdGhpbmtpbmcgdG8gZXhjbHVkZSBgdXNlcmZhdWx0ZmRfaW9jdGxgIGlmIGl0J3Mgc3RhdGljLCBzaW5jZSB0aGUgY29tcGlsZXIgd291bGQgbGlrZWx5IGlubGluZSBpdCwgbGVhZGluZyB0byBubyBkaXN0aW5jdCBzeW1ib2wuIEJ1dCB0aGVuIHRoZSBwcm9tcHQgZW1waGFzaXplcyBcIlByZWZlciBub24tc3RhdGljLFwiIHNvIEkgbmVlZCB0byBjaGVjay4gRXZlbiBpZiBpdCAqaXMqIHN0YXRpYywgYnV0IGlzIGFuIGVudHJ5IHBvaW50LCBJIHNob3VsZCBpbmNsdWRlIGl0IGlmIGl0J3MgdGhlIG1vcmUgY29ycmVjdCBvcHRpb24uXG5cblRoZSBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCBpZiBgdXNlcmZhdWx0ZmRfaW9jdGxgIGlzIGV4cG9ydGVkIGFzIGEgc3ltYm9sIG9yIGlmIGl0J3Mgb25seSBjYWxsZWQgd2l0aGluIGB1c2VyZmF1bHRmZF9mb3BzYC4gQWgsIHJpZ2h0LCBpdCdzIHVzZWQgd2l0aGluIGB1c2VyZmF1bHRmZF9mb3BzYC4gT2theSwgc28gd2hhdCBhYm91dCB0aGUgc3lzdGVtIGNhbGwgZW50cnkgcG9pbnQ/IFRoYXQgd291bGQgYmUgYHN5c191c2VyZmF1bHRmZGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGFwcHJvYWNoIGlzIGJlc3QgaGVyZSBnaXZlbiB0aGUgY29uc3RyYWludHMuIExldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgbm9uLXN0YXRpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3NjQsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTc6NTguNjI5ODQzMjg5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTUyMTQ4Mjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzZXJmYXVsdGZkX21vdmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3VzZXJmYXVsdGZkLmM9NDIwNz1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB1ZmZkX2N0eF9mZWF0dXJlcyhfX3U2NCB1c2VyX2ZlYXR1cmVzKVxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy00MjE1LVxcbm1tL3VzZXJmYXVsdGZkLmM6NDIxNjpzdGF0aWMgaW50IHVzZXJmYXVsdGZkX21vdmUoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LFxcbm1tL3VzZXJmYXVsdGZkLmMtNDIxNy1cXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jPTQzNTA9c3RhdGljIGxvbmcgdXNlcmZhdWx0ZmRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGNtZCxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtNDM3OC1cXHRjYXNlIFVGRkRJT19NT1ZFOlxcbm1tL3VzZXJmYXVsdGZkLmM6NDM3OTpcXHRcXHRyZXQgPSB1c2VyZmF1bHRmZF9tb3ZlKGN0eCwgYXJnKTtcXG5tbS91c2VyZmF1bHRmZC5jLTQzODAtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjU4OjAxLjc4MTk5NzE4M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDQyNjA4MjA1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEF0dGFjayBQbGFuKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRvIGFwcHJvYWNoIHRoaXMuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBxdWlja2x5IHplcm8gaW4gb24gYHVzZXJmYXVsdGZkX2lvY3RsYC4gVGhhdCBzZWVtcyBsaWtlIGEgcHJpbWUgdGFyZ2V0IGJlY2F1c2UgaXQncyB0aGUgaW9jdGwgaGFuZGxlciwgd2hpY2ggbWVhbnMgaXQncyB0aGUgZW50cnkgcG9pbnQuIFdhaXQsIEkgc2hvdWxkIGRvdWJsZS1jaGVjazogYHN5c191c2VyZmF1bHRmZGAgaXMgdGhlIGFjdHVhbCBzeXNjYWxsIGZ1bmN0aW9uLiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhlIHJlbGF0ZWQgY29kZSwganVzdCB0byBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIGFueXRoaW5nIG9idmlvdXMuXG5cbkFscmlnaHQsIGxldCdzIGp1c3QgZ28gYmFjayBhbmQgY2hlY2sgYG1vdmVfcGFnZXNgIGFnYWluLiBZZWFoLCB0aGF0J3Mgc3RhdGljLCBzbyBpdCdzIG5vdCBhIGRpcmVjdCBlbnRyeSBwb2ludC4gSSdsbCBkZWZpbml0ZWx5IGtlZXAgYHVzZXJmYXVsdGZkX2lvY3RsYCBhbmQgYHN5c191c2VyZmF1bHRmZGAgb24gdGhlIGxpc3QuIFdhaXQsIEkgcHJvYmFibHkgZG9uJ3QgbmVlZCBgc3lzX3VzZXJmYXVsdGZkYCwgdGhhdCB3aWxsIGJlIGp1c3QgYWxpYXNlZCBhcyBgX194NjRfc3lzX3VzZXJmYXVsdGZkYCBvciBzb21ldGhpbmcgc2ltaWxhciwgc28gYHVzZXJmYXVsdGZkX2lvY3RsYCBpcyBmaW5lLlxuXG5Ob3csIGxldCBtZSBicm9hZGVuIG15IHNjb3BlIGEgYml0LiBBcmUgdGhlcmUgYW55IHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHRoYXQgZW5hYmxlIGl0PyBMZXQncyBzZWUuLi4gYFVTRVJGQVVMVEZEYCBzZWVtcyBsaWtlIHRoZSBrZXkgY29uZmlndXJhdGlvbi4gQnV0IGlzIHRoZXJlIGFueXRoaW5nIGVsc2UgYXNzb2NpYXRlZCB3aXRoIGBVRkZESU9fTU9WRWA/IFRoYXQncyB3aGF0IEkgcmVhbGx5IG5lZWQgdG8gZHJpbGwgZG93biBvbiB0byBzZWUgd2hhdCBrbm9icyBhcmUgYXZhaWxhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQzOSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1OTowNi4yMDgwODM0NjVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyNzI3MDA4MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVUZGRElPX01PVkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvdWFwaS9saW51eC91c2VyZmF1bHRmZC5oLTUzLVxcdCAoX191NjQpMSBcXHUwMDNjXFx1MDAzYyBfVUZGRElPX1pFUk9QQUdFIHxcXHRcXHRcXFxcXFxuaW5jbHVkZS91YXBpL2xpbnV4L3VzZXJmYXVsdGZkLmg6NTQ6XFx0IChfX3U2NCkxIFxcdTAwM2NcXHUwMDNjIF9VRkZESU9fTU9WRSB8XFx0XFx0XFxcXFxcbmluY2x1ZGUvdWFwaS9saW51eC91c2VyZmF1bHRmZC5oLTU1LVxcdCAoX191NjQpMSBcXHUwMDNjXFx1MDAzYyBfVUZGRElPX1dSSVRFUFJPVEVDVCB8XFx0XFxcXFxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3VzZXJmYXVsdGZkLmgtNzctI2RlZmluZSBfVUZGRElPX1pFUk9QQUdFXFx0XFx0KDB4MDQpXFxuaW5jbHVkZS91YXBpL2xpbnV4L3VzZXJmYXVsdGZkLmg6Nzg6I2RlZmluZSBfVUZGRElPX01PVkVcXHRcXHRcXHQoMHgwNSlcXG5pbmNsdWRlL3VhcGkvbGludXgvdXNlcmZhdWx0ZmQuaC03OS0jZGVmaW5lIF9VRkZESU9fV1JJVEVQUk9URUNUXFx0XFx0KDB4MDYpXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvdXNlcmZhdWx0ZmQuaC05Ny1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdWZmZGlvX3plcm9wYWdlKVxcbmluY2x1ZGUvdWFwaS9saW51eC91c2VyZmF1bHRmZC5oOjk4OiNkZWZpbmUgVUZGRElPX01PVkVcXHRcXHRfSU9XUihVRkZESU8sIF9VRkZESU9fTU9WRSxcXHRcXFxcXFxuaW5jbHVkZS91YXBpL2xpbnV4L3VzZXJmYXVsdGZkLmgtOTktXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHVmZmRpb19tb3ZlKVxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3VzZXJmYXVsdGZkLmg9MzU5PXN0cnVjdCB1ZmZkaW9fbW92ZSB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvdXNlcmZhdWx0ZmQuaC0zNjYtXFx0ICovXFxuaW5jbHVkZS91YXBpL2xpbnV4L3VzZXJmYXVsdGZkLmg6MzY3OiNkZWZpbmUgVUZGRElPX01PVkVfTU9ERV9ET05UV0FLRVxcdFxcdCgoX191NjQpMVxcdTAwM2NcXHUwMDNjMClcXG5pbmNsdWRlL3VhcGkvbGludXgvdXNlcmZhdWx0ZmQuaDozNjg6I2RlZmluZSBVRkZESU9fTU9WRV9NT0RFX0FMTE9XX1NSQ19IT0xFU1xcdCgoX191NjQpMVxcdTAwM2NcXHUwMDNjMSlcXG5pbmNsdWRlL3VhcGkvbGludXgvdXNlcmZhdWx0ZmQuaC0zNjktXFx0X191NjQgbW9kZTtcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0xMjc4PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2h1Z2VfcGFnZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydF9hZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTEzMzUtXFx0ICpcXG5tbS9raHVnZXBhZ2VkLmM6MTMzNjpcXHQgKiBVRkZESU9fTU9WRSBpcyBwcmV2ZW50ZWQgdG8gcmFjZSBhcyB3ZWxsIHRoYW5rcyB0byB0aGVcXG5tbS9raHVnZXBhZ2VkLmMtMTMzNy1cXHQgKiBtbWFwX2xvY2suXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jPTE0MTU9c3RhdGljIGxvbmcgbW92ZV9wYWdlc19wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWQsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTE0ODktXFx0aWYgKHB0ZV9ub25lKG9yaWdfc3JjX3B0ZSkpIHtcXG5tbS91c2VyZmF1bHRmZC5jOjE0OTA6XFx0XFx0aWYgKCEobW9kZSBcXHUwMDI2IFVGRkRJT19NT1ZFX01PREVfQUxMT1dfU1JDX0hPTEVTKSlcXG5tbS91c2VyZmF1bHRmZC5jLTE0OTEtXFx0XFx0XFx0cmV0ID0gLUVOT0VOVDtcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmM9MTg1OT1zdGF0aWMgdm9pZCB1ZmZkX21vdmVfdW5sb2NrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMTkyNC0gKlxcbm1tL3VzZXJmYXVsdGZkLmM6MTkyNTogKiBUaGUgVUZGRElPX01PVkVfTU9ERV9BTExPV19TUkNfSE9MRVMgZmxhZyBjYW4gYmUgc3BlY2lmaWVkIHRvXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTI2LSAqIHByZXZlbnQgLUVOT0VOVCBlcnJvcnMgdG8gbWF0ZXJpYWxpemUgaWYgdGhlcmUgYXJlIGhvbGVzIGluIHRoZVxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYz0xOTM0PXN0YXRpYyBzc2l6ZV90IG1vdmVfcGFnZXMoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LCB1bnNpZ25lZCBsb25nIGRzdF9zdGFydCxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMTk5NC1cXHRcXHRpZiAodW5saWtlbHkoIXNyY19wbWQpKSB7XFxubW0vdXNlcmZhdWx0ZmQuYzoxOTk1OlxcdFxcdFxcdGlmICghKG1vZGUgXFx1MDAyNiBVRkZESU9fTU9WRV9NT0RFX0FMTE9XX1NSQ19IT0xFUykpIHtcXG5tbS91c2VyZmF1bHRmZC5jLTE5OTYtXFx0XFx0XFx0XFx0ZXJyID0gLUVOT0VOVDtcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMjA1My1cXHRcXHRcXHRpZiAocG1kX25vbmUoKnNyY19wbWQpKSB7XFxubW0vdXNlcmZhdWx0ZmQuYzoyMDU0OlxcdFxcdFxcdFxcdGlmICghKG1vZGUgXFx1MDAyNiBVRkZESU9fTU9WRV9NT0RFX0FMTE9XX1NSQ19IT0xFUykpIHtcXG5tbS91c2VyZmF1bHRmZC5jLTIwNTUtXFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVOT0VOVDtcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmM9NDIxNj1zdGF0aWMgaW50IHVzZXJmYXVsdGZkX21vdmUoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy00MjUwLVxcbm1tL3VzZXJmYXVsdGZkLmM6NDI1MTpcXHRpZiAodWZmZGlvX21vdmUubW9kZSBcXHUwMDI2IH4oVUZGRElPX01PVkVfTU9ERV9BTExPV19TUkNfSE9MRVN8XFxubW0vdXNlcmZhdWx0ZmQuYzo0MjUyOlxcdFxcdFxcdFxcdCBVRkZESU9fTU9WRV9NT0RFX0RPTlRXQUtFKSlcXG5tbS91c2VyZmF1bHRmZC5jLTQyNTMtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTQyNzAtXFx0cmFuZ2UubGVuID0gcmV0O1xcbm1tL3VzZXJmYXVsdGZkLmM6NDI3MTpcXHRpZiAoISh1ZmZkaW9fbW92ZS5tb2RlIFxcdTAwMjYgVUZGRElPX01PVkVfTU9ERV9ET05UV0FLRSkpIHtcXG5tbS91c2VyZmF1bHRmZC5jLTQyNzItXFx0XFx0cmFuZ2Uuc3RhcnQgPSB1ZmZkaW9fbW92ZS5kc3Q7XFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jPTQzNTA9c3RhdGljIGxvbmcgdXNlcmZhdWx0ZmRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGNtZCxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtNDM3Ny1cXHRcXHRicmVhaztcXG5tbS91c2VyZmF1bHRmZC5jOjQzNzg6XFx0Y2FzZSBVRkZESU9fTU9WRTpcXG5tbS91c2VyZmF1bHRmZC5jLTQzNzktXFx0XFx0cmV0ID0gdXNlcmZhdWx0ZmRfbW92ZShjdHgsIGFyZyk7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvdXNlcmZhdWx0ZmQuaC01My1cXHQgKF9fdTY0KTEgXFx1MDAzY1xcdTAwM2MgX1VGRkRJT19aRVJPUEFHRSB8XFx0XFx0XFxcXFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC91c2VyZmF1bHRmZC5oOjU0OlxcdCAoX191NjQpMSBcXHUwMDNjXFx1MDAzYyBfVUZGRElPX01PVkUgfFxcdFxcdFxcXFxcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvdXNlcmZhdWx0ZmQuaC01NS1cXHQgKF9fdTY0KTEgXFx1MDAzY1xcdTAwM2MgX1VGRkRJT19XUklURVBST1RFQ1QgfFxcdFxcXFxcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC91c2VyZmF1bHRmZC5oLTc3LSNkZWZpbmUgX1VGRkRJT19aRVJPUEFHRVxcdFxcdCgweDA0KVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC91c2VyZmF1bHRmZC5oOjc4OiNkZWZpbmUgX1VGRkRJT19NT1ZFXFx0XFx0XFx0KDB4MDUpXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3VzZXJmYXVsdGZkLmgtNzktI2RlZmluZSBfVUZGRElPX1dSSVRFUFJPVEVDVFxcdFxcdCgweDA2KVxcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3VzZXJmYXVsdGZkLmgtOTctXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHVmZmRpb196ZXJvcGFnZSlcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvdXNlcmZhdWx0ZmQuaDo5ODojZGVmaW5lIFVGRkRJT19NT1ZFXFx0XFx0X0lPV1IoVUZGRElPLCBfVUZGRElPX01PVkUsXFx0XFxcXFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC91c2VyZmF1bHRmZC5oLTk5LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB1ZmZkaW9fbW92ZSlcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC91c2VyZmF1bHRmZC5oPTM1OT1zdHJ1Y3QgdWZmZGlvX21vdmUge1xcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3VzZXJmYXVsdGZkLmgtMzY2LVxcdCAqL1xcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC91c2VyZmF1bHRmZC5oOjM2NzojZGVmaW5lIFVGRkRJT19NT1ZFX01PREVfRE9OVFdBS0VcXHRcXHQoKF9fdTY0KTFcXHUwMDNjXFx1MDAzYzApXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3VzZXJmYXVsdGZkLmg6MzY4OiNkZWZpbmUgVUZGRElPX01PVkVfTU9ERV9BTExPV19TUkNfSE9MRVNcXHQoKF9fdTY0KTFcXHUwMDNjXFx1MDAzYzEpXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3VzZXJmYXVsdGZkLmgtMzY5LVxcdF9fdTY0IG1vZGU7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jPTY2ND1pbnQgbW92ZV9wYWdlKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgbGVuKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uYy02NzItXFx0dWZmZGlvX21vdmUubGVuID0gbGVuO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmM6NjczOlxcdHVmZmRpb19tb3ZlLm1vZGUgPSBVRkZESU9fTU9WRV9NT0RFX0FMTE9XX1NSQ19IT0xFUztcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jLTY3NC1cXHR1ZmZkaW9fbW92ZS5tb3ZlID0gMDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jOjY3NTpcXHRpZiAoaW9jdGwoZ29wdHMtXFx1MDAzZXVmZmQsIFVGRkRJT19NT1ZFLCBcXHUwMDI2dWZmZGlvX21vdmUpKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uYy02NzYtXFx0XFx0LyogcmVhbCByZXR2YWwgaW4gdWZmZGlvX21vdmUubW92ZSAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmMtNjc3LVxcdFxcdGlmICh1ZmZkaW9fbW92ZS5tb3ZlICE9IC1FRVhJU1QpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uYzo2Nzg6XFx0XFx0XFx0ZXJyKFxcXCJVRkZESU9fTU9WRSBlcnJvcjogJVxcXCJQUklkNjQsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uYy02NzktXFx0XFx0XFx0ICAgIChpbnQ2NF90KXVmZmRpb19tb3ZlLm1vdmUpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uYy02ODEtXFx0fSBlbHNlIGlmICh1ZmZkaW9fbW92ZS5tb3ZlICE9IGxlbikge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmM6NjgyOlxcdFxcdGVycihcXFwiVUZGRElPX01PVkUgZXJyb3I6ICVcXFwiUFJJZDY0LCAoaW50NjRfdCl1ZmZkaW9fbW92ZS5tb3ZlKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jLTY4My1cXHR9IGVsc2VcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jPTEyNjI9REVGSU5FX01NQVBfQ0hBTkdJTkdfVEVTVChjb3B5LCBVRkZESU9fQ09QWSwgY29weSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYzoxMjYzOkRFRklORV9NTUFQX0NIQU5HSU5HX1RFU1QobW92ZSwgVUZGRElPX01PVkUsIG1vdmUpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmMtMTI2NC1ERUZJTkVfTU1BUF9DSEFOR0lOR19URVNUKHBvaXNvbiwgVUZGRElPX1BPSVNPTiwgdXBkYXRlZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jPTE0OTk9dWZmZF90ZXN0X2Nhc2VfdCB1ZmZkX3Rlc3RzW10gPSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYy0xNjUzLVxcdFxcdCAqIGFsbW9zdCBhbHdheXMgYXZhaWxhYmxlICh1bmxpa2UgaHVnZXRsYikuICBIZXJlIHdlXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmM6MTY1NDpcXHRcXHQgKiBhYnVzZWQgU0hNRU0gZm9yIFVGRkRJT19NT1ZFLCBidXQgdGhlIHRlc3Qgd2Ugd2FudCB0b1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jLTE2NTUtXFx0XFx0ICogY292ZXIgZG9lc24ndCB5ZXQgbmVlZCB0aGUgY29ycmVjdCBtZW1vcnkgdHlwZS4uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjU5OjA5LjQ4MDc5MTc1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2ODUxMjczMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBGb2N1czogVUZGRElPX01PVkUgYW5kIFVzZXJmYXVsdGZkKipcblxuT2theSwgc28gSSdtIGRyaWxsaW5nIGRvd24gaW50byBob3cgYFVGRkRJT19NT1ZFYCB3b3Jrcy4gUmlnaHQsIHNvIGBVRkZESU9fTU9WRWAgaXMgdGhlIHNwZWNpZmljIGlvY3RsIGNvbW1hbmQgSSdtIGludGVyZXN0ZWQgaW4uIEkgd2FzIGluaXRpYWxseSBhIGJpdCBmdXp6eSBvbiB3aGV0aGVyIGB1c2VyZmF1bHRmZF9pb2N0bGAgd2FzIHN0YXRpYyBvciBub3Qg4oCTIGJ1dCB0aGF0J3Mgc3RhdGljLCByaWdodD8gWWVzLCBjb25maXJtZWQsIGl0J3Mgc3RhdGljLlxuXG5Ob3csIGxldCdzIHNlZS4gYHN5c191c2VyZmF1bHRmZGAgaXMgdGhlIGFjdHVhbCBzeXN0ZW0gY2FsbCB0aGF0ICpjcmVhdGVzKiB0aGUgZmlsZSBkZXNjcmlwdG9yIGZvciBhbGwgdGhpcywgYnV0IHRoZSBgaW9jdGxgICptZXRob2QqIHRvIGV4ZWN1dGUgYFVGRkRJT19NT1ZFYCBpcyBoYW5kbGVkIGJ5IGB1c2VyZmF1bHRmZF9pb2N0bGAuIFNvIHRoZSBjcml0aWNhbCBpbnRlcmZhY2UgcG9pbnQgZm9yIGBVRkZESU9fTU9WRWAgaXMgdGhpcyBgaW9jdGxgIGhhbmRsZXI6IGB1c2VyZmF1bHRmZF9pb2N0bGAuXG5cbk9rYXksIEkgd2FzIHRoaW5raW5nIGFib3V0IGFkZGluZyBib3RoIGB1c2VyZmF1bHRmZF9pb2N0bGAgKmFuZCogYHN5c191c2VyZmF1bHRmZGAgdG8gdGhlIHN5bWJvbCBsaXN0LiBXYWl0LCBubywgYHN5c191c2VyZmF1bHRmZGAganVzdCBjcmVhdGVzIHRoZSBmZCEgSXQgZG9lc24ndCBhY3R1YWxseSBoYW5kbGUgdGhlIGlvY3RsLiBUaGUgKnJlYWwqIGhhbmRsZXIgZm9yIHRoZSBgaW9jdGxgIGlzIGRlZmluaXRlbHkgYHVzZXJmYXVsdGZkX2lvY3RsYC4gT2theSwgc28gd2hpbGUgYHVzZXJmYXVsdGZkX2lvY3RsYCBpcyBzdGF0aWMsIGJlY2F1c2UgaXQncyB0aGUgbWFpbiBmdW5jdGlvbiBJIHNob3VsZCBpbmNsdWRlIGl0LiBObyB3YWl0LCBpcyB0aGVyZSBhIG1vcmUgZ2VuZXJhbCBgc3lzX2lvY3RsYCB0byBpbmNsdWRlPyBUb28gZ2VuZXJpYy4uLlxuXG5TbywgSSBzaG91bGQgaW5jbHVkZSBgdXNlcmZhdWx0ZmRfaW9jdGxgLCBhbmQgYHVzZXJmYXVsdGZkX21vdmVgLCBhbmQgYG1vdmVfcGFnZXNgLiBFdmVuIHRob3VnaCB0aGV5J3JlIHN0YXRpYywgdGhleSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgaGVyZS4gV2FpdCwgYHVzZXJmYXVsdGZkX2lvY3RsYCBpcyB0aGUgKmZpbGUgb3BlcmF0aW9uKiBoYW5kbGVyIGZvciB0aGUgZGV2aWNlLCBhbmQgSSBuZWVkIHRvIGNoZWNrIGZvciBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSBwcm9jZXNzLi4uIExldCdzIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIsIHBvc3NpYmx5IG5vbi1zdGF0aWMgZnVuY3Rpb25zLCB0aGF0IGFyZSByZWxldmFudC4gTGV0J3MgbG9vayBhdCB0aGUgZXhwb3J0cyBmcm9tIGBtbS91c2VyZmF1bHRmZC5jYCBqdXN0IHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTMxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjU5OjE2LjE2NTkyMzg2M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkyMTUyODUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdXNlcmZhdWx0ZmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTk6MTYuMjI1MTUxMjU4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5ODEyNTc1NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFN5bWJvbCBFeHBvc3VyZSBpbiB0aGUgTGludXggS2VybmVsKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBub3RpY2luZyB0aGUgYWJzZW5jZSBvZiBhbnkgZXhwb3J0ZWQgc3ltYm9scy4gVGhhdCB0ZWxscyBtZSBldmVyeXRoaW5nIGhlcmUgaXMgZWl0aGVyIHN0YXRpYyBvciBub3QgbWVhbnQgZm9yIGV4dGVybmFsIHVzZS4gTGV0J3MgZm9jdXMgb24gdGhlIGZ1bmN0aW9ucyBJIHNlZSBkaXJlY3RseSByZWxldmFudDogYHVzZXJmYXVsdGZkX2lvY3RsYCwgYHVzZXJmYXVsdGZkX21vdmVgLCBhbmQgYG1vdmVfcGFnZXNgLiBIb2xkIG9uIGEgc2Vjb25kLCB3YXNuJ3QgYG1vdmVfcGFnZXNgIGFsc28gYSBzeXN0ZW0gY2FsbD8gUmlnaHQsIGl0IGlzISBJIHJlbWVtYmVyIG5vdzsgYHN5c19tb3ZlX3BhZ2VzYCBpcyBkZWZpbmVkIG92ZXIgaW4gYG1tL21pZ3JhdGUuY2AuIEJ1dCB0aGUgYG1vdmVfcGFnZXNgIEknbSBsb29raW5nIGF0IGhlcmUsIHdpdGhpbiBgbW0vdXNlcmZhdWx0ZmQuY2AsIGlzIHNwZWNpZmljYWxseSBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoaXMgY3JlYXRlcyBhIHBvdGVudGlhbCBjb25mbGljdCBpZiBJIHNpbXBseSBhZGQgYG1vdmVfcGFnZXNgIHRvIGEgc3ltYm9sIGxpc3QgbGlrZSBgRm9jdXNTeW1ib2xzYC4gVGhlcmUncyBhIHJpc2sgdGhhdCBpdCBtaWdodCBlcnJvbmVvdXNseSB0YXJnZXQgdGhhdCBzeXN0ZW0gY2FsbCBpbiBgbW0vbWlncmF0ZS5jYCBpbnN0ZWFkIG9mIHRoZSBsb2NhbCBzdGF0aWMgb25lLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlIGBtb3ZlX3BhZ2VzYCB3aXRoaW4gYG1tL3VzZXJmYXVsdGZkLmNgIGlzIHRoZSBvbmx5IG9uZSB3aXRoIHRoYXQgbmFtZS4gSSBtdXN0IGNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzI0MywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1OToyMC4yMDY0MTM5NDdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NjMwNjk5MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiU1lTQ0FMTF9ERUZJTkUuKm1vdmVfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21pZ3JhdGUuYz0yNTkzPXN0YXRpYyBpbnQga2VybmVsX21vdmVfcGFnZXMocGlkX3QgcGlkLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWlncmF0ZS5jLTI2MjItXFxubW0vbWlncmF0ZS5jOjI2MjM6U1lTQ0FMTF9ERUZJTkU2KG1vdmVfcGFnZXMsIHBpZF90LCBwaWQsIHVuc2lnbmVkIGxvbmcsIG5yX3BhZ2VzLFxcbm1tL21pZ3JhdGUuYy0yNjI0LVxcdFxcdGNvbnN0IHZvaWQgX191c2VyICogX191c2VyICosIHBhZ2VzLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbnVtYWlmLmg9MjM9S1ZNX1NZU0NBTExfREVGSU5FKG1pZ3JhdGVfcGFnZXMsIDQsIGludCwgcGlkLCB1bnNpZ25lZCBsb25nLCBtYXhub2RlLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbnVtYWlmLmgtMjUtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbnVtYWlmLmg6MjY6S1ZNX1NZU0NBTExfREVGSU5FKG1vdmVfcGFnZXMsIDYsIGludCwgcGlkLCB1bnNpZ25lZCBsb25nLCBjb3VudCwgdm9pZCAqLCBwYWdlcyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9udW1haWYuaC0yNy1cXHRcXHQgICBjb25zdCBpbnQgKiwgbm9kZXMsIGludCAqLCBzdGF0dXMsIGludCwgZmxhZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1OToyMy4wNjk0OTQxMzVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAwMDc0ODk5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBtb3ZlX3BhZ2VzYCBDb251bmRydW0qKlxuXG5Pa2F5LCBzbyBJJ20gZGVhbGluZyB3aXRoIGBtb3ZlX3BhZ2VzYCBoZXJlLCBhbmQgSSBrbm93IGZyb20gbWVtb3J5LCBvciBhIHF1aWNrIGNyb3NzLXJlZmVyZW5jZSwgdGhhdCBpdCdzIGEgc3lzdGVtIGNhbGwgZGVmaW5lZCBpbiBgbW0vbWlncmF0ZS5jYC4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBwb3RlbnRpYWwgZm9yIGNvbmZ1c2lvbi4gSWYgSSBzaW1wbHkgYWRkIGBtb3ZlX3BhZ2VzYCB0byBgRm9jdXNTeW1ib2xzYCwgSSdtIGdvaW5nIHRvIHBpY2sgdXAgYHN5c19tb3ZlX3BhZ2VzYCAqYW5kKiBga2VybmVsX21vdmVfcGFnZXNgLCBhbmQgdGhhdCdzIG5vdCB3aGF0IEknbSBhaW1pbmcgZm9yLiBJIG5lZWQgdG8gYmUgbW9yZSBwcmVjaXNlIGluIG15IHRhcmdldGluZy4gSXQgbG9va3MgbGlrZSB0aGUgcmlnaHQgcm91dGUgaW52b2x2ZXMgYHVzZXJmYXVsdGZkX2lvY3RsYCBhbmQgYHVzZXJmYXVsdGZkX21vdmVgIGluc3RlYWQuIE5vdyBJJ20gdGhpbmtpbmcuLi53aGF0IGFib3V0IGBtb3ZlX3BhZ2VzX3B0ZXNgIGFuZCBgbW92ZV9wYWdlc19odWdlX3BtZGA/IFRoZXkncmUgZGVmaW5lZCBhcyBgc3RhdGljYCB3aXRoaW4gYG1tL3VzZXJmYXVsdGZkLmNgLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSBJJ20gbm90IG1pc3Npbmcgc29tZXRoaW5nIGNyaXRpY2FsLCBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGFuZCBzY2FuIGZvciBhbnkgb3RoZXIgZnVuY3Rpb24gZGVmaW5pdGlvbnMgd2l0aCB0aGF0IHBhcnRpY3VsYXIgbmFtZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc5MzUsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTk6MjcuMDcwMjQ1Nzg1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzM3MDk5NTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vdmVfcGFnZXNfcHRlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdXNlcmZhdWx0ZmQuYz0xMzgyPXN0YXRpYyBpbnQgbW92ZV96ZXJvcGFnZV9wdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTE0MTQtICovXFxubW0vdXNlcmZhdWx0ZmQuYzoxNDE1OnN0YXRpYyBsb25nIG1vdmVfcGFnZXNfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kLFxcbm1tL3VzZXJmYXVsdGZkLmMtMTQxNi1cXHRcXHRcXHQgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYz0xOTM0PXN0YXRpYyBzc2l6ZV90IG1vdmVfcGFnZXMoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LCB1bnNpZ25lZCBsb25nIGRzdF9zdGFydCxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMjA2OC1cXG5tbS91c2VyZmF1bHRmZC5jOjIwNjk6XFx0XFx0XFx0cmV0ID0gbW92ZV9wYWdlc19wdGVzKG1tLCBkc3RfcG1kLCBzcmNfcG1kLFxcbm1tL3VzZXJmYXVsdGZkLmMtMjA3MC1cXHRcXHRcXHRcXHRcXHQgICAgICBkc3Rfdm1hLCBzcmNfdm1hLCBkc3RfYWRkcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTk6MjkuNDA3MzUxODE2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzQzODYzOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRpdmluZyBpbnRvIFBhZ2UgTWlncmF0aW9uIE1lY2hhbmlzbXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gYG1vdmVfcGFnZXNfcHRlc2Ag4oCTIHllYWgsIHRoYXQgb25lJ3MgZ290IGEgcGFydGljdWxhciBuaWNoZSwgYSBzcGVjaWZpYyBzZXQgb2YgY2lyY3Vtc3RhbmNlcyB3aGVyZSBpdCdzIHRoZSByaWdodCB0b29sIGZvciB0aGUgam9iLiBCdXQgbm93IHRoZSBxdWVzdGlvbiB0aGF0IHBvcHMgdXAgaXMsIHdoYXQgYWJvdXQgYG1vdmVfcGFnZXNfaHVnZV9wbWRgPyBJIG5lZWQgdG8gYW5hbHl6ZSBpdHMgYmVoYXZpb3IgaW4gY29tcGFyaXNvbiBhbmQgZmlndXJlIG91dCB3aGVyZSB0aGUgZGl2aXNpb24gZmFsbHMuIEkgd2FudCB0byBoYXZlIGEgcHJlY2lzZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZXNwZWN0aXZlIHN0cmVuZ3RocyBvZiB0aGVzZSBmdW5jdGlvbnMuIFdoYXQgYXJlIHRoZSBrZXkgZGlzdGluY3Rpb25zIGhlcmU/IFdoZW4gZG8gd2UgbGV2ZXJhZ2Ugb25lIG92ZXIgdGhlIG90aGVyPyBJIG5lZWQgdG8gYnVpbGQgYSBjb21wcmVoZW5zaXZlIG1lbnRhbCBtb2RlbCB0byBlbnN1cmUgSSdtIG1ha2luZyB0aGUgbW9zdCBvcHRpbWl6ZWQgZGVjaXNpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODU4MywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjU5OjMyLjY4MTc0MjI2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTEzMDExNjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vdmVfcGFnZXNfaHVnZV9wbWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oPTE1NT12b2lkIGRvdWJsZV9wdF91bmxvY2soc3BpbmxvY2tfdCAqcHRsMSwgc3BpbmxvY2tfdCAqcHRsMik7XFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg6MTU2OmludCBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWQsIHBtZF90IGRzdF9wbWR2YWwsXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMTU3LVxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9Mjc0ND1pbnQgY2hhbmdlX2h1Z2VfcHVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yNzkwLSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6Mjc5MTppbnQgbW92ZV9wYWdlc19odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kLCBwbWRfdCBkc3RfcG1kdmFsLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMjc5Mi1cXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjX3ZtYSxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmM9MTkzND1zdGF0aWMgc3NpemVfdCBtb3ZlX3BhZ2VzKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTIwMTQtXFx0XFx0ICogYmUgc3RyaWN0LiBJZiBkc3RfcG1kIGNoYW5nZXMgaW50byBUUEggYWZ0ZXIgdGhpcyBjaGVjaywgdGhlXFxubW0vdXNlcmZhdWx0ZmQuYzoyMDE1OlxcdFxcdCAqIG1vdmVfcGFnZXNfaHVnZV9wbWQoKSB3aWxsIGRldGVjdCB0aGUgY2hhbmdlIGFuZCByZXRyeVxcbm1tL3VzZXJmYXVsdGZkLmMtMjAxNi1cXHRcXHQgKiB3aGlsZSBtb3ZlX3BhZ2VzX3B0ZSgpIHdpbGwgZGV0ZWN0IHRoZSBjaGFuZ2UgYW5kIGZhaWwuXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTIwNDUtXFxubW0vdXNlcmZhdWx0ZmQuYzoyMDQ2OlxcdFxcdFxcdGVyciA9IG1vdmVfcGFnZXNfaHVnZV9wbWQobW0sIGRzdF9wbWQsIHNyY19wbWQsXFxubW0vdXNlcmZhdWx0ZmQuYy0yMDQ3LVxcdFxcdFxcdFxcdFxcdFxcdCAgZHN0X3BtZHZhbCwgZHN0X3ZtYSwgc3JjX3ZtYSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTk6MzUuMTk0NzYxMTA3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5MzU0ODA1OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgVGhvdWdodCBQcm9jZXNzIG9uIElkZW50aWZ5aW5nIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGZvciB0aGUgYmVzdCBwbGFjZXMgdG8gZnV6eiBiYXNlZCBvbiB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGdvIGFmdGVyIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYCwgc2luY2UgaXQncyBub24tc3RhdGljIGFuZCBsb29rcyBsaWtlIGEgcG90ZW50aWFsIGVudHJ5IHBvaW50LiBCdXQgd2FpdCwgaXQncyBub3QgZXhwb3J0ZWQsIGV2ZW4gdGhvdWdoIGl0ICppcyogbm9uLXN0YXRpYy4gU28sIHRoYXQncyBzdGlsbCBhIGdvb2QgY2FuZGlkYXRlLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY2FsbCBjaGFpbi5cblxuTmV4dCwgSSBjb25zaWRlcmVkIGB1c2VyZmF1bHRmZF9tb3ZlYCwgYnV0IHF1aWNrbHkgcmVhbGl6ZWQgdGhhdCBpdCdzIHN0YXRpYy4gVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgcHJlZmVycyBub24tc3RhdGljIGVudHJ5IHBvaW50cywgc2luY2UgdGhlIGNvbXBpbGVyIHdvbid0IGlubGluZSB0aGVtLCBnaXZpbmcgdGhlbSBkaXN0aW5jdCBzeW1ib2xzLiBTbywgdGhhdCdzIGxlc3MgaWRlYWwuIEkgd2FzIGdvaW5nIHRvIGluY2x1ZGUgYHVzZXJmYXVsdGZkX2lvY3RsYCwgYHVzZXJmYXVsdGZkX21vdmVgLCBgbW92ZV9wYWdlc19wdGVzYCwgYG1vdmVfcGFnZXNfaHVnZV9wbWRgLCBidXQgSSdtIHJlZmluaW5nIHRoYXQgbm93LlxuXG5SaWdodCwgYHVzZXJmYXVsdGZkX2lvY3RsYCBpcyBhIGZpbGUgb3BlcmF0aW9uLCBzbyBpdCBoYXMgdG8gaGF2ZSBhIGRpc3RpbmN0IGFkZHJlc3MuIFRoZW4sIGB1c2VyZmF1bHRmZF9tb3ZlYCBpcyBjYWxsZWQgZnJvbSBhIHN3aXRjaCBzdGF0ZW1lbnQgd2l0aGluIGB1c2VyZmF1bHRmZF9pb2N0bGAsIHNvIGl0J3MgYSBiaXQgb2YgYSB0b3NzLXVwIHdoZXRoZXIgaXQgZ2V0cyBpbmxpbmVkIG9yIG5vdC4gYG1vdmVfcGFnZXNfaHVnZV9wbWRgIGlzIG5vbi1zdGF0aWMsIHNvIG5vIGlubGluaW5nIHRoZXJlLiBgbW92ZV9wYWdlc19wdGVzYCBpcyBzdGF0aWMsIHNvIGl0J3MgcHJvYmFibHkgaW5saW5lZC5cblxuT2theSwgbGV0J3MgaW5jbHVkZTogYHVzZXJmYXVsdGZkX2lvY3RsYCwgYHVzZXJmYXVsdGZkX21vdmVgLCBhbmQgYG1vdmVfcGFnZXNfaHVnZV9wbWRgLiBIb3dldmVyLCBhZnRlciByZS1ldmFsdWF0aW5nIHRoZSBidWcncyBsb2NhdGlvbiwgdGhlIGJ1ZyBpcyByZWFsbHkgaW4gdGhlIHN0YXRpYyBgbW92ZV9wYWdlc2AgZnVuY3Rpb24gaW4gYG1tL3VzZXJmYXVsdGZkLmNgLiBUaGUgYG1vdmVfcGFnZXNgIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgYFVGRkRJT19NT1ZFYCBpb2N0bC4gVGhlcmVmb3JlIEkgc2hvdWxkIGluY2x1ZGUgYHVzZXJmYXVsdGZkX2lvY3RsYCBhbmQgYHVzZXJmYXVsdGZkX21vdmVgLlxuXG5MZXQncyBkb3VibGUtY2hlY2sgdGhlIHJlYXNvbmluZyBoZXJlLiBUaGUgcGF0Y2ggZml4ZXMgYSBmYWlsdXJlIHRvIHJlc2V0IHRoZSBlcnJvciBjb2RlIGBlcnJgIGFmdGVyIGVuY291bnRlcmluZyBgLUVBR0FJTmAuIElmIHRoZSBlcnJvciBpc24ndCByZXNldCwgdGhlIGxvb3AgY29udGludWVzIHdpdGggdGhlIHNhbWUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMsIGNhdXNpbmcgYW4gaW5maW5pdGUgbG9vcCB3aGVuIGBtb3ZlX3BhZ2VzX3B0ZXNgIChvciBvdGhlciBmdW5jdGlvbnMpIGRvZXNuJ3Qgb3ZlcndyaXRlIHRoZSBlcnJvci4gVGhpcyBpcyBhIHJlYWwgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHVzZXJmYXVsdGZkIGNvZGUsIHNwZWNpZmljYWxseSBpbiB0aGUgYFVGRkRJT19NT1ZFYCBpb2N0bC4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuXG5cbkZpbmFsbHksIHRoZSBjb25maWd1cmF0aW9ucy4gYFVTRVJGQVVMVEZEYCBpcyB0aGUgbWFpbiBvbmUsIGFuZCB0aGF0IGRlcGVuZHMgb24gYE1NVWAsIHNvIHRoYXQncyBnb29kIHRvIGtub3cuIEFuZCB3aGlsZSB0aGlua2luZyBhYm91dCBgbW92ZV9wYWdlc19odWdlX3BtZGAsIEkgaGF2ZSB0byByZW1lbWJlciB0aGF0IGBtbS9odWdlX21lbW9yeS5jYCAod2hlcmUgaXQgbGl2ZXMpIG9ubHkgZ2V0cyBjb21waWxlZCBpZiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBlbmFibGVkLiBUaGF0J3MgYSBnb29kIGRlcGVuZGVuY3kgdG8gY29uc2lkZXIgd2hlbiBzZXR0aW5nIHVwIHRoZSBmdXp6aW5nIGVudmlyb25tZW50LlxuXG5TbywgaW4gdGhlIGVuZCwgaXQncyBgdXNlcmZhdWx0ZmRfaW9jdGxgLCBhbmQgYHVzZXJmYXVsdGZkX21vdmVgIHdpdGggYSBwb3RlbnRpYWwgZm9jdXMgb24gdGhlIGBVRkZESU9fTU9WRWAgcGF0aC4gQW5kIHJlbWVtYmVyIGBVU0VSRkFVTFRGRGAsIGBNTVVgLCBhbmQgcG9zc2libHkgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgZm9yIHRoZSBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTMyNywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1OTo0NS4xMzAyNDUyMjFaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MjgxNjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2VfbWVtb3J5Lm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9MTAwPW9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSArPSBtaWdyYXRlX2RldmljZS5vXFxubW0vTWFrZWZpbGU6MTAxOm9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgKz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cXG5tbS9NYWtlZmlsZS0xMDItb2JqLSQoQ09ORklHX1BBR0VfQ09VTlRFUikgKz0gcGFnZV9jb3VudGVyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTk6NDUuMTk3NTMzNjU3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MzYwMTcwMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBDaGVjayoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQncyBjbGVhciB0aGF0IHRvIG1ha2UgYG1vdmVfcGFnZXNfaHVnZV9wbWRgIHdvcmsgY29ycmVjdGx5LCBJIGFic29sdXRlbHkgbmVlZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGVuYWJsZWQuIE5vIHF1ZXN0aW9uIHRoZXJlLiBTbywgSSdsbCBnbyBhaGVhZCBhbmQgYWRkIHRoYXQgdG8gbXkgYEVuYWJsZUNvbmZpZ3NgIGxpc3QuIE5vdywgb24gdG8gdGhlIG5leHQgcGllY2UuIEknbSB3b25kZXJpbmcgaWYganVzdCBoYXZpbmcgYFVTRVJGQVVMVEZEYCBpcyBzdWZmaWNpZW50IGZvciBgdXNlcmZhdWx0ZmRfaW9jdGxgLiBUaGlua2luZyBpdCB0aHJvdWdoLCB5ZXMsIHRoYXQgc2VlbXMgcmlnaHQsIEkgYmVsaWV2ZSBJIGNhbiByZWx5IG9uIHRoYXQuIEJ1dCwgYmVmb3JlIEkgbW92ZSBvbiwgSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLiBJIHNob3VsZCBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIGRlcGVuZGVuY2llcyBpbiB0aGUgc2FtZSBhcmVhLiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIGBtbS91c2VyZmF1bHRmZC5jYCBhbmQgaXRzIGNvcnJlc3BvbmRpbmcgYG1tL01ha2VmaWxlYC4gVGhhdCBzaG91bGQgcmV2ZWFsIGFueSBvdGhlciBjb25maWcgb3B0aW9ucyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZiBhbmQgc2V0LCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBlbnN1cmUgdGhpcyBhbGwgZnVuY3Rpb25zIGFzIGludGVuZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDc4OCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjU5OjQ5LjEzMzU1NTA1MloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ4MzU0MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXNlcmZhdWx0ZmQub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0xMzA9b2JqLSQoQ09ORklHX0NNQV9TWVNGUykgKz0gY21hX3N5c2ZzLm9cXG5tbS9NYWtlZmlsZToxMzE6b2JqLSQoQ09ORklHX1VTRVJGQVVMVEZEKSArPSB1c2VyZmF1bHRmZC5vXFxubW0vTWFrZWZpbGUtMTMyLW9iai0kKENPTkZJR19JRExFX1BBR0VfVFJBQ0tJTkcpICs9IHBhZ2VfaWRsZS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjU5OjQ5LjE5ODQwMjYwN1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTI4MjczNzM3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYFVTRVJGQVVMVEZEYCBQYXRjaCoqXG5cbk9rYXksIHNvIGBVU0VSRkFVTFRGRGAgaXMgZGVmaW5pdGVseSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZS4gTGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG5NeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGluZGVlZCB3b3J0aCBmdXp6aW5nLiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBsaWVzIHdpdGhpbiB0aGUgYFVGRkRJT19NT1ZFYCBpb2N0bCBoYW5kbGVyIGluIHRoZSBgdXNlcmZhdWx0ZmRgIG1lY2hhbmlzbS4gVGhlIGJ1ZyBzdGVtcyBmcm9tIGEgZmFpbHVyZSB0byByZXNldCB0aGUgYGVycmAgdmFyaWFibGUgdG8gMCBhZnRlciBlbmNvdW50ZXJpbmcgYW4gYC1FQUdBSU5gIGVycm9yIHdpdGhpbiB0aGUgYG1vdmVfcGFnZXNgIGZ1bmN0aW9uLlxuXG5JIHNlZSB0aGF0IGBtb3ZlX3BhZ2VzYCBpcyBsaWtlbHkgdXNpbmcgYG1vdmVfcGFnZXNfcHRlc2AgYXMgd2VsbCwgb3IgYG1vdmVfcGFnZXNfaHVnZV9wbWRgLiBUaGUgcHJpbWFyeSBzeW1ib2xzIEknbGwgZm9jdXMgb24gYXJlIGB1c2VyZmF1bHRmZF9pb2N0bGAsIGB1c2VyZmF1bHRmZF9tb3ZlYCwgYW5kIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYC4gSSBjb25zaWRlcmVkIGBtb3ZlX3BhZ2VzX3B0ZXNgLCBidXQgSSB0aGluayB0aGUgb3RoZXJzIGFyZSBzdWZmaWNpZW50LlxuXG5UaGUgbG9naWMgZmxvdyBpcyB0aGlzOiBpZiBgLUVBR0FJTmAgaXNuJ3QgcmVzZXQsIGFueSBzdWJzZXF1ZW50IHN1Y2Nlc3NmdWwgcGFnZSBtb3ZlIChkb25lLCBmb3IgaW5zdGFuY2UsIGJ5IGBtb3ZlX3BhZ2VzX3B0ZXNgIG9yIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYCkgd2lsbCAqbm90KiBvdmVyd3JpdGUgYGVycmAgKHNpbmNlIHN1Y2Nlc3MgcmV0dXJucyBcdTAwM2U9IDApIGFuZCBgZXJyYCBzdGlja3MgYXQgYC1FQUdBSU5gLiBUaGlzIHRoZW4gY2F1c2VzIHRoZSBsb29wIHRvIHJlLWVudGVyIHRoZSBgaWYgKGVyciA9PSAtRUFHQUlOKSBjb250aW51ZTtgIGJsb2NrLiBUaGlzIHNraXBzIGFkdmFuY2luZyB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMgKGBzcmNfYWRkcmAsIGBkc3RfYWRkcmApLCBsZWFkaW5nIHRvIGEgcmVwZWF0ZWQgbW92ZSBvZiB0aGUgc2FtZSBwYWdlLCByZXN1bHRpbmcgaW4gYW4gaW5maW5pdGUgbG9vcC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmRpdGlvbnMgd2hlcmUgYG1vdmVfcGFnZXNfcHRlc2AgcmV0dXJucyBgLUVBR0FJTmAuIExldCBtZSB0aGluayB0aGlzIHRocm91Z2guLi4gSWYgYG1vdmVfcGFnZXNfcHRlc2AgcmV0dXJucyBhIG5lZ2F0aXZlIHZhbHVlLCB0aGUgb3JpZ2luYWwgYGVycmAgZ2V0cyBvdmVyd3JpdHRlbiwgdGh1cyBzb2x2aW5nIHRoZSBwcm9ibGVtLiBUaGUgaXNzdWUgc3VyZmFjZXMgaWYgYG1vdmVfcGFnZXNfcHRlc2AgcmV0dXJucyBhIG5vbi1uZWdhdGl2ZSB2YWx1ZS4gVGhlIHByb2dyYW0gZW5kcyB1cCByZXRyeWluZyB0aGUgc2FtZSBwYWdlLiBOb3csIGlmIHRoZSByZXRyeSBoYXBwZW5zLCBhbmQgYHBtZF9ub25lKCpzcmNfcG1kKWAgaXMgdHJ1ZSwgb3IgYHB0ZV9ub25lYCBpcyB0cnVlLCB0aGUgZnVuY3Rpb24gd2lsbCBsaWtlbHkgcmV0dXJuIGAtRU5PRU5UYCBpZiBgVUZGRElPX01PVkVfTU9ERV9BTExPV19TUkNfSE9MRVNgIGlzIG5vdCBzZXQuIElmIHNldCwgaXQgbWlnaHQgcmV0dXJuIDAsIGFuZCBsb29wIGluZmluaXRlbHkuIFNvLCB5ZXMsIHRoZSBidWcgaXMgcmVhbC5cblxuSSBhbHNvIGRvdWJsZS1jaGVja2VkIHRoYXQgYHVzZXJmYXVsdGZkX21vdmVgIGlzIHN0YXRpYyB3aXRoaW4gYG1tL3VzZXJmYXVsdGZkLmNgLCBidXQgaXQgaXMgc3RpbGwgYSBrZXkgc3ltYm9sIHRvIHRhcmdldC5cblxuU28sIHN1bW1pbmcgdGhpcyB1cCwgdGhlIGZ1enppbmcgdGFyZ2V0cyBzaG91bGQgYmUgYHVzZXJmYXVsdGZkX2lvY3RsYCwgYHVzZXJmYXVsdGZkX21vdmVgLCBhbmQgYG1vdmVfcGFnZXNfaHVnZV9wbWRgLCBlbmFibGluZyBgVVNFUkZBVUxURkRgIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBJIGNhbiBzZWUgdGhpcyBhcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgdXNlcmZhdWx0ZmQgY29yZSBsb2dpYywgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSwgbWFraW5nIGl0IGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjAyLCJPdXRwdXRUb2tlbnMiOjE3NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwNDowMDowMC40ODExNDI4MDRaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkzNDQ0MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTRVJGQVVMVEZEXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVzZXJmYXVsdGZkX2lvY3RsXCIsXG4gICAgXCJ1c2VyZmF1bHRmZF9tb3ZlXCIsXG4gICAgXCJtb3ZlX3BhZ2VzX2h1Z2VfcG1kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIFVGRkRJT19NT1ZFIGlvY3RsIGhhbmRsZXIgd2hlcmUgYW4gLUVBR0FJTiBlcnJvciB3YXMgbm90IHJlc2V0IHRvIDAgYmVmb3JlIGNvbnRpbnVpbmcgdGhlIGxvb3AuIElmIG5vdCByZXNldCwgYSBzdWJzZXF1ZW50IHN1Y2Nlc3NmdWwgcGFnZSBtb3ZlIHdvdWxkIGxlYXZlIGVyciBhcyAtRUFHQUlOLCBjYXVzaW5nIHRoZSBsb29wIHRvIHNraXAgYWR2YW5jaW5nIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3Nlcy4gVGhpcyByZXN1bHRzIGluIGFuIGluZmluaXRlIGxvb3Agb3IgcmVwZWF0ZWQgYXR0ZW1wdHMgdG8gbW92ZSB0aGUgc2FtZSBwYWdlLiBUaGUgZml4IGVuc3VyZXMgZXJyIGlzIHJlc2V0IHRvIDAsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgdXNlcmZhdWx0ZmQgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNFUkZBVUxURkRcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXNlcmZhdWx0ZmRfaW9jdGxcIixcbiAgICBcInVzZXJmYXVsdGZkX21vdmVcIixcbiAgICBcIm1vdmVfcGFnZXNfaHVnZV9wbWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgVUZGRElPX01PVkUgaW9jdGwgaGFuZGxlciB3aGVyZSBhbiAtRUFHQUlOIGVycm9yIHdhcyBub3QgcmVzZXQgdG8gMCBiZWZvcmUgY29udGludWluZyB0aGUgbG9vcC4gSWYgbm90IHJlc2V0LCBhIHN1YnNlcXVlbnQgc3VjY2Vzc2Z1bCBwYWdlIG1vdmUgd291bGQgbGVhdmUgZXJyIGFzIC1FQUdBSU4sIGNhdXNpbmcgdGhlIGxvb3AgdG8gc2tpcCBhZHZhbmNpbmcgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzc2VzLiBUaGlzIHJlc3VsdHMgaW4gYW4gaW5maW5pdGUgbG9vcCBvciByZXBlYXRlZCBhdHRlbXB0cyB0byBtb3ZlIHRoZSBzYW1lIHBhZ2UuIFRoZSBmaXggZW5zdXJlcyBlcnIgaXMgcmVzZXQgdG8gMCwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSB1c2VyZmF1bHRmZCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDQ6MDA6MDAuNjAwNDk1Mzk1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjgzOTgwMjk5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA0OjAwOjAwLjYwMTExNzM4NloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyNjgzOTE3MzMwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBjb250cm9sIGZsb3cgYnVnIGluIGBtb3ZlX3BhZ2VzKClgIGluIGBtbS91c2VyZmF1bHRmZC5jYC4gUHJpb3IgdG8gdGhlIHBhdGNoLCBpZiBhIHBhZ2UgbW92ZSBvcGVyYXRpb24gcmV0dXJuZWQgYC1FQUdBSU5gLCB0aGUgbG9vcCB3b3VsZCBgY29udGludWVgIGJ1dCBmYWlsIHRvIHJlc2V0IHRoZSBgZXJyYCB2YXJpYWJsZSB0byAwLiBCZWNhdXNlIGBlcnJgIGlzIG5vdCB1bmNvbmRpdGlvbmFsbHkgb3ZlcndyaXR0ZW4gb24gc3VjY2Vzc2Z1bCBwYWdlIG1vdmVzIChlLmcuLCB3aGVuIGBtb3ZlX3BhZ2VzX3B0ZXMoKWAgcmV0dXJucyBhIHBvc2l0aXZlIHN0ZXAgc2l6ZSksIGBlcnJgIHdvdWxkIHJlbWFpbiBgLUVBR0FJTmAuIFRoaXMgY2F1c2VkIHRoZSBsb29wIHRvIGluZmluaXRlbHkgcmV0cnkgdGhlIHNhbWUgYWRkcmVzcyB3aXRob3V0IGFkdmFuY2luZyBgc3JjX2FkZHJgIGFuZCBgZHN0X2FkZHJgLCBsZWFkaW5nIHRvIGEgaGFuZy4gVGhlIHBhdGNoIHNpbXBseSByZXNldHMgYGVyciA9IDBgIGJlZm9yZSBjb250aW51aW5nLCBmaXhpbmcgdGhlIGluZmluaXRlIGxvb3AuXFxuXFxuVGhpcyBidWcgaXMgYSBwdXJlIGNvbnRyb2wgZmxvdyBpc3N1ZSByZXN1bHRpbmcgaW4gYSBoYW5nLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGxlYWsgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIGZ1enppbmcgKHdpdGggS0FTQU4sIExPQ0tERVAsIGFuZCBzb2Z0IGxvY2t1cCBkZXRlY3RvcnMpIGlzIHBlcmZlY3RseSBjYXBhYmxlIG9mIGRldGVjdGluZyBoYW5ncyBhbmQgaW5maW5pdGUgbG9vcHMuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgcGF0Y2ggdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQxYzQ4NmRhOWFjZDRmYTE3YTU2NWJlZWFjNDIyNzhjOWNlNzAzZjFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxOSAwMzo1NzowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3VzZXJmYXVsdGZkLmMgYi9tbS91c2VyZmF1bHRmZC5jXG5pbmRleCBjM2FkZWRhYWY3ZDU0Li5lYzVkNTExYmQxNzkxIDEwMDY0NFxuLS0tIGEvbW0vdXNlcmZhdWx0ZmQuY1xuKysrIGIvbW0vdXNlcmZhdWx0ZmQuY1xuQEAgLTIwODUsOCArMjA4NSwxMCBAQCBzdGF0aWMgc3NpemVfdCBtb3ZlX3BhZ2VzKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsXG4gXHRcdH1cbiBcbiBcdFx0aWYgKGVycikge1xuLVx0XHRcdGlmIChlcnIgPT0gLUVBR0FJTilcbitcdFx0XHRpZiAoZXJyID09IC1FQUdBSU4pIHtcbitcdFx0XHRcdGVyciA9IDA7XG4gXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHR9XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA0OjAwOjAwLjYwMTExODY5NVoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzMwNzc2MDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFN1YnRsZSBCdWcgRml4IGluIGBtb3ZlX3BhZ2VzYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBtb3ZlX3BhZ2VzYCBpbiBgbW0vdXNlcmZhdWx0ZmQuY2AuIFRoZSBjaGFuZ2UgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCDigJMgaXQncyB3cmFwcGluZyBhbiBleGlzdGluZyBgaWZgIHN0YXRlbWVudCB3aXRoIGFuIGFkZGl0aW9uYWwgY3VybHkgYnJhY2UgYW5kIGFkZGluZyBgZXJyID0gMDtgIGluc2lkZSBpdC4gVGhhdCdzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLCBiZWNhdXNlIHRoZSBpbXBhY3Qgb2Ygc2VlbWluZ2x5IHNpbXBsZSBjaGFuZ2VzIGNhbiBzb21ldGltZXMgYmUgcHJvZm91bmQgaW4ga2VybmVsIGNvZGUuXG5cbkJhc2ljYWxseSwgdGhlIG9yaWdpbmFsIGNvZGUgaGFkIGEgYnVnIHdoZXJlIGlmIGBlcnJgIHdhcyBgLUVBR0FJTmAgaW4gdGhlIGBtb3ZlX3BhZ2VzYCBmdW5jdGlvbiwgaXQgd291bGQgY29udGludWUgdGhlIGxvb3AuICpCdXQqLCBjcnVjaWFsIHBvaW50IGhlcmUsIGl0ICpkaWRuJ3QqIHJlc2V0IGBlcnJgIHRvIDAuIFRoaXMgbWVhbnMgdGhhdCBzdWJzZXF1ZW50IGl0ZXJhdGlvbnMgY291bGQgcG90ZW50aWFsbHkgaW5oZXJpdCB0aGlzIGVycm9yIHN0YXR1cywgd2hpY2ggaXMgb2J2aW91c2x5IGEgcHJvYmxlbS4gSSdtIHdvbmRlcmluZyB3aGF0IGlzIGFjdHVhbGx5IGhhbmRsZWQgaWYgYGVycmAgaXMgbm90IHplcm8gYW5kIGlzIHJldHVybmVkIGZyb20gdGhlIGZ1bmN0aW9uLlxuXG5TbywgdGhlIGZpeCBjb3JyZWN0bHkgc2V0cyBgZXJyID0gMGAgYmVmb3JlIHRoZSBgY29udGludWVgLiBUaGUgaW1wbGljYXRpb24gaXMgdGhhdCBhIHRyYW5zaWVudCBgLUVBR0FJTmAgc2hvdWxkbid0IHBlcm1hbmVudGx5IHRhaW50IHRoZSBlcnJvciBzdGF0dXMgb2YgdGhlIG92ZXJhbGwgb3BlcmF0aW9uLiBUaGUgbG9vcCBjb250aW51ZXMsIGhvcGVmdWxseSBldmVudHVhbGx5IHN1Y2NlZWRpbmcuIFJpZ2h0LCBtYWtlcyBzZW5zZS4gVGhpcyBwcmV2ZW50cyB0aGUgZXJyb25lb3VzIHByb3BhZ2F0aW9uIG9mIHRoZSBgLUVBR0FJTmAgZXJyb3IgY29kZS4gSXQncyBhIGNsYXNzaWMgZXhhbXBsZSBvZiBhIHN1YnRsZSBidWcgdGhhdCBjb3VsZCBsZWFkIHRvIGludGVybWl0dGVudCBmYWlsdXJlcywgZXNwZWNpYWxseSBpbiBoaWdoLWNvbmN1cnJlbmN5IG9yIHJlc291cmNlLWNvbnN0cmFpbmVkIHNpdHVhdGlvbnMuIFRoaXMgdHlwZSBvZiBmaXggaXMgZWFzeSB0byBtaXNzLCBidXQgZXNzZW50aWFsIGZvciByb2J1c3Qga2VybmVsIGJlaGF2aW9yLiBJIHNob3VsZCBwcm9iYWJseSBkaXZlIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG1vdmVfcGFnZXNgIHRvIGNvbmZpcm0gdGhlIGVycm9yIGhhbmRsaW5nIHN0cmF0ZWd5IGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGJldHRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk1NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA0OjAwOjA1LjMzMTg5ODMwMVoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY3MDQ3MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW92ZV9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS91c2VyZmF1bHRmZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3VzZXJmYXVsdGZkLmM9MTM4Mj1zdGF0aWMgaW50IG1vdmVfemVyb3BhZ2VfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xNDE0LSAqL1xcbm1tL3VzZXJmYXVsdGZkLmM6MTQxNTpzdGF0aWMgbG9uZyBtb3ZlX3BhZ2VzX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZCxcXG5tbS91c2VyZmF1bHRmZC5jLTE0MTYtXFx0XFx0XFx0ICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmM9MTg1OT1zdGF0aWMgdm9pZCB1ZmZkX21vdmVfdW5sb2NrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMTg2Ny0vKipcXG5tbS91c2VyZmF1bHRmZC5jOjE4Njg6ICogbW92ZV9wYWdlcyAtIG1vdmUgYXJiaXRyYXJ5IGFub255bW91cyBwYWdlcyBvZiBhbiBleGlzdGluZyB2bWFcXG5tbS91c2VyZmF1bHRmZC5jLTE4NjktICogQGN0eDogcG9pbnRlciB0byB0aGUgdXNlcmZhdWx0ZmQgY29udGV4dFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xODc2LSAqXFxubW0vdXNlcmZhdWx0ZmQuYzoxODc3OiAqIG1vdmVfcGFnZXMoKSByZW1hcHMgYXJiaXRyYXJ5IGFub255bW91cyBwYWdlcyBhdG9taWNhbGx5IGluIHplcm9cXG5tbS91c2VyZmF1bHRmZC5jLTE4NzgtICogY29weS4gSXQgb25seSB3b3JrcyBvbiBub24gc2hhcmVkIGFub255bW91cyBwYWdlcyBiZWNhdXNlIHRob3NlIGNhblxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xODg4LSAqIHN0b3JhZ2Ugb3IgYW55IG90aGVyIEkvTyBkZXZpY2UgKE1BRFZfRE9OVEZPUksgaW4gdGhlIHNvdXJjZSB2bWFcXG5tbS91c2VyZmF1bHRmZC5jOjE4ODk6ICogYXZvaWRzIG1vdmVfcGFnZXMoKSB0byBmYWlsIHdpdGggLUVCVVNZIGlmIHRoZSBwcm9jZXNzIGZvcmtzIGJlZm9yZVxcbm1tL3VzZXJmYXVsdGZkLmM6MTg5MDogKiBtb3ZlX3BhZ2VzKCkgaXMgY2FsbGVkKSwgdGhlbiBpdCB3aWxsIGNhbGwgbW92ZV9wYWdlcygpIHRvIG1hcCB0aGVcXG5tbS91c2VyZmF1bHRmZC5jLTE4OTEtICogcGFnZSBpbiB0aGUgZmF1bHRpbmcgYWRkcmVzcyBpbiB0aGUgZGVzdGluYXRpb24gdm1hLlxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTA1LSAqIHRoZSBkZXN0aW5hdGlvbiB2aXJ0dWFsIG1lbW9yeSByYW5nZSBpcyBub3QgYSB3aG9sZSB1bm1hcHBlZCBob2xlLFxcbm1tL3VzZXJmYXVsdGZkLmM6MTkwNjogKiBtb3ZlX3BhZ2VzKCkgd2lsbCBmYWlsIHJlc3BlY3RpdmVseSB3aXRoIC1FTk9FTlQgb3IgLUVFWElTVC4gVGhpc1xcbm1tL3VzZXJmYXVsdGZkLmMtMTkwNy0gKiBwcm92aWRlcyBhIHZlcnkgc3RyaWN0IGJlaGF2aW9yIHRvIGF2b2lkIGFueSBjaGFuY2Ugb2YgbWVtb3J5XFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTE5MTAtICogdGltZSBmb3IgYW55IGdpdmVuIGZhdWx0aW5nIGFkZHJlc3MuIFRoaXMgbWVhbnMgdGhhdCBpZiB0d28gdGhyZWFkc1xcbm1tL3VzZXJmYXVsdGZkLmM6MTkxMTogKiB0cnkgdG8gYm90aCBjYWxsIG1vdmVfcGFnZXMoKSBvbiB0aGUgc2FtZSBkZXN0aW5hdGlvbiBhZGRyZXNzIGF0IHRoZVxcbm1tL3VzZXJmYXVsdGZkLmMtMTkxMi0gKiBzYW1lIHRpbWUsIHRoZSBzZWNvbmQgdGhyZWFkIHdpbGwgZ2V0IGFuIGV4cGxpY2l0IGVycm9yIGZyb20gdGhpc1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTIwLSAqIGFuIGFtb3VudCBvZiBieXRlcyBzdWNjZXNzZnVsbHkgbW92ZWQuIElmIHRoZSByZXR2YWwgcmVwb3J0cyBhXFxubW0vdXNlcmZhdWx0ZmQuYzoxOTIxOiAqIFxcXCJzaG9ydFxcXCIgcmVtYXAsIHRoZSBtb3ZlX3BhZ2VzKCkgY29tbWFuZCBzaG91bGQgYmUgcmVwZWF0ZWQgYnlcXG5tbS91c2VyZmF1bHRmZC5jLTE5MjItICogdXNlcmxhbmQgd2l0aCBzcmMrcmV0dmFsLCBkc3QrcmV2YWwsIGxlbi1yZXR2YWwgaWYgaXQgd2FudHMgdG8ga25vd1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTMzLSAqL1xcbm1tL3VzZXJmYXVsdGZkLmM6MTkzNDpzdGF0aWMgc3NpemVfdCBtb3ZlX3BhZ2VzKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTM1LVxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgc3JjX3N0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbiwgX191NjQgbW9kZSlcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMjAxNC1cXHRcXHQgKiBiZSBzdHJpY3QuIElmIGRzdF9wbWQgY2hhbmdlcyBpbnRvIFRQSCBhZnRlciB0aGlzIGNoZWNrLCB0aGVcXG5tbS91c2VyZmF1bHRmZC5jOjIwMTU6XFx0XFx0ICogbW92ZV9wYWdlc19odWdlX3BtZCgpIHdpbGwgZGV0ZWN0IHRoZSBjaGFuZ2UgYW5kIHJldHJ5XFxubW0vdXNlcmZhdWx0ZmQuYzoyMDE2OlxcdFxcdCAqIHdoaWxlIG1vdmVfcGFnZXNfcHRlKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgZmFpbC5cXG5tbS91c2VyZmF1bHRmZC5jLTIwMTctXFx0XFx0ICovXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTIwNDEtXFx0XFx0XFx0XFx0c3BsaXRfaHVnZV9wbWQoc3JjX3ZtYSwgc3JjX3BtZCwgc3JjX2FkZHIpO1xcbm1tL3VzZXJmYXVsdGZkLmM6MjA0MjpcXHRcXHRcXHRcXHQvKiBUaGUgZm9saW8gd2lsbCBiZSBzcGxpdCBieSBtb3ZlX3BhZ2VzX3B0ZSgpICovXFxubW0vdXNlcmZhdWx0ZmQuYy0yMDQzLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0yMDQ1LVxcbm1tL3VzZXJmYXVsdGZkLmM6MjA0NjpcXHRcXHRcXHRlcnIgPSBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKG1tLCBkc3RfcG1kLCBzcmNfcG1kLFxcbm1tL3VzZXJmYXVsdGZkLmMtMjA0Ny1cXHRcXHRcXHRcXHRcXHRcXHQgIGRzdF9wbWR2YWwsIGRzdF92bWEsIHNyY192bWEsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTIwNjgtXFxubW0vdXNlcmZhdWx0ZmQuYzoyMDY5OlxcdFxcdFxcdHJldCA9IG1vdmVfcGFnZXNfcHRlcyhtbSwgZHN0X3BtZCwgc3JjX3BtZCxcXG5tbS91c2VyZmF1bHRmZC5jLTIwNzAtXFx0XFx0XFx0XFx0XFx0ICAgICAgZHN0X3ZtYSwgc3JjX3ZtYSwgZHN0X2FkZHIsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jPTQyMTY9c3RhdGljIGludCB1c2VyZmF1bHRmZF9tb3ZlKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtNDI1NS1cXHRpZiAobW1nZXRfbm90X3plcm8obW0pKSB7XFxubW0vdXNlcmZhdWx0ZmQuYzo0MjU2OlxcdFxcdHJldCA9IG1vdmVfcGFnZXMoY3R4LCB1ZmZkaW9fbW92ZS5kc3QsIHVmZmRpb19tb3ZlLnNyYyxcXG5tbS91c2VyZmF1bHRmZC5jLTQyNTctXFx0XFx0XFx0XFx0IHVmZmRpb19tb3ZlLmxlbiwgdWZmZGlvX21vdmUubW9kZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA0OjAwOjA1LjM5ODYwOTY3N1oiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzg4NTYwMzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgbW92ZV9wYWdlc2AgaW4gYG1tL3VzZXJmYXVsdGZkLmNgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBtb3ZlX3BhZ2VzYCBpcyBoYW5kbGluZyB0aGluZ3MgaW4gdGhlIGNvbnRleHQgb2YgdXNlcmZhdWx0ZmQuIFRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwgZm9yIGhvdyB3ZSBtYW5hZ2UgcGFnZSBtaWdyYXRpb24gYW5kIHRyYW5zZmVyLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHVzZXItc3BhY2UgbWVtb3J5IGFjY2VzcyBmYXVsdHMuIEkgd2FudCB0byBzZWUgaG93IHRoZSBrZXJuZWwgb3JjaGVzdHJhdGVzIHRoaXMgd2hvbGUgZGFuY2UgYmV0d2VlbiB1c2VyIHNwYWNlIGFuZCBrZXJuZWwgc3BhY2UuIFNwZWNpZmljYWxseSwgSSdtIGludGVyZXN0ZWQgaW4gdGhlIGludGVycGxheSBiZXR3ZWVuIGB1c2VyZmF1bHRmZGAgYW5kIHRoZSBwYWdlIG1pZ3JhdGlvbiBtYWNoaW5lcnkuIEhvdyBkb2VzIGl0IGtub3cgd2hlcmUgcGFnZXMgYXJlLCBhbmQgaG93IGRvZXMgaXQgZGlyZWN0IHRoZW0gd2hlcmUgdGhleSBuZWVkIHRvIGdvPyBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgYSBkZWxpY2F0ZSBiYWxhbmNpbmcgYWN0IGhlcmUsIGVuc3VyaW5nIGRhdGEgaW50ZWdyaXR5IHdoaWxlIG1pbmltaXppbmcgdGhlIHBlcmZvcm1hbmNlIGhpdCBvZiBwYWdlIGZhdWx0cy4gTGV0J3Mgc2VlIGhvdyB0aGV5IGRvIGl0LiBJJ20gbG9va2luZyBmb3IgdGhlIGtleSBsb2NraW5nIHByaW1pdGl2ZXMsIGVycm9yIGhhbmRsaW5nIHBhdGhzLCBhbmQgdGhlIG92ZXJhbGwgbG9naWMgZmxvdy4gVGhpcyBjb3VsZCBnaXZlIG1lIHNvbWUgZ3JlYXQgaW5zaWdodHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3OTIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwNDowMDowOC4xODcxNzQ3NzhaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAwNDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3VzZXJmYXVsdGZkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTkzNCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE5MzQ6XFx0c3RhdGljIHNzaXplX3QgbW92ZV9wYWdlcyhzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsIHVuc2lnbmVkIGxvbmcgZHN0X3N0YXJ0LFxcbjE5MzU6XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBzcmNfc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuLCBfX3U2NCBtb2RlKVxcbjE5MzY6XFx0e1xcbjE5Mzc6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdHgtXFx1MDAzZW1tO1xcbjE5Mzg6XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmNfdm1hLCAqZHN0X3ZtYTtcXG4xOTM5OlxcdFxcdHVuc2lnbmVkIGxvbmcgc3JjX2FkZHIsIGRzdF9hZGRyLCBzcmNfZW5kO1xcbjE5NDA6XFx0XFx0cG1kX3QgKnNyY19wbWQsICpkc3RfcG1kO1xcbjE5NDE6XFx0XFx0bG9uZyBlcnIgPSAtRUlOVkFMO1xcbjE5NDI6XFx0XFx0c3NpemVfdCBtb3ZlZCA9IDA7XFxuMTk0MzpcXHRcXG4xOTQ0OlxcdFxcdC8qIFNhbml0aXplIHRoZSBjb21tYW5kIHBhcmFtZXRlcnMuICovXFxuMTk0NTpcXHRcXHRWTV9XQVJOX09OX09OQ0Uoc3JjX3N0YXJ0IFxcdTAwMjYgflBBR0VfTUFTSyk7XFxuMTk0NjpcXHRcXHRWTV9XQVJOX09OX09OQ0UoZHN0X3N0YXJ0IFxcdTAwMjYgflBBR0VfTUFTSyk7XFxuMTk0NzpcXHRcXHRWTV9XQVJOX09OX09OQ0UobGVuIFxcdTAwMjYgflBBR0VfTUFTSyk7XFxuMTk0ODpcXHRcXG4xOTQ5OlxcdFxcdC8qIERvZXMgdGhlIGFkZHJlc3MgcmFuZ2Ugd3JhcCwgb3IgaXMgdGhlIHNwYW4gemVyby1zaXplZD8gKi9cXG4xOTUwOlxcdFxcdFZNX1dBUk5fT05fT05DRShzcmNfc3RhcnQgKyBsZW4gXFx1MDAzYyBzcmNfc3RhcnQpO1xcbjE5NTE6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKGRzdF9zdGFydCArIGxlbiBcXHUwMDNjIGRzdF9zdGFydCk7XFxuMTk1MjpcXHRcXG4xOTUzOlxcdFxcdGVyciA9IHVmZmRfbW92ZV9sb2NrKG1tLCBkc3Rfc3RhcnQsIHNyY19zdGFydCwgXFx1MDAyNmRzdF92bWEsIFxcdTAwMjZzcmNfdm1hKTtcXG4xOTU0OlxcdFxcdGlmIChlcnIpXFxuMTk1NTpcXHRcXHRcXHRnb3RvIG91dDtcXG4xOTU2OlxcdFxcbjE5NTc6XFx0XFx0LyogUmUtY2hlY2sgYWZ0ZXIgdGFraW5nIG1hcF9jaGFuZ2luZ19sb2NrICovXFxuMTk1ODpcXHRcXHRlcnIgPSAtRUFHQUlOO1xcbjE5NTk6XFx0XFx0ZG93bl9yZWFkKFxcdTAwMjZjdHgtXFx1MDAzZW1hcF9jaGFuZ2luZ19sb2NrKTtcXG4xOTYwOlxcdFxcdGlmIChsaWtlbHkoYXRvbWljX3JlYWQoXFx1MDAyNmN0eC1cXHUwMDNlbW1hcF9jaGFuZ2luZykpKVxcbjE5NjE6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjE5NjI6XFx0XFx0LypcXG4xOTYzOlxcdFxcdCAqIE1ha2Ugc3VyZSB0aGUgdm1hIGlzIG5vdCBzaGFyZWQsIHRoYXQgdGhlIHNyYyBhbmQgZHN0IHJlbWFwXFxuMTk2NDpcXHRcXHQgKiByYW5nZXMgYXJlIGJvdGggdmFsaWQgYW5kIGZ1bGx5IHdpdGhpbiBhIHNpbmdsZSBleGlzdGluZ1xcbjE5NjU6XFx0XFx0ICogdm1hLlxcbjE5NjY6XFx0XFx0ICovXFxuMTk2NzpcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjE5Njg6XFx0XFx0aWYgKHNyY192bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fU0hBUkVEKVxcbjE5Njk6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjE5NzA6XFx0XFx0aWYgKHNyY19zdGFydCArIGxlbiBcXHUwMDNlIHNyY192bWEtXFx1MDAzZXZtX2VuZClcXG4xOTcxOlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xOTcyOlxcdFxcbjE5NzM6XFx0XFx0aWYgKGRzdF92bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fU0hBUkVEKVxcbjE5NzQ6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjE5NzU6XFx0XFx0aWYgKGRzdF9zdGFydCArIGxlbiBcXHUwMDNlIGRzdF92bWEtXFx1MDAzZXZtX2VuZClcXG4xOTc2OlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xOTc3OlxcdFxcbjE5Nzg6XFx0XFx0ZXJyID0gdmFsaWRhdGVfbW92ZV9hcmVhcyhjdHgsIHNyY192bWEsIGRzdF92bWEpO1xcbjE5Nzk6XFx0XFx0aWYgKGVycilcXG4xOTgwOlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xOTgxOlxcdFxcbjE5ODI6XFx0XFx0Zm9yIChzcmNfYWRkciA9IHNyY19zdGFydCwgZHN0X2FkZHIgPSBkc3Rfc3RhcnQsIHNyY19lbmQgPSBzcmNfc3RhcnQgKyBsZW47XFxuMTk4MzpcXHRcXHQgICAgIHNyY19hZGRyIFxcdTAwM2Mgc3JjX2VuZDspIHtcXG4xOTg0OlxcdFxcdFxcdHNwaW5sb2NrX3QgKnB0bDtcXG4xOTg1OlxcdFxcdFxcdHBtZF90IGRzdF9wbWR2YWw7XFxuMTk4NjpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHN0ZXBfc2l6ZTtcXG4xOTg3OlxcdFxcbjE5ODg6XFx0XFx0XFx0LypcXG4xOTg5OlxcdFxcdFxcdCAqIEJlbG93IHdvcmtzIGJlY2F1c2UgYW5vbnltb3VzIGFyZWEgd291bGQgbm90IGhhdmUgYVxcbjE5OTA6XFx0XFx0XFx0ICogdHJhbnNwYXJlbnQgaHVnZSBQVUQuIElmIGZpbGUtYmFja2VkIHN1cHBvcnQgaXMgYWRkZWQsXFxuMTk5MTpcXHRcXHRcXHQgKiB0aGF0IGNhc2Ugd291bGQgbmVlZCB0byBiZSBoYW5kbGVkIGhlcmUuXFxuMTk5MjpcXHRcXHRcXHQgKi9cXG4xOTkzOlxcdFxcdFxcdHNyY19wbWQgPSBtbV9maW5kX3BtZChtbSwgc3JjX2FkZHIpO1xcbjE5OTQ6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFzcmNfcG1kKSkge1xcbjE5OTU6XFx0XFx0XFx0XFx0aWYgKCEobW9kZSBcXHUwMDI2IFVGRkRJT19NT1ZFX01PREVfQUxMT1dfU1JDX0hPTEVTKSkge1xcbjE5OTY6XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVOT0VOVDtcXG4xOTk3OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjE5OTg6XFx0XFx0XFx0XFx0fVxcbjE5OTk6XFx0XFx0XFx0XFx0c3JjX3BtZCA9IG1tX2FsbG9jX3BtZChtbSwgc3JjX2FkZHIpO1xcbjIwMDA6XFx0XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFzcmNfcG1kKSkge1xcbjIwMDE6XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4yMDAyOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjIwMDM6XFx0XFx0XFx0XFx0fVxcbjIwMDQ6XFx0XFx0XFx0fVxcbjIwMDU6XFx0XFx0XFx0ZHN0X3BtZCA9IG1tX2FsbG9jX3BtZChtbSwgZHN0X2FkZHIpO1xcbjIwMDY6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFkc3RfcG1kKSkge1xcbjIwMDc6XFx0XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4yMDA4OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjIwMDk6XFx0XFx0XFx0fVxcbjIwMTA6XFx0XFxuMjAxMTpcXHRcXHRcXHRkc3RfcG1kdmFsID0gcG1kcF9nZXRfbG9ja2xlc3MoZHN0X3BtZCk7XFxuMjAxMjpcXHRcXHRcXHQvKlxcbjIwMTM6XFx0XFx0XFx0ICogSWYgdGhlIGRzdF9wbWQgaXMgbWFwcGVkIGFzIFRIUCBkb24ndCBvdmVycmlkZSBpdCBhbmQganVzdFxcbjIwMTQ6XFx0XFx0XFx0ICogYmUgc3RyaWN0LiBJZiBkc3RfcG1kIGNoYW5nZXMgaW50byBUUEggYWZ0ZXIgdGhpcyBjaGVjaywgdGhlXFxuMjAxNTpcXHRcXHRcXHQgKiBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgcmV0cnlcXG4yMDE2OlxcdFxcdFxcdCAqIHdoaWxlIG1vdmVfcGFnZXNfcHRlKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgZmFpbC5cXG4yMDE3OlxcdFxcdFxcdCAqL1xcbjIwMTg6XFx0XFx0XFx0aWYgKHVubGlrZWx5KHBtZF90cmFuc19odWdlKGRzdF9wbWR2YWwpKSkge1xcbjIwMTk6XFx0XFx0XFx0XFx0ZXJyID0gLUVFWElTVDtcXG4yMDIwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjIwMjE6XFx0XFx0XFx0fVxcbjIwMjI6XFx0XFxuMjAyMzpcXHRcXHRcXHRwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHNyY19wbWQsIHNyY192bWEpO1xcbjIwMjQ6XFx0XFx0XFx0aWYgKHB0bCkge1xcbjIwMjU6XFx0XFx0XFx0XFx0LyogQ2hlY2sgaWYgd2UgY2FuIG1vdmUgdGhlIHBtZCB3aXRob3V0IHNwbGl0dGluZyBpdC4gKi9cXG4yMDI2OlxcdFxcdFxcdFxcdGlmIChtb3ZlX3NwbGl0c19odWdlX3BtZChkc3RfYWRkciwgc3JjX2FkZHIsIHNyY19zdGFydCArIGxlbikgfHxcXG4yMDI3OlxcdFxcdFxcdFxcdCAgICAhcG1kX25vbmUoZHN0X3BtZHZhbCkpIHtcXG4yMDI4OlxcdFxcdFxcdFxcdFxcdC8qIENhbiBiZSBhIG1pZ3JhdGlvbiBlbnRyeSAqL1xcbjIwMjk6XFx0XFx0XFx0XFx0XFx0aWYgKHBtZF9wcmVzZW50KCpzcmNfcG1kKSkge1xcbjIwMzA6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBtZF9mb2xpbygqc3JjX3BtZCk7XFxuMjAzMTpcXHRcXG4yMDMyOlxcdFxcdFxcdFxcdFxcdFxcdGlmICghaXNfaHVnZV96ZXJvX2ZvbGlvKGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbjIwMzM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICFQYWdlQW5vbkV4Y2x1c2l2ZShcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA0OjAwOjA4LjE4NzQ3NzA3OFoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzU5NTAxMjUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBgbW92ZV9wYWdlc2AgYW5kIFVzZXJmYXVsdGZkcyoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBndXRzIG9mIGBtb3ZlX3BhZ2VzYCB3aXRoaW4gdGhlIGBtbS91c2VyZmF1bHRmZC5jYCBmaWxlLiBJJ3ZlIGJlZW4gd29ya2luZyB3aXRoIHVzZXJmYXVsdGZkIGFuZCBpdHMgaW50ZXJhY3Rpb25zIHdpdGggcGFnZSBtaWdyYXRpb24gYW5kIG5vdyBJIHdhbnQgdG8gZ2V0IGEgbW9yZSBjb25jcmV0ZSB1bmRlcnN0YW5kaW5nIG9mIGl0cyBmdW5jdGlvbmFsaXR5LiBXaGF0IHNwZWNpZmljIG51YW5jZXMgYXJlIHRoZXJlIGluIGBtb3ZlX3BhZ2VzYCB3aXRoIHJlc3BlY3QgdG8gdXNlcmZhdWx0ZmQ/IEFyZSB0aGVyZSBhbnkgY2xldmVyIHRyaWNrcyBvciBvcHRpbWlzYXRpb25zPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBwZXJmb3JtYW5jZSBhbmQgY29uY3VycmVuY3ksIGdpdmVuIHRoaXMgaXMgbGlrZWx5IGEgaG90IHBhdGg/IEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIHVzZXJmYXVsdGZkIG1lY2hhbmlzbSBoYW5kbGVzIHBhZ2UgZmF1bHRzIGR1cmluZyB0aGUgbWlncmF0aW9uIHByb2Nlc3MgaXRzZWxmLiBBcmUgdGhlIHBhZ2UgZmF1bHRzIHJlLXRyaWdnZXJlZCBhbmQgaG93IGFyZSB0aGV5IHRyYWNrZWQ/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGluIGRldGFpbCB0byBhc3Nlc3MgaXRzIHN1aXRhYmlsaXR5IGluIG15IGN1cnJlbnQgcHJvamVjdC4gTGV0J3Mgc2VlIGhvdyB0aGUga2VybmVsIGVuZ2luZWVycyBoYW5kbGVkIGFsbCBvZiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzMzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwNDowMDoxMS41NDY5ODIwOVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjgxOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdXNlcmZhdWx0ZmQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDM0LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjAzNDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRzcGluX3VubG9jayhwdGwpO1xcbjIwMzU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVCVVNZO1xcbjIwMzY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjAzNzpcXHRcXHRcXHRcXHRcXHRcXHR9XFxuMjAzODpcXHRcXHRcXHRcXHRcXHR9XFxuMjAzOTpcXHRcXG4yMDQwOlxcdFxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrKHB0bCk7XFxuMjA0MTpcXHRcXHRcXHRcXHRcXHRzcGxpdF9odWdlX3BtZChzcmNfdm1hLCBzcmNfcG1kLCBzcmNfYWRkcik7XFxuMjA0MjpcXHRcXHRcXHRcXHRcXHQvKiBUaGUgZm9saW8gd2lsbCBiZSBzcGxpdCBieSBtb3ZlX3BhZ2VzX3B0ZSgpICovXFxuMjA0MzpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yMDQ0OlxcdFxcdFxcdFxcdH1cXG4yMDQ1OlxcdFxcbjIwNDY6XFx0XFx0XFx0XFx0ZXJyID0gbW92ZV9wYWdlc19odWdlX3BtZChtbSwgZHN0X3BtZCwgc3JjX3BtZCxcXG4yMDQ3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgZHN0X3BtZHZhbCwgZHN0X3ZtYSwgc3JjX3ZtYSxcXG4yMDQ4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgZHN0X2FkZHIsIHNyY19hZGRyKTtcXG4yMDQ5OlxcdFxcdFxcdFxcdHN0ZXBfc2l6ZSA9IEhQQUdFX1BNRF9TSVpFO1xcbjIwNTA6XFx0XFx0XFx0fSBlbHNlIHtcXG4yMDUxOlxcdFxcdFxcdFxcdGxvbmcgcmV0O1xcbjIwNTI6XFx0XFxuMjA1MzpcXHRcXHRcXHRcXHRpZiAocG1kX25vbmUoKnNyY19wbWQpKSB7XFxuMjA1NDpcXHRcXHRcXHRcXHRcXHRpZiAoIShtb2RlIFxcdTAwMjYgVUZGRElPX01PVkVfTU9ERV9BTExPV19TUkNfSE9MRVMpKSB7XFxuMjA1NTpcXHRcXHRcXHRcXHRcXHRcXHRlcnIgPSAtRU5PRU5UO1xcbjIwNTY6XFx0XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjA1NzpcXHRcXHRcXHRcXHRcXHR9XFxuMjA1ODpcXHRcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkoX19wdGVfYWxsb2MobW0sIHNyY19wbWQpKSkge1xcbjIwNTk6XFx0XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4yMDYwOlxcdFxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjIwNjE6XFx0XFx0XFx0XFx0XFx0fVxcbjIwNjI6XFx0XFx0XFx0XFx0fVxcbjIwNjM6XFx0XFxuMjA2NDpcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkocHRlX2FsbG9jKG1tLCBkc3RfcG1kKSkpIHtcXG4yMDY1OlxcdFxcdFxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuMjA2NjpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4yMDY3OlxcdFxcdFxcdFxcdH1cXG4yMDY4OlxcdFxcbjIwNjk6XFx0XFx0XFx0XFx0cmV0ID0gbW92ZV9wYWdlc19wdGVzKG1tLCBkc3RfcG1kLCBzcmNfcG1kLFxcbjIwNzA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgZHN0X3ZtYSwgc3JjX3ZtYSwgZHN0X2FkZHIsXFxuMjA3MTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBzcmNfYWRkciwgc3JjX2VuZCAtIHNyY19hZGRyLCBtb2RlKTtcXG4yMDcyOlxcdFxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjIwNzM6XFx0XFx0XFx0XFx0XFx0ZXJyID0gcmV0O1xcbjIwNzQ6XFx0XFx0XFx0XFx0ZWxzZVxcbjIwNzU6XFx0XFx0XFx0XFx0XFx0c3RlcF9zaXplID0gcmV0O1xcbjIwNzY6XFx0XFx0XFx0fVxcbjIwNzc6XFx0XFxuMjA3ODpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4yMDc5OlxcdFxcbjIwODA6XFx0XFx0XFx0aWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XFxuMjA4MTpcXHRcXHRcXHRcXHQvKiBEbyBub3Qgb3ZlcnJpZGUgYW4gZXJyb3IgKi9cXG4yMDgyOlxcdFxcdFxcdFxcdGlmICghZXJyIHx8IGVyciA9PSAtRUFHQUlOKVxcbjIwODM6XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVJTlRSO1xcbjIwODQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjA4NTpcXHRcXHRcXHR9XFxuMjA4NjpcXHRcXG4yMDg3OlxcdFxcdFxcdGlmIChlcnIpIHtcXG4yMDg4OlxcdFxcdFxcdFxcdGlmIChlcnIgPT0gLUVBR0FJTikge1xcbjIwODk6XFx0XFx0XFx0XFx0XFx0ZXJyID0gMDtcXG4yMDkwOlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjIwOTE6XFx0XFx0XFx0XFx0fVxcbjIwOTI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjA5MzpcXHRcXHRcXHR9XFxuMjA5NDpcXHRcXG4yMDk1OlxcdFxcdFxcdC8qIFByb2NlZWQgdG8gdGhlIG5leHQgcGFnZSAqL1xcbjIwOTY6XFx0XFx0XFx0ZHN0X2FkZHIgKz0gc3RlcF9zaXplO1xcbjIwOTc6XFx0XFx0XFx0c3JjX2FkZHIgKz0gc3RlcF9zaXplO1xcbjIwOTg6XFx0XFx0XFx0bW92ZWQgKz0gc3RlcF9zaXplO1xcbjIwOTk6XFx0XFx0fVxcbjIxMDA6XFx0XFxuMjEwMTpcXHRvdXRfdW5sb2NrOlxcbjIxMDI6XFx0XFx0dXBfcmVhZChcXHUwMDI2Y3R4LVxcdTAwM2VtYXBfY2hhbmdpbmdfbG9jayk7XFxuMjEwMzpcXHRcXHR1ZmZkX21vdmVfdW5sb2NrKGRzdF92bWEsIHNyY192bWEpO1xcbjIxMDQ6XFx0b3V0OlxcbjIxMDU6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKG1vdmVkIFxcdTAwM2MgMCk7XFxuMjEwNjpcXHRcXHRWTV9XQVJOX09OX09OQ0UoZXJyIFxcdTAwM2UgMCk7XFxuMjEwNzpcXHRcXHRWTV9XQVJOX09OX09OQ0UoIW1vdmVkIFxcdTAwMjZcXHUwMDI2ICFlcnIpO1xcbjIxMDg6XFx0XFx0cmV0dXJuIG1vdmVkID8gbW92ZWQgOiBlcnI7XFxuMjEwOTpcXHR9XFxuMjExMDpcXHRcXG4yMTExOlxcdHN0YXRpYyBib29sIHZtYV9jYW5fdXNlcmZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bV9mbGFnc190IHZtX2ZsYWdzLFxcbjIxMTI6XFx0XFx0XFx0ICAgICAgIGJvb2wgd3BfYXN5bmMpXFxuMjExMzpcXHR7XFxuMjExNDpcXHRcXHRjb25zdCBzdHJ1Y3Qgdm1fdWZmZF9vcHMgKm9wcyA9IHZtYV91ZmZkX29wcyh2bWEpO1xcbjIxMTU6XFx0XFxuMjExNjpcXHRcXHRpZiAodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IChWTV9EUk9QUEFCTEUgfCBWTV9TSEFET1dfU1RBQ0spKVxcbjIxMTc6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjIxMTg6XFx0XFxuMjExOTpcXHRcXHRpZiAoIWlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpIFxcdTAwMjZcXHUwMDI2ICh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fU1BFQ0lBTCkpXFxuMjEyMDpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMjEyMTpcXHRcXG4yMTIyOlxcdFxcdHZtX2ZsYWdzIFxcdTAwMjY9IF9fVk1fVUZGRF9GTEFHUztcXG4yMTIzOlxcdFxcbjIxMjQ6XFx0XFx0LypcXG4yMTI1OlxcdFxcdCAqIElmIFdQIGlzIHRoZSBvbmx5IG1vZGUgZW5hYmxlZCBhbmQgY29udGV4dCBpcyB3cCBhc3luYywgYWxsb3cgYW55XFxuMjEyNjpcXHRcXHQgKiBtZW1vcnkgdHlwZS5cXG4yMTI3OlxcdFxcdCAqL1xcbjIxMjg6XFx0XFx0aWYgKHdwX2FzeW5jIFxcdTAwMjZcXHUwMDI2ICh2bV9mbGFncyA9PSBWTV9VRkZEX1dQKSlcXG4yMTI5OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjIxMzA6XFx0XFxuMjEzMTpcXHRcXHQvKiBGb3IgYW55IG90aGVyIG1vZGUgcmVqZWN0IFZNQXMgdGhhdCBkb24ndCBpbXBsZW1lbnQgdm1fdWZmZF9vcHMgKi9cXG4yMTMyOlxcdFxcdGlmICghb3BzKVxcbjIxMzM6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwNDowMDoxMS41NDc0NTM5OFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTg5Mjc4ODA3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBtb3ZlX3BhZ2VzYCBCdWcgYW5kIEl0cyBGaXgqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlzc2VjdGluZyB0aGlzIHBhdGNoIGFuZCBJIHRoaW5rIEkndmUgZ290IGEgZ29vZCBoYW5kbGUgb24gd2hhdCdzIGdvaW5nIG9uIGhlcmUuIFRoZSBjb3JlIGlzc3VlIGlzIHdpdGggaG93IHRoZSBgZXJyYCB2YXJpYWJsZSBpcyBoYW5kbGVkIHdpdGhpbiB0aGlzIGxvb3AuIEluaXRpYWxseSwgSSB3YXMgYSBiaXQgY29uZnVzZWQgYnkgdGhlIGxvZ2ljLCBlc3BlY2lhbGx5IHdpdGggdGhhdCBgcmV0dXJuIG1vdmVkID8gbW92ZWQgOiBlcnI7YCBhdCB0aGUgZW5kLiBCdXQgbm93IGl0IG1ha2VzIHNlbnNlLiBJdCdzIGVzc2VudGlhbGx5IHJldHVybmluZyBlaXRoZXIgdGhlIG51bWJlciBvZiBieXRlcyBtb3ZlZCBvciB0aGUgZXJyb3IgY29kZS4gVGhlIHByb2JsZW0gYXJpc2VzIHdoZW4gd2UgZ2V0IGFuIGAtRUFHQUlOYCBlcnJvci5cblxuSSBzZWUgaXQgbm93OiB0aGUgYnVnIHN0ZW1zIGZyb20gYGVycmAgYmVpbmcgc2V0IHRvIGAtRUFHQUlOYCBpbnNpZGUgdGhlIGxvb3AsIGFuZCB0aGVuIGBjb250aW51ZWAgaXMgY2FsbGVkICp3aXRob3V0KiByZXNldHRpbmcgYGVycmAgdG8gMC4gVGhpcyBpcyB0aGUgY3J1Y2lhbCBiaXQuIElmLCBzYXksIGBtb3ZlX3BhZ2VzX3B0ZXNgIHJldHVybnMgYC1FQUdBSU5gLCB0aGUgY29kZSBjb250aW51ZXMgdGhlIGxvb3AuIFRoZW4sIHRoZSBzdWJzZXF1ZW50IGV4ZWN1dGlvbiBpbnNpZGUgdGhlIGxvb3AgKmRvZXNuJ3QqIHJlc2V0IGBlcnJgIGF0IHRoZSBzdGFydCBvZiB0aGUgbmV4dCBpdGVyYXRpb24hIFRoaXMgaXMgdGhlIHNtb2tpbmcgZ3VuIVxuXG5Fc3NlbnRpYWxseSwgaWYgYSByZXRyeSBpcyBuZWVkZWQgYmVjYXVzZSBvZiBgLUVBR0FJTmAsIHRoZSBsb29wIGRvZXMgKm5vdCogYWR2YW5jZSBgZHN0X2FkZHJgIGFuZCBgc3JjX2FkZHJgLiBJbnN0ZWFkLCBpdCByZXRyaWVzIHRoZSBzYW1lIG1lbW9yeSBsb2NhdGlvbnMgcmVwZWF0ZWRseS4gU2luY2UgYGVycmAgaXMgKm5vdCogcmVzZXQsIHRoZSBjaGVjayBgaWYgKGVycilgIHdpbGwgc3RpbGwgYmUgYHRydWVgLiBTaW5jZSBgZXJyYCByZW1haW5zIGAtRUFHQUlOYCwgaXQgY29udGludWVzLiBBbmQgYmVjYXVzZSB0aGUgYWRkcmVzc2VzIGRvbid0IGFkdmFuY2UsIGl0IGJlY29tZXMgYW4gaW5maW5pdGUgbG9vcCEgVGhhdCdzIGl0IVxuXG5TbywgdGhlIGZpeCBpcyBzdHJhaWdodGZvcndhcmQ6IGFkZGluZyBgZXJyID0gMDtgIGJlZm9yZSB0aGUgYGNvbnRpbnVlYCBzdGF0ZW1lbnQuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBsb29wIHJldHJpZXMgY29ycmVjdGx5LCByZXNldHRpbmcgdGhlIGVycm9yIGNvZGUgdG8gemVybyB3aGVuIGAtRUFHQUlOYCBpcyBlbmNvdW50ZXJlZCwgYW5kICp0aGVuKiB0aGUgYHNyY19hZGRyYCBhbmQgYGRzdF9hZGRyYCB3aWxsIGJlIGFkdmFuY2VkLlxuXG5Ob3csIGEgcXVpY2sgc2lkZS1ub3RlIHRvIG1ha2Ugc3VyZSBpdCdzIG5vdCBhIEtNU0FOIGlzc3VlIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkuIGBlcnJgIGFuZCBgc3RlcF9zaXplYCBhcmUgbG9jYWwgdmFyaWFibGVzLiBUaGVyZSdzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gVGhpcyBpc24ndCBhYm91dCBLTVNBTjsgaXQncyBhIHB1cmUgY29udHJvbC1mbG93IGJ1ZyB0aGF0IGNhbiBiZSBmb3VuZCB3aXRoIHJlZ3VsYXIgZnV6emluZyAoZS5nLiwgS0FTQU4sIExPQ0tERVAsIHNvZnQgbG9ja3VwKS4gSXQncyBhIGhhbmcuIFRoZSBmaXggaXMgYSBjb250cm9sIGZsb3cgY2hhbmdlLiBOZWVkc0tNU0FOID0gZmFsc2UuXG5cbkluIGEgbnV0c2hlbGwsIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgaGFuZyBvciBpbmZpbml0ZSBsb29wIGNvbmRpdGlvbiBpbiB0aGUgYG1vdmVfcGFnZXMoKWAgZnVuY3Rpb24gd2l0aGluIGBtbS91c2VyZmF1bHRmZC5jYC4gVGhlIGJ1ZyBvY2N1cnMgd2hlbiBhbiBvcGVyYXRpb24gZmFpbHMgd2l0aCBgLUVBR0FJTmAuIEFmdGVyIHRoYXQsIHRoZSBsb29wIGZhaWxzIHRvIHJlc2V0IGBlcnJgIHRvIDAsIGNhdXNpbmcgaXQgdG8gZW5kbGVzc2x5IHJldHJ5IHRoZSBzYW1lIGFkZHJlc3Nlcywgd2l0aG91dCBhZHZhbmNpbmcgYHNyY19hZGRyYCBvciBgZHN0X2FkZHJgLiBUaGUgZml4IHJlc2V0cyB0aGUgZXJyIGJlZm9yZSBjb250aW51aW5nLiBUaGlzIGZpeCBpcyBub3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSwgb25seSBjb250cm9sIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczOTUsIk91dHB1dFRva2VucyI6MjU0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM0MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA0OjAwOjI3LjQ0MDI0NTIyWiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGNvbnRyb2wgZmxvdyBidWcgaW4gYG1vdmVfcGFnZXMoKWAgaW4gYG1tL3VzZXJmYXVsdGZkLmNgLiBQcmlvciB0byB0aGUgcGF0Y2gsIGlmIGEgcGFnZSBtb3ZlIG9wZXJhdGlvbiByZXR1cm5lZCBgLUVBR0FJTmAsIHRoZSBsb29wIHdvdWxkIGBjb250aW51ZWAgYnV0IGZhaWwgdG8gcmVzZXQgdGhlIGBlcnJgIHZhcmlhYmxlIHRvIDAuIEJlY2F1c2UgYGVycmAgaXMgbm90IHVuY29uZGl0aW9uYWxseSBvdmVyd3JpdHRlbiBvbiBzdWNjZXNzZnVsIHBhZ2UgbW92ZXMgKGUuZy4sIHdoZW4gYG1vdmVfcGFnZXNfcHRlcygpYCByZXR1cm5zIGEgcG9zaXRpdmUgc3RlcCBzaXplKSwgYGVycmAgd291bGQgcmVtYWluIGAtRUFHQUlOYC4gVGhpcyBjYXVzZWQgdGhlIGxvb3AgdG8gaW5maW5pdGVseSByZXRyeSB0aGUgc2FtZSBhZGRyZXNzIHdpdGhvdXQgYWR2YW5jaW5nIGBzcmNfYWRkcmAgYW5kIGBkc3RfYWRkcmAsIGxlYWRpbmcgdG8gYSBoYW5nLiBUaGUgcGF0Y2ggc2ltcGx5IHJlc2V0cyBgZXJyID0gMGAgYmVmb3JlIGNvbnRpbnVpbmcsIGZpeGluZyB0aGUgaW5maW5pdGUgbG9vcC5cXG5cXG5UaGlzIGJ1ZyBpcyBhIHB1cmUgY29udHJvbCBmbG93IGlzc3VlIHJlc3VsdGluZyBpbiBhIGhhbmcuIEl0IGRvZXMgbm90IGludm9sdmUgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgbGVhayB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgZnV6emluZyAod2l0aCBLQVNBTiwgTE9DS0RFUCwgYW5kIHNvZnQgbG9ja3VwIGRldGVjdG9ycykgaXMgcGVyZmVjdGx5IGNhcGFibGUgb2YgZGV0ZWN0aW5nIGhhbmdzIGFuZCBpbmZpbml0ZSBsb29wcy4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzayBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBwYXRjaCB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBjb250cm9sIGZsb3cgYnVnIGluIGBtb3ZlX3BhZ2VzKClgIGluIGBtbS91c2VyZmF1bHRmZC5jYC4gUHJpb3IgdG8gdGhlIHBhdGNoLCBpZiBhIHBhZ2UgbW92ZSBvcGVyYXRpb24gcmV0dXJuZWQgYC1FQUdBSU5gLCB0aGUgbG9vcCB3b3VsZCBgY29udGludWVgIGJ1dCBmYWlsIHRvIHJlc2V0IHRoZSBgZXJyYCB2YXJpYWJsZSB0byAwLiBCZWNhdXNlIGBlcnJgIGlzIG5vdCB1bmNvbmRpdGlvbmFsbHkgb3ZlcndyaXR0ZW4gb24gc3VjY2Vzc2Z1bCBwYWdlIG1vdmVzIChlLmcuLCB3aGVuIGBtb3ZlX3BhZ2VzX3B0ZXMoKWAgcmV0dXJucyBhIHBvc2l0aXZlIHN0ZXAgc2l6ZSksIGBlcnJgIHdvdWxkIHJlbWFpbiBgLUVBR0FJTmAuIFRoaXMgY2F1c2VkIHRoZSBsb29wIHRvIGluZmluaXRlbHkgcmV0cnkgdGhlIHNhbWUgYWRkcmVzcyB3aXRob3V0IGFkdmFuY2luZyBgc3JjX2FkZHJgIGFuZCBgZHN0X2FkZHJgLCBsZWFkaW5nIHRvIGEgaGFuZy4gVGhlIHBhdGNoIHNpbXBseSByZXNldHMgYGVyciA9IDBgIGJlZm9yZSBjb250aW51aW5nLCBmaXhpbmcgdGhlIGluZmluaXRlIGxvb3AuXFxuXFxuVGhpcyBidWcgaXMgYSBwdXJlIGNvbnRyb2wgZmxvdyBpc3N1ZSByZXN1bHRpbmcgaW4gYSBoYW5nLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGxlYWsgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIGZ1enppbmcgKHdpdGggS0FTQU4sIExPQ0tERVAsIGFuZCBzb2Z0IGxvY2t1cCBkZXRlY3RvcnMpIGlzIHBlcmZlY3RseSBjYXBhYmxlIG9mIGRldGVjdGluZyBoYW5ncyBhbmQgaW5maW5pdGUgbG9vcHMuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgcGF0Y2ggdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzpx96[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-19 03:12:06 +0000 UTC FinishedAt: 2026-08-19 04:00:30 +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": "f5f9327e251a4efb9a98774093ef4675a4b170b9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USERFAULTFD", "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": "f5f9327e251a4efb9a98774093ef4675a4b170b9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USERFAULTFD", "TRANSPARENT_HUGEPAGE" ], "series_id": "6ed49760-aed3-4f4d-87cb-53e2a51703be" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "userfaultfd_ioctl", "userfaultfd_move", "move_pages_huge_pmd" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTRVJGQVVMVEZEJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXNlcmZhdWx0ZmRfaW9jdGwmIzM0OywKICAgICYjMzQ7dXNlcmZhdWx0ZmRfbW92ZSYjMzQ7LAogICAgJiMzNDttb3ZlX3BhZ2VzX2h1Z2VfcG1kJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBjb250cm9sIGZsb3cgYnVnIGluIGBtb3ZlX3BhZ2VzKClgIGluIGBtbS91c2VyZmF1bHRmZC5jYC4gUHJpb3IgdG8gdGhlIHBhdGNoLCBpZiBhIHBhZ2UgbW92ZSBvcGVyYXRpb24gcmV0dXJuZWQgYC1FQUdBSU5gLCB0aGUgbG9vcCB3b3VsZCBgY29udGludWVgIGJ1dCBmYWlsIHRvIHJlc2V0IHRoZSBgZXJyYCB2YXJpYWJsZSB0byAwLiBCZWNhdXNlIGBlcnJgIGlzIG5vdCB1bmNvbmRpdGlvbmFsbHkgb3ZlcndyaXR0ZW4gb24gc3VjY2Vzc2Z1bCBwYWdlIG1vdmVzIChlLmcuLCB3aGVuIGBtb3ZlX3BhZ2VzX3B0ZXMoKWAgcmV0dXJucyBhIHBvc2l0aXZlIHN0ZXAgc2l6ZSksIGBlcnJgIHdvdWxkIHJlbWFpbiBgLUVBR0FJTmAuIFRoaXMgY2F1c2VkIHRoZSBsb29wIHRvIGluZmluaXRlbHkgcmV0cnkgdGhlIHNhbWUgYWRkcmVzcyB3aXRob3V0IGFkdmFuY2luZyBgc3JjX2FkZHJgIGFuZCBgZHN0X2FkZHJgLCBsZWFkaW5nIHRvIGEgaGFuZy4gVGhlIHBhdGNoIHNpbXBseSByZXNldHMgYGVyciA9IDBgIGJlZm9yZSBjb250aW51aW5nLCBmaXhpbmcgdGhlIGluZmluaXRlIGxvb3AuXG5cblRoaXMgYnVnIGlzIGEgcHVyZSBjb250cm9sIGZsb3cgaXNzdWUgcmVzdWx0aW5nIGluIGEgaGFuZy4gSXQgZG9lcyBub3QgaW52b2x2ZSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBsZWFrIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBTdGFuZGFyZCBmdXp6aW5nICh3aXRoIEtBU0FOLCBMT0NLREVQLCBhbmQgc29mdCBsb2NrdXAgZGV0ZWN0b3JzKSBpcyBwZXJmZWN0bHkgY2FwYWJsZSBvZiBkZXRlY3RpbmcgaGFuZ3MgYW5kIGluZmluaXRlIGxvb3BzLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGlzIHBhdGNoIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIFVGRkRJT19NT1ZFIGlvY3RsIGhhbmRsZXIgd2hlcmUgYW4gLUVBR0FJTiBlcnJvciB3YXMgbm90IHJlc2V0IHRvIDAgYmVmb3JlIGNvbnRpbnVpbmcgdGhlIGxvb3AuIElmIG5vdCByZXNldCwgYSBzdWJzZXF1ZW50IHN1Y2Nlc3NmdWwgcGFnZSBtb3ZlIHdvdWxkIGxlYXZlIGVyciBhcyAtRUFHQUlOLCBjYXVzaW5nIHRoZSBsb29wIHRvIHNraXAgYWR2YW5jaW5nIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3Nlcy4gVGhpcyByZXN1bHRzIGluIGFuIGluZmluaXRlIGxvb3Agb3IgcmVwZWF0ZWQgYXR0ZW1wdHMgdG8gbW92ZSB0aGUgc2FtZSBwYWdlLiBUaGUgZml4IGVuc3VyZXMgZXJyIGlzIHJlc2V0IHRvIDAsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgdXNlcmZhdWx0ZmQgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkMWM0ODZkYTlhY2Q0ZmExN2E1NjViZWVhYzQyMjc4YzljZTcwM2YxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTkgMDM6NTc6MDEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdXNlcmZhdWx0ZmQuYyBiL21tL3VzZXJmYXVsdGZkLmNcbmluZGV4IGMzYWRlZGFhZjdkNTQuLmVjNWQ1MTFiZDE3OTEgMTAwNjQ0XG4tLS0gYS9tbS91c2VyZmF1bHRmZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS91c2VyZmF1bHRmZC5jXG5AQCAtMjA4NSw4ICYjNDM7MjA4NSwxMCBAQCBzdGF0aWMgc3NpemVfdCBtb3ZlX3BhZ2VzKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsXG4gXHRcdH1cbiBcbiBcdFx0aWYgKGVycikge1xuLVx0XHRcdGlmIChlcnIgPT0gLUVBR0FJTilcbiYjNDM7XHRcdFx0aWYgKGVyciA9PSAtRUFHQUlOKSB7XG4mIzQzO1x0XHRcdFx0ZXJyID0gMDtcbiBcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHR9XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNFUkZBVUxURkQmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1c2VyZmF1bHRmZF9pb2N0bCYjMzQ7LAogICAgJiMzNDt1c2VyZmF1bHRmZF9tb3ZlJiMzNDssCiAgICAmIzM0O21vdmVfcGFnZXNfaHVnZV9wbWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIFVGRkRJT19NT1ZFIGlvY3RsIGhhbmRsZXIgd2hlcmUgYW4gLUVBR0FJTiBlcnJvciB3YXMgbm90IHJlc2V0IHRvIDAgYmVmb3JlIGNvbnRpbnVpbmcgdGhlIGxvb3AuIElmIG5vdCByZXNldCwgYSBzdWJzZXF1ZW50IHN1Y2Nlc3NmdWwgcGFnZSBtb3ZlIHdvdWxkIGxlYXZlIGVyciBhcyAtRUFHQUlOLCBjYXVzaW5nIHRoZSBsb29wIHRvIHNraXAgYWR2YW5jaW5nIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3Nlcy4gVGhpcyByZXN1bHRzIGluIGFuIGluZmluaXRlIGxvb3Agb3IgcmVwZWF0ZWQgYXR0ZW1wdHMgdG8gbW92ZSB0aGUgc2FtZSBwYWdlLiBUaGUgZml4IGVuc3VyZXMgZXJyIGlzIHJlc2V0IHRvIDAsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgdXNlcmZhdWx0ZmQgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkMWM0ODZkYTlhY2Q0ZmExN2E1NjViZWVhYzQyMjc4YzljZTcwM2YxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTkgMDM6NTc6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS91c2VyZmF1bHRmZC5jIGIvbW0vdXNlcmZhdWx0ZmQuYwppbmRleCBjM2FkZWRhYWY3ZDU0Li5lYzVkNTExYmQxNzkxIDEwMDY0NAotLS0gYS9tbS91c2VyZmF1bHRmZC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3VzZXJmYXVsdGZkLmMKQEAgLTIwODUsOCAmIzQzOzIwODUsMTAgQEAgc3RhdGljIHNzaXplX3QgbW92ZV9wYWdlcyhzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsIHVuc2lnbmVkIGxvbmcgZHN0X3N0YXJ0LAogCQl9CiAKIAkJaWYgKGVycikgewotCQkJaWYgKGVyciA9PSAtRUFHQUlOKQomIzQzOwkJCWlmIChlcnIgPT0gLUVBR0FJTikgewomIzQzOwkJCQllcnIgPSAwOwogCQkJCWNvbnRpbnVlOwomIzQzOwkJCX0KIAkJCWJyZWFrOwogCQl9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk1NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBVc2VyZmF1bHRmZCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0JiMzOTtzIHRvdWNoZWQgYG1tL3VzZXJmYXVsdGZkLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBtb3ZlX3BhZ2VzYCBmdW5jdGlvbi4gSG1tLCBsb29rcyBsaWtlIHRoZXJlJiMzOTtzIGEgbW9kaWZpY2F0aW9uIGluIHRoZSBlcnJvciBoYW5kbGluZy4gSW5pdGlhbGx5LCBpZiBgbW92ZV9wYWdlc2AgcmV0dXJuZWQgYC1FQUdBSU5gLCBpdCB3b3VsZCBzaW1wbHkgYmUgcGFzc2VkIGJhY2sgdXAgdGhlIGNhbGwgc3RhY2suIE5vdywgaXQgYXBwZWFycyB0aGlzIGAtRUFHQUlOYCBpcyBiZWluZyBjYXVnaHQsIHRoZSBlcnJvciBjb2RlIGlzIGJlaW5nIHJlc2V0IHRvIDAsIGFuZCB0aGUgbG9vcCBjb250aW51ZXMuIEludGVyZXN0aW5nLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQmIzM5O3MgZHJpdmluZyB0aGlzIGNoYW5nZT8gV2h5IGFyZSB3ZSBhYnNvcmJpbmcgYC1FQUdBSU5gIGFuZCBjb250aW51aW5nIHRoZSBgbW92ZV9wYWdlc2Agb3BlcmF0aW9uPyBJcyB0aGlzIHJlbGF0ZWQgdG8gc29tZSBraW5kIG9mIHJldHJ5IGxvZ2ljPyBJcyBpdCBpbnRlbmRlZCB0byBoYW5kbGUgdHJhbnNpZW50IHJlc291cmNlIGNvbnRlbnRpb24/IElzIGl0IHNhZmUgdG8gaWdub3JlIGEgZmFpbGVkIGBtb3ZlX3BhZ2VzYCBvcGVyYXRpb24/IEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb250ZXh0LgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBzaXR1YXRpb25zIHRyaWdnZXIgYW4gYC1FQUdBSU5gIGZyb20gYG1vdmVfcGFnZXNgIHdpdGhpbiB0aGlzIGB1c2VyZmF1bHRmZGAgY29udGV4dC4gVGhlbiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgYWxsIHRoZSBjYWxsZXJzIG9mIGBtb3ZlX3BhZ2VzYCB3aXRoaW4gYG1tL3VzZXJmYXVsdGZkLmNgIGFuZCBob3cgdGhleSByZWFjdCB0byB0aGUgcmV0dXJuZWQgZXJyb3IgY29kZXMuIFRoaXMgbG9va3MgbGlrZSBhIHBvdGVudGlhbGx5IHNpZ25pZmljYW50IGNoYW5nZSB0byB0aGUgZmF1bHQgaGFuZGxpbmcgYmVoYXZpb3IsIHNvIGl0IHdhcnJhbnRzIGEgdGhvcm91Z2ggaW52ZXN0aWdhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggZnJvbSB0aGUgcG9pbnQgb2YgdGhlIHVzZXJmYXVsdCB0byB0aGlzIHNwZWNpZmljIGBtb3ZlX3BhZ2VzYCBjYWxsIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb3ZlX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdXNlcmZhdWx0ZmQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS91c2VyZmF1bHRmZC5jPTEzODI9c3RhdGljIGludCBtb3ZlX3plcm9wYWdlX3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTE0MTQtICovXG5tbS91c2VyZmF1bHRmZC5jOjE0MTU6c3RhdGljIGxvbmcgbW92ZV9wYWdlc19wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWQsXG5tbS91c2VyZmF1bHRmZC5jLTE0MTYtXHRcdFx0ICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcbi0tXG5tbS91c2VyZmF1bHRmZC5jPTE4NTk9c3RhdGljIHZvaWQgdWZmZF9tb3ZlX3VubG9jayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0xODY3LS8qKlxubW0vdXNlcmZhdWx0ZmQuYzoxODY4OiAqIG1vdmVfcGFnZXMgLSBtb3ZlIGFyYml0cmFyeSBhbm9ueW1vdXMgcGFnZXMgb2YgYW4gZXhpc3Rpbmcgdm1hXG5tbS91c2VyZmF1bHRmZC5jLTE4NjktICogQGN0eDogcG9pbnRlciB0byB0aGUgdXNlcmZhdWx0ZmQgY29udGV4dFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTg3Ni0gKlxubW0vdXNlcmZhdWx0ZmQuYzoxODc3OiAqIG1vdmVfcGFnZXMoKSByZW1hcHMgYXJiaXRyYXJ5IGFub255bW91cyBwYWdlcyBhdG9taWNhbGx5IGluIHplcm9cbm1tL3VzZXJmYXVsdGZkLmMtMTg3OC0gKiBjb3B5LiBJdCBvbmx5IHdvcmtzIG9uIG5vbiBzaGFyZWQgYW5vbnltb3VzIHBhZ2VzIGJlY2F1c2UgdGhvc2UgY2FuXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0xODg4LSAqIHN0b3JhZ2Ugb3IgYW55IG90aGVyIEkvTyBkZXZpY2UgKE1BRFZfRE9OVEZPUksgaW4gdGhlIHNvdXJjZSB2bWFcbm1tL3VzZXJmYXVsdGZkLmM6MTg4OTogKiBhdm9pZHMgbW92ZV9wYWdlcygpIHRvIGZhaWwgd2l0aCAtRUJVU1kgaWYgdGhlIHByb2Nlc3MgZm9ya3MgYmVmb3JlXG5tbS91c2VyZmF1bHRmZC5jOjE4OTA6ICogbW92ZV9wYWdlcygpIGlzIGNhbGxlZCksIHRoZW4gaXQgd2lsbCBjYWxsIG1vdmVfcGFnZXMoKSB0byBtYXAgdGhlXG5tbS91c2VyZmF1bHRmZC5jLTE4OTEtICogcGFnZSBpbiB0aGUgZmF1bHRpbmcgYWRkcmVzcyBpbiB0aGUgZGVzdGluYXRpb24gdm1hLlxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTkwNS0gKiB0aGUgZGVzdGluYXRpb24gdmlydHVhbCBtZW1vcnkgcmFuZ2UgaXMgbm90IGEgd2hvbGUgdW5tYXBwZWQgaG9sZSxcbm1tL3VzZXJmYXVsdGZkLmM6MTkwNjogKiBtb3ZlX3BhZ2VzKCkgd2lsbCBmYWlsIHJlc3BlY3RpdmVseSB3aXRoIC1FTk9FTlQgb3IgLUVFWElTVC4gVGhpc1xubW0vdXNlcmZhdWx0ZmQuYy0xOTA3LSAqIHByb3ZpZGVzIGEgdmVyeSBzdHJpY3QgYmVoYXZpb3IgdG8gYXZvaWQgYW55IGNoYW5jZSBvZiBtZW1vcnlcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTE5MTAtICogdGltZSBmb3IgYW55IGdpdmVuIGZhdWx0aW5nIGFkZHJlc3MuIFRoaXMgbWVhbnMgdGhhdCBpZiB0d28gdGhyZWFkc1xubW0vdXNlcmZhdWx0ZmQuYzoxOTExOiAqIHRyeSB0byBib3RoIGNhbGwgbW92ZV9wYWdlcygpIG9uIHRoZSBzYW1lIGRlc3RpbmF0aW9uIGFkZHJlc3MgYXQgdGhlXG5tbS91c2VyZmF1bHRmZC5jLTE5MTItICogc2FtZSB0aW1lLCB0aGUgc2Vjb25kIHRocmVhZCB3aWxsIGdldCBhbiBleHBsaWNpdCBlcnJvciBmcm9tIHRoaXNcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTE5MjAtICogYW4gYW1vdW50IG9mIGJ5dGVzIHN1Y2Nlc3NmdWxseSBtb3ZlZC4gSWYgdGhlIHJldHZhbCByZXBvcnRzIGFcbm1tL3VzZXJmYXVsdGZkLmM6MTkyMTogKiBcJiMzNDtzaG9ydFwmIzM0OyByZW1hcCwgdGhlIG1vdmVfcGFnZXMoKSBjb21tYW5kIHNob3VsZCBiZSByZXBlYXRlZCBieVxubW0vdXNlcmZhdWx0ZmQuYy0xOTIyLSAqIHVzZXJsYW5kIHdpdGggc3JjJiM0MztyZXR2YWwsIGRzdCYjNDM7cmV2YWwsIGxlbi1yZXR2YWwgaWYgaXQgd2FudHMgdG8ga25vd1xuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTkzMy0gKi9cbm1tL3VzZXJmYXVsdGZkLmM6MTkzNDpzdGF0aWMgc3NpemVfdCBtb3ZlX3BhZ2VzKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsXG5tbS91c2VyZmF1bHRmZC5jLTE5MzUtXHRcdCAgIHVuc2lnbmVkIGxvbmcgc3JjX3N0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbiwgX191NjQgbW9kZSlcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTIwMTQtXHRcdCAqIGJlIHN0cmljdC4gSWYgZHN0X3BtZCBjaGFuZ2VzIGludG8gVFBIIGFmdGVyIHRoaXMgY2hlY2ssIHRoZVxubW0vdXNlcmZhdWx0ZmQuYzoyMDE1Olx0XHQgKiBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgcmV0cnlcbm1tL3VzZXJmYXVsdGZkLmM6MjAxNjpcdFx0ICogd2hpbGUgbW92ZV9wYWdlc19wdGUoKSB3aWxsIGRldGVjdCB0aGUgY2hhbmdlIGFuZCBmYWlsLlxubW0vdXNlcmZhdWx0ZmQuYy0yMDE3LVx0XHQgKi9cbi0tXG5tbS91c2VyZmF1bHRmZC5jLTIwNDEtXHRcdFx0XHRzcGxpdF9odWdlX3BtZChzcmNfdm1hLCBzcmNfcG1kLCBzcmNfYWRkcik7XG5tbS91c2VyZmF1bHRmZC5jOjIwNDI6XHRcdFx0XHQvKiBUaGUgZm9saW8gd2lsbCBiZSBzcGxpdCBieSBtb3ZlX3BhZ2VzX3B0ZSgpICovXG5tbS91c2VyZmF1bHRmZC5jLTIwNDMtXHRcdFx0XHRjb250aW51ZTtcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTIwNDUtXG5tbS91c2VyZmF1bHRmZC5jOjIwNDY6XHRcdFx0ZXJyID0gbW92ZV9wYWdlc19odWdlX3BtZChtbSwgZHN0X3BtZCwgc3JjX3BtZCxcbm1tL3VzZXJmYXVsdGZkLmMtMjA0Ny1cdFx0XHRcdFx0XHQgIGRzdF9wbWR2YWwsIGRzdF92bWEsIHNyY192bWEsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0yMDY4LVxubW0vdXNlcmZhdWx0ZmQuYzoyMDY5Olx0XHRcdHJldCA9IG1vdmVfcGFnZXNfcHRlcyhtbSwgZHN0X3BtZCwgc3JjX3BtZCxcbm1tL3VzZXJmYXVsdGZkLmMtMjA3MC1cdFx0XHRcdFx0ICAgICAgZHN0X3ZtYSwgc3JjX3ZtYSwgZHN0X2FkZHIsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYz00MjE2PXN0YXRpYyBpbnQgdXNlcmZhdWx0ZmRfbW92ZShzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy00MjU1LVx0aWYgKG1tZ2V0X25vdF96ZXJvKG1tKSkge1xubW0vdXNlcmZhdWx0ZmQuYzo0MjU2Olx0XHRyZXQgPSBtb3ZlX3BhZ2VzKGN0eCwgdWZmZGlvX21vdmUuZHN0LCB1ZmZkaW9fbW92ZS5zcmMsXG5tbS91c2VyZmF1bHRmZC5jLTQyNTctXHRcdFx0XHQgdWZmZGlvX21vdmUubGVuLCB1ZmZkaW9fbW92ZS5tb2RlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzIzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIHRoZSBQYWdlIE1vdmVtZW50IEZsb3cqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBwYWdlIG1pZ3JhdGlvbiBjb2RlLCBhbmQgaXQgbG9va3MgbGlrZSBgbW92ZV9wYWdlc2AgaXMgdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgdWx0aW1hdGVseSBkb2luZyB0aGUgaGVhdnkgbGlmdGluZywgYXMgZXhwZWN0ZWQuIE5vdywgd2hlcmUgaXMgdGhpcyBgbW92ZV9wYWdlc2AgYWN0dWFsbHkgYmVpbmcgKmNhbGxlZCogZnJvbT8gQWgsIGxvb2tzIGxpa2UgYHVzZXJmYXVsdGZkX21vdmVgIGlzIHRoZSBpbW1lZGlhdGUgY2FsbGVyLiBUaGF0JiMzOTtzIGEga2V5IHBvaW50IHRvIHJlbWVtYmVyLiBJdCBtYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIG5hbWUuIEFuZCBgdXNlcmZhdWx0ZmRfbW92ZWAsIGFzIGJlc3QgYXMgSSBjYW4gdGVsbCBmcm9tIGEgcXVpY2sgZ2xhbmNlLCBzZWVtcyB0byBiZSBpbnZva2VkIHZpYSBgdXNlcmZhdWx0ZmRfaW9jdGxgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBsaWtlbHkgYSByZWxhdGVkIHN5c3RlbSBjYWxsIGZvciB1c2VyZmF1bHRmZCBvcGVyYXRpb25zLiBSaWdodCwgbWFrZXMgc2Vuc2UgaW4gdGhlIGdyZWF0ZXIgY29udGV4dC4KClNvLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGVsdmUgaW50byBgdXNlcmZhdWx0ZmRfbW92ZWAgaXRzZWxmIGFuZCBmaWd1cmUgb3V0IGhvdyBpdCYjMzk7cyBzZXR0aW5nIHVwIHRoZSBjYWxsIHRvIGBtb3ZlX3BhZ2VzYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGFyZ3VtZW50cyBpdCYjMzk7cyBwYXNzaW5nLCBhbnkgY29udGV4dCBpdCYjMzk7cyBwcm92aWRpbmcsIGFuZCB3aGF0IGNoZWNrcyBpdCBtaWdodCBiZSBwZXJmb3JtaW5nIGJlZm9yZSB0cmlnZ2VyaW5nIHRoZSBwYWdlIG1pZ3JhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBpbiBwbGFjZSB0aGVyZSwgYmVjYXVzZSB0aGF0JiMzOTtzIHdoZXJlIGFueSBwb3NzaWJsZSBwcm9ibGVtcyBhcmUgbW9zdCBsaWtlbHkgdG8gbGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyZmF1bHRmZF9tb3ZlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdXNlcmZhdWx0ZmQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS91c2VyZmF1bHRmZC5jPTQyMDc9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdWZmZF9jdHhfZmVhdHVyZXMoX191NjQgdXNlcl9mZWF0dXJlcylcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTQyMTUtXG5tbS91c2VyZmF1bHRmZC5jOjQyMTY6c3RhdGljIGludCB1c2VyZmF1bHRmZF9tb3ZlKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCxcbm1tL3VzZXJmYXVsdGZkLmMtNDIxNy1cdFx0XHQgICAgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxubW0vdXNlcmZhdWx0ZmQuYz00MzUwPXN0YXRpYyBsb25nIHVzZXJmYXVsdGZkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBjbWQsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy00Mzc4LVx0Y2FzZSBVRkZESU9fTU9WRTpcbm1tL3VzZXJmYXVsdGZkLmM6NDM3OTpcdFx0cmV0ID0gdXNlcmZhdWx0ZmRfbW92ZShjdHgsIGFyZyk7XG5tbS91c2VyZmF1bHRmZC5jLTQzODAtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNjgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBVc2VyZmF1bHRmZCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgc3BlY2lmaWNhbGx5IHRoZSBjaGFuZ2UgaW4gYG1vdmVfcGFnZXNgIHdpdGhpbiBgbW0vdXNlcmZhdWx0ZmQuY2AuIFRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gc2VlbXMgdG8gYmUgaW4gaG93IGl0IGhhbmRsZXMgdGhlIGAtRUFHQUlOYCBlcnJvci4gTGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gQmVmb3JlLCBpZiBgZXJyYCB3YXMgYC1FQUdBSU5gLCB0aGUgY29kZSB3b3VsZCBqdXN0IGBjb250aW51ZWAgdGhlIGxvb3AuIE5vdywgaXQmIzM5O3Mgc2V0dGluZyBgZXJyYCB0byBgMGAgKmJlZm9yZSogY29udGludWluZy4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aHkgdGhlIGV4dHJhIGFzc2lnbm1lbnQ/IFRoZSBvcmlnaW5hbCBjb2RlIGhhZCB0aGlzOgoKYGBgYwoJCWlmIChlcnIpIHsKCQkJaWYgKGVyciA9PSAtRUFHQUlOKQoJCQkJY29udGludWU7CgkJCWJyZWFrOwoJCX0KYGBgCgpBbmQgbm93IGl0JiMzOTtzIHRoaXM6CgpgYGBjCgkJaWYgKGVycikgewoJCQlpZiAoZXJyID09IC1FQUdBSU4pIHsKCQkJCWVyciA9IDA7CgkJCQljb250aW51ZTsKCQkJfQoJCQlicmVhazsKCQl9CmBgYAoKU28gYmFzaWNhbGx5IGl0IHNlZW1zIGxpa2UgdGhleSYjMzk7cmUgdHJ5aW5nIHRvIHByZXZlbnQgYC1FQUdBSU5gIGZyb20gYmVpbmcgdGhlIGZpbmFsIGVycm9yIGNvZGUgcmV0dXJuZWQgaWYgdGhlIGxvb3AgZW5kcyBhZnRlciBoaXR0aW5nIHRoYXQgZXJyb3IuIEJ1dCBpcyB0aGUgZXh0cmEgYXNzaWdubWVudCAqbmVjZXNzYXJ5Kj8gV2hhdCYjMzk7cyB0aGUgY29udGV4dCBoZXJlPyBJZiB0aGUgbG9vcCBlbmRzIHdpdGhvdXQgcmVzZXR0aW5nIGBlcnJgIGluIHRoZSBuZXh0IGl0ZXJhdGlvbiwgYW5kIGlmIHdlJiMzOTtyZSAqbm90KiByZXNldHRpbmcgYGVycmAsIGl0IHNlZW1zIGxpa2Ugd2UgbWlnaHQgcmV0dXJuIGAtRUFHQUlOYCBlcnJvbmVvdXNseS4KCkkgbmVlZCB0byBxdWlja2x5IGFuYWx5emUgdGhlIGBtb3ZlX3BhZ2VzYCBsb29wIGxvZ2ljIHRvIGJlIGNlcnRhaW4uIExldCBtZSBkcmlsbCBkb3duIGFuZCBsb29rIGF0IHRoZSBjb250cm9sIGZsb3cgaW4gbW9yZSBkZXRhaWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZXJlIGFyZSBzcGVjaWZpYyBzY2VuYXJpb3Mgd2hlcmUgYGVycmAgbWlnaHQgYmUgbGVmdCBhcyBgLUVBR0FJTmAgYXQgdGhlIGVuZCBvZiB0aGUgbG9vcCwgb3IgaWYgaXQgaXMgYWx3YXlzIHJlc2V0IGluIHN1YnNlcXVlbnQgaXRlcmF0aW9ucy4gVGhpcyBzdWJ0bGUgY2hhbmdlIGNvdWxkIGltcGFjdCBlcnJvciBoYW5kbGluZyBzaWduaWZpY2FudGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdXNlcmZhdWx0ZmQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIwNDA6XHRcdFx0XHRcdHNwaW5fdW5sb2NrKHB0bCk7XG4yMDQxOlx0XHRcdFx0XHRzcGxpdF9odWdlX3BtZChzcmNfdm1hLCBzcmNfcG1kLCBzcmNfYWRkcik7XG4yMDQyOlx0XHRcdFx0XHQvKiBUaGUgZm9saW8gd2lsbCBiZSBzcGxpdCBieSBtb3ZlX3BhZ2VzX3B0ZSgpICovXG4yMDQzOlx0XHRcdFx0XHRjb250aW51ZTtcbjIwNDQ6XHRcdFx0XHR9XG4yMDQ1Olx0XG4yMDQ2Olx0XHRcdFx0ZXJyID0gbW92ZV9wYWdlc19odWdlX3BtZChtbSwgZHN0X3BtZCwgc3JjX3BtZCxcbjIwNDc6XHRcdFx0XHRcdFx0XHQgIGRzdF9wbWR2YWwsIGRzdF92bWEsIHNyY192bWEsXG4yMDQ4Olx0XHRcdFx0XHRcdFx0ICBkc3RfYWRkciwgc3JjX2FkZHIpO1xuMjA0OTpcdFx0XHRcdHN0ZXBfc2l6ZSA9IEhQQUdFX1BNRF9TSVpFO1xuMjA1MDpcdFx0XHR9IGVsc2Uge1xuMjA1MTpcdFx0XHRcdGxvbmcgcmV0O1xuMjA1MjpcdFxuMjA1MzpcdFx0XHRcdGlmIChwbWRfbm9uZSgqc3JjX3BtZCkpIHtcbjIwNTQ6XHRcdFx0XHRcdGlmICghKG1vZGUgXHUwMDI2IFVGRkRJT19NT1ZFX01PREVfQUxMT1dfU1JDX0hPTEVTKSkge1xuMjA1NTpcdFx0XHRcdFx0XHRlcnIgPSAtRU5PRU5UO1xuMjA1NjpcdFx0XHRcdFx0XHRicmVhaztcbjIwNTc6XHRcdFx0XHRcdH1cbjIwNTg6XHRcdFx0XHRcdGlmICh1bmxpa2VseShfX3B0ZV9hbGxvYyhtbSwgc3JjX3BtZCkpKSB7XG4yMDU5Olx0XHRcdFx0XHRcdGVyciA9IC1FTk9NRU07XG4yMDYwOlx0XHRcdFx0XHRcdGJyZWFrO1xuMjA2MTpcdFx0XHRcdFx0fVxuMjA2MjpcdFx0XHRcdH1cbjIwNjM6XHRcbjIwNjQ6XHRcdFx0XHRpZiAodW5saWtlbHkocHRlX2FsbG9jKG1tLCBkc3RfcG1kKSkpIHtcbjIwNjU6XHRcdFx0XHRcdGVyciA9IC1FTk9NRU07XG4yMDY2Olx0XHRcdFx0XHRicmVhaztcbjIwNjc6XHRcdFx0XHR9XG4yMDY4Olx0XG4yMDY5Olx0XHRcdFx0cmV0ID0gbW92ZV9wYWdlc19wdGVzKG1tLCBkc3RfcG1kLCBzcmNfcG1kLFxuMjA3MDpcdFx0XHRcdFx0XHQgICAgICBkc3Rfdm1hLCBzcmNfdm1hLCBkc3RfYWRkcixcbjIwNzE6XHRcdFx0XHRcdFx0ICAgICAgc3JjX2FkZHIsIHNyY19lbmQgLSBzcmNfYWRkciwgbW9kZSk7XG4yMDcyOlx0XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbjIwNzM6XHRcdFx0XHRcdGVyciA9IHJldDtcbjIwNzQ6XHRcdFx0XHRlbHNlXG4yMDc1Olx0XHRcdFx0XHRzdGVwX3NpemUgPSByZXQ7XG4yMDc2Olx0XHRcdH1cbjIwNzc6XHRcbjIwNzg6XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4yMDc5Olx0XG4yMDgwOlx0XHRcdGlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xuMjA4MTpcdFx0XHRcdC8qIERvIG5vdCBvdmVycmlkZSBhbiBlcnJvciAqL1xuMjA4MjpcdFx0XHRcdGlmICghZXJyIHx8IGVyciA9PSAtRUFHQUlOKVxuMjA4MzpcdFx0XHRcdFx0ZXJyID0gLUVJTlRSO1xuMjA4NDpcdFx0XHRcdGJyZWFrO1xuMjA4NTpcdFx0XHR9XG4yMDg2Olx0XG4yMDg3Olx0XHRcdGlmIChlcnIpIHtcbjIwODg6XHRcdFx0XHRpZiAoZXJyID09IC1FQUdBSU4pIHtcbjIwODk6XHRcdFx0XHRcdGVyciA9IDA7XG4yMDkwOlx0XHRcdFx0XHRjb250aW51ZTtcbjIwOTE6XHRcdFx0XHR9XG4yMDkyOlx0XHRcdFx0YnJlYWs7XG4yMDkzOlx0XHRcdH1cbjIwOTQ6XHRcbjIwOTU6XHRcdFx0LyogUHJvY2VlZCB0byB0aGUgbmV4dCBwYWdlICovXG4yMDk2Olx0XHRcdGRzdF9hZGRyICYjNDM7PSBzdGVwX3NpemU7XG4yMDk3Olx0XHRcdHNyY19hZGRyICYjNDM7PSBzdGVwX3NpemU7XG4yMDk4Olx0XHRcdG1vdmVkICYjNDM7PSBzdGVwX3NpemU7XG4yMDk5Olx0XHR9XG4yMTAwOlx0XG4yMTAxOlx0b3V0X3VubG9jazpcbjIxMDI6XHRcdHVwX3JlYWQoXHUwMDI2Y3R4LVx1MDAzZW1hcF9jaGFuZ2luZ19sb2NrKTtcbjIxMDM6XHRcdHVmZmRfbW92ZV91bmxvY2soZHN0X3ZtYSwgc3JjX3ZtYSk7XG4yMTA0Olx0b3V0OlxuMjEwNTpcdFx0Vk1fV0FSTl9PTl9PTkNFKG1vdmVkIFx1MDAzYyAwKTtcbjIxMDY6XHRcdFZNX1dBUk5fT05fT05DRShlcnIgXHUwMDNlIDApO1xuMjEwNzpcdFx0Vk1fV0FSTl9PTl9PTkNFKCFtb3ZlZCBcdTAwMjZcdTAwMjYgIWVycik7XG4yMTA4Olx0XHRyZXR1cm4gbW92ZWQgPyBtb3ZlZCA6IGVycjtcbjIxMDk6XHR9XG4yMTEwOlx0XG4yMTExOlx0c3RhdGljIGJvb2wgdm1hX2Nhbl91c2VyZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXG4yMTEyOlx0XHRcdCAgICAgICBib29sIHdwX2FzeW5jKVxuMjExMzpcdHtcbjIxMTQ6XHRcdGNvbnN0IHN0cnVjdCB2bV91ZmZkX29wcyAqb3BzID0gdm1hX3VmZmRfb3BzKHZtYSk7XG4yMTE1Olx0XG4yMTE2Olx0XHRpZiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiAoVk1fRFJPUFBBQkxFIHwgVk1fU0hBRE9XX1NUQUNLKSlcbjIxMTc6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMjExODpcdFxuMjExOTpcdFx0aWYgKCFpc192bV9odWdldGxiX3BhZ2Uodm1hKSBcdTAwMjZcdTAwMjYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fU1BFQ0lBTCkpXG4yMTIwOlx0XHRcdHJldHVybiBmYWxzZTtcbjIxMjE6XHRcbjIxMjI6XHRcdHZtX2ZsYWdzIFx1MDAyNj0gX19WTV9VRkZEX0ZMQUdTO1xuMjEyMzpcdFxuMjEyNDpcdFx0LypcbjIxMjU6XHRcdCAqIElmIFdQIGlzIHRoZSBvbmx5IG1vZGUgZW5hYmxlZCBhbmQgY29udGV4dCBpcyB3cCBhc3luYywgYWxsb3cgYW55XG4yMTI2Olx0XHQgKiBtZW1vcnkgdHlwZS5cbjIxMjc6XHRcdCAqL1xuMjEyODpcdFx0aWYgKHdwX2FzeW5jIFx1MDAyNlx1MDAyNiAodm1fZmxhZ3MgPT0gVk1fVUZGRF9XUCkpXG4yMTI5Olx0XHRcdHJldHVybiB0cnVlO1xuMjEzMDpcdFxuMjEzMTpcdFx0LyogRm9yIGFueSBvdGhlciBtb2RlIHJlamVjdCBWTUFzIHRoYXQgZG9uJiMzOTt0IGltcGxlbWVudCB2bV91ZmZkX29wcyAqL1xuMjEzMjpcdFx0aWYgKCFvcHMpXG4yMTMzOlx0XHRcdHJldHVybiBmYWxzZTtcbjIxMzQ6XHRcbjIxMzU6XHRcdC8qXG4yMTM2Olx0XHQgKiBJZiB1c2VyIHJlcXVlc3RlZCB1ZmZkLXdwIGJ1dCBub3QgZW5hYmxlZCBwdGUgbWFya2VycyBmb3JcbjIxMzc6XHRcdCAqIHVmZmQtd3AsIHRoZW4gb25seSBhbm9ueW1vdXMgbWVtb3J5IGlzIHN1cHBvcnRlZFxuMjEzODpcdFx0ICovXG4yMTM5Olx0XHRpZiAoIXVmZmRfc3VwcG9ydHNfd3BfbWFya2VyKCkgXHUwMDI2XHUwMDI2ICh2bV9mbGFncyBcdTAwMjYgVk1fVUZGRF9XUCkgXHUwMDI2XHUwMDI2XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI5MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLgoKKipBbmFseXppbmcgdGhlIEVycm9yIEhhbmRsaW5nIExvZ2ljKioKCkhtbSwgc28gaWYgdGhlIGVycm9yIGNvZGUgaXMgYC1FQUdBSU5gLCBpdCYjMzk7cyBiZWluZyBleHBsaWNpdGx5IHJlc2V0IHRvIGAwYCBhbmQgdGhlbiB0aGUgcHJvZ3JhbSBqdXN0IGtlZXBzIGdvaW5nLiBSaWdodC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBCdXQgaWYgdGhlIGxvb3AgY29uZGl0aW9uIGlzIG1ldCBhbmQgdGhlIGxvb3AgZXhpdHMgY2xlYW5seSwgdGhlbiBgZXJyYCB3aWxsICphbHNvKiBiZSBgMGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIHdvcmtzIGluIHRoZSBjb250ZXh0IG9mIHRoZSByZXN0IG9mIHRoZSBjb2RlLiBJcyB0aGF0IHRoZSBpbnRlbnRpb24sIG9yIGlzIHNvbWV0aGluZyBlbHNlIGdvaW5nIG9uPyBJIHJlYWxseSBuZWVkIHRvIGlkZW50aWZ5IHRoYXQgbG9vcCYjMzk7cyBjb25kaXRpb24sIHRoZSBleGl0IGNvbmRpdGlvbiBpcyBub3QgY2xlYXIuIElzIGBlcnIgPSAwYCB0aGUgbm9ybWFsIGNhc2UgdG8gYnJlYWsgdGhlIGxvb3Agb3IgYW4gZWRnZSBjYXNlPyBJJiMzOTttIG1pc3Npbmcgc29tZSBjb250ZXh0IGhlcmUuIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBkaXZlIGludG8gdGhhdCBsb29wJiMzOTtzIGNvbmRpdGlvbiB0byBiZSBzdXJlIEkmIzM5O20gZm9sbG93aW5nIHRoZSBsb2dpYyBjb3JyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdXNlcmZhdWx0ZmQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE5MzA6XHQgKiB2aXJ0dWFsIHJlZ2lvbnMgd2l0aG91dCBrbm93aW5nIGlmIHRoZXJlIGFyZSB0cmFuc3BhcmVudCBodWdlcGFnZVxuMTkzMTpcdCAqIGluIHRoZSByZWdpb25zIG9yIG5vdCwgYnV0IHByZXZlbnRpbmcgdGhlIHJpc2sgb2YgaGF2aW5nIHRvIHNwbGl0XG4xOTMyOlx0ICogdGhlIGh1Z2VwbWQgZHVyaW5nIHRoZSByZW1hcC5cbjE5MzM6XHQgKi9cbjE5MzQ6XHRzdGF0aWMgc3NpemVfdCBtb3ZlX3BhZ2VzKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsXG4xOTM1Olx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc3JjX3N0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbiwgX191NjQgbW9kZSlcbjE5MzY6XHR7XG4xOTM3Olx0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN0eC1cdTAwM2VtbTtcbjE5Mzg6XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjX3ZtYSwgKmRzdF92bWE7XG4xOTM5Olx0XHR1bnNpZ25lZCBsb25nIHNyY19hZGRyLCBkc3RfYWRkciwgc3JjX2VuZDtcbjE5NDA6XHRcdHBtZF90ICpzcmNfcG1kLCAqZHN0X3BtZDtcbjE5NDE6XHRcdGxvbmcgZXJyID0gLUVJTlZBTDtcbjE5NDI6XHRcdHNzaXplX3QgbW92ZWQgPSAwO1xuMTk0MzpcdFxuMTk0NDpcdFx0LyogU2FuaXRpemUgdGhlIGNvbW1hbmQgcGFyYW1ldGVycy4gKi9cbjE5NDU6XHRcdFZNX1dBUk5fT05fT05DRShzcmNfc3RhcnQgXHUwMDI2IH5QQUdFX01BU0spO1xuMTk0NjpcdFx0Vk1fV0FSTl9PTl9PTkNFKGRzdF9zdGFydCBcdTAwMjYgflBBR0VfTUFTSyk7XG4xOTQ3Olx0XHRWTV9XQVJOX09OX09OQ0UobGVuIFx1MDAyNiB+UEFHRV9NQVNLKTtcbjE5NDg6XHRcbjE5NDk6XHRcdC8qIERvZXMgdGhlIGFkZHJlc3MgcmFuZ2Ugd3JhcCwgb3IgaXMgdGhlIHNwYW4gemVyby1zaXplZD8gKi9cbjE5NTA6XHRcdFZNX1dBUk5fT05fT05DRShzcmNfc3RhcnQgJiM0MzsgbGVuIFx1MDAzYyBzcmNfc3RhcnQpO1xuMTk1MTpcdFx0Vk1fV0FSTl9PTl9PTkNFKGRzdF9zdGFydCAmIzQzOyBsZW4gXHUwMDNjIGRzdF9zdGFydCk7XG4xOTUyOlx0XG4xOTUzOlx0XHRlcnIgPSB1ZmZkX21vdmVfbG9jayhtbSwgZHN0X3N0YXJ0LCBzcmNfc3RhcnQsIFx1MDAyNmRzdF92bWEsIFx1MDAyNnNyY192bWEpO1xuMTk1NDpcdFx0aWYgKGVycilcbjE5NTU6XHRcdFx0Z290byBvdXQ7XG4xOTU2Olx0XG4xOTU3Olx0XHQvKiBSZS1jaGVjayBhZnRlciB0YWtpbmcgbWFwX2NoYW5naW5nX2xvY2sgKi9cbjE5NTg6XHRcdGVyciA9IC1FQUdBSU47XG4xOTU5Olx0XHRkb3duX3JlYWQoXHUwMDI2Y3R4LVx1MDAzZW1hcF9jaGFuZ2luZ19sb2NrKTtcbjE5NjA6XHRcdGlmIChsaWtlbHkoYXRvbWljX3JlYWQoXHUwMDI2Y3R4LVx1MDAzZW1tYXBfY2hhbmdpbmcpKSlcbjE5NjE6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuMTk2MjpcdFx0LypcbjE5NjM6XHRcdCAqIE1ha2Ugc3VyZSB0aGUgdm1hIGlzIG5vdCBzaGFyZWQsIHRoYXQgdGhlIHNyYyBhbmQgZHN0IHJlbWFwXG4xOTY0Olx0XHQgKiByYW5nZXMgYXJlIGJvdGggdmFsaWQgYW5kIGZ1bGx5IHdpdGhpbiBhIHNpbmdsZSBleGlzdGluZ1xuMTk2NTpcdFx0ICogdm1hLlxuMTk2NjpcdFx0ICovXG4xOTY3Olx0XHRlcnIgPSAtRUlOVkFMO1xuMTk2ODpcdFx0aWYgKHNyY192bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1NIQVJFRClcbjE5Njk6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuMTk3MDpcdFx0aWYgKHNyY19zdGFydCAmIzQzOyBsZW4gXHUwMDNlIHNyY192bWEtXHUwMDNldm1fZW5kKVxuMTk3MTpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xOTcyOlx0XG4xOTczOlx0XHRpZiAoZHN0X3ZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fU0hBUkVEKVxuMTk3NDpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xOTc1Olx0XHRpZiAoZHN0X3N0YXJ0ICYjNDM7IGxlbiBcdTAwM2UgZHN0X3ZtYS1cdTAwM2V2bV9lbmQpXG4xOTc2Olx0XHRcdGdvdG8gb3V0X3VubG9jaztcbjE5Nzc6XHRcbjE5Nzg6XHRcdGVyciA9IHZhbGlkYXRlX21vdmVfYXJlYXMoY3R4LCBzcmNfdm1hLCBkc3Rfdm1hKTtcbjE5Nzk6XHRcdGlmIChlcnIpXG4xOTgwOlx0XHRcdGdvdG8gb3V0X3VubG9jaztcbjE5ODE6XHRcbjE5ODI6XHRcdGZvciAoc3JjX2FkZHIgPSBzcmNfc3RhcnQsIGRzdF9hZGRyID0gZHN0X3N0YXJ0LCBzcmNfZW5kID0gc3JjX3N0YXJ0ICYjNDM7IGxlbjtcbjE5ODM6XHRcdCAgICAgc3JjX2FkZHIgXHUwMDNjIHNyY19lbmQ7KSB7XG4xOTg0Olx0XHRcdHNwaW5sb2NrX3QgKnB0bDtcbjE5ODU6XHRcdFx0cG1kX3QgZHN0X3BtZHZhbDtcbjE5ODY6XHRcdFx0dW5zaWduZWQgbG9uZyBzdGVwX3NpemU7XG4xOTg3Olx0XG4xOTg4Olx0XHRcdC8qXG4xOTg5Olx0XHRcdCAqIEJlbG93IHdvcmtzIGJlY2F1c2UgYW5vbnltb3VzIGFyZWEgd291bGQgbm90IGhhdmUgYVxuMTk5MDpcdFx0XHQgKiB0cmFuc3BhcmVudCBodWdlIFBVRC4gSWYgZmlsZS1iYWNrZWQgc3VwcG9ydCBpcyBhZGRlZCxcbjE5OTE6XHRcdFx0ICogdGhhdCBjYXNlIHdvdWxkIG5lZWQgdG8gYmUgaGFuZGxlZCBoZXJlLlxuMTk5MjpcdFx0XHQgKi9cbjE5OTM6XHRcdFx0c3JjX3BtZCA9IG1tX2ZpbmRfcG1kKG1tLCBzcmNfYWRkcik7XG4xOTk0Olx0XHRcdGlmICh1bmxpa2VseSghc3JjX3BtZCkpIHtcbjE5OTU6XHRcdFx0XHRpZiAoIShtb2RlIFx1MDAyNiBVRkZESU9fTU9WRV9NT0RFX0FMTE9XX1NSQ19IT0xFUykpIHtcbjE5OTY6XHRcdFx0XHRcdGVyciA9IC1FTk9FTlQ7XG4xOTk3Olx0XHRcdFx0XHRicmVhaztcbjE5OTg6XHRcdFx0XHR9XG4xOTk5Olx0XHRcdFx0c3JjX3BtZCA9IG1tX2FsbG9jX3BtZChtbSwgc3JjX2FkZHIpO1xuMjAwMDpcdFx0XHRcdGlmICh1bmxpa2VseSghc3JjX3BtZCkpIHtcbjIwMDE6XHRcdFx0XHRcdGVyciA9IC1FTk9NRU07XG4yMDAyOlx0XHRcdFx0XHRicmVhaztcbjIwMDM6XHRcdFx0XHR9XG4yMDA0Olx0XHRcdH1cbjIwMDU6XHRcdFx0ZHN0X3BtZCA9IG1tX2FsbG9jX3BtZChtbSwgZHN0X2FkZHIpO1xuMjAwNjpcdFx0XHRpZiAodW5saWtlbHkoIWRzdF9wbWQpKSB7XG4yMDA3Olx0XHRcdFx0ZXJyID0gLUVOT01FTTtcbjIwMDg6XHRcdFx0XHRicmVhaztcbjIwMDk6XHRcdFx0fVxuMjAxMDpcdFxuMjAxMTpcdFx0XHRkc3RfcG1kdmFsID0gcG1kcF9nZXRfbG9ja2xlc3MoZHN0X3BtZCk7XG4yMDEyOlx0XHRcdC8qXG4yMDEzOlx0XHRcdCAqIElmIHRoZSBkc3RfcG1kIGlzIG1hcHBlZCBhcyBUSFAgZG9uJiMzOTt0IG92ZXJyaWRlIGl0IGFuZCBqdXN0XG4yMDE0Olx0XHRcdCAqIGJlIHN0cmljdC4gSWYgZHN0X3BtZCBjaGFuZ2VzIGludG8gVFBIIGFmdGVyIHRoaXMgY2hlY2ssIHRoZVxuMjAxNTpcdFx0XHQgKiBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgcmV0cnlcbjIwMTY6XHRcdFx0ICogd2hpbGUgbW92ZV9wYWdlc19wdGUoKSB3aWxsIGRldGVjdCB0aGUgY2hhbmdlIGFuZCBmYWlsLlxuMjAxNzpcdFx0XHQgKi9cbjIwMTg6XHRcdFx0aWYgKHVubGlrZWx5KHBtZF90cmFuc19odWdlKGRzdF9wbWR2YWwpKSkge1xuMjAxOTpcdFx0XHRcdGVyciA9IC1FRVhJU1Q7XG4yMDIwOlx0XHRcdFx0YnJlYWs7XG4yMDIxOlx0XHRcdH1cbjIwMjI6XHRcbjIwMjM6XHRcdFx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhzcmNfcG1kLCBzcmNfdm1hKTtcbjIwMjQ6XHRcdFx0aWYgKHB0bCkge1xuMjAyNTpcdFx0XHRcdC8qIENoZWNrIGlmIHdlIGNhbiBtb3ZlIHRoZSBwbWQgd2l0aG91dCBzcGxpdHRpbmcgaXQuICovXG4yMDI2Olx0XHRcdFx0aWYgKG1vdmVfc3BsaXRzX2h1Z2VfcG1kKGRzdF9hZGRyLCBzcmNfYWRkciwgc3JjX3N0YXJ0ICYjNDM7IGxlbikgfHxcbjIwMjc6XHRcdFx0XHQgICAgIXBtZF9ub25lKGRzdF9wbWR2YWwpKSB7XG4yMDI4Olx0XHRcdFx0XHQvKiBDYW4gYmUgYSBtaWdyYXRpb24gZW50cnkgKi9cbjIwMjk6XHRcdFx0XHRcdGlmIChwbWRfcHJlc2VudCgqc3JjX3BtZCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI0MwoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDIwNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFVzZXJmYXVsdGZkIE1vdmUgUGFnZSBMb29wKioKCk9rYXksIHNvIGhlcmUmIzM5O3MgdGhlIGJyZWFrZG93biBvZiB0aGlzIGNvZGUsIGFzIEkgc2VlIGl0LiBUaGUgY29yZSBvZiB0aGUgaXNzdWUgbGllcyB3aXRoaW4gdGhpcyBsb29wIHVzZWQgZm9yIG1vdmluZyBwYWdlcyBiZXR3ZWVuIGFkZHJlc3Mgc3BhY2VzLCBzcGVjaWZpY2FsbHkgdGhlIGhhbmRsaW5nIG9mIGAtRUFHQUlOYCBlcnJvcnMgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgbG9vcCYjMzk7cyBjb250cm9sIGZsb3cuCgpUaGUgbG9vcCwgYXMgaXQgc3RhbmRzLCB1c2VzIGEgYGNvbnRpbnVlYCBzdGF0ZW1lbnQgdG8gcmV0cnkgdGhlIHNhbWUgcGFnZSBtb3ZlIGlmIGFuIGAtRUFHQUlOYCBlcnJvciBpcyBlbmNvdW50ZXJlZC4gVGhlIGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBhIG1pc3NpbmcgYGVyciA9IDBgIGJlZm9yZSB0aGUgYGNvbnRpbnVlYCB3YXMgdGhlIHByb2JsZW0uIEhvd2V2ZXIsIGZ1cnRoZXIgaW5zcGVjdGlvbiByZXZlYWxlZCBhIG1vcmUgc3VidGxlIGZsYXcuIFRoZSBwcmltYXJ5IGlzc3VlIHN0ZW1zIGZyb20gdGhlIGludGVyYWN0aW9uIG9mIGAtRUFHQUlOYCB3aXRoIHRoZSBgbW92ZV9wYWdlc19wdGVzYCBvciBgbW92ZV9wYWdlc19odWdlX3BtZGAgY2FsbHMuCgpUaGUgY3JpdGljYWwgcGF0aCBsb29rcyBsaWtlIHRoaXM6CgoxLiAgV2UgZW50ZXIgdGhlIGxvb3AuCjIuICBJZiBgZXJyID09IC1FQUdBSU5gLCBpdCBnZXRzIGNsZWFyZWQgYW5kIHRoZSBsb29wIGBjb250aW51ZWBzLgozLiAgVGhlIG1vdmUgb3BlcmF0aW9uIChgbW92ZV9wYWdlc19wdGVzYCBvciBgbW92ZV9wYWdlc19odWdlX3BtZGApIHJ1bnMuCjQuICBJZiB0aGUgbW92ZSAqc3VjY2VlZHMqLCBidXQgYGVycmAgaXMgbm90IG92ZXJ3cml0dGVuIChpZiBgcmV0ICZndDs9IDBgKSwgdGhlbiBgZXJyYCBzdGlsbCByZXRhaW5zIHRoZSBvbGQgYC1FQUdBSU5gIHZhbHVlLiBUaGlzIGlzIGEgdmVyeSByZWFsIHBhdGguCjUuICBJZiB3ZSBoaXQgdGhlIGNvbmRpdGlvbmFsOiBgaWYgKGVyciA9PSAtRUFHQUlOKSBjb250aW51ZTtgLCB0aGUgaW5jcmVtZW50IG9mIGBzcmNfYWRkcmAsIGBkc3RfYWRkcmAsIGFuZCBgbW92ZWRgIGdldHMgc2tpcHBlZC4KNi4gIFRoZSBsb29wIGdvZXMgdG8gdGhlIHRvcCwgd2hlcmUgaXQgdHJpZXMgdG8gcmUtbW92ZSB0aGUgc2FtZSwgYWxyZWFkeSBtb3ZlZCBwYWdlLCBsZWFkaW5nIHRvIGEgbG9vcCBjb25kaXRpb24uCgpUaGUgc2NlbmFyaW8gd2hlcmUgYHNwbGl0X2h1Z2VfcG1kYCByZXR1cm5zIHRydWUgcHJlc2VudHMgYW5vdGhlciByaXNrLiBJbiB0aGlzIHBhdGgsIHRoZSBsb29wIGBjb250aW51ZWBzLCBhbmQgYGVycmAgKmlzIG5vdCBvdmVyd3JpdHRlbi4qIFNvLCBpZiBgZXJyYCBoYXMgYSBwcmV2aW91cyBgLUVBR0FJTmAsIHRoaXMgd2lsbCBjb250aW51ZS4KClRoZSBmaXgsIHRoZXJlZm9yZSwgaXMgdG8gZXhwbGljaXRseSByZXNldCBgZXJyID0gMGAgd2hlbmV2ZXIgYC1FQUdBSU5gIGlzIGVuY291bnRlcmVkIGJlZm9yZSBgY29udGludWVgaW5nLiBUaGlzIHdpbGwgZ3VhcmFudGVlIHRoYXQgc3VjY2VzcyBpbiBhbiBvcGVyYXRpb24gb3ZlcndyaXRlcyB0aGUgZXJyb3Igc3RhdGUuCgpUaGlzIGJ1ZyBvcGVucyB1cCB0aGUgcG90ZW50aWFsIGZvcjoKCiogICBJbmZpbml0ZSBsb29wczogUmVwZWF0ZWRseSB0cnlpbmcgdG8gbW92ZSB0aGUgc2FtZSwgYWxyZWFkeSBtb3ZlZCBwYWdlLgoqICAgSW5jb25zaXN0ZW50IHN0YXRlOiBNb3ZpbmcgcGFnZXMsIGJ1dCBza2lwcGluZyB0aGUgaW5jcmVtZW50LCBtYWtpbmcgZGF0YSBiZSBsb3N0IG9yIGNvcnJ1cHRlZC4KCkZ1enppbmcgdGhpcyBhcmVhIGlzIGNyaXRpY2FsLiBXZSBzaG91bGQgZm9jdXMgc3BlY2lmaWNhbGx5IG9uIHRlc3RpbmcgdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIGBtb3ZlX3BhZ2VzYCwgYHVzZXJmYXVsdGZkX21vdmVgLCBgbW92ZV9wYWdlc19wdGVzYCwgYW5kIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYCB1bmRlciB2YXJpb3VzIGVycm9yIGNvbmRpdGlvbnMsIGFuZCBlbnN1cmUgdGhlIGxvb3AgY29udHJvbCB3b3JrcyBhcyBleHBlY3RlZC4gSSYjMzk7bSBxdWl0ZSBjZXJ0YWluIHRoZXJlJiMzOTtzIGEgZnVuY3Rpb25hbCBidWcgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFVTRVJGQVVMVEZEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTM4ND1jb25maWcgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX01JTk9SXG4tLVxubW0vS2NvbmZpZy0xMzg4LVxubW0vS2NvbmZpZzoxMzg5Om1lbnVjb25maWcgVVNFUkZBVUxURkRcbm1tL0tjb25maWctMTM5MC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHVzZXJmYXVsdGZkKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBLY29uZmlnIEZpbGUqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGBtbS9LY29uZmlnYCBmaWxlIGFnYWluLiBMZXQmIzM5O3MgZ2V0IHJpZ2h0IGRvd24gdG8gaXQuIEkgd2FudCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBzZWN0aW9uLCBzbyBJJiMzOTttIGdvaW5nIHRvIGp1bXAgdG8gbGluZSAxMzg5LiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIG1lYXQgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb25zIGFyZSBkZWZpbmVkLiBJIGV4cGVjdCB0byBzZWUgdGhlIHVzdWFsIHN1c3BlY3RzIHRoZXJlOiBvcHRpb25zIHJlbGF0ZWQgdG8gTlVNQSwgc3dhcHBpbmcsIHBhZ2UgYWxsb2NhdGlvbiwgb3IgcGVyaGFwcyBzb21ldGhpbmcgbmV3IHRoZXkmIzM5O3ZlIHNudWNrIGluLi4uIEl0JiMzOTtzIGFsbCBhYm91dCBob3cgdGhlc2Ugc2V0dGluZ3MgaW5mbHVlbmNlIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IGJlaGF2aW9yLCBhbmQgSSBuZWVkIHRvIGtlZXAgdXAgd2l0aCB0aGUgaW50cmljYWNpZXMgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3VyLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24uLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzgwOlx0XHRib29sXG4xMzgxOlx0XHRoZWxwXG4xMzgyOlx0XHQgIEFyY2ggaGFzIHVzZXJmYXVsdGZkIHdyaXRlIHByb3RlY3Rpb24gc3VwcG9ydFxuMTM4MzpcdFxuMTM4NDpcdGNvbmZpZyBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1JcbjEzODU6XHRcdGJvb2xcbjEzODY6XHRcdGhlbHBcbjEzODc6XHRcdCAgQXJjaCBoYXMgdXNlcmZhdWx0ZmQgbWlub3IgZmF1bHQgc3VwcG9ydFxuMTM4ODpcdFxuMTM4OTpcdG1lbnVjb25maWcgVVNFUkZBVUxURkRcbjEzOTA6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIHVzZXJmYXVsdGZkKCkgc3lzdGVtIGNhbGxcJiMzNDtcbjEzOTE6XHRcdGRlcGVuZHMgb24gTU1VXG4xMzkyOlx0XHRoZWxwXG4xMzkzOlx0XHQgIEVuYWJsZSB0aGUgdXNlcmZhdWx0ZmQoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBpbnRlcmNlcHQgYW5kXG4xMzk0Olx0XHQgIGhhbmRsZSBwYWdlIGZhdWx0cyBpbiB1c2VybGFuZC5cbjEzOTU6XHRcbjEzOTY6XHRpZiBVU0VSRkFVTFRGRFxuMTM5NzpcdGNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1BcbjEzOTg6XHRcdGJvb2wgXCYjMzQ7VXNlcmZhdWx0ZmQgd3JpdGUgcHJvdGVjdGlvbiBzdXBwb3J0IGZvciBzaG1lbS9odWdldGxiZnNcJiMzNDtcbjEzOTk6XHRcdGRlZmF1bHQgeVxuMTQwMDpcdFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfV1BcbjE0MDE6XHRcbjE0MDI6XHRcdGhlbHBcbjE0MDM6XHRcdCAgQWxsb3dzIHRvIGNyZWF0ZSBtYXJrZXIgUFRFcyBmb3IgdXNlcmZhdWx0ZmQgd3JpdGUgcHJvdGVjdGlvblxuMTQwNDpcdFx0ICBwdXJwb3Nlcy4gIEl0IGlzIHJlcXVpcmVkIHRvIGVuYWJsZSB1c2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIG9uXG4xNDA1Olx0XHQgIGZpbGUtYmFja2VkIG1lbW9yeSB0eXBlcyBsaWtlIHNobWVtIGFuZCBodWdldGxiZnMuXG4xNDA2Olx0ZW5kaWYgIyBVU0VSRkFVTFRGRFxuMTQwNzpcdFxuMTQwODpcdCMgbXVsdGktZ2VuIExSVSB7XG4xNDA5Olx0Y29uZmlnIExSVV9HRU5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MjgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgVVNFUkZBVUxURkRgIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgVVNFUkZBVUxURkRgIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgZm9jdXMgaXMgZGVmaW5pdGVseSBnb2luZyB0byBiZSBvbiB0aGUgY29yZSBmdW5jdGlvbnM6IGBtb3ZlX3BhZ2VzYCwgYHVzZXJmYXVsdGZkX21vdmVgLCBgbW92ZV9wYWdlc19wdGVzYCwgYW5kIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYC4gV2FpdCBhIG1pbnV0ZS4uLiBJIHNlZW0gdG8gcmVjYWxsIGBtb3ZlX3BhZ2VzYCBiZWluZyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gTGV0JiMzOTtzIGp1c3QgY29uZmlybSB0aGF0Li4uIFllcCwgdGhlcmUgaXQgaXM6IGBzdGF0aWMgc3NpemVfdCBtb3ZlX3BhZ2VzKC4uLilgLiBPa2F5LCB0aGF0JiMzOTtzIG5vdCB1bmV4cGVjdGVkLiBBbmQsIGp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGRvdWJsZS1jaGVjayBgdXNlcmZhdWx0ZmRfbW92ZWAg4oCTIFl1cCwgc3RhdGljIHRvby4gT2theSwgbGV0JiMzOTtzIGxvb2sgYXQgYHVzZXJmYXVsdGZkX2lvY3RsYCwganVzdCB0byByb3VuZCBvdXQgdGhhdCB2aWV3IG9mIHRoZSBjb3JlIGZ1bmN0aW9ucy4uLiBzdGF0aWMgYWdhaW4uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBub24tc3RhdGljIGVudHJ5IHBvaW50cywgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSB0aGUgcHVibGljIGludGVyZmFjZS4gQWgsIGBzeXNfdXNlcmZhdWx0ZmRgLi4uIHRoYXQmIzM5O3MgdGhlIG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U1lTQ0FMTF9ERUZJTkUuKnVzZXJmYXVsdGZkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3VzZXJmYXVsdGZkLmM9NDQ4Mz1zdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfc3lzY2FsbF9hbGxvd2VkKGludCBmbGFncylcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTQ0OTktXG5tbS91c2VyZmF1bHRmZC5jOjQ1MDA6U1lTQ0FMTF9ERUZJTkUxKHVzZXJmYXVsdGZkLCBpbnQsIGZsYWdzKVxubW0vdXNlcmZhdWx0ZmQuYy00NTAxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwOTkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIGB1c2VyZmF1bHRmZGAgTWVjaGFuaXNtKioKCkFscmlnaHQsIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYHVzZXJmYXVsdGZkYCBoZXJlLCBhIHByZXR0eSBpbnRlcmVzdGluZyBzeXN0ZW0gY2FsbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBmaWxlIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgYHVzZXJmYXVsdGZkX2lvY3RsYCBjYWxsLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIG1hZ2ljIGhhcHBlbnMsIHJpZ2h0PyBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmVmZXJlbmNlIHRoZSBgdXNlcmZhdWx0ZmRfZm9wc2Agc3RydWN0dXJlIHRvIHJlbWluZCBteXNlbGYgb2YgdGhlIHN1cHBvcnRlZCBjb21tYW5kcyBhbmQgaG93IHRoaXMgYWxsIGZpdHMgdG9nZXRoZXIgYXQgdGhlIGZpbGUgb3BlcmF0aW9uIGxheWVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyZmF1bHRmZF9mb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdXNlcmZhdWx0ZmQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS91c2VyZmF1bHRmZC5jPTMyNTQ9c3RhdGljIF9fcG9sbF90IHVzZXJmYXVsdGZkX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0zMjg5LVxubW0vdXNlcmZhdWx0ZmQuYzozMjkwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVzZXJmYXVsdGZkX2ZvcHM7XG5tbS91c2VyZmF1bHRmZC5jLTMyOTEtXG5tbS91c2VyZmF1bHRmZC5jPTMyOTI9c3RhdGljIGludCByZXNvbHZlX3VzZXJmYXVsdF9mb3JrKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKm5ldyxcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTMyOTctXG5tbS91c2VyZmF1bHRmZC5jOjMyOTg6XHRmZCA9IGFub25faW5vZGVfY3JlYXRlX2dldGZkKFwmIzM0O1t1c2VyZmF1bHRmZF1cJiMzNDssIFx1MDAyNnVzZXJmYXVsdGZkX2ZvcHMsIG5ldyxcbm1tL3VzZXJmYXVsdGZkLmMtMzI5OS1cdFx0XHRPX1JET05MWSB8IChuZXctXHUwMDNlZmxhZ3MgXHUwMDI2IFVGRkRfU0hBUkVEX0ZDTlRMX0ZMQUdTKSwgaW5vZGUpO1xuLS1cbm1tL3VzZXJmYXVsdGZkLmM9NDM5NT1zdGF0aWMgdm9pZCB1c2VyZmF1bHRmZF9zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmKVxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtNDQyMS1cbm1tL3VzZXJmYXVsdGZkLmM6NDQyMjpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1c2VyZmF1bHRmZF9mb3BzID0ge1xubW0vdXNlcmZhdWx0ZmQuYy00NDIzLSNpZmRlZiBDT05GSUdfUFJPQ19GU1xuLS1cbm1tL3VzZXJmYXVsdGZkLmM9NDQ0NT1zdGF0aWMgaW50IG5ld191c2VyZmF1bHRmZChpbnQgZmxhZ3MpXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy00NDY5LVx0RkRfUFJFUEFSRShmZGYsIGZsYWdzIFx1MDAyNiBVRkZEX1NIQVJFRF9GQ05UTF9GTEFHUyxcbm1tL3VzZXJmYXVsdGZkLmM6NDQ3MDpcdFx0ICAgYW5vbl9pbm9kZV9jcmVhdGVfZ2V0ZmlsZShcJiMzNDtbdXNlcmZhdWx0ZmRdXCYjMzQ7LCBcdTAwMjZ1c2VyZmF1bHRmZF9mb3BzLCBjdHgsXG5tbS91c2VyZmF1bHRmZC5jLTQ0NzEtXHRcdFx0XHRcdCAgICAgT19SRE9OTFkgfCAoZmxhZ3MgXHUwMDI2IFVGRkRfU0hBUkVEX0ZDTlRMX0ZMQUdTKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3NjQKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29uc2lkZXJpbmcgdGhlIEtlcm5lbCBBUEkgRW50cnlwb2ludCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0aGUgY29yZSBpb2N0bCBmdW5jdGlvbiBzZWVtcyB0byBiZSBgdXNlcmZhdWx0ZmRfaW9jdGxgLiBCdXQgaGFuZyBvbiwgdGhlIHByb21wdCBzcGVjaWZpY2FsbHkgc2F5cyB0byBwcmVmZXIgKm5vbi1zdGF0aWMqLCAqbm9uLWlubGluZWQqIGVudHJ5IHBvaW50cyBvdmVyIGludGVybmFsIGhlbHBlcnMuIEluaXRpYWxseSwgSSB3YXMgdGhpbmtpbmcgdG8gZXhjbHVkZSBgdXNlcmZhdWx0ZmRfaW9jdGxgIGlmIGl0JiMzOTtzIHN0YXRpYywgc2luY2UgdGhlIGNvbXBpbGVyIHdvdWxkIGxpa2VseSBpbmxpbmUgaXQsIGxlYWRpbmcgdG8gbm8gZGlzdGluY3Qgc3ltYm9sLiBCdXQgdGhlbiB0aGUgcHJvbXB0IGVtcGhhc2l6ZXMgJiMzNDtQcmVmZXIgbm9uLXN0YXRpYywmIzM0OyBzbyBJIG5lZWQgdG8gY2hlY2suIEV2ZW4gaWYgaXQgKmlzKiBzdGF0aWMsIGJ1dCBpcyBhbiBlbnRyeSBwb2ludCwgSSBzaG91bGQgaW5jbHVkZSBpdCBpZiBpdCYjMzk7cyB0aGUgbW9yZSBjb3JyZWN0IG9wdGlvbi4KClRoZSBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCBpZiBgdXNlcmZhdWx0ZmRfaW9jdGxgIGlzIGV4cG9ydGVkIGFzIGEgc3ltYm9sIG9yIGlmIGl0JiMzOTtzIG9ubHkgY2FsbGVkIHdpdGhpbiBgdXNlcmZhdWx0ZmRfZm9wc2AuIEFoLCByaWdodCwgaXQmIzM5O3MgdXNlZCB3aXRoaW4gYHVzZXJmYXVsdGZkX2ZvcHNgLiBPa2F5LCBzbyB3aGF0IGFib3V0IHRoZSBzeXN0ZW0gY2FsbCBlbnRyeSBwb2ludD8gVGhhdCB3b3VsZCBiZSBgc3lzX3VzZXJmYXVsdGZkYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggYXBwcm9hY2ggaXMgYmVzdCBoZXJlIGdpdmVuIHRoZSBjb25zdHJhaW50cy4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgbm9uLXN0YXRpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXNlcmZhdWx0ZmRfbW92ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS91c2VyZmF1bHRmZC5jPTQyMDc9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdWZmZF9jdHhfZmVhdHVyZXMoX191NjQgdXNlcl9mZWF0dXJlcylcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTQyMTUtXG5tbS91c2VyZmF1bHRmZC5jOjQyMTY6c3RhdGljIGludCB1c2VyZmF1bHRmZF9tb3ZlKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCxcbm1tL3VzZXJmYXVsdGZkLmMtNDIxNy1cdFx0XHQgICAgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxubW0vdXNlcmZhdWx0ZmQuYz00MzUwPXN0YXRpYyBsb25nIHVzZXJmYXVsdGZkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBjbWQsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy00Mzc4LVx0Y2FzZSBVRkZESU9fTU9WRTpcbm1tL3VzZXJmYXVsdGZkLmM6NDM3OTpcdFx0cmV0ID0gdXNlcmZhdWx0ZmRfbW92ZShjdHgsIGFyZyk7XG5tbS91c2VyZmF1bHRmZC5jLTQzODAtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQzOQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDE1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEF0dGFjayBQbGFuKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdG8gYXBwcm9hY2ggdGhpcy4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIHF1aWNrbHkgemVybyBpbiBvbiBgdXNlcmZhdWx0ZmRfaW9jdGxgLiBUaGF0IHNlZW1zIGxpa2UgYSBwcmltZSB0YXJnZXQgYmVjYXVzZSBpdCYjMzk7cyB0aGUgaW9jdGwgaGFuZGxlciwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50LiBXYWl0LCBJIHNob3VsZCBkb3VibGUtY2hlY2s6IGBzeXNfdXNlcmZhdWx0ZmRgIGlzIHRoZSBhY3R1YWwgc3lzY2FsbCBmdW5jdGlvbi4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSAqb3RoZXIqIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIHRoZSByZWxhdGVkIGNvZGUsIGp1c3QgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcgb2J2aW91cy4KCkFscmlnaHQsIGxldCYjMzk7cyBqdXN0IGdvIGJhY2sgYW5kIGNoZWNrIGBtb3ZlX3BhZ2VzYCBhZ2Fpbi4gWWVhaCwgdGhhdCYjMzk7cyBzdGF0aWMsIHNvIGl0JiMzOTtzIG5vdCBhIGRpcmVjdCBlbnRyeSBwb2ludC4gSSYjMzk7bGwgZGVmaW5pdGVseSBrZWVwIGB1c2VyZmF1bHRmZF9pb2N0bGAgYW5kIGBzeXNfdXNlcmZhdWx0ZmRgIG9uIHRoZSBsaXN0LiBXYWl0LCBJIHByb2JhYmx5IGRvbiYjMzk7dCBuZWVkIGBzeXNfdXNlcmZhdWx0ZmRgLCB0aGF0IHdpbGwgYmUganVzdCBhbGlhc2VkIGFzIGBfX3g2NF9zeXNfdXNlcmZhdWx0ZmRgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBzbyBgdXNlcmZhdWx0ZmRfaW9jdGxgIGlzIGZpbmUuCgpOb3csIGxldCBtZSBicm9hZGVuIG15IHNjb3BlIGEgYml0LiBBcmUgdGhlcmUgYW55IHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHRoYXQgZW5hYmxlIGl0PyBMZXQmIzM5O3Mgc2VlLi4uIGBVU0VSRkFVTFRGRGAgc2VlbXMgbGlrZSB0aGUga2V5IGNvbmZpZ3VyYXRpb24uIEJ1dCBpcyB0aGVyZSBhbnl0aGluZyBlbHNlIGFzc29jaWF0ZWQgd2l0aCBgVUZGRElPX01PVkVgPyBUaGF0JiMzOTtzIHdoYXQgSSByZWFsbHkgbmVlZCB0byBkcmlsbCBkb3duIG9uIHRvIHNlZSB3aGF0IGtub2JzIGFyZSBhdmFpbGFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1VGRkRJT19NT1ZFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC91c2VyZmF1bHRmZC5oLTUzLVx0IChfX3U2NCkxIFx1MDAzY1x1MDAzYyBfVUZGRElPX1pFUk9QQUdFIHxcdFx0XFxcbmluY2x1ZGUvdWFwaS9saW51eC91c2VyZmF1bHRmZC5oOjU0Olx0IChfX3U2NCkxIFx1MDAzY1x1MDAzYyBfVUZGRElPX01PVkUgfFx0XHRcXFxuaW5jbHVkZS91YXBpL2xpbnV4L3VzZXJmYXVsdGZkLmgtNTUtXHQgKF9fdTY0KTEgXHUwMDNjXHUwMDNjIF9VRkZESU9fV1JJVEVQUk9URUNUIHxcdFxcXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3VzZXJmYXVsdGZkLmgtNzctI2RlZmluZSBfVUZGRElPX1pFUk9QQUdFXHRcdCgweDA0KVxuaW5jbHVkZS91YXBpL2xpbnV4L3VzZXJmYXVsdGZkLmg6Nzg6I2RlZmluZSBfVUZGRElPX01PVkVcdFx0XHQoMHgwNSlcbmluY2x1ZGUvdWFwaS9saW51eC91c2VyZmF1bHRmZC5oLTc5LSNkZWZpbmUgX1VGRkRJT19XUklURVBST1RFQ1RcdFx0KDB4MDYpXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3VzZXJmYXVsdGZkLmgtOTctXHRcdFx0XHQgICAgICBzdHJ1Y3QgdWZmZGlvX3plcm9wYWdlKVxuaW5jbHVkZS91YXBpL2xpbnV4L3VzZXJmYXVsdGZkLmg6OTg6I2RlZmluZSBVRkZESU9fTU9WRVx0XHRfSU9XUihVRkZESU8sIF9VRkZESU9fTU9WRSxcdFxcXG5pbmNsdWRlL3VhcGkvbGludXgvdXNlcmZhdWx0ZmQuaC05OS1cdFx0XHRcdCAgICAgIHN0cnVjdCB1ZmZkaW9fbW92ZSlcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvdXNlcmZhdWx0ZmQuaD0zNTk9c3RydWN0IHVmZmRpb19tb3ZlIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvdXNlcmZhdWx0ZmQuaC0zNjYtXHQgKi9cbmluY2x1ZGUvdWFwaS9saW51eC91c2VyZmF1bHRmZC5oOjM2NzojZGVmaW5lIFVGRkRJT19NT1ZFX01PREVfRE9OVFdBS0VcdFx0KChfX3U2NCkxXHUwMDNjXHUwMDNjMClcbmluY2x1ZGUvdWFwaS9saW51eC91c2VyZmF1bHRmZC5oOjM2ODojZGVmaW5lIFVGRkRJT19NT1ZFX01PREVfQUxMT1dfU1JDX0hPTEVTXHQoKF9fdTY0KTFcdTAwM2NcdTAwM2MxKVxuaW5jbHVkZS91YXBpL2xpbnV4L3VzZXJmYXVsdGZkLmgtMzY5LVx0X191NjQgbW9kZTtcbi0tXG5tbS9raHVnZXBhZ2VkLmM9MTI3OD1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9odWdlX3BhZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnRfYWRkcixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTMzNS1cdCAqXG5tbS9raHVnZXBhZ2VkLmM6MTMzNjpcdCAqIFVGRkRJT19NT1ZFIGlzIHByZXZlbnRlZCB0byByYWNlIGFzIHdlbGwgdGhhbmtzIHRvIHRoZVxubW0va2h1Z2VwYWdlZC5jLTEzMzctXHQgKiBtbWFwX2xvY2suXG4tLVxubW0vdXNlcmZhdWx0ZmQuYz0xNDE1PXN0YXRpYyBsb25nIG1vdmVfcGFnZXNfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTQ4OS1cdGlmIChwdGVfbm9uZShvcmlnX3NyY19wdGUpKSB7XG5tbS91c2VyZmF1bHRmZC5jOjE0OTA6XHRcdGlmICghKG1vZGUgXHUwMDI2IFVGRkRJT19NT1ZFX01PREVfQUxMT1dfU1JDX0hPTEVTKSlcbm1tL3VzZXJmYXVsdGZkLmMtMTQ5MS1cdFx0XHRyZXQgPSAtRU5PRU5UO1xuLS1cbm1tL3VzZXJmYXVsdGZkLmM9MTg1OT1zdGF0aWMgdm9pZCB1ZmZkX21vdmVfdW5sb2NrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTE5MjQtICpcbm1tL3VzZXJmYXVsdGZkLmM6MTkyNTogKiBUaGUgVUZGRElPX01PVkVfTU9ERV9BTExPV19TUkNfSE9MRVMgZmxhZyBjYW4gYmUgc3BlY2lmaWVkIHRvXG5tbS91c2VyZmF1bHRmZC5jLTE5MjYtICogcHJldmVudCAtRU5PRU5UIGVycm9ycyB0byBtYXRlcmlhbGl6ZSBpZiB0aGVyZSBhcmUgaG9sZXMgaW4gdGhlXG4tLVxubW0vdXNlcmZhdWx0ZmQuYz0xOTM0PXN0YXRpYyBzc2l6ZV90IG1vdmVfcGFnZXMoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LCB1bnNpZ25lZCBsb25nIGRzdF9zdGFydCxcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTE5OTQtXHRcdGlmICh1bmxpa2VseSghc3JjX3BtZCkpIHtcbm1tL3VzZXJmYXVsdGZkLmM6MTk5NTpcdFx0XHRpZiAoIShtb2RlIFx1MDAyNiBVRkZESU9fTU9WRV9NT0RFX0FMTE9XX1NSQ19IT0xFUykpIHtcbm1tL3VzZXJmYXVsdGZkLmMtMTk5Ni1cdFx0XHRcdGVyciA9IC1FTk9FTlQ7XG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0yMDUzLVx0XHRcdGlmIChwbWRfbm9uZSgqc3JjX3BtZCkpIHtcbm1tL3VzZXJmYXVsdGZkLmM6MjA1NDpcdFx0XHRcdGlmICghKG1vZGUgXHUwMDI2IFVGRkRJT19NT1ZFX01PREVfQUxMT1dfU1JDX0hPTEVTKSkge1xubW0vdXNlcmZhdWx0ZmQuYy0yMDU1LVx0XHRcdFx0XHRlcnIgPSAtRU5PRU5UO1xuLS1cbm1tL3VzZXJmYXVsdGZkLmM9NDIxNj1zdGF0aWMgaW50IHVzZXJmYXVsdGZkX21vdmUoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtNDI1MC1cbm1tL3VzZXJmYXVsdGZkLmM6NDI1MTpcdGlmICh1ZmZkaW9fbW92ZS5tb2RlIFx1MDAyNiB+KFVGRkRJT19NT1ZFX01PREVfQUxMT1dfU1JDX0hPTEVTfFxubW0vdXNlcmZhdWx0ZmQuYzo0MjUyOlx0XHRcdFx0IFVGRkRJT19NT1ZFX01PREVfRE9OVFdBS0UpKVxubW0vdXNlcmZhdWx0ZmQuYy00MjUzLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTQyNzAtXHRyYW5nZS5sZW4gPSByZXQ7XG5tbS91c2VyZmF1bHRmZC5jOjQyNzE6XHRpZiAoISh1ZmZkaW9fbW92ZS5tb2RlIFx1MDAyNiBVRkZESU9fTU9WRV9NT0RFX0RPTlRXQUtFKSkge1xubW0vdXNlcmZhdWx0ZmQuYy00MjcyLVx0XHRyYW5nZS5zdGFydCA9IHVmZmRpb19tb3ZlLmRzdDtcbi0tXG5tbS91c2VyZmF1bHRmZC5jPTQzNTA9c3RhdGljIGxvbmcgdXNlcmZhdWx0ZmRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGNtZCxcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTQzNzctXHRcdGJyZWFrO1xubW0vdXNlcmZhdWx0ZmQuYzo0Mzc4Olx0Y2FzZSBVRkZESU9fTU9WRTpcbm1tL3VzZXJmYXVsdGZkLmMtNDM3OS1cdFx0cmV0ID0gdXNlcmZhdWx0ZmRfbW92ZShjdHgsIGFyZyk7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3VzZXJmYXVsdGZkLmgtNTMtXHQgKF9fdTY0KTEgXHUwMDNjXHUwMDNjIF9VRkZESU9fWkVST1BBR0UgfFx0XHRcXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3VzZXJmYXVsdGZkLmg6NTQ6XHQgKF9fdTY0KTEgXHUwMDNjXHUwMDNjIF9VRkZESU9fTU9WRSB8XHRcdFxcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvdXNlcmZhdWx0ZmQuaC01NS1cdCAoX191NjQpMSBcdTAwM2NcdTAwM2MgX1VGRkRJT19XUklURVBST1RFQ1QgfFx0XFxcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvdXNlcmZhdWx0ZmQuaC03Ny0jZGVmaW5lIF9VRkZESU9fWkVST1BBR0VcdFx0KDB4MDQpXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvdXNlcmZhdWx0ZmQuaDo3ODojZGVmaW5lIF9VRkZESU9fTU9WRVx0XHRcdCgweDA1KVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3VzZXJmYXVsdGZkLmgtNzktI2RlZmluZSBfVUZGRElPX1dSSVRFUFJPVEVDVFx0XHQoMHgwNilcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvdXNlcmZhdWx0ZmQuaC05Ny1cdFx0XHRcdCAgICAgIHN0cnVjdCB1ZmZkaW9femVyb3BhZ2UpXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvdXNlcmZhdWx0ZmQuaDo5ODojZGVmaW5lIFVGRkRJT19NT1ZFXHRcdF9JT1dSKFVGRkRJTywgX1VGRkRJT19NT1ZFLFx0XFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC91c2VyZmF1bHRmZC5oLTk5LVx0XHRcdFx0ICAgICAgc3RydWN0IHVmZmRpb19tb3ZlKVxuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC91c2VyZmF1bHRmZC5oPTM1OT1zdHJ1Y3QgdWZmZGlvX21vdmUge1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC91c2VyZmF1bHRmZC5oLTM2Ni1cdCAqL1xudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3VzZXJmYXVsdGZkLmg6MzY3OiNkZWZpbmUgVUZGRElPX01PVkVfTU9ERV9ET05UV0FLRVx0XHQoKF9fdTY0KTFcdTAwM2NcdTAwM2MwKVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3VzZXJmYXVsdGZkLmg6MzY4OiNkZWZpbmUgVUZGRElPX01PVkVfTU9ERV9BTExPV19TUkNfSE9MRVNcdCgoX191NjQpMVx1MDAzY1x1MDAzYzEpXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvdXNlcmZhdWx0ZmQuaC0zNjktXHRfX3U2NCBtb2RlO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmM9NjY0PWludCBtb3ZlX3BhZ2UodWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBsZW4pXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uYy02NzItXHR1ZmZkaW9fbW92ZS5sZW4gPSBsZW47XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jOjY3MzpcdHVmZmRpb19tb3ZlLm1vZGUgPSBVRkZESU9fTU9WRV9NT0RFX0FMTE9XX1NSQ19IT0xFUztcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmMtNjc0LVx0dWZmZGlvX21vdmUubW92ZSA9IDA7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jOjY3NTpcdGlmIChpb2N0bChnb3B0cy1cdTAwM2V1ZmZkLCBVRkZESU9fTU9WRSwgXHUwMDI2dWZmZGlvX21vdmUpKSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jLTY3Ni1cdFx0LyogcmVhbCByZXR2YWwgaW4gdWZmZGlvX21vdmUubW92ZSAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uYy02NzctXHRcdGlmICh1ZmZkaW9fbW92ZS5tb3ZlICE9IC1FRVhJU1QpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jOjY3ODpcdFx0XHRlcnIoXCYjMzQ7VUZGRElPX01PVkUgZXJyb3I6ICVcJiMzNDtQUklkNjQsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jLTY3OS1cdFx0XHQgICAgKGludDY0X3QpdWZmZGlvX21vdmUubW92ZSk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uYy02ODEtXHR9IGVsc2UgaWYgKHVmZmRpb19tb3ZlLm1vdmUgIT0gbGVuKSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jOjY4MjpcdFx0ZXJyKFwmIzM0O1VGRkRJT19NT1ZFIGVycm9yOiAlXCYjMzQ7UFJJZDY0LCAoaW50NjRfdCl1ZmZkaW9fbW92ZS5tb3ZlKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmMtNjgzLVx0fSBlbHNlXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmM9MTI2Mj1ERUZJTkVfTU1BUF9DSEFOR0lOR19URVNUKGNvcHksIFVGRkRJT19DT1BZLCBjb3B5KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmM6MTI2MzpERUZJTkVfTU1BUF9DSEFOR0lOR19URVNUKG1vdmUsIFVGRkRJT19NT1ZFLCBtb3ZlKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmMtMTI2NC1ERUZJTkVfTU1BUF9DSEFOR0lOR19URVNUKHBvaXNvbiwgVUZGRElPX1BPSVNPTiwgdXBkYXRlZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYz0xNDk5PXVmZmRfdGVzdF9jYXNlX3QgdWZmZF90ZXN0c1tdID0ge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jLTE2NTMtXHRcdCAqIGFsbW9zdCBhbHdheXMgYXZhaWxhYmxlICh1bmxpa2UgaHVnZXRsYikuICBIZXJlIHdlXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYzoxNjU0Olx0XHQgKiBhYnVzZWQgU0hNRU0gZm9yIFVGRkRJT19NT1ZFLCBidXQgdGhlIHRlc3Qgd2Ugd2FudCB0b1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmMtMTY1NS1cdFx0ICogY292ZXIgZG9lc24mIzM5O3QgeWV0IG5lZWQgdGhlIGNvcnJlY3QgbWVtb3J5IHR5cGUuLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjUzMQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDdXJyZW50IEZvY3VzOiBVRkZESU9fTU9WRSBhbmQgVXNlcmZhdWx0ZmQqKgoKT2theSwgc28gSSYjMzk7bSBkcmlsbGluZyBkb3duIGludG8gaG93IGBVRkZESU9fTU9WRWAgd29ya3MuIFJpZ2h0LCBzbyBgVUZGRElPX01PVkVgIGlzIHRoZSBzcGVjaWZpYyBpb2N0bCBjb21tYW5kIEkmIzM5O20gaW50ZXJlc3RlZCBpbi4gSSB3YXMgaW5pdGlhbGx5IGEgYml0IGZ1enp5IG9uIHdoZXRoZXIgYHVzZXJmYXVsdGZkX2lvY3RsYCB3YXMgc3RhdGljIG9yIG5vdCDigJMgYnV0IHRoYXQmIzM5O3Mgc3RhdGljLCByaWdodD8gWWVzLCBjb25maXJtZWQsIGl0JiMzOTtzIHN0YXRpYy4KCk5vdywgbGV0JiMzOTtzIHNlZS4gYHN5c191c2VyZmF1bHRmZGAgaXMgdGhlIGFjdHVhbCBzeXN0ZW0gY2FsbCB0aGF0ICpjcmVhdGVzKiB0aGUgZmlsZSBkZXNjcmlwdG9yIGZvciBhbGwgdGhpcywgYnV0IHRoZSBgaW9jdGxgICptZXRob2QqIHRvIGV4ZWN1dGUgYFVGRkRJT19NT1ZFYCBpcyBoYW5kbGVkIGJ5IGB1c2VyZmF1bHRmZF9pb2N0bGAuIFNvIHRoZSBjcml0aWNhbCBpbnRlcmZhY2UgcG9pbnQgZm9yIGBVRkZESU9fTU9WRWAgaXMgdGhpcyBgaW9jdGxgIGhhbmRsZXI6IGB1c2VyZmF1bHRmZF9pb2N0bGAuCgpPa2F5LCBJIHdhcyB0aGlua2luZyBhYm91dCBhZGRpbmcgYm90aCBgdXNlcmZhdWx0ZmRfaW9jdGxgICphbmQqIGBzeXNfdXNlcmZhdWx0ZmRgIHRvIHRoZSBzeW1ib2wgbGlzdC4gV2FpdCwgbm8sIGBzeXNfdXNlcmZhdWx0ZmRgIGp1c3QgY3JlYXRlcyB0aGUgZmQhIEl0IGRvZXNuJiMzOTt0IGFjdHVhbGx5IGhhbmRsZSB0aGUgaW9jdGwuIFRoZSAqcmVhbCogaGFuZGxlciBmb3IgdGhlIGBpb2N0bGAgaXMgZGVmaW5pdGVseSBgdXNlcmZhdWx0ZmRfaW9jdGxgLiBPa2F5LCBzbyB3aGlsZSBgdXNlcmZhdWx0ZmRfaW9jdGxgIGlzIHN0YXRpYywgYmVjYXVzZSBpdCYjMzk7cyB0aGUgbWFpbiBmdW5jdGlvbiBJIHNob3VsZCBpbmNsdWRlIGl0LiBObyB3YWl0LCBpcyB0aGVyZSBhIG1vcmUgZ2VuZXJhbCBgc3lzX2lvY3RsYCB0byBpbmNsdWRlPyBUb28gZ2VuZXJpYy4uLgoKU28sIEkgc2hvdWxkIGluY2x1ZGUgYHVzZXJmYXVsdGZkX2lvY3RsYCwgYW5kIGB1c2VyZmF1bHRmZF9tb3ZlYCwgYW5kIGBtb3ZlX3BhZ2VzYC4gRXZlbiB0aG91Z2ggdGhleSYjMzk7cmUgc3RhdGljLCB0aGV5IGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBoZXJlLiBXYWl0LCBgdXNlcmZhdWx0ZmRfaW9jdGxgIGlzIHRoZSAqZmlsZSBvcGVyYXRpb24qIGhhbmRsZXIgZm9yIHRoZSBkZXZpY2UsIGFuZCBJIG5lZWQgdG8gY2hlY2sgZm9yIG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhlIHByb2Nlc3MuLi4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIsIHBvc3NpYmx5IG5vbi1zdGF0aWMgZnVuY3Rpb25zLCB0aGF0IGFyZSByZWxldmFudC4gTGV0JiMzOTtzIGxvb2sgYXQgdGhlIGV4cG9ydHMgZnJvbSBgbW0vdXNlcmZhdWx0ZmQuY2AganVzdCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS91c2VyZmF1bHRmZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyNDMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFN5bWJvbCBFeHBvc3VyZSBpbiB0aGUgTGludXggS2VybmVsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IG5vdGljaW5nIHRoZSBhYnNlbmNlIG9mIGFueSBleHBvcnRlZCBzeW1ib2xzLiBUaGF0IHRlbGxzIG1lIGV2ZXJ5dGhpbmcgaGVyZSBpcyBlaXRoZXIgc3RhdGljIG9yIG5vdCBtZWFudCBmb3IgZXh0ZXJuYWwgdXNlLiBMZXQmIzM5O3MgZm9jdXMgb24gdGhlIGZ1bmN0aW9ucyBJIHNlZSBkaXJlY3RseSByZWxldmFudDogYHVzZXJmYXVsdGZkX2lvY3RsYCwgYHVzZXJmYXVsdGZkX21vdmVgLCBhbmQgYG1vdmVfcGFnZXNgLiBIb2xkIG9uIGEgc2Vjb25kLCB3YXNuJiMzOTt0IGBtb3ZlX3BhZ2VzYCBhbHNvIGEgc3lzdGVtIGNhbGw/IFJpZ2h0LCBpdCBpcyEgSSByZW1lbWJlciBub3c7IGBzeXNfbW92ZV9wYWdlc2AgaXMgZGVmaW5lZCBvdmVyIGluIGBtbS9taWdyYXRlLmNgLiBCdXQgdGhlIGBtb3ZlX3BhZ2VzYCBJJiMzOTttIGxvb2tpbmcgYXQgaGVyZSwgd2l0aGluIGBtbS91c2VyZmF1bHRmZC5jYCwgaXMgc3BlY2lmaWNhbGx5IGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyBjcmVhdGVzIGEgcG90ZW50aWFsIGNvbmZsaWN0IGlmIEkgc2ltcGx5IGFkZCBgbW92ZV9wYWdlc2AgdG8gYSBzeW1ib2wgbGlzdCBsaWtlIGBGb2N1c1N5bWJvbHNgLiBUaGVyZSYjMzk7cyBhIHJpc2sgdGhhdCBpdCBtaWdodCBlcnJvbmVvdXNseSB0YXJnZXQgdGhhdCBzeXN0ZW0gY2FsbCBpbiBgbW0vbWlncmF0ZS5jYCBpbnN0ZWFkIG9mIHRoZSBsb2NhbCBzdGF0aWMgb25lLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlIGBtb3ZlX3BhZ2VzYCB3aXRoaW4gYG1tL3VzZXJmYXVsdGZkLmNgIGlzIHRoZSBvbmx5IG9uZSB3aXRoIHRoYXQgbmFtZS4gSSBtdXN0IGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtTWVNDQUxMX0RFRklORS4qbW92ZV9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9taWdyYXRlLmM9MjU5Mz1zdGF0aWMgaW50IGtlcm5lbF9tb3ZlX3BhZ2VzKHBpZF90IHBpZCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS9taWdyYXRlLmMtMjYyMi1cbm1tL21pZ3JhdGUuYzoyNjIzOlNZU0NBTExfREVGSU5FNihtb3ZlX3BhZ2VzLCBwaWRfdCwgcGlkLCB1bnNpZ25lZCBsb25nLCBucl9wYWdlcyxcbm1tL21pZ3JhdGUuYy0yNjI0LVx0XHRjb25zdCB2b2lkIF9fdXNlciAqIF9fdXNlciAqLCBwYWdlcyxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9udW1haWYuaD0yMz1LVk1fU1lTQ0FMTF9ERUZJTkUobWlncmF0ZV9wYWdlcywgNCwgaW50LCBwaWQsIHVuc2lnbmVkIGxvbmcsIG1heG5vZGUsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbnVtYWlmLmgtMjUtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9udW1haWYuaDoyNjpLVk1fU1lTQ0FMTF9ERUZJTkUobW92ZV9wYWdlcywgNiwgaW50LCBwaWQsIHVuc2lnbmVkIGxvbmcsIGNvdW50LCB2b2lkICosIHBhZ2VzLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbnVtYWlmLmgtMjctXHRcdCAgIGNvbnN0IGludCAqLCBub2RlcywgaW50ICosIHN0YXR1cywgaW50LCBmbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTM1CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYG1vdmVfcGFnZXNgIENvbnVuZHJ1bSoqCgpPa2F5LCBzbyBJJiMzOTttIGRlYWxpbmcgd2l0aCBgbW92ZV9wYWdlc2AgaGVyZSwgYW5kIEkga25vdyBmcm9tIG1lbW9yeSwgb3IgYSBxdWljayBjcm9zcy1yZWZlcmVuY2UsIHRoYXQgaXQmIzM5O3MgYSBzeXN0ZW0gY2FsbCBkZWZpbmVkIGluIGBtbS9taWdyYXRlLmNgLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIHBvdGVudGlhbCBmb3IgY29uZnVzaW9uLiBJZiBJIHNpbXBseSBhZGQgYG1vdmVfcGFnZXNgIHRvIGBGb2N1c1N5bWJvbHNgLCBJJiMzOTttIGdvaW5nIHRvIHBpY2sgdXAgYHN5c19tb3ZlX3BhZ2VzYCAqYW5kKiBga2VybmVsX21vdmVfcGFnZXNgLCBhbmQgdGhhdCYjMzk7cyBub3Qgd2hhdCBJJiMzOTttIGFpbWluZyBmb3IuIEkgbmVlZCB0byBiZSBtb3JlIHByZWNpc2UgaW4gbXkgdGFyZ2V0aW5nLiBJdCBsb29rcyBsaWtlIHRoZSByaWdodCByb3V0ZSBpbnZvbHZlcyBgdXNlcmZhdWx0ZmRfaW9jdGxgIGFuZCBgdXNlcmZhdWx0ZmRfbW92ZWAgaW5zdGVhZC4gTm93IEkmIzM5O20gdGhpbmtpbmcuLi53aGF0IGFib3V0IGBtb3ZlX3BhZ2VzX3B0ZXNgIGFuZCBgbW92ZV9wYWdlc19odWdlX3BtZGA/IFRoZXkmIzM5O3JlIGRlZmluZWQgYXMgYHN0YXRpY2Agd2l0aGluIGBtbS91c2VyZmF1bHRmZC5jYC4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBzb21ldGhpbmcgY3JpdGljYWwsIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGFuZCBzY2FuIGZvciBhbnkgb3RoZXIgZnVuY3Rpb24gZGVmaW5pdGlvbnMgd2l0aCB0aGF0IHBhcnRpY3VsYXIgbmFtZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW92ZV9wYWdlc19wdGVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3VzZXJmYXVsdGZkLmM9MTM4Mj1zdGF0aWMgaW50IG1vdmVfemVyb3BhZ2VfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTQxNC0gKi9cbm1tL3VzZXJmYXVsdGZkLmM6MTQxNTpzdGF0aWMgbG9uZyBtb3ZlX3BhZ2VzX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZCxcbm1tL3VzZXJmYXVsdGZkLmMtMTQxNi1cdFx0XHQgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmM9MTkzND1zdGF0aWMgc3NpemVfdCBtb3ZlX3BhZ2VzKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0yMDY4LVxubW0vdXNlcmZhdWx0ZmQuYzoyMDY5Olx0XHRcdHJldCA9IG1vdmVfcGFnZXNfcHRlcyhtbSwgZHN0X3BtZCwgc3JjX3BtZCxcbm1tL3VzZXJmYXVsdGZkLmMtMjA3MC1cdFx0XHRcdFx0ICAgICAgZHN0X3ZtYSwgc3JjX3ZtYSwgZHN0X2FkZHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NTgzCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRpdmluZyBpbnRvIFBhZ2UgTWlncmF0aW9uIE1lY2hhbmlzbXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiBgbW92ZV9wYWdlc19wdGVzYCDigJMgeWVhaCwgdGhhdCBvbmUmIzM5O3MgZ290IGEgcGFydGljdWxhciBuaWNoZSwgYSBzcGVjaWZpYyBzZXQgb2YgY2lyY3Vtc3RhbmNlcyB3aGVyZSBpdCYjMzk7cyB0aGUgcmlnaHQgdG9vbCBmb3IgdGhlIGpvYi4gQnV0IG5vdyB0aGUgcXVlc3Rpb24gdGhhdCBwb3BzIHVwIGlzLCB3aGF0IGFib3V0IGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYD8gSSBuZWVkIHRvIGFuYWx5emUgaXRzIGJlaGF2aW9yIGluIGNvbXBhcmlzb24gYW5kIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGRpdmlzaW9uIGZhbGxzLiBJIHdhbnQgdG8gaGF2ZSBhIHByZWNpc2UgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVzcGVjdGl2ZSBzdHJlbmd0aHMgb2YgdGhlc2UgZnVuY3Rpb25zLiBXaGF0IGFyZSB0aGUga2V5IGRpc3RpbmN0aW9ucyBoZXJlPyBXaGVuIGRvIHdlIGxldmVyYWdlIG9uZSBvdmVyIHRoZSBvdGhlcj8gSSBuZWVkIHRvIGJ1aWxkIGEgY29tcHJlaGVuc2l2ZSBtZW50YWwgbW9kZWwgdG8gZW5zdXJlIEkmIzM5O20gbWFraW5nIHRoZSBtb3N0IG9wdGltaXplZCBkZWNpc2lvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vdmVfcGFnZXNfaHVnZV9wbWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg9MTU1PXZvaWQgZG91YmxlX3B0X3VubG9jayhzcGlubG9ja190ICpwdGwxLCBzcGlubG9ja190ICpwdGwyKTtcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjE1NjppbnQgbW92ZV9wYWdlc19odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kLCBwbWRfdCBkc3RfcG1kdmFsLFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMTU3LVx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcbi0tXG5tbS9odWdlX21lbW9yeS5jPTI3NDQ9aW50IGNoYW5nZV9odWdlX3B1ZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTI3OTAtICovXG5tbS9odWdlX21lbW9yeS5jOjI3OTE6aW50IG1vdmVfcGFnZXNfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZCwgcG1kX3QgZHN0X3BtZHZhbCxcbm1tL2h1Z2VfbWVtb3J5LmMtMjc5Mi1cdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjX3ZtYSxcbi0tXG5tbS91c2VyZmF1bHRmZC5jPTE5MzQ9c3RhdGljIHNzaXplX3QgbW92ZV9wYWdlcyhzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsIHVuc2lnbmVkIGxvbmcgZHN0X3N0YXJ0LFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMjAxNC1cdFx0ICogYmUgc3RyaWN0LiBJZiBkc3RfcG1kIGNoYW5nZXMgaW50byBUUEggYWZ0ZXIgdGhpcyBjaGVjaywgdGhlXG5tbS91c2VyZmF1bHRmZC5jOjIwMTU6XHRcdCAqIG1vdmVfcGFnZXNfaHVnZV9wbWQoKSB3aWxsIGRldGVjdCB0aGUgY2hhbmdlIGFuZCByZXRyeVxubW0vdXNlcmZhdWx0ZmQuYy0yMDE2LVx0XHQgKiB3aGlsZSBtb3ZlX3BhZ2VzX3B0ZSgpIHdpbGwgZGV0ZWN0IHRoZSBjaGFuZ2UgYW5kIGZhaWwuXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0yMDQ1LVxubW0vdXNlcmZhdWx0ZmQuYzoyMDQ2Olx0XHRcdGVyciA9IG1vdmVfcGFnZXNfaHVnZV9wbWQobW0sIGRzdF9wbWQsIHNyY19wbWQsXG5tbS91c2VyZmF1bHRmZC5jLTIwNDctXHRcdFx0XHRcdFx0ICBkc3RfcG1kdmFsLCBkc3Rfdm1hLCBzcmNfdm1hLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTMyNwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDY0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBUaG91Z2h0IFByb2Nlc3Mgb24gSWRlbnRpZnlpbmcgRnV6emluZyBUYXJnZXRzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGJlc3QgcGxhY2VzIHRvIGZ1enogYmFzZWQgb24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBnbyBhZnRlciBgbW92ZV9wYWdlc19odWdlX3BtZGAsIHNpbmNlIGl0JiMzOTtzIG5vbi1zdGF0aWMgYW5kIGxvb2tzIGxpa2UgYSBwb3RlbnRpYWwgZW50cnkgcG9pbnQuIEJ1dCB3YWl0LCBpdCYjMzk7cyBub3QgZXhwb3J0ZWQsIGV2ZW4gdGhvdWdoIGl0ICppcyogbm9uLXN0YXRpYy4gU28sIHRoYXQmIzM5O3Mgc3RpbGwgYSBnb29kIGNhbmRpZGF0ZSwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIGNhbGwgY2hhaW4uCgpOZXh0LCBJIGNvbnNpZGVyZWQgYHVzZXJmYXVsdGZkX21vdmVgLCBidXQgcXVpY2tseSByZWFsaXplZCB0aGF0IGl0JiMzOTtzIHN0YXRpYy4gVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgcHJlZmVycyBub24tc3RhdGljIGVudHJ5IHBvaW50cywgc2luY2UgdGhlIGNvbXBpbGVyIHdvbiYjMzk7dCBpbmxpbmUgdGhlbSwgZ2l2aW5nIHRoZW0gZGlzdGluY3Qgc3ltYm9scy4gU28sIHRoYXQmIzM5O3MgbGVzcyBpZGVhbC4gSSB3YXMgZ29pbmcgdG8gaW5jbHVkZSBgdXNlcmZhdWx0ZmRfaW9jdGxgLCBgdXNlcmZhdWx0ZmRfbW92ZWAsIGBtb3ZlX3BhZ2VzX3B0ZXNgLCBgbW92ZV9wYWdlc19odWdlX3BtZGAsIGJ1dCBJJiMzOTttIHJlZmluaW5nIHRoYXQgbm93LgoKUmlnaHQsIGB1c2VyZmF1bHRmZF9pb2N0bGAgaXMgYSBmaWxlIG9wZXJhdGlvbiwgc28gaXQgaGFzIHRvIGhhdmUgYSBkaXN0aW5jdCBhZGRyZXNzLiBUaGVuLCBgdXNlcmZhdWx0ZmRfbW92ZWAgaXMgY2FsbGVkIGZyb20gYSBzd2l0Y2ggc3RhdGVtZW50IHdpdGhpbiBgdXNlcmZhdWx0ZmRfaW9jdGxgLCBzbyBpdCYjMzk7cyBhIGJpdCBvZiBhIHRvc3MtdXAgd2hldGhlciBpdCBnZXRzIGlubGluZWQgb3Igbm90LiBgbW92ZV9wYWdlc19odWdlX3BtZGAgaXMgbm9uLXN0YXRpYywgc28gbm8gaW5saW5pbmcgdGhlcmUuIGBtb3ZlX3BhZ2VzX3B0ZXNgIGlzIHN0YXRpYywgc28gaXQmIzM5O3MgcHJvYmFibHkgaW5saW5lZC4KCk9rYXksIGxldCYjMzk7cyBpbmNsdWRlOiBgdXNlcmZhdWx0ZmRfaW9jdGxgLCBgdXNlcmZhdWx0ZmRfbW92ZWAsIGFuZCBgbW92ZV9wYWdlc19odWdlX3BtZGAuIEhvd2V2ZXIsIGFmdGVyIHJlLWV2YWx1YXRpbmcgdGhlIGJ1ZyYjMzk7cyBsb2NhdGlvbiwgdGhlIGJ1ZyBpcyByZWFsbHkgaW4gdGhlIHN0YXRpYyBgbW92ZV9wYWdlc2AgZnVuY3Rpb24gaW4gYG1tL3VzZXJmYXVsdGZkLmNgLiBUaGUgYG1vdmVfcGFnZXNgIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgYFVGRkRJT19NT1ZFYCBpb2N0bC4gVGhlcmVmb3JlIEkgc2hvdWxkIGluY2x1ZGUgYHVzZXJmYXVsdGZkX2lvY3RsYCBhbmQgYHVzZXJmYXVsdGZkX21vdmVgLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgcmVhc29uaW5nIGhlcmUuIFRoZSBwYXRjaCBmaXhlcyBhIGZhaWx1cmUgdG8gcmVzZXQgdGhlIGVycm9yIGNvZGUgYGVycmAgYWZ0ZXIgZW5jb3VudGVyaW5nIGAtRUFHQUlOYC4gSWYgdGhlIGVycm9yIGlzbiYjMzk7dCByZXNldCwgdGhlIGxvb3AgY29udGludWVzIHdpdGggdGhlIHNhbWUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMsIGNhdXNpbmcgYW4gaW5maW5pdGUgbG9vcCB3aGVuIGBtb3ZlX3BhZ2VzX3B0ZXNgIChvciBvdGhlciBmdW5jdGlvbnMpIGRvZXNuJiMzOTt0IG92ZXJ3cml0ZSB0aGUgZXJyb3IuIFRoaXMgaXMgYSByZWFsIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSB1c2VyZmF1bHRmZCBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBVRkZESU9fTU9WRWAgaW9jdGwuIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLgoKRmluYWxseSwgdGhlIGNvbmZpZ3VyYXRpb25zLiBgVVNFUkZBVUxURkRgIGlzIHRoZSBtYWluIG9uZSwgYW5kIHRoYXQgZGVwZW5kcyBvbiBgTU1VYCwgc28gdGhhdCYjMzk7cyBnb29kIHRvIGtub3cuIEFuZCB3aGlsZSB0aGlua2luZyBhYm91dCBgbW92ZV9wYWdlc19odWdlX3BtZGAsIEkgaGF2ZSB0byByZW1lbWJlciB0aGF0IGBtbS9odWdlX21lbW9yeS5jYCAod2hlcmUgaXQgbGl2ZXMpIG9ubHkgZ2V0cyBjb21waWxlZCBpZiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIGEgZ29vZCBkZXBlbmRlbmN5IHRvIGNvbnNpZGVyIHdoZW4gc2V0dGluZyB1cCB0aGUgZnV6emluZyBlbnZpcm9ubWVudC4KClNvLCBpbiB0aGUgZW5kLCBpdCYjMzk7cyBgdXNlcmZhdWx0ZmRfaW9jdGxgLCBhbmQgYHVzZXJmYXVsdGZkX21vdmVgIHdpdGggYSBwb3RlbnRpYWwgZm9jdXMgb24gdGhlIGBVRkZESU9fTU9WRWAgcGF0aC4gQW5kIHJlbWVtYmVyIGBVU0VSRkFVTFRGRGAsIGBNTVVgLCBhbmQgcG9zc2libHkgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgZm9yIHRoZSBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdlX21lbW9yeS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9MTAwPW9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZV9kZXZpY2Uub1xubW0vTWFrZWZpbGU6MTAxOm9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgJiM0Mzs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXG5tbS9NYWtlZmlsZS0xMDItb2JqLSQoQ09ORklHX1BBR0VfQ09VTlRFUikgJiM0Mzs9IHBhZ2VfY291bnRlci5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNzg4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBDaGVjayoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCYjMzk7cyBjbGVhciB0aGF0IHRvIG1ha2UgYG1vdmVfcGFnZXNfaHVnZV9wbWRgIHdvcmsgY29ycmVjdGx5LCBJIGFic29sdXRlbHkgbmVlZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGVuYWJsZWQuIE5vIHF1ZXN0aW9uIHRoZXJlLiBTbywgSSYjMzk7bGwgZ28gYWhlYWQgYW5kIGFkZCB0aGF0IHRvIG15IGBFbmFibGVDb25maWdzYCBsaXN0LiBOb3csIG9uIHRvIHRoZSBuZXh0IHBpZWNlLiBJJiMzOTttIHdvbmRlcmluZyBpZiBqdXN0IGhhdmluZyBgVVNFUkZBVUxURkRgIGlzIHN1ZmZpY2llbnQgZm9yIGB1c2VyZmF1bHRmZF9pb2N0bGAuIFRoaW5raW5nIGl0IHRocm91Z2gsIHllcywgdGhhdCBzZWVtcyByaWdodCwgSSBiZWxpZXZlIEkgY2FuIHJlbHkgb24gdGhhdC4gQnV0LCBiZWZvcmUgSSBtb3ZlIG9uLCBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLiBJIHNob3VsZCBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIGRlcGVuZGVuY2llcyBpbiB0aGUgc2FtZSBhcmVhLiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIGBtbS91c2VyZmF1bHRmZC5jYCBhbmQgaXRzIGNvcnJlc3BvbmRpbmcgYG1tL01ha2VmaWxlYC4gVGhhdCBzaG91bGQgcmV2ZWFsIGFueSBvdGhlciBjb25maWcgb3B0aW9ucyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZiBhbmQgc2V0LCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBlbnN1cmUgdGhpcyBhbGwgZnVuY3Rpb25zIGFzIGludGVuZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyZmF1bHRmZC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9MTMwPW9iai0kKENPTkZJR19DTUFfU1lTRlMpICYjNDM7PSBjbWFfc3lzZnMub1xubW0vTWFrZWZpbGU6MTMxOm9iai0kKENPTkZJR19VU0VSRkFVTFRGRCkgJiM0Mzs9IHVzZXJmYXVsdGZkLm9cbm1tL01ha2VmaWxlLTEzMi1vYmotJChDT05GSUdfSURMRV9QQUdFX1RSQUNLSU5HKSAmIzQzOz0gcGFnZV9pZGxlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEyMDIKCQkJCQkJCW91dHB1dDogMTc0CgkJCQkJCQl0aG91Z2h0czogODAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgVVNFUkZBVUxURkRgIFBhdGNoKioKCk9rYXksIHNvIGBVU0VSRkFVTFRGRGAgaXMgZGVmaW5pdGVseSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZS4gTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCk15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgaW5kZWVkIHdvcnRoIGZ1enppbmcuIFRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIGxpZXMgd2l0aGluIHRoZSBgVUZGRElPX01PVkVgIGlvY3RsIGhhbmRsZXIgaW4gdGhlIGB1c2VyZmF1bHRmZGAgbWVjaGFuaXNtLiBUaGUgYnVnIHN0ZW1zIGZyb20gYSBmYWlsdXJlIHRvIHJlc2V0IHRoZSBgZXJyYCB2YXJpYWJsZSB0byAwIGFmdGVyIGVuY291bnRlcmluZyBhbiBgLUVBR0FJTmAgZXJyb3Igd2l0aGluIHRoZSBgbW92ZV9wYWdlc2AgZnVuY3Rpb24uCgpJIHNlZSB0aGF0IGBtb3ZlX3BhZ2VzYCBpcyBsaWtlbHkgdXNpbmcgYG1vdmVfcGFnZXNfcHRlc2AgYXMgd2VsbCwgb3IgYG1vdmVfcGFnZXNfaHVnZV9wbWRgLiBUaGUgcHJpbWFyeSBzeW1ib2xzIEkmIzM5O2xsIGZvY3VzIG9uIGFyZSBgdXNlcmZhdWx0ZmRfaW9jdGxgLCBgdXNlcmZhdWx0ZmRfbW92ZWAsIGFuZCBgbW92ZV9wYWdlc19odWdlX3BtZGAuIEkgY29uc2lkZXJlZCBgbW92ZV9wYWdlc19wdGVzYCwgYnV0IEkgdGhpbmsgdGhlIG90aGVycyBhcmUgc3VmZmljaWVudC4KClRoZSBsb2dpYyBmbG93IGlzIHRoaXM6IGlmIGAtRUFHQUlOYCBpc24mIzM5O3QgcmVzZXQsIGFueSBzdWJzZXF1ZW50IHN1Y2Nlc3NmdWwgcGFnZSBtb3ZlIChkb25lLCBmb3IgaW5zdGFuY2UsIGJ5IGBtb3ZlX3BhZ2VzX3B0ZXNgIG9yIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYCkgd2lsbCAqbm90KiBvdmVyd3JpdGUgYGVycmAgKHNpbmNlIHN1Y2Nlc3MgcmV0dXJucyAmZ3Q7PSAwKSBhbmQgYGVycmAgc3RpY2tzIGF0IGAtRUFHQUlOYC4gVGhpcyB0aGVuIGNhdXNlcyB0aGUgbG9vcCB0byByZS1lbnRlciB0aGUgYGlmIChlcnIgPT0gLUVBR0FJTikgY29udGludWU7YCBibG9jay4gVGhpcyBza2lwcyBhZHZhbmNpbmcgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzc2VzIChgc3JjX2FkZHJgLCBgZHN0X2FkZHJgKSwgbGVhZGluZyB0byBhIHJlcGVhdGVkIG1vdmUgb2YgdGhlIHNhbWUgcGFnZSwgcmVzdWx0aW5nIGluIGFuIGluZmluaXRlIGxvb3AuCgpJIG5lZWQgdG8gY29uZmlybSB0aGUgY29uZGl0aW9ucyB3aGVyZSBgbW92ZV9wYWdlc19wdGVzYCByZXR1cm5zIGAtRUFHQUlOYC4gTGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4uLiBJZiBgbW92ZV9wYWdlc19wdGVzYCByZXR1cm5zIGEgbmVnYXRpdmUgdmFsdWUsIHRoZSBvcmlnaW5hbCBgZXJyYCBnZXRzIG92ZXJ3cml0dGVuLCB0aHVzIHNvbHZpbmcgdGhlIHByb2JsZW0uIFRoZSBpc3N1ZSBzdXJmYWNlcyBpZiBgbW92ZV9wYWdlc19wdGVzYCByZXR1cm5zIGEgbm9uLW5lZ2F0aXZlIHZhbHVlLiBUaGUgcHJvZ3JhbSBlbmRzIHVwIHJldHJ5aW5nIHRoZSBzYW1lIHBhZ2UuIE5vdywgaWYgdGhlIHJldHJ5IGhhcHBlbnMsIGFuZCBgcG1kX25vbmUoKnNyY19wbWQpYCBpcyB0cnVlLCBvciBgcHRlX25vbmVgIGlzIHRydWUsIHRoZSBmdW5jdGlvbiB3aWxsIGxpa2VseSByZXR1cm4gYC1FTk9FTlRgIGlmIGBVRkZESU9fTU9WRV9NT0RFX0FMTE9XX1NSQ19IT0xFU2AgaXMgbm90IHNldC4gSWYgc2V0LCBpdCBtaWdodCByZXR1cm4gMCwgYW5kIGxvb3AgaW5maW5pdGVseS4gU28sIHllcywgdGhlIGJ1ZyBpcyByZWFsLgoKSSBhbHNvIGRvdWJsZS1jaGVja2VkIHRoYXQgYHVzZXJmYXVsdGZkX21vdmVgIGlzIHN0YXRpYyB3aXRoaW4gYG1tL3VzZXJmYXVsdGZkLmNgLCBidXQgaXQgaXMgc3RpbGwgYSBrZXkgc3ltYm9sIHRvIHRhcmdldC4KClNvLCBzdW1taW5nIHRoaXMgdXAsIHRoZSBmdXp6aW5nIHRhcmdldHMgc2hvdWxkIGJlIGB1c2VyZmF1bHRmZF9pb2N0bGAsIGB1c2VyZmF1bHRmZF9tb3ZlYCwgYW5kIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYCwgZW5hYmxpbmcgYFVTRVJGQVVMVEZEYCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSSBjYW4gc2VlIHRoaXMgYXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIHVzZXJmYXVsdGZkIGNvcmUgbG9naWMsIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UsIG1ha2luZyBpdCBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNFUkZBVUxURkQmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1c2VyZmF1bHRmZF9pb2N0bCYjMzQ7LAogICAgJiMzNDt1c2VyZmF1bHRmZF9tb3ZlJiMzNDssCiAgICAmIzM0O21vdmVfcGFnZXNfaHVnZV9wbWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIFVGRkRJT19NT1ZFIGlvY3RsIGhhbmRsZXIgd2hlcmUgYW4gLUVBR0FJTiBlcnJvciB3YXMgbm90IHJlc2V0IHRvIDAgYmVmb3JlIGNvbnRpbnVpbmcgdGhlIGxvb3AuIElmIG5vdCByZXNldCwgYSBzdWJzZXF1ZW50IHN1Y2Nlc3NmdWwgcGFnZSBtb3ZlIHdvdWxkIGxlYXZlIGVyciBhcyAtRUFHQUlOLCBjYXVzaW5nIHRoZSBsb29wIHRvIHNraXAgYWR2YW5jaW5nIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3Nlcy4gVGhpcyByZXN1bHRzIGluIGFuIGluZmluaXRlIGxvb3Agb3IgcmVwZWF0ZWQgYXR0ZW1wdHMgdG8gbW92ZSB0aGUgc2FtZSBwYWdlLiBUaGUgZml4IGVuc3VyZXMgZXJyIGlzIHJlc2V0IHRvIDAsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgdXNlcmZhdWx0ZmQgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTRVJGQVVMVEZEJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXNlcmZhdWx0ZmRfaW9jdGwmIzM0OywKICAgICYjMzQ7dXNlcmZhdWx0ZmRfbW92ZSYjMzQ7LAogICAgJiMzNDttb3ZlX3BhZ2VzX2h1Z2VfcG1kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBVRkZESU9fTU9WRSBpb2N0bCBoYW5kbGVyIHdoZXJlIGFuIC1FQUdBSU4gZXJyb3Igd2FzIG5vdCByZXNldCB0byAwIGJlZm9yZSBjb250aW51aW5nIHRoZSBsb29wLiBJZiBub3QgcmVzZXQsIGEgc3Vic2VxdWVudCBzdWNjZXNzZnVsIHBhZ2UgbW92ZSB3b3VsZCBsZWF2ZSBlcnIgYXMgLUVBR0FJTiwgY2F1c2luZyB0aGUgbG9vcCB0byBza2lwIGFkdmFuY2luZyB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMuIFRoaXMgcmVzdWx0cyBpbiBhbiBpbmZpbml0ZSBsb29wIG9yIHJlcGVhdGVkIGF0dGVtcHRzIHRvIG1vdmUgdGhlIHNhbWUgcGFnZS4gVGhlIGZpeCBlbnN1cmVzIGVyciBpcyByZXNldCB0byAwLCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIHVzZXJmYXVsdGZkIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNDowMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA0OjAwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgY29udHJvbCBmbG93IGJ1ZyBpbiBgbW92ZV9wYWdlcygpYCBpbiBgbW0vdXNlcmZhdWx0ZmQuY2AuIFByaW9yIHRvIHRoZSBwYXRjaCwgaWYgYSBwYWdlIG1vdmUgb3BlcmF0aW9uIHJldHVybmVkIGAtRUFHQUlOYCwgdGhlIGxvb3Agd291bGQgYGNvbnRpbnVlYCBidXQgZmFpbCB0byByZXNldCB0aGUgYGVycmAgdmFyaWFibGUgdG8gMC4gQmVjYXVzZSBgZXJyYCBpcyBub3QgdW5jb25kaXRpb25hbGx5IG92ZXJ3cml0dGVuIG9uIHN1Y2Nlc3NmdWwgcGFnZSBtb3ZlcyAoZS5nLiwgd2hlbiBgbW92ZV9wYWdlc19wdGVzKClgIHJldHVybnMgYSBwb3NpdGl2ZSBzdGVwIHNpemUpLCBgZXJyYCB3b3VsZCByZW1haW4gYC1FQUdBSU5gLiBUaGlzIGNhdXNlZCB0aGUgbG9vcCB0byBpbmZpbml0ZWx5IHJldHJ5IHRoZSBzYW1lIGFkZHJlc3Mgd2l0aG91dCBhZHZhbmNpbmcgYHNyY19hZGRyYCBhbmQgYGRzdF9hZGRyYCwgbGVhZGluZyB0byBhIGhhbmcuIFRoZSBwYXRjaCBzaW1wbHkgcmVzZXRzIGBlcnIgPSAwYCBiZWZvcmUgY29udGludWluZywgZml4aW5nIHRoZSBpbmZpbml0ZSBsb29wLlxuXG5UaGlzIGJ1ZyBpcyBhIHB1cmUgY29udHJvbCBmbG93IGlzc3VlIHJlc3VsdGluZyBpbiBhIGhhbmcuIEl0IGRvZXMgbm90IGludm9sdmUgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgbGVhayB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgZnV6emluZyAod2l0aCBLQVNBTiwgTE9DS0RFUCwgYW5kIHNvZnQgbG9ja3VwIGRldGVjdG9ycykgaXMgcGVyZmVjdGx5IGNhcGFibGUgb2YgZGV0ZWN0aW5nIGhhbmdzIGFuZCBpbmZpbml0ZSBsb29wcy4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzayBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBwYXRjaCB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQxYzQ4NmRhOWFjZDRmYTE3YTU2NWJlZWFjNDIyNzhjOWNlNzAzZjEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxOSAwMzo1NzowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3VzZXJmYXVsdGZkLmMgYi9tbS91c2VyZmF1bHRmZC5jCmluZGV4IGMzYWRlZGFhZjdkNTQuLmVjNWQ1MTFiZDE3OTEgMTAwNjQ0Ci0tLSBhL21tL3VzZXJmYXVsdGZkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdXNlcmZhdWx0ZmQuYwpAQCAtMjA4NSw4ICYjNDM7MjA4NSwxMCBAQCBzdGF0aWMgc3NpemVfdCBtb3ZlX3BhZ2VzKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsCiAJCX0KIAogCQlpZiAoZXJyKSB7Ci0JCQlpZiAoZXJyID09IC1FQUdBSU4pCiYjNDM7CQkJaWYgKGVyciA9PSAtRUFHQUlOKSB7CiYjNDM7CQkJCWVyciA9IDA7CiAJCQkJY29udGludWU7CiYjNDM7CQkJfQogCQkJYnJlYWs7CiAJCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDQ6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk1NAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBTdWJ0bGUgQnVnIEZpeCBpbiBgbW92ZV9wYWdlc2AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBtb3ZlX3BhZ2VzYCBpbiBgbW0vdXNlcmZhdWx0ZmQuY2AuIFRoZSBjaGFuZ2UgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCDigJMgaXQmIzM5O3Mgd3JhcHBpbmcgYW4gZXhpc3RpbmcgYGlmYCBzdGF0ZW1lbnQgd2l0aCBhbiBhZGRpdGlvbmFsIGN1cmx5IGJyYWNlIGFuZCBhZGRpbmcgYGVyciA9IDA7YCBpbnNpZGUgaXQuIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcsIGJlY2F1c2UgdGhlIGltcGFjdCBvZiBzZWVtaW5nbHkgc2ltcGxlIGNoYW5nZXMgY2FuIHNvbWV0aW1lcyBiZSBwcm9mb3VuZCBpbiBrZXJuZWwgY29kZS4KCkJhc2ljYWxseSwgdGhlIG9yaWdpbmFsIGNvZGUgaGFkIGEgYnVnIHdoZXJlIGlmIGBlcnJgIHdhcyBgLUVBR0FJTmAgaW4gdGhlIGBtb3ZlX3BhZ2VzYCBmdW5jdGlvbiwgaXQgd291bGQgY29udGludWUgdGhlIGxvb3AuICpCdXQqLCBjcnVjaWFsIHBvaW50IGhlcmUsIGl0ICpkaWRuJiMzOTt0KiByZXNldCBgZXJyYCB0byAwLiBUaGlzIG1lYW5zIHRoYXQgc3Vic2VxdWVudCBpdGVyYXRpb25zIGNvdWxkIHBvdGVudGlhbGx5IGluaGVyaXQgdGhpcyBlcnJvciBzdGF0dXMsIHdoaWNoIGlzIG9idmlvdXNseSBhIHByb2JsZW0uIEkmIzM5O20gd29uZGVyaW5nIHdoYXQgaXMgYWN0dWFsbHkgaGFuZGxlZCBpZiBgZXJyYCBpcyBub3QgemVybyBhbmQgaXMgcmV0dXJuZWQgZnJvbSB0aGUgZnVuY3Rpb24uCgpTbywgdGhlIGZpeCBjb3JyZWN0bHkgc2V0cyBgZXJyID0gMGAgYmVmb3JlIHRoZSBgY29udGludWVgLiBUaGUgaW1wbGljYXRpb24gaXMgdGhhdCBhIHRyYW5zaWVudCBgLUVBR0FJTmAgc2hvdWxkbiYjMzk7dCBwZXJtYW5lbnRseSB0YWludCB0aGUgZXJyb3Igc3RhdHVzIG9mIHRoZSBvdmVyYWxsIG9wZXJhdGlvbi4gVGhlIGxvb3AgY29udGludWVzLCBob3BlZnVsbHkgZXZlbnR1YWxseSBzdWNjZWVkaW5nLiBSaWdodCwgbWFrZXMgc2Vuc2UuIFRoaXMgcHJldmVudHMgdGhlIGVycm9uZW91cyBwcm9wYWdhdGlvbiBvZiB0aGUgYC1FQUdBSU5gIGVycm9yIGNvZGUuIEl0JiMzOTtzIGEgY2xhc3NpYyBleGFtcGxlIG9mIGEgc3VidGxlIGJ1ZyB0aGF0IGNvdWxkIGxlYWQgdG8gaW50ZXJtaXR0ZW50IGZhaWx1cmVzLCBlc3BlY2lhbGx5IGluIGhpZ2gtY29uY3VycmVuY3kgb3IgcmVzb3VyY2UtY29uc3RyYWluZWQgc2l0dWF0aW9ucy4gVGhpcyB0eXBlIG9mIGZpeCBpcyBlYXN5IHRvIG1pc3MsIGJ1dCBlc3NlbnRpYWwgZm9yIHJvYnVzdCBrZXJuZWwgYmVoYXZpb3IuIEkgc2hvdWxkIHByb2JhYmx5IGRpdmUgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbW92ZV9wYWdlc2AgdG8gY29uZmlybSB0aGUgZXJyb3IgaGFuZGxpbmcgc3RyYXRlZ3kgYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYmV0dGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb3ZlX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdXNlcmZhdWx0ZmQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS91c2VyZmF1bHRmZC5jPTEzODI9c3RhdGljIGludCBtb3ZlX3plcm9wYWdlX3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTE0MTQtICovXG5tbS91c2VyZmF1bHRmZC5jOjE0MTU6c3RhdGljIGxvbmcgbW92ZV9wYWdlc19wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWQsXG5tbS91c2VyZmF1bHRmZC5jLTE0MTYtXHRcdFx0ICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcbi0tXG5tbS91c2VyZmF1bHRmZC5jPTE4NTk9c3RhdGljIHZvaWQgdWZmZF9tb3ZlX3VubG9jayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0xODY3LS8qKlxubW0vdXNlcmZhdWx0ZmQuYzoxODY4OiAqIG1vdmVfcGFnZXMgLSBtb3ZlIGFyYml0cmFyeSBhbm9ueW1vdXMgcGFnZXMgb2YgYW4gZXhpc3Rpbmcgdm1hXG5tbS91c2VyZmF1bHRmZC5jLTE4NjktICogQGN0eDogcG9pbnRlciB0byB0aGUgdXNlcmZhdWx0ZmQgY29udGV4dFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTg3Ni0gKlxubW0vdXNlcmZhdWx0ZmQuYzoxODc3OiAqIG1vdmVfcGFnZXMoKSByZW1hcHMgYXJiaXRyYXJ5IGFub255bW91cyBwYWdlcyBhdG9taWNhbGx5IGluIHplcm9cbm1tL3VzZXJmYXVsdGZkLmMtMTg3OC0gKiBjb3B5LiBJdCBvbmx5IHdvcmtzIG9uIG5vbiBzaGFyZWQgYW5vbnltb3VzIHBhZ2VzIGJlY2F1c2UgdGhvc2UgY2FuXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0xODg4LSAqIHN0b3JhZ2Ugb3IgYW55IG90aGVyIEkvTyBkZXZpY2UgKE1BRFZfRE9OVEZPUksgaW4gdGhlIHNvdXJjZSB2bWFcbm1tL3VzZXJmYXVsdGZkLmM6MTg4OTogKiBhdm9pZHMgbW92ZV9wYWdlcygpIHRvIGZhaWwgd2l0aCAtRUJVU1kgaWYgdGhlIHByb2Nlc3MgZm9ya3MgYmVmb3JlXG5tbS91c2VyZmF1bHRmZC5jOjE4OTA6ICogbW92ZV9wYWdlcygpIGlzIGNhbGxlZCksIHRoZW4gaXQgd2lsbCBjYWxsIG1vdmVfcGFnZXMoKSB0byBtYXAgdGhlXG5tbS91c2VyZmF1bHRmZC5jLTE4OTEtICogcGFnZSBpbiB0aGUgZmF1bHRpbmcgYWRkcmVzcyBpbiB0aGUgZGVzdGluYXRpb24gdm1hLlxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTkwNS0gKiB0aGUgZGVzdGluYXRpb24gdmlydHVhbCBtZW1vcnkgcmFuZ2UgaXMgbm90IGEgd2hvbGUgdW5tYXBwZWQgaG9sZSxcbm1tL3VzZXJmYXVsdGZkLmM6MTkwNjogKiBtb3ZlX3BhZ2VzKCkgd2lsbCBmYWlsIHJlc3BlY3RpdmVseSB3aXRoIC1FTk9FTlQgb3IgLUVFWElTVC4gVGhpc1xubW0vdXNlcmZhdWx0ZmQuYy0xOTA3LSAqIHByb3ZpZGVzIGEgdmVyeSBzdHJpY3QgYmVoYXZpb3IgdG8gYXZvaWQgYW55IGNoYW5jZSBvZiBtZW1vcnlcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTE5MTAtICogdGltZSBmb3IgYW55IGdpdmVuIGZhdWx0aW5nIGFkZHJlc3MuIFRoaXMgbWVhbnMgdGhhdCBpZiB0d28gdGhyZWFkc1xubW0vdXNlcmZhdWx0ZmQuYzoxOTExOiAqIHRyeSB0byBib3RoIGNhbGwgbW92ZV9wYWdlcygpIG9uIHRoZSBzYW1lIGRlc3RpbmF0aW9uIGFkZHJlc3MgYXQgdGhlXG5tbS91c2VyZmF1bHRmZC5jLTE5MTItICogc2FtZSB0aW1lLCB0aGUgc2Vjb25kIHRocmVhZCB3aWxsIGdldCBhbiBleHBsaWNpdCBlcnJvciBmcm9tIHRoaXNcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTE5MjAtICogYW4gYW1vdW50IG9mIGJ5dGVzIHN1Y2Nlc3NmdWxseSBtb3ZlZC4gSWYgdGhlIHJldHZhbCByZXBvcnRzIGFcbm1tL3VzZXJmYXVsdGZkLmM6MTkyMTogKiBcJiMzNDtzaG9ydFwmIzM0OyByZW1hcCwgdGhlIG1vdmVfcGFnZXMoKSBjb21tYW5kIHNob3VsZCBiZSByZXBlYXRlZCBieVxubW0vdXNlcmZhdWx0ZmQuYy0xOTIyLSAqIHVzZXJsYW5kIHdpdGggc3JjJiM0MztyZXR2YWwsIGRzdCYjNDM7cmV2YWwsIGxlbi1yZXR2YWwgaWYgaXQgd2FudHMgdG8ga25vd1xuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTkzMy0gKi9cbm1tL3VzZXJmYXVsdGZkLmM6MTkzNDpzdGF0aWMgc3NpemVfdCBtb3ZlX3BhZ2VzKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsXG5tbS91c2VyZmF1bHRmZC5jLTE5MzUtXHRcdCAgIHVuc2lnbmVkIGxvbmcgc3JjX3N0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbiwgX191NjQgbW9kZSlcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTIwMTQtXHRcdCAqIGJlIHN0cmljdC4gSWYgZHN0X3BtZCBjaGFuZ2VzIGludG8gVFBIIGFmdGVyIHRoaXMgY2hlY2ssIHRoZVxubW0vdXNlcmZhdWx0ZmQuYzoyMDE1Olx0XHQgKiBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgcmV0cnlcbm1tL3VzZXJmYXVsdGZkLmM6MjAxNjpcdFx0ICogd2hpbGUgbW92ZV9wYWdlc19wdGUoKSB3aWxsIGRldGVjdCB0aGUgY2hhbmdlIGFuZCBmYWlsLlxubW0vdXNlcmZhdWx0ZmQuYy0yMDE3LVx0XHQgKi9cbi0tXG5tbS91c2VyZmF1bHRmZC5jLTIwNDEtXHRcdFx0XHRzcGxpdF9odWdlX3BtZChzcmNfdm1hLCBzcmNfcG1kLCBzcmNfYWRkcik7XG5tbS91c2VyZmF1bHRmZC5jOjIwNDI6XHRcdFx0XHQvKiBUaGUgZm9saW8gd2lsbCBiZSBzcGxpdCBieSBtb3ZlX3BhZ2VzX3B0ZSgpICovXG5tbS91c2VyZmF1bHRmZC5jLTIwNDMtXHRcdFx0XHRjb250aW51ZTtcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTIwNDUtXG5tbS91c2VyZmF1bHRmZC5jOjIwNDY6XHRcdFx0ZXJyID0gbW92ZV9wYWdlc19odWdlX3BtZChtbSwgZHN0X3BtZCwgc3JjX3BtZCxcbm1tL3VzZXJmYXVsdGZkLmMtMjA0Ny1cdFx0XHRcdFx0XHQgIGRzdF9wbWR2YWwsIGRzdF92bWEsIHNyY192bWEsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0yMDY4LVxubW0vdXNlcmZhdWx0ZmQuYzoyMDY5Olx0XHRcdHJldCA9IG1vdmVfcGFnZXNfcHRlcyhtbSwgZHN0X3BtZCwgc3JjX3BtZCxcbm1tL3VzZXJmYXVsdGZkLmMtMjA3MC1cdFx0XHRcdFx0ICAgICAgZHN0X3ZtYSwgc3JjX3ZtYSwgZHN0X2FkZHIsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYz00MjE2PXN0YXRpYyBpbnQgdXNlcmZhdWx0ZmRfbW92ZShzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy00MjU1LVx0aWYgKG1tZ2V0X25vdF96ZXJvKG1tKSkge1xubW0vdXNlcmZhdWx0ZmQuYzo0MjU2Olx0XHRyZXQgPSBtb3ZlX3BhZ2VzKGN0eCwgdWZmZGlvX21vdmUuZHN0LCB1ZmZkaW9fbW92ZS5zcmMsXG5tbS91c2VyZmF1bHRmZC5jLTQyNTctXHRcdFx0XHQgdWZmZGlvX21vdmUubGVuLCB1ZmZkaW9fbW92ZS5tb2RlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDQ6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc5MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgbW92ZV9wYWdlc2AgaW4gYG1tL3VzZXJmYXVsdGZkLmNgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgbW92ZV9wYWdlc2AgaXMgaGFuZGxpbmcgdGhpbmdzIGluIHRoZSBjb250ZXh0IG9mIHVzZXJmYXVsdGZkLiBUaGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvciBob3cgd2UgbWFuYWdlIHBhZ2UgbWlncmF0aW9uIGFuZCB0cmFuc2ZlciwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCB1c2VyLXNwYWNlIG1lbW9yeSBhY2Nlc3MgZmF1bHRzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUga2VybmVsIG9yY2hlc3RyYXRlcyB0aGlzIHdob2xlIGRhbmNlIGJldHdlZW4gdXNlciBzcGFjZSBhbmQga2VybmVsIHNwYWNlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB0aGUgaW50ZXJwbGF5IGJldHdlZW4gYHVzZXJmYXVsdGZkYCBhbmQgdGhlIHBhZ2UgbWlncmF0aW9uIG1hY2hpbmVyeS4gSG93IGRvZXMgaXQga25vdyB3aGVyZSBwYWdlcyBhcmUsIGFuZCBob3cgZG9lcyBpdCBkaXJlY3QgdGhlbSB3aGVyZSB0aGV5IG5lZWQgdG8gZ28/IEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgYSBkZWxpY2F0ZSBiYWxhbmNpbmcgYWN0IGhlcmUsIGVuc3VyaW5nIGRhdGEgaW50ZWdyaXR5IHdoaWxlIG1pbmltaXppbmcgdGhlIHBlcmZvcm1hbmNlIGhpdCBvZiBwYWdlIGZhdWx0cy4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSBkbyBpdC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUga2V5IGxvY2tpbmcgcHJpbWl0aXZlcywgZXJyb3IgaGFuZGxpbmcgcGF0aHMsIGFuZCB0aGUgb3ZlcmFsbCBsb2dpYyBmbG93LiBUaGlzIGNvdWxkIGdpdmUgbWUgc29tZSBncmVhdCBpbnNpZ2h0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDQ6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS91c2VyZmF1bHRmZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTkzNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTkzNDpcdHN0YXRpYyBzc2l6ZV90IG1vdmVfcGFnZXMoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LCB1bnNpZ25lZCBsb25nIGRzdF9zdGFydCxcbjE5MzU6XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBzcmNfc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuLCBfX3U2NCBtb2RlKVxuMTkzNjpcdHtcbjE5Mzc6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3R4LVx1MDAzZW1tO1xuMTkzODpcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmNfdm1hLCAqZHN0X3ZtYTtcbjE5Mzk6XHRcdHVuc2lnbmVkIGxvbmcgc3JjX2FkZHIsIGRzdF9hZGRyLCBzcmNfZW5kO1xuMTk0MDpcdFx0cG1kX3QgKnNyY19wbWQsICpkc3RfcG1kO1xuMTk0MTpcdFx0bG9uZyBlcnIgPSAtRUlOVkFMO1xuMTk0MjpcdFx0c3NpemVfdCBtb3ZlZCA9IDA7XG4xOTQzOlx0XG4xOTQ0Olx0XHQvKiBTYW5pdGl6ZSB0aGUgY29tbWFuZCBwYXJhbWV0ZXJzLiAqL1xuMTk0NTpcdFx0Vk1fV0FSTl9PTl9PTkNFKHNyY19zdGFydCBcdTAwMjYgflBBR0VfTUFTSyk7XG4xOTQ2Olx0XHRWTV9XQVJOX09OX09OQ0UoZHN0X3N0YXJ0IFx1MDAyNiB+UEFHRV9NQVNLKTtcbjE5NDc6XHRcdFZNX1dBUk5fT05fT05DRShsZW4gXHUwMDI2IH5QQUdFX01BU0spO1xuMTk0ODpcdFxuMTk0OTpcdFx0LyogRG9lcyB0aGUgYWRkcmVzcyByYW5nZSB3cmFwLCBvciBpcyB0aGUgc3BhbiB6ZXJvLXNpemVkPyAqL1xuMTk1MDpcdFx0Vk1fV0FSTl9PTl9PTkNFKHNyY19zdGFydCAmIzQzOyBsZW4gXHUwMDNjIHNyY19zdGFydCk7XG4xOTUxOlx0XHRWTV9XQVJOX09OX09OQ0UoZHN0X3N0YXJ0ICYjNDM7IGxlbiBcdTAwM2MgZHN0X3N0YXJ0KTtcbjE5NTI6XHRcbjE5NTM6XHRcdGVyciA9IHVmZmRfbW92ZV9sb2NrKG1tLCBkc3Rfc3RhcnQsIHNyY19zdGFydCwgXHUwMDI2ZHN0X3ZtYSwgXHUwMDI2c3JjX3ZtYSk7XG4xOTU0Olx0XHRpZiAoZXJyKVxuMTk1NTpcdFx0XHRnb3RvIG91dDtcbjE5NTY6XHRcbjE5NTc6XHRcdC8qIFJlLWNoZWNrIGFmdGVyIHRha2luZyBtYXBfY2hhbmdpbmdfbG9jayAqL1xuMTk1ODpcdFx0ZXJyID0gLUVBR0FJTjtcbjE5NTk6XHRcdGRvd25fcmVhZChcdTAwMjZjdHgtXHUwMDNlbWFwX2NoYW5naW5nX2xvY2spO1xuMTk2MDpcdFx0aWYgKGxpa2VseShhdG9taWNfcmVhZChcdTAwMjZjdHgtXHUwMDNlbW1hcF9jaGFuZ2luZykpKVxuMTk2MTpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xOTYyOlx0XHQvKlxuMTk2MzpcdFx0ICogTWFrZSBzdXJlIHRoZSB2bWEgaXMgbm90IHNoYXJlZCwgdGhhdCB0aGUgc3JjIGFuZCBkc3QgcmVtYXBcbjE5NjQ6XHRcdCAqIHJhbmdlcyBhcmUgYm90aCB2YWxpZCBhbmQgZnVsbHkgd2l0aGluIGEgc2luZ2xlIGV4aXN0aW5nXG4xOTY1Olx0XHQgKiB2bWEuXG4xOTY2Olx0XHQgKi9cbjE5Njc6XHRcdGVyciA9IC1FSU5WQUw7XG4xOTY4Olx0XHRpZiAoc3JjX3ZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fU0hBUkVEKVxuMTk2OTpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xOTcwOlx0XHRpZiAoc3JjX3N0YXJ0ICYjNDM7IGxlbiBcdTAwM2Ugc3JjX3ZtYS1cdTAwM2V2bV9lbmQpXG4xOTcxOlx0XHRcdGdvdG8gb3V0X3VubG9jaztcbjE5NzI6XHRcbjE5NzM6XHRcdGlmIChkc3Rfdm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9TSEFSRUQpXG4xOTc0Olx0XHRcdGdvdG8gb3V0X3VubG9jaztcbjE5NzU6XHRcdGlmIChkc3Rfc3RhcnQgJiM0MzsgbGVuIFx1MDAzZSBkc3Rfdm1hLVx1MDAzZXZtX2VuZClcbjE5NzY6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuMTk3NzpcdFxuMTk3ODpcdFx0ZXJyID0gdmFsaWRhdGVfbW92ZV9hcmVhcyhjdHgsIHNyY192bWEsIGRzdF92bWEpO1xuMTk3OTpcdFx0aWYgKGVycilcbjE5ODA6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuMTk4MTpcdFxuMTk4MjpcdFx0Zm9yIChzcmNfYWRkciA9IHNyY19zdGFydCwgZHN0X2FkZHIgPSBkc3Rfc3RhcnQsIHNyY19lbmQgPSBzcmNfc3RhcnQgJiM0MzsgbGVuO1xuMTk4MzpcdFx0ICAgICBzcmNfYWRkciBcdTAwM2Mgc3JjX2VuZDspIHtcbjE5ODQ6XHRcdFx0c3BpbmxvY2tfdCAqcHRsO1xuMTk4NTpcdFx0XHRwbWRfdCBkc3RfcG1kdmFsO1xuMTk4NjpcdFx0XHR1bnNpZ25lZCBsb25nIHN0ZXBfc2l6ZTtcbjE5ODc6XHRcbjE5ODg6XHRcdFx0LypcbjE5ODk6XHRcdFx0ICogQmVsb3cgd29ya3MgYmVjYXVzZSBhbm9ueW1vdXMgYXJlYSB3b3VsZCBub3QgaGF2ZSBhXG4xOTkwOlx0XHRcdCAqIHRyYW5zcGFyZW50IGh1Z2UgUFVELiBJZiBmaWxlLWJhY2tlZCBzdXBwb3J0IGlzIGFkZGVkLFxuMTk5MTpcdFx0XHQgKiB0aGF0IGNhc2Ugd291bGQgbmVlZCB0byBiZSBoYW5kbGVkIGhlcmUuXG4xOTkyOlx0XHRcdCAqL1xuMTk5MzpcdFx0XHRzcmNfcG1kID0gbW1fZmluZF9wbWQobW0sIHNyY19hZGRyKTtcbjE5OTQ6XHRcdFx0aWYgKHVubGlrZWx5KCFzcmNfcG1kKSkge1xuMTk5NTpcdFx0XHRcdGlmICghKG1vZGUgXHUwMDI2IFVGRkRJT19NT1ZFX01PREVfQUxMT1dfU1JDX0hPTEVTKSkge1xuMTk5NjpcdFx0XHRcdFx0ZXJyID0gLUVOT0VOVDtcbjE5OTc6XHRcdFx0XHRcdGJyZWFrO1xuMTk5ODpcdFx0XHRcdH1cbjE5OTk6XHRcdFx0XHRzcmNfcG1kID0gbW1fYWxsb2NfcG1kKG1tLCBzcmNfYWRkcik7XG4yMDAwOlx0XHRcdFx0aWYgKHVubGlrZWx5KCFzcmNfcG1kKSkge1xuMjAwMTpcdFx0XHRcdFx0ZXJyID0gLUVOT01FTTtcbjIwMDI6XHRcdFx0XHRcdGJyZWFrO1xuMjAwMzpcdFx0XHRcdH1cbjIwMDQ6XHRcdFx0fVxuMjAwNTpcdFx0XHRkc3RfcG1kID0gbW1fYWxsb2NfcG1kKG1tLCBkc3RfYWRkcik7XG4yMDA2Olx0XHRcdGlmICh1bmxpa2VseSghZHN0X3BtZCkpIHtcbjIwMDc6XHRcdFx0XHRlcnIgPSAtRU5PTUVNO1xuMjAwODpcdFx0XHRcdGJyZWFrO1xuMjAwOTpcdFx0XHR9XG4yMDEwOlx0XG4yMDExOlx0XHRcdGRzdF9wbWR2YWwgPSBwbWRwX2dldF9sb2NrbGVzcyhkc3RfcG1kKTtcbjIwMTI6XHRcdFx0LypcbjIwMTM6XHRcdFx0ICogSWYgdGhlIGRzdF9wbWQgaXMgbWFwcGVkIGFzIFRIUCBkb24mIzM5O3Qgb3ZlcnJpZGUgaXQgYW5kIGp1c3RcbjIwMTQ6XHRcdFx0ICogYmUgc3RyaWN0LiBJZiBkc3RfcG1kIGNoYW5nZXMgaW50byBUUEggYWZ0ZXIgdGhpcyBjaGVjaywgdGhlXG4yMDE1Olx0XHRcdCAqIG1vdmVfcGFnZXNfaHVnZV9wbWQoKSB3aWxsIGRldGVjdCB0aGUgY2hhbmdlIGFuZCByZXRyeVxuMjAxNjpcdFx0XHQgKiB3aGlsZSBtb3ZlX3BhZ2VzX3B0ZSgpIHdpbGwgZGV0ZWN0IHRoZSBjaGFuZ2UgYW5kIGZhaWwuXG4yMDE3Olx0XHRcdCAqL1xuMjAxODpcdFx0XHRpZiAodW5saWtlbHkocG1kX3RyYW5zX2h1Z2UoZHN0X3BtZHZhbCkpKSB7XG4yMDE5Olx0XHRcdFx0ZXJyID0gLUVFWElTVDtcbjIwMjA6XHRcdFx0XHRicmVhaztcbjIwMjE6XHRcdFx0fVxuMjAyMjpcdFxuMjAyMzpcdFx0XHRwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHNyY19wbWQsIHNyY192bWEpO1xuMjAyNDpcdFx0XHRpZiAocHRsKSB7XG4yMDI1Olx0XHRcdFx0LyogQ2hlY2sgaWYgd2UgY2FuIG1vdmUgdGhlIHBtZCB3aXRob3V0IHNwbGl0dGluZyBpdC4gKi9cbjIwMjY6XHRcdFx0XHRpZiAobW92ZV9zcGxpdHNfaHVnZV9wbWQoZHN0X2FkZHIsIHNyY19hZGRyLCBzcmNfc3RhcnQgJiM0MzsgbGVuKSB8fFxuMjAyNzpcdFx0XHRcdCAgICAhcG1kX25vbmUoZHN0X3BtZHZhbCkpIHtcbjIwMjg6XHRcdFx0XHRcdC8qIENhbiBiZSBhIG1pZ3JhdGlvbiBlbnRyeSAqL1xuMjAyOTpcdFx0XHRcdFx0aWYgKHBtZF9wcmVzZW50KCpzcmNfcG1kKSkge1xuMjAzMDpcdFx0XHRcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcG1kX2ZvbGlvKCpzcmNfcG1kKTtcbjIwMzE6XHRcbjIwMzI6XHRcdFx0XHRcdFx0aWYgKCFpc19odWdlX3plcm9fZm9saW8oZm9saW8pIFx1MDAyNlx1MDAyNlxuMjAzMzpcdFx0XHRcdFx0XHQgICAgIVBhZ2VBbm9uRXhjbHVzaXZlKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA0OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3MzMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBEZWVwZXIgaW50byBgbW92ZV9wYWdlc2AgYW5kIFVzZXJmYXVsdGZkcyoqCgpPa2F5LCB0aW1lIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgZ3V0cyBvZiBgbW92ZV9wYWdlc2Agd2l0aGluIHRoZSBgbW0vdXNlcmZhdWx0ZmQuY2AgZmlsZS4gSSYjMzk7dmUgYmVlbiB3b3JraW5nIHdpdGggdXNlcmZhdWx0ZmQgYW5kIGl0cyBpbnRlcmFjdGlvbnMgd2l0aCBwYWdlIG1pZ3JhdGlvbiBhbmQgbm93IEkgd2FudCB0byBnZXQgYSBtb3JlIGNvbmNyZXRlIHVuZGVyc3RhbmRpbmcgb2YgaXRzIGZ1bmN0aW9uYWxpdHkuIFdoYXQgc3BlY2lmaWMgbnVhbmNlcyBhcmUgdGhlcmUgaW4gYG1vdmVfcGFnZXNgIHdpdGggcmVzcGVjdCB0byB1c2VyZmF1bHRmZD8gQXJlIHRoZXJlIGFueSBjbGV2ZXIgdHJpY2tzIG9yIG9wdGltaXNhdGlvbnM/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlIGFuZCBjb25jdXJyZW5jeSwgZ2l2ZW4gdGhpcyBpcyBsaWtlbHkgYSBob3QgcGF0aD8gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIHVzZXJmYXVsdGZkIG1lY2hhbmlzbSBoYW5kbGVzIHBhZ2UgZmF1bHRzIGR1cmluZyB0aGUgbWlncmF0aW9uIHByb2Nlc3MgaXRzZWxmLiBBcmUgdGhlIHBhZ2UgZmF1bHRzIHJlLXRyaWdnZXJlZCBhbmQgaG93IGFyZSB0aGV5IHRyYWNrZWQ/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGluIGRldGFpbCB0byBhc3Nlc3MgaXRzIHN1aXRhYmlsaXR5IGluIG15IGN1cnJlbnQgcHJvamVjdC4gTGV0JiMzOTtzIHNlZSBob3cgdGhlIGtlcm5lbCBlbmdpbmVlcnMgaGFuZGxlZCBhbGwgb2YgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDQ6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS91c2VyZmF1bHRmZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAzNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjAzNDpcdFx0XHRcdFx0XHRcdHNwaW5fdW5sb2NrKHB0bCk7XG4yMDM1Olx0XHRcdFx0XHRcdFx0ZXJyID0gLUVCVVNZO1xuMjAzNjpcdFx0XHRcdFx0XHRcdGJyZWFrO1xuMjAzNzpcdFx0XHRcdFx0XHR9XG4yMDM4Olx0XHRcdFx0XHR9XG4yMDM5Olx0XG4yMDQwOlx0XHRcdFx0XHRzcGluX3VubG9jayhwdGwpO1xuMjA0MTpcdFx0XHRcdFx0c3BsaXRfaHVnZV9wbWQoc3JjX3ZtYSwgc3JjX3BtZCwgc3JjX2FkZHIpO1xuMjA0MjpcdFx0XHRcdFx0LyogVGhlIGZvbGlvIHdpbGwgYmUgc3BsaXQgYnkgbW92ZV9wYWdlc19wdGUoKSAqL1xuMjA0MzpcdFx0XHRcdFx0Y29udGludWU7XG4yMDQ0Olx0XHRcdFx0fVxuMjA0NTpcdFxuMjA0NjpcdFx0XHRcdGVyciA9IG1vdmVfcGFnZXNfaHVnZV9wbWQobW0sIGRzdF9wbWQsIHNyY19wbWQsXG4yMDQ3Olx0XHRcdFx0XHRcdFx0ICBkc3RfcG1kdmFsLCBkc3Rfdm1hLCBzcmNfdm1hLFxuMjA0ODpcdFx0XHRcdFx0XHRcdCAgZHN0X2FkZHIsIHNyY19hZGRyKTtcbjIwNDk6XHRcdFx0XHRzdGVwX3NpemUgPSBIUEFHRV9QTURfU0laRTtcbjIwNTA6XHRcdFx0fSBlbHNlIHtcbjIwNTE6XHRcdFx0XHRsb25nIHJldDtcbjIwNTI6XHRcbjIwNTM6XHRcdFx0XHRpZiAocG1kX25vbmUoKnNyY19wbWQpKSB7XG4yMDU0Olx0XHRcdFx0XHRpZiAoIShtb2RlIFx1MDAyNiBVRkZESU9fTU9WRV9NT0RFX0FMTE9XX1NSQ19IT0xFUykpIHtcbjIwNTU6XHRcdFx0XHRcdFx0ZXJyID0gLUVOT0VOVDtcbjIwNTY6XHRcdFx0XHRcdFx0YnJlYWs7XG4yMDU3Olx0XHRcdFx0XHR9XG4yMDU4Olx0XHRcdFx0XHRpZiAodW5saWtlbHkoX19wdGVfYWxsb2MobW0sIHNyY19wbWQpKSkge1xuMjA1OTpcdFx0XHRcdFx0XHRlcnIgPSAtRU5PTUVNO1xuMjA2MDpcdFx0XHRcdFx0XHRicmVhaztcbjIwNjE6XHRcdFx0XHRcdH1cbjIwNjI6XHRcdFx0XHR9XG4yMDYzOlx0XG4yMDY0Olx0XHRcdFx0aWYgKHVubGlrZWx5KHB0ZV9hbGxvYyhtbSwgZHN0X3BtZCkpKSB7XG4yMDY1Olx0XHRcdFx0XHRlcnIgPSAtRU5PTUVNO1xuMjA2NjpcdFx0XHRcdFx0YnJlYWs7XG4yMDY3Olx0XHRcdFx0fVxuMjA2ODpcdFxuMjA2OTpcdFx0XHRcdHJldCA9IG1vdmVfcGFnZXNfcHRlcyhtbSwgZHN0X3BtZCwgc3JjX3BtZCxcbjIwNzA6XHRcdFx0XHRcdFx0ICAgICAgZHN0X3ZtYSwgc3JjX3ZtYSwgZHN0X2FkZHIsXG4yMDcxOlx0XHRcdFx0XHRcdCAgICAgIHNyY19hZGRyLCBzcmNfZW5kIC0gc3JjX2FkZHIsIG1vZGUpO1xuMjA3MjpcdFx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4yMDczOlx0XHRcdFx0XHRlcnIgPSByZXQ7XG4yMDc0Olx0XHRcdFx0ZWxzZVxuMjA3NTpcdFx0XHRcdFx0c3RlcF9zaXplID0gcmV0O1xuMjA3NjpcdFx0XHR9XG4yMDc3Olx0XG4yMDc4Olx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuMjA3OTpcdFxuMjA4MDpcdFx0XHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcbjIwODE6XHRcdFx0XHQvKiBEbyBub3Qgb3ZlcnJpZGUgYW4gZXJyb3IgKi9cbjIwODI6XHRcdFx0XHRpZiAoIWVyciB8fCBlcnIgPT0gLUVBR0FJTilcbjIwODM6XHRcdFx0XHRcdGVyciA9IC1FSU5UUjtcbjIwODQ6XHRcdFx0XHRicmVhaztcbjIwODU6XHRcdFx0fVxuMjA4NjpcdFxuMjA4NzpcdFx0XHRpZiAoZXJyKSB7XG4yMDg4Olx0XHRcdFx0aWYgKGVyciA9PSAtRUFHQUlOKSB7XG4yMDg5Olx0XHRcdFx0XHRlcnIgPSAwO1xuMjA5MDpcdFx0XHRcdFx0Y29udGludWU7XG4yMDkxOlx0XHRcdFx0fVxuMjA5MjpcdFx0XHRcdGJyZWFrO1xuMjA5MzpcdFx0XHR9XG4yMDk0Olx0XG4yMDk1Olx0XHRcdC8qIFByb2NlZWQgdG8gdGhlIG5leHQgcGFnZSAqL1xuMjA5NjpcdFx0XHRkc3RfYWRkciAmIzQzOz0gc3RlcF9zaXplO1xuMjA5NzpcdFx0XHRzcmNfYWRkciAmIzQzOz0gc3RlcF9zaXplO1xuMjA5ODpcdFx0XHRtb3ZlZCAmIzQzOz0gc3RlcF9zaXplO1xuMjA5OTpcdFx0fVxuMjEwMDpcdFxuMjEwMTpcdG91dF91bmxvY2s6XG4yMTAyOlx0XHR1cF9yZWFkKFx1MDAyNmN0eC1cdTAwM2VtYXBfY2hhbmdpbmdfbG9jayk7XG4yMTAzOlx0XHR1ZmZkX21vdmVfdW5sb2NrKGRzdF92bWEsIHNyY192bWEpO1xuMjEwNDpcdG91dDpcbjIxMDU6XHRcdFZNX1dBUk5fT05fT05DRShtb3ZlZCBcdTAwM2MgMCk7XG4yMTA2Olx0XHRWTV9XQVJOX09OX09OQ0UoZXJyIFx1MDAzZSAwKTtcbjIxMDc6XHRcdFZNX1dBUk5fT05fT05DRSghbW92ZWQgXHUwMDI2XHUwMDI2ICFlcnIpO1xuMjEwODpcdFx0cmV0dXJuIG1vdmVkID8gbW92ZWQgOiBlcnI7XG4yMTA5Olx0fVxuMjExMDpcdFxuMjExMTpcdHN0YXRpYyBib29sIHZtYV9jYW5fdXNlcmZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bV9mbGFnc190IHZtX2ZsYWdzLFxuMjExMjpcdFx0XHQgICAgICAgYm9vbCB3cF9hc3luYylcbjIxMTM6XHR7XG4yMTE0Olx0XHRjb25zdCBzdHJ1Y3Qgdm1fdWZmZF9vcHMgKm9wcyA9IHZtYV91ZmZkX29wcyh2bWEpO1xuMjExNTpcdFxuMjExNjpcdFx0aWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgKFZNX0RST1BQQUJMRSB8IFZNX1NIQURPV19TVEFDSykpXG4yMTE3Olx0XHRcdHJldHVybiBmYWxzZTtcbjIxMTg6XHRcbjIxMTk6XHRcdGlmICghaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkgXHUwMDI2XHUwMDI2ICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1NQRUNJQUwpKVxuMjEyMDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4yMTIxOlx0XG4yMTIyOlx0XHR2bV9mbGFncyBcdTAwMjY9IF9fVk1fVUZGRF9GTEFHUztcbjIxMjM6XHRcbjIxMjQ6XHRcdC8qXG4yMTI1Olx0XHQgKiBJZiBXUCBpcyB0aGUgb25seSBtb2RlIGVuYWJsZWQgYW5kIGNvbnRleHQgaXMgd3AgYXN5bmMsIGFsbG93IGFueVxuMjEyNjpcdFx0ICogbWVtb3J5IHR5cGUuXG4yMTI3Olx0XHQgKi9cbjIxMjg6XHRcdGlmICh3cF9hc3luYyBcdTAwMjZcdTAwMjYgKHZtX2ZsYWdzID09IFZNX1VGRkRfV1ApKVxuMjEyOTpcdFx0XHRyZXR1cm4gdHJ1ZTtcbjIxMzA6XHRcbjIxMzE6XHRcdC8qIEZvciBhbnkgb3RoZXIgbW9kZSByZWplY3QgVk1BcyB0aGF0IGRvbiYjMzk7dCBpbXBsZW1lbnQgdm1fdWZmZF9vcHMgKi9cbjIxMzI6XHRcdGlmICghb3BzKVxuMjEzMzpcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA0OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczOTUKCQkJCQkJCW91dHB1dDogMjU0CgkJCQkJCQl0aG91Z2h0czogMTM0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBtb3ZlX3BhZ2VzYCBCdWcgYW5kIEl0cyBGaXgqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaXNzZWN0aW5nIHRoaXMgcGF0Y2ggYW5kIEkgdGhpbmsgSSYjMzk7dmUgZ290IGEgZ29vZCBoYW5kbGUgb24gd2hhdCYjMzk7cyBnb2luZyBvbiBoZXJlLiBUaGUgY29yZSBpc3N1ZSBpcyB3aXRoIGhvdyB0aGUgYGVycmAgdmFyaWFibGUgaXMgaGFuZGxlZCB3aXRoaW4gdGhpcyBsb29wLiBJbml0aWFsbHksIEkgd2FzIGEgYml0IGNvbmZ1c2VkIGJ5IHRoZSBsb2dpYywgZXNwZWNpYWxseSB3aXRoIHRoYXQgYHJldHVybiBtb3ZlZCA/IG1vdmVkIDogZXJyO2AgYXQgdGhlIGVuZC4gQnV0IG5vdyBpdCBtYWtlcyBzZW5zZS4gSXQmIzM5O3MgZXNzZW50aWFsbHkgcmV0dXJuaW5nIGVpdGhlciB0aGUgbnVtYmVyIG9mIGJ5dGVzIG1vdmVkIG9yIHRoZSBlcnJvciBjb2RlLiBUaGUgcHJvYmxlbSBhcmlzZXMgd2hlbiB3ZSBnZXQgYW4gYC1FQUdBSU5gIGVycm9yLgoKSSBzZWUgaXQgbm93OiB0aGUgYnVnIHN0ZW1zIGZyb20gYGVycmAgYmVpbmcgc2V0IHRvIGAtRUFHQUlOYCBpbnNpZGUgdGhlIGxvb3AsIGFuZCB0aGVuIGBjb250aW51ZWAgaXMgY2FsbGVkICp3aXRob3V0KiByZXNldHRpbmcgYGVycmAgdG8gMC4gVGhpcyBpcyB0aGUgY3J1Y2lhbCBiaXQuIElmLCBzYXksIGBtb3ZlX3BhZ2VzX3B0ZXNgIHJldHVybnMgYC1FQUdBSU5gLCB0aGUgY29kZSBjb250aW51ZXMgdGhlIGxvb3AuIFRoZW4sIHRoZSBzdWJzZXF1ZW50IGV4ZWN1dGlvbiBpbnNpZGUgdGhlIGxvb3AgKmRvZXNuJiMzOTt0KiByZXNldCBgZXJyYCBhdCB0aGUgc3RhcnQgb2YgdGhlIG5leHQgaXRlcmF0aW9uISBUaGlzIGlzIHRoZSBzbW9raW5nIGd1biEKCkVzc2VudGlhbGx5LCBpZiBhIHJldHJ5IGlzIG5lZWRlZCBiZWNhdXNlIG9mIGAtRUFHQUlOYCwgdGhlIGxvb3AgZG9lcyAqbm90KiBhZHZhbmNlIGBkc3RfYWRkcmAgYW5kIGBzcmNfYWRkcmAuIEluc3RlYWQsIGl0IHJldHJpZXMgdGhlIHNhbWUgbWVtb3J5IGxvY2F0aW9ucyByZXBlYXRlZGx5LiBTaW5jZSBgZXJyYCBpcyAqbm90KiByZXNldCwgdGhlIGNoZWNrIGBpZiAoZXJyKWAgd2lsbCBzdGlsbCBiZSBgdHJ1ZWAuIFNpbmNlIGBlcnJgIHJlbWFpbnMgYC1FQUdBSU5gLCBpdCBjb250aW51ZXMuIEFuZCBiZWNhdXNlIHRoZSBhZGRyZXNzZXMgZG9uJiMzOTt0IGFkdmFuY2UsIGl0IGJlY29tZXMgYW4gaW5maW5pdGUgbG9vcCEgVGhhdCYjMzk7cyBpdCEKClNvLCB0aGUgZml4IGlzIHN0cmFpZ2h0Zm9yd2FyZDogYWRkaW5nIGBlcnIgPSAwO2AgYmVmb3JlIHRoZSBgY29udGludWVgIHN0YXRlbWVudC4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGxvb3AgcmV0cmllcyBjb3JyZWN0bHksIHJlc2V0dGluZyB0aGUgZXJyb3IgY29kZSB0byB6ZXJvIHdoZW4gYC1FQUdBSU5gIGlzIGVuY291bnRlcmVkLCBhbmQgKnRoZW4qIHRoZSBgc3JjX2FkZHJgIGFuZCBgZHN0X2FkZHJgIHdpbGwgYmUgYWR2YW5jZWQuCgpOb3csIGEgcXVpY2sgc2lkZS1ub3RlIHRvIG1ha2Ugc3VyZSBpdCYjMzk7cyBub3QgYSBLTVNBTiBpc3N1ZSB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBgZXJyYCBhbmQgYHN0ZXBfc2l6ZWAgYXJlIGxvY2FsIHZhcmlhYmxlcy4gVGhlcmUmIzM5O3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBUaGlzIGlzbiYjMzk7dCBhYm91dCBLTVNBTjsgaXQmIzM5O3MgYSBwdXJlIGNvbnRyb2wtZmxvdyBidWcgdGhhdCBjYW4gYmUgZm91bmQgd2l0aCByZWd1bGFyIGZ1enppbmcgKGUuZy4sIEtBU0FOLCBMT0NLREVQLCBzb2Z0IGxvY2t1cCkuIEl0JiMzOTtzIGEgaGFuZy4gVGhlIGZpeCBpcyBhIGNvbnRyb2wgZmxvdyBjaGFuZ2UuIE5lZWRzS01TQU4gPSBmYWxzZS4KCkluIGEgbnV0c2hlbGwsIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgaGFuZyBvciBpbmZpbml0ZSBsb29wIGNvbmRpdGlvbiBpbiB0aGUgYG1vdmVfcGFnZXMoKWAgZnVuY3Rpb24gd2l0aGluIGBtbS91c2VyZmF1bHRmZC5jYC4gVGhlIGJ1ZyBvY2N1cnMgd2hlbiBhbiBvcGVyYXRpb24gZmFpbHMgd2l0aCBgLUVBR0FJTmAuIEFmdGVyIHRoYXQsIHRoZSBsb29wIGZhaWxzIHRvIHJlc2V0IGBlcnJgIHRvIDAsIGNhdXNpbmcgaXQgdG8gZW5kbGVzc2x5IHJldHJ5IHRoZSBzYW1lIGFkZHJlc3Nlcywgd2l0aG91dCBhZHZhbmNpbmcgYHNyY19hZGRyYCBvciBgZHN0X2FkZHJgLiBUaGUgZml4IHJlc2V0cyB0aGUgZXJyIGJlZm9yZSBjb250aW51aW5nLiBUaGlzIGZpeCBpcyBub3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSwgb25seSBjb250cm9sIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA0OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgY29udHJvbCBmbG93IGJ1ZyBpbiBgbW92ZV9wYWdlcygpYCBpbiBgbW0vdXNlcmZhdWx0ZmQuY2AuIFByaW9yIHRvIHRoZSBwYXRjaCwgaWYgYSBwYWdlIG1vdmUgb3BlcmF0aW9uIHJldHVybmVkIGAtRUFHQUlOYCwgdGhlIGxvb3Agd291bGQgYGNvbnRpbnVlYCBidXQgZmFpbCB0byByZXNldCB0aGUgYGVycmAgdmFyaWFibGUgdG8gMC4gQmVjYXVzZSBgZXJyYCBpcyBub3QgdW5jb25kaXRpb25hbGx5IG92ZXJ3cml0dGVuIG9uIHN1Y2Nlc3NmdWwgcGFnZSBtb3ZlcyAoZS5nLiwgd2hlbiBgbW92ZV9wYWdlc19wdGVzKClgIHJldHVybnMgYSBwb3NpdGl2ZSBzdGVwIHNpemUpLCBgZXJyYCB3b3VsZCByZW1haW4gYC1FQUdBSU5gLiBUaGlzIGNhdXNlZCB0aGUgbG9vcCB0byBpbmZpbml0ZWx5IHJldHJ5IHRoZSBzYW1lIGFkZHJlc3Mgd2l0aG91dCBhZHZhbmNpbmcgYHNyY19hZGRyYCBhbmQgYGRzdF9hZGRyYCwgbGVhZGluZyB0byBhIGhhbmcuIFRoZSBwYXRjaCBzaW1wbHkgcmVzZXRzIGBlcnIgPSAwYCBiZWZvcmUgY29udGludWluZywgZml4aW5nIHRoZSBpbmZpbml0ZSBsb29wLlxuXG5UaGlzIGJ1ZyBpcyBhIHB1cmUgY29udHJvbCBmbG93IGlzc3VlIHJlc3VsdGluZyBpbiBhIGhhbmcuIEl0IGRvZXMgbm90IGludm9sdmUgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgbGVhayB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgZnV6emluZyAod2l0aCBLQVNBTiwgTE9DS0RFUCwgYW5kIHNvZnQgbG9ja3VwIGRldGVjdG9ycykgaXMgcGVyZmVjdGx5IGNhcGFibGUgb2YgZGV0ZWN0aW5nIGhhbmdzIGFuZCBpbmZpbml0ZSBsb29wcy4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzayBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBwYXRjaCB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGNvbnRyb2wgZmxvdyBidWcgaW4gYG1vdmVfcGFnZXMoKWAgaW4gYG1tL3VzZXJmYXVsdGZkLmNgLiBQcmlvciB0byB0aGUgcGF0Y2gsIGlmIGEgcGFnZSBtb3ZlIG9wZXJhdGlvbiByZXR1cm5lZCBgLUVBR0FJTmAsIHRoZSBsb29wIHdvdWxkIGBjb250aW51ZWAgYnV0IGZhaWwgdG8gcmVzZXQgdGhlIGBlcnJgIHZhcmlhYmxlIHRvIDAuIEJlY2F1c2UgYGVycmAgaXMgbm90IHVuY29uZGl0aW9uYWxseSBvdmVyd3JpdHRlbiBvbiBzdWNjZXNzZnVsIHBhZ2UgbW92ZXMgKGUuZy4sIHdoZW4gYG1vdmVfcGFnZXNfcHRlcygpYCByZXR1cm5zIGEgcG9zaXRpdmUgc3RlcCBzaXplKSwgYGVycmAgd291bGQgcmVtYWluIGAtRUFHQUlOYC4gVGhpcyBjYXVzZWQgdGhlIGxvb3AgdG8gaW5maW5pdGVseSByZXRyeSB0aGUgc2FtZSBhZGRyZXNzIHdpdGhvdXQgYWR2YW5jaW5nIGBzcmNfYWRkcmAgYW5kIGBkc3RfYWRkcmAsIGxlYWRpbmcgdG8gYSBoYW5nLiBUaGUgcGF0Y2ggc2ltcGx5IHJlc2V0cyBgZXJyID0gMGAgYmVmb3JlIGNvbnRpbnVpbmcsIGZpeGluZyB0aGUgaW5maW5pdGUgbG9vcC5cblxuVGhpcyBidWcgaXMgYSBwdXJlIGNvbnRyb2wgZmxvdyBpc3N1ZSByZXN1bHRpbmcgaW4gYSBoYW5nLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGxlYWsgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIGZ1enppbmcgKHdpdGggS0FTQU4sIExPQ0tERVAsIGFuZCBzb2Z0IGxvY2t1cCBkZXRlY3RvcnMpIGlzIHBlcmZlY3RseSBjYXBhYmxlIG9mIGRldGVjdGluZyBoYW5ncyBhbmQgaW5maW5pdGUgbG9vcHMuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgcGF0Y2ggdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1NzowMy40MjkzMjg0MzdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDQwMTA5ODY3OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNFUkZBVUxURkRcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXNlcmZhdWx0ZmRfaW9jdGxcIixcbiAgICBcInVzZXJmYXVsdGZkX21vdmVcIixcbiAgICBcIm1vdmVfcGFnZXNfaHVnZV9wbWRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgY29udHJvbCBmbG93IGJ1ZyBpbiBgbW92ZV9wYWdlcygpYCBpbiBgbW0vdXNlcmZhdWx0ZmQuY2AuIFByaW9yIHRvIHRoZSBwYXRjaCwgaWYgYSBwYWdlIG1vdmUgb3BlcmF0aW9uIHJldHVybmVkIGAtRUFHQUlOYCwgdGhlIGxvb3Agd291bGQgYGNvbnRpbnVlYCBidXQgZmFpbCB0byByZXNldCB0aGUgYGVycmAgdmFyaWFibGUgdG8gMC4gQmVjYXVzZSBgZXJyYCBpcyBub3QgdW5jb25kaXRpb25hbGx5IG92ZXJ3cml0dGVuIG9uIHN1Y2Nlc3NmdWwgcGFnZSBtb3ZlcyAoZS5nLiwgd2hlbiBgbW92ZV9wYWdlc19wdGVzKClgIHJldHVybnMgYSBwb3NpdGl2ZSBzdGVwIHNpemUpLCBgZXJyYCB3b3VsZCByZW1haW4gYC1FQUdBSU5gLiBUaGlzIGNhdXNlZCB0aGUgbG9vcCB0byBpbmZpbml0ZWx5IHJldHJ5IHRoZSBzYW1lIGFkZHJlc3Mgd2l0aG91dCBhZHZhbmNpbmcgYHNyY19hZGRyYCBhbmQgYGRzdF9hZGRyYCwgbGVhZGluZyB0byBhIGhhbmcuIFRoZSBwYXRjaCBzaW1wbHkgcmVzZXRzIGBlcnIgPSAwYCBiZWZvcmUgY29udGludWluZywgZml4aW5nIHRoZSBpbmZpbml0ZSBsb29wLlxcblxcblRoaXMgYnVnIGlzIGEgcHVyZSBjb250cm9sIGZsb3cgaXNzdWUgcmVzdWx0aW5nIGluIGEgaGFuZy4gSXQgZG9lcyBub3QgaW52b2x2ZSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBsZWFrIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBTdGFuZGFyZCBmdXp6aW5nICh3aXRoIEtBU0FOLCBMT0NLREVQLCBhbmQgc29mdCBsb2NrdXAgZGV0ZWN0b3JzKSBpcyBwZXJmZWN0bHkgY2FwYWJsZSBvZiBkZXRlY3RpbmcgaGFuZ3MgYW5kIGluZmluaXRlIGxvb3BzLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGlzIHBhdGNoIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgVUZGRElPX01PVkUgaW9jdGwgaGFuZGxlciB3aGVyZSBhbiAtRUFHQUlOIGVycm9yIHdhcyBub3QgcmVzZXQgdG8gMCBiZWZvcmUgY29udGludWluZyB0aGUgbG9vcC4gSWYgbm90IHJlc2V0LCBhIHN1YnNlcXVlbnQgc3VjY2Vzc2Z1bCBwYWdlIG1vdmUgd291bGQgbGVhdmUgZXJyIGFzIC1FQUdBSU4sIGNhdXNpbmcgdGhlIGxvb3AgdG8gc2tpcCBhZHZhbmNpbmcgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzc2VzLiBUaGlzIHJlc3VsdHMgaW4gYW4gaW5maW5pdGUgbG9vcCBvciByZXBlYXRlZCBhdHRlbXB0cyB0byBtb3ZlIHRoZSBzYW1lIHBhZ2UuIFRoZSBmaXggZW5zdXJlcyBlcnIgaXMgcmVzZXQgdG8gMCwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSB1c2VyZmF1bHRmZCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTc6MDMuNDI5MzMzNTE3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc4MTEwNjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDFjNDg2ZGE5YWNkNGZhMTdhNTY1YmVlYWM0MjI3OGM5Y2U3MDNmMVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAxOSAwMzo1NzowMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS91c2VyZmF1bHRmZC5jIGIvbW0vdXNlcmZhdWx0ZmQuY1xcbmluZGV4IGMzYWRlZGFhZjdkNTQuLmVjNWQ1MTFiZDE3OTEgMTAwNjQ0XFxuLS0tIGEvbW0vdXNlcmZhdWx0ZmQuY1xcbisrKyBiL21tL3VzZXJmYXVsdGZkLmNcXG5AQCAtMjA4NSw4ICsyMDg1LDEwIEBAIHN0YXRpYyBzc2l6ZV90IG1vdmVfcGFnZXMoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LCB1bnNpZ25lZCBsb25nIGRzdF9zdGFydCxcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0aWYgKGVycikge1xcbi1cXHRcXHRcXHRpZiAoZXJyID09IC1FQUdBSU4pXFxuK1xcdFxcdFxcdGlmIChlcnIgPT0gLUVBR0FJTikge1xcbitcXHRcXHRcXHRcXHRlcnIgPSAwO1xcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTc6MDQuOTA4MjA1MDRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNzU2OTIyODU0ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNFUkZBVUxURkRcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXNlcmZhdWx0ZmRfaW9jdGxcIixcbiAgICBcInVzZXJmYXVsdGZkX21vdmVcIixcbiAgICBcIm1vdmVfcGFnZXNfaHVnZV9wbWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgVUZGRElPX01PVkUgaW9jdGwgaGFuZGxlciB3aGVyZSBhbiAtRUFHQUlOIGVycm9yIHdhcyBub3QgcmVzZXQgdG8gMCBiZWZvcmUgY29udGludWluZyB0aGUgbG9vcC4gSWYgbm90IHJlc2V0LCBhIHN1YnNlcXVlbnQgc3VjY2Vzc2Z1bCBwYWdlIG1vdmUgd291bGQgbGVhdmUgZXJyIGFzIC1FQUdBSU4sIGNhdXNpbmcgdGhlIGxvb3AgdG8gc2tpcCBhZHZhbmNpbmcgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzc2VzLiBUaGlzIHJlc3VsdHMgaW4gYW4gaW5maW5pdGUgbG9vcCBvciByZXBlYXRlZCBhdHRlbXB0cyB0byBtb3ZlIHRoZSBzYW1lIHBhZ2UuIFRoZSBmaXggZW5zdXJlcyBlcnIgaXMgcmVzZXQgdG8gMCwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSB1c2VyZmF1bHRmZCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDFjNDg2ZGE5YWNkNGZhMTdhNTY1YmVlYWM0MjI3OGM5Y2U3MDNmMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDE5IDAzOjU3OjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdXNlcmZhdWx0ZmQuYyBiL21tL3VzZXJmYXVsdGZkLmNcbmluZGV4IGMzYWRlZGFhZjdkNTQuLmVjNWQ1MTFiZDE3OTEgMTAwNjQ0XG4tLS0gYS9tbS91c2VyZmF1bHRmZC5jXG4rKysgYi9tbS91c2VyZmF1bHRmZC5jXG5AQCAtMjA4NSw4ICsyMDg1LDEwIEBAIHN0YXRpYyBzc2l6ZV90IG1vdmVfcGFnZXMoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LCB1bnNpZ25lZCBsb25nIGRzdF9zdGFydCxcbiBcdFx0fVxuIFxuIFx0XHRpZiAoZXJyKSB7XG4tXHRcdFx0aWYgKGVyciA9PSAtRUFHQUlOKVxuK1x0XHRcdGlmIChlcnIgPT0gLUVBR0FJTikge1xuK1x0XHRcdFx0ZXJyID0gMDtcbiBcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdH1cbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTc6MDQuOTA4MjA2NzFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODAyMDcyMzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFVzZXJmYXVsdGZkIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgdG91Y2hlZCBgbW0vdXNlcmZhdWx0ZmQuY2AsIHNwZWNpZmljYWxseSB0aGUgYG1vdmVfcGFnZXNgIGZ1bmN0aW9uLiBIbW0sIGxvb2tzIGxpa2UgdGhlcmUncyBhIG1vZGlmaWNhdGlvbiBpbiB0aGUgZXJyb3IgaGFuZGxpbmcuIEluaXRpYWxseSwgaWYgYG1vdmVfcGFnZXNgIHJldHVybmVkIGAtRUFHQUlOYCwgaXQgd291bGQgc2ltcGx5IGJlIHBhc3NlZCBiYWNrIHVwIHRoZSBjYWxsIHN0YWNrLiBOb3csIGl0IGFwcGVhcnMgdGhpcyBgLUVBR0FJTmAgaXMgYmVpbmcgY2F1Z2h0LCB0aGUgZXJyb3IgY29kZSBpcyBiZWluZyByZXNldCB0byAwLCBhbmQgdGhlIGxvb3AgY29udGludWVzLiBJbnRlcmVzdGluZy5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQncyBkcml2aW5nIHRoaXMgY2hhbmdlPyBXaHkgYXJlIHdlIGFic29yYmluZyBgLUVBR0FJTmAgYW5kIGNvbnRpbnVpbmcgdGhlIGBtb3ZlX3BhZ2VzYCBvcGVyYXRpb24/IElzIHRoaXMgcmVsYXRlZCB0byBzb21lIGtpbmQgb2YgcmV0cnkgbG9naWM/IElzIGl0IGludGVuZGVkIHRvIGhhbmRsZSB0cmFuc2llbnQgcmVzb3VyY2UgY29udGVudGlvbj8gSXMgaXQgc2FmZSB0byBpZ25vcmUgYSBmYWlsZWQgYG1vdmVfcGFnZXNgIG9wZXJhdGlvbj8gSSdsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29udGV4dC5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBzaXR1YXRpb25zIHRyaWdnZXIgYW4gYC1FQUdBSU5gIGZyb20gYG1vdmVfcGFnZXNgIHdpdGhpbiB0aGlzIGB1c2VyZmF1bHRmZGAgY29udGV4dC4gVGhlbiBJJ2xsIG5lZWQgdG8gbG9vayBhdCBhbGwgdGhlIGNhbGxlcnMgb2YgYG1vdmVfcGFnZXNgIHdpdGhpbiBgbW0vdXNlcmZhdWx0ZmQuY2AgYW5kIGhvdyB0aGV5IHJlYWN0IHRvIHRoZSByZXR1cm5lZCBlcnJvciBjb2Rlcy4gVGhpcyBsb29rcyBsaWtlIGEgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgY2hhbmdlIHRvIHRoZSBmYXVsdCBoYW5kbGluZyBiZWhhdmlvciwgc28gaXQgd2FycmFudHMgYSB0aG9yb3VnaCBpbnZlc3RpZ2F0aW9uLiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGZyb20gdGhlIHBvaW50IG9mIHRoZSB1c2VyZmF1bHQgdG8gdGhpcyBzcGVjaWZpYyBgbW92ZV9wYWdlc2AgY2FsbCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1NzowOC43MTAyODE1NzlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzMzA0MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW92ZV9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS91c2VyZmF1bHRmZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3VzZXJmYXVsdGZkLmM9MTM4Mj1zdGF0aWMgaW50IG1vdmVfemVyb3BhZ2VfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xNDE0LSAqL1xcbm1tL3VzZXJmYXVsdGZkLmM6MTQxNTpzdGF0aWMgbG9uZyBtb3ZlX3BhZ2VzX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZCxcXG5tbS91c2VyZmF1bHRmZC5jLTE0MTYtXFx0XFx0XFx0ICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmM9MTg1OT1zdGF0aWMgdm9pZCB1ZmZkX21vdmVfdW5sb2NrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMTg2Ny0vKipcXG5tbS91c2VyZmF1bHRmZC5jOjE4Njg6ICogbW92ZV9wYWdlcyAtIG1vdmUgYXJiaXRyYXJ5IGFub255bW91cyBwYWdlcyBvZiBhbiBleGlzdGluZyB2bWFcXG5tbS91c2VyZmF1bHRmZC5jLTE4NjktICogQGN0eDogcG9pbnRlciB0byB0aGUgdXNlcmZhdWx0ZmQgY29udGV4dFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xODc2LSAqXFxubW0vdXNlcmZhdWx0ZmQuYzoxODc3OiAqIG1vdmVfcGFnZXMoKSByZW1hcHMgYXJiaXRyYXJ5IGFub255bW91cyBwYWdlcyBhdG9taWNhbGx5IGluIHplcm9cXG5tbS91c2VyZmF1bHRmZC5jLTE4NzgtICogY29weS4gSXQgb25seSB3b3JrcyBvbiBub24gc2hhcmVkIGFub255bW91cyBwYWdlcyBiZWNhdXNlIHRob3NlIGNhblxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xODg4LSAqIHN0b3JhZ2Ugb3IgYW55IG90aGVyIEkvTyBkZXZpY2UgKE1BRFZfRE9OVEZPUksgaW4gdGhlIHNvdXJjZSB2bWFcXG5tbS91c2VyZmF1bHRmZC5jOjE4ODk6ICogYXZvaWRzIG1vdmVfcGFnZXMoKSB0byBmYWlsIHdpdGggLUVCVVNZIGlmIHRoZSBwcm9jZXNzIGZvcmtzIGJlZm9yZVxcbm1tL3VzZXJmYXVsdGZkLmM6MTg5MDogKiBtb3ZlX3BhZ2VzKCkgaXMgY2FsbGVkKSwgdGhlbiBpdCB3aWxsIGNhbGwgbW92ZV9wYWdlcygpIHRvIG1hcCB0aGVcXG5tbS91c2VyZmF1bHRmZC5jLTE4OTEtICogcGFnZSBpbiB0aGUgZmF1bHRpbmcgYWRkcmVzcyBpbiB0aGUgZGVzdGluYXRpb24gdm1hLlxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTA1LSAqIHRoZSBkZXN0aW5hdGlvbiB2aXJ0dWFsIG1lbW9yeSByYW5nZSBpcyBub3QgYSB3aG9sZSB1bm1hcHBlZCBob2xlLFxcbm1tL3VzZXJmYXVsdGZkLmM6MTkwNjogKiBtb3ZlX3BhZ2VzKCkgd2lsbCBmYWlsIHJlc3BlY3RpdmVseSB3aXRoIC1FTk9FTlQgb3IgLUVFWElTVC4gVGhpc1xcbm1tL3VzZXJmYXVsdGZkLmMtMTkwNy0gKiBwcm92aWRlcyBhIHZlcnkgc3RyaWN0IGJlaGF2aW9yIHRvIGF2b2lkIGFueSBjaGFuY2Ugb2YgbWVtb3J5XFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTE5MTAtICogdGltZSBmb3IgYW55IGdpdmVuIGZhdWx0aW5nIGFkZHJlc3MuIFRoaXMgbWVhbnMgdGhhdCBpZiB0d28gdGhyZWFkc1xcbm1tL3VzZXJmYXVsdGZkLmM6MTkxMTogKiB0cnkgdG8gYm90aCBjYWxsIG1vdmVfcGFnZXMoKSBvbiB0aGUgc2FtZSBkZXN0aW5hdGlvbiBhZGRyZXNzIGF0IHRoZVxcbm1tL3VzZXJmYXVsdGZkLmMtMTkxMi0gKiBzYW1lIHRpbWUsIHRoZSBzZWNvbmQgdGhyZWFkIHdpbGwgZ2V0IGFuIGV4cGxpY2l0IGVycm9yIGZyb20gdGhpc1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTIwLSAqIGFuIGFtb3VudCBvZiBieXRlcyBzdWNjZXNzZnVsbHkgbW92ZWQuIElmIHRoZSByZXR2YWwgcmVwb3J0cyBhXFxubW0vdXNlcmZhdWx0ZmQuYzoxOTIxOiAqIFxcXCJzaG9ydFxcXCIgcmVtYXAsIHRoZSBtb3ZlX3BhZ2VzKCkgY29tbWFuZCBzaG91bGQgYmUgcmVwZWF0ZWQgYnlcXG5tbS91c2VyZmF1bHRmZC5jLTE5MjItICogdXNlcmxhbmQgd2l0aCBzcmMrcmV0dmFsLCBkc3QrcmV2YWwsIGxlbi1yZXR2YWwgaWYgaXQgd2FudHMgdG8ga25vd1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTMzLSAqL1xcbm1tL3VzZXJmYXVsdGZkLmM6MTkzNDpzdGF0aWMgc3NpemVfdCBtb3ZlX3BhZ2VzKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTM1LVxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgc3JjX3N0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbiwgX191NjQgbW9kZSlcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMjAxNC1cXHRcXHQgKiBiZSBzdHJpY3QuIElmIGRzdF9wbWQgY2hhbmdlcyBpbnRvIFRQSCBhZnRlciB0aGlzIGNoZWNrLCB0aGVcXG5tbS91c2VyZmF1bHRmZC5jOjIwMTU6XFx0XFx0ICogbW92ZV9wYWdlc19odWdlX3BtZCgpIHdpbGwgZGV0ZWN0IHRoZSBjaGFuZ2UgYW5kIHJldHJ5XFxubW0vdXNlcmZhdWx0ZmQuYzoyMDE2OlxcdFxcdCAqIHdoaWxlIG1vdmVfcGFnZXNfcHRlKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgZmFpbC5cXG5tbS91c2VyZmF1bHRmZC5jLTIwMTctXFx0XFx0ICovXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTIwNDEtXFx0XFx0XFx0XFx0c3BsaXRfaHVnZV9wbWQoc3JjX3ZtYSwgc3JjX3BtZCwgc3JjX2FkZHIpO1xcbm1tL3VzZXJmYXVsdGZkLmM6MjA0MjpcXHRcXHRcXHRcXHQvKiBUaGUgZm9saW8gd2lsbCBiZSBzcGxpdCBieSBtb3ZlX3BhZ2VzX3B0ZSgpICovXFxubW0vdXNlcmZhdWx0ZmQuYy0yMDQzLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0yMDQ1LVxcbm1tL3VzZXJmYXVsdGZkLmM6MjA0NjpcXHRcXHRcXHRlcnIgPSBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKG1tLCBkc3RfcG1kLCBzcmNfcG1kLFxcbm1tL3VzZXJmYXVsdGZkLmMtMjA0Ny1cXHRcXHRcXHRcXHRcXHRcXHQgIGRzdF9wbWR2YWwsIGRzdF92bWEsIHNyY192bWEsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTIwNjgtXFxubW0vdXNlcmZhdWx0ZmQuYzoyMDY5OlxcdFxcdFxcdHJldCA9IG1vdmVfcGFnZXNfcHRlcyhtbSwgZHN0X3BtZCwgc3JjX3BtZCxcXG5tbS91c2VyZmF1bHRmZC5jLTIwNzAtXFx0XFx0XFx0XFx0XFx0ICAgICAgZHN0X3ZtYSwgc3JjX3ZtYSwgZHN0X2FkZHIsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jPTQyMTY9c3RhdGljIGludCB1c2VyZmF1bHRmZF9tb3ZlKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtNDI1NS1cXHRpZiAobW1nZXRfbm90X3plcm8obW0pKSB7XFxubW0vdXNlcmZhdWx0ZmQuYzo0MjU2OlxcdFxcdHJldCA9IG1vdmVfcGFnZXMoY3R4LCB1ZmZkaW9fbW92ZS5kc3QsIHVmZmRpb19tb3ZlLnNyYyxcXG5tbS91c2VyZmF1bHRmZC5jLTQyNTctXFx0XFx0XFx0XFx0IHVmZmRpb19tb3ZlLmxlbiwgdWZmZGlvX21vdmUubW9kZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjU3OjA4Ljc1NjYyMDE4NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4Mjk3ODYzNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyB0aGUgUGFnZSBNb3ZlbWVudCBGbG93KipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIHBhZ2UgbWlncmF0aW9uIGNvZGUsIGFuZCBpdCBsb29rcyBsaWtlIGBtb3ZlX3BhZ2VzYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCdzIHVsdGltYXRlbHkgZG9pbmcgdGhlIGhlYXZ5IGxpZnRpbmcsIGFzIGV4cGVjdGVkLiBOb3csIHdoZXJlIGlzIHRoaXMgYG1vdmVfcGFnZXNgIGFjdHVhbGx5IGJlaW5nICpjYWxsZWQqIGZyb20/IEFoLCBsb29rcyBsaWtlIGB1c2VyZmF1bHRmZF9tb3ZlYCBpcyB0aGUgaW1tZWRpYXRlIGNhbGxlci4gVGhhdCdzIGEga2V5IHBvaW50IHRvIHJlbWVtYmVyLiBJdCBtYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIG5hbWUuIEFuZCBgdXNlcmZhdWx0ZmRfbW92ZWAsIGFzIGJlc3QgYXMgSSBjYW4gdGVsbCBmcm9tIGEgcXVpY2sgZ2xhbmNlLCBzZWVtcyB0byBiZSBpbnZva2VkIHZpYSBgdXNlcmZhdWx0ZmRfaW9jdGxgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBsaWtlbHkgYSByZWxhdGVkIHN5c3RlbSBjYWxsIGZvciB1c2VyZmF1bHRmZCBvcGVyYXRpb25zLiBSaWdodCwgbWFrZXMgc2Vuc2UgaW4gdGhlIGdyZWF0ZXIgY29udGV4dC5cblxuU28sIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkZWx2ZSBpbnRvIGB1c2VyZmF1bHRmZF9tb3ZlYCBpdHNlbGYgYW5kIGZpZ3VyZSBvdXQgaG93IGl0J3Mgc2V0dGluZyB1cCB0aGUgY2FsbCB0byBgbW92ZV9wYWdlc2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBhcmd1bWVudHMgaXQncyBwYXNzaW5nLCBhbnkgY29udGV4dCBpdCdzIHByb3ZpZGluZywgYW5kIHdoYXQgY2hlY2tzIGl0IG1pZ2h0IGJlIHBlcmZvcm1pbmcgYmVmb3JlIHRyaWdnZXJpbmcgdGhlIHBhZ2UgbWlncmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaW4gcGxhY2UgdGhlcmUsIGJlY2F1c2UgdGhhdCdzIHdoZXJlIGFueSBwb3NzaWJsZSBwcm9ibGVtcyBhcmUgbW9zdCBsaWtlbHkgdG8gbGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzcyMywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjU3OjEyLjU4NjQwOTAwN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODM2MTU4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyZmF1bHRmZF9tb3ZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3VzZXJmYXVsdGZkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdXNlcmZhdWx0ZmQuYz00MjA3PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHVmZmRfY3R4X2ZlYXR1cmVzKF9fdTY0IHVzZXJfZmVhdHVyZXMpXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTQyMTUtXFxubW0vdXNlcmZhdWx0ZmQuYzo0MjE2OnN0YXRpYyBpbnQgdXNlcmZhdWx0ZmRfbW92ZShzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsXFxubW0vdXNlcmZhdWx0ZmQuYy00MjE3LVxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmM9NDM1MD1zdGF0aWMgbG9uZyB1c2VyZmF1bHRmZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgY21kLFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy00Mzc4LVxcdGNhc2UgVUZGRElPX01PVkU6XFxubW0vdXNlcmZhdWx0ZmQuYzo0Mzc5OlxcdFxcdHJldCA9IHVzZXJmYXVsdGZkX21vdmUoY3R4LCBhcmcpO1xcbm1tL3VzZXJmYXVsdGZkLmMtNDM4MC1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTc6MTIuNjM0Nzc2MDMxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA5ODI0NDQxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFVzZXJmYXVsdGZkIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgc3BlY2lmaWNhbGx5IHRoZSBjaGFuZ2UgaW4gYG1vdmVfcGFnZXNgIHdpdGhpbiBgbW0vdXNlcmZhdWx0ZmQuY2AuIFRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gc2VlbXMgdG8gYmUgaW4gaG93IGl0IGhhbmRsZXMgdGhlIGAtRUFHQUlOYCBlcnJvci4gTGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gQmVmb3JlLCBpZiBgZXJyYCB3YXMgYC1FQUdBSU5gLCB0aGUgY29kZSB3b3VsZCBqdXN0IGBjb250aW51ZWAgdGhlIGxvb3AuIE5vdywgaXQncyBzZXR0aW5nIGBlcnJgIHRvIGAwYCAqYmVmb3JlKiBjb250aW51aW5nLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2h5IHRoZSBleHRyYSBhc3NpZ25tZW50PyBUaGUgb3JpZ2luYWwgY29kZSBoYWQgdGhpczpcblxuYGBgY1xuXHRcdGlmIChlcnIpIHtcblx0XHRcdGlmIChlcnIgPT0gLUVBR0FJTilcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRicmVhaztcblx0XHR9XG5gYGBcblxuQW5kIG5vdyBpdCdzIHRoaXM6XG5cbmBgYGNcblx0XHRpZiAoZXJyKSB7XG5cdFx0XHRpZiAoZXJyID09IC1FQUdBSU4pIHtcblx0XHRcdFx0ZXJyID0gMDtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHR9XG5gYGBcblxuU28gYmFzaWNhbGx5IGl0IHNlZW1zIGxpa2UgdGhleSdyZSB0cnlpbmcgdG8gcHJldmVudCBgLUVBR0FJTmAgZnJvbSBiZWluZyB0aGUgZmluYWwgZXJyb3IgY29kZSByZXR1cm5lZCBpZiB0aGUgbG9vcCBlbmRzIGFmdGVyIGhpdHRpbmcgdGhhdCBlcnJvci4gQnV0IGlzIHRoZSBleHRyYSBhc3NpZ25tZW50ICpuZWNlc3NhcnkqPyBXaGF0J3MgdGhlIGNvbnRleHQgaGVyZT8gSWYgdGhlIGxvb3AgZW5kcyB3aXRob3V0IHJlc2V0dGluZyBgZXJyYCBpbiB0aGUgbmV4dCBpdGVyYXRpb24sIGFuZCBpZiB3ZSdyZSAqbm90KiByZXNldHRpbmcgYGVycmAsIGl0IHNlZW1zIGxpa2Ugd2UgbWlnaHQgcmV0dXJuIGAtRUFHQUlOYCBlcnJvbmVvdXNseS5cblxuSSBuZWVkIHRvIHF1aWNrbHkgYW5hbHl6ZSB0aGUgYG1vdmVfcGFnZXNgIGxvb3AgbG9naWMgdG8gYmUgY2VydGFpbi4gTGV0IG1lIGRyaWxsIGRvd24gYW5kIGxvb2sgYXQgdGhlIGNvbnRyb2wgZmxvdyBpbiBtb3JlIGRldGFpbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgYXJlIHNwZWNpZmljIHNjZW5hcmlvcyB3aGVyZSBgZXJyYCBtaWdodCBiZSBsZWZ0IGFzIGAtRUFHQUlOYCBhdCB0aGUgZW5kIG9mIHRoZSBsb29wLCBvciBpZiBpdCBpcyBhbHdheXMgcmVzZXQgaW4gc3Vic2VxdWVudCBpdGVyYXRpb25zLiBUaGlzIHN1YnRsZSBjaGFuZ2UgY291bGQgaW1wYWN0IGVycm9yIGhhbmRsaW5nIHNpZ25pZmljYW50bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyNjgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTc6MTcuNzMzMDIyMzU4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI4MTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3VzZXJmYXVsdGZkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjA0MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIwNDA6XFx0XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2socHRsKTtcXG4yMDQxOlxcdFxcdFxcdFxcdFxcdHNwbGl0X2h1Z2VfcG1kKHNyY192bWEsIHNyY19wbWQsIHNyY19hZGRyKTtcXG4yMDQyOlxcdFxcdFxcdFxcdFxcdC8qIFRoZSBmb2xpbyB3aWxsIGJlIHNwbGl0IGJ5IG1vdmVfcGFnZXNfcHRlKCkgKi9cXG4yMDQzOlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjIwNDQ6XFx0XFx0XFx0XFx0fVxcbjIwNDU6XFx0XFxuMjA0NjpcXHRcXHRcXHRcXHRlcnIgPSBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKG1tLCBkc3RfcG1kLCBzcmNfcG1kLFxcbjIwNDc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBkc3RfcG1kdmFsLCBkc3Rfdm1hLCBzcmNfdm1hLFxcbjIwNDg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBkc3RfYWRkciwgc3JjX2FkZHIpO1xcbjIwNDk6XFx0XFx0XFx0XFx0c3RlcF9zaXplID0gSFBBR0VfUE1EX1NJWkU7XFxuMjA1MDpcXHRcXHRcXHR9IGVsc2Uge1xcbjIwNTE6XFx0XFx0XFx0XFx0bG9uZyByZXQ7XFxuMjA1MjpcXHRcXG4yMDUzOlxcdFxcdFxcdFxcdGlmIChwbWRfbm9uZSgqc3JjX3BtZCkpIHtcXG4yMDU0OlxcdFxcdFxcdFxcdFxcdGlmICghKG1vZGUgXFx1MDAyNiBVRkZESU9fTU9WRV9NT0RFX0FMTE9XX1NSQ19IT0xFUykpIHtcXG4yMDU1OlxcdFxcdFxcdFxcdFxcdFxcdGVyciA9IC1FTk9FTlQ7XFxuMjA1NjpcXHRcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4yMDU3OlxcdFxcdFxcdFxcdFxcdH1cXG4yMDU4OlxcdFxcdFxcdFxcdFxcdGlmICh1bmxpa2VseShfX3B0ZV9hbGxvYyhtbSwgc3JjX3BtZCkpKSB7XFxuMjA1OTpcXHRcXHRcXHRcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbjIwNjA6XFx0XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjA2MTpcXHRcXHRcXHRcXHRcXHR9XFxuMjA2MjpcXHRcXHRcXHRcXHR9XFxuMjA2MzpcXHRcXG4yMDY0OlxcdFxcdFxcdFxcdGlmICh1bmxpa2VseShwdGVfYWxsb2MobW0sIGRzdF9wbWQpKSkge1xcbjIwNjU6XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4yMDY2OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjIwNjc6XFx0XFx0XFx0XFx0fVxcbjIwNjg6XFx0XFxuMjA2OTpcXHRcXHRcXHRcXHRyZXQgPSBtb3ZlX3BhZ2VzX3B0ZXMobW0sIGRzdF9wbWQsIHNyY19wbWQsXFxuMjA3MDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBkc3Rfdm1hLCBzcmNfdm1hLCBkc3RfYWRkcixcXG4yMDcxOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHNyY19hZGRyLCBzcmNfZW5kIC0gc3JjX2FkZHIsIG1vZGUpO1xcbjIwNzI6XFx0XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMjA3MzpcXHRcXHRcXHRcXHRcXHRlcnIgPSByZXQ7XFxuMjA3NDpcXHRcXHRcXHRcXHRlbHNlXFxuMjA3NTpcXHRcXHRcXHRcXHRcXHRzdGVwX3NpemUgPSByZXQ7XFxuMjA3NjpcXHRcXHRcXHR9XFxuMjA3NzpcXHRcXG4yMDc4OlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjIwNzk6XFx0XFxuMjA4MDpcXHRcXHRcXHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcXG4yMDgxOlxcdFxcdFxcdFxcdC8qIERvIG5vdCBvdmVycmlkZSBhbiBlcnJvciAqL1xcbjIwODI6XFx0XFx0XFx0XFx0aWYgKCFlcnIgfHwgZXJyID09IC1FQUdBSU4pXFxuMjA4MzpcXHRcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVFI7XFxuMjA4NDpcXHRcXHRcXHRcXHRicmVhaztcXG4yMDg1OlxcdFxcdFxcdH1cXG4yMDg2OlxcdFxcbjIwODc6XFx0XFx0XFx0aWYgKGVycikge1xcbjIwODg6XFx0XFx0XFx0XFx0aWYgKGVyciA9PSAtRUFHQUlOKSB7XFxuMjA4OTpcXHRcXHRcXHRcXHRcXHRlcnIgPSAwO1xcbjIwOTA6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjA5MTpcXHRcXHRcXHRcXHR9XFxuMjA5MjpcXHRcXHRcXHRcXHRicmVhaztcXG4yMDkzOlxcdFxcdFxcdH1cXG4yMDk0OlxcdFxcbjIwOTU6XFx0XFx0XFx0LyogUHJvY2VlZCB0byB0aGUgbmV4dCBwYWdlICovXFxuMjA5NjpcXHRcXHRcXHRkc3RfYWRkciArPSBzdGVwX3NpemU7XFxuMjA5NzpcXHRcXHRcXHRzcmNfYWRkciArPSBzdGVwX3NpemU7XFxuMjA5ODpcXHRcXHRcXHRtb3ZlZCArPSBzdGVwX3NpemU7XFxuMjA5OTpcXHRcXHR9XFxuMjEwMDpcXHRcXG4yMTAxOlxcdG91dF91bmxvY2s6XFxuMjEwMjpcXHRcXHR1cF9yZWFkKFxcdTAwMjZjdHgtXFx1MDAzZW1hcF9jaGFuZ2luZ19sb2NrKTtcXG4yMTAzOlxcdFxcdHVmZmRfbW92ZV91bmxvY2soZHN0X3ZtYSwgc3JjX3ZtYSk7XFxuMjEwNDpcXHRvdXQ6XFxuMjEwNTpcXHRcXHRWTV9XQVJOX09OX09OQ0UobW92ZWQgXFx1MDAzYyAwKTtcXG4yMTA2OlxcdFxcdFZNX1dBUk5fT05fT05DRShlcnIgXFx1MDAzZSAwKTtcXG4yMTA3OlxcdFxcdFZNX1dBUk5fT05fT05DRSghbW92ZWQgXFx1MDAyNlxcdTAwMjYgIWVycik7XFxuMjEwODpcXHRcXHRyZXR1cm4gbW92ZWQgPyBtb3ZlZCA6IGVycjtcXG4yMTA5OlxcdH1cXG4yMTEwOlxcdFxcbjIxMTE6XFx0c3RhdGljIGJvb2wgdm1hX2Nhbl91c2VyZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXFxuMjExMjpcXHRcXHRcXHQgICAgICAgYm9vbCB3cF9hc3luYylcXG4yMTEzOlxcdHtcXG4yMTE0OlxcdFxcdGNvbnN0IHN0cnVjdCB2bV91ZmZkX29wcyAqb3BzID0gdm1hX3VmZmRfb3BzKHZtYSk7XFxuMjExNTpcXHRcXG4yMTE2OlxcdFxcdGlmICh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgKFZNX0RST1BQQUJMRSB8IFZNX1NIQURPV19TVEFDSykpXFxuMjExNzpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMjExODpcXHRcXG4yMTE5OlxcdFxcdGlmICghaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkgXFx1MDAyNlxcdTAwMjYgKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9TUEVDSUFMKSlcXG4yMTIwOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4yMTIxOlxcdFxcbjIxMjI6XFx0XFx0dm1fZmxhZ3MgXFx1MDAyNj0gX19WTV9VRkZEX0ZMQUdTO1xcbjIxMjM6XFx0XFxuMjEyNDpcXHRcXHQvKlxcbjIxMjU6XFx0XFx0ICogSWYgV1AgaXMgdGhlIG9ubHkgbW9kZSBlbmFibGVkIGFuZCBjb250ZXh0IGlzIHdwIGFzeW5jLCBhbGxvdyBhbnlcXG4yMTI2OlxcdFxcdCAqIG1lbW9yeSB0eXBlLlxcbjIxMjc6XFx0XFx0ICovXFxuMjEyODpcXHRcXHRpZiAod3BfYXN5bmMgXFx1MDAyNlxcdTAwMjYgKHZtX2ZsYWdzID09IFZNX1VGRkRfV1ApKVxcbjIxMjk6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuMjEzMDpcXHRcXG4yMTMxOlxcdFxcdC8qIEZvciBhbnkgb3RoZXIgbW9kZSByZWplY3QgVk1BcyB0aGF0IGRvbid0IGltcGxlbWVudCB2bV91ZmZkX29wcyAqL1xcbjIxMzI6XFx0XFx0aWYgKCFvcHMpXFxuMjEzMzpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMjEzNDpcXHRcXG4yMTM1OlxcdFxcdC8qXFxuMjEzNjpcXHRcXHQgKiBJZiB1c2VyIHJlcXVlc3RlZCB1ZmZkLXdwIGJ1dCBub3QgZW5hYmxlZCBwdGUgbWFya2VycyBmb3JcXG4yMTM3OlxcdFxcdCAqIHVmZmQtd3AsIHRoZW4gb25seSBhbm9ueW1vdXMgbWVtb3J5IGlzIHN1cHBvcnRlZFxcbjIxMzg6XFx0XFx0ICovXFxuMjEzOTpcXHRcXHRpZiAoIXVmZmRfc3VwcG9ydHNfd3BfbWFya2VyKCkgXFx1MDAyNlxcdTAwMjYgKHZtX2ZsYWdzIFxcdTAwMjYgVk1fVUZGRF9XUCkgXFx1MDAyNlxcdTAwMjZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTc6MTcuNzMzMjUyMjY4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA3MjY0NDczNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuKipBbmFseXppbmcgdGhlIEVycm9yIEhhbmRsaW5nIExvZ2ljKipcblxuSG1tLCBzbyBpZiB0aGUgZXJyb3IgY29kZSBpcyBgLUVBR0FJTmAsIGl0J3MgYmVpbmcgZXhwbGljaXRseSByZXNldCB0byBgMGAgYW5kIHRoZW4gdGhlIHByb2dyYW0ganVzdCBrZWVwcyBnb2luZy4gUmlnaHQuIFRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gQnV0IGlmIHRoZSBsb29wIGNvbmRpdGlvbiBpcyBtZXQgYW5kIHRoZSBsb29wIGV4aXRzIGNsZWFubHksIHRoZW4gYGVycmAgd2lsbCAqYWxzbyogYmUgYDBgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyB3b3JrcyBpbiB0aGUgY29udGV4dCBvZiB0aGUgcmVzdCBvZiB0aGUgY29kZS4gSXMgdGhhdCB0aGUgaW50ZW50aW9uLCBvciBpcyBzb21ldGhpbmcgZWxzZSBnb2luZyBvbj8gSSByZWFsbHkgbmVlZCB0byBpZGVudGlmeSB0aGF0IGxvb3AncyBjb25kaXRpb24sIHRoZSBleGl0IGNvbmRpdGlvbiBpcyBub3QgY2xlYXIuIElzIGBlcnIgPSAwYCB0aGUgbm9ybWFsIGNhc2UgdG8gYnJlYWsgdGhlIGxvb3Agb3IgYW4gZWRnZSBjYXNlPyBJJ20gbWlzc2luZyBzb21lIGNvbnRleHQgaGVyZS4gSSdtIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBpbnRvIHRoYXQgbG9vcCdzIGNvbmRpdGlvbiB0byBiZSBzdXJlIEknbSBmb2xsb3dpbmcgdGhlIGxvZ2ljIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI5MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTc6MjAuODA1ODk4OTY0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS91c2VyZmF1bHRmZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MzAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxOTMwOlxcdCAqIHZpcnR1YWwgcmVnaW9ucyB3aXRob3V0IGtub3dpbmcgaWYgdGhlcmUgYXJlIHRyYW5zcGFyZW50IGh1Z2VwYWdlXFxuMTkzMTpcXHQgKiBpbiB0aGUgcmVnaW9ucyBvciBub3QsIGJ1dCBwcmV2ZW50aW5nIHRoZSByaXNrIG9mIGhhdmluZyB0byBzcGxpdFxcbjE5MzI6XFx0ICogdGhlIGh1Z2VwbWQgZHVyaW5nIHRoZSByZW1hcC5cXG4xOTMzOlxcdCAqL1xcbjE5MzQ6XFx0c3RhdGljIHNzaXplX3QgbW92ZV9wYWdlcyhzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsIHVuc2lnbmVkIGxvbmcgZHN0X3N0YXJ0LFxcbjE5MzU6XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBzcmNfc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuLCBfX3U2NCBtb2RlKVxcbjE5MzY6XFx0e1xcbjE5Mzc6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdHgtXFx1MDAzZW1tO1xcbjE5Mzg6XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmNfdm1hLCAqZHN0X3ZtYTtcXG4xOTM5OlxcdFxcdHVuc2lnbmVkIGxvbmcgc3JjX2FkZHIsIGRzdF9hZGRyLCBzcmNfZW5kO1xcbjE5NDA6XFx0XFx0cG1kX3QgKnNyY19wbWQsICpkc3RfcG1kO1xcbjE5NDE6XFx0XFx0bG9uZyBlcnIgPSAtRUlOVkFMO1xcbjE5NDI6XFx0XFx0c3NpemVfdCBtb3ZlZCA9IDA7XFxuMTk0MzpcXHRcXG4xOTQ0OlxcdFxcdC8qIFNhbml0aXplIHRoZSBjb21tYW5kIHBhcmFtZXRlcnMuICovXFxuMTk0NTpcXHRcXHRWTV9XQVJOX09OX09OQ0Uoc3JjX3N0YXJ0IFxcdTAwMjYgflBBR0VfTUFTSyk7XFxuMTk0NjpcXHRcXHRWTV9XQVJOX09OX09OQ0UoZHN0X3N0YXJ0IFxcdTAwMjYgflBBR0VfTUFTSyk7XFxuMTk0NzpcXHRcXHRWTV9XQVJOX09OX09OQ0UobGVuIFxcdTAwMjYgflBBR0VfTUFTSyk7XFxuMTk0ODpcXHRcXG4xOTQ5OlxcdFxcdC8qIERvZXMgdGhlIGFkZHJlc3MgcmFuZ2Ugd3JhcCwgb3IgaXMgdGhlIHNwYW4gemVyby1zaXplZD8gKi9cXG4xOTUwOlxcdFxcdFZNX1dBUk5fT05fT05DRShzcmNfc3RhcnQgKyBsZW4gXFx1MDAzYyBzcmNfc3RhcnQpO1xcbjE5NTE6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKGRzdF9zdGFydCArIGxlbiBcXHUwMDNjIGRzdF9zdGFydCk7XFxuMTk1MjpcXHRcXG4xOTUzOlxcdFxcdGVyciA9IHVmZmRfbW92ZV9sb2NrKG1tLCBkc3Rfc3RhcnQsIHNyY19zdGFydCwgXFx1MDAyNmRzdF92bWEsIFxcdTAwMjZzcmNfdm1hKTtcXG4xOTU0OlxcdFxcdGlmIChlcnIpXFxuMTk1NTpcXHRcXHRcXHRnb3RvIG91dDtcXG4xOTU2OlxcdFxcbjE5NTc6XFx0XFx0LyogUmUtY2hlY2sgYWZ0ZXIgdGFraW5nIG1hcF9jaGFuZ2luZ19sb2NrICovXFxuMTk1ODpcXHRcXHRlcnIgPSAtRUFHQUlOO1xcbjE5NTk6XFx0XFx0ZG93bl9yZWFkKFxcdTAwMjZjdHgtXFx1MDAzZW1hcF9jaGFuZ2luZ19sb2NrKTtcXG4xOTYwOlxcdFxcdGlmIChsaWtlbHkoYXRvbWljX3JlYWQoXFx1MDAyNmN0eC1cXHUwMDNlbW1hcF9jaGFuZ2luZykpKVxcbjE5NjE6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjE5NjI6XFx0XFx0LypcXG4xOTYzOlxcdFxcdCAqIE1ha2Ugc3VyZSB0aGUgdm1hIGlzIG5vdCBzaGFyZWQsIHRoYXQgdGhlIHNyYyBhbmQgZHN0IHJlbWFwXFxuMTk2NDpcXHRcXHQgKiByYW5nZXMgYXJlIGJvdGggdmFsaWQgYW5kIGZ1bGx5IHdpdGhpbiBhIHNpbmdsZSBleGlzdGluZ1xcbjE5NjU6XFx0XFx0ICogdm1hLlxcbjE5NjY6XFx0XFx0ICovXFxuMTk2NzpcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjE5Njg6XFx0XFx0aWYgKHNyY192bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fU0hBUkVEKVxcbjE5Njk6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjE5NzA6XFx0XFx0aWYgKHNyY19zdGFydCArIGxlbiBcXHUwMDNlIHNyY192bWEtXFx1MDAzZXZtX2VuZClcXG4xOTcxOlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xOTcyOlxcdFxcbjE5NzM6XFx0XFx0aWYgKGRzdF92bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fU0hBUkVEKVxcbjE5NzQ6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjE5NzU6XFx0XFx0aWYgKGRzdF9zdGFydCArIGxlbiBcXHUwMDNlIGRzdF92bWEtXFx1MDAzZXZtX2VuZClcXG4xOTc2OlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xOTc3OlxcdFxcbjE5Nzg6XFx0XFx0ZXJyID0gdmFsaWRhdGVfbW92ZV9hcmVhcyhjdHgsIHNyY192bWEsIGRzdF92bWEpO1xcbjE5Nzk6XFx0XFx0aWYgKGVycilcXG4xOTgwOlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xOTgxOlxcdFxcbjE5ODI6XFx0XFx0Zm9yIChzcmNfYWRkciA9IHNyY19zdGFydCwgZHN0X2FkZHIgPSBkc3Rfc3RhcnQsIHNyY19lbmQgPSBzcmNfc3RhcnQgKyBsZW47XFxuMTk4MzpcXHRcXHQgICAgIHNyY19hZGRyIFxcdTAwM2Mgc3JjX2VuZDspIHtcXG4xOTg0OlxcdFxcdFxcdHNwaW5sb2NrX3QgKnB0bDtcXG4xOTg1OlxcdFxcdFxcdHBtZF90IGRzdF9wbWR2YWw7XFxuMTk4NjpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHN0ZXBfc2l6ZTtcXG4xOTg3OlxcdFxcbjE5ODg6XFx0XFx0XFx0LypcXG4xOTg5OlxcdFxcdFxcdCAqIEJlbG93IHdvcmtzIGJlY2F1c2UgYW5vbnltb3VzIGFyZWEgd291bGQgbm90IGhhdmUgYVxcbjE5OTA6XFx0XFx0XFx0ICogdHJhbnNwYXJlbnQgaHVnZSBQVUQuIElmIGZpbGUtYmFja2VkIHN1cHBvcnQgaXMgYWRkZWQsXFxuMTk5MTpcXHRcXHRcXHQgKiB0aGF0IGNhc2Ugd291bGQgbmVlZCB0byBiZSBoYW5kbGVkIGhlcmUuXFxuMTk5MjpcXHRcXHRcXHQgKi9cXG4xOTkzOlxcdFxcdFxcdHNyY19wbWQgPSBtbV9maW5kX3BtZChtbSwgc3JjX2FkZHIpO1xcbjE5OTQ6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFzcmNfcG1kKSkge1xcbjE5OTU6XFx0XFx0XFx0XFx0aWYgKCEobW9kZSBcXHUwMDI2IFVGRkRJT19NT1ZFX01PREVfQUxMT1dfU1JDX0hPTEVTKSkge1xcbjE5OTY6XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVOT0VOVDtcXG4xOTk3OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjE5OTg6XFx0XFx0XFx0XFx0fVxcbjE5OTk6XFx0XFx0XFx0XFx0c3JjX3BtZCA9IG1tX2FsbG9jX3BtZChtbSwgc3JjX2FkZHIpO1xcbjIwMDA6XFx0XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFzcmNfcG1kKSkge1xcbjIwMDE6XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4yMDAyOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjIwMDM6XFx0XFx0XFx0XFx0fVxcbjIwMDQ6XFx0XFx0XFx0fVxcbjIwMDU6XFx0XFx0XFx0ZHN0X3BtZCA9IG1tX2FsbG9jX3BtZChtbSwgZHN0X2FkZHIpO1xcbjIwMDY6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFkc3RfcG1kKSkge1xcbjIwMDc6XFx0XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4yMDA4OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjIwMDk6XFx0XFx0XFx0fVxcbjIwMTA6XFx0XFxuMjAxMTpcXHRcXHRcXHRkc3RfcG1kdmFsID0gcG1kcF9nZXRfbG9ja2xlc3MoZHN0X3BtZCk7XFxuMjAxMjpcXHRcXHRcXHQvKlxcbjIwMTM6XFx0XFx0XFx0ICogSWYgdGhlIGRzdF9wbWQgaXMgbWFwcGVkIGFzIFRIUCBkb24ndCBvdmVycmlkZSBpdCBhbmQganVzdFxcbjIwMTQ6XFx0XFx0XFx0ICogYmUgc3RyaWN0LiBJZiBkc3RfcG1kIGNoYW5nZXMgaW50byBUUEggYWZ0ZXIgdGhpcyBjaGVjaywgdGhlXFxuMjAxNTpcXHRcXHRcXHQgKiBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgcmV0cnlcXG4yMDE2OlxcdFxcdFxcdCAqIHdoaWxlIG1vdmVfcGFnZXNfcHRlKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgZmFpbC5cXG4yMDE3OlxcdFxcdFxcdCAqL1xcbjIwMTg6XFx0XFx0XFx0aWYgKHVubGlrZWx5KHBtZF90cmFuc19odWdlKGRzdF9wbWR2YWwpKSkge1xcbjIwMTk6XFx0XFx0XFx0XFx0ZXJyID0gLUVFWElTVDtcXG4yMDIwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjIwMjE6XFx0XFx0XFx0fVxcbjIwMjI6XFx0XFxuMjAyMzpcXHRcXHRcXHRwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHNyY19wbWQsIHNyY192bWEpO1xcbjIwMjQ6XFx0XFx0XFx0aWYgKHB0bCkge1xcbjIwMjU6XFx0XFx0XFx0XFx0LyogQ2hlY2sgaWYgd2UgY2FuIG1vdmUgdGhlIHBtZCB3aXRob3V0IHNwbGl0dGluZyBpdC4gKi9cXG4yMDI2OlxcdFxcdFxcdFxcdGlmIChtb3ZlX3NwbGl0c19odWdlX3BtZChkc3RfYWRkciwgc3JjX2FkZHIsIHNyY19zdGFydCArIGxlbikgfHxcXG4yMDI3OlxcdFxcdFxcdFxcdCAgICAhcG1kX25vbmUoZHN0X3BtZHZhbCkpIHtcXG4yMDI4OlxcdFxcdFxcdFxcdFxcdC8qIENhbiBiZSBhIG1pZ3JhdGlvbiBlbnRyeSAqL1xcbjIwMjk6XFx0XFx0XFx0XFx0XFx0aWYgKHBtZF9wcmVzZW50KCpzcmNfcG1kKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1NzoyMC44MDYxMDEyMjRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTkwODIzMjkwMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIFVzZXJmYXVsdGZkIE1vdmUgUGFnZSBMb29wKipcblxuT2theSwgc28gaGVyZSdzIHRoZSBicmVha2Rvd24gb2YgdGhpcyBjb2RlLCBhcyBJIHNlZSBpdC4gVGhlIGNvcmUgb2YgdGhlIGlzc3VlIGxpZXMgd2l0aGluIHRoaXMgbG9vcCB1c2VkIGZvciBtb3ZpbmcgcGFnZXMgYmV0d2VlbiBhZGRyZXNzIHNwYWNlcywgc3BlY2lmaWNhbGx5IHRoZSBoYW5kbGluZyBvZiBgLUVBR0FJTmAgZXJyb3JzIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGxvb3AncyBjb250cm9sIGZsb3cuXG5cblRoZSBsb29wLCBhcyBpdCBzdGFuZHMsIHVzZXMgYSBgY29udGludWVgIHN0YXRlbWVudCB0byByZXRyeSB0aGUgc2FtZSBwYWdlIG1vdmUgaWYgYW4gYC1FQUdBSU5gIGVycm9yIGlzIGVuY291bnRlcmVkLiBUaGUgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGEgbWlzc2luZyBgZXJyID0gMGAgYmVmb3JlIHRoZSBgY29udGludWVgIHdhcyB0aGUgcHJvYmxlbS4gSG93ZXZlciwgZnVydGhlciBpbnNwZWN0aW9uIHJldmVhbGVkIGEgbW9yZSBzdWJ0bGUgZmxhdy4gVGhlIHByaW1hcnkgaXNzdWUgc3RlbXMgZnJvbSB0aGUgaW50ZXJhY3Rpb24gb2YgYC1FQUdBSU5gIHdpdGggdGhlIGBtb3ZlX3BhZ2VzX3B0ZXNgIG9yIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYCBjYWxscy5cblxuVGhlIGNyaXRpY2FsIHBhdGggbG9va3MgbGlrZSB0aGlzOlxuXG4xLiAgV2UgZW50ZXIgdGhlIGxvb3AuXG4yLiAgSWYgYGVyciA9PSAtRUFHQUlOYCwgaXQgZ2V0cyBjbGVhcmVkIGFuZCB0aGUgbG9vcCBgY29udGludWVgcy5cbjMuICBUaGUgbW92ZSBvcGVyYXRpb24gKGBtb3ZlX3BhZ2VzX3B0ZXNgIG9yIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYCkgcnVucy5cbjQuICBJZiB0aGUgbW92ZSAqc3VjY2VlZHMqLCBidXQgYGVycmAgaXMgbm90IG92ZXJ3cml0dGVuIChpZiBgcmV0IFx1MDAzZT0gMGApLCB0aGVuIGBlcnJgIHN0aWxsIHJldGFpbnMgdGhlIG9sZCBgLUVBR0FJTmAgdmFsdWUuIFRoaXMgaXMgYSB2ZXJ5IHJlYWwgcGF0aC5cbjUuICBJZiB3ZSBoaXQgdGhlIGNvbmRpdGlvbmFsOiBgaWYgKGVyciA9PSAtRUFHQUlOKSBjb250aW51ZTtgLCB0aGUgaW5jcmVtZW50IG9mIGBzcmNfYWRkcmAsIGBkc3RfYWRkcmAsIGFuZCBgbW92ZWRgIGdldHMgc2tpcHBlZC5cbjYuICBUaGUgbG9vcCBnb2VzIHRvIHRoZSB0b3AsIHdoZXJlIGl0IHRyaWVzIHRvIHJlLW1vdmUgdGhlIHNhbWUsIGFscmVhZHkgbW92ZWQgcGFnZSwgbGVhZGluZyB0byBhIGxvb3AgY29uZGl0aW9uLlxuXG5UaGUgc2NlbmFyaW8gd2hlcmUgYHNwbGl0X2h1Z2VfcG1kYCByZXR1cm5zIHRydWUgcHJlc2VudHMgYW5vdGhlciByaXNrLiBJbiB0aGlzIHBhdGgsIHRoZSBsb29wIGBjb250aW51ZWBzLCBhbmQgYGVycmAgKmlzIG5vdCBvdmVyd3JpdHRlbi4qIFNvLCBpZiBgZXJyYCBoYXMgYSBwcmV2aW91cyBgLUVBR0FJTmAsIHRoaXMgd2lsbCBjb250aW51ZS5cblxuVGhlIGZpeCwgdGhlcmVmb3JlLCBpcyB0byBleHBsaWNpdGx5IHJlc2V0IGBlcnIgPSAwYCB3aGVuZXZlciBgLUVBR0FJTmAgaXMgZW5jb3VudGVyZWQgYmVmb3JlIGBjb250aW51ZWBpbmcuIFRoaXMgd2lsbCBndWFyYW50ZWUgdGhhdCBzdWNjZXNzIGluIGFuIG9wZXJhdGlvbiBvdmVyd3JpdGVzIHRoZSBlcnJvciBzdGF0ZS5cblxuVGhpcyBidWcgb3BlbnMgdXAgdGhlIHBvdGVudGlhbCBmb3I6XG5cbiogICBJbmZpbml0ZSBsb29wczogUmVwZWF0ZWRseSB0cnlpbmcgdG8gbW92ZSB0aGUgc2FtZSwgYWxyZWFkeSBtb3ZlZCBwYWdlLlxuKiAgIEluY29uc2lzdGVudCBzdGF0ZTogTW92aW5nIHBhZ2VzLCBidXQgc2tpcHBpbmcgdGhlIGluY3JlbWVudCwgbWFraW5nIGRhdGEgYmUgbG9zdCBvciBjb3JydXB0ZWQuXG5cbkZ1enppbmcgdGhpcyBhcmVhIGlzIGNyaXRpY2FsLiBXZSBzaG91bGQgZm9jdXMgc3BlY2lmaWNhbGx5IG9uIHRlc3RpbmcgdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIGBtb3ZlX3BhZ2VzYCwgYHVzZXJmYXVsdGZkX21vdmVgLCBgbW92ZV9wYWdlc19wdGVzYCwgYW5kIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYCB1bmRlciB2YXJpb3VzIGVycm9yIGNvbmRpdGlvbnMsIGFuZCBlbnN1cmUgdGhlIGxvb3AgY29udHJvbCB3b3JrcyBhcyBleHBlY3RlZC4gSSdtIHF1aXRlIGNlcnRhaW4gdGhlcmUncyBhIGZ1bmN0aW9uYWwgYnVnIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNDMsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDc2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTc6MzkuODg4NDMzMjEyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODc0Mzc3MjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBVU0VSRkFVTFRGRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMzg0PWNvbmZpZyBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1JcXG4tLVxcbm1tL0tjb25maWctMTM4OC1cXG5tbS9LY29uZmlnOjEzODk6bWVudWNvbmZpZyBVU0VSRkFVTFRGRFxcbm1tL0tjb25maWctMTM5MC1cXHRib29sIFxcXCJFbmFibGUgdXNlcmZhdWx0ZmQoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTc6NDEuNzYyODE2MTUxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMjc3NzkwMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgS2NvbmZpZyBGaWxlKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGBtbS9LY29uZmlnYCBmaWxlIGFnYWluLiBMZXQncyBnZXQgcmlnaHQgZG93biB0byBpdC4gSSB3YW50IHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IHNlY3Rpb24sIHNvIEknbSBnb2luZyB0byBqdW1wIHRvIGxpbmUgMTM4OS4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlIG1lYXQgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb25zIGFyZSBkZWZpbmVkLiBJIGV4cGVjdCB0byBzZWUgdGhlIHVzdWFsIHN1c3BlY3RzIHRoZXJlOiBvcHRpb25zIHJlbGF0ZWQgdG8gTlVNQSwgc3dhcHBpbmcsIHBhZ2UgYWxsb2NhdGlvbiwgb3IgcGVyaGFwcyBzb21ldGhpbmcgbmV3IHRoZXkndmUgc251Y2sgaW4uLi4gSXQncyBhbGwgYWJvdXQgaG93IHRoZXNlIHNldHRpbmdzIGluZmx1ZW5jZSB0aGUga2VybmVsJ3MgbWVtb3J5IGJlaGF2aW9yLCBhbmQgSSBuZWVkIHRvIGtlZXAgdXAgd2l0aCB0aGUgaW50cmljYWNpZXMgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3VyLiBMZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDEyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTc6NDQuNzkwNTk4ODYxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzODAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzODA6XFx0XFx0Ym9vbFxcbjEzODE6XFx0XFx0aGVscFxcbjEzODI6XFx0XFx0ICBBcmNoIGhhcyB1c2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIHN1cHBvcnRcXG4xMzgzOlxcdFxcbjEzODQ6XFx0Y29uZmlnIEhBVkVfQVJDSF9VU0VSRkFVTFRGRF9NSU5PUlxcbjEzODU6XFx0XFx0Ym9vbFxcbjEzODY6XFx0XFx0aGVscFxcbjEzODc6XFx0XFx0ICBBcmNoIGhhcyB1c2VyZmF1bHRmZCBtaW5vciBmYXVsdCBzdXBwb3J0XFxuMTM4ODpcXHRcXG4xMzg5OlxcdG1lbnVjb25maWcgVVNFUkZBVUxURkRcXG4xMzkwOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSB1c2VyZmF1bHRmZCgpIHN5c3RlbSBjYWxsXFxcIlxcbjEzOTE6XFx0XFx0ZGVwZW5kcyBvbiBNTVVcXG4xMzkyOlxcdFxcdGhlbHBcXG4xMzkzOlxcdFxcdCAgRW5hYmxlIHRoZSB1c2VyZmF1bHRmZCgpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIGludGVyY2VwdCBhbmRcXG4xMzk0OlxcdFxcdCAgaGFuZGxlIHBhZ2UgZmF1bHRzIGluIHVzZXJsYW5kLlxcbjEzOTU6XFx0XFxuMTM5NjpcXHRpZiBVU0VSRkFVTFRGRFxcbjEzOTc6XFx0Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxcbjEzOTg6XFx0XFx0Ym9vbCBcXFwiVXNlcmZhdWx0ZmQgd3JpdGUgcHJvdGVjdGlvbiBzdXBwb3J0IGZvciBzaG1lbS9odWdldGxiZnNcXFwiXFxuMTM5OTpcXHRcXHRkZWZhdWx0IHlcXG4xNDAwOlxcdFxcdGRlcGVuZHMgb24gSEFWRV9BUkNIX1VTRVJGQVVMVEZEX1dQXFxuMTQwMTpcXHRcXG4xNDAyOlxcdFxcdGhlbHBcXG4xNDAzOlxcdFxcdCAgQWxsb3dzIHRvIGNyZWF0ZSBtYXJrZXIgUFRFcyBmb3IgdXNlcmZhdWx0ZmQgd3JpdGUgcHJvdGVjdGlvblxcbjE0MDQ6XFx0XFx0ICBwdXJwb3Nlcy4gIEl0IGlzIHJlcXVpcmVkIHRvIGVuYWJsZSB1c2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIG9uXFxuMTQwNTpcXHRcXHQgIGZpbGUtYmFja2VkIG1lbW9yeSB0eXBlcyBsaWtlIHNobWVtIGFuZCBodWdldGxiZnMuXFxuMTQwNjpcXHRlbmRpZiAjIFVTRVJGQVVMVEZEXFxuMTQwNzpcXHRcXG4xNDA4OlxcdCMgbXVsdGktZ2VuIExSVSB7XFxuMTQwOTpcXHRjb25maWcgTFJVX0dFTlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1Nzo0NC43OTA3MjY0NTFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgzOTU5MDU4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBVU0VSRkFVTFRGRGAgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgVVNFUkZBVUxURkRgIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgZm9jdXMgaXMgZGVmaW5pdGVseSBnb2luZyB0byBiZSBvbiB0aGUgY29yZSBmdW5jdGlvbnM6IGBtb3ZlX3BhZ2VzYCwgYHVzZXJmYXVsdGZkX21vdmVgLCBgbW92ZV9wYWdlc19wdGVzYCwgYW5kIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYC4gV2FpdCBhIG1pbnV0ZS4uLiBJIHNlZW0gdG8gcmVjYWxsIGBtb3ZlX3BhZ2VzYCBiZWluZyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gTGV0J3MganVzdCBjb25maXJtIHRoYXQuLi4gWWVwLCB0aGVyZSBpdCBpczogYHN0YXRpYyBzc2l6ZV90IG1vdmVfcGFnZXMoLi4uKWAuIE9rYXksIHRoYXQncyBub3QgdW5leHBlY3RlZC4gQW5kLCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgYHVzZXJmYXVsdGZkX21vdmVgIOKAkyBZdXAsIHN0YXRpYyB0b28uIE9rYXksIGxldCdzIGxvb2sgYXQgYHVzZXJmYXVsdGZkX2lvY3RsYCwganVzdCB0byByb3VuZCBvdXQgdGhhdCB2aWV3IG9mIHRoZSBjb3JlIGZ1bmN0aW9ucy4uLiBzdGF0aWMgYWdhaW4uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBub24tc3RhdGljIGVudHJ5IHBvaW50cywgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSB0aGUgcHVibGljIGludGVyZmFjZS4gQWgsIGBzeXNfdXNlcmZhdWx0ZmRgLi4uIHRoYXQncyB0aGUgb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTYyOCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjU3OjQ4LjYzMDMxOTgxM1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM1MTMwNjQxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJTWVNDQUxMX0RFRklORS4qdXNlcmZhdWx0ZmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3VzZXJmYXVsdGZkLmM9NDQ4Mz1zdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfc3lzY2FsbF9hbGxvd2VkKGludCBmbGFncylcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtNDQ5OS1cXG5tbS91c2VyZmF1bHRmZC5jOjQ1MDA6U1lTQ0FMTF9ERUZJTkUxKHVzZXJmYXVsdGZkLCBpbnQsIGZsYWdzKVxcbm1tL3VzZXJmYXVsdGZkLmMtNDUwMS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjU3OjUwLjk4MTYzODAxNFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzE0NTIwMjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIGB1c2VyZmF1bHRmZGAgTWVjaGFuaXNtKipcblxuQWxyaWdodCwgc28gd2UncmUgZGVhbGluZyB3aXRoIGB1c2VyZmF1bHRmZGAgaGVyZSwgYSBwcmV0dHkgaW50ZXJlc3Rpbmcgc3lzdGVtIGNhbGwuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgZmlsZSBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgdGhlIGB1c2VyZmF1bHRmZF9pb2N0bGAgY2FsbC4gVGhhdCdzIHdoZXJlIHRoZSByZWFsIG1hZ2ljIGhhcHBlbnMsIHJpZ2h0PyBJJ20gZ29pbmcgdG8gcXVpY2tseSByZWZlcmVuY2UgdGhlIGB1c2VyZmF1bHRmZF9mb3BzYCBzdHJ1Y3R1cmUgdG8gcmVtaW5kIG15c2VsZiBvZiB0aGUgc3VwcG9ydGVkIGNvbW1hbmRzIGFuZCBob3cgdGhpcyBhbGwgZml0cyB0b2dldGhlciBhdCB0aGUgZmlsZSBvcGVyYXRpb24gbGF5ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDk5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTc6NTMuNjk2MTYxMTY3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODUxNDk3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyZmF1bHRmZF9mb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3VzZXJmYXVsdGZkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdXNlcmZhdWx0ZmQuYz0zMjU0PXN0YXRpYyBfX3BvbGxfdCB1c2VyZmF1bHRmZF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KVxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0zMjg5LVxcbm1tL3VzZXJmYXVsdGZkLmM6MzI5MDpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1c2VyZmF1bHRmZF9mb3BzO1xcbm1tL3VzZXJmYXVsdGZkLmMtMzI5MS1cXG5tbS91c2VyZmF1bHRmZC5jPTMyOTI9c3RhdGljIGludCByZXNvbHZlX3VzZXJmYXVsdF9mb3JrKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKm5ldyxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMzI5Ny1cXG5tbS91c2VyZmF1bHRmZC5jOjMyOTg6XFx0ZmQgPSBhbm9uX2lub2RlX2NyZWF0ZV9nZXRmZChcXFwiW3VzZXJmYXVsdGZkXVxcXCIsIFxcdTAwMjZ1c2VyZmF1bHRmZF9mb3BzLCBuZXcsXFxubW0vdXNlcmZhdWx0ZmQuYy0zMjk5LVxcdFxcdFxcdE9fUkRPTkxZIHwgKG5ldy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBVRkZEX1NIQVJFRF9GQ05UTF9GTEFHUyksIGlub2RlKTtcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmM9NDM5NT1zdGF0aWMgdm9pZCB1c2VyZmF1bHRmZF9zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmKVxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy00NDIxLVxcbm1tL3VzZXJmYXVsdGZkLmM6NDQyMjpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1c2VyZmF1bHRmZF9mb3BzID0ge1xcbm1tL3VzZXJmYXVsdGZkLmMtNDQyMy0jaWZkZWYgQ09ORklHX1BST0NfRlNcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmM9NDQ0NT1zdGF0aWMgaW50IG5ld191c2VyZmF1bHRmZChpbnQgZmxhZ3MpXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTQ0NjktXFx0RkRfUFJFUEFSRShmZGYsIGZsYWdzIFxcdTAwMjYgVUZGRF9TSEFSRURfRkNOVExfRkxBR1MsXFxubW0vdXNlcmZhdWx0ZmQuYzo0NDcwOlxcdFxcdCAgIGFub25faW5vZGVfY3JlYXRlX2dldGZpbGUoXFxcIlt1c2VyZmF1bHRmZF1cXFwiLCBcXHUwMDI2dXNlcmZhdWx0ZmRfZm9wcywgY3R4LFxcbm1tL3VzZXJmYXVsdGZkLmMtNDQ3MS1cXHRcXHRcXHRcXHRcXHQgICAgIE9fUkRPTkxZIHwgKGZsYWdzIFxcdTAwMjYgVUZGRF9TSEFSRURfRkNOVExfRkxBR1MpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1Nzo1My43NDQ2NzkxMjFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg4NTE2MTUxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDb25zaWRlcmluZyB0aGUgS2VybmVsIEFQSSBFbnRyeXBvaW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0aGUgY29yZSBpb2N0bCBmdW5jdGlvbiBzZWVtcyB0byBiZSBgdXNlcmZhdWx0ZmRfaW9jdGxgLiBCdXQgaGFuZyBvbiwgdGhlIHByb21wdCBzcGVjaWZpY2FsbHkgc2F5cyB0byBwcmVmZXIgKm5vbi1zdGF0aWMqLCAqbm9uLWlubGluZWQqIGVudHJ5IHBvaW50cyBvdmVyIGludGVybmFsIGhlbHBlcnMuIEluaXRpYWxseSwgSSB3YXMgdGhpbmtpbmcgdG8gZXhjbHVkZSBgdXNlcmZhdWx0ZmRfaW9jdGxgIGlmIGl0J3Mgc3RhdGljLCBzaW5jZSB0aGUgY29tcGlsZXIgd291bGQgbGlrZWx5IGlubGluZSBpdCwgbGVhZGluZyB0byBubyBkaXN0aW5jdCBzeW1ib2wuIEJ1dCB0aGVuIHRoZSBwcm9tcHQgZW1waGFzaXplcyBcIlByZWZlciBub24tc3RhdGljLFwiIHNvIEkgbmVlZCB0byBjaGVjay4gRXZlbiBpZiBpdCAqaXMqIHN0YXRpYywgYnV0IGlzIGFuIGVudHJ5IHBvaW50LCBJIHNob3VsZCBpbmNsdWRlIGl0IGlmIGl0J3MgdGhlIG1vcmUgY29ycmVjdCBvcHRpb24uXG5cblRoZSBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCBpZiBgdXNlcmZhdWx0ZmRfaW9jdGxgIGlzIGV4cG9ydGVkIGFzIGEgc3ltYm9sIG9yIGlmIGl0J3Mgb25seSBjYWxsZWQgd2l0aGluIGB1c2VyZmF1bHRmZF9mb3BzYC4gQWgsIHJpZ2h0LCBpdCdzIHVzZWQgd2l0aGluIGB1c2VyZmF1bHRmZF9mb3BzYC4gT2theSwgc28gd2hhdCBhYm91dCB0aGUgc3lzdGVtIGNhbGwgZW50cnkgcG9pbnQ/IFRoYXQgd291bGQgYmUgYHN5c191c2VyZmF1bHRmZGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGFwcHJvYWNoIGlzIGJlc3QgaGVyZSBnaXZlbiB0aGUgY29uc3RyYWludHMuIExldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgbm9uLXN0YXRpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3NjQsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTc6NTguNjI5ODQzMjg5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTUyMTQ4Mjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzZXJmYXVsdGZkX21vdmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3VzZXJmYXVsdGZkLmM9NDIwNz1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB1ZmZkX2N0eF9mZWF0dXJlcyhfX3U2NCB1c2VyX2ZlYXR1cmVzKVxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy00MjE1LVxcbm1tL3VzZXJmYXVsdGZkLmM6NDIxNjpzdGF0aWMgaW50IHVzZXJmYXVsdGZkX21vdmUoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LFxcbm1tL3VzZXJmYXVsdGZkLmMtNDIxNy1cXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jPTQzNTA9c3RhdGljIGxvbmcgdXNlcmZhdWx0ZmRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGNtZCxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtNDM3OC1cXHRjYXNlIFVGRkRJT19NT1ZFOlxcbm1tL3VzZXJmYXVsdGZkLmM6NDM3OTpcXHRcXHRyZXQgPSB1c2VyZmF1bHRmZF9tb3ZlKGN0eCwgYXJnKTtcXG5tbS91c2VyZmF1bHRmZC5jLTQzODAtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjU4OjAxLjc4MTk5NzE4M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDQyNjA4MjA1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEF0dGFjayBQbGFuKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRvIGFwcHJvYWNoIHRoaXMuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBxdWlja2x5IHplcm8gaW4gb24gYHVzZXJmYXVsdGZkX2lvY3RsYC4gVGhhdCBzZWVtcyBsaWtlIGEgcHJpbWUgdGFyZ2V0IGJlY2F1c2UgaXQncyB0aGUgaW9jdGwgaGFuZGxlciwgd2hpY2ggbWVhbnMgaXQncyB0aGUgZW50cnkgcG9pbnQuIFdhaXQsIEkgc2hvdWxkIGRvdWJsZS1jaGVjazogYHN5c191c2VyZmF1bHRmZGAgaXMgdGhlIGFjdHVhbCBzeXNjYWxsIGZ1bmN0aW9uLiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhlIHJlbGF0ZWQgY29kZSwganVzdCB0byBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIGFueXRoaW5nIG9idmlvdXMuXG5cbkFscmlnaHQsIGxldCdzIGp1c3QgZ28gYmFjayBhbmQgY2hlY2sgYG1vdmVfcGFnZXNgIGFnYWluLiBZZWFoLCB0aGF0J3Mgc3RhdGljLCBzbyBpdCdzIG5vdCBhIGRpcmVjdCBlbnRyeSBwb2ludC4gSSdsbCBkZWZpbml0ZWx5IGtlZXAgYHVzZXJmYXVsdGZkX2lvY3RsYCBhbmQgYHN5c191c2VyZmF1bHRmZGAgb24gdGhlIGxpc3QuIFdhaXQsIEkgcHJvYmFibHkgZG9uJ3QgbmVlZCBgc3lzX3VzZXJmYXVsdGZkYCwgdGhhdCB3aWxsIGJlIGp1c3QgYWxpYXNlZCBhcyBgX194NjRfc3lzX3VzZXJmYXVsdGZkYCBvciBzb21ldGhpbmcgc2ltaWxhciwgc28gYHVzZXJmYXVsdGZkX2lvY3RsYCBpcyBmaW5lLlxuXG5Ob3csIGxldCBtZSBicm9hZGVuIG15IHNjb3BlIGEgYml0LiBBcmUgdGhlcmUgYW55IHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHRoYXQgZW5hYmxlIGl0PyBMZXQncyBzZWUuLi4gYFVTRVJGQVVMVEZEYCBzZWVtcyBsaWtlIHRoZSBrZXkgY29uZmlndXJhdGlvbi4gQnV0IGlzIHRoZXJlIGFueXRoaW5nIGVsc2UgYXNzb2NpYXRlZCB3aXRoIGBVRkZESU9fTU9WRWA/IFRoYXQncyB3aGF0IEkgcmVhbGx5IG5lZWQgdG8gZHJpbGwgZG93biBvbiB0byBzZWUgd2hhdCBrbm9icyBhcmUgYXZhaWxhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQzOSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1OTowNi4yMDgwODM0NjVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyNzI3MDA4MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVUZGRElPX01PVkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvdWFwaS9saW51eC91c2VyZmF1bHRmZC5oLTUzLVxcdCAoX191NjQpMSBcXHUwMDNjXFx1MDAzYyBfVUZGRElPX1pFUk9QQUdFIHxcXHRcXHRcXFxcXFxuaW5jbHVkZS91YXBpL2xpbnV4L3VzZXJmYXVsdGZkLmg6NTQ6XFx0IChfX3U2NCkxIFxcdTAwM2NcXHUwMDNjIF9VRkZESU9fTU9WRSB8XFx0XFx0XFxcXFxcbmluY2x1ZGUvdWFwaS9saW51eC91c2VyZmF1bHRmZC5oLTU1LVxcdCAoX191NjQpMSBcXHUwMDNjXFx1MDAzYyBfVUZGRElPX1dSSVRFUFJPVEVDVCB8XFx0XFxcXFxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3VzZXJmYXVsdGZkLmgtNzctI2RlZmluZSBfVUZGRElPX1pFUk9QQUdFXFx0XFx0KDB4MDQpXFxuaW5jbHVkZS91YXBpL2xpbnV4L3VzZXJmYXVsdGZkLmg6Nzg6I2RlZmluZSBfVUZGRElPX01PVkVcXHRcXHRcXHQoMHgwNSlcXG5pbmNsdWRlL3VhcGkvbGludXgvdXNlcmZhdWx0ZmQuaC03OS0jZGVmaW5lIF9VRkZESU9fV1JJVEVQUk9URUNUXFx0XFx0KDB4MDYpXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvdXNlcmZhdWx0ZmQuaC05Ny1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdWZmZGlvX3plcm9wYWdlKVxcbmluY2x1ZGUvdWFwaS9saW51eC91c2VyZmF1bHRmZC5oOjk4OiNkZWZpbmUgVUZGRElPX01PVkVcXHRcXHRfSU9XUihVRkZESU8sIF9VRkZESU9fTU9WRSxcXHRcXFxcXFxuaW5jbHVkZS91YXBpL2xpbnV4L3VzZXJmYXVsdGZkLmgtOTktXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHVmZmRpb19tb3ZlKVxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3VzZXJmYXVsdGZkLmg9MzU5PXN0cnVjdCB1ZmZkaW9fbW92ZSB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvdXNlcmZhdWx0ZmQuaC0zNjYtXFx0ICovXFxuaW5jbHVkZS91YXBpL2xpbnV4L3VzZXJmYXVsdGZkLmg6MzY3OiNkZWZpbmUgVUZGRElPX01PVkVfTU9ERV9ET05UV0FLRVxcdFxcdCgoX191NjQpMVxcdTAwM2NcXHUwMDNjMClcXG5pbmNsdWRlL3VhcGkvbGludXgvdXNlcmZhdWx0ZmQuaDozNjg6I2RlZmluZSBVRkZESU9fTU9WRV9NT0RFX0FMTE9XX1NSQ19IT0xFU1xcdCgoX191NjQpMVxcdTAwM2NcXHUwMDNjMSlcXG5pbmNsdWRlL3VhcGkvbGludXgvdXNlcmZhdWx0ZmQuaC0zNjktXFx0X191NjQgbW9kZTtcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0xMjc4PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2h1Z2VfcGFnZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydF9hZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTEzMzUtXFx0ICpcXG5tbS9raHVnZXBhZ2VkLmM6MTMzNjpcXHQgKiBVRkZESU9fTU9WRSBpcyBwcmV2ZW50ZWQgdG8gcmFjZSBhcyB3ZWxsIHRoYW5rcyB0byB0aGVcXG5tbS9raHVnZXBhZ2VkLmMtMTMzNy1cXHQgKiBtbWFwX2xvY2suXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jPTE0MTU9c3RhdGljIGxvbmcgbW92ZV9wYWdlc19wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWQsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTE0ODktXFx0aWYgKHB0ZV9ub25lKG9yaWdfc3JjX3B0ZSkpIHtcXG5tbS91c2VyZmF1bHRmZC5jOjE0OTA6XFx0XFx0aWYgKCEobW9kZSBcXHUwMDI2IFVGRkRJT19NT1ZFX01PREVfQUxMT1dfU1JDX0hPTEVTKSlcXG5tbS91c2VyZmF1bHRmZC5jLTE0OTEtXFx0XFx0XFx0cmV0ID0gLUVOT0VOVDtcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmM9MTg1OT1zdGF0aWMgdm9pZCB1ZmZkX21vdmVfdW5sb2NrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMTkyNC0gKlxcbm1tL3VzZXJmYXVsdGZkLmM6MTkyNTogKiBUaGUgVUZGRElPX01PVkVfTU9ERV9BTExPV19TUkNfSE9MRVMgZmxhZyBjYW4gYmUgc3BlY2lmaWVkIHRvXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTI2LSAqIHByZXZlbnQgLUVOT0VOVCBlcnJvcnMgdG8gbWF0ZXJpYWxpemUgaWYgdGhlcmUgYXJlIGhvbGVzIGluIHRoZVxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYz0xOTM0PXN0YXRpYyBzc2l6ZV90IG1vdmVfcGFnZXMoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LCB1bnNpZ25lZCBsb25nIGRzdF9zdGFydCxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMTk5NC1cXHRcXHRpZiAodW5saWtlbHkoIXNyY19wbWQpKSB7XFxubW0vdXNlcmZhdWx0ZmQuYzoxOTk1OlxcdFxcdFxcdGlmICghKG1vZGUgXFx1MDAyNiBVRkZESU9fTU9WRV9NT0RFX0FMTE9XX1NSQ19IT0xFUykpIHtcXG5tbS91c2VyZmF1bHRmZC5jLTE5OTYtXFx0XFx0XFx0XFx0ZXJyID0gLUVOT0VOVDtcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMjA1My1cXHRcXHRcXHRpZiAocG1kX25vbmUoKnNyY19wbWQpKSB7XFxubW0vdXNlcmZhdWx0ZmQuYzoyMDU0OlxcdFxcdFxcdFxcdGlmICghKG1vZGUgXFx1MDAyNiBVRkZESU9fTU9WRV9NT0RFX0FMTE9XX1NSQ19IT0xFUykpIHtcXG5tbS91c2VyZmF1bHRmZC5jLTIwNTUtXFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVOT0VOVDtcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmM9NDIxNj1zdGF0aWMgaW50IHVzZXJmYXVsdGZkX21vdmUoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy00MjUwLVxcbm1tL3VzZXJmYXVsdGZkLmM6NDI1MTpcXHRpZiAodWZmZGlvX21vdmUubW9kZSBcXHUwMDI2IH4oVUZGRElPX01PVkVfTU9ERV9BTExPV19TUkNfSE9MRVN8XFxubW0vdXNlcmZhdWx0ZmQuYzo0MjUyOlxcdFxcdFxcdFxcdCBVRkZESU9fTU9WRV9NT0RFX0RPTlRXQUtFKSlcXG5tbS91c2VyZmF1bHRmZC5jLTQyNTMtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTQyNzAtXFx0cmFuZ2UubGVuID0gcmV0O1xcbm1tL3VzZXJmYXVsdGZkLmM6NDI3MTpcXHRpZiAoISh1ZmZkaW9fbW92ZS5tb2RlIFxcdTAwMjYgVUZGRElPX01PVkVfTU9ERV9ET05UV0FLRSkpIHtcXG5tbS91c2VyZmF1bHRmZC5jLTQyNzItXFx0XFx0cmFuZ2Uuc3RhcnQgPSB1ZmZkaW9fbW92ZS5kc3Q7XFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jPTQzNTA9c3RhdGljIGxvbmcgdXNlcmZhdWx0ZmRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGNtZCxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtNDM3Ny1cXHRcXHRicmVhaztcXG5tbS91c2VyZmF1bHRmZC5jOjQzNzg6XFx0Y2FzZSBVRkZESU9fTU9WRTpcXG5tbS91c2VyZmF1bHRmZC5jLTQzNzktXFx0XFx0cmV0ID0gdXNlcmZhdWx0ZmRfbW92ZShjdHgsIGFyZyk7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvdXNlcmZhdWx0ZmQuaC01My1cXHQgKF9fdTY0KTEgXFx1MDAzY1xcdTAwM2MgX1VGRkRJT19aRVJPUEFHRSB8XFx0XFx0XFxcXFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC91c2VyZmF1bHRmZC5oOjU0OlxcdCAoX191NjQpMSBcXHUwMDNjXFx1MDAzYyBfVUZGRElPX01PVkUgfFxcdFxcdFxcXFxcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvdXNlcmZhdWx0ZmQuaC01NS1cXHQgKF9fdTY0KTEgXFx1MDAzY1xcdTAwM2MgX1VGRkRJT19XUklURVBST1RFQ1QgfFxcdFxcXFxcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC91c2VyZmF1bHRmZC5oLTc3LSNkZWZpbmUgX1VGRkRJT19aRVJPUEFHRVxcdFxcdCgweDA0KVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC91c2VyZmF1bHRmZC5oOjc4OiNkZWZpbmUgX1VGRkRJT19NT1ZFXFx0XFx0XFx0KDB4MDUpXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3VzZXJmYXVsdGZkLmgtNzktI2RlZmluZSBfVUZGRElPX1dSSVRFUFJPVEVDVFxcdFxcdCgweDA2KVxcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3VzZXJmYXVsdGZkLmgtOTctXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHVmZmRpb196ZXJvcGFnZSlcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvdXNlcmZhdWx0ZmQuaDo5ODojZGVmaW5lIFVGRkRJT19NT1ZFXFx0XFx0X0lPV1IoVUZGRElPLCBfVUZGRElPX01PVkUsXFx0XFxcXFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC91c2VyZmF1bHRmZC5oLTk5LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB1ZmZkaW9fbW92ZSlcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC91c2VyZmF1bHRmZC5oPTM1OT1zdHJ1Y3QgdWZmZGlvX21vdmUge1xcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3VzZXJmYXVsdGZkLmgtMzY2LVxcdCAqL1xcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC91c2VyZmF1bHRmZC5oOjM2NzojZGVmaW5lIFVGRkRJT19NT1ZFX01PREVfRE9OVFdBS0VcXHRcXHQoKF9fdTY0KTFcXHUwMDNjXFx1MDAzYzApXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3VzZXJmYXVsdGZkLmg6MzY4OiNkZWZpbmUgVUZGRElPX01PVkVfTU9ERV9BTExPV19TUkNfSE9MRVNcXHQoKF9fdTY0KTFcXHUwMDNjXFx1MDAzYzEpXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3VzZXJmYXVsdGZkLmgtMzY5LVxcdF9fdTY0IG1vZGU7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jPTY2ND1pbnQgbW92ZV9wYWdlKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgbGVuKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uYy02NzItXFx0dWZmZGlvX21vdmUubGVuID0gbGVuO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmM6NjczOlxcdHVmZmRpb19tb3ZlLm1vZGUgPSBVRkZESU9fTU9WRV9NT0RFX0FMTE9XX1NSQ19IT0xFUztcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jLTY3NC1cXHR1ZmZkaW9fbW92ZS5tb3ZlID0gMDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jOjY3NTpcXHRpZiAoaW9jdGwoZ29wdHMtXFx1MDAzZXVmZmQsIFVGRkRJT19NT1ZFLCBcXHUwMDI2dWZmZGlvX21vdmUpKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uYy02NzYtXFx0XFx0LyogcmVhbCByZXR2YWwgaW4gdWZmZGlvX21vdmUubW92ZSAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmMtNjc3LVxcdFxcdGlmICh1ZmZkaW9fbW92ZS5tb3ZlICE9IC1FRVhJU1QpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uYzo2Nzg6XFx0XFx0XFx0ZXJyKFxcXCJVRkZESU9fTU9WRSBlcnJvcjogJVxcXCJQUklkNjQsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uYy02NzktXFx0XFx0XFx0ICAgIChpbnQ2NF90KXVmZmRpb19tb3ZlLm1vdmUpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uYy02ODEtXFx0fSBlbHNlIGlmICh1ZmZkaW9fbW92ZS5tb3ZlICE9IGxlbikge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmM6NjgyOlxcdFxcdGVycihcXFwiVUZGRElPX01PVkUgZXJyb3I6ICVcXFwiUFJJZDY0LCAoaW50NjRfdCl1ZmZkaW9fbW92ZS5tb3ZlKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jLTY4My1cXHR9IGVsc2VcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jPTEyNjI9REVGSU5FX01NQVBfQ0hBTkdJTkdfVEVTVChjb3B5LCBVRkZESU9fQ09QWSwgY29weSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYzoxMjYzOkRFRklORV9NTUFQX0NIQU5HSU5HX1RFU1QobW92ZSwgVUZGRElPX01PVkUsIG1vdmUpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmMtMTI2NC1ERUZJTkVfTU1BUF9DSEFOR0lOR19URVNUKHBvaXNvbiwgVUZGRElPX1BPSVNPTiwgdXBkYXRlZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jPTE0OTk9dWZmZF90ZXN0X2Nhc2VfdCB1ZmZkX3Rlc3RzW10gPSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYy0xNjUzLVxcdFxcdCAqIGFsbW9zdCBhbHdheXMgYXZhaWxhYmxlICh1bmxpa2UgaHVnZXRsYikuICBIZXJlIHdlXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmM6MTY1NDpcXHRcXHQgKiBhYnVzZWQgU0hNRU0gZm9yIFVGRkRJT19NT1ZFLCBidXQgdGhlIHRlc3Qgd2Ugd2FudCB0b1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jLTE2NTUtXFx0XFx0ICogY292ZXIgZG9lc24ndCB5ZXQgbmVlZCB0aGUgY29ycmVjdCBtZW1vcnkgdHlwZS4uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjU5OjA5LjQ4MDc5MTc1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2ODUxMjczMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBGb2N1czogVUZGRElPX01PVkUgYW5kIFVzZXJmYXVsdGZkKipcblxuT2theSwgc28gSSdtIGRyaWxsaW5nIGRvd24gaW50byBob3cgYFVGRkRJT19NT1ZFYCB3b3Jrcy4gUmlnaHQsIHNvIGBVRkZESU9fTU9WRWAgaXMgdGhlIHNwZWNpZmljIGlvY3RsIGNvbW1hbmQgSSdtIGludGVyZXN0ZWQgaW4uIEkgd2FzIGluaXRpYWxseSBhIGJpdCBmdXp6eSBvbiB3aGV0aGVyIGB1c2VyZmF1bHRmZF9pb2N0bGAgd2FzIHN0YXRpYyBvciBub3Qg4oCTIGJ1dCB0aGF0J3Mgc3RhdGljLCByaWdodD8gWWVzLCBjb25maXJtZWQsIGl0J3Mgc3RhdGljLlxuXG5Ob3csIGxldCdzIHNlZS4gYHN5c191c2VyZmF1bHRmZGAgaXMgdGhlIGFjdHVhbCBzeXN0ZW0gY2FsbCB0aGF0ICpjcmVhdGVzKiB0aGUgZmlsZSBkZXNjcmlwdG9yIGZvciBhbGwgdGhpcywgYnV0IHRoZSBgaW9jdGxgICptZXRob2QqIHRvIGV4ZWN1dGUgYFVGRkRJT19NT1ZFYCBpcyBoYW5kbGVkIGJ5IGB1c2VyZmF1bHRmZF9pb2N0bGAuIFNvIHRoZSBjcml0aWNhbCBpbnRlcmZhY2UgcG9pbnQgZm9yIGBVRkZESU9fTU9WRWAgaXMgdGhpcyBgaW9jdGxgIGhhbmRsZXI6IGB1c2VyZmF1bHRmZF9pb2N0bGAuXG5cbk9rYXksIEkgd2FzIHRoaW5raW5nIGFib3V0IGFkZGluZyBib3RoIGB1c2VyZmF1bHRmZF9pb2N0bGAgKmFuZCogYHN5c191c2VyZmF1bHRmZGAgdG8gdGhlIHN5bWJvbCBsaXN0LiBXYWl0LCBubywgYHN5c191c2VyZmF1bHRmZGAganVzdCBjcmVhdGVzIHRoZSBmZCEgSXQgZG9lc24ndCBhY3R1YWxseSBoYW5kbGUgdGhlIGlvY3RsLiBUaGUgKnJlYWwqIGhhbmRsZXIgZm9yIHRoZSBgaW9jdGxgIGlzIGRlZmluaXRlbHkgYHVzZXJmYXVsdGZkX2lvY3RsYC4gT2theSwgc28gd2hpbGUgYHVzZXJmYXVsdGZkX2lvY3RsYCBpcyBzdGF0aWMsIGJlY2F1c2UgaXQncyB0aGUgbWFpbiBmdW5jdGlvbiBJIHNob3VsZCBpbmNsdWRlIGl0LiBObyB3YWl0LCBpcyB0aGVyZSBhIG1vcmUgZ2VuZXJhbCBgc3lzX2lvY3RsYCB0byBpbmNsdWRlPyBUb28gZ2VuZXJpYy4uLlxuXG5TbywgSSBzaG91bGQgaW5jbHVkZSBgdXNlcmZhdWx0ZmRfaW9jdGxgLCBhbmQgYHVzZXJmYXVsdGZkX21vdmVgLCBhbmQgYG1vdmVfcGFnZXNgLiBFdmVuIHRob3VnaCB0aGV5J3JlIHN0YXRpYywgdGhleSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgaGVyZS4gV2FpdCwgYHVzZXJmYXVsdGZkX2lvY3RsYCBpcyB0aGUgKmZpbGUgb3BlcmF0aW9uKiBoYW5kbGVyIGZvciB0aGUgZGV2aWNlLCBhbmQgSSBuZWVkIHRvIGNoZWNrIGZvciBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSBwcm9jZXNzLi4uIExldCdzIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIsIHBvc3NpYmx5IG5vbi1zdGF0aWMgZnVuY3Rpb25zLCB0aGF0IGFyZSByZWxldmFudC4gTGV0J3MgbG9vayBhdCB0aGUgZXhwb3J0cyBmcm9tIGBtbS91c2VyZmF1bHRmZC5jYCBqdXN0IHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTMxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjU5OjE2LjE2NTkyMzg2M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkyMTUyODUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdXNlcmZhdWx0ZmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTk6MTYuMjI1MTUxMjU4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5ODEyNTc1NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFN5bWJvbCBFeHBvc3VyZSBpbiB0aGUgTGludXggS2VybmVsKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBub3RpY2luZyB0aGUgYWJzZW5jZSBvZiBhbnkgZXhwb3J0ZWQgc3ltYm9scy4gVGhhdCB0ZWxscyBtZSBldmVyeXRoaW5nIGhlcmUgaXMgZWl0aGVyIHN0YXRpYyBvciBub3QgbWVhbnQgZm9yIGV4dGVybmFsIHVzZS4gTGV0J3MgZm9jdXMgb24gdGhlIGZ1bmN0aW9ucyBJIHNlZSBkaXJlY3RseSByZWxldmFudDogYHVzZXJmYXVsdGZkX2lvY3RsYCwgYHVzZXJmYXVsdGZkX21vdmVgLCBhbmQgYG1vdmVfcGFnZXNgLiBIb2xkIG9uIGEgc2Vjb25kLCB3YXNuJ3QgYG1vdmVfcGFnZXNgIGFsc28gYSBzeXN0ZW0gY2FsbD8gUmlnaHQsIGl0IGlzISBJIHJlbWVtYmVyIG5vdzsgYHN5c19tb3ZlX3BhZ2VzYCBpcyBkZWZpbmVkIG92ZXIgaW4gYG1tL21pZ3JhdGUuY2AuIEJ1dCB0aGUgYG1vdmVfcGFnZXNgIEknbSBsb29raW5nIGF0IGhlcmUsIHdpdGhpbiBgbW0vdXNlcmZhdWx0ZmQuY2AsIGlzIHNwZWNpZmljYWxseSBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoaXMgY3JlYXRlcyBhIHBvdGVudGlhbCBjb25mbGljdCBpZiBJIHNpbXBseSBhZGQgYG1vdmVfcGFnZXNgIHRvIGEgc3ltYm9sIGxpc3QgbGlrZSBgRm9jdXNTeW1ib2xzYC4gVGhlcmUncyBhIHJpc2sgdGhhdCBpdCBtaWdodCBlcnJvbmVvdXNseSB0YXJnZXQgdGhhdCBzeXN0ZW0gY2FsbCBpbiBgbW0vbWlncmF0ZS5jYCBpbnN0ZWFkIG9mIHRoZSBsb2NhbCBzdGF0aWMgb25lLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlIGBtb3ZlX3BhZ2VzYCB3aXRoaW4gYG1tL3VzZXJmYXVsdGZkLmNgIGlzIHRoZSBvbmx5IG9uZSB3aXRoIHRoYXQgbmFtZS4gSSBtdXN0IGNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzI0MywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1OToyMC4yMDY0MTM5NDdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NjMwNjk5MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiU1lTQ0FMTF9ERUZJTkUuKm1vdmVfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21pZ3JhdGUuYz0yNTkzPXN0YXRpYyBpbnQga2VybmVsX21vdmVfcGFnZXMocGlkX3QgcGlkLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWlncmF0ZS5jLTI2MjItXFxubW0vbWlncmF0ZS5jOjI2MjM6U1lTQ0FMTF9ERUZJTkU2KG1vdmVfcGFnZXMsIHBpZF90LCBwaWQsIHVuc2lnbmVkIGxvbmcsIG5yX3BhZ2VzLFxcbm1tL21pZ3JhdGUuYy0yNjI0LVxcdFxcdGNvbnN0IHZvaWQgX191c2VyICogX191c2VyICosIHBhZ2VzLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbnVtYWlmLmg9MjM9S1ZNX1NZU0NBTExfREVGSU5FKG1pZ3JhdGVfcGFnZXMsIDQsIGludCwgcGlkLCB1bnNpZ25lZCBsb25nLCBtYXhub2RlLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbnVtYWlmLmgtMjUtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbnVtYWlmLmg6MjY6S1ZNX1NZU0NBTExfREVGSU5FKG1vdmVfcGFnZXMsIDYsIGludCwgcGlkLCB1bnNpZ25lZCBsb25nLCBjb3VudCwgdm9pZCAqLCBwYWdlcyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9udW1haWYuaC0yNy1cXHRcXHQgICBjb25zdCBpbnQgKiwgbm9kZXMsIGludCAqLCBzdGF0dXMsIGludCwgZmxhZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1OToyMy4wNjk0OTQxMzVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAwMDc0ODk5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBtb3ZlX3BhZ2VzYCBDb251bmRydW0qKlxuXG5Pa2F5LCBzbyBJJ20gZGVhbGluZyB3aXRoIGBtb3ZlX3BhZ2VzYCBoZXJlLCBhbmQgSSBrbm93IGZyb20gbWVtb3J5LCBvciBhIHF1aWNrIGNyb3NzLXJlZmVyZW5jZSwgdGhhdCBpdCdzIGEgc3lzdGVtIGNhbGwgZGVmaW5lZCBpbiBgbW0vbWlncmF0ZS5jYC4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBwb3RlbnRpYWwgZm9yIGNvbmZ1c2lvbi4gSWYgSSBzaW1wbHkgYWRkIGBtb3ZlX3BhZ2VzYCB0byBgRm9jdXNTeW1ib2xzYCwgSSdtIGdvaW5nIHRvIHBpY2sgdXAgYHN5c19tb3ZlX3BhZ2VzYCAqYW5kKiBga2VybmVsX21vdmVfcGFnZXNgLCBhbmQgdGhhdCdzIG5vdCB3aGF0IEknbSBhaW1pbmcgZm9yLiBJIG5lZWQgdG8gYmUgbW9yZSBwcmVjaXNlIGluIG15IHRhcmdldGluZy4gSXQgbG9va3MgbGlrZSB0aGUgcmlnaHQgcm91dGUgaW52b2x2ZXMgYHVzZXJmYXVsdGZkX2lvY3RsYCBhbmQgYHVzZXJmYXVsdGZkX21vdmVgIGluc3RlYWQuIE5vdyBJJ20gdGhpbmtpbmcuLi53aGF0IGFib3V0IGBtb3ZlX3BhZ2VzX3B0ZXNgIGFuZCBgbW92ZV9wYWdlc19odWdlX3BtZGA/IFRoZXkncmUgZGVmaW5lZCBhcyBgc3RhdGljYCB3aXRoaW4gYG1tL3VzZXJmYXVsdGZkLmNgLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSBJJ20gbm90IG1pc3Npbmcgc29tZXRoaW5nIGNyaXRpY2FsLCBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGFuZCBzY2FuIGZvciBhbnkgb3RoZXIgZnVuY3Rpb24gZGVmaW5pdGlvbnMgd2l0aCB0aGF0IHBhcnRpY3VsYXIgbmFtZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc5MzUsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTk6MjcuMDcwMjQ1Nzg1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzM3MDk5NTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vdmVfcGFnZXNfcHRlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdXNlcmZhdWx0ZmQuYz0xMzgyPXN0YXRpYyBpbnQgbW92ZV96ZXJvcGFnZV9wdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTE0MTQtICovXFxubW0vdXNlcmZhdWx0ZmQuYzoxNDE1OnN0YXRpYyBsb25nIG1vdmVfcGFnZXNfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kLFxcbm1tL3VzZXJmYXVsdGZkLmMtMTQxNi1cXHRcXHRcXHQgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYz0xOTM0PXN0YXRpYyBzc2l6ZV90IG1vdmVfcGFnZXMoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LCB1bnNpZ25lZCBsb25nIGRzdF9zdGFydCxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMjA2OC1cXG5tbS91c2VyZmF1bHRmZC5jOjIwNjk6XFx0XFx0XFx0cmV0ID0gbW92ZV9wYWdlc19wdGVzKG1tLCBkc3RfcG1kLCBzcmNfcG1kLFxcbm1tL3VzZXJmYXVsdGZkLmMtMjA3MC1cXHRcXHRcXHRcXHRcXHQgICAgICBkc3Rfdm1hLCBzcmNfdm1hLCBkc3RfYWRkcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTk6MjkuNDA3MzUxODE2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzQzODYzOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRpdmluZyBpbnRvIFBhZ2UgTWlncmF0aW9uIE1lY2hhbmlzbXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gYG1vdmVfcGFnZXNfcHRlc2Ag4oCTIHllYWgsIHRoYXQgb25lJ3MgZ290IGEgcGFydGljdWxhciBuaWNoZSwgYSBzcGVjaWZpYyBzZXQgb2YgY2lyY3Vtc3RhbmNlcyB3aGVyZSBpdCdzIHRoZSByaWdodCB0b29sIGZvciB0aGUgam9iLiBCdXQgbm93IHRoZSBxdWVzdGlvbiB0aGF0IHBvcHMgdXAgaXMsIHdoYXQgYWJvdXQgYG1vdmVfcGFnZXNfaHVnZV9wbWRgPyBJIG5lZWQgdG8gYW5hbHl6ZSBpdHMgYmVoYXZpb3IgaW4gY29tcGFyaXNvbiBhbmQgZmlndXJlIG91dCB3aGVyZSB0aGUgZGl2aXNpb24gZmFsbHMuIEkgd2FudCB0byBoYXZlIGEgcHJlY2lzZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZXNwZWN0aXZlIHN0cmVuZ3RocyBvZiB0aGVzZSBmdW5jdGlvbnMuIFdoYXQgYXJlIHRoZSBrZXkgZGlzdGluY3Rpb25zIGhlcmU/IFdoZW4gZG8gd2UgbGV2ZXJhZ2Ugb25lIG92ZXIgdGhlIG90aGVyPyBJIG5lZWQgdG8gYnVpbGQgYSBjb21wcmVoZW5zaXZlIG1lbnRhbCBtb2RlbCB0byBlbnN1cmUgSSdtIG1ha2luZyB0aGUgbW9zdCBvcHRpbWl6ZWQgZGVjaXNpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODU4MywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjU5OjMyLjY4MTc0MjI2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTEzMDExNjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vdmVfcGFnZXNfaHVnZV9wbWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oPTE1NT12b2lkIGRvdWJsZV9wdF91bmxvY2soc3BpbmxvY2tfdCAqcHRsMSwgc3BpbmxvY2tfdCAqcHRsMik7XFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg6MTU2OmludCBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWQsIHBtZF90IGRzdF9wbWR2YWwsXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMTU3LVxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9Mjc0ND1pbnQgY2hhbmdlX2h1Z2VfcHVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yNzkwLSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6Mjc5MTppbnQgbW92ZV9wYWdlc19odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kLCBwbWRfdCBkc3RfcG1kdmFsLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMjc5Mi1cXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjX3ZtYSxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmM9MTkzND1zdGF0aWMgc3NpemVfdCBtb3ZlX3BhZ2VzKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTIwMTQtXFx0XFx0ICogYmUgc3RyaWN0LiBJZiBkc3RfcG1kIGNoYW5nZXMgaW50byBUUEggYWZ0ZXIgdGhpcyBjaGVjaywgdGhlXFxubW0vdXNlcmZhdWx0ZmQuYzoyMDE1OlxcdFxcdCAqIG1vdmVfcGFnZXNfaHVnZV9wbWQoKSB3aWxsIGRldGVjdCB0aGUgY2hhbmdlIGFuZCByZXRyeVxcbm1tL3VzZXJmYXVsdGZkLmMtMjAxNi1cXHRcXHQgKiB3aGlsZSBtb3ZlX3BhZ2VzX3B0ZSgpIHdpbGwgZGV0ZWN0IHRoZSBjaGFuZ2UgYW5kIGZhaWwuXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTIwNDUtXFxubW0vdXNlcmZhdWx0ZmQuYzoyMDQ2OlxcdFxcdFxcdGVyciA9IG1vdmVfcGFnZXNfaHVnZV9wbWQobW0sIGRzdF9wbWQsIHNyY19wbWQsXFxubW0vdXNlcmZhdWx0ZmQuYy0yMDQ3LVxcdFxcdFxcdFxcdFxcdFxcdCAgZHN0X3BtZHZhbCwgZHN0X3ZtYSwgc3JjX3ZtYSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTk6MzUuMTk0NzYxMTA3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5MzU0ODA1OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgVGhvdWdodCBQcm9jZXNzIG9uIElkZW50aWZ5aW5nIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGZvciB0aGUgYmVzdCBwbGFjZXMgdG8gZnV6eiBiYXNlZCBvbiB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGdvIGFmdGVyIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYCwgc2luY2UgaXQncyBub24tc3RhdGljIGFuZCBsb29rcyBsaWtlIGEgcG90ZW50aWFsIGVudHJ5IHBvaW50LiBCdXQgd2FpdCwgaXQncyBub3QgZXhwb3J0ZWQsIGV2ZW4gdGhvdWdoIGl0ICppcyogbm9uLXN0YXRpYy4gU28sIHRoYXQncyBzdGlsbCBhIGdvb2QgY2FuZGlkYXRlLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY2FsbCBjaGFpbi5cblxuTmV4dCwgSSBjb25zaWRlcmVkIGB1c2VyZmF1bHRmZF9tb3ZlYCwgYnV0IHF1aWNrbHkgcmVhbGl6ZWQgdGhhdCBpdCdzIHN0YXRpYy4gVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgcHJlZmVycyBub24tc3RhdGljIGVudHJ5IHBvaW50cywgc2luY2UgdGhlIGNvbXBpbGVyIHdvbid0IGlubGluZSB0aGVtLCBnaXZpbmcgdGhlbSBkaXN0aW5jdCBzeW1ib2xzLiBTbywgdGhhdCdzIGxlc3MgaWRlYWwuIEkgd2FzIGdvaW5nIHRvIGluY2x1ZGUgYHVzZXJmYXVsdGZkX2lvY3RsYCwgYHVzZXJmYXVsdGZkX21vdmVgLCBgbW92ZV9wYWdlc19wdGVzYCwgYG1vdmVfcGFnZXNfaHVnZV9wbWRgLCBidXQgSSdtIHJlZmluaW5nIHRoYXQgbm93LlxuXG5SaWdodCwgYHVzZXJmYXVsdGZkX2lvY3RsYCBpcyBhIGZpbGUgb3BlcmF0aW9uLCBzbyBpdCBoYXMgdG8gaGF2ZSBhIGRpc3RpbmN0IGFkZHJlc3MuIFRoZW4sIGB1c2VyZmF1bHRmZF9tb3ZlYCBpcyBjYWxsZWQgZnJvbSBhIHN3aXRjaCBzdGF0ZW1lbnQgd2l0aGluIGB1c2VyZmF1bHRmZF9pb2N0bGAsIHNvIGl0J3MgYSBiaXQgb2YgYSB0b3NzLXVwIHdoZXRoZXIgaXQgZ2V0cyBpbmxpbmVkIG9yIG5vdC4gYG1vdmVfcGFnZXNfaHVnZV9wbWRgIGlzIG5vbi1zdGF0aWMsIHNvIG5vIGlubGluaW5nIHRoZXJlLiBgbW92ZV9wYWdlc19wdGVzYCBpcyBzdGF0aWMsIHNvIGl0J3MgcHJvYmFibHkgaW5saW5lZC5cblxuT2theSwgbGV0J3MgaW5jbHVkZTogYHVzZXJmYXVsdGZkX2lvY3RsYCwgYHVzZXJmYXVsdGZkX21vdmVgLCBhbmQgYG1vdmVfcGFnZXNfaHVnZV9wbWRgLiBIb3dldmVyLCBhZnRlciByZS1ldmFsdWF0aW5nIHRoZSBidWcncyBsb2NhdGlvbiwgdGhlIGJ1ZyBpcyByZWFsbHkgaW4gdGhlIHN0YXRpYyBgbW92ZV9wYWdlc2AgZnVuY3Rpb24gaW4gYG1tL3VzZXJmYXVsdGZkLmNgLiBUaGUgYG1vdmVfcGFnZXNgIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgYFVGRkRJT19NT1ZFYCBpb2N0bC4gVGhlcmVmb3JlIEkgc2hvdWxkIGluY2x1ZGUgYHVzZXJmYXVsdGZkX2lvY3RsYCBhbmQgYHVzZXJmYXVsdGZkX21vdmVgLlxuXG5MZXQncyBkb3VibGUtY2hlY2sgdGhlIHJlYXNvbmluZyBoZXJlLiBUaGUgcGF0Y2ggZml4ZXMgYSBmYWlsdXJlIHRvIHJlc2V0IHRoZSBlcnJvciBjb2RlIGBlcnJgIGFmdGVyIGVuY291bnRlcmluZyBgLUVBR0FJTmAuIElmIHRoZSBlcnJvciBpc24ndCByZXNldCwgdGhlIGxvb3AgY29udGludWVzIHdpdGggdGhlIHNhbWUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMsIGNhdXNpbmcgYW4gaW5maW5pdGUgbG9vcCB3aGVuIGBtb3ZlX3BhZ2VzX3B0ZXNgIChvciBvdGhlciBmdW5jdGlvbnMpIGRvZXNuJ3Qgb3ZlcndyaXRlIHRoZSBlcnJvci4gVGhpcyBpcyBhIHJlYWwgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHVzZXJmYXVsdGZkIGNvZGUsIHNwZWNpZmljYWxseSBpbiB0aGUgYFVGRkRJT19NT1ZFYCBpb2N0bC4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuXG5cbkZpbmFsbHksIHRoZSBjb25maWd1cmF0aW9ucy4gYFVTRVJGQVVMVEZEYCBpcyB0aGUgbWFpbiBvbmUsIGFuZCB0aGF0IGRlcGVuZHMgb24gYE1NVWAsIHNvIHRoYXQncyBnb29kIHRvIGtub3cuIEFuZCB3aGlsZSB0aGlua2luZyBhYm91dCBgbW92ZV9wYWdlc19odWdlX3BtZGAsIEkgaGF2ZSB0byByZW1lbWJlciB0aGF0IGBtbS9odWdlX21lbW9yeS5jYCAod2hlcmUgaXQgbGl2ZXMpIG9ubHkgZ2V0cyBjb21waWxlZCBpZiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBlbmFibGVkLiBUaGF0J3MgYSBnb29kIGRlcGVuZGVuY3kgdG8gY29uc2lkZXIgd2hlbiBzZXR0aW5nIHVwIHRoZSBmdXp6aW5nIGVudmlyb25tZW50LlxuXG5TbywgaW4gdGhlIGVuZCwgaXQncyBgdXNlcmZhdWx0ZmRfaW9jdGxgLCBhbmQgYHVzZXJmYXVsdGZkX21vdmVgIHdpdGggYSBwb3RlbnRpYWwgZm9jdXMgb24gdGhlIGBVRkZESU9fTU9WRWAgcGF0aC4gQW5kIHJlbWVtYmVyIGBVU0VSRkFVTFRGRGAsIGBNTVVgLCBhbmQgcG9zc2libHkgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgZm9yIHRoZSBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTMyNywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1OTo0NS4xMzAyNDUyMjFaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MjgxNjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2VfbWVtb3J5Lm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9MTAwPW9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSArPSBtaWdyYXRlX2RldmljZS5vXFxubW0vTWFrZWZpbGU6MTAxOm9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgKz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cXG5tbS9NYWtlZmlsZS0xMDItb2JqLSQoQ09ORklHX1BBR0VfQ09VTlRFUikgKz0gcGFnZV9jb3VudGVyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTk6NDUuMTk3NTMzNjU3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MzYwMTcwMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBDaGVjayoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQncyBjbGVhciB0aGF0IHRvIG1ha2UgYG1vdmVfcGFnZXNfaHVnZV9wbWRgIHdvcmsgY29ycmVjdGx5LCBJIGFic29sdXRlbHkgbmVlZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGVuYWJsZWQuIE5vIHF1ZXN0aW9uIHRoZXJlLiBTbywgSSdsbCBnbyBhaGVhZCBhbmQgYWRkIHRoYXQgdG8gbXkgYEVuYWJsZUNvbmZpZ3NgIGxpc3QuIE5vdywgb24gdG8gdGhlIG5leHQgcGllY2UuIEknbSB3b25kZXJpbmcgaWYganVzdCBoYXZpbmcgYFVTRVJGQVVMVEZEYCBpcyBzdWZmaWNpZW50IGZvciBgdXNlcmZhdWx0ZmRfaW9jdGxgLiBUaGlua2luZyBpdCB0aHJvdWdoLCB5ZXMsIHRoYXQgc2VlbXMgcmlnaHQsIEkgYmVsaWV2ZSBJIGNhbiByZWx5IG9uIHRoYXQuIEJ1dCwgYmVmb3JlIEkgbW92ZSBvbiwgSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLiBJIHNob3VsZCBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIGRlcGVuZGVuY2llcyBpbiB0aGUgc2FtZSBhcmVhLiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIGBtbS91c2VyZmF1bHRmZC5jYCBhbmQgaXRzIGNvcnJlc3BvbmRpbmcgYG1tL01ha2VmaWxlYC4gVGhhdCBzaG91bGQgcmV2ZWFsIGFueSBvdGhlciBjb25maWcgb3B0aW9ucyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZiBhbmQgc2V0LCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBlbnN1cmUgdGhpcyBhbGwgZnVuY3Rpb25zIGFzIGludGVuZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDc4OCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjU5OjQ5LjEzMzU1NTA1MloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ4MzU0MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXNlcmZhdWx0ZmQub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0xMzA9b2JqLSQoQ09ORklHX0NNQV9TWVNGUykgKz0gY21hX3N5c2ZzLm9cXG5tbS9NYWtlZmlsZToxMzE6b2JqLSQoQ09ORklHX1VTRVJGQVVMVEZEKSArPSB1c2VyZmF1bHRmZC5vXFxubW0vTWFrZWZpbGUtMTMyLW9iai0kKENPTkZJR19JRExFX1BBR0VfVFJBQ0tJTkcpICs9IHBhZ2VfaWRsZS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjU5OjQ5LjE5ODQwMjYwN1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTI4MjczNzM3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYFVTRVJGQVVMVEZEYCBQYXRjaCoqXG5cbk9rYXksIHNvIGBVU0VSRkFVTFRGRGAgaXMgZGVmaW5pdGVseSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZS4gTGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG5NeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGluZGVlZCB3b3J0aCBmdXp6aW5nLiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBsaWVzIHdpdGhpbiB0aGUgYFVGRkRJT19NT1ZFYCBpb2N0bCBoYW5kbGVyIGluIHRoZSBgdXNlcmZhdWx0ZmRgIG1lY2hhbmlzbS4gVGhlIGJ1ZyBzdGVtcyBmcm9tIGEgZmFpbHVyZSB0byByZXNldCB0aGUgYGVycmAgdmFyaWFibGUgdG8gMCBhZnRlciBlbmNvdW50ZXJpbmcgYW4gYC1FQUdBSU5gIGVycm9yIHdpdGhpbiB0aGUgYG1vdmVfcGFnZXNgIGZ1bmN0aW9uLlxuXG5JIHNlZSB0aGF0IGBtb3ZlX3BhZ2VzYCBpcyBsaWtlbHkgdXNpbmcgYG1vdmVfcGFnZXNfcHRlc2AgYXMgd2VsbCwgb3IgYG1vdmVfcGFnZXNfaHVnZV9wbWRgLiBUaGUgcHJpbWFyeSBzeW1ib2xzIEknbGwgZm9jdXMgb24gYXJlIGB1c2VyZmF1bHRmZF9pb2N0bGAsIGB1c2VyZmF1bHRmZF9tb3ZlYCwgYW5kIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYC4gSSBjb25zaWRlcmVkIGBtb3ZlX3BhZ2VzX3B0ZXNgLCBidXQgSSB0aGluayB0aGUgb3RoZXJzIGFyZSBzdWZmaWNpZW50LlxuXG5UaGUgbG9naWMgZmxvdyBpcyB0aGlzOiBpZiBgLUVBR0FJTmAgaXNuJ3QgcmVzZXQsIGFueSBzdWJzZXF1ZW50IHN1Y2Nlc3NmdWwgcGFnZSBtb3ZlIChkb25lLCBmb3IgaW5zdGFuY2UsIGJ5IGBtb3ZlX3BhZ2VzX3B0ZXNgIG9yIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYCkgd2lsbCAqbm90KiBvdmVyd3JpdGUgYGVycmAgKHNpbmNlIHN1Y2Nlc3MgcmV0dXJucyBcdTAwM2U9IDApIGFuZCBgZXJyYCBzdGlja3MgYXQgYC1FQUdBSU5gLiBUaGlzIHRoZW4gY2F1c2VzIHRoZSBsb29wIHRvIHJlLWVudGVyIHRoZSBgaWYgKGVyciA9PSAtRUFHQUlOKSBjb250aW51ZTtgIGJsb2NrLiBUaGlzIHNraXBzIGFkdmFuY2luZyB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMgKGBzcmNfYWRkcmAsIGBkc3RfYWRkcmApLCBsZWFkaW5nIHRvIGEgcmVwZWF0ZWQgbW92ZSBvZiB0aGUgc2FtZSBwYWdlLCByZXN1bHRpbmcgaW4gYW4gaW5maW5pdGUgbG9vcC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmRpdGlvbnMgd2hlcmUgYG1vdmVfcGFnZXNfcHRlc2AgcmV0dXJucyBgLUVBR0FJTmAuIExldCBtZSB0aGluayB0aGlzIHRocm91Z2guLi4gSWYgYG1vdmVfcGFnZXNfcHRlc2AgcmV0dXJucyBhIG5lZ2F0aXZlIHZhbHVlLCB0aGUgb3JpZ2luYWwgYGVycmAgZ2V0cyBvdmVyd3JpdHRlbiwgdGh1cyBzb2x2aW5nIHRoZSBwcm9ibGVtLiBUaGUgaXNzdWUgc3VyZmFjZXMgaWYgYG1vdmVfcGFnZXNfcHRlc2AgcmV0dXJucyBhIG5vbi1uZWdhdGl2ZSB2YWx1ZS4gVGhlIHByb2dyYW0gZW5kcyB1cCByZXRyeWluZyB0aGUgc2FtZSBwYWdlLiBOb3csIGlmIHRoZSByZXRyeSBoYXBwZW5zLCBhbmQgYHBtZF9ub25lKCpzcmNfcG1kKWAgaXMgdHJ1ZSwgb3IgYHB0ZV9ub25lYCBpcyB0cnVlLCB0aGUgZnVuY3Rpb24gd2lsbCBsaWtlbHkgcmV0dXJuIGAtRU5PRU5UYCBpZiBgVUZGRElPX01PVkVfTU9ERV9BTExPV19TUkNfSE9MRVNgIGlzIG5vdCBzZXQuIElmIHNldCwgaXQgbWlnaHQgcmV0dXJuIDAsIGFuZCBsb29wIGluZmluaXRlbHkuIFNvLCB5ZXMsIHRoZSBidWcgaXMgcmVhbC5cblxuSSBhbHNvIGRvdWJsZS1jaGVja2VkIHRoYXQgYHVzZXJmYXVsdGZkX21vdmVgIGlzIHN0YXRpYyB3aXRoaW4gYG1tL3VzZXJmYXVsdGZkLmNgLCBidXQgaXQgaXMgc3RpbGwgYSBrZXkgc3ltYm9sIHRvIHRhcmdldC5cblxuU28sIHN1bW1pbmcgdGhpcyB1cCwgdGhlIGZ1enppbmcgdGFyZ2V0cyBzaG91bGQgYmUgYHVzZXJmYXVsdGZkX2lvY3RsYCwgYHVzZXJmYXVsdGZkX21vdmVgLCBhbmQgYG1vdmVfcGFnZXNfaHVnZV9wbWRgLCBlbmFibGluZyBgVVNFUkZBVUxURkRgIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBJIGNhbiBzZWUgdGhpcyBhcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgdXNlcmZhdWx0ZmQgY29yZSBsb2dpYywgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSwgbWFraW5nIGl0IGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjAyLCJPdXRwdXRUb2tlbnMiOjE3NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwNDowMDowMC40ODExNDI4MDRaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkzNDQ0MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTRVJGQVVMVEZEXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVzZXJmYXVsdGZkX2lvY3RsXCIsXG4gICAgXCJ1c2VyZmF1bHRmZF9tb3ZlXCIsXG4gICAgXCJtb3ZlX3BhZ2VzX2h1Z2VfcG1kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIFVGRkRJT19NT1ZFIGlvY3RsIGhhbmRsZXIgd2hlcmUgYW4gLUVBR0FJTiBlcnJvciB3YXMgbm90IHJlc2V0IHRvIDAgYmVmb3JlIGNvbnRpbnVpbmcgdGhlIGxvb3AuIElmIG5vdCByZXNldCwgYSBzdWJzZXF1ZW50IHN1Y2Nlc3NmdWwgcGFnZSBtb3ZlIHdvdWxkIGxlYXZlIGVyciBhcyAtRUFHQUlOLCBjYXVzaW5nIHRoZSBsb29wIHRvIHNraXAgYWR2YW5jaW5nIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3Nlcy4gVGhpcyByZXN1bHRzIGluIGFuIGluZmluaXRlIGxvb3Agb3IgcmVwZWF0ZWQgYXR0ZW1wdHMgdG8gbW92ZSB0aGUgc2FtZSBwYWdlLiBUaGUgZml4IGVuc3VyZXMgZXJyIGlzIHJlc2V0IHRvIDAsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgdXNlcmZhdWx0ZmQgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNFUkZBVUxURkRcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXNlcmZhdWx0ZmRfaW9jdGxcIixcbiAgICBcInVzZXJmYXVsdGZkX21vdmVcIixcbiAgICBcIm1vdmVfcGFnZXNfaHVnZV9wbWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgVUZGRElPX01PVkUgaW9jdGwgaGFuZGxlciB3aGVyZSBhbiAtRUFHQUlOIGVycm9yIHdhcyBub3QgcmVzZXQgdG8gMCBiZWZvcmUgY29udGludWluZyB0aGUgbG9vcC4gSWYgbm90IHJlc2V0LCBhIHN1YnNlcXVlbnQgc3VjY2Vzc2Z1bCBwYWdlIG1vdmUgd291bGQgbGVhdmUgZXJyIGFzIC1FQUdBSU4sIGNhdXNpbmcgdGhlIGxvb3AgdG8gc2tpcCBhZHZhbmNpbmcgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzc2VzLiBUaGlzIHJlc3VsdHMgaW4gYW4gaW5maW5pdGUgbG9vcCBvciByZXBlYXRlZCBhdHRlbXB0cyB0byBtb3ZlIHRoZSBzYW1lIHBhZ2UuIFRoZSBmaXggZW5zdXJlcyBlcnIgaXMgcmVzZXQgdG8gMCwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSB1c2VyZmF1bHRmZCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDQ6MDA6MDAuNjAwNDk1Mzk1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjgzOTgwMjk5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA0OjAwOjAwLjYwMTExNzM4NloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyNjgzOTE3MzMwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBjb250cm9sIGZsb3cgYnVnIGluIGBtb3ZlX3BhZ2VzKClgIGluIGBtbS91c2VyZmF1bHRmZC5jYC4gUHJpb3IgdG8gdGhlIHBhdGNoLCBpZiBhIHBhZ2UgbW92ZSBvcGVyYXRpb24gcmV0dXJuZWQgYC1FQUdBSU5gLCB0aGUgbG9vcCB3b3VsZCBgY29udGludWVgIGJ1dCBmYWlsIHRvIHJlc2V0IHRoZSBgZXJyYCB2YXJpYWJsZSB0byAwLiBCZWNhdXNlIGBlcnJgIGlzIG5vdCB1bmNvbmRpdGlvbmFsbHkgb3ZlcndyaXR0ZW4gb24gc3VjY2Vzc2Z1bCBwYWdlIG1vdmVzIChlLmcuLCB3aGVuIGBtb3ZlX3BhZ2VzX3B0ZXMoKWAgcmV0dXJucyBhIHBvc2l0aXZlIHN0ZXAgc2l6ZSksIGBlcnJgIHdvdWxkIHJlbWFpbiBgLUVBR0FJTmAuIFRoaXMgY2F1c2VkIHRoZSBsb29wIHRvIGluZmluaXRlbHkgcmV0cnkgdGhlIHNhbWUgYWRkcmVzcyB3aXRob3V0IGFkdmFuY2luZyBgc3JjX2FkZHJgIGFuZCBgZHN0X2FkZHJgLCBsZWFkaW5nIHRvIGEgaGFuZy4gVGhlIHBhdGNoIHNpbXBseSByZXNldHMgYGVyciA9IDBgIGJlZm9yZSBjb250aW51aW5nLCBmaXhpbmcgdGhlIGluZmluaXRlIGxvb3AuXFxuXFxuVGhpcyBidWcgaXMgYSBwdXJlIGNvbnRyb2wgZmxvdyBpc3N1ZSByZXN1bHRpbmcgaW4gYSBoYW5nLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGxlYWsgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIGZ1enppbmcgKHdpdGggS0FTQU4sIExPQ0tERVAsIGFuZCBzb2Z0IGxvY2t1cCBkZXRlY3RvcnMpIGlzIHBlcmZlY3RseSBjYXBhYmxlIG9mIGRldGVjdGluZyBoYW5ncyBhbmQgaW5maW5pdGUgbG9vcHMuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgcGF0Y2ggdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQxYzQ4NmRhOWFjZDRmYTE3YTU2NWJlZWFjNDIyNzhjOWNlNzAzZjFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxOSAwMzo1NzowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3VzZXJmYXVsdGZkLmMgYi9tbS91c2VyZmF1bHRmZC5jXG5pbmRleCBjM2FkZWRhYWY3ZDU0Li5lYzVkNTExYmQxNzkxIDEwMDY0NFxuLS0tIGEvbW0vdXNlcmZhdWx0ZmQuY1xuKysrIGIvbW0vdXNlcmZhdWx0ZmQuY1xuQEAgLTIwODUsOCArMjA4NSwxMCBAQCBzdGF0aWMgc3NpemVfdCBtb3ZlX3BhZ2VzKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsXG4gXHRcdH1cbiBcbiBcdFx0aWYgKGVycikge1xuLVx0XHRcdGlmIChlcnIgPT0gLUVBR0FJTilcbitcdFx0XHRpZiAoZXJyID09IC1FQUdBSU4pIHtcbitcdFx0XHRcdGVyciA9IDA7XG4gXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHR9XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA0OjAwOjAwLjYwMTExODY5NVoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzMwNzc2MDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFN1YnRsZSBCdWcgRml4IGluIGBtb3ZlX3BhZ2VzYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBtb3ZlX3BhZ2VzYCBpbiBgbW0vdXNlcmZhdWx0ZmQuY2AuIFRoZSBjaGFuZ2UgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCDigJMgaXQncyB3cmFwcGluZyBhbiBleGlzdGluZyBgaWZgIHN0YXRlbWVudCB3aXRoIGFuIGFkZGl0aW9uYWwgY3VybHkgYnJhY2UgYW5kIGFkZGluZyBgZXJyID0gMDtgIGluc2lkZSBpdC4gVGhhdCdzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLCBiZWNhdXNlIHRoZSBpbXBhY3Qgb2Ygc2VlbWluZ2x5IHNpbXBsZSBjaGFuZ2VzIGNhbiBzb21ldGltZXMgYmUgcHJvZm91bmQgaW4ga2VybmVsIGNvZGUuXG5cbkJhc2ljYWxseSwgdGhlIG9yaWdpbmFsIGNvZGUgaGFkIGEgYnVnIHdoZXJlIGlmIGBlcnJgIHdhcyBgLUVBR0FJTmAgaW4gdGhlIGBtb3ZlX3BhZ2VzYCBmdW5jdGlvbiwgaXQgd291bGQgY29udGludWUgdGhlIGxvb3AuICpCdXQqLCBjcnVjaWFsIHBvaW50IGhlcmUsIGl0ICpkaWRuJ3QqIHJlc2V0IGBlcnJgIHRvIDAuIFRoaXMgbWVhbnMgdGhhdCBzdWJzZXF1ZW50IGl0ZXJhdGlvbnMgY291bGQgcG90ZW50aWFsbHkgaW5oZXJpdCB0aGlzIGVycm9yIHN0YXR1cywgd2hpY2ggaXMgb2J2aW91c2x5IGEgcHJvYmxlbS4gSSdtIHdvbmRlcmluZyB3aGF0IGlzIGFjdHVhbGx5IGhhbmRsZWQgaWYgYGVycmAgaXMgbm90IHplcm8gYW5kIGlzIHJldHVybmVkIGZyb20gdGhlIGZ1bmN0aW9uLlxuXG5TbywgdGhlIGZpeCBjb3JyZWN0bHkgc2V0cyBgZXJyID0gMGAgYmVmb3JlIHRoZSBgY29udGludWVgLiBUaGUgaW1wbGljYXRpb24gaXMgdGhhdCBhIHRyYW5zaWVudCBgLUVBR0FJTmAgc2hvdWxkbid0IHBlcm1hbmVudGx5IHRhaW50IHRoZSBlcnJvciBzdGF0dXMgb2YgdGhlIG92ZXJhbGwgb3BlcmF0aW9uLiBUaGUgbG9vcCBjb250aW51ZXMsIGhvcGVmdWxseSBldmVudHVhbGx5IHN1Y2NlZWRpbmcuIFJpZ2h0LCBtYWtlcyBzZW5zZS4gVGhpcyBwcmV2ZW50cyB0aGUgZXJyb25lb3VzIHByb3BhZ2F0aW9uIG9mIHRoZSBgLUVBR0FJTmAgZXJyb3IgY29kZS4gSXQncyBhIGNsYXNzaWMgZXhhbXBsZSBvZiBhIHN1YnRsZSBidWcgdGhhdCBjb3VsZCBsZWFkIHRvIGludGVybWl0dGVudCBmYWlsdXJlcywgZXNwZWNpYWxseSBpbiBoaWdoLWNvbmN1cnJlbmN5IG9yIHJlc291cmNlLWNvbnN0cmFpbmVkIHNpdHVhdGlvbnMuIFRoaXMgdHlwZSBvZiBmaXggaXMgZWFzeSB0byBtaXNzLCBidXQgZXNzZW50aWFsIGZvciByb2J1c3Qga2VybmVsIGJlaGF2aW9yLiBJIHNob3VsZCBwcm9iYWJseSBkaXZlIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG1vdmVfcGFnZXNgIHRvIGNvbmZpcm0gdGhlIGVycm9yIGhhbmRsaW5nIHN0cmF0ZWd5IGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGJldHRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk1NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA0OjAwOjA1LjMzMTg5ODMwMVoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY3MDQ3MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW92ZV9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS91c2VyZmF1bHRmZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3VzZXJmYXVsdGZkLmM9MTM4Mj1zdGF0aWMgaW50IG1vdmVfemVyb3BhZ2VfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xNDE0LSAqL1xcbm1tL3VzZXJmYXVsdGZkLmM6MTQxNTpzdGF0aWMgbG9uZyBtb3ZlX3BhZ2VzX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZCxcXG5tbS91c2VyZmF1bHRmZC5jLTE0MTYtXFx0XFx0XFx0ICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmM9MTg1OT1zdGF0aWMgdm9pZCB1ZmZkX21vdmVfdW5sb2NrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMTg2Ny0vKipcXG5tbS91c2VyZmF1bHRmZC5jOjE4Njg6ICogbW92ZV9wYWdlcyAtIG1vdmUgYXJiaXRyYXJ5IGFub255bW91cyBwYWdlcyBvZiBhbiBleGlzdGluZyB2bWFcXG5tbS91c2VyZmF1bHRmZC5jLTE4NjktICogQGN0eDogcG9pbnRlciB0byB0aGUgdXNlcmZhdWx0ZmQgY29udGV4dFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xODc2LSAqXFxubW0vdXNlcmZhdWx0ZmQuYzoxODc3OiAqIG1vdmVfcGFnZXMoKSByZW1hcHMgYXJiaXRyYXJ5IGFub255bW91cyBwYWdlcyBhdG9taWNhbGx5IGluIHplcm9cXG5tbS91c2VyZmF1bHRmZC5jLTE4NzgtICogY29weS4gSXQgb25seSB3b3JrcyBvbiBub24gc2hhcmVkIGFub255bW91cyBwYWdlcyBiZWNhdXNlIHRob3NlIGNhblxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xODg4LSAqIHN0b3JhZ2Ugb3IgYW55IG90aGVyIEkvTyBkZXZpY2UgKE1BRFZfRE9OVEZPUksgaW4gdGhlIHNvdXJjZSB2bWFcXG5tbS91c2VyZmF1bHRmZC5jOjE4ODk6ICogYXZvaWRzIG1vdmVfcGFnZXMoKSB0byBmYWlsIHdpdGggLUVCVVNZIGlmIHRoZSBwcm9jZXNzIGZvcmtzIGJlZm9yZVxcbm1tL3VzZXJmYXVsdGZkLmM6MTg5MDogKiBtb3ZlX3BhZ2VzKCkgaXMgY2FsbGVkKSwgdGhlbiBpdCB3aWxsIGNhbGwgbW92ZV9wYWdlcygpIHRvIG1hcCB0aGVcXG5tbS91c2VyZmF1bHRmZC5jLTE4OTEtICogcGFnZSBpbiB0aGUgZmF1bHRpbmcgYWRkcmVzcyBpbiB0aGUgZGVzdGluYXRpb24gdm1hLlxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTA1LSAqIHRoZSBkZXN0aW5hdGlvbiB2aXJ0dWFsIG1lbW9yeSByYW5nZSBpcyBub3QgYSB3aG9sZSB1bm1hcHBlZCBob2xlLFxcbm1tL3VzZXJmYXVsdGZkLmM6MTkwNjogKiBtb3ZlX3BhZ2VzKCkgd2lsbCBmYWlsIHJlc3BlY3RpdmVseSB3aXRoIC1FTk9FTlQgb3IgLUVFWElTVC4gVGhpc1xcbm1tL3VzZXJmYXVsdGZkLmMtMTkwNy0gKiBwcm92aWRlcyBhIHZlcnkgc3RyaWN0IGJlaGF2aW9yIHRvIGF2b2lkIGFueSBjaGFuY2Ugb2YgbWVtb3J5XFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTE5MTAtICogdGltZSBmb3IgYW55IGdpdmVuIGZhdWx0aW5nIGFkZHJlc3MuIFRoaXMgbWVhbnMgdGhhdCBpZiB0d28gdGhyZWFkc1xcbm1tL3VzZXJmYXVsdGZkLmM6MTkxMTogKiB0cnkgdG8gYm90aCBjYWxsIG1vdmVfcGFnZXMoKSBvbiB0aGUgc2FtZSBkZXN0aW5hdGlvbiBhZGRyZXNzIGF0IHRoZVxcbm1tL3VzZXJmYXVsdGZkLmMtMTkxMi0gKiBzYW1lIHRpbWUsIHRoZSBzZWNvbmQgdGhyZWFkIHdpbGwgZ2V0IGFuIGV4cGxpY2l0IGVycm9yIGZyb20gdGhpc1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTIwLSAqIGFuIGFtb3VudCBvZiBieXRlcyBzdWNjZXNzZnVsbHkgbW92ZWQuIElmIHRoZSByZXR2YWwgcmVwb3J0cyBhXFxubW0vdXNlcmZhdWx0ZmQuYzoxOTIxOiAqIFxcXCJzaG9ydFxcXCIgcmVtYXAsIHRoZSBtb3ZlX3BhZ2VzKCkgY29tbWFuZCBzaG91bGQgYmUgcmVwZWF0ZWQgYnlcXG5tbS91c2VyZmF1bHRmZC5jLTE5MjItICogdXNlcmxhbmQgd2l0aCBzcmMrcmV0dmFsLCBkc3QrcmV2YWwsIGxlbi1yZXR2YWwgaWYgaXQgd2FudHMgdG8ga25vd1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTMzLSAqL1xcbm1tL3VzZXJmYXVsdGZkLmM6MTkzNDpzdGF0aWMgc3NpemVfdCBtb3ZlX3BhZ2VzKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTM1LVxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgc3JjX3N0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbiwgX191NjQgbW9kZSlcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMjAxNC1cXHRcXHQgKiBiZSBzdHJpY3QuIElmIGRzdF9wbWQgY2hhbmdlcyBpbnRvIFRQSCBhZnRlciB0aGlzIGNoZWNrLCB0aGVcXG5tbS91c2VyZmF1bHRmZC5jOjIwMTU6XFx0XFx0ICogbW92ZV9wYWdlc19odWdlX3BtZCgpIHdpbGwgZGV0ZWN0IHRoZSBjaGFuZ2UgYW5kIHJldHJ5XFxubW0vdXNlcmZhdWx0ZmQuYzoyMDE2OlxcdFxcdCAqIHdoaWxlIG1vdmVfcGFnZXNfcHRlKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgZmFpbC5cXG5tbS91c2VyZmF1bHRmZC5jLTIwMTctXFx0XFx0ICovXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTIwNDEtXFx0XFx0XFx0XFx0c3BsaXRfaHVnZV9wbWQoc3JjX3ZtYSwgc3JjX3BtZCwgc3JjX2FkZHIpO1xcbm1tL3VzZXJmYXVsdGZkLmM6MjA0MjpcXHRcXHRcXHRcXHQvKiBUaGUgZm9saW8gd2lsbCBiZSBzcGxpdCBieSBtb3ZlX3BhZ2VzX3B0ZSgpICovXFxubW0vdXNlcmZhdWx0ZmQuYy0yMDQzLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0yMDQ1LVxcbm1tL3VzZXJmYXVsdGZkLmM6MjA0NjpcXHRcXHRcXHRlcnIgPSBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKG1tLCBkc3RfcG1kLCBzcmNfcG1kLFxcbm1tL3VzZXJmYXVsdGZkLmMtMjA0Ny1cXHRcXHRcXHRcXHRcXHRcXHQgIGRzdF9wbWR2YWwsIGRzdF92bWEsIHNyY192bWEsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTIwNjgtXFxubW0vdXNlcmZhdWx0ZmQuYzoyMDY5OlxcdFxcdFxcdHJldCA9IG1vdmVfcGFnZXNfcHRlcyhtbSwgZHN0X3BtZCwgc3JjX3BtZCxcXG5tbS91c2VyZmF1bHRmZC5jLTIwNzAtXFx0XFx0XFx0XFx0XFx0ICAgICAgZHN0X3ZtYSwgc3JjX3ZtYSwgZHN0X2FkZHIsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jPTQyMTY9c3RhdGljIGludCB1c2VyZmF1bHRmZF9tb3ZlKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtNDI1NS1cXHRpZiAobW1nZXRfbm90X3plcm8obW0pKSB7XFxubW0vdXNlcmZhdWx0ZmQuYzo0MjU2OlxcdFxcdHJldCA9IG1vdmVfcGFnZXMoY3R4LCB1ZmZkaW9fbW92ZS5kc3QsIHVmZmRpb19tb3ZlLnNyYyxcXG5tbS91c2VyZmF1bHRmZC5jLTQyNTctXFx0XFx0XFx0XFx0IHVmZmRpb19tb3ZlLmxlbiwgdWZmZGlvX21vdmUubW9kZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA0OjAwOjA1LjM5ODYwOTY3N1oiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzg4NTYwMzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgbW92ZV9wYWdlc2AgaW4gYG1tL3VzZXJmYXVsdGZkLmNgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBtb3ZlX3BhZ2VzYCBpcyBoYW5kbGluZyB0aGluZ3MgaW4gdGhlIGNvbnRleHQgb2YgdXNlcmZhdWx0ZmQuIFRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwgZm9yIGhvdyB3ZSBtYW5hZ2UgcGFnZSBtaWdyYXRpb24gYW5kIHRyYW5zZmVyLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHVzZXItc3BhY2UgbWVtb3J5IGFjY2VzcyBmYXVsdHMuIEkgd2FudCB0byBzZWUgaG93IHRoZSBrZXJuZWwgb3JjaGVzdHJhdGVzIHRoaXMgd2hvbGUgZGFuY2UgYmV0d2VlbiB1c2VyIHNwYWNlIGFuZCBrZXJuZWwgc3BhY2UuIFNwZWNpZmljYWxseSwgSSdtIGludGVyZXN0ZWQgaW4gdGhlIGludGVycGxheSBiZXR3ZWVuIGB1c2VyZmF1bHRmZGAgYW5kIHRoZSBwYWdlIG1pZ3JhdGlvbiBtYWNoaW5lcnkuIEhvdyBkb2VzIGl0IGtub3cgd2hlcmUgcGFnZXMgYXJlLCBhbmQgaG93IGRvZXMgaXQgZGlyZWN0IHRoZW0gd2hlcmUgdGhleSBuZWVkIHRvIGdvPyBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgYSBkZWxpY2F0ZSBiYWxhbmNpbmcgYWN0IGhlcmUsIGVuc3VyaW5nIGRhdGEgaW50ZWdyaXR5IHdoaWxlIG1pbmltaXppbmcgdGhlIHBlcmZvcm1hbmNlIGhpdCBvZiBwYWdlIGZhdWx0cy4gTGV0J3Mgc2VlIGhvdyB0aGV5IGRvIGl0LiBJJ20gbG9va2luZyBmb3IgdGhlIGtleSBsb2NraW5nIHByaW1pdGl2ZXMsIGVycm9yIGhhbmRsaW5nIHBhdGhzLCBhbmQgdGhlIG92ZXJhbGwgbG9naWMgZmxvdy4gVGhpcyBjb3VsZCBnaXZlIG1lIHNvbWUgZ3JlYXQgaW5zaWdodHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3OTIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwNDowMDowOC4xODcxNzQ3NzhaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAwNDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3VzZXJmYXVsdGZkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTkzNCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE5MzQ6XFx0c3RhdGljIHNzaXplX3QgbW92ZV9wYWdlcyhzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsIHVuc2lnbmVkIGxvbmcgZHN0X3N0YXJ0LFxcbjE5MzU6XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBzcmNfc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuLCBfX3U2NCBtb2RlKVxcbjE5MzY6XFx0e1xcbjE5Mzc6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdHgtXFx1MDAzZW1tO1xcbjE5Mzg6XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmNfdm1hLCAqZHN0X3ZtYTtcXG4xOTM5OlxcdFxcdHVuc2lnbmVkIGxvbmcgc3JjX2FkZHIsIGRzdF9hZGRyLCBzcmNfZW5kO1xcbjE5NDA6XFx0XFx0cG1kX3QgKnNyY19wbWQsICpkc3RfcG1kO1xcbjE5NDE6XFx0XFx0bG9uZyBlcnIgPSAtRUlOVkFMO1xcbjE5NDI6XFx0XFx0c3NpemVfdCBtb3ZlZCA9IDA7XFxuMTk0MzpcXHRcXG4xOTQ0OlxcdFxcdC8qIFNhbml0aXplIHRoZSBjb21tYW5kIHBhcmFtZXRlcnMuICovXFxuMTk0NTpcXHRcXHRWTV9XQVJOX09OX09OQ0Uoc3JjX3N0YXJ0IFxcdTAwMjYgflBBR0VfTUFTSyk7XFxuMTk0NjpcXHRcXHRWTV9XQVJOX09OX09OQ0UoZHN0X3N0YXJ0IFxcdTAwMjYgflBBR0VfTUFTSyk7XFxuMTk0NzpcXHRcXHRWTV9XQVJOX09OX09OQ0UobGVuIFxcdTAwMjYgflBBR0VfTUFTSyk7XFxuMTk0ODpcXHRcXG4xOTQ5OlxcdFxcdC8qIERvZXMgdGhlIGFkZHJlc3MgcmFuZ2Ugd3JhcCwgb3IgaXMgdGhlIHNwYW4gemVyby1zaXplZD8gKi9cXG4xOTUwOlxcdFxcdFZNX1dBUk5fT05fT05DRShzcmNfc3RhcnQgKyBsZW4gXFx1MDAzYyBzcmNfc3RhcnQpO1xcbjE5NTE6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKGRzdF9zdGFydCArIGxlbiBcXHUwMDNjIGRzdF9zdGFydCk7XFxuMTk1MjpcXHRcXG4xOTUzOlxcdFxcdGVyciA9IHVmZmRfbW92ZV9sb2NrKG1tLCBkc3Rfc3RhcnQsIHNyY19zdGFydCwgXFx1MDAyNmRzdF92bWEsIFxcdTAwMjZzcmNfdm1hKTtcXG4xOTU0OlxcdFxcdGlmIChlcnIpXFxuMTk1NTpcXHRcXHRcXHRnb3RvIG91dDtcXG4xOTU2OlxcdFxcbjE5NTc6XFx0XFx0LyogUmUtY2hlY2sgYWZ0ZXIgdGFraW5nIG1hcF9jaGFuZ2luZ19sb2NrICovXFxuMTk1ODpcXHRcXHRlcnIgPSAtRUFHQUlOO1xcbjE5NTk6XFx0XFx0ZG93bl9yZWFkKFxcdTAwMjZjdHgtXFx1MDAzZW1hcF9jaGFuZ2luZ19sb2NrKTtcXG4xOTYwOlxcdFxcdGlmIChsaWtlbHkoYXRvbWljX3JlYWQoXFx1MDAyNmN0eC1cXHUwMDNlbW1hcF9jaGFuZ2luZykpKVxcbjE5NjE6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjE5NjI6XFx0XFx0LypcXG4xOTYzOlxcdFxcdCAqIE1ha2Ugc3VyZSB0aGUgdm1hIGlzIG5vdCBzaGFyZWQsIHRoYXQgdGhlIHNyYyBhbmQgZHN0IHJlbWFwXFxuMTk2NDpcXHRcXHQgKiByYW5nZXMgYXJlIGJvdGggdmFsaWQgYW5kIGZ1bGx5IHdpdGhpbiBhIHNpbmdsZSBleGlzdGluZ1xcbjE5NjU6XFx0XFx0ICogdm1hLlxcbjE5NjY6XFx0XFx0ICovXFxuMTk2NzpcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjE5Njg6XFx0XFx0aWYgKHNyY192bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fU0hBUkVEKVxcbjE5Njk6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjE5NzA6XFx0XFx0aWYgKHNyY19zdGFydCArIGxlbiBcXHUwMDNlIHNyY192bWEtXFx1MDAzZXZtX2VuZClcXG4xOTcxOlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xOTcyOlxcdFxcbjE5NzM6XFx0XFx0aWYgKGRzdF92bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fU0hBUkVEKVxcbjE5NzQ6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjE5NzU6XFx0XFx0aWYgKGRzdF9zdGFydCArIGxlbiBcXHUwMDNlIGRzdF92bWEtXFx1MDAzZXZtX2VuZClcXG4xOTc2OlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xOTc3OlxcdFxcbjE5Nzg6XFx0XFx0ZXJyID0gdmFsaWRhdGVfbW92ZV9hcmVhcyhjdHgsIHNyY192bWEsIGRzdF92bWEpO1xcbjE5Nzk6XFx0XFx0aWYgKGVycilcXG4xOTgwOlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xOTgxOlxcdFxcbjE5ODI6XFx0XFx0Zm9yIChzcmNfYWRkciA9IHNyY19zdGFydCwgZHN0X2FkZHIgPSBkc3Rfc3RhcnQsIHNyY19lbmQgPSBzcmNfc3RhcnQgKyBsZW47XFxuMTk4MzpcXHRcXHQgICAgIHNyY19hZGRyIFxcdTAwM2Mgc3JjX2VuZDspIHtcXG4xOTg0OlxcdFxcdFxcdHNwaW5sb2NrX3QgKnB0bDtcXG4xOTg1OlxcdFxcdFxcdHBtZF90IGRzdF9wbWR2YWw7XFxuMTk4NjpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHN0ZXBfc2l6ZTtcXG4xOTg3OlxcdFxcbjE5ODg6XFx0XFx0XFx0LypcXG4xOTg5OlxcdFxcdFxcdCAqIEJlbG93IHdvcmtzIGJlY2F1c2UgYW5vbnltb3VzIGFyZWEgd291bGQgbm90IGhhdmUgYVxcbjE5OTA6XFx0XFx0XFx0ICogdHJhbnNwYXJlbnQgaHVnZSBQVUQuIElmIGZpbGUtYmFja2VkIHN1cHBvcnQgaXMgYWRkZWQsXFxuMTk5MTpcXHRcXHRcXHQgKiB0aGF0IGNhc2Ugd291bGQgbmVlZCB0byBiZSBoYW5kbGVkIGhlcmUuXFxuMTk5MjpcXHRcXHRcXHQgKi9cXG4xOTkzOlxcdFxcdFxcdHNyY19wbWQgPSBtbV9maW5kX3BtZChtbSwgc3JjX2FkZHIpO1xcbjE5OTQ6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFzcmNfcG1kKSkge1xcbjE5OTU6XFx0XFx0XFx0XFx0aWYgKCEobW9kZSBcXHUwMDI2IFVGRkRJT19NT1ZFX01PREVfQUxMT1dfU1JDX0hPTEVTKSkge1xcbjE5OTY6XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVOT0VOVDtcXG4xOTk3OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjE5OTg6XFx0XFx0XFx0XFx0fVxcbjE5OTk6XFx0XFx0XFx0XFx0c3JjX3BtZCA9IG1tX2FsbG9jX3BtZChtbSwgc3JjX2FkZHIpO1xcbjIwMDA6XFx0XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFzcmNfcG1kKSkge1xcbjIwMDE6XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4yMDAyOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjIwMDM6XFx0XFx0XFx0XFx0fVxcbjIwMDQ6XFx0XFx0XFx0fVxcbjIwMDU6XFx0XFx0XFx0ZHN0X3BtZCA9IG1tX2FsbG9jX3BtZChtbSwgZHN0X2FkZHIpO1xcbjIwMDY6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFkc3RfcG1kKSkge1xcbjIwMDc6XFx0XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4yMDA4OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjIwMDk6XFx0XFx0XFx0fVxcbjIwMTA6XFx0XFxuMjAxMTpcXHRcXHRcXHRkc3RfcG1kdmFsID0gcG1kcF9nZXRfbG9ja2xlc3MoZHN0X3BtZCk7XFxuMjAxMjpcXHRcXHRcXHQvKlxcbjIwMTM6XFx0XFx0XFx0ICogSWYgdGhlIGRzdF9wbWQgaXMgbWFwcGVkIGFzIFRIUCBkb24ndCBvdmVycmlkZSBpdCBhbmQganVzdFxcbjIwMTQ6XFx0XFx0XFx0ICogYmUgc3RyaWN0LiBJZiBkc3RfcG1kIGNoYW5nZXMgaW50byBUUEggYWZ0ZXIgdGhpcyBjaGVjaywgdGhlXFxuMjAxNTpcXHRcXHRcXHQgKiBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgcmV0cnlcXG4yMDE2OlxcdFxcdFxcdCAqIHdoaWxlIG1vdmVfcGFnZXNfcHRlKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgZmFpbC5cXG4yMDE3OlxcdFxcdFxcdCAqL1xcbjIwMTg6XFx0XFx0XFx0aWYgKHVubGlrZWx5KHBtZF90cmFuc19odWdlKGRzdF9wbWR2YWwpKSkge1xcbjIwMTk6XFx0XFx0XFx0XFx0ZXJyID0gLUVFWElTVDtcXG4yMDIwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjIwMjE6XFx0XFx0XFx0fVxcbjIwMjI6XFx0XFxuMjAyMzpcXHRcXHRcXHRwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHNyY19wbWQsIHNyY192bWEpO1xcbjIwMjQ6XFx0XFx0XFx0aWYgKHB0bCkge1xcbjIwMjU6XFx0XFx0XFx0XFx0LyogQ2hlY2sgaWYgd2UgY2FuIG1vdmUgdGhlIHBtZCB3aXRob3V0IHNwbGl0dGluZyBpdC4gKi9cXG4yMDI2OlxcdFxcdFxcdFxcdGlmIChtb3ZlX3NwbGl0c19odWdlX3BtZChkc3RfYWRkciwgc3JjX2FkZHIsIHNyY19zdGFydCArIGxlbikgfHxcXG4yMDI3OlxcdFxcdFxcdFxcdCAgICAhcG1kX25vbmUoZHN0X3BtZHZhbCkpIHtcXG4yMDI4OlxcdFxcdFxcdFxcdFxcdC8qIENhbiBiZSBhIG1pZ3JhdGlvbiBlbnRyeSAqL1xcbjIwMjk6XFx0XFx0XFx0XFx0XFx0aWYgKHBtZF9wcmVzZW50KCpzcmNfcG1kKSkge1xcbjIwMzA6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBtZF9mb2xpbygqc3JjX3BtZCk7XFxuMjAzMTpcXHRcXG4yMDMyOlxcdFxcdFxcdFxcdFxcdFxcdGlmICghaXNfaHVnZV96ZXJvX2ZvbGlvKGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbjIwMzM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICFQYWdlQW5vbkV4Y2x1c2l2ZShcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA0OjAwOjA4LjE4NzQ3NzA3OFoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzU5NTAxMjUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBgbW92ZV9wYWdlc2AgYW5kIFVzZXJmYXVsdGZkcyoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBndXRzIG9mIGBtb3ZlX3BhZ2VzYCB3aXRoaW4gdGhlIGBtbS91c2VyZmF1bHRmZC5jYCBmaWxlLiBJJ3ZlIGJlZW4gd29ya2luZyB3aXRoIHVzZXJmYXVsdGZkIGFuZCBpdHMgaW50ZXJhY3Rpb25zIHdpdGggcGFnZSBtaWdyYXRpb24gYW5kIG5vdyBJIHdhbnQgdG8gZ2V0IGEgbW9yZSBjb25jcmV0ZSB1bmRlcnN0YW5kaW5nIG9mIGl0cyBmdW5jdGlvbmFsaXR5LiBXaGF0IHNwZWNpZmljIG51YW5jZXMgYXJlIHRoZXJlIGluIGBtb3ZlX3BhZ2VzYCB3aXRoIHJlc3BlY3QgdG8gdXNlcmZhdWx0ZmQ/IEFyZSB0aGVyZSBhbnkgY2xldmVyIHRyaWNrcyBvciBvcHRpbWlzYXRpb25zPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBwZXJmb3JtYW5jZSBhbmQgY29uY3VycmVuY3ksIGdpdmVuIHRoaXMgaXMgbGlrZWx5IGEgaG90IHBhdGg/IEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIHVzZXJmYXVsdGZkIG1lY2hhbmlzbSBoYW5kbGVzIHBhZ2UgZmF1bHRzIGR1cmluZyB0aGUgbWlncmF0aW9uIHByb2Nlc3MgaXRzZWxmLiBBcmUgdGhlIHBhZ2UgZmF1bHRzIHJlLXRyaWdnZXJlZCBhbmQgaG93IGFyZSB0aGV5IHRyYWNrZWQ/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGluIGRldGFpbCB0byBhc3Nlc3MgaXRzIHN1aXRhYmlsaXR5IGluIG15IGN1cnJlbnQgcHJvamVjdC4gTGV0J3Mgc2VlIGhvdyB0aGUga2VybmVsIGVuZ2luZWVycyBoYW5kbGVkIGFsbCBvZiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzMzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwNDowMDoxMS41NDY5ODIwOVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjgxOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdXNlcmZhdWx0ZmQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDM0LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjAzNDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRzcGluX3VubG9jayhwdGwpO1xcbjIwMzU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVCVVNZO1xcbjIwMzY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjAzNzpcXHRcXHRcXHRcXHRcXHRcXHR9XFxuMjAzODpcXHRcXHRcXHRcXHRcXHR9XFxuMjAzOTpcXHRcXG4yMDQwOlxcdFxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrKHB0bCk7XFxuMjA0MTpcXHRcXHRcXHRcXHRcXHRzcGxpdF9odWdlX3BtZChzcmNfdm1hLCBzcmNfcG1kLCBzcmNfYWRkcik7XFxuMjA0MjpcXHRcXHRcXHRcXHRcXHQvKiBUaGUgZm9saW8gd2lsbCBiZSBzcGxpdCBieSBtb3ZlX3BhZ2VzX3B0ZSgpICovXFxuMjA0MzpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yMDQ0OlxcdFxcdFxcdFxcdH1cXG4yMDQ1OlxcdFxcbjIwNDY6XFx0XFx0XFx0XFx0ZXJyID0gbW92ZV9wYWdlc19odWdlX3BtZChtbSwgZHN0X3BtZCwgc3JjX3BtZCxcXG4yMDQ3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgZHN0X3BtZHZhbCwgZHN0X3ZtYSwgc3JjX3ZtYSxcXG4yMDQ4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgZHN0X2FkZHIsIHNyY19hZGRyKTtcXG4yMDQ5OlxcdFxcdFxcdFxcdHN0ZXBfc2l6ZSA9IEhQQUdFX1BNRF9TSVpFO1xcbjIwNTA6XFx0XFx0XFx0fSBlbHNlIHtcXG4yMDUxOlxcdFxcdFxcdFxcdGxvbmcgcmV0O1xcbjIwNTI6XFx0XFxuMjA1MzpcXHRcXHRcXHRcXHRpZiAocG1kX25vbmUoKnNyY19wbWQpKSB7XFxuMjA1NDpcXHRcXHRcXHRcXHRcXHRpZiAoIShtb2RlIFxcdTAwMjYgVUZGRElPX01PVkVfTU9ERV9BTExPV19TUkNfSE9MRVMpKSB7XFxuMjA1NTpcXHRcXHRcXHRcXHRcXHRcXHRlcnIgPSAtRU5PRU5UO1xcbjIwNTY6XFx0XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjA1NzpcXHRcXHRcXHRcXHRcXHR9XFxuMjA1ODpcXHRcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkoX19wdGVfYWxsb2MobW0sIHNyY19wbWQpKSkge1xcbjIwNTk6XFx0XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4yMDYwOlxcdFxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjIwNjE6XFx0XFx0XFx0XFx0XFx0fVxcbjIwNjI6XFx0XFx0XFx0XFx0fVxcbjIwNjM6XFx0XFxuMjA2NDpcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkocHRlX2FsbG9jKG1tLCBkc3RfcG1kKSkpIHtcXG4yMDY1OlxcdFxcdFxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuMjA2NjpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4yMDY3OlxcdFxcdFxcdFxcdH1cXG4yMDY4OlxcdFxcbjIwNjk6XFx0XFx0XFx0XFx0cmV0ID0gbW92ZV9wYWdlc19wdGVzKG1tLCBkc3RfcG1kLCBzcmNfcG1kLFxcbjIwNzA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgZHN0X3ZtYSwgc3JjX3ZtYSwgZHN0X2FkZHIsXFxuMjA3MTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBzcmNfYWRkciwgc3JjX2VuZCAtIHNyY19hZGRyLCBtb2RlKTtcXG4yMDcyOlxcdFxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjIwNzM6XFx0XFx0XFx0XFx0XFx0ZXJyID0gcmV0O1xcbjIwNzQ6XFx0XFx0XFx0XFx0ZWxzZVxcbjIwNzU6XFx0XFx0XFx0XFx0XFx0c3RlcF9zaXplID0gcmV0O1xcbjIwNzY6XFx0XFx0XFx0fVxcbjIwNzc6XFx0XFxuMjA3ODpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4yMDc5OlxcdFxcbjIwODA6XFx0XFx0XFx0aWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XFxuMjA4MTpcXHRcXHRcXHRcXHQvKiBEbyBub3Qgb3ZlcnJpZGUgYW4gZXJyb3IgKi9cXG4yMDgyOlxcdFxcdFxcdFxcdGlmICghZXJyIHx8IGVyciA9PSAtRUFHQUlOKVxcbjIwODM6XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVJTlRSO1xcbjIwODQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjA4NTpcXHRcXHRcXHR9XFxuMjA4NjpcXHRcXG4yMDg3OlxcdFxcdFxcdGlmIChlcnIpIHtcXG4yMDg4OlxcdFxcdFxcdFxcdGlmIChlcnIgPT0gLUVBR0FJTikge1xcbjIwODk6XFx0XFx0XFx0XFx0XFx0ZXJyID0gMDtcXG4yMDkwOlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjIwOTE6XFx0XFx0XFx0XFx0fVxcbjIwOTI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjA5MzpcXHRcXHRcXHR9XFxuMjA5NDpcXHRcXG4yMDk1OlxcdFxcdFxcdC8qIFByb2NlZWQgdG8gdGhlIG5leHQgcGFnZSAqL1xcbjIwOTY6XFx0XFx0XFx0ZHN0X2FkZHIgKz0gc3RlcF9zaXplO1xcbjIwOTc6XFx0XFx0XFx0c3JjX2FkZHIgKz0gc3RlcF9zaXplO1xcbjIwOTg6XFx0XFx0XFx0bW92ZWQgKz0gc3RlcF9zaXplO1xcbjIwOTk6XFx0XFx0fVxcbjIxMDA6XFx0XFxuMjEwMTpcXHRvdXRfdW5sb2NrOlxcbjIxMDI6XFx0XFx0dXBfcmVhZChcXHUwMDI2Y3R4LVxcdTAwM2VtYXBfY2hhbmdpbmdfbG9jayk7XFxuMjEwMzpcXHRcXHR1ZmZkX21vdmVfdW5sb2NrKGRzdF92bWEsIHNyY192bWEpO1xcbjIxMDQ6XFx0b3V0OlxcbjIxMDU6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKG1vdmVkIFxcdTAwM2MgMCk7XFxuMjEwNjpcXHRcXHRWTV9XQVJOX09OX09OQ0UoZXJyIFxcdTAwM2UgMCk7XFxuMjEwNzpcXHRcXHRWTV9XQVJOX09OX09OQ0UoIW1vdmVkIFxcdTAwMjZcXHUwMDI2ICFlcnIpO1xcbjIxMDg6XFx0XFx0cmV0dXJuIG1vdmVkID8gbW92ZWQgOiBlcnI7XFxuMjEwOTpcXHR9XFxuMjExMDpcXHRcXG4yMTExOlxcdHN0YXRpYyBib29sIHZtYV9jYW5fdXNlcmZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bV9mbGFnc190IHZtX2ZsYWdzLFxcbjIxMTI6XFx0XFx0XFx0ICAgICAgIGJvb2wgd3BfYXN5bmMpXFxuMjExMzpcXHR7XFxuMjExNDpcXHRcXHRjb25zdCBzdHJ1Y3Qgdm1fdWZmZF9vcHMgKm9wcyA9IHZtYV91ZmZkX29wcyh2bWEpO1xcbjIxMTU6XFx0XFxuMjExNjpcXHRcXHRpZiAodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IChWTV9EUk9QUEFCTEUgfCBWTV9TSEFET1dfU1RBQ0spKVxcbjIxMTc6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjIxMTg6XFx0XFxuMjExOTpcXHRcXHRpZiAoIWlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpIFxcdTAwMjZcXHUwMDI2ICh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fU1BFQ0lBTCkpXFxuMjEyMDpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMjEyMTpcXHRcXG4yMTIyOlxcdFxcdHZtX2ZsYWdzIFxcdTAwMjY9IF9fVk1fVUZGRF9GTEFHUztcXG4yMTIzOlxcdFxcbjIxMjQ6XFx0XFx0LypcXG4yMTI1OlxcdFxcdCAqIElmIFdQIGlzIHRoZSBvbmx5IG1vZGUgZW5hYmxlZCBhbmQgY29udGV4dCBpcyB3cCBhc3luYywgYWxsb3cgYW55XFxuMjEyNjpcXHRcXHQgKiBtZW1vcnkgdHlwZS5cXG4yMTI3OlxcdFxcdCAqL1xcbjIxMjg6XFx0XFx0aWYgKHdwX2FzeW5jIFxcdTAwMjZcXHUwMDI2ICh2bV9mbGFncyA9PSBWTV9VRkZEX1dQKSlcXG4yMTI5OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjIxMzA6XFx0XFxuMjEzMTpcXHRcXHQvKiBGb3IgYW55IG90aGVyIG1vZGUgcmVqZWN0IFZNQXMgdGhhdCBkb24ndCBpbXBsZW1lbnQgdm1fdWZmZF9vcHMgKi9cXG4yMTMyOlxcdFxcdGlmICghb3BzKVxcbjIxMzM6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwNDowMDoxMS41NDc0NTM5OFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTg5Mjc4ODA3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBtb3ZlX3BhZ2VzYCBCdWcgYW5kIEl0cyBGaXgqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlzc2VjdGluZyB0aGlzIHBhdGNoIGFuZCBJIHRoaW5rIEkndmUgZ290IGEgZ29vZCBoYW5kbGUgb24gd2hhdCdzIGdvaW5nIG9uIGhlcmUuIFRoZSBjb3JlIGlzc3VlIGlzIHdpdGggaG93IHRoZSBgZXJyYCB2YXJpYWJsZSBpcyBoYW5kbGVkIHdpdGhpbiB0aGlzIGxvb3AuIEluaXRpYWxseSwgSSB3YXMgYSBiaXQgY29uZnVzZWQgYnkgdGhlIGxvZ2ljLCBlc3BlY2lhbGx5IHdpdGggdGhhdCBgcmV0dXJuIG1vdmVkID8gbW92ZWQgOiBlcnI7YCBhdCB0aGUgZW5kLiBCdXQgbm93IGl0IG1ha2VzIHNlbnNlLiBJdCdzIGVzc2VudGlhbGx5IHJldHVybmluZyBlaXRoZXIgdGhlIG51bWJlciBvZiBieXRlcyBtb3ZlZCBvciB0aGUgZXJyb3IgY29kZS4gVGhlIHByb2JsZW0gYXJpc2VzIHdoZW4gd2UgZ2V0IGFuIGAtRUFHQUlOYCBlcnJvci5cblxuSSBzZWUgaXQgbm93OiB0aGUgYnVnIHN0ZW1zIGZyb20gYGVycmAgYmVpbmcgc2V0IHRvIGAtRUFHQUlOYCBpbnNpZGUgdGhlIGxvb3AsIGFuZCB0aGVuIGBjb250aW51ZWAgaXMgY2FsbGVkICp3aXRob3V0KiByZXNldHRpbmcgYGVycmAgdG8gMC4gVGhpcyBpcyB0aGUgY3J1Y2lhbCBiaXQuIElmLCBzYXksIGBtb3ZlX3BhZ2VzX3B0ZXNgIHJldHVybnMgYC1FQUdBSU5gLCB0aGUgY29kZSBjb250aW51ZXMgdGhlIGxvb3AuIFRoZW4sIHRoZSBzdWJzZXF1ZW50IGV4ZWN1dGlvbiBpbnNpZGUgdGhlIGxvb3AgKmRvZXNuJ3QqIHJlc2V0IGBlcnJgIGF0IHRoZSBzdGFydCBvZiB0aGUgbmV4dCBpdGVyYXRpb24hIFRoaXMgaXMgdGhlIHNtb2tpbmcgZ3VuIVxuXG5Fc3NlbnRpYWxseSwgaWYgYSByZXRyeSBpcyBuZWVkZWQgYmVjYXVzZSBvZiBgLUVBR0FJTmAsIHRoZSBsb29wIGRvZXMgKm5vdCogYWR2YW5jZSBgZHN0X2FkZHJgIGFuZCBgc3JjX2FkZHJgLiBJbnN0ZWFkLCBpdCByZXRyaWVzIHRoZSBzYW1lIG1lbW9yeSBsb2NhdGlvbnMgcmVwZWF0ZWRseS4gU2luY2UgYGVycmAgaXMgKm5vdCogcmVzZXQsIHRoZSBjaGVjayBgaWYgKGVycilgIHdpbGwgc3RpbGwgYmUgYHRydWVgLiBTaW5jZSBgZXJyYCByZW1haW5zIGAtRUFHQUlOYCwgaXQgY29udGludWVzLiBBbmQgYmVjYXVzZSB0aGUgYWRkcmVzc2VzIGRvbid0IGFkdmFuY2UsIGl0IGJlY29tZXMgYW4gaW5maW5pdGUgbG9vcCEgVGhhdCdzIGl0IVxuXG5TbywgdGhlIGZpeCBpcyBzdHJhaWdodGZvcndhcmQ6IGFkZGluZyBgZXJyID0gMDtgIGJlZm9yZSB0aGUgYGNvbnRpbnVlYCBzdGF0ZW1lbnQuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBsb29wIHJldHJpZXMgY29ycmVjdGx5LCByZXNldHRpbmcgdGhlIGVycm9yIGNvZGUgdG8gemVybyB3aGVuIGAtRUFHQUlOYCBpcyBlbmNvdW50ZXJlZCwgYW5kICp0aGVuKiB0aGUgYHNyY19hZGRyYCBhbmQgYGRzdF9hZGRyYCB3aWxsIGJlIGFkdmFuY2VkLlxuXG5Ob3csIGEgcXVpY2sgc2lkZS1ub3RlIHRvIG1ha2Ugc3VyZSBpdCdzIG5vdCBhIEtNU0FOIGlzc3VlIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkuIGBlcnJgIGFuZCBgc3RlcF9zaXplYCBhcmUgbG9jYWwgdmFyaWFibGVzLiBUaGVyZSdzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gVGhpcyBpc24ndCBhYm91dCBLTVNBTjsgaXQncyBhIHB1cmUgY29udHJvbC1mbG93IGJ1ZyB0aGF0IGNhbiBiZSBmb3VuZCB3aXRoIHJlZ3VsYXIgZnV6emluZyAoZS5nLiwgS0FTQU4sIExPQ0tERVAsIHNvZnQgbG9ja3VwKS4gSXQncyBhIGhhbmcuIFRoZSBmaXggaXMgYSBjb250cm9sIGZsb3cgY2hhbmdlLiBOZWVkc0tNU0FOID0gZmFsc2UuXG5cbkluIGEgbnV0c2hlbGwsIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgaGFuZyBvciBpbmZpbml0ZSBsb29wIGNvbmRpdGlvbiBpbiB0aGUgYG1vdmVfcGFnZXMoKWAgZnVuY3Rpb24gd2l0aGluIGBtbS91c2VyZmF1bHRmZC5jYC4gVGhlIGJ1ZyBvY2N1cnMgd2hlbiBhbiBvcGVyYXRpb24gZmFpbHMgd2l0aCBgLUVBR0FJTmAuIEFmdGVyIHRoYXQsIHRoZSBsb29wIGZhaWxzIHRvIHJlc2V0IGBlcnJgIHRvIDAsIGNhdXNpbmcgaXQgdG8gZW5kbGVzc2x5IHJldHJ5IHRoZSBzYW1lIGFkZHJlc3Nlcywgd2l0aG91dCBhZHZhbmNpbmcgYHNyY19hZGRyYCBvciBgZHN0X2FkZHJgLiBUaGUgZml4IHJlc2V0cyB0aGUgZXJyIGJlZm9yZSBjb250aW51aW5nLiBUaGlzIGZpeCBpcyBub3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSwgb25seSBjb250cm9sIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczOTUsIk91dHB1dFRva2VucyI6MjU0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM0MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA0OjAwOjI3LjQ0MDI0NTIyWiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGNvbnRyb2wgZmxvdyBidWcgaW4gYG1vdmVfcGFnZXMoKWAgaW4gYG1tL3VzZXJmYXVsdGZkLmNgLiBQcmlvciB0byB0aGUgcGF0Y2gsIGlmIGEgcGFnZSBtb3ZlIG9wZXJhdGlvbiByZXR1cm5lZCBgLUVBR0FJTmAsIHRoZSBsb29wIHdvdWxkIGBjb250aW51ZWAgYnV0IGZhaWwgdG8gcmVzZXQgdGhlIGBlcnJgIHZhcmlhYmxlIHRvIDAuIEJlY2F1c2UgYGVycmAgaXMgbm90IHVuY29uZGl0aW9uYWxseSBvdmVyd3JpdHRlbiBvbiBzdWNjZXNzZnVsIHBhZ2UgbW92ZXMgKGUuZy4sIHdoZW4gYG1vdmVfcGFnZXNfcHRlcygpYCByZXR1cm5zIGEgcG9zaXRpdmUgc3RlcCBzaXplKSwgYGVycmAgd291bGQgcmVtYWluIGAtRUFHQUlOYC4gVGhpcyBjYXVzZWQgdGhlIGxvb3AgdG8gaW5maW5pdGVseSByZXRyeSB0aGUgc2FtZSBhZGRyZXNzIHdpdGhvdXQgYWR2YW5jaW5nIGBzcmNfYWRkcmAgYW5kIGBkc3RfYWRkcmAsIGxlYWRpbmcgdG8gYSBoYW5nLiBUaGUgcGF0Y2ggc2ltcGx5IHJlc2V0cyBgZXJyID0gMGAgYmVmb3JlIGNvbnRpbnVpbmcsIGZpeGluZyB0aGUgaW5maW5pdGUgbG9vcC5cXG5cXG5UaGlzIGJ1ZyBpcyBhIHB1cmUgY29udHJvbCBmbG93IGlzc3VlIHJlc3VsdGluZyBpbiBhIGhhbmcuIEl0IGRvZXMgbm90IGludm9sdmUgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgbGVhayB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgZnV6emluZyAod2l0aCBLQVNBTiwgTE9DS0RFUCwgYW5kIHNvZnQgbG9ja3VwIGRldGVjdG9ycykgaXMgcGVyZmVjdGx5IGNhcGFibGUgb2YgZGV0ZWN0aW5nIGhhbmdzIGFuZCBpbmZpbml0ZSBsb29wcy4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzayBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBwYXRjaCB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBjb250cm9sIGZsb3cgYnVnIGluIGBtb3ZlX3BhZ2VzKClgIGluIGBtbS91c2VyZmF1bHRmZC5jYC4gUHJpb3IgdG8gdGhlIHBhdGNoLCBpZiBhIHBhZ2UgbW92ZSBvcGVyYXRpb24gcmV0dXJuZWQgYC1FQUdBSU5gLCB0aGUgbG9vcCB3b3VsZCBgY29udGludWVgIGJ1dCBmYWlsIHRvIHJlc2V0IHRoZSBgZXJyYCB2YXJpYWJsZSB0byAwLiBCZWNhdXNlIGBlcnJgIGlzIG5vdCB1bmNvbmRpdGlvbmFsbHkgb3ZlcndyaXR0ZW4gb24gc3VjY2Vzc2Z1bCBwYWdlIG1vdmVzIChlLmcuLCB3aGVuIGBtb3ZlX3BhZ2VzX3B0ZXMoKWAgcmV0dXJucyBhIHBvc2l0aXZlIHN0ZXAgc2l6ZSksIGBlcnJgIHdvdWxkIHJlbWFpbiBgLUVBR0FJTmAuIFRoaXMgY2F1c2VkIHRoZSBsb29wIHRvIGluZmluaXRlbHkgcmV0cnkgdGhlIHNhbWUgYWRkcmVzcyB3aXRob3V0IGFkdmFuY2luZyBgc3JjX2FkZHJgIGFuZCBgZHN0X2FkZHJgLCBsZWFkaW5nIHRvIGEgaGFuZy4gVGhlIHBhdGNoIHNpbXBseSByZXNldHMgYGVyciA9IDBgIGJlZm9yZSBjb250aW51aW5nLCBmaXhpbmcgdGhlIGluZmluaXRlIGxvb3AuXFxuXFxuVGhpcyBidWcgaXMgYSBwdXJlIGNvbnRyb2wgZmxvdyBpc3N1ZSByZXN1bHRpbmcgaW4gYSBoYW5nLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGxlYWsgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIGZ1enppbmcgKHdpdGggS0FTQU4sIExPQ0tERVAsIGFuZCBzb2Z0IGxvY2t1cCBkZXRlY3RvcnMpIGlzIHBlcmZlY3RseSBjYXBhYmxlIG9mIGRldGVjdGluZyBoYW5ncyBhbmQgaW5maW5pdGUgbG9vcHMuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgcGF0Y2ggdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzpx96[1] Phase: Succeeded StartedAt: 2026-08-19 04:00:39 +0000 UTC FinishedAt: 2026-08-19 04:00:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzpx96[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-19 04:00:39 +0000 UTC FinishedAt: 2026-08-19 04:00:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzpx96[2] Phase: Succeeded StartedAt: 2026-08-19 04:00:39 +0000 UTC FinishedAt: 2026-08-19 07:51:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzpx96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","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":["userfaultfd_ioctl","userfaultfd_move","move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"6ed49760-aed3-4f4d-87cb-53e2a51703be","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-19 04:00:39 +0000 UTC FinishedAt: 2026-08-19 07:51:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","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":["userfaultfd_ioctl","userfaultfd_move","move_pages_huge_pmd"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"6ed49760-aed3-4f4d-87cb-53e2a51703be","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-workflowzpx96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","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":["userfaultfd_ioctl","userfaultfd_move","move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"6ed49760-aed3-4f4d-87cb-53e2a51703be","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-19 04:00:39 +0000 UTC FinishedAt: 2026-08-19 04:00:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzpx96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","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":["userfaultfd_ioctl","userfaultfd_move","move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"6ed49760-aed3-4f4d-87cb-53e2a51703be","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-19 04:00:39 +0000 UTC FinishedAt: 2026-08-19 04:00:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","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-workflowzpx96/series-workflowzpx96-convert-artifact-1338086875/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzpx96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","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":["userfaultfd_ioctl","userfaultfd_move","move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"6ed49760-aed3-4f4d-87cb-53e2a51703be","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-19 04:00:50 +0000 UTC FinishedAt: 2026-08-19 04:22:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzpx96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","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":["userfaultfd_ioctl","userfaultfd_move","move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"6ed49760-aed3-4f4d-87cb-53e2a51703be","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-19 04:00:50 +0000 UTC FinishedAt: 2026-08-19 04:22:12 +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:*6a560202-9c47-4797-9680-0dadbc611ddb,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-workflowzpx96/series-workflowzpx96-convert-artifact-1338086875/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": "a6d5db06-36a3-4ece-a1ae-8ba59049e294", "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-workflowzpx96/series-workflowzpx96-build-action-2510902041/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzpx96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","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":["userfaultfd_ioctl","userfaultfd_move","move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"6ed49760-aed3-4f4d-87cb-53e2a51703be","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-19 04:00:50 +0000 UTC FinishedAt: 2026-08-19 04:22:02 +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:*6a560202-9c47-4797-9680-0dadbc611ddb,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-workflowzpx96/series-workflowzpx96-convert-artifact-1338086875/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": "a6d5db06-36a3-4ece-a1ae-8ba59049e294", "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-workflowzpx96/series-workflowzpx96-build-action-2510902041/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzpx96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","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":["userfaultfd_ioctl","userfaultfd_move","move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"6ed49760-aed3-4f4d-87cb-53e2a51703be","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-19 04:22:12 +0000 UTC FinishedAt: 2026-08-19 04:22:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzpx96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","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":["userfaultfd_ioctl","userfaultfd_move","move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"6ed49760-aed3-4f4d-87cb-53e2a51703be","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-19 04:22:12 +0000 UTC FinishedAt: 2026-08-19 04:22:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzpx96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","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":["userfaultfd_ioctl","userfaultfd_move","move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"6ed49760-aed3-4f4d-87cb-53e2a51703be","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-19 04:22:12 +0000 UTC FinishedAt: 2026-08-19 04:22:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzpx96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","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":["userfaultfd_ioctl","userfaultfd_move","move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"6ed49760-aed3-4f4d-87cb-53e2a51703be","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-19 04:22:12 +0000 UTC FinishedAt: 2026-08-19 04:22:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"6ed49760-aed3-4f4d-87cb-53e2a51703be","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-workflowzpx96/series-workflowzpx96-convert-artifact-1150143794/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzpx96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","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":["userfaultfd_ioctl","userfaultfd_move","move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"6ed49760-aed3-4f4d-87cb-53e2a51703be","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-19 04:22:22 +0000 UTC FinishedAt: 2026-08-19 04:24:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzpx96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","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":["userfaultfd_ioctl","userfaultfd_move","move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"6ed49760-aed3-4f4d-87cb-53e2a51703be","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-19 04:22:22 +0000 UTC FinishedAt: 2026-08-19 04:24:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a6d5db06-36a3-4ece-a1ae-8ba59049e294,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-workflowzpx96/series-workflowzpx96-build-action-2510902041/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-workflowzpx96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","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":["userfaultfd_ioctl","userfaultfd_move","move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"6ed49760-aed3-4f4d-87cb-53e2a51703be","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-19 04:24:13 +0000 UTC FinishedAt: 2026-08-19 04:24:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzpx96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","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":["userfaultfd_ioctl","userfaultfd_move","move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"6ed49760-aed3-4f4d-87cb-53e2a51703be","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-19 04:24:13 +0000 UTC FinishedAt: 2026-08-19 04:24:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzpx96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","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":["userfaultfd_ioctl","userfaultfd_move","move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"6ed49760-aed3-4f4d-87cb-53e2a51703be","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-19 04:24:13 +0000 UTC FinishedAt: 2026-08-19 04:45:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzpx96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","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":["userfaultfd_ioctl","userfaultfd_move","move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"6ed49760-aed3-4f4d-87cb-53e2a51703be","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-19 04:24:13 +0000 UTC FinishedAt: 2026-08-19 04:45:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6a560202-9c47-4797-9680-0dadbc611ddb,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-workflowzpx96/series-workflowzpx96-convert-artifact-1150143794/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": "7a23ddb9-5fc5-454a-90e3-39f5bee7b714", "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-workflowzpx96/series-workflowzpx96-build-action-1791672006/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzpx96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","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":["userfaultfd_ioctl","userfaultfd_move","move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"6ed49760-aed3-4f4d-87cb-53e2a51703be","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-19 04:24:13 +0000 UTC FinishedAt: 2026-08-19 04:45:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6a560202-9c47-4797-9680-0dadbc611ddb,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-workflowzpx96/series-workflowzpx96-convert-artifact-1150143794/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": "7a23ddb9-5fc5-454a-90e3-39f5bee7b714", "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-workflowzpx96/series-workflowzpx96-build-action-1791672006/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzpx96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","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":["userfaultfd_ioctl","userfaultfd_move","move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"6ed49760-aed3-4f4d-87cb-53e2a51703be","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-19 04:45:54 +0000 UTC FinishedAt: 2026-08-19 04:45:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzpx96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","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":["userfaultfd_ioctl","userfaultfd_move","move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"6ed49760-aed3-4f4d-87cb-53e2a51703be","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-19 04:45:54 +0000 UTC FinishedAt: 2026-08-19 04:45:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzpx96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","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":["userfaultfd_ioctl","userfaultfd_move","move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"6ed49760-aed3-4f4d-87cb-53e2a51703be","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-19 04:45:54 +0000 UTC FinishedAt: 2026-08-19 04:47:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzpx96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","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":["userfaultfd_ioctl","userfaultfd_move","move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"6ed49760-aed3-4f4d-87cb-53e2a51703be","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-19 04:45:54 +0000 UTC FinishedAt: 2026-08-19 04:47:41 +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:*7a23ddb9-5fc5-454a-90e3-39f5bee7b714,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-workflowzpx96/series-workflowzpx96-build-action-1791672006/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-workflowzpx96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","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":["userfaultfd_ioctl","userfaultfd_move","move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"6ed49760-aed3-4f4d-87cb-53e2a51703be","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-19 04:47:51 +0000 UTC FinishedAt: 2026-08-19 07:51:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzpx96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","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":["userfaultfd_ioctl","userfaultfd_move","move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"6ed49760-aed3-4f4d-87cb-53e2a51703be","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-19 04:47:51 +0000 UTC FinishedAt: 2026-08-19 07:51:56 +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":["userfaultfd_ioctl","userfaultfd_move","move_pages_huge_pmd"],"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:*a6d5db06-36a3-4ece-a1ae-8ba59049e294,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7a23ddb9-5fc5-454a-90e3-39f5bee7b714,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-workflowzpx96/series-workflowzpx96-build-action-2510902041/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-workflowzpx96/series-workflowzpx96-build-action-1791672006/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzpx96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","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":["userfaultfd_ioctl","userfaultfd_move","move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"6ed49760-aed3-4f4d-87cb-53e2a51703be","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-19 04:47:51 +0000 UTC FinishedAt: 2026-08-19 04:48:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzpx96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","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":["userfaultfd_ioctl","userfaultfd_move","move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"6ed49760-aed3-4f4d-87cb-53e2a51703be","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-19 04:47:51 +0000 UTC FinishedAt: 2026-08-19 04:47:55 +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":["userfaultfd_ioctl","userfaultfd_move","move_pages_huge_pmd"],"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-workflowzpx96/series-workflowzpx96-convert-artifact-4003081095/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzpx96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","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":["userfaultfd_ioctl","userfaultfd_move","move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"6ed49760-aed3-4f4d-87cb-53e2a51703be","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-19 04:47:51 +0000 UTC FinishedAt: 2026-08-19 04:47:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzpx96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","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":["userfaultfd_ioctl","userfaultfd_move","move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"6ed49760-aed3-4f4d-87cb-53e2a51703be","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-19 04:47:51 +0000 UTC FinishedAt: 2026-08-19 04:47:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzpx96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","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":["userfaultfd_ioctl","userfaultfd_move","move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"6ed49760-aed3-4f4d-87cb-53e2a51703be","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-19 04:47:51 +0000 UTC FinishedAt: 2026-08-19 04:47:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzpx96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","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":["userfaultfd_ioctl","userfaultfd_move","move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"6ed49760-aed3-4f4d-87cb-53e2a51703be","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-19 04:48:01 +0000 UTC FinishedAt: 2026-08-19 07:51:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzpx96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","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":["userfaultfd_ioctl","userfaultfd_move","move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"6ed49760-aed3-4f4d-87cb-53e2a51703be","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-19 04:48:01 +0000 UTC FinishedAt: 2026-08-19 07:51:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a6d5db06-36a3-4ece-a1ae-8ba59049e294,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7a23ddb9-5fc5-454a-90e3-39f5bee7b714,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-workflowzpx96/series-workflowzpx96-build-action-2510902041/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-workflowzpx96/series-workflowzpx96-build-action-1791672006/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-workflowzpx96/series-workflowzpx96-convert-artifact-4003081095/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,}