Name: series-workflow7ls28 Phase: Succeeded StartedAt: 2026-09-13 10:31:37 +0000 UTC FinishedAt: 2026-09-13 14:30:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ls28[0] Phase: Succeeded StartedAt: 2026-09-13 10:31:37 +0000 UTC FinishedAt: 2026-09-13 10:35:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ls28[0].run-triage Phase: Succeeded StartedAt: 2026-09-13 10:31:37 +0000 UTC FinishedAt: 2026-09-13 10:35:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "78445023439506ebd83b86d40b1e428a3b309d4a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "78445023439506ebd83b86d40b1e428a3b309d4a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP" ], "series_id": "b9623615-727d-4fa4-b655-609aab1c4c99" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mptcp_recvmsg" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "78445023439506ebd83b86d40b1e428a3b309d4a", "base_tree": "axboe" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXB0Y3BfcmVjdm1zZyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmV0dXJuIHZhbHVlIGJ1ZyBpbiBtcHRjcF9yZWN2bXNnKCkgd2hlcmUgYW4gZXJyb3IgcmV0dXJuZWQgYnkgc2tfd2FpdF9kYXRhKCkgd2FzIGFzc2lnbmVkIHRvIHRoZSBpbm5lci1zY29wZWQgdmFyaWFibGUgJiMzOTtlcnImIzM5OyBpbnN0ZWFkIG9mICYjMzk7Y29waWVkJiMzOTssIGNhdXNpbmcgbXB0Y3BfcmVjdm1zZygpIHRvIHJldHVybiAwIGluc3RlYWQgb2YgdGhlIG5lZ2F0aXZlIGVycm9yIGNvZGUgd2hlbiBubyBkYXRhIGhhZCBiZWVuIGNvcGllZCB5ZXQuXG5cbkJvdGggJiMzOTtlcnImIzM5OyBhbmQgJiMzOTtjb3BpZWQmIzM5OyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgc2NhbGFyIHZhcmlhYmxlcyAoY29waWVkIGlzIGluaXRpYWxpemVkIHRvIDAsIGFuZCBlcnIgcmVjZWl2ZXMgdGhlIHJldHVybiBjb2RlIGZyb20gc2tfd2FpdF9kYXRhKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlciBhY2Nlc3Nlcy4gQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBlcnJvciBoYW5kbGluZyBpbiBtcHRjcF9yZWN2bXNnKCkgYnkgYXNzaWduaW5nIHRoZSByZXR1cm4gdmFsdWUgb2Ygc2tfd2FpdF9kYXRhKCkgdG8gJiMzOTtjb3BpZWQmIzM5OyBpbnN0ZWFkIG9mICYjMzk7ZXJyJiMzOTssIGVuc3VyaW5nIG5lZ2F0aXZlIGVycm9yIGNvZGVzIGFyZSBwcm9wZXJseSByZXR1cm5lZCB3aGVuIG5vIGRhdGEgaGFzIGJlZW4gcmVhZC4gVGhpcyBjaGFuZ2VzIGNvbnRyb2wgZmxvdyBhbmQgcmV0dXJuIHZhbHVlcyBpbiByZWFjaGFibGUgTVBUQ1Agc29ja2V0IHJlY2VpdmUgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDZiNTIzODI0ZTI4MTRlMzI3MDk5OWM1NjEzNTZiOWZlNTM3MTlhYTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCAxMyAxMDozMzozOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXG5pbmRleCAwMDk4ZTI4MzA5MzE4Li44ZGMyNWVmMTU0MmM1IDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXG5AQCAtMjQ1OSw3ICYjNDM7MjQ1OSw3IEBAIHN0YXRpYyBpbnQgbXB0Y3BfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbiBcdFx0bXB0Y3BfY2xlYW51cF9yYnVmKG1zaywgY29waWVkKTtcbiBcdFx0ZXJyID0gc2tfd2FpdF9kYXRhKHNrLCBcdTAwMjZ0aW1lbywgbGFzdCk7XG4gXHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbi1cdFx0XHRlcnIgPSBjb3BpZWQgPyA6IGVycjtcbiYjNDM7XHRcdFx0Y29waWVkID0gY29waWVkID8gOiBlcnI7XG4gXHRcdFx0Z290byBvdXRfZXJyO1xuIFx0XHR9XG4gXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TVBUQ1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttcHRjcF9yZWN2bXNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGVycm9yIGhhbmRsaW5nIGluIG1wdGNwX3JlY3Ztc2coKSBieSBhc3NpZ25pbmcgdGhlIHJldHVybiB2YWx1ZSBvZiBza193YWl0X2RhdGEoKSB0byAmIzM5O2NvcGllZCYjMzk7IGluc3RlYWQgb2YgJiMzOTtlcnImIzM5OywgZW5zdXJpbmcgbmVnYXRpdmUgZXJyb3IgY29kZXMgYXJlIHByb3Blcmx5IHJldHVybmVkIHdoZW4gbm8gZGF0YSBoYXMgYmVlbiByZWFkLiBUaGlzIGNoYW5nZXMgY29udHJvbCBmbG93IGFuZCByZXR1cm4gdmFsdWVzIGluIHJlYWNoYWJsZSBNUFRDUCBzb2NrZXQgcmVjZWl2ZSBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmI1MjM4MjRlMjgxNGUzMjcwOTk5YzU2MTM1NmI5ZmU1MzcxOWFhNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDEzIDEwOjMzOjM5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuYwppbmRleCAwMDk4ZTI4MzA5MzE4Li44ZGMyNWVmMTU0MmM1IDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuYwpAQCAtMjQ1OSw3ICYjNDM7MjQ1OSw3IEBAIHN0YXRpYyBpbnQgbXB0Y3BfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbiwKIAkJbXB0Y3BfY2xlYW51cF9yYnVmKG1zaywgY29waWVkKTsKIAkJZXJyID0gc2tfd2FpdF9kYXRhKHNrLCAmYW1wO3RpbWVvLCBsYXN0KTsKIAkJaWYgKGVyciAmbHQ7IDApIHsKLQkJCWVyciA9IGNvcGllZCA/IDogZXJyOwomIzQzOwkJCWNvcGllZCA9IGNvcGllZCA/IDogZXJyOwogCQkJZ290byBvdXRfZXJyOwogCQl9CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODc1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGlzIE1QVENQIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gVGhlIGRpZmYgaXRzZWxmIGlzIHByZXR0eSBjb25jaXNlLCB3aGljaCBpcyBhbHdheXMgYSBnb29kIHN0YXJ0LiBGcm9tIHRoZSBjb250ZXh0LCBpdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBpbiBgbmV0L21wdGNwL3Byb3RvY29sLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgbXB0Y3BfcmVjdm1zZ2AgZnVuY3Rpb24uIFRoZSBrZXkgbGluZSBzZWVtcyB0byBiZSB3aGVyZSB0aGV5JiMzOTtyZSBoYW5kbGluZyBlcnJvcnMgYW5kIHRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGR1cmluZyBhIHJlY2VpdmUgb3BlcmF0aW9uLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGludGVudCBiZWhpbmQgY2hhbmdpbmcgYGVyciA9IGNvcGllZCA/IDogZXJyO2AgdG8gYGNvcGllZCA9IGNvcGllZCA/IDogZXJyO2AuIEVzc2VudGlhbGx5LCB0aGUgbG9naWMgaXMgaGFuZGxpbmcgYSBwb3RlbnRpYWwgZXJyb3IgZHVyaW5nIHJlY2VpdmUgb24gYW4gTVBUQ1Agc29ja2V0IGFuZCBkZWFsaW5nIHdpdGggYSBwYXJ0aWFsIHJlYWQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoeSB0aGV5JiMzOTt2ZSBzd2l0Y2hlZCBob3cgdGhlIGVycm9yIGlzIGhhbmRsZWQgaW4gdGhpcyBzcGVjaWZpYyBjYXNlLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBjb25kaXRpb25hbCBhc3NpZ25tZW50LgoKSSYjMzk7bSB0aGlua2luZyB0aGlzIGxpa2VseSBoYXMgaW1wbGljYXRpb25zIGZvciBob3cgYGNvcGllZGAgaXMgYmVpbmcgdXNlZCBkb3duc3RyZWFtLiBJcyB0aGlzIG5vdyB0aGUgKm9ubHkqIHBsYWNlIGBjb3BpZWRgIGNvdWxkIGJlIHNldD8gT3IgYW0gSSBtaXNzaW5nIHNvbWUgc3VidGxldHkgYWJvdXQgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgYW5kIHRoZSBlcnJvciBwcm9wYWdhdGlvbiBpbiB0aGUgb3JpZ2luYWwgY29kZT8gVGhpcyBmZWVscyBsaWtlIGl0IG1pZ2h0IGFmZmVjdCBob3cgcGFydGlhbCByZWFkcyBhcmUgcmVwb3J0ZWQgb3IgaG93IHRoZSBzb2NrZXQgc3RhdGUgaXMgbWFpbnRhaW5lZCBpbiBlcnJvciBzY2VuYXJpb3MuCgpCZWZvcmUgSSBjYW4gZ2l2ZSBpdCBhIGZ1bGwgcmV2aWV3LCBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGhvdyB0aGlzIGNoYW5nZSBhZmZlY3RzIHRoZSBvdmVyYWxsIGVycm9yIGhhbmRsaW5nIGxvZ2ljIGFuZCBob3cgdGhlIGBjb3BpZWRgIHZhcmlhYmxlIGlzIHN1YnNlcXVlbnRseSB1c2VkLiBUaGUgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgaW1wcm92ZW1lbnQsIGEgYnVnIGZpeCwgb3IgYSBzdWJ0bGUgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucyByZWxhdGVkIHRvIGRhdGEgY29ycnVwdGlvbiwgdW5leHBlY3RlZCBiZWhhdmlvciBkdXJpbmcgbmV0d29yayBpc3N1ZXMsIG9yIGEgY2hhbmdlIGluIGV4cGVjdGVkIGJlaGF2aW9yIHRvIHVzZXJzcGFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wcm90b2NvbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQ0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNDQwOlx0XHRcdFx0XHRicmVhaztcbjI0NDE6XHRcbjI0NDI6XHRcdFx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0NMT1NFKSB7XG4yNDQzOlx0XHRcdFx0XHRjb3BpZWQgPSAtRU5PVENPTk47XG4yNDQ0Olx0XHRcdFx0XHRicmVhaztcbjI0NDU6XHRcdFx0XHR9XG4yNDQ2Olx0XG4yNDQ3Olx0XHRcdFx0aWYgKCF0aW1lbykge1xuMjQ0ODpcdFx0XHRcdFx0Y29waWVkID0gLUVBR0FJTjtcbjI0NDk6XHRcdFx0XHRcdGJyZWFrO1xuMjQ1MDpcdFx0XHRcdH1cbjI0NTE6XHRcbjI0NTI6XHRcdFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcbjI0NTM6XHRcdFx0XHRcdGNvcGllZCA9IHNvY2tfaW50cl9lcnJubyh0aW1lbyk7XG4yNDU0Olx0XHRcdFx0XHRicmVhaztcbjI0NTU6XHRcdFx0XHR9XG4yNDU2Olx0XHRcdH1cbjI0NTc6XHRcbjI0NTg6XHRcdFx0cHJfZGVidWcoXCYjMzQ7YmxvY2sgdGltZW91dCAlbGRcXG5cJiMzNDssIHRpbWVvKTtcbjI0NTk6XHRcdFx0bXB0Y3BfY2xlYW51cF9yYnVmKG1zaywgY29waWVkKTtcbjI0NjA6XHRcdFx0ZXJyID0gc2tfd2FpdF9kYXRhKHNrLCBcdTAwMjZ0aW1lbywgbGFzdCk7XG4yNDYxOlx0XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbjI0NjI6XHRcdFx0XHRjb3BpZWQgPSBjb3BpZWQgPyA6IGVycjtcbjI0NjM6XHRcdFx0XHRnb3RvIG91dF9lcnI7XG4yNDY0Olx0XHRcdH1cbjI0NjU6XHRcdH1cbjI0NjY6XHRcbjI0Njc6XHRcdG1wdGNwX2NsZWFudXBfcmJ1Zihtc2ssIGNvcGllZCk7XG4yNDY4Olx0XG4yNDY5Olx0b3V0X2VycjpcbjI0NzA6XHRcdGlmIChjbXNnX2ZsYWdzIFx1MDAyNlx1MDAyNiBjb3BpZWQgXHUwMDNlPSAwKSB7XG4yNDcxOlx0XHRcdGlmIChjbXNnX2ZsYWdzIFx1MDAyNiBNUFRDUF9DTVNHX1RTKVxuMjQ3MjpcdFx0XHRcdHRjcF9yZWN2X3RpbWVzdGFtcChtc2csIHNrLCBcdTAwMjZ0c3MpO1xuMjQ3MzpcdFxuMjQ3NDpcdFx0XHRpZiAoY21zZ19mbGFncyBcdTAwMjYgTVBUQ1BfQ01TR19JTlEpIHtcbjI0NzU6XHRcdFx0XHR1bnNpZ25lZCBpbnQgaW5xID0gbXB0Y3BfaW5xX2hpbnQoc2spO1xuMjQ3NjpcdFxuMjQ3NzpcdFx0XHRcdHB1dF9jbXNnKG1zZywgU09MX1RDUCwgVENQX0NNX0lOUSwgc2l6ZW9mKGlucSksIFx1MDAyNmlucSk7XG4yNDc4Olx0XHRcdH1cbjI0Nzk6XHRcdH1cbjI0ODA6XHRcbjI0ODE6XHRcdHByX2RlYnVnKFwmIzM0O21zaz0lcCByeCBxdWV1ZSBlbXB0eT0lZCBjb3BpZWQ9JWRcXG5cJiMzNDssXG4yNDgyOlx0XHRcdCBtc2ssIHNrYl9xdWV1ZV9lbXB0eShcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlKSwgY29waWVkKTtcbjI0ODM6XHRcbjI0ODQ6XHRcdHJlbGVhc2Vfc29jayhzayk7XG4yNDg1Olx0XHRyZXR1cm4gY29waWVkO1xuMjQ4NjpcdH1cbjI0ODc6XHRcbjI0ODg6XHRzdGF0aWMgdm9pZCBtcHRjcF9yZXRyYW5zbWl0X3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuMjQ4OTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTk2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1QVENQIFZ1bG5lcmFiaWxpdHkgQW5hbHlzaXMqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gc2VlaW5nOiB0aGVyZSYjMzk7cyBhIHN1YnRsZSBidXQgc2lnbmlmaWNhbnQgYnVnIGZpeCBpbiB0aGUgTVBUQ1AgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbXB0Y3BfcmVjdm1zZygpYC4gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgbGluZTogYGVyciA9IHNrX3dhaXRfZGF0YShzaywgJmFtcDt0aW1lbywgbGFzdCk7YCBhbmQgaG93IHRoZSBlcnJvciBoYW5kbGluZyBpbnRlcmFjdHMgd2l0aCB0aGUgcmV0dXJuIHZhbHVlLiBQcmV2aW91c2x5LCB0aGV5IGhhZCB0aGlzIGNvZGU6CgpgYGBjCmlmIChlcnIgJmx0OyAwKSB7CiAgICBlcnIgPSBjb3BpZWQgPyA6IGVycjsKICAgIGdvdG8gb3V0X2VycjsKfQpgYGAKCkFuZCBgb3V0X2VycjpgIHRoZW4gZG9lczoKCmBgYGMKb3V0X2VycjoKCWlmIChjbXNnX2ZsYWdzICZhbXA7JmFtcDsgY29waWVkICZndDs9IDApIHsKLi4uCglyZWxlYXNlX3NvY2soc2spOwoJcmV0dXJuIGNvcGllZDsKYGBgCgpUaGUgcHJvYmxlbSBpcywgdGhlIGNvZGUgd2FzIGFzc2lnbmluZyBgZXJyYCBidXQgKipub3QqKiB1c2luZyBpdC4gVGhlIGZ1bmN0aW9uICphbHdheXMqIHJldHVybnMgYGNvcGllZGAuIElmIGBjb3BpZWRgIHN0YXJ0ZWQgYXQgemVybyBhbmQgYHNrX3dhaXRfZGF0YWAgcmV0dXJuZWQgYW4gZXJyb3IgKGxpa2UgYC1FQUdBSU5gIG9yIGAtRUlOVFJgKSwgdGhlIGNvZGUgaW5jb3JyZWN0bHkgcmV0dXJuZWQgemVybyEgTm93LCB0aGUgZml4IGBjb3BpZWQgPSBjb3BpZWQgPyA6IGVycjtgIGlzIGNvcnJlY3QsIGJlY2F1c2UgaXQgYXNzaWducyBgZXJyYCB0byBgY29waWVkYCBpZiBgY29waWVkYCBpcyB6ZXJvIGFuZCBtYWtlcyBgY29waWVkYCB0byBiZSB0aGUgYWN0dWFsIGVycm9yIGNvZGUuIEJ1dCBpZiBgY29waWVkYCB3YXMgYWxyZWFkeSBncmVhdGVyIHRoYW4gemVybywgaXQga2VlcHMgdGhhdCB2YWx1ZS4KCkkgY2FuIGNvbmZpcm0gdGhhdCB0aGUgdnVsbmVyYWJpbGl0eSBpcyBub3cgZml4ZWQuCgpUaGUga2V5IHRoaW5nIGlzLCB0aGlzIGZpeCBtZWFucyBlcnJvcnMgYXJlIG5vdyBwcm9wZXJseSBwcm9wYWdhdGVkLCBpbnN0ZWFkIG9mIHJldHVybmluZyBhbiBpbmNvcnJlY3QgdmFsdWUuIFRoaXMgaXMgY3JpdGljYWwgYmVjYXVzZSBgbXB0Y3BfcmVjdm1zZygpYCBpcyBwYXJ0IG9mIHRoZSBNUFRDUCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiwgYW5kIHRoYXQgbWVhbnMgaXQmIzM5O3MgYSB2dWxuZXJhYmlsaXR5IEkgY291bGQgcG90ZW50aWFsbHkgZXhwbG9pdC4KClRoZSBnb29kIG5ld3MgaXMsIE1QVENQIGlzIHJlYWNoYWJsZSB0aHJvdWdoIHN0YW5kYXJkIHNvY2tldCBjYWxscyBsaWtlIGBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIElQUFJPVE9fTVBUQ1ApYCBvciBgc29ja2V0KEFGX0lORVQ2LCBTT0NLX1NUUkVBTSwgSVBQUk9UT19NUFRDUClgLiBJdCYjMzk7cyBmdWxseSB2aXJ0dWFsaXplZCB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCBuZXR3b3JraW5nIHN0YWNrLgoKTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGNvbmZpZ3VyYXRpb25zIG5lZWRlZCwgSSYjMzk7bGwgZ28gY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgTVBUQ1AgcmVxdWlyZW1lbnRzLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1QVENQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9LY29uZmlnLTEtXG5uZXQvbXB0Y3AvS2NvbmZpZzoyOmNvbmZpZyBNUFRDUFxubmV0L21wdGNwL0tjb25maWctMy1cdGJvb2wgXCYjMzQ7TVBUQ1A6IE11bHRpcGF0aCBUQ1BcJiMzNDtcbi0tXG5uZXQvbXB0Y3AvS2NvbmZpZz0xNj1jb25maWcgSU5FVF9NUFRDUF9ESUFHXG4tLVxubmV0L21wdGNwL0tjb25maWctMTktXG5uZXQvbXB0Y3AvS2NvbmZpZzoyMDpjb25maWcgTVBUQ1BfSVBWNlxubmV0L21wdGNwL0tjb25maWctMjEtXHRib29sIFwmIzM0O01QVENQOiBJUHY2IHN1cHBvcnQgZm9yIE11bHRpcGF0aCBUQ1BcJiMzNDtcbi0tXG5uZXQvbXB0Y3AvS2NvbmZpZy0yNC1cbm5ldC9tcHRjcC9LY29uZmlnOjI1OmNvbmZpZyBNUFRDUF9LVU5JVF9URVNUXG5uZXQvbXB0Y3AvS2NvbmZpZy0yNi1cdHRyaXN0YXRlIFwmIzM0O1RoaXMgYnVpbGRzIHRoZSBNUFRDUCBLVW5pdCB0ZXN0c1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM4MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBNUFRDUCBLZXJuZWwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBuZXQvbXB0Y3AvS2NvbmZpZ2AuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBmb3IgTXVsdGlQYXRoIFRDUCBpbiB0aGUga2VybmVsLiBJJiMzOTttIGFzc3VtaW5nIGl0JiMzOTtzIHN0cnVjdHVyZWQgaW4gdGhlIHN0YW5kYXJkIEtjb25maWcgZm9ybWF0LCBzbyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZToKCiogICAqKmBjb25maWdgIHN0YXRlbWVudHM6KiogVGhlc2UgYXJlIHRoZSBjb3JlIG9wdGlvbnMgdGhlbXNlbHZlcy4gSSB3YW50IHRvIHNlZSBhIGNsZWFyIGxpc3QuCiogICAqKmBkZXBlbmRzIG9uYCBjbGF1c2VzOioqIENydWNpYWwuIFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IElzIE1QVENQJiMzOTtzIGZ1bmN0aW9uYWxpdHkgY29udGluZ2VudCBvbiBvdGhlciBuZXR3b3JraW5nIGZlYXR1cmVzIGJlaW5nIGVuYWJsZWQ/IEFyZSB0aGVyZSBzcGVjaWZpYyBrZXJuZWwgbW9kdWxlcyBvciBhcmNoaXRlY3R1cmVzIHRoYXQgYXJlIHJlcXVpcmVkPyBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhvc2UgZGVwZW5kZW5jaWVzIHRvIHRyb3VibGVzaG9vdCBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBjb25mbGljdHMuIEkgd2FudCB0byBzZWUgaWYgdGhlIGRlcGVuZGVuY2llcyBhcmUgc2FuZSwgb3IgaWYgdGhlcmUmIzM5O3MgYW55IHN1cnByaXNpbmcgcmVxdWlyZW1lbnQgSSB3b3VsZG4mIzM5O3QgZXhwZWN0LgoqICAgKipgYm9vbGAsIGB0cmlzdGF0ZWAsIGBzdHJpbmdgLCBgaW50YCBkZWZpbml0aW9uczoqKiBUaGlzIHRlbGxzIG1lIHRoZSB0eXBlIG9mIHRoZSBvcHRpb24uIEkgd2FudCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIGFsbG93YWJsZSB2YWx1ZXMgZm9yIGVhY2ggb3B0aW9uIGFyZSwgaW5jbHVkaW5nIGRlZmF1bHRzLgoqICAgKipgaGVscGAgc2VjdGlvbnM6KiogVGhlc2UgYXJlIGVzc2VudGlhbC4gSSYjMzk7bSBleHBlY3RpbmcgY29uY2lzZSwgaW5mb3JtYXRpdmUgZGVzY3JpcHRpb25zIG9mIGVhY2ggb3B0aW9uJiMzOTtzIHB1cnBvc2UuIEkgZG9uJiMzOTt0IG5lZWQgYSB0dXRvcmlhbCwgYnV0IEkgbmVlZCBlbm91Z2ggY29udGV4dCB0byB1bmRlcnN0YW5kIHRoZSBwcmFjdGljYWwgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBhIGdpdmVuIGZlYXR1cmUuIEFyZSB0aGVyZSBzZWN1cml0eSBjb25zaWRlcmF0aW9ucz8gUGVyZm9ybWFuY2UgdHJhZGUtb2Zmcz8KKiAgICoqYHNlbGVjdGAgc3RhdGVtZW50czoqKiBBbnkgb3B0aW9ucyB0aGF0IGFyZSBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgKHNlbGVjdGVkKSBieSBvdGhlcnM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB0cmFuc2l0aXZlIGNsb3N1cmUgb2YgdGhvc2Ugc2VsZWN0aW9ucy4KKiAgICoqYGRlZmF1bHRgIHZhbHVlczoqKiBBcmUgdGhlcmUgc2Vuc2libGUgZGVmYXVsdHMsIG9yIGRvIEkgbmVlZCB0byBleHBsaWNpdGx5IHNldCB0aGluZ3M/IEkgbmVlZCB0byBjaGVjayBmb3IgYW55IGNvbmZpZ3VyYXRpb25zIHRoYXQgZGV2aWF0ZSBmcm9tIGJlc3QgcHJhY3RpY2VzLgoqICAgKipDb25kaXRpb25hbCBibG9ja3M6KiogSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBwbGF0Zm9ybS1zcGVjaWZpYyBvciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uZmlndXJhdGlvbnMuIFRoZSBwcmVzZW5jZSBvZiBjb25kaXRpb25hbHMgaXMgcXVpdGUgY29tbW9uIGluIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZW5hYmxlZCBmb3IgbXkgcGxhdGZvcm0uCiogICAqKkNvbW1lbnRzOioqIEhvcGVmdWxseSwgdGhlcmUgYXJlIHNvbWUgd2VsbC1wbGFjZWQgY29tbWVudHMuCiogICAqKldhcm5pbmdzL0Vycm9yczoqKiBJZiB0aGVyZSBhcmUgYW55LCBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoZXkmIzM5O3JlIHNldC4KSSYjMzk7bGwgYWxzbyBrZWVwIGFuIGV5ZSBvdXQgZm9yIGFueSB1bnVzdWFsIG9yIHZlbmRvci1zcGVjaWZpYyBvcHRpb25zIHRoYXQgbWF5IGJlIGluY2x1ZGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciB1c2UsIGFuZCBtYWtlIHN1cmUgdGhhdCBhbnkgY3VzdG9tIGV4dGVuc2lvbnMgZG9uJiMzOTt0IGNvbmZsaWN0IHdpdGggbW9yZSBzdGFuZGFyZCBjb25maWd1cmF0aW9ucy4KQmFzaWNhbGx5LCBteSBnb2FsIGlzIHRvIGJ1aWxkIGEgY29tcGxldGUsIG1lbnRhbCBtb2RlbCBvZiB0aGUgTVBUQ1AgY29uZmlndXJhdGlvbiBzcGFjZSwgc28gSSBjYW4gY29uZmlkZW50bHkgZW5hYmxlLCBkaXNhYmxlLCBhbmQgdHVuZSBpdCBmb3IgbXkgc3BlY2lmaWMgdXNlIGNhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbXB0Y3AvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdFxuICAgMjpcdGNvbmZpZyBNUFRDUFxuICAgMzpcdFx0Ym9vbCBcJiMzNDtNUFRDUDogTXVsdGlwYXRoIFRDUFwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA1Olx0XHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcbiAgIDY6XHRcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxuICAgNzpcdFx0c2VsZWN0IENSWVBUT19MSUJfVVRJTFNcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgTXVsdGlwYXRoIFRDUCAoTVBUQ1ApIGNvbm5lY3Rpb25zIHNlbmQgYW5kIHJlY2VpdmUgZGF0YSBvdmVyIG11bHRpcGxlXG4gIDEwOlx0XHQgIHN1YmZsb3dzIGluIG9yZGVyIHRvIHV0aWxpemUgbXVsdGlwbGUgbmV0d29yayBwYXRocy4gRWFjaCBzdWJmbG93XG4gIDExOlx0XHQgIHVzZXMgdGhlIFRDUCBwcm90b2NvbCwgYW5kIFRDUCBvcHRpb25zIGNhcnJ5IGhlYWRlciBpbmZvcm1hdGlvbiBmb3JcbiAgMTI6XHRcdCAgTVBUQ1AuXG4gIDEzOlx0XG4gIDE0Olx0aWYgTVBUQ1BcbiAgMTU6XHRcbiAgMTY6XHRjb25maWcgSU5FVF9NUFRDUF9ESUFHXG4gIDE3Olx0XHRkZXBlbmRzIG9uIElORVRfRElBR1xuICAxODpcdFx0ZGVmX3RyaXN0YXRlIElORVRfRElBR1xuICAxOTpcdFxuICAyMDpcdGNvbmZpZyBNUFRDUF9JUFY2XG4gIDIxOlx0XHRib29sIFwmIzM0O01QVENQOiBJUHY2IHN1cHBvcnQgZm9yIE11bHRpcGF0aCBUQ1BcJiMzNDtcbiAgMjI6XHRcdGRlcGVuZHMgb24gSVBWNj15XG4gIDIzOlx0XHRkZWZhdWx0IHlcbiAgMjQ6XHRcbiAgMjU6XHRjb25maWcgTVBUQ1BfS1VOSVRfVEVTVFxuICAyNjpcdFx0dHJpc3RhdGUgXCYjMzQ7VGhpcyBidWlsZHMgdGhlIE1QVENQIEtVbml0IHRlc3RzXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgMjc6XHRcdGRlcGVuZHMgb24gS1VOSVRcbiAgMjg6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDI5Olx0XHRoZWxwXG4gIDMwOlx0XHQgIEN1cnJlbnRseSBjb3ZlcnMgdGhlIE1QVENQIGNyeXB0byBhbmQgdG9rZW4gaGVscGVycy5cbiAgMzE6XHRcdCAgT25seSB1c2VmdWwgZm9yIGtlcm5lbCBkZXZzIHJ1bm5pbmcgS1VuaXQgdGVzdCBoYXJuZXNzIGFuZCBhcmUgbm90XG4gIDMyOlx0XHQgIGZvciBpbmNsdXNpb24gaW50byBhIHByb2R1Y3Rpb24gYnVpbGQuXG4gIDMzOlx0XG4gIDM0Olx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwgcGxlYXNlIHJlZmVyXG4gIDM1Olx0XHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uIGluIERvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0Ly5cbiAgMzY6XHRcbiAgMzc6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMzg6XHRcbiAgMzk6XHRlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0NzQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIE1QVENQIFNvdXJjZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYHByb3RvY29sLmNgIGlzIGNvbXBpbGVkIHdpdGhpbiB0aGUgTVBUQ1AgZnJhbWV3b3JrLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGBuZXQvbXB0Y3AvTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBidWlsZCBpbnN0cnVjdGlvbnMgYXJlIG1vc3QgbGlrZWx5IGRlZmluZWQuIFRoZSBNYWtlZmlsZSBzaG91bGQgY2xlYXJseSBzcGVjaWZ5IHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciBkZXBlbmRlbmNpZXMgYXJlIHJlcXVpcmVkIHRvIGluY2x1ZGUgYHByb3RvY29sLmNgIGluIHRoZSBmaW5hbCBidWlsZC4gVGltZSB0byBjb25maXJtIHRoZSBidWlsZCBkZXBlbmRlbmNpZXMuIEkgd2lsbCBtYWtlIHN1cmUgdGhlIGNvbXBpbGF0aW9uIGNvbW1hbmQgZm9yIGBwcm90b2NvbC5jYCBpcyBjbGVhcmx5IHZpc2libGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21wdGNwL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdG9iai0kKENPTkZJR19NUFRDUCkgJiM0Mzs9IG1wdGNwLm9cbiAgIDM6XHRcbiAgIDQ6XHRtcHRjcC15IDo9IHByb3RvY29sLm8gc3ViZmxvdy5vIG9wdGlvbnMubyB0b2tlbi5vIGNyeXB0by5vIGN0cmwubyBwbS5vIGRpYWcubyBcXFxuICAgNTpcdFx0ICAgbWliLm8gcG1fbmV0bGluay5vIHNvY2tvcHQubyBwbV91c2Vyc3BhY2UubyBmYXN0b3Blbi5vIHNjaGVkLm8gXFxcbiAgIDY6XHRcdCAgIG1wdGNwX3BtX2dlbi5vIHBtX2tlcm5lbC5vXG4gICA3Olx0XG4gICA4Olx0b2JqLSQoQ09ORklHX1NZTl9DT09LSUVTKSAmIzQzOz0gc3luY29va2llcy5vXG4gICA5Olx0b2JqLSQoQ09ORklHX0lORVRfTVBUQ1BfRElBRykgJiM0Mzs9IG1wdGNwX2RpYWcub1xuICAxMDpcdFxuICAxMTpcdG1wdGNwX2NyeXB0b190ZXN0LW9ianMgOj0gY3J5cHRvX3Rlc3Qub1xuICAxMjpcdG1wdGNwX3Rva2VuX3Rlc3Qtb2JqcyA6PSB0b2tlbl90ZXN0Lm9cbiAgMTM6XHRvYmotJChDT05GSUdfTVBUQ1BfS1VOSVRfVEVTVCkgJiM0Mzs9IG1wdGNwX2NyeXB0b190ZXN0Lm8gbXB0Y3BfdG9rZW5fdGVzdC5vXG4gIDE0Olx0XG4gIDE1Olx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk2NgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1QVENQIFJlY2VpdmUgTWVzc2FnZSBGdW5jdGlvbioqCgpPa2F5LCBzbyBgcHJvdG9jb2wub2AgZ2V0cyBjb21waWxlZCBvbmx5IHdoZW4gTVBUQ1AgaXMgZW5hYmxlZCwgaW5kaWNhdGVkIGJ5IGBDT05GSUdfTVBUQ1A9eWAsIGFuZCB0aGF0JiMzOTtzIGRlcGVuZGVudCBvbiBgSU5FVGAuIEdvdCBpdC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIE1QVENQIHJlY2VpdmUgbWVzc2FnZSBmdW5jdGlvbiwgYG1wdGNwX3JlY3Ztc2dgLCB3b3Jrcy4gTGV0JiMzOTtzIHNlZS4uLiBJcyBpdCBzdGF0aWM/IFllcywgdGhlIGRlZmluaXRpb24gc2hvd3MgaXQmIzM5O3MgYHN0YXRpYyBpbnQgbXB0Y3BfcmVjdm1zZyguLi4pYC4gVGhhdCBsaW1pdHMgaXRzIHNjb3BlLCB3aGljaCBpcyB0eXBpY2FsIGZvciBpbnRlcm5hbCBmdW5jdGlvbnMuCgpOZXh0LCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBtcHRjcF9yZWN2bXNnYCBpcyBhY3R1YWxseSBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIHByb3RvY29sIG9wZXJhdGlvbnMsIGkuZS4sIGlzIGl0IGluIHRoZSBzeW1ib2wgdGFibGUgc29tZWhvdz8gSXMgaXQgY2FsbGFibGUgdmlhIGBwcm90b19vcHNgPyBUaGF0JiMzOTtzIHdoYXQgSSByZWFsbHkgbmVlZCB0byBhc2NlcnRhaW4uIFRpbWUgdG8gY2hlY2sgaXRzIHVzYWdlIHdpdGhpbiBgbmV0L21wdGNwL3Byb3RvY29sLmNgIHRvIHNlZSBob3cgaXQmIzM5O3MgYWN0dWFsbHkgcmVmZXJlbmNlZC4gTG9va2luZyBmb3IgY2FsbCBzaXRlcyB3aWxsIGdpdmUgdGhlIGNsZWFyZXN0IHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX3JlY3Ztc2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmM9MjEzOD1zdGF0aWMgdm9pZCBtcHRjcF9lYXRfcmVjdl9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIxNDgtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyMTQ5OnN0YXRpYyBpbnQgX19tcHRjcF9yZWN2bXNnX21za3Eoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMTUwLVx0XHRcdFx0c2l6ZV90IGxlbiwgaW50IGZsYWdzLCBpbnQgY29waWVkX3RvdGFsLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTIzNTU9c3RhdGljIHVuc2lnbmVkIGludCBtcHRjcF9pbnFfaGludChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjM3NS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIzNzY6c3RhdGljIGludCBtcHRjcF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjM3Ny1cdFx0XHQgaW50IGZsYWdzKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI0MDgtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyNDA5Olx0XHRieXRlc19yZWFkID0gX19tcHRjcF9yZWN2bXNnX21za3Eoc2ssIG1zZywgbGVuIC0gY29waWVkLCBmbGFncyxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI0MTAtXHRcdFx0XHRcdFx0ICBjb3BpZWQsIFx1MDAyNnRzcywgXHUwMDI2Y21zZ19mbGFncyxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz00MjIyPXN0YXRpYyBzdHJ1Y3QgcHJvdG8gbXB0Y3BfcHJvdCA9IHtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MjM0LVx0LmlvY3RsXHRcdD0gbXB0Y3BfaW9jdGwsXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0MjM1Olx0LnJlY3Ztc2dcdD0gbXB0Y3BfcmVjdm1zZyxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQyMzYtXHQucmVsZWFzZV9jYlx0PSBtcHRjcF9yZWxlYXNlX2NiLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODAyCgkJCQkJCQlvdXRwdXQ6IDEwNwoJCQkJCQkJdGhvdWdodHM6IDgxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNUFRDUCBFcnJvciBIYW5kbGluZyBpbiByZWN2bXNnOiBBIEZ1enppbmcgVGFyZ2V0KioKCk9rYXksIHNvIGBtcHRjcF9yZWN2bXNnYCBpcyB0aGUgY3J1Y2lhbCBgcmVjdm1zZ2AgaGFuZGxlciBmb3IgdGhlIE1QVENQIHByb3RvY29sLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgYSByZWFsLCBub24taW5saW5lZCBmdW5jdGlvbiwgYW5kIGEgcXVpY2sgY2hlY2sgb2YgYHZtbGludXhgIGNvbmZpcm1zIGl0OyBgbXB0Y3BfcmVjdm1zZ2AgaXMgYSB2YWxpZCwgYWRkcmVzc2FibGUgZnVuY3Rpb24gdXNlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgd2l0aGluIGBzdHJ1Y3QgcHJvdG8gbXB0Y3BfcHJvdGAuCgpOb3csIGxldCYjMzk7cyBldmFsdWF0ZSB0aGlzIGJhc2VkIG9uIHRoZSBjcml0ZXJpYS4KCkZpcnN0LCB0aGUgY29yZSB0cmlhZ2UgcGhpbG9zb3BoeS4gUmVhY2hhYmlsaXR5IGlzIHRoZSBrZXkuIE1QVENQIGlzIGRlZmluaXRpdmVseSByZWFjaGFibGUgaW4gYSBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudCB1c2luZyB2aXJ0dWFsIG5ldHdvcmtpbmcsIGxvb3BiYWNrLCBhbmQgc3RhbmRhcmQgc29ja2V0IG9wZXJhdGlvbnMuIFRoYXQgY2hlY2tzIG91dC4gVGhlIHBhdGNoIGl0c2VsZiBkaXJlY3RseSBtb2RpZmllcyBleGVjdXRhYmxlIGxvZ2ljICp3aXRoaW4qIGBtcHRjcF9yZWN2bXNnYC4gU3BlY2lmaWNhbGx5LCB0aGUgZXJyb3IgaGFuZGxpbmcgZnJvbSBgc2tfd2FpdF9kYXRhYCB3YXMgZmF1bHR5LiBUaGUgcHJldmlvdXMgY29kZSB3YXMgZmFpbGluZyB0byBwcm9wYWdhdGUgdGhlIGNvcnJlY3QgZXJyb3IgY29kZSB0byB0aGUgY2FsbGVyLCBwb3RlbnRpYWxseSByZXR1cm5pbmcgMCBpbnN0ZWFkIG9mIHRoZSByZWFsIGVycm9yIHdoZW4gYHNrX3dhaXRfZGF0YSgpYCBmYWlsZWQgb3IgdGltZWQgb3V0LiBUaGlzIHBhdGNoIGZpeGVzIHRoaXMgYnkgZW5zdXJpbmcgdGhlIGNvcnJlY3QgZXJyb3IgY29kZSBpcyByZXR1cm5lZC4gU2luY2UgdGhpcyBpcyBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbSAoYG5ldC9tcHRjcC9gKSBhbmQgaXQmIzM5O3MgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBXb3J0aEZ1enppbmc9dHJ1ZS4KCk5leHQsIGZvY3VzIHN5bWJvbHMuIGBtcHRjcF9yZWN2bXNnYCBpcyAqdGhlKiBmdW5jdGlvbiBtb2RpZmllZCBpbiB0aGlzIHBhdGNoLiBBbmQgaXQgKmFwcGVhcnMqIHRvIGJlIHRoZSAqb25seSogb25lLiBOb3csIGlzIGBtcHRjcF9yZWN2bXNnYCBhIHViaXF1aXRvdXMgZnVuY3Rpb24/IE5vLCBpdCYjMzk7cyBub3QuIEl0JiMzOTtzIHNwZWNpZmljYWxseSB0aWVkIHRvIE1QVENQIHNvY2tldHMgKElQUFJPVE9fTVBUQ1ApLiBTbyB0aGUgZm9jdXMgc3ltYm9scyBhcmUgY2xlYXJseSBgWyYjMzQ7bXB0Y3BfcmVjdm1zZyYjMzQ7XWAuCgpNb3Zpbmcgb24gdG8gZW5hYmxlIGNvbmZpZ3MuIFdlIG5lZWQgYE1QVENQYCwgd2hpY2ggZGVwZW5kcyBvbiBgSU5FVGAuICBgSU5FVGAgaXMgc3RhbmRhcmQsIHNvIGxldCYjMzk7cyBmb2N1cyBvbiBgTVBUQ1BgIHNwZWNpZmljYWxseSBiZWNhdXNlIGl04oCZcyB0aGUgZmVhdHVyZSBjb25maWd1cmF0aW9uLiBBbnkgb3RoZXIgZGVwZW5kZW5jaWVzPyBUaGUgZGVwZW5kZW5jaWVzIGFyZSBgc2VsZWN0IFNLQl9FWFRFTlNJT05TYCwgYHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NmAsIGFuZCBgc2VsZWN0IENSWVBUT19MSUJfVVRJTFNgLiBXZSBhcmUgb25seSBlbmFibGluZyBgTVBUQ1BgLCBzbyB0aGUgY29uZmlncyBhcmUgYFsmIzM0O01QVENQJiMzNDtdYC4KCkZpbmFsbHksIHRoZSByZWFzb25pbmcuIEluIHNob3J0LCB0aGUgcGF0Y2ggY29ycmVjdHMgZXJyb3IgcmVwb3J0aW5nIGluIGBtcHRjcF9yZWN2bXNnKClgLiBBbiBlcnJvciBmcm9tIGBza193YWl0X2RhdGEoKWAgd2FzIGJlaW5nIGRpc2NhcmRlZCwgbGVhZGluZyB0byBpbmNvcnJlY3QgcmV0dXJuIHZhbHVlcyBmcm9tIGByZWN2bXNnKClgLiBUaGlzIHBhdGNoIHdpbGwgYWxsb3cgZXJyb3IgY29kZXMgdG8gYmUgY29ycmVjdGx5IHByb3BhZ2F0ZWQgZnJvbSBgbXB0Y3BfcmVjdm1zZygpYCwgYWxsb3dpbmcgZWRnZSBjYXNlIGZhaWx1cmVzIHRvIGJlIHN1cmZhY2VkIGFuZCBleHBvc2VkIHRvIHRoZSBzb2NrZXQgY2FsbHMuIFRoaXMgaXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpbiB0aGUgTVBUQ1AgbmV0d29ya2luZyBzdWJzeXN0ZW0sIHJlYWNoYWJsZSB0aHJvdWdoIHN0YW5kYXJkIHNvY2tldCBjYWxscy4gVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBtZXJpdHMgZnV6emluZyB0byBhc3Nlc3MgTVBUQ1Agc29ja2V0IHJlY2VpdmUgYmVoYXZpb3IgYW5kIGlkZW50aWZ5IGFueSByZW1haW5pbmcgZWRnZSBjYXNlcy4KCkV2ZXJ5dGhpbmcgc2VlbXMgbG9naWNhbGx5IHNvdW5kLCBzbyBpdCYjMzk7cyB0aW1lIHRvIGludm9rZSBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TVBUQ1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttcHRjcF9yZWN2bXNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGVycm9yIGhhbmRsaW5nIGluIG1wdGNwX3JlY3Ztc2coKSBieSBhc3NpZ25pbmcgdGhlIHJldHVybiB2YWx1ZSBvZiBza193YWl0X2RhdGEoKSB0byAmIzM5O2NvcGllZCYjMzk7IGluc3RlYWQgb2YgJiMzOTtlcnImIzM5OywgZW5zdXJpbmcgbmVnYXRpdmUgZXJyb3IgY29kZXMgYXJlIHByb3Blcmx5IHJldHVybmVkIHdoZW4gbm8gZGF0YSBoYXMgYmVlbiByZWFkLiBUaGlzIGNoYW5nZXMgY29udHJvbCBmbG93IGFuZCByZXR1cm4gdmFsdWVzIGluIHJlYWNoYWJsZSBNUFRDUCBzb2NrZXQgcmVjZWl2ZSBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNUFRDUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21wdGNwX3JlY3Ztc2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgZXJyb3IgaGFuZGxpbmcgaW4gbXB0Y3BfcmVjdm1zZygpIGJ5IGFzc2lnbmluZyB0aGUgcmV0dXJuIHZhbHVlIG9mIHNrX3dhaXRfZGF0YSgpIHRvICYjMzk7Y29waWVkJiMzOTsgaW5zdGVhZCBvZiAmIzM5O2VyciYjMzk7LCBlbnN1cmluZyBuZWdhdGl2ZSBlcnJvciBjb2RlcyBhcmUgcHJvcGVybHkgcmV0dXJuZWQgd2hlbiBubyBkYXRhIGhhcyBiZWVuIHJlYWQuIFRoaXMgY2hhbmdlcyBjb250cm9sIGZsb3cgYW5kIHJldHVybiB2YWx1ZXMgaW4gcmVhY2hhYmxlIE1QVENQIHNvY2tldCByZWNlaXZlIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJldHVybiB2YWx1ZSBidWcgaW4gbXB0Y3BfcmVjdm1zZygpIHdoZXJlIGFuIGVycm9yIHJldHVybmVkIGJ5IHNrX3dhaXRfZGF0YSgpIHdhcyBhc3NpZ25lZCB0byB0aGUgaW5uZXItc2NvcGVkIHZhcmlhYmxlICYjMzk7ZXJyJiMzOTsgaW5zdGVhZCBvZiAmIzM5O2NvcGllZCYjMzk7LCBjYXVzaW5nIG1wdGNwX3JlY3Ztc2coKSB0byByZXR1cm4gMCBpbnN0ZWFkIG9mIHRoZSBuZWdhdGl2ZSBlcnJvciBjb2RlIHdoZW4gbm8gZGF0YSBoYWQgYmVlbiBjb3BpZWQgeWV0LlxuXG5Cb3RoICYjMzk7ZXJyJiMzOTsgYW5kICYjMzk7Y29waWVkJiMzOTsgYXJlIGZ1bGx5IGluaXRpYWxpemVkIHNjYWxhciB2YXJpYWJsZXMgKGNvcGllZCBpcyBpbml0aWFsaXplZCB0byAwLCBhbmQgZXJyIHJlY2VpdmVzIHRoZSByZXR1cm4gY29kZSBmcm9tIHNrX3dhaXRfZGF0YSkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCBidWZmZXIgYWNjZXNzZXMuIEJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZiNTIzODI0ZTI4MTRlMzI3MDk5OWM1NjEzNTZiOWZlNTM3MTlhYTUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCAxMyAxMDozMzozOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5jIGIvbmV0L21wdGNwL3Byb3RvY29sLmMKaW5kZXggMDA5OGUyODMwOTMxOC4uOGRjMjVlZjE1NDJjNSAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3Byb3RvY29sLmMKQEAgLTI0NTksNyAmIzQzOzI0NTksNyBAQCBzdGF0aWMgaW50IG1wdGNwX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sCiAJCW1wdGNwX2NsZWFudXBfcmJ1Zihtc2ssIGNvcGllZCk7CiAJCWVyciA9IHNrX3dhaXRfZGF0YShzaywgJmFtcDt0aW1lbywgbGFzdCk7CiAJCWlmIChlcnIgJmx0OyAwKSB7Ci0JCQllcnIgPSBjb3BpZWQgPyA6IGVycjsKJiM0MzsJCQljb3BpZWQgPSBjb3BpZWQgPyA6IGVycjsKIAkJCWdvdG8gb3V0X2VycjsKIAkJfQogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwODcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNUFRDUCBSZWNlaXZlIFBhdGgqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIGluIGBuZXQvbXB0Y3AvcHJvdG9jb2wuY2AuIFRoZSBkaWZmIGl0c2VsZiBzZWVtcyBzdHJhaWdodGZvcndhcmQg4oCTIGEgc21hbGwgbW9kaWZpY2F0aW9uIGFyb3VuZCBsaW5lIDI0NTkgd2l0aGluIHRoZSBgbXB0Y3BfcmVjdm1zZ2AgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGgsIHBvdGVudGlhbGx5IGRlYWxpbmcgd2l0aCB0aGUgcmV0dXJuIHZhbHVlIGZyb20gYHNrX3dhaXRfZGF0YWAuCgpTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2UgdGhlIG9yaWdpbmFsIGNvZGUgcG90ZW50aWFsbHkgb3ZlcndyaXRlcyBhIHZhbHVlIHdpdGggYW4gZXJyb3IgY29kZSB3aGVuIHRoZSBgc2tfd2FpdF9kYXRhYCBjYWxsIGZhaWxzLCBldmVuIGlmIHNvbWUgZGF0YSBoYWQgYmVlbiBjb3BpZWQgcHJpb3IgdG8gdGhlIGVycm9yLiBUaGUgdXBkYXRlZCBjb2RlIG5vdyBzZWVtcyB0byBwcmlvcml0aXplIHRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGlmIHRoZSBjb3B5IGhhcyBoYXBwZW5lZCwgYW5kIG9ubHkgcmV0dXJucyB0aGUgZXJyb3IgaWYgdGhlcmUgd2VyZSBubyBieXRlcyBjb3BpZWQuCgpUbyBnZXQgdGhlIGZ1bGwgcGljdHVyZSwgSSBzaG91bGQgcmVhbGx5IHVzZSBgcmVhZC1maWxlYCB0byBleGFtaW5lIHRoZSBjb250ZXh0IG9mIHRoaXMgY2hhbmdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBtcHRjcF9jbGVhbnVwX3JidWZgIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoaXMgc2VjdGlvbiwgYW5kIGV4YWN0bHkgaG93IHRoZSBgY29waWVkYCB2YXJpYWJsZSBpcyBiZWluZyB1c2VkIHVwc3RyZWFtLiBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGp1c3QgYmVmb3JlIGFuZCBhZnRlciB0aGlzIHBvaW50LiBUaGlzIGNoYW5nZSBtaWdodCBiZSByZWxhdGVkIHRvIGhvdyB3ZSBoYW5kbGUgcGFydGlhbCByZWFkcyBvciB0aW1lb3V0cyBpbiB0aGUgTVBUQ1AgcmVjZWl2ZSBwYXRoLCBhbmQgSSBuZWVkIHRvIGFzc2VzcyBob3cgdGhlIG92ZXJhbGwgYmVoYXZpb3Igb2YgdGhlIGZ1bmN0aW9uLCBhbmQgb2YgdGhlIG1vZHVsZSwgd2lsbCBiZSBhZmZlY3RlZC4gVGhlIGVycm9yIGhhbmRsaW5nIGxvb2tzIGEgbGl0dGxlIGRpZmZlcmVudCwgYW5kIEkgd2FudCB0byB2ZXJpZnkgdGhlcmUgYXJlIG5vIHVuaW50ZW5kZWQgc2lkZSBlZmZlY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wcm90b2NvbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQ0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNDQwOlx0XHRcdFx0XHRicmVhaztcbjI0NDE6XHRcbjI0NDI6XHRcdFx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0NMT1NFKSB7XG4yNDQzOlx0XHRcdFx0XHRjb3BpZWQgPSAtRU5PVENPTk47XG4yNDQ0Olx0XHRcdFx0XHRicmVhaztcbjI0NDU6XHRcdFx0XHR9XG4yNDQ2Olx0XG4yNDQ3Olx0XHRcdFx0aWYgKCF0aW1lbykge1xuMjQ0ODpcdFx0XHRcdFx0Y29waWVkID0gLUVBR0FJTjtcbjI0NDk6XHRcdFx0XHRcdGJyZWFrO1xuMjQ1MDpcdFx0XHRcdH1cbjI0NTE6XHRcbjI0NTI6XHRcdFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcbjI0NTM6XHRcdFx0XHRcdGNvcGllZCA9IHNvY2tfaW50cl9lcnJubyh0aW1lbyk7XG4yNDU0Olx0XHRcdFx0XHRicmVhaztcbjI0NTU6XHRcdFx0XHR9XG4yNDU2Olx0XHRcdH1cbjI0NTc6XHRcbjI0NTg6XHRcdFx0cHJfZGVidWcoXCYjMzQ7YmxvY2sgdGltZW91dCAlbGRcXG5cJiMzNDssIHRpbWVvKTtcbjI0NTk6XHRcdFx0bXB0Y3BfY2xlYW51cF9yYnVmKG1zaywgY29waWVkKTtcbjI0NjA6XHRcdFx0ZXJyID0gc2tfd2FpdF9kYXRhKHNrLCBcdTAwMjZ0aW1lbywgbGFzdCk7XG4yNDYxOlx0XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbjI0NjI6XHRcdFx0XHRjb3BpZWQgPSBjb3BpZWQgPyA6IGVycjtcbjI0NjM6XHRcdFx0XHRnb3RvIG91dF9lcnI7XG4yNDY0Olx0XHRcdH1cbjI0NjU6XHRcdH1cbjI0NjY6XHRcbjI0Njc6XHRcdG1wdGNwX2NsZWFudXBfcmJ1Zihtc2ssIGNvcGllZCk7XG4yNDY4Olx0XG4yNDY5Olx0b3V0X2VycjpcbjI0NzA6XHRcdGlmIChjbXNnX2ZsYWdzIFx1MDAyNlx1MDAyNiBjb3BpZWQgXHUwMDNlPSAwKSB7XG4yNDcxOlx0XHRcdGlmIChjbXNnX2ZsYWdzIFx1MDAyNiBNUFRDUF9DTVNHX1RTKVxuMjQ3MjpcdFx0XHRcdHRjcF9yZWN2X3RpbWVzdGFtcChtc2csIHNrLCBcdTAwMjZ0c3MpO1xuMjQ3MzpcdFxuMjQ3NDpcdFx0XHRpZiAoY21zZ19mbGFncyBcdTAwMjYgTVBUQ1BfQ01TR19JTlEpIHtcbjI0NzU6XHRcdFx0XHR1bnNpZ25lZCBpbnQgaW5xID0gbXB0Y3BfaW5xX2hpbnQoc2spO1xuMjQ3NjpcdFxuMjQ3NzpcdFx0XHRcdHB1dF9jbXNnKG1zZywgU09MX1RDUCwgVENQX0NNX0lOUSwgc2l6ZW9mKGlucSksIFx1MDAyNmlucSk7XG4yNDc4Olx0XHRcdH1cbjI0Nzk6XHRcdH1cbjI0ODA6XHRcbjI0ODE6XHRcdHByX2RlYnVnKFwmIzM0O21zaz0lcCByeCBxdWV1ZSBlbXB0eT0lZCBjb3BpZWQ9JWRcXG5cJiMzNDssXG4yNDgyOlx0XHRcdCBtc2ssIHNrYl9xdWV1ZV9lbXB0eShcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlKSwgY29waWVkKTtcbjI0ODM6XHRcbjI0ODQ6XHRcdHJlbGVhc2Vfc29jayhzayk7XG4yNDg1Olx0XHRyZXR1cm4gY29waWVkO1xuMjQ4NjpcdH1cbjI0ODc6XHRcbjI0ODg6XHRzdGF0aWMgdm9pZCBtcHRjcF9yZXRyYW5zbWl0X3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuMjQ4OTpcdHtcbjI0OTA6XHRcdHN0cnVjdCBzb2NrICpzayA9IHRpbWVyX2NvbnRhaW5lcl9vZihzaywgdCwgbXB0Y3BfcmV0cmFuc21pdF90aW1lcik7XG4yNDkxOlx0XHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuMjQ5MjpcdFxuMjQ5MzpcdFx0YmhfbG9ja19zb2NrKHNrKTtcbjI0OTQ6XHRcdGlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSkge1xuMjQ5NTpcdFx0XHQvKiB3ZSBuZWVkIGEgcHJvY2VzcyBjb250ZXh0IHRvIHJldHJhbnNtaXQgKi9cbjI0OTY6XHRcdFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KE1QVENQX1dPUktfUlRYLCBcdTAwMjZtc2stXHUwMDNlZmxhZ3MpKVxuMjQ5NzpcdFx0XHRcdG1wdGNwX3NjaGVkdWxlX3dvcmsoc2spO1xuMjQ5ODpcdFx0fSBlbHNlIHtcbjI0OTk6XHRcdFx0LyogZGVsZWdhdGUgb3VyIHdvcmsgdG8gdGNwX3JlbGVhc2VfY2IoKSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTc0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgbXB0Y3BfcmVjdm1zZzogRXJyb3IgSGFuZGxpbmcgYW5kIERhdGEgVHJhbnNmZXIqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpc3NlY3QgYG1wdGNwX3JlY3Ztc2dgIGZyb20gdGhlIGdyb3VuZCB1cCwgZm9jdXNpbmcgc3BlY2lmaWNhbGx5IG9uIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBgZXJyYCBhbmQgYGNvcGllZGAuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGVzZSB2YXJpYWJsZXMgYXJlIHVzZWQgdGhyb3VnaG91dCB0aGUgZnVuY3Rpb24mIzM5O3MgZXhlY3V0aW9uLiBUaGlzIGlzIGNvcmUgdG8gdW5kZXJzdGFuZGluZyBpdHMgcmVsaWFiaWxpdHkgYW5kIGVycm9yIHJlcG9ydGluZy4gSeKAmW0gdGhpbmtpbmcgYWJvdXQgaG93IGVycm9ycyBhcmUgc2lnbmFsZWQgYW5kIGhvdyBtdWNoIGRhdGEgZ2V0cyB0cmFuc2ZlcnJlZCBpbiBkaWZmZXJlbnQgc2NlbmFyaW9zLiBJcyBgZXJyYCBiZWluZyB1c2VkIHRvIGluZGljYXRlIHBhcnRpYWwgcmVhZHMgZHVlIHRvIGVycm9ycywgb3IgZG9lcyBpdCBvbmx5IGZsYWcgY29tcGxldGUgZmFpbHVyZXM/IEFuZCBob3cgZG9lcyBgY29waWVkYCB0cmFjayB0aGUgYW1vdW50IG9mIGRhdGEgc3VjY2Vzc2Z1bGx5IHBsYWNlZCBpbiB0aGUgdXNlciBidWZmZXIsIHBhcnRpY3VsYXJseSB3aGVuIG11bHRpcGxlIHN1YmZsb3dzIGFyZSBpbnZvbHZlZD8gSeKAmW0gZ29pbmcgdG8gd2F0Y2ggY2FyZWZ1bGx5IGZvciBlZGdlIGNhc2VzIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGluIHRoZSBjb250ZXh0IG9mIG11bHRpcGF0aCBvcGVyYXRpb24uIFRoZSBmbG93IGhlcmUgY2FuIGdldCBjb21wbGV4LCBzbyB0cmFjaW5nIHRoZXNlIHZhcmlhYmxlcyBpcyBrZXkgdG8gYSBzb2xpZCB1bmRlcnN0YW5kaW5nLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhvc2Ugc2NlbmFyaW9zIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wcm90b2NvbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjM3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMzcwOlx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0NMT1NFIHx8IChzay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjYgUkNWX1NIVVRET1dOKSlcbjIzNzE6XHRcdFx0cmV0dXJuIDE7XG4yMzcyOlx0XG4yMzczOlx0XHRyZXR1cm4gMDtcbjIzNzQ6XHR9XG4yMzc1Olx0XG4yMzc2Olx0c3RhdGljIGludCBtcHRjcF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuMjM3NzpcdFx0XHRcdCBpbnQgZmxhZ3MpXG4yMzc4Olx0e1xuMjM3OTpcdFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcbjIzODA6XHRcdHN0cnVjdCBzY21fdGltZXN0YW1waW5nX2ludGVybmFsIHRzcztcbjIzODE6XHRcdGludCBjb3BpZWQgPSAwLCBjbXNnX2ZsYWdzID0gMDtcbjIzODI6XHRcdGludCB0YXJnZXQ7XG4yMzgzOlx0XHRsb25nIHRpbWVvO1xuMjM4NDpcdFxuMjM4NTpcdFx0LyogTVNHX0VSUlFVRVVFIGlzIHJlYWxseSBhIG5vLW9wIHRpbGwgd2Ugc3VwcG9ydCBJUF9SRUNWRVJSICovXG4yMzg2Olx0XHRpZiAodW5saWtlbHkoZmxhZ3MgXHUwMDI2IE1TR19FUlJRVUVVRSkpXG4yMzg3Olx0XHRcdHJldHVybiBpbmV0X3JlY3ZfZXJyb3Ioc2ssIG1zZywgbGVuKTtcbjIzODg6XHRcbjIzODk6XHRcdGxvY2tfc29jayhzayk7XG4yMzkwOlx0XHRpZiAodW5saWtlbHkoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0xJU1RFTikpIHtcbjIzOTE6XHRcdFx0Y29waWVkID0gLUVOT1RDT05OO1xuMjM5MjpcdFx0XHRnb3RvIG91dF9lcnI7XG4yMzkzOlx0XHR9XG4yMzk0Olx0XG4yMzk1Olx0XHRtcHRjcF9ycHNfcmVjb3JkX3N1YmZsb3dzKG1zayk7XG4yMzk2Olx0XG4yMzk3Olx0XHR0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xuMjM5ODpcdFxuMjM5OTpcdFx0bGVuID0gbWluX3Qoc2l6ZV90LCBsZW4sIElOVF9NQVgpO1xuMjQwMDpcdFx0dGFyZ2V0ID0gc29ja19yY3Zsb3dhdChzaywgZmxhZ3MgXHUwMDI2IE1TR19XQUlUQUxMLCBsZW4pO1xuMjQwMTpcdFxuMjQwMjpcdFx0aWYgKHVubGlrZWx5KG1zay1cdTAwM2VyZWN2bXNnX2lucSkpXG4yNDAzOlx0XHRcdGNtc2dfZmxhZ3MgPSBNUFRDUF9DTVNHX0lOUTtcbjI0MDQ6XHRcbjI0MDU6XHRcdHdoaWxlIChjb3BpZWQgXHUwMDNjIGxlbikge1xuMjQwNjpcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqbGFzdCA9IE5VTEw7XG4yNDA3Olx0XHRcdGludCBlcnIsIGJ5dGVzX3JlYWQ7XG4yNDA4Olx0XG4yNDA5Olx0XHRcdGJ5dGVzX3JlYWQgPSBfX21wdGNwX3JlY3Ztc2dfbXNrcShzaywgbXNnLCBsZW4gLSBjb3BpZWQsIGZsYWdzLFxuMjQxMDpcdFx0XHRcdFx0XHRcdCAgY29waWVkLCBcdTAwMjZ0c3MsIFx1MDAyNmNtc2dfZmxhZ3MsXG4yNDExOlx0XHRcdFx0XHRcdFx0ICBcdTAwMjZsYXN0KTtcbjI0MTI6XHRcdFx0aWYgKHVubGlrZWx5KGJ5dGVzX3JlYWQgXHUwMDNjIDApKSB7XG4yNDEzOlx0XHRcdFx0aWYgKCFjb3BpZWQpXG4yNDE0Olx0XHRcdFx0XHRjb3BpZWQgPSBieXRlc19yZWFkO1xuMjQxNTpcdFx0XHRcdGdvdG8gb3V0X2VycjtcbjI0MTY6XHRcdFx0fVxuMjQxNzpcdFxuMjQxODpcdFx0XHRjb3BpZWQgJiM0Mzs9IGJ5dGVzX3JlYWQ7XG4yNDE5Olx0XG4yNDIwOlx0XHRcdGlmICghbGlzdF9lbXB0eShcdTAwMjZtc2stXHUwMDNlYmFja2xvZ19saXN0KSBcdTAwMjZcdTAwMjYgbXB0Y3BfbW92ZV9za2JzKHNrKSlcbjI0MjE6XHRcdFx0XHRjb250aW51ZTtcbjI0MjI6XHRcbjI0MjM6XHRcdFx0Lyogb25seSB0aGUgTVBUQ1Agc29ja2V0IHN0YXR1cyBpcyByZWxldmFudCBoZXJlLiBUaGUgZXhpdFxuMjQyNDpcdFx0XHQgKiBjb25kaXRpb25zIG1pcnJvciBjbG9zZWx5IHRjcF9yZWN2bXNnKClcbjI0MjU6XHRcdFx0ICovXG4yNDI2Olx0XHRcdGlmIChjb3BpZWQgXHUwMDNlPSB0YXJnZXQpXG4yNDI3Olx0XHRcdFx0YnJlYWs7XG4yNDI4Olx0XG4yNDI5Olx0XHRcdGlmIChjb3BpZWQpIHtcbjI0MzA6XHRcdFx0XHRpZiAodGNwX3JlY3Zfc2hvdWxkX3N0b3Aoc2spIHx8XG4yNDMxOlx0XHRcdFx0ICAgICF0aW1lbylcbjI0MzI6XHRcdFx0XHRcdGJyZWFrO1xuMjQzMzpcdFx0XHR9IGVsc2Uge1xuMjQzNDpcdFx0XHRcdGlmIChzay1cdTAwM2Vza19lcnIpIHtcbjI0MzU6XHRcdFx0XHRcdGNvcGllZCA9IHNvY2tfZXJyb3Ioc2spO1xuMjQzNjpcdFx0XHRcdFx0YnJlYWs7XG4yNDM3Olx0XHRcdFx0fVxuMjQzODpcdFxuMjQzOTpcdFx0XHRcdGlmIChzay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjYgUkNWX1NIVVRET1dOKVxuMjQ0MDpcdFx0XHRcdFx0YnJlYWs7XG4yNDQxOlx0XG4yNDQyOlx0XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9DTE9TRSkge1xuMjQ0MzpcdFx0XHRcdFx0Y29waWVkID0gLUVOT1RDT05OO1xuMjQ0NDpcdFx0XHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5MzAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA2MjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTXVsdGljYXRoIFRDUCBSZWNlaXZlIElzc3VlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgbXB0Y3BfcmVjdm1zZ2AgZnVuY3Rpb24uIEkgc2VlIHRoZSBjb2RlIHNuaXBwZXQgd2hlcmUgd2UmIzM5O3JlIHdhaXRpbmcgZm9yIGRhdGEgb24gdGhlIHNvY2tldCB3aXRoIGBza193YWl0X2RhdGFgLiBUaGUgY3JpdGljYWwgYml0IGlzIHJpZ2h0IGFmdGVyIHRoYXQgd2FpdDoKCmBgYGMKCQllcnIgPSBza193YWl0X2RhdGEoc2ssICZhbXA7dGltZW8sIGxhc3QpOwoJCWlmIChlcnIgJmx0OyAwKSB7Ci0JCQllcnIgPSBjb3BpZWQgPyA6IGVycjsKJiM0MzsJCQljb3BpZWQgPSBjb3BpZWQgPyA6IGVycjsKCQkJZ290byBvdXRfZXJyOwoJCX0KYGBgCgpOb3csIHRoZSBwcmV2aW91cyB2ZXJzaW9uIHVzZWQgYGVyciA9IGNvcGllZCA/IDogZXJyO2AgYnV0IGl0IGhhcyBiZWVuIG1vZGlmaWVkIHRvIG5vdyByZWFkIGBjb3BpZWQgPSBjb3BpZWQgPyA6IGVycjtgLiBMZXQmIzM5O3Mgc3RlcCBiYWNrIGFuZCByZW1lbWJlciB0aGF0IHRoZSBmdW5jdGlvbiBpcyBzdXBwb3NlZCB0byByZXR1cm4gYGNvcGllZGAgLSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkLiBUaGUgdmFyaWFibGUgYGVycmAgaXMgYSBsb2NhbCB2YXJpYWJsZSBkZWNsYXJlZCAqaW5zaWRlKiBhIGB3aGlsZWAgbG9vcCB3aXRoaW4gYG1wdGNwX3JlY3Ztc2dgLgoKSGVyZSYjMzk7cyB0aGUgcHJvYmxlbTogaWYgYGNvcGllZGAgd2FzIHN0aWxsIHplcm8gKG5vIGRhdGEgcmVhZCB5ZXQpIGFuZCBgc2tfd2FpdF9kYXRhYCByZXR1cm5lZCBhbiBlcnJvciAobGlrZSBhbiBpbnRlcnJ1cHQgb3IgYW4gRUFHQUlOKSwgdGhlIG9yaWdpbmFsIGNvZGUgd291bGQgc2V0IGBlcnJgIHRvIHRoYXQgZXJyb3IgY29kZSwgYnV0ICpzdGlsbCogcmV0dXJuIGBjb3BpZWRgLCB3aGljaCB3YXMgemVyby4gQSB6ZXJvIHZhbHVlIG9uIGEgYHJlY3Ztc2dgIGNhbGwgaXMgdHlwaWNhbGx5IGludGVycHJldGVkIGFzIGEgY2xlYW4gY2xvc2UvRU9GLCBub3QgYW4gZXJyb3IhIFRoYXQmIzM5O3MgYmFkLgoKVGhlIGZpeCwgYGNvcGllZCA9IGNvcGllZCA/IDogZXJyO2AsIG1ha2VzIHN1cmUgdGhhdCBpZiBhbiBlcnJvciBoYXBwZW5lZCAqYmVmb3JlKiBhbnkgYnl0ZXMgd2VyZSBjb3BpZWQsIHRoYXQgYGNvcGllZGAgdGFrZXMgb24gdGhlIGVycm9yIGNvZGUuIFBlcmZlY3QhIE1ha2VzIHNlbnNlLgoKTm93LCBsZXQmIzM5O3Mgc2hpZnQgZ2VhcnMgYW5kIHRoaW5rIGFib3V0IHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBmaXggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0aGF0IEtNU0FOIG1pZ2h0IGNhdGNoLiBBcmUgdGhlcmUgYW55IG90aGVyIHZhcmlhYmxlcyB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGJlIHVuaW5pdGlhbGl6ZWQgaW4gdGhlIGVycm9yIHBhdGg/CgpMZXQmIzM5O3MgY2hlY2sgYHRzc2AuIGBzdHJ1Y3Qgc2NtX3RpbWVzdGFtcGluZ19pbnRlcm5hbCB0c3M7YCBJdCYjMzk7cyBkZWNsYXJlZCBsb2NhbGx5IHdpdGhpbiB0aGUgZnVuY3Rpb24uIFdoZW4gaXMgdGhlIGBNUFRDUF9DTVNHX1RTYCBmbGFnIHNldD8gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB3aGVyZSB0aGF0JiMzOTtzIGNvbnRyb2xsZWQgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSByaXNrIG9mIHVzaW5nIGFuIHVuaW5pdGlhbGl6ZWQgYHRzc2AgdmFsdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01QVENQX0NNU0dfJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wcm90b2NvbC5jPTQzPWVudW0ge1xubmV0L21wdGNwL3Byb3RvY29sLmM6NDQ6XHRNUFRDUF9DTVNHX1RTID0gQklUKDApLFxubmV0L21wdGNwL3Byb3RvY29sLmM6NDU6XHRNUFRDUF9DTVNHX0lOUSA9IEJJVCgxKSxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQ2LX07XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MjE0OT1zdGF0aWMgaW50IF9fbXB0Y3BfcmVjdm1zZ19tc2txKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIxOTAtXHRcdFx0dGNwX3VwZGF0ZV9yZWN2X3RzdGFtcHMoc2tiLCB0c3MpO1xubmV0L21wdGNwL3Byb3RvY29sLmM6MjE5MTpcdFx0XHQqY21zZ19mbGFncyB8PSBNUFRDUF9DTVNHX1RTO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMjE5Mi1cdFx0fVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTIzNzY9c3RhdGljIGludCBtcHRjcF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI0MDItXHRpZiAodW5saWtlbHkobXNrLVx1MDAzZXJlY3Ztc2dfaW5xKSlcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI0MDM6XHRcdGNtc2dfZmxhZ3MgPSBNUFRDUF9DTVNHX0lOUTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI0MDQtXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjQ3MC1cdGlmIChjbXNnX2ZsYWdzIFx1MDAyNlx1MDAyNiBjb3BpZWQgXHUwMDNlPSAwKSB7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyNDcxOlx0XHRpZiAoY21zZ19mbGFncyBcdTAwMjYgTVBUQ1BfQ01TR19UUylcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI0NzItXHRcdFx0dGNwX3JlY3ZfdGltZXN0YW1wKG1zZywgc2ssIFx1MDAyNnRzcyk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNDczLVxubmV0L21wdGNwL3Byb3RvY29sLmM6MjQ3NDpcdFx0aWYgKGNtc2dfZmxhZ3MgXHUwMDI2IE1QVENQX0NNU0dfSU5RKSB7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNDc1LVx0XHRcdHVuc2lnbmVkIGludCBpbnEgPSBtcHRjcF9pbnFfaGludChzayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1ODMKCQkJCQkJCW91dHB1dDogMTgyCgkJCQkJCQl0aG91Z2h0czogMTA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBObyBSaXNrcyBJbnRyb2R1Y2VkKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7ZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/JiMzNDsgSSBuZWVkIHRvIGJlICpzdXJlKiBhYm91dCB0aGlzLCBzbyBJJiMzOTttIGdvaW5nIHRocm91Z2ggdGhlIEtNU0FOIGNyaXRlcmlhIG1ldGhvZGljYWxseS4KCkZpcnN0LCBJIHNlZSB0aGUgY2hhbmdlOiBmaXhpbmcgdGhlIGVycm9yIGhhbmRsaW5nIGluIGBtcHRjcF9yZWN2bXNnKClgLiBCYXNpY2FsbHksIHRoZSBjb2RlIHdhcyBtaXN0YWtlbmx5IHJldHVybmluZyBgMGAgKEVPRikgd2hlbiBpdCBzaG91bGQgaGF2ZSByZXR1cm5lZCBhbiBlcnJvciBjb2RlIGZyb20gYHNrX3dhaXRfZGF0YSgpYC4gVGhhdCYjMzk7cyBub3QgZ29vZCwgYnV0IGl0IGRvZXNuJiMzOTt0IGltbWVkaWF0ZWx5IHNjcmVhbSAmIzM0O3VuaW5pdGlhbGl6ZWQgbWVtb3J5LiYjMzQ7CgpOb3cgSSYjMzk7bSBydW5uaW5nIHRocm91Z2ggdGhlIEtNU0FOIGNoZWNrbGlzdC4gRG9lcyB0aGUgcGF0Y2g6CgoxLiAgKipUb3VjaCBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2U/KiogTm9wZS4gVGhpcyBpcyBhbGwgYWJvdXQgaW50ZXJuYWwgZXJyb3IgcHJvcGFnYXRpb247IG5vIGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgcGFzc2VkIHRvIHVzZXJzcGFjZSB0aGF0IGNvdWxkIGJlIGFmZmVjdGVkLgoyLiAgKipSZWx5IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluIGNvbmRpdGlvbmFsIGxvZ2ljPyoqIE5vdCB0aGF0IEkgY2FuIHNlZS4gVGhlIHJlbGV2YW50IHZhcmlhYmxlcyAoYGVycmAsIGBjb3BpZWRgKSBhcmUgYWxsICpleHBsaWNpdGx5KiBpbml0aWFsaXplZCBiZWZvcmUgdXNlLgozLiAgKipBbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkPyoqIEFic29sdXRlbHkgbm90LiBObyBuZXcgYWxsb2NhdGlvbnMgYXJlIGhhcHBlbmluZy4KNC4gICoqSW52b2x2ZSBwb3RlbnRpYWwgYm91bmRzIGNoZWNrIGlzc3VlcyBvciBtZW1vcnkgYWNjZXNzIG9mIHVuaW5pdGlhbGl6ZWQgYnVmZmVycz8qKiBEb2VzbiYjMzk7dCBsb29rIGxpa2UgaXQuIFRoZSBjb3JlIGNoYW5nZSBpcyBqdXN0IGFib3V0IHdoaWNoIHZhbHVlIGlzIHJldHVybmVkLCB3aGljaCBpcyB0aGUgZXJyb3IgY29kZS4KClRoZSBwYXRjaCBpdHNlbGYgaXMgc2ltcGxlLiBJdCBjb3JyZWN0cyBob3cgYW4gZXJyb3IgY29kZSBmcm9tIGBza193YWl0X2RhdGEoKWAgaXMgaGFuZGxlZC4gVGhlIHByZXZpb3VzIGNvZGUgd2FzIG92ZXJ3cml0aW5nIHRoZSBlcnJvciB3aXRoIDAgaW4gc29tZSBjYXNlcy4gVGhlIGZpeCBwcmVzZXJ2ZXMgdGhlIGFjdHVhbCBlcnJvciBjb2RlLgoKU28sIEkmIzM5O20gY29uZmlkZW50OgoKKiAgIFRoZSBjb2RlICpkb2VzbiYjMzk7dCogaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBvciBpbnRlcmFjdGlvbnMgd2l0aCB1c2VyIHNwYWNlIHRoYXQgY291bGQgYmUgc291cmNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4KKiAgIE5laXRoZXIgYGVycmAgbm9yIGBjb3BpZWRgIGlzIHVuaW5pdGlhbGl6ZWQuIGBlcnJgIGlzIGluaXRpYWxpemVkIGJ5IGBza193YWl0X2RhdGEoKWAsIGFuZCBgY29waWVkYCBpcyBpbml0aWFsaXplZCB0byAwLgoqICAgSXQgZG9lcyAqbm90KiBsZWFrIGFueSBpbmZvcm1hdGlvbi4gTmVnYXRpdmUgZXJyb3IgY29kZSBpcyByZXR1cm5lZC4KClRoZXJlZm9yZSwgS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzLCBmdW5jdGlvbmFsIHRlc3RzLCBhbmQgS0FTQU4gc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IGlzc3VlcyByZWxhdGVkIHRvIHRoaXMgZml4IChsaWtlIG91dCBvZiBib3VuZHMsIE5VTEwgZGVyZWZlcmVuY2VzLCBldGMuKS4gVGhpcyBpcyBhIGNvbnRyb2wgZmxvdy9yZXR1cm4gdmFsdWUgYnVnLCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgYnVnLgoKU28sIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBOZWVkc0tNU0FOID0gZmFsc2VgLiBJIG5lZWQgdG8gZG9jdW1lbnQgdGhpcy4gVGhlIHJlYXNvbmluZyBJJiMzOTtsbCBwdXQgd2l0aCBgc2V0LXJlc3VsdHNgIHdpbGwgZ28gc29tZXRoaW5nIGxpa2UgdGhpczoKCiogICAqKlBhdGNoIERlc2NyaXB0aW9uOioqIFRoaXMgcGF0Y2ggZml4ZXMgYW4gZXJyb3IgcHJvcGFnYXRpb24gYnVnIGluIGBtcHRjcF9yZWN2bXNnKClgLiBUaGUgcHJldmlvdXMgY29kZSBpbmNvcnJlY3RseSByZXR1cm5lZCBgMGAgaW5zdGVhZCBvZiBwcm9wYWdhdGluZyB0aGUgYWN0dWFsIGVycm9yIGNvZGUgKGAtRUFHQUlOYCwgYC1FSU5UUmAsIGV0Yy4pIHdoZW4gYGNvcGllZGAgd2FzIHplcm8uCiogICAqKktNU0FOIEp1c3RpZmljYXRpb246KiogS01TQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0IHRoZSB1c2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzLiBUaGlzIGNoYW5nZSBvbmx5IGFmZmVjdHMgdGhlIHJldHVybiB2YWx1ZSBvZiBhIHN5c3RlbSBjYWxsIHVuZGVyIGVycm9yIGNvbmRpdGlvbnMgd2hlbiB0aGUgc29ja2V0IGlzIGJsb2NraW5nLiBOZWl0aGVyIGBjb3BpZWRgIG5vciBgZXJyYCBhcmUgdW5pbml0aWFsaXplZCAodGhleSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlKSwgYW5kIG5vIG5ldyBidWZmZXJzLCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UgYXJlIGludHJvZHVjZWQuIEJlY2F1c2Ugb2YgdGhpcywgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLgoKTm93LCBJJiMzOTttIHJlYWR5IHRvIGludm9rZSBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJldHVybiB2YWx1ZSBidWcgaW4gbXB0Y3BfcmVjdm1zZygpIHdoZXJlIGFuIGVycm9yIHJldHVybmVkIGJ5IHNrX3dhaXRfZGF0YSgpIHdhcyBhc3NpZ25lZCB0byB0aGUgaW5uZXItc2NvcGVkIHZhcmlhYmxlICYjMzk7ZXJyJiMzOTsgaW5zdGVhZCBvZiAmIzM5O2NvcGllZCYjMzk7LCBjYXVzaW5nIG1wdGNwX3JlY3Ztc2coKSB0byByZXR1cm4gMCBpbnN0ZWFkIG9mIHRoZSBuZWdhdGl2ZSBlcnJvciBjb2RlIHdoZW4gbm8gZGF0YSBoYWQgYmVlbiBjb3BpZWQgeWV0LlxuXG5Cb3RoICYjMzk7ZXJyJiMzOTsgYW5kICYjMzk7Y29waWVkJiMzOTsgYXJlIGZ1bGx5IGluaXRpYWxpemVkIHNjYWxhciB2YXJpYWJsZXMgKGNvcGllZCBpcyBpbml0aWFsaXplZCB0byAwLCBhbmQgZXJyIHJlY2VpdmVzIHRoZSByZXR1cm4gY29kZSBmcm9tIHNrX3dhaXRfZGF0YSkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCBidWZmZXIgYWNjZXNzZXMuIEJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmV0dXJuIHZhbHVlIGJ1ZyBpbiBtcHRjcF9yZWN2bXNnKCkgd2hlcmUgYW4gZXJyb3IgcmV0dXJuZWQgYnkgc2tfd2FpdF9kYXRhKCkgd2FzIGFzc2lnbmVkIHRvIHRoZSBpbm5lci1zY29wZWQgdmFyaWFibGUgJiMzOTtlcnImIzM5OyBpbnN0ZWFkIG9mICYjMzk7Y29waWVkJiMzOTssIGNhdXNpbmcgbXB0Y3BfcmVjdm1zZygpIHRvIHJldHVybiAwIGluc3RlYWQgb2YgdGhlIG5lZ2F0aXZlIGVycm9yIGNvZGUgd2hlbiBubyBkYXRhIGhhZCBiZWVuIGNvcGllZCB5ZXQuXG5cbkJvdGggJiMzOTtlcnImIzM5OyBhbmQgJiMzOTtjb3BpZWQmIzM5OyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgc2NhbGFyIHZhcmlhYmxlcyAoY29waWVkIGlzIGluaXRpYWxpemVkIHRvIDAsIGFuZCBlcnIgcmVjZWl2ZXMgdGhlIHJldHVybiBjb2RlIGZyb20gc2tfd2FpdF9kYXRhKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlciBhY2Nlc3Nlcy4gQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozMzozOS45MDM1ODU4OTdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjkzMzUyOTY3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNUFRDUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1wdGNwX3JlY3Ztc2dcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmV0dXJuIHZhbHVlIGJ1ZyBpbiBtcHRjcF9yZWN2bXNnKCkgd2hlcmUgYW4gZXJyb3IgcmV0dXJuZWQgYnkgc2tfd2FpdF9kYXRhKCkgd2FzIGFzc2lnbmVkIHRvIHRoZSBpbm5lci1zY29wZWQgdmFyaWFibGUgJ2VycicgaW5zdGVhZCBvZiAnY29waWVkJywgY2F1c2luZyBtcHRjcF9yZWN2bXNnKCkgdG8gcmV0dXJuIDAgaW5zdGVhZCBvZiB0aGUgbmVnYXRpdmUgZXJyb3IgY29kZSB3aGVuIG5vIGRhdGEgaGFkIGJlZW4gY29waWVkIHlldC5cXG5cXG5Cb3RoICdlcnInIGFuZCAnY29waWVkJyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgc2NhbGFyIHZhcmlhYmxlcyAoY29waWVkIGlzIGluaXRpYWxpemVkIHRvIDAsIGFuZCBlcnIgcmVjZWl2ZXMgdGhlIHJldHVybiBjb2RlIGZyb20gc2tfd2FpdF9kYXRhKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlciBhY2Nlc3Nlcy4gQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGVycm9yIGhhbmRsaW5nIGluIG1wdGNwX3JlY3Ztc2coKSBieSBhc3NpZ25pbmcgdGhlIHJldHVybiB2YWx1ZSBvZiBza193YWl0X2RhdGEoKSB0byAnY29waWVkJyBpbnN0ZWFkIG9mICdlcnInLCBlbnN1cmluZyBuZWdhdGl2ZSBlcnJvciBjb2RlcyBhcmUgcHJvcGVybHkgcmV0dXJuZWQgd2hlbiBubyBkYXRhIGhhcyBiZWVuIHJlYWQuIFRoaXMgY2hhbmdlcyBjb250cm9sIGZsb3cgYW5kIHJldHVybiB2YWx1ZXMgaW4gcmVhY2hhYmxlIE1QVENQIHNvY2tldCByZWNlaXZlIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjMzOjM5LjkwMzU5MTQ3N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM0NDQ3NzE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNmI1MjM4MjRlMjgxNGUzMjcwOTk5YzU2MTM1NmI5ZmU1MzcxOWFhNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIFNlcCAxMyAxMDozMzozOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXFxuaW5kZXggMDA5OGUyODMwOTMxOC4uOGRjMjVlZjE1NDJjNSAxMDA2NDRcXG4tLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xcbisrKyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXFxuQEAgLTI0NTksNyArMjQ1OSw3IEBAIHN0YXRpYyBpbnQgbXB0Y3BfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG4gXFx0XFx0bXB0Y3BfY2xlYW51cF9yYnVmKG1zaywgY29waWVkKTtcXG4gXFx0XFx0ZXJyID0gc2tfd2FpdF9kYXRhKHNrLCBcXHUwMDI2dGltZW8sIGxhc3QpO1xcbiBcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbi1cXHRcXHRcXHRlcnIgPSBjb3BpZWQgPyA6IGVycjtcXG4rXFx0XFx0XFx0Y29waWVkID0gY29waWVkID8gOiBlcnI7XFxuIFxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjMzOjQwLjMzODc0OTE5MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjU4MDE3MTM0MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVBUQ1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcHRjcF9yZWN2bXNnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgZXJyb3IgaGFuZGxpbmcgaW4gbXB0Y3BfcmVjdm1zZygpIGJ5IGFzc2lnbmluZyB0aGUgcmV0dXJuIHZhbHVlIG9mIHNrX3dhaXRfZGF0YSgpIHRvICdjb3BpZWQnIGluc3RlYWQgb2YgJ2VycicsIGVuc3VyaW5nIG5lZ2F0aXZlIGVycm9yIGNvZGVzIGFyZSBwcm9wZXJseSByZXR1cm5lZCB3aGVuIG5vIGRhdGEgaGFzIGJlZW4gcmVhZC4gVGhpcyBjaGFuZ2VzIGNvbnRyb2wgZmxvdyBhbmQgcmV0dXJuIHZhbHVlcyBpbiByZWFjaGFibGUgTVBUQ1Agc29ja2V0IHJlY2VpdmUgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2YjUyMzgyNGUyODE0ZTMyNzA5OTljNTYxMzU2YjlmZTUzNzE5YWE1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgMTMgMTA6MzM6MzkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXG5pbmRleCAwMDk4ZTI4MzA5MzE4Li44ZGMyNWVmMTU0MmM1IDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmNcbisrKyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXG5AQCAtMjQ1OSw3ICsyNDU5LDcgQEAgc3RhdGljIGludCBtcHRjcF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuIFx0XHRtcHRjcF9jbGVhbnVwX3JidWYobXNrLCBjb3BpZWQpO1xuIFx0XHRlcnIgPSBza193YWl0X2RhdGEoc2ssIFx1MDAyNnRpbWVvLCBsYXN0KTtcbiBcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuLVx0XHRcdGVyciA9IGNvcGllZCA/IDogZXJyO1xuK1x0XHRcdGNvcGllZCA9IGNvcGllZCA/IDogZXJyO1xuIFx0XHRcdGdvdG8gb3V0X2VycjtcbiBcdFx0fVxuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzM6NDAuMzM4NzUxMzYxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Njk0ODQwNzAwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhpcyBNUFRDUCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBUaGUgZGlmZiBpdHNlbGYgaXMgcHJldHR5IGNvbmNpc2UsIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2Qgc3RhcnQuIEZyb20gdGhlIGNvbnRleHQsIGl0IGxvb2tzIGxpa2Ugd2UncmUgaW4gYG5ldC9tcHRjcC9wcm90b2NvbC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYG1wdGNwX3JlY3Ztc2dgIGZ1bmN0aW9uLiBUaGUga2V5IGxpbmUgc2VlbXMgdG8gYmUgd2hlcmUgdGhleSdyZSBoYW5kbGluZyBlcnJvcnMgYW5kIHRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGR1cmluZyBhIHJlY2VpdmUgb3BlcmF0aW9uLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW50IGJlaGluZCBjaGFuZ2luZyBgZXJyID0gY29waWVkID8gOiBlcnI7YCB0byBgY29waWVkID0gY29waWVkID8gOiBlcnI7YC4gRXNzZW50aWFsbHksIHRoZSBsb2dpYyBpcyBoYW5kbGluZyBhIHBvdGVudGlhbCBlcnJvciBkdXJpbmcgcmVjZWl2ZSBvbiBhbiBNUFRDUCBzb2NrZXQgYW5kIGRlYWxpbmcgd2l0aCBhIHBhcnRpYWwgcmVhZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2h5IHRoZXkndmUgc3dpdGNoZWQgaG93IHRoZSBlcnJvciBpcyBoYW5kbGVkIGluIHRoaXMgc3BlY2lmaWMgY2FzZSwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgY29uZGl0aW9uYWwgYXNzaWdubWVudC5cblxuSSdtIHRoaW5raW5nIHRoaXMgbGlrZWx5IGhhcyBpbXBsaWNhdGlvbnMgZm9yIGhvdyBgY29waWVkYCBpcyBiZWluZyB1c2VkIGRvd25zdHJlYW0uIElzIHRoaXMgbm93IHRoZSAqb25seSogcGxhY2UgYGNvcGllZGAgY291bGQgYmUgc2V0PyBPciBhbSBJIG1pc3Npbmcgc29tZSBzdWJ0bGV0eSBhYm91dCB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBhbmQgdGhlIGVycm9yIHByb3BhZ2F0aW9uIGluIHRoZSBvcmlnaW5hbCBjb2RlPyBUaGlzIGZlZWxzIGxpa2UgaXQgbWlnaHQgYWZmZWN0IGhvdyBwYXJ0aWFsIHJlYWRzIGFyZSByZXBvcnRlZCBvciBob3cgdGhlIHNvY2tldCBzdGF0ZSBpcyBtYWludGFpbmVkIGluIGVycm9yIHNjZW5hcmlvcy5cblxuQmVmb3JlIEkgY2FuIGdpdmUgaXQgYSBmdWxsIHJldmlldywgSSdsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGhvdyB0aGlzIGNoYW5nZSBhZmZlY3RzIHRoZSBvdmVyYWxsIGVycm9yIGhhbmRsaW5nIGxvZ2ljIGFuZCBob3cgdGhlIGBjb3BpZWRgIHZhcmlhYmxlIGlzIHN1YnNlcXVlbnRseSB1c2VkLiBUaGUgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgaW1wcm92ZW1lbnQsIGEgYnVnIGZpeCwgb3IgYSBzdWJ0bGUgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zIHJlbGF0ZWQgdG8gZGF0YSBjb3JydXB0aW9uLCB1bmV4cGVjdGVkIGJlaGF2aW9yIGR1cmluZyBuZXR3b3JrIGlzc3Vlcywgb3IgYSBjaGFuZ2UgaW4gZXhwZWN0ZWQgYmVoYXZpb3IgdG8gdXNlcnNwYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODc1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzM6NDcuMjg3MTYxNDM5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0NDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI0NDA6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjQ0MTpcXHRcXG4yNDQyOlxcdFxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gVENQX0NMT1NFKSB7XFxuMjQ0MzpcXHRcXHRcXHRcXHRcXHRjb3BpZWQgPSAtRU5PVENPTk47XFxuMjQ0NDpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4yNDQ1OlxcdFxcdFxcdFxcdH1cXG4yNDQ2OlxcdFxcbjI0NDc6XFx0XFx0XFx0XFx0aWYgKCF0aW1lbykge1xcbjI0NDg6XFx0XFx0XFx0XFx0XFx0Y29waWVkID0gLUVBR0FJTjtcXG4yNDQ5OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjI0NTA6XFx0XFx0XFx0XFx0fVxcbjI0NTE6XFx0XFxuMjQ1MjpcXHRcXHRcXHRcXHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcXG4yNDUzOlxcdFxcdFxcdFxcdFxcdGNvcGllZCA9IHNvY2tfaW50cl9lcnJubyh0aW1lbyk7XFxuMjQ1NDpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4yNDU1OlxcdFxcdFxcdFxcdH1cXG4yNDU2OlxcdFxcdFxcdH1cXG4yNDU3OlxcdFxcbjI0NTg6XFx0XFx0XFx0cHJfZGVidWcoXFxcImJsb2NrIHRpbWVvdXQgJWxkXFxcXG5cXFwiLCB0aW1lbyk7XFxuMjQ1OTpcXHRcXHRcXHRtcHRjcF9jbGVhbnVwX3JidWYobXNrLCBjb3BpZWQpO1xcbjI0NjA6XFx0XFx0XFx0ZXJyID0gc2tfd2FpdF9kYXRhKHNrLCBcXHUwMDI2dGltZW8sIGxhc3QpO1xcbjI0NjE6XFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4yNDYyOlxcdFxcdFxcdFxcdGNvcGllZCA9IGNvcGllZCA/IDogZXJyO1xcbjI0NjM6XFx0XFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbjI0NjQ6XFx0XFx0XFx0fVxcbjI0NjU6XFx0XFx0fVxcbjI0NjY6XFx0XFxuMjQ2NzpcXHRcXHRtcHRjcF9jbGVhbnVwX3JidWYobXNrLCBjb3BpZWQpO1xcbjI0Njg6XFx0XFxuMjQ2OTpcXHRvdXRfZXJyOlxcbjI0NzA6XFx0XFx0aWYgKGNtc2dfZmxhZ3MgXFx1MDAyNlxcdTAwMjYgY29waWVkIFxcdTAwM2U9IDApIHtcXG4yNDcxOlxcdFxcdFxcdGlmIChjbXNnX2ZsYWdzIFxcdTAwMjYgTVBUQ1BfQ01TR19UUylcXG4yNDcyOlxcdFxcdFxcdFxcdHRjcF9yZWN2X3RpbWVzdGFtcChtc2csIHNrLCBcXHUwMDI2dHNzKTtcXG4yNDczOlxcdFxcbjI0NzQ6XFx0XFx0XFx0aWYgKGNtc2dfZmxhZ3MgXFx1MDAyNiBNUFRDUF9DTVNHX0lOUSkge1xcbjI0NzU6XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGlucSA9IG1wdGNwX2lucV9oaW50KHNrKTtcXG4yNDc2OlxcdFxcbjI0Nzc6XFx0XFx0XFx0XFx0cHV0X2Ntc2cobXNnLCBTT0xfVENQLCBUQ1BfQ01fSU5RLCBzaXplb2YoaW5xKSwgXFx1MDAyNmlucSk7XFxuMjQ3ODpcXHRcXHRcXHR9XFxuMjQ3OTpcXHRcXHR9XFxuMjQ4MDpcXHRcXG4yNDgxOlxcdFxcdHByX2RlYnVnKFxcXCJtc2s9JXAgcnggcXVldWUgZW1wdHk9JWQgY29waWVkPSVkXFxcXG5cXFwiLFxcbjI0ODI6XFx0XFx0XFx0IG1zaywgc2tiX3F1ZXVlX2VtcHR5KFxcdTAwMjZzay1cXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSksIGNvcGllZCk7XFxuMjQ4MzpcXHRcXG4yNDg0OlxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuMjQ4NTpcXHRcXHRyZXR1cm4gY29waWVkO1xcbjI0ODY6XFx0fVxcbjI0ODc6XFx0XFxuMjQ4ODpcXHRzdGF0aWMgdm9pZCBtcHRjcF9yZXRyYW5zbWl0X3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbjI0ODk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozMzo0Ny4yODczODEwOTlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0Njg0MTU4MjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk1QVENQIFZ1bG5lcmFiaWxpdHkgQW5hbHlzaXMqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ20gc2VlaW5nOiB0aGVyZSdzIGEgc3VidGxlIGJ1dCBzaWduaWZpY2FudCBidWcgZml4IGluIHRoZSBNUFRDUCBjb2RlLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBtcHRjcF9yZWN2bXNnKClgLiBJJ20gbG9va2luZyBhdCB0aGlzIGxpbmU6IGBlcnIgPSBza193YWl0X2RhdGEoc2ssIFx1MDAyNnRpbWVvLCBsYXN0KTtgIGFuZCBob3cgdGhlIGVycm9yIGhhbmRsaW5nIGludGVyYWN0cyB3aXRoIHRoZSByZXR1cm4gdmFsdWUuIFByZXZpb3VzbHksIHRoZXkgaGFkIHRoaXMgY29kZTpcblxuYGBgY1xuaWYgKGVyciBcdTAwM2MgMCkge1xuICAgIGVyciA9IGNvcGllZCA/IDogZXJyO1xuICAgIGdvdG8gb3V0X2Vycjtcbn1cbmBgYFxuXG5BbmQgYG91dF9lcnI6YCB0aGVuIGRvZXM6XG5cbmBgYGNcbm91dF9lcnI6XG5cdGlmIChjbXNnX2ZsYWdzIFx1MDAyNlx1MDAyNiBjb3BpZWQgXHUwMDNlPSAwKSB7XG4uLi5cblx0cmVsZWFzZV9zb2NrKHNrKTtcblx0cmV0dXJuIGNvcGllZDtcbmBgYFxuXG5UaGUgcHJvYmxlbSBpcywgdGhlIGNvZGUgd2FzIGFzc2lnbmluZyBgZXJyYCBidXQgKipub3QqKiB1c2luZyBpdC4gVGhlIGZ1bmN0aW9uICphbHdheXMqIHJldHVybnMgYGNvcGllZGAuIElmIGBjb3BpZWRgIHN0YXJ0ZWQgYXQgemVybyBhbmQgYHNrX3dhaXRfZGF0YWAgcmV0dXJuZWQgYW4gZXJyb3IgKGxpa2UgYC1FQUdBSU5gIG9yIGAtRUlOVFJgKSwgdGhlIGNvZGUgaW5jb3JyZWN0bHkgcmV0dXJuZWQgemVybyEgTm93LCB0aGUgZml4IGBjb3BpZWQgPSBjb3BpZWQgPyA6IGVycjtgIGlzIGNvcnJlY3QsIGJlY2F1c2UgaXQgYXNzaWducyBgZXJyYCB0byBgY29waWVkYCBpZiBgY29waWVkYCBpcyB6ZXJvIGFuZCBtYWtlcyBgY29waWVkYCB0byBiZSB0aGUgYWN0dWFsIGVycm9yIGNvZGUuIEJ1dCBpZiBgY29waWVkYCB3YXMgYWxyZWFkeSBncmVhdGVyIHRoYW4gemVybywgaXQga2VlcHMgdGhhdCB2YWx1ZS5cblxuSSBjYW4gY29uZmlybSB0aGF0IHRoZSB2dWxuZXJhYmlsaXR5IGlzIG5vdyBmaXhlZC5cblxuVGhlIGtleSB0aGluZyBpcywgdGhpcyBmaXggbWVhbnMgZXJyb3JzIGFyZSBub3cgcHJvcGVybHkgcHJvcGFnYXRlZCwgaW5zdGVhZCBvZiByZXR1cm5pbmcgYW4gaW5jb3JyZWN0IHZhbHVlLiBUaGlzIGlzIGNyaXRpY2FsIGJlY2F1c2UgYG1wdGNwX3JlY3Ztc2coKWAgaXMgcGFydCBvZiB0aGUgTVBUQ1AgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24sIGFuZCB0aGF0IG1lYW5zIGl0J3MgYSB2dWxuZXJhYmlsaXR5IEkgY291bGQgcG90ZW50aWFsbHkgZXhwbG9pdC5cblxuVGhlIGdvb2QgbmV3cyBpcywgTVBUQ1AgaXMgcmVhY2hhYmxlIHRocm91Z2ggc3RhbmRhcmQgc29ja2V0IGNhbGxzIGxpa2UgYHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19NUFRDUClgIG9yIGBzb2NrZXQoQUZfSU5FVDYsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX01QVENQKWAuIEl0J3MgZnVsbHkgdmlydHVhbGl6ZWQgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwgbmV0d29ya2luZyBzdGFjay5cblxuTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgY29uZmlndXJhdGlvbnMgbmVlZGVkLCBJJ2xsIGdvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgZm9yIE1QVENQIHJlcXVpcmVtZW50cy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTk2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzM6NTEuOTcxNTQyMTU3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MDc4ODkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNUFRDUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXB0Y3BcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL0tjb25maWctMS1cXG5uZXQvbXB0Y3AvS2NvbmZpZzoyOmNvbmZpZyBNUFRDUFxcbm5ldC9tcHRjcC9LY29uZmlnLTMtXFx0Ym9vbCBcXFwiTVBUQ1A6IE11bHRpcGF0aCBUQ1BcXFwiXFxuLS1cXG5uZXQvbXB0Y3AvS2NvbmZpZz0xNj1jb25maWcgSU5FVF9NUFRDUF9ESUFHXFxuLS1cXG5uZXQvbXB0Y3AvS2NvbmZpZy0xOS1cXG5uZXQvbXB0Y3AvS2NvbmZpZzoyMDpjb25maWcgTVBUQ1BfSVBWNlxcbm5ldC9tcHRjcC9LY29uZmlnLTIxLVxcdGJvb2wgXFxcIk1QVENQOiBJUHY2IHN1cHBvcnQgZm9yIE11bHRpcGF0aCBUQ1BcXFwiXFxuLS1cXG5uZXQvbXB0Y3AvS2NvbmZpZy0yNC1cXG5uZXQvbXB0Y3AvS2NvbmZpZzoyNTpjb25maWcgTVBUQ1BfS1VOSVRfVEVTVFxcbm5ldC9tcHRjcC9LY29uZmlnLTI2LVxcdHRyaXN0YXRlIFxcXCJUaGlzIGJ1aWxkcyB0aGUgTVBUQ1AgS1VuaXQgdGVzdHNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzM6NTIuMDI1NjI3ODc5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzYzNzg2MDg3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIE1QVENQIEtlcm5lbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIGBuZXQvbXB0Y3AvS2NvbmZpZ2AuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBmb3IgTXVsdGlQYXRoIFRDUCBpbiB0aGUga2VybmVsLiBJJ20gYXNzdW1pbmcgaXQncyBzdHJ1Y3R1cmVkIGluIHRoZSBzdGFuZGFyZCBLY29uZmlnIGZvcm1hdCwgc28gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTpcblxuKiAgICoqYGNvbmZpZ2Agc3RhdGVtZW50czoqKiBUaGVzZSBhcmUgdGhlIGNvcmUgb3B0aW9ucyB0aGVtc2VsdmVzLiBJIHdhbnQgdG8gc2VlIGEgY2xlYXIgbGlzdC5cbiogICAqKmBkZXBlbmRzIG9uYCBjbGF1c2VzOioqIENydWNpYWwuIFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IElzIE1QVENQJ3MgZnVuY3Rpb25hbGl0eSBjb250aW5nZW50IG9uIG90aGVyIG5ldHdvcmtpbmcgZmVhdHVyZXMgYmVpbmcgZW5hYmxlZD8gQXJlIHRoZXJlIHNwZWNpZmljIGtlcm5lbCBtb2R1bGVzIG9yIGFyY2hpdGVjdHVyZXMgdGhhdCBhcmUgcmVxdWlyZWQ/IEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRob3NlIGRlcGVuZGVuY2llcyB0byB0cm91Ymxlc2hvb3QgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gY29uZmxpY3RzLiBJIHdhbnQgdG8gc2VlIGlmIHRoZSBkZXBlbmRlbmNpZXMgYXJlIHNhbmUsIG9yIGlmIHRoZXJlJ3MgYW55IHN1cnByaXNpbmcgcmVxdWlyZW1lbnQgSSB3b3VsZG4ndCBleHBlY3QuXG4qICAgKipgYm9vbGAsIGB0cmlzdGF0ZWAsIGBzdHJpbmdgLCBgaW50YCBkZWZpbml0aW9uczoqKiBUaGlzIHRlbGxzIG1lIHRoZSB0eXBlIG9mIHRoZSBvcHRpb24uIEkgd2FudCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIGFsbG93YWJsZSB2YWx1ZXMgZm9yIGVhY2ggb3B0aW9uIGFyZSwgaW5jbHVkaW5nIGRlZmF1bHRzLlxuKiAgICoqYGhlbHBgIHNlY3Rpb25zOioqIFRoZXNlIGFyZSBlc3NlbnRpYWwuIEknbSBleHBlY3RpbmcgY29uY2lzZSwgaW5mb3JtYXRpdmUgZGVzY3JpcHRpb25zIG9mIGVhY2ggb3B0aW9uJ3MgcHVycG9zZS4gSSBkb24ndCBuZWVkIGEgdHV0b3JpYWwsIGJ1dCBJIG5lZWQgZW5vdWdoIGNvbnRleHQgdG8gdW5kZXJzdGFuZCB0aGUgcHJhY3RpY2FsIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgYSBnaXZlbiBmZWF0dXJlLiBBcmUgdGhlcmUgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnM/IFBlcmZvcm1hbmNlIHRyYWRlLW9mZnM/XG4qICAgKipgc2VsZWN0YCBzdGF0ZW1lbnRzOioqIEFueSBvcHRpb25zIHRoYXQgYXJlIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCAoc2VsZWN0ZWQpIGJ5IG90aGVycz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHRyYW5zaXRpdmUgY2xvc3VyZSBvZiB0aG9zZSBzZWxlY3Rpb25zLlxuKiAgICoqYGRlZmF1bHRgIHZhbHVlczoqKiBBcmUgdGhlcmUgc2Vuc2libGUgZGVmYXVsdHMsIG9yIGRvIEkgbmVlZCB0byBleHBsaWNpdGx5IHNldCB0aGluZ3M/IEkgbmVlZCB0byBjaGVjayBmb3IgYW55IGNvbmZpZ3VyYXRpb25zIHRoYXQgZGV2aWF0ZSBmcm9tIGJlc3QgcHJhY3RpY2VzLlxuKiAgICoqQ29uZGl0aW9uYWwgYmxvY2tzOioqIEknbSBleHBlY3Rpbmcgc29tZSBwbGF0Zm9ybS1zcGVjaWZpYyBvciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uZmlndXJhdGlvbnMuIFRoZSBwcmVzZW5jZSBvZiBjb25kaXRpb25hbHMgaXMgcXVpdGUgY29tbW9uIGluIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGVuYWJsZWQgZm9yIG15IHBsYXRmb3JtLlxuKiAgICoqQ29tbWVudHM6KiogSG9wZWZ1bGx5LCB0aGVyZSBhcmUgc29tZSB3ZWxsLXBsYWNlZCBjb21tZW50cy5cbiogICAqKldhcm5pbmdzL0Vycm9yczoqKiBJZiB0aGVyZSBhcmUgYW55LCBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhleSdyZSBzZXQuXG5JJ2xsIGFsc28ga2VlcCBhbiBleWUgb3V0IGZvciBhbnkgdW51c3VhbCBvciB2ZW5kb3Itc3BlY2lmaWMgb3B0aW9ucyB0aGF0IG1heSBiZSBpbmNsdWRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgdXNlLCBhbmQgbWFrZSBzdXJlIHRoYXQgYW55IGN1c3RvbSBleHRlbnNpb25zIGRvbid0IGNvbmZsaWN0IHdpdGggbW9yZSBzdGFuZGFyZCBjb25maWd1cmF0aW9ucy5cbkJhc2ljYWxseSwgbXkgZ29hbCBpcyB0byBidWlsZCBhIGNvbXBsZXRlLCBtZW50YWwgbW9kZWwgb2YgdGhlIE1QVENQIGNvbmZpZ3VyYXRpb24gc3BhY2UsIHNvIEkgY2FuIGNvbmZpZGVudGx5IGVuYWJsZSwgZGlzYWJsZSwgYW5kIHR1bmUgaXQgZm9yIG15IHNwZWNpZmljIHVzZSBjYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzgwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzM6NTUuNjYzNDkxOTM3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY4NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21wdGNwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHRcXG4gICAyOlxcdGNvbmZpZyBNUFRDUFxcbiAgIDM6XFx0XFx0Ym9vbCBcXFwiTVBUQ1A6IE11bHRpcGF0aCBUQ1BcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA1OlxcdFxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbiAgIDY6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XFxuICAgNzpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBNdWx0aXBhdGggVENQIChNUFRDUCkgY29ubmVjdGlvbnMgc2VuZCBhbmQgcmVjZWl2ZSBkYXRhIG92ZXIgbXVsdGlwbGVcXG4gIDEwOlxcdFxcdCAgc3ViZmxvd3MgaW4gb3JkZXIgdG8gdXRpbGl6ZSBtdWx0aXBsZSBuZXR3b3JrIHBhdGhzLiBFYWNoIHN1YmZsb3dcXG4gIDExOlxcdFxcdCAgdXNlcyB0aGUgVENQIHByb3RvY29sLCBhbmQgVENQIG9wdGlvbnMgY2FycnkgaGVhZGVyIGluZm9ybWF0aW9uIGZvclxcbiAgMTI6XFx0XFx0ICBNUFRDUC5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0aWYgTVBUQ1BcXG4gIDE1OlxcdFxcbiAgMTY6XFx0Y29uZmlnIElORVRfTVBUQ1BfRElBR1xcbiAgMTc6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUX0RJQUdcXG4gIDE4OlxcdFxcdGRlZl90cmlzdGF0ZSBJTkVUX0RJQUdcXG4gIDE5OlxcdFxcbiAgMjA6XFx0Y29uZmlnIE1QVENQX0lQVjZcXG4gIDIxOlxcdFxcdGJvb2wgXFxcIk1QVENQOiBJUHY2IHN1cHBvcnQgZm9yIE11bHRpcGF0aCBUQ1BcXFwiXFxuICAyMjpcXHRcXHRkZXBlbmRzIG9uIElQVjY9eVxcbiAgMjM6XFx0XFx0ZGVmYXVsdCB5XFxuICAyNDpcXHRcXG4gIDI1OlxcdGNvbmZpZyBNUFRDUF9LVU5JVF9URVNUXFxuICAyNjpcXHRcXHR0cmlzdGF0ZSBcXFwiVGhpcyBidWlsZHMgdGhlIE1QVENQIEtVbml0IHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICAyNzpcXHRcXHRkZXBlbmRzIG9uIEtVTklUXFxuICAyODpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgMjk6XFx0XFx0aGVscFxcbiAgMzA6XFx0XFx0ICBDdXJyZW50bHkgY292ZXJzIHRoZSBNUFRDUCBjcnlwdG8gYW5kIHRva2VuIGhlbHBlcnMuXFxuICAzMTpcXHRcXHQgIE9ubHkgdXNlZnVsIGZvciBrZXJuZWwgZGV2cyBydW5uaW5nIEtVbml0IHRlc3QgaGFybmVzcyBhbmQgYXJlIG5vdFxcbiAgMzI6XFx0XFx0ICBmb3IgaW5jbHVzaW9uIGludG8gYSBwcm9kdWN0aW9uIGJ1aWxkLlxcbiAgMzM6XFx0XFxuICAzNDpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwgcGxlYXNlIHJlZmVyXFxuICAzNTpcXHRcXHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uIGluIERvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0Ly5cXG4gIDM2OlxcdFxcbiAgMzc6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMzg6XFx0XFxuICAzOTpcXHRlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozMzo1NS42NjM1NjExMDdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNzczMzY4NzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIE1QVENQIFNvdXJjZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgcHJvdG9jb2wuY2AgaXMgY29tcGlsZWQgd2l0aGluIHRoZSBNUFRDUCBmcmFtZXdvcmsuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgYG5ldC9tcHRjcC9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSB0aGUgYnVpbGQgaW5zdHJ1Y3Rpb25zIGFyZSBtb3N0IGxpa2VseSBkZWZpbmVkLiBUaGUgTWFrZWZpbGUgc2hvdWxkIGNsZWFybHkgc3BlY2lmeSB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3IgZGVwZW5kZW5jaWVzIGFyZSByZXF1aXJlZCB0byBpbmNsdWRlIGBwcm90b2NvbC5jYCBpbiB0aGUgZmluYWwgYnVpbGQuIFRpbWUgdG8gY29uZmlybSB0aGUgYnVpbGQgZGVwZW5kZW5jaWVzLiBJIHdpbGwgbWFrZSBzdXJlIHRoZSBjb21waWxhdGlvbiBjb21tYW5kIGZvciBgcHJvdG9jb2wuY2AgaXMgY2xlYXJseSB2aXNpYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDc0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozMzo1Ny40MzY5MzM4NTdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21wdGNwL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0b2JqLSQoQ09ORklHX01QVENQKSArPSBtcHRjcC5vXFxuICAgMzpcXHRcXG4gICA0OlxcdG1wdGNwLXkgOj0gcHJvdG9jb2wubyBzdWJmbG93Lm8gb3B0aW9ucy5vIHRva2VuLm8gY3J5cHRvLm8gY3RybC5vIHBtLm8gZGlhZy5vIFxcXFxcXG4gICA1OlxcdFxcdCAgIG1pYi5vIHBtX25ldGxpbmsubyBzb2Nrb3B0Lm8gcG1fdXNlcnNwYWNlLm8gZmFzdG9wZW4ubyBzY2hlZC5vIFxcXFxcXG4gICA2OlxcdFxcdCAgIG1wdGNwX3BtX2dlbi5vIHBtX2tlcm5lbC5vXFxuICAgNzpcXHRcXG4gICA4OlxcdG9iai0kKENPTkZJR19TWU5fQ09PS0lFUykgKz0gc3luY29va2llcy5vXFxuICAgOTpcXHRvYmotJChDT05GSUdfSU5FVF9NUFRDUF9ESUFHKSArPSBtcHRjcF9kaWFnLm9cXG4gIDEwOlxcdFxcbiAgMTE6XFx0bXB0Y3BfY3J5cHRvX3Rlc3Qtb2JqcyA6PSBjcnlwdG9fdGVzdC5vXFxuICAxMjpcXHRtcHRjcF90b2tlbl90ZXN0LW9ianMgOj0gdG9rZW5fdGVzdC5vXFxuICAxMzpcXHRvYmotJChDT05GSUdfTVBUQ1BfS1VOSVRfVEVTVCkgKz0gbXB0Y3BfY3J5cHRvX3Rlc3QubyBtcHRjcF90b2tlbl90ZXN0Lm9cXG4gIDE0OlxcdFxcbiAgMTU6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGYub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozMzo1Ny40MzY5OTk3MDdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjM4MTg0NTg5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1QVENQIFJlY2VpdmUgTWVzc2FnZSBGdW5jdGlvbioqXG5cbk9rYXksIHNvIGBwcm90b2NvbC5vYCBnZXRzIGNvbXBpbGVkIG9ubHkgd2hlbiBNUFRDUCBpcyBlbmFibGVkLCBpbmRpY2F0ZWQgYnkgYENPTkZJR19NUFRDUD15YCwgYW5kIHRoYXQncyBkZXBlbmRlbnQgb24gYElORVRgLiBHb3QgaXQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBNUFRDUCByZWNlaXZlIG1lc3NhZ2UgZnVuY3Rpb24sIGBtcHRjcF9yZWN2bXNnYCwgd29ya3MuIExldCdzIHNlZS4uLiBJcyBpdCBzdGF0aWM/IFllcywgdGhlIGRlZmluaXRpb24gc2hvd3MgaXQncyBgc3RhdGljIGludCBtcHRjcF9yZWN2bXNnKC4uLilgLiBUaGF0IGxpbWl0cyBpdHMgc2NvcGUsIHdoaWNoIGlzIHR5cGljYWwgZm9yIGludGVybmFsIGZ1bmN0aW9ucy5cblxuTmV4dCwgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgbXB0Y3BfcmVjdm1zZ2AgaXMgYWN0dWFsbHkgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBwcm90b2NvbCBvcGVyYXRpb25zLCBpLmUuLCBpcyBpdCBpbiB0aGUgc3ltYm9sIHRhYmxlIHNvbWVob3c/IElzIGl0IGNhbGxhYmxlIHZpYSBgcHJvdG9fb3BzYD8gVGhhdCdzIHdoYXQgSSByZWFsbHkgbmVlZCB0byBhc2NlcnRhaW4uIFRpbWUgdG8gY2hlY2sgaXRzIHVzYWdlIHdpdGhpbiBgbmV0L21wdGNwL3Byb3RvY29sLmNgIHRvIHNlZSBob3cgaXQncyBhY3R1YWxseSByZWZlcmVuY2VkLiBMb29raW5nIGZvciBjYWxsIHNpdGVzIHdpbGwgZ2l2ZSB0aGUgY2xlYXJlc3QgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk2NiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjMzOjU5LjgxODg0ODQ2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjE2MzAzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF9yZWN2bXNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcHJvdG9jb2wuYz0yMTM4PXN0YXRpYyB2b2lkIG1wdGNwX2VhdF9yZWN2X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMTQ4LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIxNDk6c3RhdGljIGludCBfX21wdGNwX3JlY3Ztc2dfbXNrcShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMTUwLVxcdFxcdFxcdFxcdHNpemVfdCBsZW4sIGludCBmbGFncywgaW50IGNvcGllZF90b3RhbCxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTIzNTU9c3RhdGljIHVuc2lnbmVkIGludCBtcHRjcF9pbnFfaGludChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMzc1LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIzNzY6c3RhdGljIGludCBtcHRjcF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIzNzctXFx0XFx0XFx0IGludCBmbGFncylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI0MDgtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MjQwOTpcXHRcXHRieXRlc19yZWFkID0gX19tcHRjcF9yZWN2bXNnX21za3Eoc2ssIG1zZywgbGVuIC0gY29waWVkLCBmbGFncyxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNDEwLVxcdFxcdFxcdFxcdFxcdFxcdCAgY29waWVkLCBcXHUwMDI2dHNzLCBcXHUwMDI2Y21zZ19mbGFncyxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTQyMjI9c3RhdGljIHN0cnVjdCBwcm90byBtcHRjcF9wcm90ID0ge1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNDIzNC1cXHQuaW9jdGxcXHRcXHQ9IG1wdGNwX2lvY3RsLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjQyMzU6XFx0LnJlY3Ztc2dcXHQ9IG1wdGNwX3JlY3Ztc2csXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNDIzNi1cXHQucmVsZWFzZV9jYlxcdD0gbXB0Y3BfcmVsZWFzZV9jYixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzM6NTkuODcxMDE3ODUxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjYxNzIyNDg5OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTVBUQ1AgRXJyb3IgSGFuZGxpbmcgaW4gcmVjdm1zZzogQSBGdXp6aW5nIFRhcmdldCoqXG5cbk9rYXksIHNvIGBtcHRjcF9yZWN2bXNnYCBpcyB0aGUgY3J1Y2lhbCBgcmVjdm1zZ2AgaGFuZGxlciBmb3IgdGhlIE1QVENQIHByb3RvY29sLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgYSByZWFsLCBub24taW5saW5lZCBmdW5jdGlvbiwgYW5kIGEgcXVpY2sgY2hlY2sgb2YgYHZtbGludXhgIGNvbmZpcm1zIGl0OyBgbXB0Y3BfcmVjdm1zZ2AgaXMgYSB2YWxpZCwgYWRkcmVzc2FibGUgZnVuY3Rpb24gdXNlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgd2l0aGluIGBzdHJ1Y3QgcHJvdG8gbXB0Y3BfcHJvdGAuXG5cbk5vdywgbGV0J3MgZXZhbHVhdGUgdGhpcyBiYXNlZCBvbiB0aGUgY3JpdGVyaWEuXG5cbkZpcnN0LCB0aGUgY29yZSB0cmlhZ2UgcGhpbG9zb3BoeS4gUmVhY2hhYmlsaXR5IGlzIHRoZSBrZXkuIE1QVENQIGlzIGRlZmluaXRpdmVseSByZWFjaGFibGUgaW4gYSBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudCB1c2luZyB2aXJ0dWFsIG5ldHdvcmtpbmcsIGxvb3BiYWNrLCBhbmQgc3RhbmRhcmQgc29ja2V0IG9wZXJhdGlvbnMuIFRoYXQgY2hlY2tzIG91dC4gVGhlIHBhdGNoIGl0c2VsZiBkaXJlY3RseSBtb2RpZmllcyBleGVjdXRhYmxlIGxvZ2ljICp3aXRoaW4qIGBtcHRjcF9yZWN2bXNnYC4gU3BlY2lmaWNhbGx5LCB0aGUgZXJyb3IgaGFuZGxpbmcgZnJvbSBgc2tfd2FpdF9kYXRhYCB3YXMgZmF1bHR5LiBUaGUgcHJldmlvdXMgY29kZSB3YXMgZmFpbGluZyB0byBwcm9wYWdhdGUgdGhlIGNvcnJlY3QgZXJyb3IgY29kZSB0byB0aGUgY2FsbGVyLCBwb3RlbnRpYWxseSByZXR1cm5pbmcgMCBpbnN0ZWFkIG9mIHRoZSByZWFsIGVycm9yIHdoZW4gYHNrX3dhaXRfZGF0YSgpYCBmYWlsZWQgb3IgdGltZWQgb3V0LiBUaGlzIHBhdGNoIGZpeGVzIHRoaXMgYnkgZW5zdXJpbmcgdGhlIGNvcnJlY3QgZXJyb3IgY29kZSBpcyByZXR1cm5lZC4gU2luY2UgdGhpcyBpcyBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbSAoYG5ldC9tcHRjcC9gKSBhbmQgaXQncyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpdCdzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gV29ydGhGdXp6aW5nPXRydWUuXG5cbk5leHQsIGZvY3VzIHN5bWJvbHMuIGBtcHRjcF9yZWN2bXNnYCBpcyAqdGhlKiBmdW5jdGlvbiBtb2RpZmllZCBpbiB0aGlzIHBhdGNoLiBBbmQgaXQgKmFwcGVhcnMqIHRvIGJlIHRoZSAqb25seSogb25lLiBOb3csIGlzIGBtcHRjcF9yZWN2bXNnYCBhIHViaXF1aXRvdXMgZnVuY3Rpb24/IE5vLCBpdCdzIG5vdC4gSXQncyBzcGVjaWZpY2FsbHkgdGllZCB0byBNUFRDUCBzb2NrZXRzIChJUFBST1RPX01QVENQKS4gU28gdGhlIGZvY3VzIHN5bWJvbHMgYXJlIGNsZWFybHkgYFtcIm1wdGNwX3JlY3Ztc2dcIl1gLlxuXG5Nb3Zpbmcgb24gdG8gZW5hYmxlIGNvbmZpZ3MuIFdlIG5lZWQgYE1QVENQYCwgd2hpY2ggZGVwZW5kcyBvbiBgSU5FVGAuICBgSU5FVGAgaXMgc3RhbmRhcmQsIHNvIGxldCdzIGZvY3VzIG9uIGBNUFRDUGAgc3BlY2lmaWNhbGx5IGJlY2F1c2UgaXTigJlzIHRoZSBmZWF0dXJlIGNvbmZpZ3VyYXRpb24uIEFueSBvdGhlciBkZXBlbmRlbmNpZXM/IFRoZSBkZXBlbmRlbmNpZXMgYXJlIGBzZWxlY3QgU0tCX0VYVEVOU0lPTlNgLCBgc2VsZWN0IENSWVBUT19MSUJfU0hBMjU2YCwgYW5kIGBzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU2AuIFdlIGFyZSBvbmx5IGVuYWJsaW5nIGBNUFRDUGAsIHNvIHRoZSBjb25maWdzIGFyZSBgW1wiTVBUQ1BcIl1gLlxuXG5GaW5hbGx5LCB0aGUgcmVhc29uaW5nLiBJbiBzaG9ydCwgdGhlIHBhdGNoIGNvcnJlY3RzIGVycm9yIHJlcG9ydGluZyBpbiBgbXB0Y3BfcmVjdm1zZygpYC4gQW4gZXJyb3IgZnJvbSBgc2tfd2FpdF9kYXRhKClgIHdhcyBiZWluZyBkaXNjYXJkZWQsIGxlYWRpbmcgdG8gaW5jb3JyZWN0IHJldHVybiB2YWx1ZXMgZnJvbSBgcmVjdm1zZygpYC4gVGhpcyBwYXRjaCB3aWxsIGFsbG93IGVycm9yIGNvZGVzIHRvIGJlIGNvcnJlY3RseSBwcm9wYWdhdGVkIGZyb20gYG1wdGNwX3JlY3Ztc2coKWAsIGFsbG93aW5nIGVkZ2UgY2FzZSBmYWlsdXJlcyB0byBiZSBzdXJmYWNlZCBhbmQgZXhwb3NlZCB0byB0aGUgc29ja2V0IGNhbGxzLiBUaGlzIGlzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaW4gdGhlIE1QVENQIG5ldHdvcmtpbmcgc3Vic3lzdGVtLCByZWFjaGFibGUgdGhyb3VnaCBzdGFuZGFyZCBzb2NrZXQgY2FsbHMuIFRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgbWVyaXRzIGZ1enppbmcgdG8gYXNzZXNzIE1QVENQIHNvY2tldCByZWNlaXZlIGJlaGF2aW9yIGFuZCBpZGVudGlmeSBhbnkgcmVtYWluaW5nIGVkZ2UgY2FzZXMuXG5cbkV2ZXJ5dGhpbmcgc2VlbXMgbG9naWNhbGx5IHNvdW5kLCBzbyBpdCdzIHRpbWUgdG8gaW52b2tlIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MDIsIk91dHB1dFRva2VucyI6MTA3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM0OjA2LjA0MzI3MDIyMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3MTg3NTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNUFRDUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1wdGNwX3JlY3Ztc2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBlcnJvciBoYW5kbGluZyBpbiBtcHRjcF9yZWN2bXNnKCkgYnkgYXNzaWduaW5nIHRoZSByZXR1cm4gdmFsdWUgb2Ygc2tfd2FpdF9kYXRhKCkgdG8gJ2NvcGllZCcgaW5zdGVhZCBvZiAnZXJyJywgZW5zdXJpbmcgbmVnYXRpdmUgZXJyb3IgY29kZXMgYXJlIHByb3Blcmx5IHJldHVybmVkIHdoZW4gbm8gZGF0YSBoYXMgYmVlbiByZWFkLiBUaGlzIGNoYW5nZXMgY29udHJvbCBmbG93IGFuZCByZXR1cm4gdmFsdWVzIGluIHJlYWNoYWJsZSBNUFRDUCBzb2NrZXQgcmVjZWl2ZSBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1QVENQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXB0Y3BfcmVjdm1zZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGVycm9yIGhhbmRsaW5nIGluIG1wdGNwX3JlY3Ztc2coKSBieSBhc3NpZ25pbmcgdGhlIHJldHVybiB2YWx1ZSBvZiBza193YWl0X2RhdGEoKSB0byAnY29waWVkJyBpbnN0ZWFkIG9mICdlcnInLCBlbnN1cmluZyBuZWdhdGl2ZSBlcnJvciBjb2RlcyBhcmUgcHJvcGVybHkgcmV0dXJuZWQgd2hlbiBubyBkYXRhIGhhcyBiZWVuIHJlYWQuIFRoaXMgY2hhbmdlcyBjb250cm9sIGZsb3cgYW5kIHJldHVybiB2YWx1ZXMgaW4gcmVhY2hhYmxlIE1QVENQIHNvY2tldCByZWNlaXZlIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM0OjA2LjE0MDQ2NjgyNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA2OTY2MzkzODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNDowNi4xNDEwOTM4MDZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2MDY5NjAwNzUyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByZXR1cm4gdmFsdWUgYnVnIGluIG1wdGNwX3JlY3Ztc2coKSB3aGVyZSBhbiBlcnJvciByZXR1cm5lZCBieSBza193YWl0X2RhdGEoKSB3YXMgYXNzaWduZWQgdG8gdGhlIGlubmVyLXNjb3BlZCB2YXJpYWJsZSAnZXJyJyBpbnN0ZWFkIG9mICdjb3BpZWQnLCBjYXVzaW5nIG1wdGNwX3JlY3Ztc2coKSB0byByZXR1cm4gMCBpbnN0ZWFkIG9mIHRoZSBuZWdhdGl2ZSBlcnJvciBjb2RlIHdoZW4gbm8gZGF0YSBoYWQgYmVlbiBjb3BpZWQgeWV0LlxcblxcbkJvdGggJ2VycicgYW5kICdjb3BpZWQnIGFyZSBmdWxseSBpbml0aWFsaXplZCBzY2FsYXIgdmFyaWFibGVzIChjb3BpZWQgaXMgaW5pdGlhbGl6ZWQgdG8gMCwgYW5kIGVyciByZWNlaXZlcyB0aGUgcmV0dXJuIGNvZGUgZnJvbSBza193YWl0X2RhdGEpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIGFjY2Vzc2VzLiBCZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmI1MjM4MjRlMjgxNGUzMjcwOTk5YzU2MTM1NmI5ZmU1MzcxOWFhNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDEzIDEwOjMzOjM5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuaW5kZXggMDA5OGUyODMwOTMxOC4uOGRjMjVlZjE1NDJjNSAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXG4rKysgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuQEAgLTI0NTksNyArMjQ1OSw3IEBAIHN0YXRpYyBpbnQgbXB0Y3BfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbiBcdFx0bXB0Y3BfY2xlYW51cF9yYnVmKG1zaywgY29waWVkKTtcbiBcdFx0ZXJyID0gc2tfd2FpdF9kYXRhKHNrLCBcdTAwMjZ0aW1lbywgbGFzdCk7XG4gXHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbi1cdFx0XHRlcnIgPSBjb3BpZWQgPyA6IGVycjtcbitcdFx0XHRjb3BpZWQgPSBjb3BpZWQgPyA6IGVycjtcbiBcdFx0XHRnb3RvIG91dF9lcnI7XG4gXHRcdH1cbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM0OjA2LjE0MTA5NTI0NloiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1NDg5MjQzODE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTVBUQ1AgUmVjZWl2ZSBQYXRoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UgaW4gYG5ldC9tcHRjcC9wcm90b2NvbC5jYC4gVGhlIGRpZmYgaXRzZWxmIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCDigJMgYSBzbWFsbCBtb2RpZmljYXRpb24gYXJvdW5kIGxpbmUgMjQ1OSB3aXRoaW4gdGhlIGBtcHRjcF9yZWN2bXNnYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSBpdCdzIGluIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoLCBwb3RlbnRpYWxseSBkZWFsaW5nIHdpdGggdGhlIHJldHVybiB2YWx1ZSBmcm9tIGBza193YWl0X2RhdGFgLlxuXG5TcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2UgdGhlIG9yaWdpbmFsIGNvZGUgcG90ZW50aWFsbHkgb3ZlcndyaXRlcyBhIHZhbHVlIHdpdGggYW4gZXJyb3IgY29kZSB3aGVuIHRoZSBgc2tfd2FpdF9kYXRhYCBjYWxsIGZhaWxzLCBldmVuIGlmIHNvbWUgZGF0YSBoYWQgYmVlbiBjb3BpZWQgcHJpb3IgdG8gdGhlIGVycm9yLiBUaGUgdXBkYXRlZCBjb2RlIG5vdyBzZWVtcyB0byBwcmlvcml0aXplIHRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGlmIHRoZSBjb3B5IGhhcyBoYXBwZW5lZCwgYW5kIG9ubHkgcmV0dXJucyB0aGUgZXJyb3IgaWYgdGhlcmUgd2VyZSBubyBieXRlcyBjb3BpZWQuXG5cblRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJIHNob3VsZCByZWFsbHkgdXNlIGByZWFkLWZpbGVgIHRvIGV4YW1pbmUgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYG1wdGNwX2NsZWFudXBfcmJ1ZmAgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhpcyBzZWN0aW9uLCBhbmQgZXhhY3RseSBob3cgdGhlIGBjb3BpZWRgIHZhcmlhYmxlIGlzIGJlaW5nIHVzZWQgdXBzdHJlYW0uIEkgbmVlZCB0byBzZWUgd2hhdCdzIGhhcHBlbmluZyBqdXN0IGJlZm9yZSBhbmQgYWZ0ZXIgdGhpcyBwb2ludC4gVGhpcyBjaGFuZ2UgbWlnaHQgYmUgcmVsYXRlZCB0byBob3cgd2UgaGFuZGxlIHBhcnRpYWwgcmVhZHMgb3IgdGltZW91dHMgaW4gdGhlIE1QVENQIHJlY2VpdmUgcGF0aCwgYW5kIEkgbmVlZCB0byBhc3Nlc3MgaG93IHRoZSBvdmVyYWxsIGJlaGF2aW9yIG9mIHRoZSBmdW5jdGlvbiwgYW5kIG9mIHRoZSBtb2R1bGUsIHdpbGwgYmUgYWZmZWN0ZWQuIFRoZSBlcnJvciBoYW5kbGluZyBsb29rcyBhIGxpdHRsZSBkaWZmZXJlbnQsIGFuZCBJIHdhbnQgdG8gdmVyaWZ5IHRoZXJlIGFyZSBubyB1bmludGVuZGVkIHNpZGUgZWZmZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM0OjExLjYzMDM0MTUxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MTg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbXB0Y3AvcHJvdG9jb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDQwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNDQwOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjI0NDE6XFx0XFxuMjQ0MjpcXHRcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9DTE9TRSkge1xcbjI0NDM6XFx0XFx0XFx0XFx0XFx0Y29waWVkID0gLUVOT1RDT05OO1xcbjI0NDQ6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjQ0NTpcXHRcXHRcXHRcXHR9XFxuMjQ0NjpcXHRcXG4yNDQ3OlxcdFxcdFxcdFxcdGlmICghdGltZW8pIHtcXG4yNDQ4OlxcdFxcdFxcdFxcdFxcdGNvcGllZCA9IC1FQUdBSU47XFxuMjQ0OTpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4yNDUwOlxcdFxcdFxcdFxcdH1cXG4yNDUxOlxcdFxcbjI0NTI6XFx0XFx0XFx0XFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XFxuMjQ1MzpcXHRcXHRcXHRcXHRcXHRjb3BpZWQgPSBzb2NrX2ludHJfZXJybm8odGltZW8pO1xcbjI0NTQ6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjQ1NTpcXHRcXHRcXHRcXHR9XFxuMjQ1NjpcXHRcXHRcXHR9XFxuMjQ1NzpcXHRcXG4yNDU4OlxcdFxcdFxcdHByX2RlYnVnKFxcXCJibG9jayB0aW1lb3V0ICVsZFxcXFxuXFxcIiwgdGltZW8pO1xcbjI0NTk6XFx0XFx0XFx0bXB0Y3BfY2xlYW51cF9yYnVmKG1zaywgY29waWVkKTtcXG4yNDYwOlxcdFxcdFxcdGVyciA9IHNrX3dhaXRfZGF0YShzaywgXFx1MDAyNnRpbWVvLCBsYXN0KTtcXG4yNDYxOlxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuMjQ2MjpcXHRcXHRcXHRcXHRjb3BpZWQgPSBjb3BpZWQgPyA6IGVycjtcXG4yNDYzOlxcdFxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4yNDY0OlxcdFxcdFxcdH1cXG4yNDY1OlxcdFxcdH1cXG4yNDY2OlxcdFxcbjI0Njc6XFx0XFx0bXB0Y3BfY2xlYW51cF9yYnVmKG1zaywgY29waWVkKTtcXG4yNDY4OlxcdFxcbjI0Njk6XFx0b3V0X2VycjpcXG4yNDcwOlxcdFxcdGlmIChjbXNnX2ZsYWdzIFxcdTAwMjZcXHUwMDI2IGNvcGllZCBcXHUwMDNlPSAwKSB7XFxuMjQ3MTpcXHRcXHRcXHRpZiAoY21zZ19mbGFncyBcXHUwMDI2IE1QVENQX0NNU0dfVFMpXFxuMjQ3MjpcXHRcXHRcXHRcXHR0Y3BfcmVjdl90aW1lc3RhbXAobXNnLCBzaywgXFx1MDAyNnRzcyk7XFxuMjQ3MzpcXHRcXG4yNDc0OlxcdFxcdFxcdGlmIChjbXNnX2ZsYWdzIFxcdTAwMjYgTVBUQ1BfQ01TR19JTlEpIHtcXG4yNDc1OlxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBpbnEgPSBtcHRjcF9pbnFfaGludChzayk7XFxuMjQ3NjpcXHRcXG4yNDc3OlxcdFxcdFxcdFxcdHB1dF9jbXNnKG1zZywgU09MX1RDUCwgVENQX0NNX0lOUSwgc2l6ZW9mKGlucSksIFxcdTAwMjZpbnEpO1xcbjI0Nzg6XFx0XFx0XFx0fVxcbjI0Nzk6XFx0XFx0fVxcbjI0ODA6XFx0XFxuMjQ4MTpcXHRcXHRwcl9kZWJ1ZyhcXFwibXNrPSVwIHJ4IHF1ZXVlIGVtcHR5PSVkIGNvcGllZD0lZFxcXFxuXFxcIixcXG4yNDgyOlxcdFxcdFxcdCBtc2ssIHNrYl9xdWV1ZV9lbXB0eShcXHUwMDI2c2stXFx1MDAzZXNrX3JlY2VpdmVfcXVldWUpLCBjb3BpZWQpO1xcbjI0ODM6XFx0XFxuMjQ4NDpcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbjI0ODU6XFx0XFx0cmV0dXJuIGNvcGllZDtcXG4yNDg2OlxcdH1cXG4yNDg3OlxcdFxcbjI0ODg6XFx0c3RhdGljIHZvaWQgbXB0Y3BfcmV0cmFuc21pdF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4yNDg5OlxcdHtcXG4yNDkwOlxcdFxcdHN0cnVjdCBzb2NrICpzayA9IHRpbWVyX2NvbnRhaW5lcl9vZihzaywgdCwgbXB0Y3BfcmV0cmFuc21pdF90aW1lcik7XFxuMjQ5MTpcXHRcXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xcbjI0OTI6XFx0XFxuMjQ5MzpcXHRcXHRiaF9sb2NrX3NvY2soc2spO1xcbjI0OTQ6XFx0XFx0aWYgKCFzb2NrX293bmVkX2J5X3VzZXIoc2spKSB7XFxuMjQ5NTpcXHRcXHRcXHQvKiB3ZSBuZWVkIGEgcHJvY2VzcyBjb250ZXh0IHRvIHJldHJhbnNtaXQgKi9cXG4yNDk2OlxcdFxcdFxcdGlmICghdGVzdF9hbmRfc2V0X2JpdChNUFRDUF9XT1JLX1JUWCwgXFx1MDAyNm1zay1cXHUwMDNlZmxhZ3MpKVxcbjI0OTc6XFx0XFx0XFx0XFx0bXB0Y3Bfc2NoZWR1bGVfd29yayhzayk7XFxuMjQ5ODpcXHRcXHR9IGVsc2Uge1xcbjI0OTk6XFx0XFx0XFx0LyogZGVsZWdhdGUgb3VyIHdvcmsgdG8gdGNwX3JlbGVhc2VfY2IoKSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNDoxMS42MzA2MjU0MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMDQyMzI1MDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBtcHRjcF9yZWN2bXNnOiBFcnJvciBIYW5kbGluZyBhbmQgRGF0YSBUcmFuc2ZlcioqXG5cbkFscmlnaHQsIGxldCdzIGRpc3NlY3QgYG1wdGNwX3JlY3Ztc2dgIGZyb20gdGhlIGdyb3VuZCB1cCwgZm9jdXNpbmcgc3BlY2lmaWNhbGx5IG9uIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBgZXJyYCBhbmQgYGNvcGllZGAuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGVzZSB2YXJpYWJsZXMgYXJlIHVzZWQgdGhyb3VnaG91dCB0aGUgZnVuY3Rpb24ncyBleGVjdXRpb24uIFRoaXMgaXMgY29yZSB0byB1bmRlcnN0YW5kaW5nIGl0cyByZWxpYWJpbGl0eSBhbmQgZXJyb3IgcmVwb3J0aW5nLiBJ4oCZbSB0aGlua2luZyBhYm91dCBob3cgZXJyb3JzIGFyZSBzaWduYWxlZCBhbmQgaG93IG11Y2ggZGF0YSBnZXRzIHRyYW5zZmVycmVkIGluIGRpZmZlcmVudCBzY2VuYXJpb3MuIElzIGBlcnJgIGJlaW5nIHVzZWQgdG8gaW5kaWNhdGUgcGFydGlhbCByZWFkcyBkdWUgdG8gZXJyb3JzLCBvciBkb2VzIGl0IG9ubHkgZmxhZyBjb21wbGV0ZSBmYWlsdXJlcz8gQW5kIGhvdyBkb2VzIGBjb3BpZWRgIHRyYWNrIHRoZSBhbW91bnQgb2YgZGF0YSBzdWNjZXNzZnVsbHkgcGxhY2VkIGluIHRoZSB1c2VyIGJ1ZmZlciwgcGFydGljdWxhcmx5IHdoZW4gbXVsdGlwbGUgc3ViZmxvd3MgYXJlIGludm9sdmVkPyBJ4oCZbSBnb2luZyB0byB3YXRjaCBjYXJlZnVsbHkgZm9yIGVkZ2UgY2FzZXMgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW4gdGhlIGNvbnRleHQgb2YgbXVsdGlwYXRoIG9wZXJhdGlvbi4gVGhlIGZsb3cgaGVyZSBjYW4gZ2V0IGNvbXBsZXgsIHNvIHRyYWNpbmcgdGhlc2UgdmFyaWFibGVzIGlzIGtleSB0byBhIHNvbGlkIHVuZGVyc3RhbmRpbmcuIExldCdzIHNlZSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRob3NlIHNjZW5hcmlvcyFcblxuXG4iLCJJbnB1dFRva2VucyI6MzU3NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzQ6MTQuNjcyOTUzNzE3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MDc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbXB0Y3AvcHJvdG9jb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMzcwLFxuICBcIkxpbmVDb3VudFwiOiA3NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMzcwOlxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gVENQX0NMT1NFIHx8IChzay1cXHUwMDNlc2tfc2h1dGRvd24gXFx1MDAyNiBSQ1ZfU0hVVERPV04pKVxcbjIzNzE6XFx0XFx0XFx0cmV0dXJuIDE7XFxuMjM3MjpcXHRcXG4yMzczOlxcdFxcdHJldHVybiAwO1xcbjIzNzQ6XFx0fVxcbjIzNzU6XFx0XFxuMjM3NjpcXHRzdGF0aWMgaW50IG1wdGNwX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxuMjM3NzpcXHRcXHRcXHRcXHQgaW50IGZsYWdzKVxcbjIzNzg6XFx0e1xcbjIzNzk6XFx0XFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcXG4yMzgwOlxcdFxcdHN0cnVjdCBzY21fdGltZXN0YW1waW5nX2ludGVybmFsIHRzcztcXG4yMzgxOlxcdFxcdGludCBjb3BpZWQgPSAwLCBjbXNnX2ZsYWdzID0gMDtcXG4yMzgyOlxcdFxcdGludCB0YXJnZXQ7XFxuMjM4MzpcXHRcXHRsb25nIHRpbWVvO1xcbjIzODQ6XFx0XFxuMjM4NTpcXHRcXHQvKiBNU0dfRVJSUVVFVUUgaXMgcmVhbGx5IGEgbm8tb3AgdGlsbCB3ZSBzdXBwb3J0IElQX1JFQ1ZFUlIgKi9cXG4yMzg2OlxcdFxcdGlmICh1bmxpa2VseShmbGFncyBcXHUwMDI2IE1TR19FUlJRVUVVRSkpXFxuMjM4NzpcXHRcXHRcXHRyZXR1cm4gaW5ldF9yZWN2X2Vycm9yKHNrLCBtc2csIGxlbik7XFxuMjM4ODpcXHRcXG4yMzg5OlxcdFxcdGxvY2tfc29jayhzayk7XFxuMjM5MDpcXHRcXHRpZiAodW5saWtlbHkoc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9MSVNURU4pKSB7XFxuMjM5MTpcXHRcXHRcXHRjb3BpZWQgPSAtRU5PVENPTk47XFxuMjM5MjpcXHRcXHRcXHRnb3RvIG91dF9lcnI7XFxuMjM5MzpcXHRcXHR9XFxuMjM5NDpcXHRcXG4yMzk1OlxcdFxcdG1wdGNwX3Jwc19yZWNvcmRfc3ViZmxvd3MobXNrKTtcXG4yMzk2OlxcdFxcbjIzOTc6XFx0XFx0dGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBmbGFncyBcXHUwMDI2IE1TR19ET05UV0FJVCk7XFxuMjM5ODpcXHRcXG4yMzk5OlxcdFxcdGxlbiA9IG1pbl90KHNpemVfdCwgbGVuLCBJTlRfTUFYKTtcXG4yNDAwOlxcdFxcdHRhcmdldCA9IHNvY2tfcmN2bG93YXQoc2ssIGZsYWdzIFxcdTAwMjYgTVNHX1dBSVRBTEwsIGxlbik7XFxuMjQwMTpcXHRcXG4yNDAyOlxcdFxcdGlmICh1bmxpa2VseShtc2stXFx1MDAzZXJlY3Ztc2dfaW5xKSlcXG4yNDAzOlxcdFxcdFxcdGNtc2dfZmxhZ3MgPSBNUFRDUF9DTVNHX0lOUTtcXG4yNDA0OlxcdFxcbjI0MDU6XFx0XFx0d2hpbGUgKGNvcGllZCBcXHUwMDNjIGxlbikge1xcbjI0MDY6XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKmxhc3QgPSBOVUxMO1xcbjI0MDc6XFx0XFx0XFx0aW50IGVyciwgYnl0ZXNfcmVhZDtcXG4yNDA4OlxcdFxcbjI0MDk6XFx0XFx0XFx0Ynl0ZXNfcmVhZCA9IF9fbXB0Y3BfcmVjdm1zZ19tc2txKHNrLCBtc2csIGxlbiAtIGNvcGllZCwgZmxhZ3MsXFxuMjQxMDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGNvcGllZCwgXFx1MDAyNnRzcywgXFx1MDAyNmNtc2dfZmxhZ3MsXFxuMjQxMTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZsYXN0KTtcXG4yNDEyOlxcdFxcdFxcdGlmICh1bmxpa2VseShieXRlc19yZWFkIFxcdTAwM2MgMCkpIHtcXG4yNDEzOlxcdFxcdFxcdFxcdGlmICghY29waWVkKVxcbjI0MTQ6XFx0XFx0XFx0XFx0XFx0Y29waWVkID0gYnl0ZXNfcmVhZDtcXG4yNDE1OlxcdFxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4yNDE2OlxcdFxcdFxcdH1cXG4yNDE3OlxcdFxcbjI0MTg6XFx0XFx0XFx0Y29waWVkICs9IGJ5dGVzX3JlYWQ7XFxuMjQxOTpcXHRcXG4yNDIwOlxcdFxcdFxcdGlmICghbGlzdF9lbXB0eShcXHUwMDI2bXNrLVxcdTAwM2ViYWNrbG9nX2xpc3QpIFxcdTAwMjZcXHUwMDI2IG1wdGNwX21vdmVfc2ticyhzaykpXFxuMjQyMTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yNDIyOlxcdFxcbjI0MjM6XFx0XFx0XFx0Lyogb25seSB0aGUgTVBUQ1Agc29ja2V0IHN0YXR1cyBpcyByZWxldmFudCBoZXJlLiBUaGUgZXhpdFxcbjI0MjQ6XFx0XFx0XFx0ICogY29uZGl0aW9ucyBtaXJyb3IgY2xvc2VseSB0Y3BfcmVjdm1zZygpXFxuMjQyNTpcXHRcXHRcXHQgKi9cXG4yNDI2OlxcdFxcdFxcdGlmIChjb3BpZWQgXFx1MDAzZT0gdGFyZ2V0KVxcbjI0Mjc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjQyODpcXHRcXG4yNDI5OlxcdFxcdFxcdGlmIChjb3BpZWQpIHtcXG4yNDMwOlxcdFxcdFxcdFxcdGlmICh0Y3BfcmVjdl9zaG91bGRfc3RvcChzaykgfHxcXG4yNDMxOlxcdFxcdFxcdFxcdCAgICAhdGltZW8pXFxuMjQzMjpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4yNDMzOlxcdFxcdFxcdH0gZWxzZSB7XFxuMjQzNDpcXHRcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX2Vycikge1xcbjI0MzU6XFx0XFx0XFx0XFx0XFx0Y29waWVkID0gc29ja19lcnJvcihzayk7XFxuMjQzNjpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4yNDM3OlxcdFxcdFxcdFxcdH1cXG4yNDM4OlxcdFxcbjI0Mzk6XFx0XFx0XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19zaHV0ZG93biBcXHUwMDI2IFJDVl9TSFVURE9XTilcXG4yNDQwOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjI0NDE6XFx0XFxuMjQ0MjpcXHRcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9DTE9TRSkge1xcbjI0NDM6XFx0XFx0XFx0XFx0XFx0Y29waWVkID0gLUVOT1RDT05OO1xcbjI0NDQ6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM0OjE0LjY3MzIzNjgxN1oiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MjQwNDY0MjA3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNdWx0aWNhdGggVENQIFJlY2VpdmUgSXNzdWUqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgbXB0Y3BfcmVjdm1zZ2AgZnVuY3Rpb24uIEkgc2VlIHRoZSBjb2RlIHNuaXBwZXQgd2hlcmUgd2UncmUgd2FpdGluZyBmb3IgZGF0YSBvbiB0aGUgc29ja2V0IHdpdGggYHNrX3dhaXRfZGF0YWAuIFRoZSBjcml0aWNhbCBiaXQgaXMgcmlnaHQgYWZ0ZXIgdGhhdCB3YWl0OlxuXG5gYGBjXG5cdFx0ZXJyID0gc2tfd2FpdF9kYXRhKHNrLCBcdTAwMjZ0aW1lbywgbGFzdCk7XG5cdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuLVx0XHRcdGVyciA9IGNvcGllZCA/IDogZXJyO1xuK1x0XHRcdGNvcGllZCA9IGNvcGllZCA/IDogZXJyO1xuXHRcdFx0Z290byBvdXRfZXJyO1xuXHRcdH1cbmBgYFxuXG5Ob3csIHRoZSBwcmV2aW91cyB2ZXJzaW9uIHVzZWQgYGVyciA9IGNvcGllZCA/IDogZXJyO2AgYnV0IGl0IGhhcyBiZWVuIG1vZGlmaWVkIHRvIG5vdyByZWFkIGBjb3BpZWQgPSBjb3BpZWQgPyA6IGVycjtgLiBMZXQncyBzdGVwIGJhY2sgYW5kIHJlbWVtYmVyIHRoYXQgdGhlIGZ1bmN0aW9uIGlzIHN1cHBvc2VkIHRvIHJldHVybiBgY29waWVkYCAtIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQuIFRoZSB2YXJpYWJsZSBgZXJyYCBpcyBhIGxvY2FsIHZhcmlhYmxlIGRlY2xhcmVkICppbnNpZGUqIGEgYHdoaWxlYCBsb29wIHdpdGhpbiBgbXB0Y3BfcmVjdm1zZ2AuXG5cbkhlcmUncyB0aGUgcHJvYmxlbTogaWYgYGNvcGllZGAgd2FzIHN0aWxsIHplcm8gKG5vIGRhdGEgcmVhZCB5ZXQpIGFuZCBgc2tfd2FpdF9kYXRhYCByZXR1cm5lZCBhbiBlcnJvciAobGlrZSBhbiBpbnRlcnJ1cHQgb3IgYW4gRUFHQUlOKSwgdGhlIG9yaWdpbmFsIGNvZGUgd291bGQgc2V0IGBlcnJgIHRvIHRoYXQgZXJyb3IgY29kZSwgYnV0ICpzdGlsbCogcmV0dXJuIGBjb3BpZWRgLCB3aGljaCB3YXMgemVyby4gQSB6ZXJvIHZhbHVlIG9uIGEgYHJlY3Ztc2dgIGNhbGwgaXMgdHlwaWNhbGx5IGludGVycHJldGVkIGFzIGEgY2xlYW4gY2xvc2UvRU9GLCBub3QgYW4gZXJyb3IhIFRoYXQncyBiYWQuXG5cblRoZSBmaXgsIGBjb3BpZWQgPSBjb3BpZWQgPyA6IGVycjtgLCBtYWtlcyBzdXJlIHRoYXQgaWYgYW4gZXJyb3IgaGFwcGVuZWQgKmJlZm9yZSogYW55IGJ5dGVzIHdlcmUgY29waWVkLCB0aGF0IGBjb3BpZWRgIHRha2VzIG9uIHRoZSBlcnJvciBjb2RlLiBQZXJmZWN0ISBNYWtlcyBzZW5zZS5cblxuTm93LCBsZXQncyBzaGlmdCBnZWFycyBhbmQgdGhpbmsgYWJvdXQgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGZpeCBkb2Vzbid0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdGhhdCBLTVNBTiBtaWdodCBjYXRjaC4gQXJlIHRoZXJlIGFueSBvdGhlciB2YXJpYWJsZXMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBiZSB1bmluaXRpYWxpemVkIGluIHRoZSBlcnJvciBwYXRoP1xuXG5MZXQncyBjaGVjayBgdHNzYC4gYHN0cnVjdCBzY21fdGltZXN0YW1waW5nX2ludGVybmFsIHRzcztgIEl0J3MgZGVjbGFyZWQgbG9jYWxseSB3aXRoaW4gdGhlIGZ1bmN0aW9uLiBXaGVuIGlzIHRoZSBgTVBUQ1BfQ01TR19UU2AgZmxhZyBzZXQ/IEknbGwgbmVlZCB0byB0cmFjZSB3aGVyZSB0aGF0J3MgY29udHJvbGxlZCB0byBzZWUgaWYgdGhlcmUncyBhbnkgcmlzayBvZiB1c2luZyBhbiB1bmluaXRpYWxpemVkIGB0c3NgIHZhbHVlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTMwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzQ6NTcuMDc3ODg2ODAyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTk4NjMyMTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1QVENQX0NNU0dfXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jPTQzPWVudW0ge1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjQ0OlxcdE1QVENQX0NNU0dfVFMgPSBCSVQoMCksXFxubmV0L21wdGNwL3Byb3RvY29sLmM6NDU6XFx0TVBUQ1BfQ01TR19JTlEgPSBCSVQoMSksXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNDYtfTtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTIxNDk9c3RhdGljIGludCBfX21wdGNwX3JlY3Ztc2dfbXNrcShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIxOTAtXFx0XFx0XFx0dGNwX3VwZGF0ZV9yZWN2X3RzdGFtcHMoc2tiLCB0c3MpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIxOTE6XFx0XFx0XFx0KmNtc2dfZmxhZ3MgfD0gTVBUQ1BfQ01TR19UUztcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMTkyLVxcdFxcdH1cXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTIzNzY9c3RhdGljIGludCBtcHRjcF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjQwMi1cXHRpZiAodW5saWtlbHkobXNrLVxcdTAwM2VyZWN2bXNnX2lucSkpXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MjQwMzpcXHRcXHRjbXNnX2ZsYWdzID0gTVBUQ1BfQ01TR19JTlE7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjQwNC1cXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI0NzAtXFx0aWYgKGNtc2dfZmxhZ3MgXFx1MDAyNlxcdTAwMjYgY29waWVkIFxcdTAwM2U9IDApIHtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyNDcxOlxcdFxcdGlmIChjbXNnX2ZsYWdzIFxcdTAwMjYgTVBUQ1BfQ01TR19UUylcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNDcyLVxcdFxcdFxcdHRjcF9yZWN2X3RpbWVzdGFtcChtc2csIHNrLCBcXHUwMDI2dHNzKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNDczLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI0NzQ6XFx0XFx0aWYgKGNtc2dfZmxhZ3MgXFx1MDAyNiBNUFRDUF9DTVNHX0lOUSkge1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI0NzUtXFx0XFx0XFx0dW5zaWduZWQgaW50IGlucSA9IG1wdGNwX2lucV9oaW50KHNrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzQ6NTkuMjc2NTI1ODI2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc1NjA1NTEwNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogTm8gUmlza3MgSW50cm9kdWNlZCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcImRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzP1wiIEkgbmVlZCB0byBiZSAqc3VyZSogYWJvdXQgdGhpcywgc28gSSdtIGdvaW5nIHRocm91Z2ggdGhlIEtNU0FOIGNyaXRlcmlhIG1ldGhvZGljYWxseS5cblxuRmlyc3QsIEkgc2VlIHRoZSBjaGFuZ2U6IGZpeGluZyB0aGUgZXJyb3IgaGFuZGxpbmcgaW4gYG1wdGNwX3JlY3Ztc2coKWAuIEJhc2ljYWxseSwgdGhlIGNvZGUgd2FzIG1pc3Rha2VubHkgcmV0dXJuaW5nIGAwYCAoRU9GKSB3aGVuIGl0IHNob3VsZCBoYXZlIHJldHVybmVkIGFuIGVycm9yIGNvZGUgZnJvbSBgc2tfd2FpdF9kYXRhKClgLiBUaGF0J3Mgbm90IGdvb2QsIGJ1dCBpdCBkb2Vzbid0IGltbWVkaWF0ZWx5IHNjcmVhbSBcInVuaW5pdGlhbGl6ZWQgbWVtb3J5LlwiXG5cbk5vdyBJJ20gcnVubmluZyB0aHJvdWdoIHRoZSBLTVNBTiBjaGVja2xpc3QuIERvZXMgdGhlIHBhdGNoOlxuXG4xLiAgKipUb3VjaCBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2U/KiogTm9wZS4gVGhpcyBpcyBhbGwgYWJvdXQgaW50ZXJuYWwgZXJyb3IgcHJvcGFnYXRpb247IG5vIGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgcGFzc2VkIHRvIHVzZXJzcGFjZSB0aGF0IGNvdWxkIGJlIGFmZmVjdGVkLlxuMi4gICoqUmVseSBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBjb25kaXRpb25hbCBsb2dpYz8qKiBOb3QgdGhhdCBJIGNhbiBzZWUuIFRoZSByZWxldmFudCB2YXJpYWJsZXMgKGBlcnJgLCBgY29waWVkYCkgYXJlIGFsbCAqZXhwbGljaXRseSogaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cbjMuICAqKkFsbG9jYXRlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQ/KiogQWJzb2x1dGVseSBub3QuIE5vIG5ldyBhbGxvY2F0aW9ucyBhcmUgaGFwcGVuaW5nLlxuNC4gICoqSW52b2x2ZSBwb3RlbnRpYWwgYm91bmRzIGNoZWNrIGlzc3VlcyBvciBtZW1vcnkgYWNjZXNzIG9mIHVuaW5pdGlhbGl6ZWQgYnVmZmVycz8qKiBEb2Vzbid0IGxvb2sgbGlrZSBpdC4gVGhlIGNvcmUgY2hhbmdlIGlzIGp1c3QgYWJvdXQgd2hpY2ggdmFsdWUgaXMgcmV0dXJuZWQsIHdoaWNoIGlzIHRoZSBlcnJvciBjb2RlLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGlzIHNpbXBsZS4gSXQgY29ycmVjdHMgaG93IGFuIGVycm9yIGNvZGUgZnJvbSBgc2tfd2FpdF9kYXRhKClgIGlzIGhhbmRsZWQuIFRoZSBwcmV2aW91cyBjb2RlIHdhcyBvdmVyd3JpdGluZyB0aGUgZXJyb3Igd2l0aCAwIGluIHNvbWUgY2FzZXMuIFRoZSBmaXggcHJlc2VydmVzIHRoZSBhY3R1YWwgZXJyb3IgY29kZS5cblxuU28sIEknbSBjb25maWRlbnQ6XG5cbiogICBUaGUgY29kZSAqZG9lc24ndCogaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBvciBpbnRlcmFjdGlvbnMgd2l0aCB1c2VyIHNwYWNlIHRoYXQgY291bGQgYmUgc291cmNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS5cbiogICBOZWl0aGVyIGBlcnJgIG5vciBgY29waWVkYCBpcyB1bmluaXRpYWxpemVkLiBgZXJyYCBpcyBpbml0aWFsaXplZCBieSBgc2tfd2FpdF9kYXRhKClgLCBhbmQgYGNvcGllZGAgaXMgaW5pdGlhbGl6ZWQgdG8gMC5cbiogICBJdCBkb2VzICpub3QqIGxlYWsgYW55IGluZm9ybWF0aW9uLiBOZWdhdGl2ZSBlcnJvciBjb2RlIGlzIHJldHVybmVkLlxuXG5UaGVyZWZvcmUsIEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzLCBmdW5jdGlvbmFsIHRlc3RzLCBhbmQgS0FTQU4gc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IGlzc3VlcyByZWxhdGVkIHRvIHRoaXMgZml4IChsaWtlIG91dCBvZiBib3VuZHMsIE5VTEwgZGVyZWZlcmVuY2VzLCBldGMuKS4gVGhpcyBpcyBhIGNvbnRyb2wgZmxvdy9yZXR1cm4gdmFsdWUgYnVnLCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgYnVnLlxuXG5TbywgSSdtIGdvaW5nIHRvIHNldCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSSBuZWVkIHRvIGRvY3VtZW50IHRoaXMuIFRoZSByZWFzb25pbmcgSSdsbCBwdXQgd2l0aCBgc2V0LXJlc3VsdHNgIHdpbGwgZ28gc29tZXRoaW5nIGxpa2UgdGhpczpcblxuKiAgICoqUGF0Y2ggRGVzY3JpcHRpb246KiogVGhpcyBwYXRjaCBmaXhlcyBhbiBlcnJvciBwcm9wYWdhdGlvbiBidWcgaW4gYG1wdGNwX3JlY3Ztc2coKWAuIFRoZSBwcmV2aW91cyBjb2RlIGluY29ycmVjdGx5IHJldHVybmVkIGAwYCBpbnN0ZWFkIG9mIHByb3BhZ2F0aW5nIHRoZSBhY3R1YWwgZXJyb3IgY29kZSAoYC1FQUdBSU5gLCBgLUVJTlRSYCwgZXRjLikgd2hlbiBgY29waWVkYCB3YXMgemVyby5cbiogICAqKktNU0FOIEp1c3RpZmljYXRpb246KiogS01TQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0IHRoZSB1c2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzLiBUaGlzIGNoYW5nZSBvbmx5IGFmZmVjdHMgdGhlIHJldHVybiB2YWx1ZSBvZiBhIHN5c3RlbSBjYWxsIHVuZGVyIGVycm9yIGNvbmRpdGlvbnMgd2hlbiB0aGUgc29ja2V0IGlzIGJsb2NraW5nLiBOZWl0aGVyIGBjb3BpZWRgIG5vciBgZXJyYCBhcmUgdW5pbml0aWFsaXplZCAodGhleSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlKSwgYW5kIG5vIG5ldyBidWZmZXJzLCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UgYXJlIGludHJvZHVjZWQuIEJlY2F1c2Ugb2YgdGhpcywgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlxuXG5Ob3csIEknbSByZWFkeSB0byBpbnZva2UgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU4MywiT3V0cHV0VG9rZW5zIjoxODIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM1OjA2LjgzNzA4MzIzOFoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByZXR1cm4gdmFsdWUgYnVnIGluIG1wdGNwX3JlY3Ztc2coKSB3aGVyZSBhbiBlcnJvciByZXR1cm5lZCBieSBza193YWl0X2RhdGEoKSB3YXMgYXNzaWduZWQgdG8gdGhlIGlubmVyLXNjb3BlZCB2YXJpYWJsZSAnZXJyJyBpbnN0ZWFkIG9mICdjb3BpZWQnLCBjYXVzaW5nIG1wdGNwX3JlY3Ztc2coKSB0byByZXR1cm4gMCBpbnN0ZWFkIG9mIHRoZSBuZWdhdGl2ZSBlcnJvciBjb2RlIHdoZW4gbm8gZGF0YSBoYWQgYmVlbiBjb3BpZWQgeWV0LlxcblxcbkJvdGggJ2VycicgYW5kICdjb3BpZWQnIGFyZSBmdWxseSBpbml0aWFsaXplZCBzY2FsYXIgdmFyaWFibGVzIChjb3BpZWQgaXMgaW5pdGlhbGl6ZWQgdG8gMCwgYW5kIGVyciByZWNlaXZlcyB0aGUgcmV0dXJuIGNvZGUgZnJvbSBza193YWl0X2RhdGEpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIGFjY2Vzc2VzLiBCZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByZXR1cm4gdmFsdWUgYnVnIGluIG1wdGNwX3JlY3Ztc2coKSB3aGVyZSBhbiBlcnJvciByZXR1cm5lZCBieSBza193YWl0X2RhdGEoKSB3YXMgYXNzaWduZWQgdG8gdGhlIGlubmVyLXNjb3BlZCB2YXJpYWJsZSAnZXJyJyBpbnN0ZWFkIG9mICdjb3BpZWQnLCBjYXVzaW5nIG1wdGNwX3JlY3Ztc2coKSB0byByZXR1cm4gMCBpbnN0ZWFkIG9mIHRoZSBuZWdhdGl2ZSBlcnJvciBjb2RlIHdoZW4gbm8gZGF0YSBoYWQgYmVlbiBjb3BpZWQgeWV0LlxcblxcbkJvdGggJ2VycicgYW5kICdjb3BpZWQnIGFyZSBmdWxseSBpbml0aWFsaXplZCBzY2FsYXIgdmFyaWFibGVzIChjb3BpZWQgaXMgaW5pdGlhbGl6ZWQgdG8gMCwgYW5kIGVyciByZWNlaXZlcyB0aGUgcmV0dXJuIGNvZGUgZnJvbSBza193YWl0X2RhdGEpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIGFjY2Vzc2VzLiBCZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ls28[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-13 10:31:37 +0000 UTC FinishedAt: 2026-09-13 10:35:09 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "78445023439506ebd83b86d40b1e428a3b309d4a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "78445023439506ebd83b86d40b1e428a3b309d4a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP" ], "series_id": "b9623615-727d-4fa4-b655-609aab1c4c99" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mptcp_recvmsg" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "78445023439506ebd83b86d40b1e428a3b309d4a", "base_tree": "axboe" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXB0Y3BfcmVjdm1zZyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmV0dXJuIHZhbHVlIGJ1ZyBpbiBtcHRjcF9yZWN2bXNnKCkgd2hlcmUgYW4gZXJyb3IgcmV0dXJuZWQgYnkgc2tfd2FpdF9kYXRhKCkgd2FzIGFzc2lnbmVkIHRvIHRoZSBpbm5lci1zY29wZWQgdmFyaWFibGUgJiMzOTtlcnImIzM5OyBpbnN0ZWFkIG9mICYjMzk7Y29waWVkJiMzOTssIGNhdXNpbmcgbXB0Y3BfcmVjdm1zZygpIHRvIHJldHVybiAwIGluc3RlYWQgb2YgdGhlIG5lZ2F0aXZlIGVycm9yIGNvZGUgd2hlbiBubyBkYXRhIGhhZCBiZWVuIGNvcGllZCB5ZXQuXG5cbkJvdGggJiMzOTtlcnImIzM5OyBhbmQgJiMzOTtjb3BpZWQmIzM5OyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgc2NhbGFyIHZhcmlhYmxlcyAoY29waWVkIGlzIGluaXRpYWxpemVkIHRvIDAsIGFuZCBlcnIgcmVjZWl2ZXMgdGhlIHJldHVybiBjb2RlIGZyb20gc2tfd2FpdF9kYXRhKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlciBhY2Nlc3Nlcy4gQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBlcnJvciBoYW5kbGluZyBpbiBtcHRjcF9yZWN2bXNnKCkgYnkgYXNzaWduaW5nIHRoZSByZXR1cm4gdmFsdWUgb2Ygc2tfd2FpdF9kYXRhKCkgdG8gJiMzOTtjb3BpZWQmIzM5OyBpbnN0ZWFkIG9mICYjMzk7ZXJyJiMzOTssIGVuc3VyaW5nIG5lZ2F0aXZlIGVycm9yIGNvZGVzIGFyZSBwcm9wZXJseSByZXR1cm5lZCB3aGVuIG5vIGRhdGEgaGFzIGJlZW4gcmVhZC4gVGhpcyBjaGFuZ2VzIGNvbnRyb2wgZmxvdyBhbmQgcmV0dXJuIHZhbHVlcyBpbiByZWFjaGFibGUgTVBUQ1Agc29ja2V0IHJlY2VpdmUgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDZiNTIzODI0ZTI4MTRlMzI3MDk5OWM1NjEzNTZiOWZlNTM3MTlhYTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCAxMyAxMDozMzozOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXG5pbmRleCAwMDk4ZTI4MzA5MzE4Li44ZGMyNWVmMTU0MmM1IDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXG5AQCAtMjQ1OSw3ICYjNDM7MjQ1OSw3IEBAIHN0YXRpYyBpbnQgbXB0Y3BfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbiBcdFx0bXB0Y3BfY2xlYW51cF9yYnVmKG1zaywgY29waWVkKTtcbiBcdFx0ZXJyID0gc2tfd2FpdF9kYXRhKHNrLCBcdTAwMjZ0aW1lbywgbGFzdCk7XG4gXHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbi1cdFx0XHRlcnIgPSBjb3BpZWQgPyA6IGVycjtcbiYjNDM7XHRcdFx0Y29waWVkID0gY29waWVkID8gOiBlcnI7XG4gXHRcdFx0Z290byBvdXRfZXJyO1xuIFx0XHR9XG4gXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TVBUQ1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttcHRjcF9yZWN2bXNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGVycm9yIGhhbmRsaW5nIGluIG1wdGNwX3JlY3Ztc2coKSBieSBhc3NpZ25pbmcgdGhlIHJldHVybiB2YWx1ZSBvZiBza193YWl0X2RhdGEoKSB0byAmIzM5O2NvcGllZCYjMzk7IGluc3RlYWQgb2YgJiMzOTtlcnImIzM5OywgZW5zdXJpbmcgbmVnYXRpdmUgZXJyb3IgY29kZXMgYXJlIHByb3Blcmx5IHJldHVybmVkIHdoZW4gbm8gZGF0YSBoYXMgYmVlbiByZWFkLiBUaGlzIGNoYW5nZXMgY29udHJvbCBmbG93IGFuZCByZXR1cm4gdmFsdWVzIGluIHJlYWNoYWJsZSBNUFRDUCBzb2NrZXQgcmVjZWl2ZSBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmI1MjM4MjRlMjgxNGUzMjcwOTk5YzU2MTM1NmI5ZmU1MzcxOWFhNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDEzIDEwOjMzOjM5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuYwppbmRleCAwMDk4ZTI4MzA5MzE4Li44ZGMyNWVmMTU0MmM1IDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuYwpAQCAtMjQ1OSw3ICYjNDM7MjQ1OSw3IEBAIHN0YXRpYyBpbnQgbXB0Y3BfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbiwKIAkJbXB0Y3BfY2xlYW51cF9yYnVmKG1zaywgY29waWVkKTsKIAkJZXJyID0gc2tfd2FpdF9kYXRhKHNrLCAmYW1wO3RpbWVvLCBsYXN0KTsKIAkJaWYgKGVyciAmbHQ7IDApIHsKLQkJCWVyciA9IGNvcGllZCA/IDogZXJyOwomIzQzOwkJCWNvcGllZCA9IGNvcGllZCA/IDogZXJyOwogCQkJZ290byBvdXRfZXJyOwogCQl9CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODc1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGlzIE1QVENQIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gVGhlIGRpZmYgaXRzZWxmIGlzIHByZXR0eSBjb25jaXNlLCB3aGljaCBpcyBhbHdheXMgYSBnb29kIHN0YXJ0LiBGcm9tIHRoZSBjb250ZXh0LCBpdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBpbiBgbmV0L21wdGNwL3Byb3RvY29sLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgbXB0Y3BfcmVjdm1zZ2AgZnVuY3Rpb24uIFRoZSBrZXkgbGluZSBzZWVtcyB0byBiZSB3aGVyZSB0aGV5JiMzOTtyZSBoYW5kbGluZyBlcnJvcnMgYW5kIHRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGR1cmluZyBhIHJlY2VpdmUgb3BlcmF0aW9uLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGludGVudCBiZWhpbmQgY2hhbmdpbmcgYGVyciA9IGNvcGllZCA/IDogZXJyO2AgdG8gYGNvcGllZCA9IGNvcGllZCA/IDogZXJyO2AuIEVzc2VudGlhbGx5LCB0aGUgbG9naWMgaXMgaGFuZGxpbmcgYSBwb3RlbnRpYWwgZXJyb3IgZHVyaW5nIHJlY2VpdmUgb24gYW4gTVBUQ1Agc29ja2V0IGFuZCBkZWFsaW5nIHdpdGggYSBwYXJ0aWFsIHJlYWQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoeSB0aGV5JiMzOTt2ZSBzd2l0Y2hlZCBob3cgdGhlIGVycm9yIGlzIGhhbmRsZWQgaW4gdGhpcyBzcGVjaWZpYyBjYXNlLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBjb25kaXRpb25hbCBhc3NpZ25tZW50LgoKSSYjMzk7bSB0aGlua2luZyB0aGlzIGxpa2VseSBoYXMgaW1wbGljYXRpb25zIGZvciBob3cgYGNvcGllZGAgaXMgYmVpbmcgdXNlZCBkb3duc3RyZWFtLiBJcyB0aGlzIG5vdyB0aGUgKm9ubHkqIHBsYWNlIGBjb3BpZWRgIGNvdWxkIGJlIHNldD8gT3IgYW0gSSBtaXNzaW5nIHNvbWUgc3VidGxldHkgYWJvdXQgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgYW5kIHRoZSBlcnJvciBwcm9wYWdhdGlvbiBpbiB0aGUgb3JpZ2luYWwgY29kZT8gVGhpcyBmZWVscyBsaWtlIGl0IG1pZ2h0IGFmZmVjdCBob3cgcGFydGlhbCByZWFkcyBhcmUgcmVwb3J0ZWQgb3IgaG93IHRoZSBzb2NrZXQgc3RhdGUgaXMgbWFpbnRhaW5lZCBpbiBlcnJvciBzY2VuYXJpb3MuCgpCZWZvcmUgSSBjYW4gZ2l2ZSBpdCBhIGZ1bGwgcmV2aWV3LCBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGhvdyB0aGlzIGNoYW5nZSBhZmZlY3RzIHRoZSBvdmVyYWxsIGVycm9yIGhhbmRsaW5nIGxvZ2ljIGFuZCBob3cgdGhlIGBjb3BpZWRgIHZhcmlhYmxlIGlzIHN1YnNlcXVlbnRseSB1c2VkLiBUaGUgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgaW1wcm92ZW1lbnQsIGEgYnVnIGZpeCwgb3IgYSBzdWJ0bGUgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucyByZWxhdGVkIHRvIGRhdGEgY29ycnVwdGlvbiwgdW5leHBlY3RlZCBiZWhhdmlvciBkdXJpbmcgbmV0d29yayBpc3N1ZXMsIG9yIGEgY2hhbmdlIGluIGV4cGVjdGVkIGJlaGF2aW9yIHRvIHVzZXJzcGFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wcm90b2NvbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQ0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNDQwOlx0XHRcdFx0XHRicmVhaztcbjI0NDE6XHRcbjI0NDI6XHRcdFx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0NMT1NFKSB7XG4yNDQzOlx0XHRcdFx0XHRjb3BpZWQgPSAtRU5PVENPTk47XG4yNDQ0Olx0XHRcdFx0XHRicmVhaztcbjI0NDU6XHRcdFx0XHR9XG4yNDQ2Olx0XG4yNDQ3Olx0XHRcdFx0aWYgKCF0aW1lbykge1xuMjQ0ODpcdFx0XHRcdFx0Y29waWVkID0gLUVBR0FJTjtcbjI0NDk6XHRcdFx0XHRcdGJyZWFrO1xuMjQ1MDpcdFx0XHRcdH1cbjI0NTE6XHRcbjI0NTI6XHRcdFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcbjI0NTM6XHRcdFx0XHRcdGNvcGllZCA9IHNvY2tfaW50cl9lcnJubyh0aW1lbyk7XG4yNDU0Olx0XHRcdFx0XHRicmVhaztcbjI0NTU6XHRcdFx0XHR9XG4yNDU2Olx0XHRcdH1cbjI0NTc6XHRcbjI0NTg6XHRcdFx0cHJfZGVidWcoXCYjMzQ7YmxvY2sgdGltZW91dCAlbGRcXG5cJiMzNDssIHRpbWVvKTtcbjI0NTk6XHRcdFx0bXB0Y3BfY2xlYW51cF9yYnVmKG1zaywgY29waWVkKTtcbjI0NjA6XHRcdFx0ZXJyID0gc2tfd2FpdF9kYXRhKHNrLCBcdTAwMjZ0aW1lbywgbGFzdCk7XG4yNDYxOlx0XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbjI0NjI6XHRcdFx0XHRjb3BpZWQgPSBjb3BpZWQgPyA6IGVycjtcbjI0NjM6XHRcdFx0XHRnb3RvIG91dF9lcnI7XG4yNDY0Olx0XHRcdH1cbjI0NjU6XHRcdH1cbjI0NjY6XHRcbjI0Njc6XHRcdG1wdGNwX2NsZWFudXBfcmJ1Zihtc2ssIGNvcGllZCk7XG4yNDY4Olx0XG4yNDY5Olx0b3V0X2VycjpcbjI0NzA6XHRcdGlmIChjbXNnX2ZsYWdzIFx1MDAyNlx1MDAyNiBjb3BpZWQgXHUwMDNlPSAwKSB7XG4yNDcxOlx0XHRcdGlmIChjbXNnX2ZsYWdzIFx1MDAyNiBNUFRDUF9DTVNHX1RTKVxuMjQ3MjpcdFx0XHRcdHRjcF9yZWN2X3RpbWVzdGFtcChtc2csIHNrLCBcdTAwMjZ0c3MpO1xuMjQ3MzpcdFxuMjQ3NDpcdFx0XHRpZiAoY21zZ19mbGFncyBcdTAwMjYgTVBUQ1BfQ01TR19JTlEpIHtcbjI0NzU6XHRcdFx0XHR1bnNpZ25lZCBpbnQgaW5xID0gbXB0Y3BfaW5xX2hpbnQoc2spO1xuMjQ3NjpcdFxuMjQ3NzpcdFx0XHRcdHB1dF9jbXNnKG1zZywgU09MX1RDUCwgVENQX0NNX0lOUSwgc2l6ZW9mKGlucSksIFx1MDAyNmlucSk7XG4yNDc4Olx0XHRcdH1cbjI0Nzk6XHRcdH1cbjI0ODA6XHRcbjI0ODE6XHRcdHByX2RlYnVnKFwmIzM0O21zaz0lcCByeCBxdWV1ZSBlbXB0eT0lZCBjb3BpZWQ9JWRcXG5cJiMzNDssXG4yNDgyOlx0XHRcdCBtc2ssIHNrYl9xdWV1ZV9lbXB0eShcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlKSwgY29waWVkKTtcbjI0ODM6XHRcbjI0ODQ6XHRcdHJlbGVhc2Vfc29jayhzayk7XG4yNDg1Olx0XHRyZXR1cm4gY29waWVkO1xuMjQ4NjpcdH1cbjI0ODc6XHRcbjI0ODg6XHRzdGF0aWMgdm9pZCBtcHRjcF9yZXRyYW5zbWl0X3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuMjQ4OTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTk2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1QVENQIFZ1bG5lcmFiaWxpdHkgQW5hbHlzaXMqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gc2VlaW5nOiB0aGVyZSYjMzk7cyBhIHN1YnRsZSBidXQgc2lnbmlmaWNhbnQgYnVnIGZpeCBpbiB0aGUgTVBUQ1AgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbXB0Y3BfcmVjdm1zZygpYC4gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgbGluZTogYGVyciA9IHNrX3dhaXRfZGF0YShzaywgJmFtcDt0aW1lbywgbGFzdCk7YCBhbmQgaG93IHRoZSBlcnJvciBoYW5kbGluZyBpbnRlcmFjdHMgd2l0aCB0aGUgcmV0dXJuIHZhbHVlLiBQcmV2aW91c2x5LCB0aGV5IGhhZCB0aGlzIGNvZGU6CgpgYGBjCmlmIChlcnIgJmx0OyAwKSB7CiAgICBlcnIgPSBjb3BpZWQgPyA6IGVycjsKICAgIGdvdG8gb3V0X2VycjsKfQpgYGAKCkFuZCBgb3V0X2VycjpgIHRoZW4gZG9lczoKCmBgYGMKb3V0X2VycjoKCWlmIChjbXNnX2ZsYWdzICZhbXA7JmFtcDsgY29waWVkICZndDs9IDApIHsKLi4uCglyZWxlYXNlX3NvY2soc2spOwoJcmV0dXJuIGNvcGllZDsKYGBgCgpUaGUgcHJvYmxlbSBpcywgdGhlIGNvZGUgd2FzIGFzc2lnbmluZyBgZXJyYCBidXQgKipub3QqKiB1c2luZyBpdC4gVGhlIGZ1bmN0aW9uICphbHdheXMqIHJldHVybnMgYGNvcGllZGAuIElmIGBjb3BpZWRgIHN0YXJ0ZWQgYXQgemVybyBhbmQgYHNrX3dhaXRfZGF0YWAgcmV0dXJuZWQgYW4gZXJyb3IgKGxpa2UgYC1FQUdBSU5gIG9yIGAtRUlOVFJgKSwgdGhlIGNvZGUgaW5jb3JyZWN0bHkgcmV0dXJuZWQgemVybyEgTm93LCB0aGUgZml4IGBjb3BpZWQgPSBjb3BpZWQgPyA6IGVycjtgIGlzIGNvcnJlY3QsIGJlY2F1c2UgaXQgYXNzaWducyBgZXJyYCB0byBgY29waWVkYCBpZiBgY29waWVkYCBpcyB6ZXJvIGFuZCBtYWtlcyBgY29waWVkYCB0byBiZSB0aGUgYWN0dWFsIGVycm9yIGNvZGUuIEJ1dCBpZiBgY29waWVkYCB3YXMgYWxyZWFkeSBncmVhdGVyIHRoYW4gemVybywgaXQga2VlcHMgdGhhdCB2YWx1ZS4KCkkgY2FuIGNvbmZpcm0gdGhhdCB0aGUgdnVsbmVyYWJpbGl0eSBpcyBub3cgZml4ZWQuCgpUaGUga2V5IHRoaW5nIGlzLCB0aGlzIGZpeCBtZWFucyBlcnJvcnMgYXJlIG5vdyBwcm9wZXJseSBwcm9wYWdhdGVkLCBpbnN0ZWFkIG9mIHJldHVybmluZyBhbiBpbmNvcnJlY3QgdmFsdWUuIFRoaXMgaXMgY3JpdGljYWwgYmVjYXVzZSBgbXB0Y3BfcmVjdm1zZygpYCBpcyBwYXJ0IG9mIHRoZSBNUFRDUCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiwgYW5kIHRoYXQgbWVhbnMgaXQmIzM5O3MgYSB2dWxuZXJhYmlsaXR5IEkgY291bGQgcG90ZW50aWFsbHkgZXhwbG9pdC4KClRoZSBnb29kIG5ld3MgaXMsIE1QVENQIGlzIHJlYWNoYWJsZSB0aHJvdWdoIHN0YW5kYXJkIHNvY2tldCBjYWxscyBsaWtlIGBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIElQUFJPVE9fTVBUQ1ApYCBvciBgc29ja2V0KEFGX0lORVQ2LCBTT0NLX1NUUkVBTSwgSVBQUk9UT19NUFRDUClgLiBJdCYjMzk7cyBmdWxseSB2aXJ0dWFsaXplZCB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCBuZXR3b3JraW5nIHN0YWNrLgoKTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGNvbmZpZ3VyYXRpb25zIG5lZWRlZCwgSSYjMzk7bGwgZ28gY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgTVBUQ1AgcmVxdWlyZW1lbnRzLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1QVENQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9LY29uZmlnLTEtXG5uZXQvbXB0Y3AvS2NvbmZpZzoyOmNvbmZpZyBNUFRDUFxubmV0L21wdGNwL0tjb25maWctMy1cdGJvb2wgXCYjMzQ7TVBUQ1A6IE11bHRpcGF0aCBUQ1BcJiMzNDtcbi0tXG5uZXQvbXB0Y3AvS2NvbmZpZz0xNj1jb25maWcgSU5FVF9NUFRDUF9ESUFHXG4tLVxubmV0L21wdGNwL0tjb25maWctMTktXG5uZXQvbXB0Y3AvS2NvbmZpZzoyMDpjb25maWcgTVBUQ1BfSVBWNlxubmV0L21wdGNwL0tjb25maWctMjEtXHRib29sIFwmIzM0O01QVENQOiBJUHY2IHN1cHBvcnQgZm9yIE11bHRpcGF0aCBUQ1BcJiMzNDtcbi0tXG5uZXQvbXB0Y3AvS2NvbmZpZy0yNC1cbm5ldC9tcHRjcC9LY29uZmlnOjI1OmNvbmZpZyBNUFRDUF9LVU5JVF9URVNUXG5uZXQvbXB0Y3AvS2NvbmZpZy0yNi1cdHRyaXN0YXRlIFwmIzM0O1RoaXMgYnVpbGRzIHRoZSBNUFRDUCBLVW5pdCB0ZXN0c1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM4MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBNUFRDUCBLZXJuZWwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBuZXQvbXB0Y3AvS2NvbmZpZ2AuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBmb3IgTXVsdGlQYXRoIFRDUCBpbiB0aGUga2VybmVsLiBJJiMzOTttIGFzc3VtaW5nIGl0JiMzOTtzIHN0cnVjdHVyZWQgaW4gdGhlIHN0YW5kYXJkIEtjb25maWcgZm9ybWF0LCBzbyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZToKCiogICAqKmBjb25maWdgIHN0YXRlbWVudHM6KiogVGhlc2UgYXJlIHRoZSBjb3JlIG9wdGlvbnMgdGhlbXNlbHZlcy4gSSB3YW50IHRvIHNlZSBhIGNsZWFyIGxpc3QuCiogICAqKmBkZXBlbmRzIG9uYCBjbGF1c2VzOioqIENydWNpYWwuIFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IElzIE1QVENQJiMzOTtzIGZ1bmN0aW9uYWxpdHkgY29udGluZ2VudCBvbiBvdGhlciBuZXR3b3JraW5nIGZlYXR1cmVzIGJlaW5nIGVuYWJsZWQ/IEFyZSB0aGVyZSBzcGVjaWZpYyBrZXJuZWwgbW9kdWxlcyBvciBhcmNoaXRlY3R1cmVzIHRoYXQgYXJlIHJlcXVpcmVkPyBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhvc2UgZGVwZW5kZW5jaWVzIHRvIHRyb3VibGVzaG9vdCBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBjb25mbGljdHMuIEkgd2FudCB0byBzZWUgaWYgdGhlIGRlcGVuZGVuY2llcyBhcmUgc2FuZSwgb3IgaWYgdGhlcmUmIzM5O3MgYW55IHN1cnByaXNpbmcgcmVxdWlyZW1lbnQgSSB3b3VsZG4mIzM5O3QgZXhwZWN0LgoqICAgKipgYm9vbGAsIGB0cmlzdGF0ZWAsIGBzdHJpbmdgLCBgaW50YCBkZWZpbml0aW9uczoqKiBUaGlzIHRlbGxzIG1lIHRoZSB0eXBlIG9mIHRoZSBvcHRpb24uIEkgd2FudCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIGFsbG93YWJsZSB2YWx1ZXMgZm9yIGVhY2ggb3B0aW9uIGFyZSwgaW5jbHVkaW5nIGRlZmF1bHRzLgoqICAgKipgaGVscGAgc2VjdGlvbnM6KiogVGhlc2UgYXJlIGVzc2VudGlhbC4gSSYjMzk7bSBleHBlY3RpbmcgY29uY2lzZSwgaW5mb3JtYXRpdmUgZGVzY3JpcHRpb25zIG9mIGVhY2ggb3B0aW9uJiMzOTtzIHB1cnBvc2UuIEkgZG9uJiMzOTt0IG5lZWQgYSB0dXRvcmlhbCwgYnV0IEkgbmVlZCBlbm91Z2ggY29udGV4dCB0byB1bmRlcnN0YW5kIHRoZSBwcmFjdGljYWwgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBhIGdpdmVuIGZlYXR1cmUuIEFyZSB0aGVyZSBzZWN1cml0eSBjb25zaWRlcmF0aW9ucz8gUGVyZm9ybWFuY2UgdHJhZGUtb2Zmcz8KKiAgICoqYHNlbGVjdGAgc3RhdGVtZW50czoqKiBBbnkgb3B0aW9ucyB0aGF0IGFyZSBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgKHNlbGVjdGVkKSBieSBvdGhlcnM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB0cmFuc2l0aXZlIGNsb3N1cmUgb2YgdGhvc2Ugc2VsZWN0aW9ucy4KKiAgICoqYGRlZmF1bHRgIHZhbHVlczoqKiBBcmUgdGhlcmUgc2Vuc2libGUgZGVmYXVsdHMsIG9yIGRvIEkgbmVlZCB0byBleHBsaWNpdGx5IHNldCB0aGluZ3M/IEkgbmVlZCB0byBjaGVjayBmb3IgYW55IGNvbmZpZ3VyYXRpb25zIHRoYXQgZGV2aWF0ZSBmcm9tIGJlc3QgcHJhY3RpY2VzLgoqICAgKipDb25kaXRpb25hbCBibG9ja3M6KiogSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBwbGF0Zm9ybS1zcGVjaWZpYyBvciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uZmlndXJhdGlvbnMuIFRoZSBwcmVzZW5jZSBvZiBjb25kaXRpb25hbHMgaXMgcXVpdGUgY29tbW9uIGluIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZW5hYmxlZCBmb3IgbXkgcGxhdGZvcm0uCiogICAqKkNvbW1lbnRzOioqIEhvcGVmdWxseSwgdGhlcmUgYXJlIHNvbWUgd2VsbC1wbGFjZWQgY29tbWVudHMuCiogICAqKldhcm5pbmdzL0Vycm9yczoqKiBJZiB0aGVyZSBhcmUgYW55LCBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoZXkmIzM5O3JlIHNldC4KSSYjMzk7bGwgYWxzbyBrZWVwIGFuIGV5ZSBvdXQgZm9yIGFueSB1bnVzdWFsIG9yIHZlbmRvci1zcGVjaWZpYyBvcHRpb25zIHRoYXQgbWF5IGJlIGluY2x1ZGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciB1c2UsIGFuZCBtYWtlIHN1cmUgdGhhdCBhbnkgY3VzdG9tIGV4dGVuc2lvbnMgZG9uJiMzOTt0IGNvbmZsaWN0IHdpdGggbW9yZSBzdGFuZGFyZCBjb25maWd1cmF0aW9ucy4KQmFzaWNhbGx5LCBteSBnb2FsIGlzIHRvIGJ1aWxkIGEgY29tcGxldGUsIG1lbnRhbCBtb2RlbCBvZiB0aGUgTVBUQ1AgY29uZmlndXJhdGlvbiBzcGFjZSwgc28gSSBjYW4gY29uZmlkZW50bHkgZW5hYmxlLCBkaXNhYmxlLCBhbmQgdHVuZSBpdCBmb3IgbXkgc3BlY2lmaWMgdXNlIGNhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbXB0Y3AvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdFxuICAgMjpcdGNvbmZpZyBNUFRDUFxuICAgMzpcdFx0Ym9vbCBcJiMzNDtNUFRDUDogTXVsdGlwYXRoIFRDUFwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA1Olx0XHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcbiAgIDY6XHRcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxuICAgNzpcdFx0c2VsZWN0IENSWVBUT19MSUJfVVRJTFNcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgTXVsdGlwYXRoIFRDUCAoTVBUQ1ApIGNvbm5lY3Rpb25zIHNlbmQgYW5kIHJlY2VpdmUgZGF0YSBvdmVyIG11bHRpcGxlXG4gIDEwOlx0XHQgIHN1YmZsb3dzIGluIG9yZGVyIHRvIHV0aWxpemUgbXVsdGlwbGUgbmV0d29yayBwYXRocy4gRWFjaCBzdWJmbG93XG4gIDExOlx0XHQgIHVzZXMgdGhlIFRDUCBwcm90b2NvbCwgYW5kIFRDUCBvcHRpb25zIGNhcnJ5IGhlYWRlciBpbmZvcm1hdGlvbiBmb3JcbiAgMTI6XHRcdCAgTVBUQ1AuXG4gIDEzOlx0XG4gIDE0Olx0aWYgTVBUQ1BcbiAgMTU6XHRcbiAgMTY6XHRjb25maWcgSU5FVF9NUFRDUF9ESUFHXG4gIDE3Olx0XHRkZXBlbmRzIG9uIElORVRfRElBR1xuICAxODpcdFx0ZGVmX3RyaXN0YXRlIElORVRfRElBR1xuICAxOTpcdFxuICAyMDpcdGNvbmZpZyBNUFRDUF9JUFY2XG4gIDIxOlx0XHRib29sIFwmIzM0O01QVENQOiBJUHY2IHN1cHBvcnQgZm9yIE11bHRpcGF0aCBUQ1BcJiMzNDtcbiAgMjI6XHRcdGRlcGVuZHMgb24gSVBWNj15XG4gIDIzOlx0XHRkZWZhdWx0IHlcbiAgMjQ6XHRcbiAgMjU6XHRjb25maWcgTVBUQ1BfS1VOSVRfVEVTVFxuICAyNjpcdFx0dHJpc3RhdGUgXCYjMzQ7VGhpcyBidWlsZHMgdGhlIE1QVENQIEtVbml0IHRlc3RzXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgMjc6XHRcdGRlcGVuZHMgb24gS1VOSVRcbiAgMjg6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDI5Olx0XHRoZWxwXG4gIDMwOlx0XHQgIEN1cnJlbnRseSBjb3ZlcnMgdGhlIE1QVENQIGNyeXB0byBhbmQgdG9rZW4gaGVscGVycy5cbiAgMzE6XHRcdCAgT25seSB1c2VmdWwgZm9yIGtlcm5lbCBkZXZzIHJ1bm5pbmcgS1VuaXQgdGVzdCBoYXJuZXNzIGFuZCBhcmUgbm90XG4gIDMyOlx0XHQgIGZvciBpbmNsdXNpb24gaW50byBhIHByb2R1Y3Rpb24gYnVpbGQuXG4gIDMzOlx0XG4gIDM0Olx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwgcGxlYXNlIHJlZmVyXG4gIDM1Olx0XHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uIGluIERvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0Ly5cbiAgMzY6XHRcbiAgMzc6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMzg6XHRcbiAgMzk6XHRlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0NzQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIE1QVENQIFNvdXJjZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYHByb3RvY29sLmNgIGlzIGNvbXBpbGVkIHdpdGhpbiB0aGUgTVBUQ1AgZnJhbWV3b3JrLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGBuZXQvbXB0Y3AvTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBidWlsZCBpbnN0cnVjdGlvbnMgYXJlIG1vc3QgbGlrZWx5IGRlZmluZWQuIFRoZSBNYWtlZmlsZSBzaG91bGQgY2xlYXJseSBzcGVjaWZ5IHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciBkZXBlbmRlbmNpZXMgYXJlIHJlcXVpcmVkIHRvIGluY2x1ZGUgYHByb3RvY29sLmNgIGluIHRoZSBmaW5hbCBidWlsZC4gVGltZSB0byBjb25maXJtIHRoZSBidWlsZCBkZXBlbmRlbmNpZXMuIEkgd2lsbCBtYWtlIHN1cmUgdGhlIGNvbXBpbGF0aW9uIGNvbW1hbmQgZm9yIGBwcm90b2NvbC5jYCBpcyBjbGVhcmx5IHZpc2libGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21wdGNwL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdG9iai0kKENPTkZJR19NUFRDUCkgJiM0Mzs9IG1wdGNwLm9cbiAgIDM6XHRcbiAgIDQ6XHRtcHRjcC15IDo9IHByb3RvY29sLm8gc3ViZmxvdy5vIG9wdGlvbnMubyB0b2tlbi5vIGNyeXB0by5vIGN0cmwubyBwbS5vIGRpYWcubyBcXFxuICAgNTpcdFx0ICAgbWliLm8gcG1fbmV0bGluay5vIHNvY2tvcHQubyBwbV91c2Vyc3BhY2UubyBmYXN0b3Blbi5vIHNjaGVkLm8gXFxcbiAgIDY6XHRcdCAgIG1wdGNwX3BtX2dlbi5vIHBtX2tlcm5lbC5vXG4gICA3Olx0XG4gICA4Olx0b2JqLSQoQ09ORklHX1NZTl9DT09LSUVTKSAmIzQzOz0gc3luY29va2llcy5vXG4gICA5Olx0b2JqLSQoQ09ORklHX0lORVRfTVBUQ1BfRElBRykgJiM0Mzs9IG1wdGNwX2RpYWcub1xuICAxMDpcdFxuICAxMTpcdG1wdGNwX2NyeXB0b190ZXN0LW9ianMgOj0gY3J5cHRvX3Rlc3Qub1xuICAxMjpcdG1wdGNwX3Rva2VuX3Rlc3Qtb2JqcyA6PSB0b2tlbl90ZXN0Lm9cbiAgMTM6XHRvYmotJChDT05GSUdfTVBUQ1BfS1VOSVRfVEVTVCkgJiM0Mzs9IG1wdGNwX2NyeXB0b190ZXN0Lm8gbXB0Y3BfdG9rZW5fdGVzdC5vXG4gIDE0Olx0XG4gIDE1Olx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk2NgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1QVENQIFJlY2VpdmUgTWVzc2FnZSBGdW5jdGlvbioqCgpPa2F5LCBzbyBgcHJvdG9jb2wub2AgZ2V0cyBjb21waWxlZCBvbmx5IHdoZW4gTVBUQ1AgaXMgZW5hYmxlZCwgaW5kaWNhdGVkIGJ5IGBDT05GSUdfTVBUQ1A9eWAsIGFuZCB0aGF0JiMzOTtzIGRlcGVuZGVudCBvbiBgSU5FVGAuIEdvdCBpdC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIE1QVENQIHJlY2VpdmUgbWVzc2FnZSBmdW5jdGlvbiwgYG1wdGNwX3JlY3Ztc2dgLCB3b3Jrcy4gTGV0JiMzOTtzIHNlZS4uLiBJcyBpdCBzdGF0aWM/IFllcywgdGhlIGRlZmluaXRpb24gc2hvd3MgaXQmIzM5O3MgYHN0YXRpYyBpbnQgbXB0Y3BfcmVjdm1zZyguLi4pYC4gVGhhdCBsaW1pdHMgaXRzIHNjb3BlLCB3aGljaCBpcyB0eXBpY2FsIGZvciBpbnRlcm5hbCBmdW5jdGlvbnMuCgpOZXh0LCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBtcHRjcF9yZWN2bXNnYCBpcyBhY3R1YWxseSBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIHByb3RvY29sIG9wZXJhdGlvbnMsIGkuZS4sIGlzIGl0IGluIHRoZSBzeW1ib2wgdGFibGUgc29tZWhvdz8gSXMgaXQgY2FsbGFibGUgdmlhIGBwcm90b19vcHNgPyBUaGF0JiMzOTtzIHdoYXQgSSByZWFsbHkgbmVlZCB0byBhc2NlcnRhaW4uIFRpbWUgdG8gY2hlY2sgaXRzIHVzYWdlIHdpdGhpbiBgbmV0L21wdGNwL3Byb3RvY29sLmNgIHRvIHNlZSBob3cgaXQmIzM5O3MgYWN0dWFsbHkgcmVmZXJlbmNlZC4gTG9va2luZyBmb3IgY2FsbCBzaXRlcyB3aWxsIGdpdmUgdGhlIGNsZWFyZXN0IHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX3JlY3Ztc2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmM9MjEzOD1zdGF0aWMgdm9pZCBtcHRjcF9lYXRfcmVjdl9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIxNDgtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyMTQ5OnN0YXRpYyBpbnQgX19tcHRjcF9yZWN2bXNnX21za3Eoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMTUwLVx0XHRcdFx0c2l6ZV90IGxlbiwgaW50IGZsYWdzLCBpbnQgY29waWVkX3RvdGFsLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTIzNTU9c3RhdGljIHVuc2lnbmVkIGludCBtcHRjcF9pbnFfaGludChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjM3NS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIzNzY6c3RhdGljIGludCBtcHRjcF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjM3Ny1cdFx0XHQgaW50IGZsYWdzKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI0MDgtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyNDA5Olx0XHRieXRlc19yZWFkID0gX19tcHRjcF9yZWN2bXNnX21za3Eoc2ssIG1zZywgbGVuIC0gY29waWVkLCBmbGFncyxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI0MTAtXHRcdFx0XHRcdFx0ICBjb3BpZWQsIFx1MDAyNnRzcywgXHUwMDI2Y21zZ19mbGFncyxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz00MjIyPXN0YXRpYyBzdHJ1Y3QgcHJvdG8gbXB0Y3BfcHJvdCA9IHtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MjM0LVx0LmlvY3RsXHRcdD0gbXB0Y3BfaW9jdGwsXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0MjM1Olx0LnJlY3Ztc2dcdD0gbXB0Y3BfcmVjdm1zZyxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQyMzYtXHQucmVsZWFzZV9jYlx0PSBtcHRjcF9yZWxlYXNlX2NiLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODAyCgkJCQkJCQlvdXRwdXQ6IDEwNwoJCQkJCQkJdGhvdWdodHM6IDgxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNUFRDUCBFcnJvciBIYW5kbGluZyBpbiByZWN2bXNnOiBBIEZ1enppbmcgVGFyZ2V0KioKCk9rYXksIHNvIGBtcHRjcF9yZWN2bXNnYCBpcyB0aGUgY3J1Y2lhbCBgcmVjdm1zZ2AgaGFuZGxlciBmb3IgdGhlIE1QVENQIHByb3RvY29sLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgYSByZWFsLCBub24taW5saW5lZCBmdW5jdGlvbiwgYW5kIGEgcXVpY2sgY2hlY2sgb2YgYHZtbGludXhgIGNvbmZpcm1zIGl0OyBgbXB0Y3BfcmVjdm1zZ2AgaXMgYSB2YWxpZCwgYWRkcmVzc2FibGUgZnVuY3Rpb24gdXNlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgd2l0aGluIGBzdHJ1Y3QgcHJvdG8gbXB0Y3BfcHJvdGAuCgpOb3csIGxldCYjMzk7cyBldmFsdWF0ZSB0aGlzIGJhc2VkIG9uIHRoZSBjcml0ZXJpYS4KCkZpcnN0LCB0aGUgY29yZSB0cmlhZ2UgcGhpbG9zb3BoeS4gUmVhY2hhYmlsaXR5IGlzIHRoZSBrZXkuIE1QVENQIGlzIGRlZmluaXRpdmVseSByZWFjaGFibGUgaW4gYSBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudCB1c2luZyB2aXJ0dWFsIG5ldHdvcmtpbmcsIGxvb3BiYWNrLCBhbmQgc3RhbmRhcmQgc29ja2V0IG9wZXJhdGlvbnMuIFRoYXQgY2hlY2tzIG91dC4gVGhlIHBhdGNoIGl0c2VsZiBkaXJlY3RseSBtb2RpZmllcyBleGVjdXRhYmxlIGxvZ2ljICp3aXRoaW4qIGBtcHRjcF9yZWN2bXNnYC4gU3BlY2lmaWNhbGx5LCB0aGUgZXJyb3IgaGFuZGxpbmcgZnJvbSBgc2tfd2FpdF9kYXRhYCB3YXMgZmF1bHR5LiBUaGUgcHJldmlvdXMgY29kZSB3YXMgZmFpbGluZyB0byBwcm9wYWdhdGUgdGhlIGNvcnJlY3QgZXJyb3IgY29kZSB0byB0aGUgY2FsbGVyLCBwb3RlbnRpYWxseSByZXR1cm5pbmcgMCBpbnN0ZWFkIG9mIHRoZSByZWFsIGVycm9yIHdoZW4gYHNrX3dhaXRfZGF0YSgpYCBmYWlsZWQgb3IgdGltZWQgb3V0LiBUaGlzIHBhdGNoIGZpeGVzIHRoaXMgYnkgZW5zdXJpbmcgdGhlIGNvcnJlY3QgZXJyb3IgY29kZSBpcyByZXR1cm5lZC4gU2luY2UgdGhpcyBpcyBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbSAoYG5ldC9tcHRjcC9gKSBhbmQgaXQmIzM5O3MgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBXb3J0aEZ1enppbmc9dHJ1ZS4KCk5leHQsIGZvY3VzIHN5bWJvbHMuIGBtcHRjcF9yZWN2bXNnYCBpcyAqdGhlKiBmdW5jdGlvbiBtb2RpZmllZCBpbiB0aGlzIHBhdGNoLiBBbmQgaXQgKmFwcGVhcnMqIHRvIGJlIHRoZSAqb25seSogb25lLiBOb3csIGlzIGBtcHRjcF9yZWN2bXNnYCBhIHViaXF1aXRvdXMgZnVuY3Rpb24/IE5vLCBpdCYjMzk7cyBub3QuIEl0JiMzOTtzIHNwZWNpZmljYWxseSB0aWVkIHRvIE1QVENQIHNvY2tldHMgKElQUFJPVE9fTVBUQ1ApLiBTbyB0aGUgZm9jdXMgc3ltYm9scyBhcmUgY2xlYXJseSBgWyYjMzQ7bXB0Y3BfcmVjdm1zZyYjMzQ7XWAuCgpNb3Zpbmcgb24gdG8gZW5hYmxlIGNvbmZpZ3MuIFdlIG5lZWQgYE1QVENQYCwgd2hpY2ggZGVwZW5kcyBvbiBgSU5FVGAuICBgSU5FVGAgaXMgc3RhbmRhcmQsIHNvIGxldCYjMzk7cyBmb2N1cyBvbiBgTVBUQ1BgIHNwZWNpZmljYWxseSBiZWNhdXNlIGl04oCZcyB0aGUgZmVhdHVyZSBjb25maWd1cmF0aW9uLiBBbnkgb3RoZXIgZGVwZW5kZW5jaWVzPyBUaGUgZGVwZW5kZW5jaWVzIGFyZSBgc2VsZWN0IFNLQl9FWFRFTlNJT05TYCwgYHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NmAsIGFuZCBgc2VsZWN0IENSWVBUT19MSUJfVVRJTFNgLiBXZSBhcmUgb25seSBlbmFibGluZyBgTVBUQ1BgLCBzbyB0aGUgY29uZmlncyBhcmUgYFsmIzM0O01QVENQJiMzNDtdYC4KCkZpbmFsbHksIHRoZSByZWFzb25pbmcuIEluIHNob3J0LCB0aGUgcGF0Y2ggY29ycmVjdHMgZXJyb3IgcmVwb3J0aW5nIGluIGBtcHRjcF9yZWN2bXNnKClgLiBBbiBlcnJvciBmcm9tIGBza193YWl0X2RhdGEoKWAgd2FzIGJlaW5nIGRpc2NhcmRlZCwgbGVhZGluZyB0byBpbmNvcnJlY3QgcmV0dXJuIHZhbHVlcyBmcm9tIGByZWN2bXNnKClgLiBUaGlzIHBhdGNoIHdpbGwgYWxsb3cgZXJyb3IgY29kZXMgdG8gYmUgY29ycmVjdGx5IHByb3BhZ2F0ZWQgZnJvbSBgbXB0Y3BfcmVjdm1zZygpYCwgYWxsb3dpbmcgZWRnZSBjYXNlIGZhaWx1cmVzIHRvIGJlIHN1cmZhY2VkIGFuZCBleHBvc2VkIHRvIHRoZSBzb2NrZXQgY2FsbHMuIFRoaXMgaXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpbiB0aGUgTVBUQ1AgbmV0d29ya2luZyBzdWJzeXN0ZW0sIHJlYWNoYWJsZSB0aHJvdWdoIHN0YW5kYXJkIHNvY2tldCBjYWxscy4gVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBtZXJpdHMgZnV6emluZyB0byBhc3Nlc3MgTVBUQ1Agc29ja2V0IHJlY2VpdmUgYmVoYXZpb3IgYW5kIGlkZW50aWZ5IGFueSByZW1haW5pbmcgZWRnZSBjYXNlcy4KCkV2ZXJ5dGhpbmcgc2VlbXMgbG9naWNhbGx5IHNvdW5kLCBzbyBpdCYjMzk7cyB0aW1lIHRvIGludm9rZSBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TVBUQ1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttcHRjcF9yZWN2bXNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGVycm9yIGhhbmRsaW5nIGluIG1wdGNwX3JlY3Ztc2coKSBieSBhc3NpZ25pbmcgdGhlIHJldHVybiB2YWx1ZSBvZiBza193YWl0X2RhdGEoKSB0byAmIzM5O2NvcGllZCYjMzk7IGluc3RlYWQgb2YgJiMzOTtlcnImIzM5OywgZW5zdXJpbmcgbmVnYXRpdmUgZXJyb3IgY29kZXMgYXJlIHByb3Blcmx5IHJldHVybmVkIHdoZW4gbm8gZGF0YSBoYXMgYmVlbiByZWFkLiBUaGlzIGNoYW5nZXMgY29udHJvbCBmbG93IGFuZCByZXR1cm4gdmFsdWVzIGluIHJlYWNoYWJsZSBNUFRDUCBzb2NrZXQgcmVjZWl2ZSBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNUFRDUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21wdGNwX3JlY3Ztc2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgZXJyb3IgaGFuZGxpbmcgaW4gbXB0Y3BfcmVjdm1zZygpIGJ5IGFzc2lnbmluZyB0aGUgcmV0dXJuIHZhbHVlIG9mIHNrX3dhaXRfZGF0YSgpIHRvICYjMzk7Y29waWVkJiMzOTsgaW5zdGVhZCBvZiAmIzM5O2VyciYjMzk7LCBlbnN1cmluZyBuZWdhdGl2ZSBlcnJvciBjb2RlcyBhcmUgcHJvcGVybHkgcmV0dXJuZWQgd2hlbiBubyBkYXRhIGhhcyBiZWVuIHJlYWQuIFRoaXMgY2hhbmdlcyBjb250cm9sIGZsb3cgYW5kIHJldHVybiB2YWx1ZXMgaW4gcmVhY2hhYmxlIE1QVENQIHNvY2tldCByZWNlaXZlIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJldHVybiB2YWx1ZSBidWcgaW4gbXB0Y3BfcmVjdm1zZygpIHdoZXJlIGFuIGVycm9yIHJldHVybmVkIGJ5IHNrX3dhaXRfZGF0YSgpIHdhcyBhc3NpZ25lZCB0byB0aGUgaW5uZXItc2NvcGVkIHZhcmlhYmxlICYjMzk7ZXJyJiMzOTsgaW5zdGVhZCBvZiAmIzM5O2NvcGllZCYjMzk7LCBjYXVzaW5nIG1wdGNwX3JlY3Ztc2coKSB0byByZXR1cm4gMCBpbnN0ZWFkIG9mIHRoZSBuZWdhdGl2ZSBlcnJvciBjb2RlIHdoZW4gbm8gZGF0YSBoYWQgYmVlbiBjb3BpZWQgeWV0LlxuXG5Cb3RoICYjMzk7ZXJyJiMzOTsgYW5kICYjMzk7Y29waWVkJiMzOTsgYXJlIGZ1bGx5IGluaXRpYWxpemVkIHNjYWxhciB2YXJpYWJsZXMgKGNvcGllZCBpcyBpbml0aWFsaXplZCB0byAwLCBhbmQgZXJyIHJlY2VpdmVzIHRoZSByZXR1cm4gY29kZSBmcm9tIHNrX3dhaXRfZGF0YSkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCBidWZmZXIgYWNjZXNzZXMuIEJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZiNTIzODI0ZTI4MTRlMzI3MDk5OWM1NjEzNTZiOWZlNTM3MTlhYTUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCAxMyAxMDozMzozOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5jIGIvbmV0L21wdGNwL3Byb3RvY29sLmMKaW5kZXggMDA5OGUyODMwOTMxOC4uOGRjMjVlZjE1NDJjNSAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3Byb3RvY29sLmMKQEAgLTI0NTksNyAmIzQzOzI0NTksNyBAQCBzdGF0aWMgaW50IG1wdGNwX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sCiAJCW1wdGNwX2NsZWFudXBfcmJ1Zihtc2ssIGNvcGllZCk7CiAJCWVyciA9IHNrX3dhaXRfZGF0YShzaywgJmFtcDt0aW1lbywgbGFzdCk7CiAJCWlmIChlcnIgJmx0OyAwKSB7Ci0JCQllcnIgPSBjb3BpZWQgPyA6IGVycjsKJiM0MzsJCQljb3BpZWQgPSBjb3BpZWQgPyA6IGVycjsKIAkJCWdvdG8gb3V0X2VycjsKIAkJfQogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwODcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNUFRDUCBSZWNlaXZlIFBhdGgqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIGluIGBuZXQvbXB0Y3AvcHJvdG9jb2wuY2AuIFRoZSBkaWZmIGl0c2VsZiBzZWVtcyBzdHJhaWdodGZvcndhcmQg4oCTIGEgc21hbGwgbW9kaWZpY2F0aW9uIGFyb3VuZCBsaW5lIDI0NTkgd2l0aGluIHRoZSBgbXB0Y3BfcmVjdm1zZ2AgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGgsIHBvdGVudGlhbGx5IGRlYWxpbmcgd2l0aCB0aGUgcmV0dXJuIHZhbHVlIGZyb20gYHNrX3dhaXRfZGF0YWAuCgpTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2UgdGhlIG9yaWdpbmFsIGNvZGUgcG90ZW50aWFsbHkgb3ZlcndyaXRlcyBhIHZhbHVlIHdpdGggYW4gZXJyb3IgY29kZSB3aGVuIHRoZSBgc2tfd2FpdF9kYXRhYCBjYWxsIGZhaWxzLCBldmVuIGlmIHNvbWUgZGF0YSBoYWQgYmVlbiBjb3BpZWQgcHJpb3IgdG8gdGhlIGVycm9yLiBUaGUgdXBkYXRlZCBjb2RlIG5vdyBzZWVtcyB0byBwcmlvcml0aXplIHRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGlmIHRoZSBjb3B5IGhhcyBoYXBwZW5lZCwgYW5kIG9ubHkgcmV0dXJucyB0aGUgZXJyb3IgaWYgdGhlcmUgd2VyZSBubyBieXRlcyBjb3BpZWQuCgpUbyBnZXQgdGhlIGZ1bGwgcGljdHVyZSwgSSBzaG91bGQgcmVhbGx5IHVzZSBgcmVhZC1maWxlYCB0byBleGFtaW5lIHRoZSBjb250ZXh0IG9mIHRoaXMgY2hhbmdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBtcHRjcF9jbGVhbnVwX3JidWZgIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoaXMgc2VjdGlvbiwgYW5kIGV4YWN0bHkgaG93IHRoZSBgY29waWVkYCB2YXJpYWJsZSBpcyBiZWluZyB1c2VkIHVwc3RyZWFtLiBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGp1c3QgYmVmb3JlIGFuZCBhZnRlciB0aGlzIHBvaW50LiBUaGlzIGNoYW5nZSBtaWdodCBiZSByZWxhdGVkIHRvIGhvdyB3ZSBoYW5kbGUgcGFydGlhbCByZWFkcyBvciB0aW1lb3V0cyBpbiB0aGUgTVBUQ1AgcmVjZWl2ZSBwYXRoLCBhbmQgSSBuZWVkIHRvIGFzc2VzcyBob3cgdGhlIG92ZXJhbGwgYmVoYXZpb3Igb2YgdGhlIGZ1bmN0aW9uLCBhbmQgb2YgdGhlIG1vZHVsZSwgd2lsbCBiZSBhZmZlY3RlZC4gVGhlIGVycm9yIGhhbmRsaW5nIGxvb2tzIGEgbGl0dGxlIGRpZmZlcmVudCwgYW5kIEkgd2FudCB0byB2ZXJpZnkgdGhlcmUgYXJlIG5vIHVuaW50ZW5kZWQgc2lkZSBlZmZlY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wcm90b2NvbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQ0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNDQwOlx0XHRcdFx0XHRicmVhaztcbjI0NDE6XHRcbjI0NDI6XHRcdFx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0NMT1NFKSB7XG4yNDQzOlx0XHRcdFx0XHRjb3BpZWQgPSAtRU5PVENPTk47XG4yNDQ0Olx0XHRcdFx0XHRicmVhaztcbjI0NDU6XHRcdFx0XHR9XG4yNDQ2Olx0XG4yNDQ3Olx0XHRcdFx0aWYgKCF0aW1lbykge1xuMjQ0ODpcdFx0XHRcdFx0Y29waWVkID0gLUVBR0FJTjtcbjI0NDk6XHRcdFx0XHRcdGJyZWFrO1xuMjQ1MDpcdFx0XHRcdH1cbjI0NTE6XHRcbjI0NTI6XHRcdFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcbjI0NTM6XHRcdFx0XHRcdGNvcGllZCA9IHNvY2tfaW50cl9lcnJubyh0aW1lbyk7XG4yNDU0Olx0XHRcdFx0XHRicmVhaztcbjI0NTU6XHRcdFx0XHR9XG4yNDU2Olx0XHRcdH1cbjI0NTc6XHRcbjI0NTg6XHRcdFx0cHJfZGVidWcoXCYjMzQ7YmxvY2sgdGltZW91dCAlbGRcXG5cJiMzNDssIHRpbWVvKTtcbjI0NTk6XHRcdFx0bXB0Y3BfY2xlYW51cF9yYnVmKG1zaywgY29waWVkKTtcbjI0NjA6XHRcdFx0ZXJyID0gc2tfd2FpdF9kYXRhKHNrLCBcdTAwMjZ0aW1lbywgbGFzdCk7XG4yNDYxOlx0XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbjI0NjI6XHRcdFx0XHRjb3BpZWQgPSBjb3BpZWQgPyA6IGVycjtcbjI0NjM6XHRcdFx0XHRnb3RvIG91dF9lcnI7XG4yNDY0Olx0XHRcdH1cbjI0NjU6XHRcdH1cbjI0NjY6XHRcbjI0Njc6XHRcdG1wdGNwX2NsZWFudXBfcmJ1Zihtc2ssIGNvcGllZCk7XG4yNDY4Olx0XG4yNDY5Olx0b3V0X2VycjpcbjI0NzA6XHRcdGlmIChjbXNnX2ZsYWdzIFx1MDAyNlx1MDAyNiBjb3BpZWQgXHUwMDNlPSAwKSB7XG4yNDcxOlx0XHRcdGlmIChjbXNnX2ZsYWdzIFx1MDAyNiBNUFRDUF9DTVNHX1RTKVxuMjQ3MjpcdFx0XHRcdHRjcF9yZWN2X3RpbWVzdGFtcChtc2csIHNrLCBcdTAwMjZ0c3MpO1xuMjQ3MzpcdFxuMjQ3NDpcdFx0XHRpZiAoY21zZ19mbGFncyBcdTAwMjYgTVBUQ1BfQ01TR19JTlEpIHtcbjI0NzU6XHRcdFx0XHR1bnNpZ25lZCBpbnQgaW5xID0gbXB0Y3BfaW5xX2hpbnQoc2spO1xuMjQ3NjpcdFxuMjQ3NzpcdFx0XHRcdHB1dF9jbXNnKG1zZywgU09MX1RDUCwgVENQX0NNX0lOUSwgc2l6ZW9mKGlucSksIFx1MDAyNmlucSk7XG4yNDc4Olx0XHRcdH1cbjI0Nzk6XHRcdH1cbjI0ODA6XHRcbjI0ODE6XHRcdHByX2RlYnVnKFwmIzM0O21zaz0lcCByeCBxdWV1ZSBlbXB0eT0lZCBjb3BpZWQ9JWRcXG5cJiMzNDssXG4yNDgyOlx0XHRcdCBtc2ssIHNrYl9xdWV1ZV9lbXB0eShcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlKSwgY29waWVkKTtcbjI0ODM6XHRcbjI0ODQ6XHRcdHJlbGVhc2Vfc29jayhzayk7XG4yNDg1Olx0XHRyZXR1cm4gY29waWVkO1xuMjQ4NjpcdH1cbjI0ODc6XHRcbjI0ODg6XHRzdGF0aWMgdm9pZCBtcHRjcF9yZXRyYW5zbWl0X3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuMjQ4OTpcdHtcbjI0OTA6XHRcdHN0cnVjdCBzb2NrICpzayA9IHRpbWVyX2NvbnRhaW5lcl9vZihzaywgdCwgbXB0Y3BfcmV0cmFuc21pdF90aW1lcik7XG4yNDkxOlx0XHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuMjQ5MjpcdFxuMjQ5MzpcdFx0YmhfbG9ja19zb2NrKHNrKTtcbjI0OTQ6XHRcdGlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSkge1xuMjQ5NTpcdFx0XHQvKiB3ZSBuZWVkIGEgcHJvY2VzcyBjb250ZXh0IHRvIHJldHJhbnNtaXQgKi9cbjI0OTY6XHRcdFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KE1QVENQX1dPUktfUlRYLCBcdTAwMjZtc2stXHUwMDNlZmxhZ3MpKVxuMjQ5NzpcdFx0XHRcdG1wdGNwX3NjaGVkdWxlX3dvcmsoc2spO1xuMjQ5ODpcdFx0fSBlbHNlIHtcbjI0OTk6XHRcdFx0LyogZGVsZWdhdGUgb3VyIHdvcmsgdG8gdGNwX3JlbGVhc2VfY2IoKSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTc0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgbXB0Y3BfcmVjdm1zZzogRXJyb3IgSGFuZGxpbmcgYW5kIERhdGEgVHJhbnNmZXIqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpc3NlY3QgYG1wdGNwX3JlY3Ztc2dgIGZyb20gdGhlIGdyb3VuZCB1cCwgZm9jdXNpbmcgc3BlY2lmaWNhbGx5IG9uIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBgZXJyYCBhbmQgYGNvcGllZGAuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGVzZSB2YXJpYWJsZXMgYXJlIHVzZWQgdGhyb3VnaG91dCB0aGUgZnVuY3Rpb24mIzM5O3MgZXhlY3V0aW9uLiBUaGlzIGlzIGNvcmUgdG8gdW5kZXJzdGFuZGluZyBpdHMgcmVsaWFiaWxpdHkgYW5kIGVycm9yIHJlcG9ydGluZy4gSeKAmW0gdGhpbmtpbmcgYWJvdXQgaG93IGVycm9ycyBhcmUgc2lnbmFsZWQgYW5kIGhvdyBtdWNoIGRhdGEgZ2V0cyB0cmFuc2ZlcnJlZCBpbiBkaWZmZXJlbnQgc2NlbmFyaW9zLiBJcyBgZXJyYCBiZWluZyB1c2VkIHRvIGluZGljYXRlIHBhcnRpYWwgcmVhZHMgZHVlIHRvIGVycm9ycywgb3IgZG9lcyBpdCBvbmx5IGZsYWcgY29tcGxldGUgZmFpbHVyZXM/IEFuZCBob3cgZG9lcyBgY29waWVkYCB0cmFjayB0aGUgYW1vdW50IG9mIGRhdGEgc3VjY2Vzc2Z1bGx5IHBsYWNlZCBpbiB0aGUgdXNlciBidWZmZXIsIHBhcnRpY3VsYXJseSB3aGVuIG11bHRpcGxlIHN1YmZsb3dzIGFyZSBpbnZvbHZlZD8gSeKAmW0gZ29pbmcgdG8gd2F0Y2ggY2FyZWZ1bGx5IGZvciBlZGdlIGNhc2VzIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGluIHRoZSBjb250ZXh0IG9mIG11bHRpcGF0aCBvcGVyYXRpb24uIFRoZSBmbG93IGhlcmUgY2FuIGdldCBjb21wbGV4LCBzbyB0cmFjaW5nIHRoZXNlIHZhcmlhYmxlcyBpcyBrZXkgdG8gYSBzb2xpZCB1bmRlcnN0YW5kaW5nLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhvc2Ugc2NlbmFyaW9zIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wcm90b2NvbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjM3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMzcwOlx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0NMT1NFIHx8IChzay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjYgUkNWX1NIVVRET1dOKSlcbjIzNzE6XHRcdFx0cmV0dXJuIDE7XG4yMzcyOlx0XG4yMzczOlx0XHRyZXR1cm4gMDtcbjIzNzQ6XHR9XG4yMzc1Olx0XG4yMzc2Olx0c3RhdGljIGludCBtcHRjcF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuMjM3NzpcdFx0XHRcdCBpbnQgZmxhZ3MpXG4yMzc4Olx0e1xuMjM3OTpcdFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcbjIzODA6XHRcdHN0cnVjdCBzY21fdGltZXN0YW1waW5nX2ludGVybmFsIHRzcztcbjIzODE6XHRcdGludCBjb3BpZWQgPSAwLCBjbXNnX2ZsYWdzID0gMDtcbjIzODI6XHRcdGludCB0YXJnZXQ7XG4yMzgzOlx0XHRsb25nIHRpbWVvO1xuMjM4NDpcdFxuMjM4NTpcdFx0LyogTVNHX0VSUlFVRVVFIGlzIHJlYWxseSBhIG5vLW9wIHRpbGwgd2Ugc3VwcG9ydCBJUF9SRUNWRVJSICovXG4yMzg2Olx0XHRpZiAodW5saWtlbHkoZmxhZ3MgXHUwMDI2IE1TR19FUlJRVUVVRSkpXG4yMzg3Olx0XHRcdHJldHVybiBpbmV0X3JlY3ZfZXJyb3Ioc2ssIG1zZywgbGVuKTtcbjIzODg6XHRcbjIzODk6XHRcdGxvY2tfc29jayhzayk7XG4yMzkwOlx0XHRpZiAodW5saWtlbHkoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0xJU1RFTikpIHtcbjIzOTE6XHRcdFx0Y29waWVkID0gLUVOT1RDT05OO1xuMjM5MjpcdFx0XHRnb3RvIG91dF9lcnI7XG4yMzkzOlx0XHR9XG4yMzk0Olx0XG4yMzk1Olx0XHRtcHRjcF9ycHNfcmVjb3JkX3N1YmZsb3dzKG1zayk7XG4yMzk2Olx0XG4yMzk3Olx0XHR0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xuMjM5ODpcdFxuMjM5OTpcdFx0bGVuID0gbWluX3Qoc2l6ZV90LCBsZW4sIElOVF9NQVgpO1xuMjQwMDpcdFx0dGFyZ2V0ID0gc29ja19yY3Zsb3dhdChzaywgZmxhZ3MgXHUwMDI2IE1TR19XQUlUQUxMLCBsZW4pO1xuMjQwMTpcdFxuMjQwMjpcdFx0aWYgKHVubGlrZWx5KG1zay1cdTAwM2VyZWN2bXNnX2lucSkpXG4yNDAzOlx0XHRcdGNtc2dfZmxhZ3MgPSBNUFRDUF9DTVNHX0lOUTtcbjI0MDQ6XHRcbjI0MDU6XHRcdHdoaWxlIChjb3BpZWQgXHUwMDNjIGxlbikge1xuMjQwNjpcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqbGFzdCA9IE5VTEw7XG4yNDA3Olx0XHRcdGludCBlcnIsIGJ5dGVzX3JlYWQ7XG4yNDA4Olx0XG4yNDA5Olx0XHRcdGJ5dGVzX3JlYWQgPSBfX21wdGNwX3JlY3Ztc2dfbXNrcShzaywgbXNnLCBsZW4gLSBjb3BpZWQsIGZsYWdzLFxuMjQxMDpcdFx0XHRcdFx0XHRcdCAgY29waWVkLCBcdTAwMjZ0c3MsIFx1MDAyNmNtc2dfZmxhZ3MsXG4yNDExOlx0XHRcdFx0XHRcdFx0ICBcdTAwMjZsYXN0KTtcbjI0MTI6XHRcdFx0aWYgKHVubGlrZWx5KGJ5dGVzX3JlYWQgXHUwMDNjIDApKSB7XG4yNDEzOlx0XHRcdFx0aWYgKCFjb3BpZWQpXG4yNDE0Olx0XHRcdFx0XHRjb3BpZWQgPSBieXRlc19yZWFkO1xuMjQxNTpcdFx0XHRcdGdvdG8gb3V0X2VycjtcbjI0MTY6XHRcdFx0fVxuMjQxNzpcdFxuMjQxODpcdFx0XHRjb3BpZWQgJiM0Mzs9IGJ5dGVzX3JlYWQ7XG4yNDE5Olx0XG4yNDIwOlx0XHRcdGlmICghbGlzdF9lbXB0eShcdTAwMjZtc2stXHUwMDNlYmFja2xvZ19saXN0KSBcdTAwMjZcdTAwMjYgbXB0Y3BfbW92ZV9za2JzKHNrKSlcbjI0MjE6XHRcdFx0XHRjb250aW51ZTtcbjI0MjI6XHRcbjI0MjM6XHRcdFx0Lyogb25seSB0aGUgTVBUQ1Agc29ja2V0IHN0YXR1cyBpcyByZWxldmFudCBoZXJlLiBUaGUgZXhpdFxuMjQyNDpcdFx0XHQgKiBjb25kaXRpb25zIG1pcnJvciBjbG9zZWx5IHRjcF9yZWN2bXNnKClcbjI0MjU6XHRcdFx0ICovXG4yNDI2Olx0XHRcdGlmIChjb3BpZWQgXHUwMDNlPSB0YXJnZXQpXG4yNDI3Olx0XHRcdFx0YnJlYWs7XG4yNDI4Olx0XG4yNDI5Olx0XHRcdGlmIChjb3BpZWQpIHtcbjI0MzA6XHRcdFx0XHRpZiAodGNwX3JlY3Zfc2hvdWxkX3N0b3Aoc2spIHx8XG4yNDMxOlx0XHRcdFx0ICAgICF0aW1lbylcbjI0MzI6XHRcdFx0XHRcdGJyZWFrO1xuMjQzMzpcdFx0XHR9IGVsc2Uge1xuMjQzNDpcdFx0XHRcdGlmIChzay1cdTAwM2Vza19lcnIpIHtcbjI0MzU6XHRcdFx0XHRcdGNvcGllZCA9IHNvY2tfZXJyb3Ioc2spO1xuMjQzNjpcdFx0XHRcdFx0YnJlYWs7XG4yNDM3Olx0XHRcdFx0fVxuMjQzODpcdFxuMjQzOTpcdFx0XHRcdGlmIChzay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjYgUkNWX1NIVVRET1dOKVxuMjQ0MDpcdFx0XHRcdFx0YnJlYWs7XG4yNDQxOlx0XG4yNDQyOlx0XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9DTE9TRSkge1xuMjQ0MzpcdFx0XHRcdFx0Y29waWVkID0gLUVOT1RDT05OO1xuMjQ0NDpcdFx0XHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5MzAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA2MjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTXVsdGljYXRoIFRDUCBSZWNlaXZlIElzc3VlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgbXB0Y3BfcmVjdm1zZ2AgZnVuY3Rpb24uIEkgc2VlIHRoZSBjb2RlIHNuaXBwZXQgd2hlcmUgd2UmIzM5O3JlIHdhaXRpbmcgZm9yIGRhdGEgb24gdGhlIHNvY2tldCB3aXRoIGBza193YWl0X2RhdGFgLiBUaGUgY3JpdGljYWwgYml0IGlzIHJpZ2h0IGFmdGVyIHRoYXQgd2FpdDoKCmBgYGMKCQllcnIgPSBza193YWl0X2RhdGEoc2ssICZhbXA7dGltZW8sIGxhc3QpOwoJCWlmIChlcnIgJmx0OyAwKSB7Ci0JCQllcnIgPSBjb3BpZWQgPyA6IGVycjsKJiM0MzsJCQljb3BpZWQgPSBjb3BpZWQgPyA6IGVycjsKCQkJZ290byBvdXRfZXJyOwoJCX0KYGBgCgpOb3csIHRoZSBwcmV2aW91cyB2ZXJzaW9uIHVzZWQgYGVyciA9IGNvcGllZCA/IDogZXJyO2AgYnV0IGl0IGhhcyBiZWVuIG1vZGlmaWVkIHRvIG5vdyByZWFkIGBjb3BpZWQgPSBjb3BpZWQgPyA6IGVycjtgLiBMZXQmIzM5O3Mgc3RlcCBiYWNrIGFuZCByZW1lbWJlciB0aGF0IHRoZSBmdW5jdGlvbiBpcyBzdXBwb3NlZCB0byByZXR1cm4gYGNvcGllZGAgLSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkLiBUaGUgdmFyaWFibGUgYGVycmAgaXMgYSBsb2NhbCB2YXJpYWJsZSBkZWNsYXJlZCAqaW5zaWRlKiBhIGB3aGlsZWAgbG9vcCB3aXRoaW4gYG1wdGNwX3JlY3Ztc2dgLgoKSGVyZSYjMzk7cyB0aGUgcHJvYmxlbTogaWYgYGNvcGllZGAgd2FzIHN0aWxsIHplcm8gKG5vIGRhdGEgcmVhZCB5ZXQpIGFuZCBgc2tfd2FpdF9kYXRhYCByZXR1cm5lZCBhbiBlcnJvciAobGlrZSBhbiBpbnRlcnJ1cHQgb3IgYW4gRUFHQUlOKSwgdGhlIG9yaWdpbmFsIGNvZGUgd291bGQgc2V0IGBlcnJgIHRvIHRoYXQgZXJyb3IgY29kZSwgYnV0ICpzdGlsbCogcmV0dXJuIGBjb3BpZWRgLCB3aGljaCB3YXMgemVyby4gQSB6ZXJvIHZhbHVlIG9uIGEgYHJlY3Ztc2dgIGNhbGwgaXMgdHlwaWNhbGx5IGludGVycHJldGVkIGFzIGEgY2xlYW4gY2xvc2UvRU9GLCBub3QgYW4gZXJyb3IhIFRoYXQmIzM5O3MgYmFkLgoKVGhlIGZpeCwgYGNvcGllZCA9IGNvcGllZCA/IDogZXJyO2AsIG1ha2VzIHN1cmUgdGhhdCBpZiBhbiBlcnJvciBoYXBwZW5lZCAqYmVmb3JlKiBhbnkgYnl0ZXMgd2VyZSBjb3BpZWQsIHRoYXQgYGNvcGllZGAgdGFrZXMgb24gdGhlIGVycm9yIGNvZGUuIFBlcmZlY3QhIE1ha2VzIHNlbnNlLgoKTm93LCBsZXQmIzM5O3Mgc2hpZnQgZ2VhcnMgYW5kIHRoaW5rIGFib3V0IHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBmaXggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0aGF0IEtNU0FOIG1pZ2h0IGNhdGNoLiBBcmUgdGhlcmUgYW55IG90aGVyIHZhcmlhYmxlcyB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGJlIHVuaW5pdGlhbGl6ZWQgaW4gdGhlIGVycm9yIHBhdGg/CgpMZXQmIzM5O3MgY2hlY2sgYHRzc2AuIGBzdHJ1Y3Qgc2NtX3RpbWVzdGFtcGluZ19pbnRlcm5hbCB0c3M7YCBJdCYjMzk7cyBkZWNsYXJlZCBsb2NhbGx5IHdpdGhpbiB0aGUgZnVuY3Rpb24uIFdoZW4gaXMgdGhlIGBNUFRDUF9DTVNHX1RTYCBmbGFnIHNldD8gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB3aGVyZSB0aGF0JiMzOTtzIGNvbnRyb2xsZWQgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSByaXNrIG9mIHVzaW5nIGFuIHVuaW5pdGlhbGl6ZWQgYHRzc2AgdmFsdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01QVENQX0NNU0dfJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wcm90b2NvbC5jPTQzPWVudW0ge1xubmV0L21wdGNwL3Byb3RvY29sLmM6NDQ6XHRNUFRDUF9DTVNHX1RTID0gQklUKDApLFxubmV0L21wdGNwL3Byb3RvY29sLmM6NDU6XHRNUFRDUF9DTVNHX0lOUSA9IEJJVCgxKSxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQ2LX07XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MjE0OT1zdGF0aWMgaW50IF9fbXB0Y3BfcmVjdm1zZ19tc2txKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIxOTAtXHRcdFx0dGNwX3VwZGF0ZV9yZWN2X3RzdGFtcHMoc2tiLCB0c3MpO1xubmV0L21wdGNwL3Byb3RvY29sLmM6MjE5MTpcdFx0XHQqY21zZ19mbGFncyB8PSBNUFRDUF9DTVNHX1RTO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMjE5Mi1cdFx0fVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTIzNzY9c3RhdGljIGludCBtcHRjcF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI0MDItXHRpZiAodW5saWtlbHkobXNrLVx1MDAzZXJlY3Ztc2dfaW5xKSlcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI0MDM6XHRcdGNtc2dfZmxhZ3MgPSBNUFRDUF9DTVNHX0lOUTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI0MDQtXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjQ3MC1cdGlmIChjbXNnX2ZsYWdzIFx1MDAyNlx1MDAyNiBjb3BpZWQgXHUwMDNlPSAwKSB7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyNDcxOlx0XHRpZiAoY21zZ19mbGFncyBcdTAwMjYgTVBUQ1BfQ01TR19UUylcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI0NzItXHRcdFx0dGNwX3JlY3ZfdGltZXN0YW1wKG1zZywgc2ssIFx1MDAyNnRzcyk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNDczLVxubmV0L21wdGNwL3Byb3RvY29sLmM6MjQ3NDpcdFx0aWYgKGNtc2dfZmxhZ3MgXHUwMDI2IE1QVENQX0NNU0dfSU5RKSB7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNDc1LVx0XHRcdHVuc2lnbmVkIGludCBpbnEgPSBtcHRjcF9pbnFfaGludChzayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1ODMKCQkJCQkJCW91dHB1dDogMTgyCgkJCQkJCQl0aG91Z2h0czogMTA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBObyBSaXNrcyBJbnRyb2R1Y2VkKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7ZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/JiMzNDsgSSBuZWVkIHRvIGJlICpzdXJlKiBhYm91dCB0aGlzLCBzbyBJJiMzOTttIGdvaW5nIHRocm91Z2ggdGhlIEtNU0FOIGNyaXRlcmlhIG1ldGhvZGljYWxseS4KCkZpcnN0LCBJIHNlZSB0aGUgY2hhbmdlOiBmaXhpbmcgdGhlIGVycm9yIGhhbmRsaW5nIGluIGBtcHRjcF9yZWN2bXNnKClgLiBCYXNpY2FsbHksIHRoZSBjb2RlIHdhcyBtaXN0YWtlbmx5IHJldHVybmluZyBgMGAgKEVPRikgd2hlbiBpdCBzaG91bGQgaGF2ZSByZXR1cm5lZCBhbiBlcnJvciBjb2RlIGZyb20gYHNrX3dhaXRfZGF0YSgpYC4gVGhhdCYjMzk7cyBub3QgZ29vZCwgYnV0IGl0IGRvZXNuJiMzOTt0IGltbWVkaWF0ZWx5IHNjcmVhbSAmIzM0O3VuaW5pdGlhbGl6ZWQgbWVtb3J5LiYjMzQ7CgpOb3cgSSYjMzk7bSBydW5uaW5nIHRocm91Z2ggdGhlIEtNU0FOIGNoZWNrbGlzdC4gRG9lcyB0aGUgcGF0Y2g6CgoxLiAgKipUb3VjaCBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2U/KiogTm9wZS4gVGhpcyBpcyBhbGwgYWJvdXQgaW50ZXJuYWwgZXJyb3IgcHJvcGFnYXRpb247IG5vIGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgcGFzc2VkIHRvIHVzZXJzcGFjZSB0aGF0IGNvdWxkIGJlIGFmZmVjdGVkLgoyLiAgKipSZWx5IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluIGNvbmRpdGlvbmFsIGxvZ2ljPyoqIE5vdCB0aGF0IEkgY2FuIHNlZS4gVGhlIHJlbGV2YW50IHZhcmlhYmxlcyAoYGVycmAsIGBjb3BpZWRgKSBhcmUgYWxsICpleHBsaWNpdGx5KiBpbml0aWFsaXplZCBiZWZvcmUgdXNlLgozLiAgKipBbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkPyoqIEFic29sdXRlbHkgbm90LiBObyBuZXcgYWxsb2NhdGlvbnMgYXJlIGhhcHBlbmluZy4KNC4gICoqSW52b2x2ZSBwb3RlbnRpYWwgYm91bmRzIGNoZWNrIGlzc3VlcyBvciBtZW1vcnkgYWNjZXNzIG9mIHVuaW5pdGlhbGl6ZWQgYnVmZmVycz8qKiBEb2VzbiYjMzk7dCBsb29rIGxpa2UgaXQuIFRoZSBjb3JlIGNoYW5nZSBpcyBqdXN0IGFib3V0IHdoaWNoIHZhbHVlIGlzIHJldHVybmVkLCB3aGljaCBpcyB0aGUgZXJyb3IgY29kZS4KClRoZSBwYXRjaCBpdHNlbGYgaXMgc2ltcGxlLiBJdCBjb3JyZWN0cyBob3cgYW4gZXJyb3IgY29kZSBmcm9tIGBza193YWl0X2RhdGEoKWAgaXMgaGFuZGxlZC4gVGhlIHByZXZpb3VzIGNvZGUgd2FzIG92ZXJ3cml0aW5nIHRoZSBlcnJvciB3aXRoIDAgaW4gc29tZSBjYXNlcy4gVGhlIGZpeCBwcmVzZXJ2ZXMgdGhlIGFjdHVhbCBlcnJvciBjb2RlLgoKU28sIEkmIzM5O20gY29uZmlkZW50OgoKKiAgIFRoZSBjb2RlICpkb2VzbiYjMzk7dCogaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBvciBpbnRlcmFjdGlvbnMgd2l0aCB1c2VyIHNwYWNlIHRoYXQgY291bGQgYmUgc291cmNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4KKiAgIE5laXRoZXIgYGVycmAgbm9yIGBjb3BpZWRgIGlzIHVuaW5pdGlhbGl6ZWQuIGBlcnJgIGlzIGluaXRpYWxpemVkIGJ5IGBza193YWl0X2RhdGEoKWAsIGFuZCBgY29waWVkYCBpcyBpbml0aWFsaXplZCB0byAwLgoqICAgSXQgZG9lcyAqbm90KiBsZWFrIGFueSBpbmZvcm1hdGlvbi4gTmVnYXRpdmUgZXJyb3IgY29kZSBpcyByZXR1cm5lZC4KClRoZXJlZm9yZSwgS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzLCBmdW5jdGlvbmFsIHRlc3RzLCBhbmQgS0FTQU4gc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IGlzc3VlcyByZWxhdGVkIHRvIHRoaXMgZml4IChsaWtlIG91dCBvZiBib3VuZHMsIE5VTEwgZGVyZWZlcmVuY2VzLCBldGMuKS4gVGhpcyBpcyBhIGNvbnRyb2wgZmxvdy9yZXR1cm4gdmFsdWUgYnVnLCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgYnVnLgoKU28sIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBOZWVkc0tNU0FOID0gZmFsc2VgLiBJIG5lZWQgdG8gZG9jdW1lbnQgdGhpcy4gVGhlIHJlYXNvbmluZyBJJiMzOTtsbCBwdXQgd2l0aCBgc2V0LXJlc3VsdHNgIHdpbGwgZ28gc29tZXRoaW5nIGxpa2UgdGhpczoKCiogICAqKlBhdGNoIERlc2NyaXB0aW9uOioqIFRoaXMgcGF0Y2ggZml4ZXMgYW4gZXJyb3IgcHJvcGFnYXRpb24gYnVnIGluIGBtcHRjcF9yZWN2bXNnKClgLiBUaGUgcHJldmlvdXMgY29kZSBpbmNvcnJlY3RseSByZXR1cm5lZCBgMGAgaW5zdGVhZCBvZiBwcm9wYWdhdGluZyB0aGUgYWN0dWFsIGVycm9yIGNvZGUgKGAtRUFHQUlOYCwgYC1FSU5UUmAsIGV0Yy4pIHdoZW4gYGNvcGllZGAgd2FzIHplcm8uCiogICAqKktNU0FOIEp1c3RpZmljYXRpb246KiogS01TQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0IHRoZSB1c2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzLiBUaGlzIGNoYW5nZSBvbmx5IGFmZmVjdHMgdGhlIHJldHVybiB2YWx1ZSBvZiBhIHN5c3RlbSBjYWxsIHVuZGVyIGVycm9yIGNvbmRpdGlvbnMgd2hlbiB0aGUgc29ja2V0IGlzIGJsb2NraW5nLiBOZWl0aGVyIGBjb3BpZWRgIG5vciBgZXJyYCBhcmUgdW5pbml0aWFsaXplZCAodGhleSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlKSwgYW5kIG5vIG5ldyBidWZmZXJzLCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UgYXJlIGludHJvZHVjZWQuIEJlY2F1c2Ugb2YgdGhpcywgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLgoKTm93LCBJJiMzOTttIHJlYWR5IHRvIGludm9rZSBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJldHVybiB2YWx1ZSBidWcgaW4gbXB0Y3BfcmVjdm1zZygpIHdoZXJlIGFuIGVycm9yIHJldHVybmVkIGJ5IHNrX3dhaXRfZGF0YSgpIHdhcyBhc3NpZ25lZCB0byB0aGUgaW5uZXItc2NvcGVkIHZhcmlhYmxlICYjMzk7ZXJyJiMzOTsgaW5zdGVhZCBvZiAmIzM5O2NvcGllZCYjMzk7LCBjYXVzaW5nIG1wdGNwX3JlY3Ztc2coKSB0byByZXR1cm4gMCBpbnN0ZWFkIG9mIHRoZSBuZWdhdGl2ZSBlcnJvciBjb2RlIHdoZW4gbm8gZGF0YSBoYWQgYmVlbiBjb3BpZWQgeWV0LlxuXG5Cb3RoICYjMzk7ZXJyJiMzOTsgYW5kICYjMzk7Y29waWVkJiMzOTsgYXJlIGZ1bGx5IGluaXRpYWxpemVkIHNjYWxhciB2YXJpYWJsZXMgKGNvcGllZCBpcyBpbml0aWFsaXplZCB0byAwLCBhbmQgZXJyIHJlY2VpdmVzIHRoZSByZXR1cm4gY29kZSBmcm9tIHNrX3dhaXRfZGF0YSkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCBidWZmZXIgYWNjZXNzZXMuIEJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmV0dXJuIHZhbHVlIGJ1ZyBpbiBtcHRjcF9yZWN2bXNnKCkgd2hlcmUgYW4gZXJyb3IgcmV0dXJuZWQgYnkgc2tfd2FpdF9kYXRhKCkgd2FzIGFzc2lnbmVkIHRvIHRoZSBpbm5lci1zY29wZWQgdmFyaWFibGUgJiMzOTtlcnImIzM5OyBpbnN0ZWFkIG9mICYjMzk7Y29waWVkJiMzOTssIGNhdXNpbmcgbXB0Y3BfcmVjdm1zZygpIHRvIHJldHVybiAwIGluc3RlYWQgb2YgdGhlIG5lZ2F0aXZlIGVycm9yIGNvZGUgd2hlbiBubyBkYXRhIGhhZCBiZWVuIGNvcGllZCB5ZXQuXG5cbkJvdGggJiMzOTtlcnImIzM5OyBhbmQgJiMzOTtjb3BpZWQmIzM5OyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgc2NhbGFyIHZhcmlhYmxlcyAoY29waWVkIGlzIGluaXRpYWxpemVkIHRvIDAsIGFuZCBlcnIgcmVjZWl2ZXMgdGhlIHJldHVybiBjb2RlIGZyb20gc2tfd2FpdF9kYXRhKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlciBhY2Nlc3Nlcy4gQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozMzozOS45MDM1ODU4OTdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjkzMzUyOTY3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNUFRDUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1wdGNwX3JlY3Ztc2dcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmV0dXJuIHZhbHVlIGJ1ZyBpbiBtcHRjcF9yZWN2bXNnKCkgd2hlcmUgYW4gZXJyb3IgcmV0dXJuZWQgYnkgc2tfd2FpdF9kYXRhKCkgd2FzIGFzc2lnbmVkIHRvIHRoZSBpbm5lci1zY29wZWQgdmFyaWFibGUgJ2VycicgaW5zdGVhZCBvZiAnY29waWVkJywgY2F1c2luZyBtcHRjcF9yZWN2bXNnKCkgdG8gcmV0dXJuIDAgaW5zdGVhZCBvZiB0aGUgbmVnYXRpdmUgZXJyb3IgY29kZSB3aGVuIG5vIGRhdGEgaGFkIGJlZW4gY29waWVkIHlldC5cXG5cXG5Cb3RoICdlcnInIGFuZCAnY29waWVkJyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgc2NhbGFyIHZhcmlhYmxlcyAoY29waWVkIGlzIGluaXRpYWxpemVkIHRvIDAsIGFuZCBlcnIgcmVjZWl2ZXMgdGhlIHJldHVybiBjb2RlIGZyb20gc2tfd2FpdF9kYXRhKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlciBhY2Nlc3Nlcy4gQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGVycm9yIGhhbmRsaW5nIGluIG1wdGNwX3JlY3Ztc2coKSBieSBhc3NpZ25pbmcgdGhlIHJldHVybiB2YWx1ZSBvZiBza193YWl0X2RhdGEoKSB0byAnY29waWVkJyBpbnN0ZWFkIG9mICdlcnInLCBlbnN1cmluZyBuZWdhdGl2ZSBlcnJvciBjb2RlcyBhcmUgcHJvcGVybHkgcmV0dXJuZWQgd2hlbiBubyBkYXRhIGhhcyBiZWVuIHJlYWQuIFRoaXMgY2hhbmdlcyBjb250cm9sIGZsb3cgYW5kIHJldHVybiB2YWx1ZXMgaW4gcmVhY2hhYmxlIE1QVENQIHNvY2tldCByZWNlaXZlIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjMzOjM5LjkwMzU5MTQ3N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM0NDQ3NzE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNmI1MjM4MjRlMjgxNGUzMjcwOTk5YzU2MTM1NmI5ZmU1MzcxOWFhNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIFNlcCAxMyAxMDozMzozOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXFxuaW5kZXggMDA5OGUyODMwOTMxOC4uOGRjMjVlZjE1NDJjNSAxMDA2NDRcXG4tLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xcbisrKyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXFxuQEAgLTI0NTksNyArMjQ1OSw3IEBAIHN0YXRpYyBpbnQgbXB0Y3BfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG4gXFx0XFx0bXB0Y3BfY2xlYW51cF9yYnVmKG1zaywgY29waWVkKTtcXG4gXFx0XFx0ZXJyID0gc2tfd2FpdF9kYXRhKHNrLCBcXHUwMDI2dGltZW8sIGxhc3QpO1xcbiBcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbi1cXHRcXHRcXHRlcnIgPSBjb3BpZWQgPyA6IGVycjtcXG4rXFx0XFx0XFx0Y29waWVkID0gY29waWVkID8gOiBlcnI7XFxuIFxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjMzOjQwLjMzODc0OTE5MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjU4MDE3MTM0MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVBUQ1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcHRjcF9yZWN2bXNnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgZXJyb3IgaGFuZGxpbmcgaW4gbXB0Y3BfcmVjdm1zZygpIGJ5IGFzc2lnbmluZyB0aGUgcmV0dXJuIHZhbHVlIG9mIHNrX3dhaXRfZGF0YSgpIHRvICdjb3BpZWQnIGluc3RlYWQgb2YgJ2VycicsIGVuc3VyaW5nIG5lZ2F0aXZlIGVycm9yIGNvZGVzIGFyZSBwcm9wZXJseSByZXR1cm5lZCB3aGVuIG5vIGRhdGEgaGFzIGJlZW4gcmVhZC4gVGhpcyBjaGFuZ2VzIGNvbnRyb2wgZmxvdyBhbmQgcmV0dXJuIHZhbHVlcyBpbiByZWFjaGFibGUgTVBUQ1Agc29ja2V0IHJlY2VpdmUgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2YjUyMzgyNGUyODE0ZTMyNzA5OTljNTYxMzU2YjlmZTUzNzE5YWE1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgMTMgMTA6MzM6MzkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXG5pbmRleCAwMDk4ZTI4MzA5MzE4Li44ZGMyNWVmMTU0MmM1IDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmNcbisrKyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXG5AQCAtMjQ1OSw3ICsyNDU5LDcgQEAgc3RhdGljIGludCBtcHRjcF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuIFx0XHRtcHRjcF9jbGVhbnVwX3JidWYobXNrLCBjb3BpZWQpO1xuIFx0XHRlcnIgPSBza193YWl0X2RhdGEoc2ssIFx1MDAyNnRpbWVvLCBsYXN0KTtcbiBcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuLVx0XHRcdGVyciA9IGNvcGllZCA/IDogZXJyO1xuK1x0XHRcdGNvcGllZCA9IGNvcGllZCA/IDogZXJyO1xuIFx0XHRcdGdvdG8gb3V0X2VycjtcbiBcdFx0fVxuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzM6NDAuMzM4NzUxMzYxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Njk0ODQwNzAwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhpcyBNUFRDUCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBUaGUgZGlmZiBpdHNlbGYgaXMgcHJldHR5IGNvbmNpc2UsIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2Qgc3RhcnQuIEZyb20gdGhlIGNvbnRleHQsIGl0IGxvb2tzIGxpa2Ugd2UncmUgaW4gYG5ldC9tcHRjcC9wcm90b2NvbC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYG1wdGNwX3JlY3Ztc2dgIGZ1bmN0aW9uLiBUaGUga2V5IGxpbmUgc2VlbXMgdG8gYmUgd2hlcmUgdGhleSdyZSBoYW5kbGluZyBlcnJvcnMgYW5kIHRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGR1cmluZyBhIHJlY2VpdmUgb3BlcmF0aW9uLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW50IGJlaGluZCBjaGFuZ2luZyBgZXJyID0gY29waWVkID8gOiBlcnI7YCB0byBgY29waWVkID0gY29waWVkID8gOiBlcnI7YC4gRXNzZW50aWFsbHksIHRoZSBsb2dpYyBpcyBoYW5kbGluZyBhIHBvdGVudGlhbCBlcnJvciBkdXJpbmcgcmVjZWl2ZSBvbiBhbiBNUFRDUCBzb2NrZXQgYW5kIGRlYWxpbmcgd2l0aCBhIHBhcnRpYWwgcmVhZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2h5IHRoZXkndmUgc3dpdGNoZWQgaG93IHRoZSBlcnJvciBpcyBoYW5kbGVkIGluIHRoaXMgc3BlY2lmaWMgY2FzZSwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgY29uZGl0aW9uYWwgYXNzaWdubWVudC5cblxuSSdtIHRoaW5raW5nIHRoaXMgbGlrZWx5IGhhcyBpbXBsaWNhdGlvbnMgZm9yIGhvdyBgY29waWVkYCBpcyBiZWluZyB1c2VkIGRvd25zdHJlYW0uIElzIHRoaXMgbm93IHRoZSAqb25seSogcGxhY2UgYGNvcGllZGAgY291bGQgYmUgc2V0PyBPciBhbSBJIG1pc3Npbmcgc29tZSBzdWJ0bGV0eSBhYm91dCB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBhbmQgdGhlIGVycm9yIHByb3BhZ2F0aW9uIGluIHRoZSBvcmlnaW5hbCBjb2RlPyBUaGlzIGZlZWxzIGxpa2UgaXQgbWlnaHQgYWZmZWN0IGhvdyBwYXJ0aWFsIHJlYWRzIGFyZSByZXBvcnRlZCBvciBob3cgdGhlIHNvY2tldCBzdGF0ZSBpcyBtYWludGFpbmVkIGluIGVycm9yIHNjZW5hcmlvcy5cblxuQmVmb3JlIEkgY2FuIGdpdmUgaXQgYSBmdWxsIHJldmlldywgSSdsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGhvdyB0aGlzIGNoYW5nZSBhZmZlY3RzIHRoZSBvdmVyYWxsIGVycm9yIGhhbmRsaW5nIGxvZ2ljIGFuZCBob3cgdGhlIGBjb3BpZWRgIHZhcmlhYmxlIGlzIHN1YnNlcXVlbnRseSB1c2VkLiBUaGUgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgaW1wcm92ZW1lbnQsIGEgYnVnIGZpeCwgb3IgYSBzdWJ0bGUgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zIHJlbGF0ZWQgdG8gZGF0YSBjb3JydXB0aW9uLCB1bmV4cGVjdGVkIGJlaGF2aW9yIGR1cmluZyBuZXR3b3JrIGlzc3Vlcywgb3IgYSBjaGFuZ2UgaW4gZXhwZWN0ZWQgYmVoYXZpb3IgdG8gdXNlcnNwYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODc1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzM6NDcuMjg3MTYxNDM5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0NDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI0NDA6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjQ0MTpcXHRcXG4yNDQyOlxcdFxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gVENQX0NMT1NFKSB7XFxuMjQ0MzpcXHRcXHRcXHRcXHRcXHRjb3BpZWQgPSAtRU5PVENPTk47XFxuMjQ0NDpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4yNDQ1OlxcdFxcdFxcdFxcdH1cXG4yNDQ2OlxcdFxcbjI0NDc6XFx0XFx0XFx0XFx0aWYgKCF0aW1lbykge1xcbjI0NDg6XFx0XFx0XFx0XFx0XFx0Y29waWVkID0gLUVBR0FJTjtcXG4yNDQ5OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjI0NTA6XFx0XFx0XFx0XFx0fVxcbjI0NTE6XFx0XFxuMjQ1MjpcXHRcXHRcXHRcXHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcXG4yNDUzOlxcdFxcdFxcdFxcdFxcdGNvcGllZCA9IHNvY2tfaW50cl9lcnJubyh0aW1lbyk7XFxuMjQ1NDpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4yNDU1OlxcdFxcdFxcdFxcdH1cXG4yNDU2OlxcdFxcdFxcdH1cXG4yNDU3OlxcdFxcbjI0NTg6XFx0XFx0XFx0cHJfZGVidWcoXFxcImJsb2NrIHRpbWVvdXQgJWxkXFxcXG5cXFwiLCB0aW1lbyk7XFxuMjQ1OTpcXHRcXHRcXHRtcHRjcF9jbGVhbnVwX3JidWYobXNrLCBjb3BpZWQpO1xcbjI0NjA6XFx0XFx0XFx0ZXJyID0gc2tfd2FpdF9kYXRhKHNrLCBcXHUwMDI2dGltZW8sIGxhc3QpO1xcbjI0NjE6XFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4yNDYyOlxcdFxcdFxcdFxcdGNvcGllZCA9IGNvcGllZCA/IDogZXJyO1xcbjI0NjM6XFx0XFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbjI0NjQ6XFx0XFx0XFx0fVxcbjI0NjU6XFx0XFx0fVxcbjI0NjY6XFx0XFxuMjQ2NzpcXHRcXHRtcHRjcF9jbGVhbnVwX3JidWYobXNrLCBjb3BpZWQpO1xcbjI0Njg6XFx0XFxuMjQ2OTpcXHRvdXRfZXJyOlxcbjI0NzA6XFx0XFx0aWYgKGNtc2dfZmxhZ3MgXFx1MDAyNlxcdTAwMjYgY29waWVkIFxcdTAwM2U9IDApIHtcXG4yNDcxOlxcdFxcdFxcdGlmIChjbXNnX2ZsYWdzIFxcdTAwMjYgTVBUQ1BfQ01TR19UUylcXG4yNDcyOlxcdFxcdFxcdFxcdHRjcF9yZWN2X3RpbWVzdGFtcChtc2csIHNrLCBcXHUwMDI2dHNzKTtcXG4yNDczOlxcdFxcbjI0NzQ6XFx0XFx0XFx0aWYgKGNtc2dfZmxhZ3MgXFx1MDAyNiBNUFRDUF9DTVNHX0lOUSkge1xcbjI0NzU6XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGlucSA9IG1wdGNwX2lucV9oaW50KHNrKTtcXG4yNDc2OlxcdFxcbjI0Nzc6XFx0XFx0XFx0XFx0cHV0X2Ntc2cobXNnLCBTT0xfVENQLCBUQ1BfQ01fSU5RLCBzaXplb2YoaW5xKSwgXFx1MDAyNmlucSk7XFxuMjQ3ODpcXHRcXHRcXHR9XFxuMjQ3OTpcXHRcXHR9XFxuMjQ4MDpcXHRcXG4yNDgxOlxcdFxcdHByX2RlYnVnKFxcXCJtc2s9JXAgcnggcXVldWUgZW1wdHk9JWQgY29waWVkPSVkXFxcXG5cXFwiLFxcbjI0ODI6XFx0XFx0XFx0IG1zaywgc2tiX3F1ZXVlX2VtcHR5KFxcdTAwMjZzay1cXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSksIGNvcGllZCk7XFxuMjQ4MzpcXHRcXG4yNDg0OlxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuMjQ4NTpcXHRcXHRyZXR1cm4gY29waWVkO1xcbjI0ODY6XFx0fVxcbjI0ODc6XFx0XFxuMjQ4ODpcXHRzdGF0aWMgdm9pZCBtcHRjcF9yZXRyYW5zbWl0X3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbjI0ODk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozMzo0Ny4yODczODEwOTlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0Njg0MTU4MjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk1QVENQIFZ1bG5lcmFiaWxpdHkgQW5hbHlzaXMqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ20gc2VlaW5nOiB0aGVyZSdzIGEgc3VidGxlIGJ1dCBzaWduaWZpY2FudCBidWcgZml4IGluIHRoZSBNUFRDUCBjb2RlLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBtcHRjcF9yZWN2bXNnKClgLiBJJ20gbG9va2luZyBhdCB0aGlzIGxpbmU6IGBlcnIgPSBza193YWl0X2RhdGEoc2ssIFx1MDAyNnRpbWVvLCBsYXN0KTtgIGFuZCBob3cgdGhlIGVycm9yIGhhbmRsaW5nIGludGVyYWN0cyB3aXRoIHRoZSByZXR1cm4gdmFsdWUuIFByZXZpb3VzbHksIHRoZXkgaGFkIHRoaXMgY29kZTpcblxuYGBgY1xuaWYgKGVyciBcdTAwM2MgMCkge1xuICAgIGVyciA9IGNvcGllZCA/IDogZXJyO1xuICAgIGdvdG8gb3V0X2Vycjtcbn1cbmBgYFxuXG5BbmQgYG91dF9lcnI6YCB0aGVuIGRvZXM6XG5cbmBgYGNcbm91dF9lcnI6XG5cdGlmIChjbXNnX2ZsYWdzIFx1MDAyNlx1MDAyNiBjb3BpZWQgXHUwMDNlPSAwKSB7XG4uLi5cblx0cmVsZWFzZV9zb2NrKHNrKTtcblx0cmV0dXJuIGNvcGllZDtcbmBgYFxuXG5UaGUgcHJvYmxlbSBpcywgdGhlIGNvZGUgd2FzIGFzc2lnbmluZyBgZXJyYCBidXQgKipub3QqKiB1c2luZyBpdC4gVGhlIGZ1bmN0aW9uICphbHdheXMqIHJldHVybnMgYGNvcGllZGAuIElmIGBjb3BpZWRgIHN0YXJ0ZWQgYXQgemVybyBhbmQgYHNrX3dhaXRfZGF0YWAgcmV0dXJuZWQgYW4gZXJyb3IgKGxpa2UgYC1FQUdBSU5gIG9yIGAtRUlOVFJgKSwgdGhlIGNvZGUgaW5jb3JyZWN0bHkgcmV0dXJuZWQgemVybyEgTm93LCB0aGUgZml4IGBjb3BpZWQgPSBjb3BpZWQgPyA6IGVycjtgIGlzIGNvcnJlY3QsIGJlY2F1c2UgaXQgYXNzaWducyBgZXJyYCB0byBgY29waWVkYCBpZiBgY29waWVkYCBpcyB6ZXJvIGFuZCBtYWtlcyBgY29waWVkYCB0byBiZSB0aGUgYWN0dWFsIGVycm9yIGNvZGUuIEJ1dCBpZiBgY29waWVkYCB3YXMgYWxyZWFkeSBncmVhdGVyIHRoYW4gemVybywgaXQga2VlcHMgdGhhdCB2YWx1ZS5cblxuSSBjYW4gY29uZmlybSB0aGF0IHRoZSB2dWxuZXJhYmlsaXR5IGlzIG5vdyBmaXhlZC5cblxuVGhlIGtleSB0aGluZyBpcywgdGhpcyBmaXggbWVhbnMgZXJyb3JzIGFyZSBub3cgcHJvcGVybHkgcHJvcGFnYXRlZCwgaW5zdGVhZCBvZiByZXR1cm5pbmcgYW4gaW5jb3JyZWN0IHZhbHVlLiBUaGlzIGlzIGNyaXRpY2FsIGJlY2F1c2UgYG1wdGNwX3JlY3Ztc2coKWAgaXMgcGFydCBvZiB0aGUgTVBUQ1AgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24sIGFuZCB0aGF0IG1lYW5zIGl0J3MgYSB2dWxuZXJhYmlsaXR5IEkgY291bGQgcG90ZW50aWFsbHkgZXhwbG9pdC5cblxuVGhlIGdvb2QgbmV3cyBpcywgTVBUQ1AgaXMgcmVhY2hhYmxlIHRocm91Z2ggc3RhbmRhcmQgc29ja2V0IGNhbGxzIGxpa2UgYHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19NUFRDUClgIG9yIGBzb2NrZXQoQUZfSU5FVDYsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX01QVENQKWAuIEl0J3MgZnVsbHkgdmlydHVhbGl6ZWQgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwgbmV0d29ya2luZyBzdGFjay5cblxuTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgY29uZmlndXJhdGlvbnMgbmVlZGVkLCBJJ2xsIGdvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgZm9yIE1QVENQIHJlcXVpcmVtZW50cy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTk2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzM6NTEuOTcxNTQyMTU3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MDc4ODkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNUFRDUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXB0Y3BcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL0tjb25maWctMS1cXG5uZXQvbXB0Y3AvS2NvbmZpZzoyOmNvbmZpZyBNUFRDUFxcbm5ldC9tcHRjcC9LY29uZmlnLTMtXFx0Ym9vbCBcXFwiTVBUQ1A6IE11bHRpcGF0aCBUQ1BcXFwiXFxuLS1cXG5uZXQvbXB0Y3AvS2NvbmZpZz0xNj1jb25maWcgSU5FVF9NUFRDUF9ESUFHXFxuLS1cXG5uZXQvbXB0Y3AvS2NvbmZpZy0xOS1cXG5uZXQvbXB0Y3AvS2NvbmZpZzoyMDpjb25maWcgTVBUQ1BfSVBWNlxcbm5ldC9tcHRjcC9LY29uZmlnLTIxLVxcdGJvb2wgXFxcIk1QVENQOiBJUHY2IHN1cHBvcnQgZm9yIE11bHRpcGF0aCBUQ1BcXFwiXFxuLS1cXG5uZXQvbXB0Y3AvS2NvbmZpZy0yNC1cXG5uZXQvbXB0Y3AvS2NvbmZpZzoyNTpjb25maWcgTVBUQ1BfS1VOSVRfVEVTVFxcbm5ldC9tcHRjcC9LY29uZmlnLTI2LVxcdHRyaXN0YXRlIFxcXCJUaGlzIGJ1aWxkcyB0aGUgTVBUQ1AgS1VuaXQgdGVzdHNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzM6NTIuMDI1NjI3ODc5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzYzNzg2MDg3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIE1QVENQIEtlcm5lbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIGBuZXQvbXB0Y3AvS2NvbmZpZ2AuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBmb3IgTXVsdGlQYXRoIFRDUCBpbiB0aGUga2VybmVsLiBJJ20gYXNzdW1pbmcgaXQncyBzdHJ1Y3R1cmVkIGluIHRoZSBzdGFuZGFyZCBLY29uZmlnIGZvcm1hdCwgc28gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTpcblxuKiAgICoqYGNvbmZpZ2Agc3RhdGVtZW50czoqKiBUaGVzZSBhcmUgdGhlIGNvcmUgb3B0aW9ucyB0aGVtc2VsdmVzLiBJIHdhbnQgdG8gc2VlIGEgY2xlYXIgbGlzdC5cbiogICAqKmBkZXBlbmRzIG9uYCBjbGF1c2VzOioqIENydWNpYWwuIFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IElzIE1QVENQJ3MgZnVuY3Rpb25hbGl0eSBjb250aW5nZW50IG9uIG90aGVyIG5ldHdvcmtpbmcgZmVhdHVyZXMgYmVpbmcgZW5hYmxlZD8gQXJlIHRoZXJlIHNwZWNpZmljIGtlcm5lbCBtb2R1bGVzIG9yIGFyY2hpdGVjdHVyZXMgdGhhdCBhcmUgcmVxdWlyZWQ/IEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRob3NlIGRlcGVuZGVuY2llcyB0byB0cm91Ymxlc2hvb3QgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gY29uZmxpY3RzLiBJIHdhbnQgdG8gc2VlIGlmIHRoZSBkZXBlbmRlbmNpZXMgYXJlIHNhbmUsIG9yIGlmIHRoZXJlJ3MgYW55IHN1cnByaXNpbmcgcmVxdWlyZW1lbnQgSSB3b3VsZG4ndCBleHBlY3QuXG4qICAgKipgYm9vbGAsIGB0cmlzdGF0ZWAsIGBzdHJpbmdgLCBgaW50YCBkZWZpbml0aW9uczoqKiBUaGlzIHRlbGxzIG1lIHRoZSB0eXBlIG9mIHRoZSBvcHRpb24uIEkgd2FudCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIGFsbG93YWJsZSB2YWx1ZXMgZm9yIGVhY2ggb3B0aW9uIGFyZSwgaW5jbHVkaW5nIGRlZmF1bHRzLlxuKiAgICoqYGhlbHBgIHNlY3Rpb25zOioqIFRoZXNlIGFyZSBlc3NlbnRpYWwuIEknbSBleHBlY3RpbmcgY29uY2lzZSwgaW5mb3JtYXRpdmUgZGVzY3JpcHRpb25zIG9mIGVhY2ggb3B0aW9uJ3MgcHVycG9zZS4gSSBkb24ndCBuZWVkIGEgdHV0b3JpYWwsIGJ1dCBJIG5lZWQgZW5vdWdoIGNvbnRleHQgdG8gdW5kZXJzdGFuZCB0aGUgcHJhY3RpY2FsIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgYSBnaXZlbiBmZWF0dXJlLiBBcmUgdGhlcmUgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnM/IFBlcmZvcm1hbmNlIHRyYWRlLW9mZnM/XG4qICAgKipgc2VsZWN0YCBzdGF0ZW1lbnRzOioqIEFueSBvcHRpb25zIHRoYXQgYXJlIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCAoc2VsZWN0ZWQpIGJ5IG90aGVycz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHRyYW5zaXRpdmUgY2xvc3VyZSBvZiB0aG9zZSBzZWxlY3Rpb25zLlxuKiAgICoqYGRlZmF1bHRgIHZhbHVlczoqKiBBcmUgdGhlcmUgc2Vuc2libGUgZGVmYXVsdHMsIG9yIGRvIEkgbmVlZCB0byBleHBsaWNpdGx5IHNldCB0aGluZ3M/IEkgbmVlZCB0byBjaGVjayBmb3IgYW55IGNvbmZpZ3VyYXRpb25zIHRoYXQgZGV2aWF0ZSBmcm9tIGJlc3QgcHJhY3RpY2VzLlxuKiAgICoqQ29uZGl0aW9uYWwgYmxvY2tzOioqIEknbSBleHBlY3Rpbmcgc29tZSBwbGF0Zm9ybS1zcGVjaWZpYyBvciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uZmlndXJhdGlvbnMuIFRoZSBwcmVzZW5jZSBvZiBjb25kaXRpb25hbHMgaXMgcXVpdGUgY29tbW9uIGluIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGVuYWJsZWQgZm9yIG15IHBsYXRmb3JtLlxuKiAgICoqQ29tbWVudHM6KiogSG9wZWZ1bGx5LCB0aGVyZSBhcmUgc29tZSB3ZWxsLXBsYWNlZCBjb21tZW50cy5cbiogICAqKldhcm5pbmdzL0Vycm9yczoqKiBJZiB0aGVyZSBhcmUgYW55LCBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhleSdyZSBzZXQuXG5JJ2xsIGFsc28ga2VlcCBhbiBleWUgb3V0IGZvciBhbnkgdW51c3VhbCBvciB2ZW5kb3Itc3BlY2lmaWMgb3B0aW9ucyB0aGF0IG1heSBiZSBpbmNsdWRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgdXNlLCBhbmQgbWFrZSBzdXJlIHRoYXQgYW55IGN1c3RvbSBleHRlbnNpb25zIGRvbid0IGNvbmZsaWN0IHdpdGggbW9yZSBzdGFuZGFyZCBjb25maWd1cmF0aW9ucy5cbkJhc2ljYWxseSwgbXkgZ29hbCBpcyB0byBidWlsZCBhIGNvbXBsZXRlLCBtZW50YWwgbW9kZWwgb2YgdGhlIE1QVENQIGNvbmZpZ3VyYXRpb24gc3BhY2UsIHNvIEkgY2FuIGNvbmZpZGVudGx5IGVuYWJsZSwgZGlzYWJsZSwgYW5kIHR1bmUgaXQgZm9yIG15IHNwZWNpZmljIHVzZSBjYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzgwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzM6NTUuNjYzNDkxOTM3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY4NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21wdGNwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHRcXG4gICAyOlxcdGNvbmZpZyBNUFRDUFxcbiAgIDM6XFx0XFx0Ym9vbCBcXFwiTVBUQ1A6IE11bHRpcGF0aCBUQ1BcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA1OlxcdFxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbiAgIDY6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XFxuICAgNzpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBNdWx0aXBhdGggVENQIChNUFRDUCkgY29ubmVjdGlvbnMgc2VuZCBhbmQgcmVjZWl2ZSBkYXRhIG92ZXIgbXVsdGlwbGVcXG4gIDEwOlxcdFxcdCAgc3ViZmxvd3MgaW4gb3JkZXIgdG8gdXRpbGl6ZSBtdWx0aXBsZSBuZXR3b3JrIHBhdGhzLiBFYWNoIHN1YmZsb3dcXG4gIDExOlxcdFxcdCAgdXNlcyB0aGUgVENQIHByb3RvY29sLCBhbmQgVENQIG9wdGlvbnMgY2FycnkgaGVhZGVyIGluZm9ybWF0aW9uIGZvclxcbiAgMTI6XFx0XFx0ICBNUFRDUC5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0aWYgTVBUQ1BcXG4gIDE1OlxcdFxcbiAgMTY6XFx0Y29uZmlnIElORVRfTVBUQ1BfRElBR1xcbiAgMTc6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUX0RJQUdcXG4gIDE4OlxcdFxcdGRlZl90cmlzdGF0ZSBJTkVUX0RJQUdcXG4gIDE5OlxcdFxcbiAgMjA6XFx0Y29uZmlnIE1QVENQX0lQVjZcXG4gIDIxOlxcdFxcdGJvb2wgXFxcIk1QVENQOiBJUHY2IHN1cHBvcnQgZm9yIE11bHRpcGF0aCBUQ1BcXFwiXFxuICAyMjpcXHRcXHRkZXBlbmRzIG9uIElQVjY9eVxcbiAgMjM6XFx0XFx0ZGVmYXVsdCB5XFxuICAyNDpcXHRcXG4gIDI1OlxcdGNvbmZpZyBNUFRDUF9LVU5JVF9URVNUXFxuICAyNjpcXHRcXHR0cmlzdGF0ZSBcXFwiVGhpcyBidWlsZHMgdGhlIE1QVENQIEtVbml0IHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICAyNzpcXHRcXHRkZXBlbmRzIG9uIEtVTklUXFxuICAyODpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgMjk6XFx0XFx0aGVscFxcbiAgMzA6XFx0XFx0ICBDdXJyZW50bHkgY292ZXJzIHRoZSBNUFRDUCBjcnlwdG8gYW5kIHRva2VuIGhlbHBlcnMuXFxuICAzMTpcXHRcXHQgIE9ubHkgdXNlZnVsIGZvciBrZXJuZWwgZGV2cyBydW5uaW5nIEtVbml0IHRlc3QgaGFybmVzcyBhbmQgYXJlIG5vdFxcbiAgMzI6XFx0XFx0ICBmb3IgaW5jbHVzaW9uIGludG8gYSBwcm9kdWN0aW9uIGJ1aWxkLlxcbiAgMzM6XFx0XFxuICAzNDpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwgcGxlYXNlIHJlZmVyXFxuICAzNTpcXHRcXHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uIGluIERvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0Ly5cXG4gIDM2OlxcdFxcbiAgMzc6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMzg6XFx0XFxuICAzOTpcXHRlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozMzo1NS42NjM1NjExMDdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNzczMzY4NzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIE1QVENQIFNvdXJjZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgcHJvdG9jb2wuY2AgaXMgY29tcGlsZWQgd2l0aGluIHRoZSBNUFRDUCBmcmFtZXdvcmsuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgYG5ldC9tcHRjcC9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSB0aGUgYnVpbGQgaW5zdHJ1Y3Rpb25zIGFyZSBtb3N0IGxpa2VseSBkZWZpbmVkLiBUaGUgTWFrZWZpbGUgc2hvdWxkIGNsZWFybHkgc3BlY2lmeSB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3IgZGVwZW5kZW5jaWVzIGFyZSByZXF1aXJlZCB0byBpbmNsdWRlIGBwcm90b2NvbC5jYCBpbiB0aGUgZmluYWwgYnVpbGQuIFRpbWUgdG8gY29uZmlybSB0aGUgYnVpbGQgZGVwZW5kZW5jaWVzLiBJIHdpbGwgbWFrZSBzdXJlIHRoZSBjb21waWxhdGlvbiBjb21tYW5kIGZvciBgcHJvdG9jb2wuY2AgaXMgY2xlYXJseSB2aXNpYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDc0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozMzo1Ny40MzY5MzM4NTdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21wdGNwL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0b2JqLSQoQ09ORklHX01QVENQKSArPSBtcHRjcC5vXFxuICAgMzpcXHRcXG4gICA0OlxcdG1wdGNwLXkgOj0gcHJvdG9jb2wubyBzdWJmbG93Lm8gb3B0aW9ucy5vIHRva2VuLm8gY3J5cHRvLm8gY3RybC5vIHBtLm8gZGlhZy5vIFxcXFxcXG4gICA1OlxcdFxcdCAgIG1pYi5vIHBtX25ldGxpbmsubyBzb2Nrb3B0Lm8gcG1fdXNlcnNwYWNlLm8gZmFzdG9wZW4ubyBzY2hlZC5vIFxcXFxcXG4gICA2OlxcdFxcdCAgIG1wdGNwX3BtX2dlbi5vIHBtX2tlcm5lbC5vXFxuICAgNzpcXHRcXG4gICA4OlxcdG9iai0kKENPTkZJR19TWU5fQ09PS0lFUykgKz0gc3luY29va2llcy5vXFxuICAgOTpcXHRvYmotJChDT05GSUdfSU5FVF9NUFRDUF9ESUFHKSArPSBtcHRjcF9kaWFnLm9cXG4gIDEwOlxcdFxcbiAgMTE6XFx0bXB0Y3BfY3J5cHRvX3Rlc3Qtb2JqcyA6PSBjcnlwdG9fdGVzdC5vXFxuICAxMjpcXHRtcHRjcF90b2tlbl90ZXN0LW9ianMgOj0gdG9rZW5fdGVzdC5vXFxuICAxMzpcXHRvYmotJChDT05GSUdfTVBUQ1BfS1VOSVRfVEVTVCkgKz0gbXB0Y3BfY3J5cHRvX3Rlc3QubyBtcHRjcF90b2tlbl90ZXN0Lm9cXG4gIDE0OlxcdFxcbiAgMTU6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGYub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozMzo1Ny40MzY5OTk3MDdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjM4MTg0NTg5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1QVENQIFJlY2VpdmUgTWVzc2FnZSBGdW5jdGlvbioqXG5cbk9rYXksIHNvIGBwcm90b2NvbC5vYCBnZXRzIGNvbXBpbGVkIG9ubHkgd2hlbiBNUFRDUCBpcyBlbmFibGVkLCBpbmRpY2F0ZWQgYnkgYENPTkZJR19NUFRDUD15YCwgYW5kIHRoYXQncyBkZXBlbmRlbnQgb24gYElORVRgLiBHb3QgaXQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBNUFRDUCByZWNlaXZlIG1lc3NhZ2UgZnVuY3Rpb24sIGBtcHRjcF9yZWN2bXNnYCwgd29ya3MuIExldCdzIHNlZS4uLiBJcyBpdCBzdGF0aWM/IFllcywgdGhlIGRlZmluaXRpb24gc2hvd3MgaXQncyBgc3RhdGljIGludCBtcHRjcF9yZWN2bXNnKC4uLilgLiBUaGF0IGxpbWl0cyBpdHMgc2NvcGUsIHdoaWNoIGlzIHR5cGljYWwgZm9yIGludGVybmFsIGZ1bmN0aW9ucy5cblxuTmV4dCwgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgbXB0Y3BfcmVjdm1zZ2AgaXMgYWN0dWFsbHkgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBwcm90b2NvbCBvcGVyYXRpb25zLCBpLmUuLCBpcyBpdCBpbiB0aGUgc3ltYm9sIHRhYmxlIHNvbWVob3c/IElzIGl0IGNhbGxhYmxlIHZpYSBgcHJvdG9fb3BzYD8gVGhhdCdzIHdoYXQgSSByZWFsbHkgbmVlZCB0byBhc2NlcnRhaW4uIFRpbWUgdG8gY2hlY2sgaXRzIHVzYWdlIHdpdGhpbiBgbmV0L21wdGNwL3Byb3RvY29sLmNgIHRvIHNlZSBob3cgaXQncyBhY3R1YWxseSByZWZlcmVuY2VkLiBMb29raW5nIGZvciBjYWxsIHNpdGVzIHdpbGwgZ2l2ZSB0aGUgY2xlYXJlc3QgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk2NiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjMzOjU5LjgxODg0ODQ2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjE2MzAzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF9yZWN2bXNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcHJvdG9jb2wuYz0yMTM4PXN0YXRpYyB2b2lkIG1wdGNwX2VhdF9yZWN2X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMTQ4LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIxNDk6c3RhdGljIGludCBfX21wdGNwX3JlY3Ztc2dfbXNrcShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMTUwLVxcdFxcdFxcdFxcdHNpemVfdCBsZW4sIGludCBmbGFncywgaW50IGNvcGllZF90b3RhbCxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTIzNTU9c3RhdGljIHVuc2lnbmVkIGludCBtcHRjcF9pbnFfaGludChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMzc1LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIzNzY6c3RhdGljIGludCBtcHRjcF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIzNzctXFx0XFx0XFx0IGludCBmbGFncylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI0MDgtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MjQwOTpcXHRcXHRieXRlc19yZWFkID0gX19tcHRjcF9yZWN2bXNnX21za3Eoc2ssIG1zZywgbGVuIC0gY29waWVkLCBmbGFncyxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNDEwLVxcdFxcdFxcdFxcdFxcdFxcdCAgY29waWVkLCBcXHUwMDI2dHNzLCBcXHUwMDI2Y21zZ19mbGFncyxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTQyMjI9c3RhdGljIHN0cnVjdCBwcm90byBtcHRjcF9wcm90ID0ge1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNDIzNC1cXHQuaW9jdGxcXHRcXHQ9IG1wdGNwX2lvY3RsLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjQyMzU6XFx0LnJlY3Ztc2dcXHQ9IG1wdGNwX3JlY3Ztc2csXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNDIzNi1cXHQucmVsZWFzZV9jYlxcdD0gbXB0Y3BfcmVsZWFzZV9jYixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzM6NTkuODcxMDE3ODUxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjYxNzIyNDg5OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTVBUQ1AgRXJyb3IgSGFuZGxpbmcgaW4gcmVjdm1zZzogQSBGdXp6aW5nIFRhcmdldCoqXG5cbk9rYXksIHNvIGBtcHRjcF9yZWN2bXNnYCBpcyB0aGUgY3J1Y2lhbCBgcmVjdm1zZ2AgaGFuZGxlciBmb3IgdGhlIE1QVENQIHByb3RvY29sLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgYSByZWFsLCBub24taW5saW5lZCBmdW5jdGlvbiwgYW5kIGEgcXVpY2sgY2hlY2sgb2YgYHZtbGludXhgIGNvbmZpcm1zIGl0OyBgbXB0Y3BfcmVjdm1zZ2AgaXMgYSB2YWxpZCwgYWRkcmVzc2FibGUgZnVuY3Rpb24gdXNlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgd2l0aGluIGBzdHJ1Y3QgcHJvdG8gbXB0Y3BfcHJvdGAuXG5cbk5vdywgbGV0J3MgZXZhbHVhdGUgdGhpcyBiYXNlZCBvbiB0aGUgY3JpdGVyaWEuXG5cbkZpcnN0LCB0aGUgY29yZSB0cmlhZ2UgcGhpbG9zb3BoeS4gUmVhY2hhYmlsaXR5IGlzIHRoZSBrZXkuIE1QVENQIGlzIGRlZmluaXRpdmVseSByZWFjaGFibGUgaW4gYSBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudCB1c2luZyB2aXJ0dWFsIG5ldHdvcmtpbmcsIGxvb3BiYWNrLCBhbmQgc3RhbmRhcmQgc29ja2V0IG9wZXJhdGlvbnMuIFRoYXQgY2hlY2tzIG91dC4gVGhlIHBhdGNoIGl0c2VsZiBkaXJlY3RseSBtb2RpZmllcyBleGVjdXRhYmxlIGxvZ2ljICp3aXRoaW4qIGBtcHRjcF9yZWN2bXNnYC4gU3BlY2lmaWNhbGx5LCB0aGUgZXJyb3IgaGFuZGxpbmcgZnJvbSBgc2tfd2FpdF9kYXRhYCB3YXMgZmF1bHR5LiBUaGUgcHJldmlvdXMgY29kZSB3YXMgZmFpbGluZyB0byBwcm9wYWdhdGUgdGhlIGNvcnJlY3QgZXJyb3IgY29kZSB0byB0aGUgY2FsbGVyLCBwb3RlbnRpYWxseSByZXR1cm5pbmcgMCBpbnN0ZWFkIG9mIHRoZSByZWFsIGVycm9yIHdoZW4gYHNrX3dhaXRfZGF0YSgpYCBmYWlsZWQgb3IgdGltZWQgb3V0LiBUaGlzIHBhdGNoIGZpeGVzIHRoaXMgYnkgZW5zdXJpbmcgdGhlIGNvcnJlY3QgZXJyb3IgY29kZSBpcyByZXR1cm5lZC4gU2luY2UgdGhpcyBpcyBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbSAoYG5ldC9tcHRjcC9gKSBhbmQgaXQncyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpdCdzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gV29ydGhGdXp6aW5nPXRydWUuXG5cbk5leHQsIGZvY3VzIHN5bWJvbHMuIGBtcHRjcF9yZWN2bXNnYCBpcyAqdGhlKiBmdW5jdGlvbiBtb2RpZmllZCBpbiB0aGlzIHBhdGNoLiBBbmQgaXQgKmFwcGVhcnMqIHRvIGJlIHRoZSAqb25seSogb25lLiBOb3csIGlzIGBtcHRjcF9yZWN2bXNnYCBhIHViaXF1aXRvdXMgZnVuY3Rpb24/IE5vLCBpdCdzIG5vdC4gSXQncyBzcGVjaWZpY2FsbHkgdGllZCB0byBNUFRDUCBzb2NrZXRzIChJUFBST1RPX01QVENQKS4gU28gdGhlIGZvY3VzIHN5bWJvbHMgYXJlIGNsZWFybHkgYFtcIm1wdGNwX3JlY3Ztc2dcIl1gLlxuXG5Nb3Zpbmcgb24gdG8gZW5hYmxlIGNvbmZpZ3MuIFdlIG5lZWQgYE1QVENQYCwgd2hpY2ggZGVwZW5kcyBvbiBgSU5FVGAuICBgSU5FVGAgaXMgc3RhbmRhcmQsIHNvIGxldCdzIGZvY3VzIG9uIGBNUFRDUGAgc3BlY2lmaWNhbGx5IGJlY2F1c2UgaXTigJlzIHRoZSBmZWF0dXJlIGNvbmZpZ3VyYXRpb24uIEFueSBvdGhlciBkZXBlbmRlbmNpZXM/IFRoZSBkZXBlbmRlbmNpZXMgYXJlIGBzZWxlY3QgU0tCX0VYVEVOU0lPTlNgLCBgc2VsZWN0IENSWVBUT19MSUJfU0hBMjU2YCwgYW5kIGBzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU2AuIFdlIGFyZSBvbmx5IGVuYWJsaW5nIGBNUFRDUGAsIHNvIHRoZSBjb25maWdzIGFyZSBgW1wiTVBUQ1BcIl1gLlxuXG5GaW5hbGx5LCB0aGUgcmVhc29uaW5nLiBJbiBzaG9ydCwgdGhlIHBhdGNoIGNvcnJlY3RzIGVycm9yIHJlcG9ydGluZyBpbiBgbXB0Y3BfcmVjdm1zZygpYC4gQW4gZXJyb3IgZnJvbSBgc2tfd2FpdF9kYXRhKClgIHdhcyBiZWluZyBkaXNjYXJkZWQsIGxlYWRpbmcgdG8gaW5jb3JyZWN0IHJldHVybiB2YWx1ZXMgZnJvbSBgcmVjdm1zZygpYC4gVGhpcyBwYXRjaCB3aWxsIGFsbG93IGVycm9yIGNvZGVzIHRvIGJlIGNvcnJlY3RseSBwcm9wYWdhdGVkIGZyb20gYG1wdGNwX3JlY3Ztc2coKWAsIGFsbG93aW5nIGVkZ2UgY2FzZSBmYWlsdXJlcyB0byBiZSBzdXJmYWNlZCBhbmQgZXhwb3NlZCB0byB0aGUgc29ja2V0IGNhbGxzLiBUaGlzIGlzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaW4gdGhlIE1QVENQIG5ldHdvcmtpbmcgc3Vic3lzdGVtLCByZWFjaGFibGUgdGhyb3VnaCBzdGFuZGFyZCBzb2NrZXQgY2FsbHMuIFRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgbWVyaXRzIGZ1enppbmcgdG8gYXNzZXNzIE1QVENQIHNvY2tldCByZWNlaXZlIGJlaGF2aW9yIGFuZCBpZGVudGlmeSBhbnkgcmVtYWluaW5nIGVkZ2UgY2FzZXMuXG5cbkV2ZXJ5dGhpbmcgc2VlbXMgbG9naWNhbGx5IHNvdW5kLCBzbyBpdCdzIHRpbWUgdG8gaW52b2tlIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MDIsIk91dHB1dFRva2VucyI6MTA3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM0OjA2LjA0MzI3MDIyMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3MTg3NTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNUFRDUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1wdGNwX3JlY3Ztc2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBlcnJvciBoYW5kbGluZyBpbiBtcHRjcF9yZWN2bXNnKCkgYnkgYXNzaWduaW5nIHRoZSByZXR1cm4gdmFsdWUgb2Ygc2tfd2FpdF9kYXRhKCkgdG8gJ2NvcGllZCcgaW5zdGVhZCBvZiAnZXJyJywgZW5zdXJpbmcgbmVnYXRpdmUgZXJyb3IgY29kZXMgYXJlIHByb3Blcmx5IHJldHVybmVkIHdoZW4gbm8gZGF0YSBoYXMgYmVlbiByZWFkLiBUaGlzIGNoYW5nZXMgY29udHJvbCBmbG93IGFuZCByZXR1cm4gdmFsdWVzIGluIHJlYWNoYWJsZSBNUFRDUCBzb2NrZXQgcmVjZWl2ZSBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1QVENQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXB0Y3BfcmVjdm1zZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGVycm9yIGhhbmRsaW5nIGluIG1wdGNwX3JlY3Ztc2coKSBieSBhc3NpZ25pbmcgdGhlIHJldHVybiB2YWx1ZSBvZiBza193YWl0X2RhdGEoKSB0byAnY29waWVkJyBpbnN0ZWFkIG9mICdlcnInLCBlbnN1cmluZyBuZWdhdGl2ZSBlcnJvciBjb2RlcyBhcmUgcHJvcGVybHkgcmV0dXJuZWQgd2hlbiBubyBkYXRhIGhhcyBiZWVuIHJlYWQuIFRoaXMgY2hhbmdlcyBjb250cm9sIGZsb3cgYW5kIHJldHVybiB2YWx1ZXMgaW4gcmVhY2hhYmxlIE1QVENQIHNvY2tldCByZWNlaXZlIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM0OjA2LjE0MDQ2NjgyNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA2OTY2MzkzODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNDowNi4xNDEwOTM4MDZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2MDY5NjAwNzUyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByZXR1cm4gdmFsdWUgYnVnIGluIG1wdGNwX3JlY3Ztc2coKSB3aGVyZSBhbiBlcnJvciByZXR1cm5lZCBieSBza193YWl0X2RhdGEoKSB3YXMgYXNzaWduZWQgdG8gdGhlIGlubmVyLXNjb3BlZCB2YXJpYWJsZSAnZXJyJyBpbnN0ZWFkIG9mICdjb3BpZWQnLCBjYXVzaW5nIG1wdGNwX3JlY3Ztc2coKSB0byByZXR1cm4gMCBpbnN0ZWFkIG9mIHRoZSBuZWdhdGl2ZSBlcnJvciBjb2RlIHdoZW4gbm8gZGF0YSBoYWQgYmVlbiBjb3BpZWQgeWV0LlxcblxcbkJvdGggJ2VycicgYW5kICdjb3BpZWQnIGFyZSBmdWxseSBpbml0aWFsaXplZCBzY2FsYXIgdmFyaWFibGVzIChjb3BpZWQgaXMgaW5pdGlhbGl6ZWQgdG8gMCwgYW5kIGVyciByZWNlaXZlcyB0aGUgcmV0dXJuIGNvZGUgZnJvbSBza193YWl0X2RhdGEpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIGFjY2Vzc2VzLiBCZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmI1MjM4MjRlMjgxNGUzMjcwOTk5YzU2MTM1NmI5ZmU1MzcxOWFhNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDEzIDEwOjMzOjM5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuaW5kZXggMDA5OGUyODMwOTMxOC4uOGRjMjVlZjE1NDJjNSAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXG4rKysgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuQEAgLTI0NTksNyArMjQ1OSw3IEBAIHN0YXRpYyBpbnQgbXB0Y3BfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbiBcdFx0bXB0Y3BfY2xlYW51cF9yYnVmKG1zaywgY29waWVkKTtcbiBcdFx0ZXJyID0gc2tfd2FpdF9kYXRhKHNrLCBcdTAwMjZ0aW1lbywgbGFzdCk7XG4gXHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbi1cdFx0XHRlcnIgPSBjb3BpZWQgPyA6IGVycjtcbitcdFx0XHRjb3BpZWQgPSBjb3BpZWQgPyA6IGVycjtcbiBcdFx0XHRnb3RvIG91dF9lcnI7XG4gXHRcdH1cbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM0OjA2LjE0MTA5NTI0NloiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1NDg5MjQzODE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTVBUQ1AgUmVjZWl2ZSBQYXRoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UgaW4gYG5ldC9tcHRjcC9wcm90b2NvbC5jYC4gVGhlIGRpZmYgaXRzZWxmIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCDigJMgYSBzbWFsbCBtb2RpZmljYXRpb24gYXJvdW5kIGxpbmUgMjQ1OSB3aXRoaW4gdGhlIGBtcHRjcF9yZWN2bXNnYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSBpdCdzIGluIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoLCBwb3RlbnRpYWxseSBkZWFsaW5nIHdpdGggdGhlIHJldHVybiB2YWx1ZSBmcm9tIGBza193YWl0X2RhdGFgLlxuXG5TcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2UgdGhlIG9yaWdpbmFsIGNvZGUgcG90ZW50aWFsbHkgb3ZlcndyaXRlcyBhIHZhbHVlIHdpdGggYW4gZXJyb3IgY29kZSB3aGVuIHRoZSBgc2tfd2FpdF9kYXRhYCBjYWxsIGZhaWxzLCBldmVuIGlmIHNvbWUgZGF0YSBoYWQgYmVlbiBjb3BpZWQgcHJpb3IgdG8gdGhlIGVycm9yLiBUaGUgdXBkYXRlZCBjb2RlIG5vdyBzZWVtcyB0byBwcmlvcml0aXplIHRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGlmIHRoZSBjb3B5IGhhcyBoYXBwZW5lZCwgYW5kIG9ubHkgcmV0dXJucyB0aGUgZXJyb3IgaWYgdGhlcmUgd2VyZSBubyBieXRlcyBjb3BpZWQuXG5cblRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJIHNob3VsZCByZWFsbHkgdXNlIGByZWFkLWZpbGVgIHRvIGV4YW1pbmUgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYG1wdGNwX2NsZWFudXBfcmJ1ZmAgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhpcyBzZWN0aW9uLCBhbmQgZXhhY3RseSBob3cgdGhlIGBjb3BpZWRgIHZhcmlhYmxlIGlzIGJlaW5nIHVzZWQgdXBzdHJlYW0uIEkgbmVlZCB0byBzZWUgd2hhdCdzIGhhcHBlbmluZyBqdXN0IGJlZm9yZSBhbmQgYWZ0ZXIgdGhpcyBwb2ludC4gVGhpcyBjaGFuZ2UgbWlnaHQgYmUgcmVsYXRlZCB0byBob3cgd2UgaGFuZGxlIHBhcnRpYWwgcmVhZHMgb3IgdGltZW91dHMgaW4gdGhlIE1QVENQIHJlY2VpdmUgcGF0aCwgYW5kIEkgbmVlZCB0byBhc3Nlc3MgaG93IHRoZSBvdmVyYWxsIGJlaGF2aW9yIG9mIHRoZSBmdW5jdGlvbiwgYW5kIG9mIHRoZSBtb2R1bGUsIHdpbGwgYmUgYWZmZWN0ZWQuIFRoZSBlcnJvciBoYW5kbGluZyBsb29rcyBhIGxpdHRsZSBkaWZmZXJlbnQsIGFuZCBJIHdhbnQgdG8gdmVyaWZ5IHRoZXJlIGFyZSBubyB1bmludGVuZGVkIHNpZGUgZWZmZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM0OjExLjYzMDM0MTUxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MTg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbXB0Y3AvcHJvdG9jb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDQwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNDQwOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjI0NDE6XFx0XFxuMjQ0MjpcXHRcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9DTE9TRSkge1xcbjI0NDM6XFx0XFx0XFx0XFx0XFx0Y29waWVkID0gLUVOT1RDT05OO1xcbjI0NDQ6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjQ0NTpcXHRcXHRcXHRcXHR9XFxuMjQ0NjpcXHRcXG4yNDQ3OlxcdFxcdFxcdFxcdGlmICghdGltZW8pIHtcXG4yNDQ4OlxcdFxcdFxcdFxcdFxcdGNvcGllZCA9IC1FQUdBSU47XFxuMjQ0OTpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4yNDUwOlxcdFxcdFxcdFxcdH1cXG4yNDUxOlxcdFxcbjI0NTI6XFx0XFx0XFx0XFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XFxuMjQ1MzpcXHRcXHRcXHRcXHRcXHRjb3BpZWQgPSBzb2NrX2ludHJfZXJybm8odGltZW8pO1xcbjI0NTQ6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjQ1NTpcXHRcXHRcXHRcXHR9XFxuMjQ1NjpcXHRcXHRcXHR9XFxuMjQ1NzpcXHRcXG4yNDU4OlxcdFxcdFxcdHByX2RlYnVnKFxcXCJibG9jayB0aW1lb3V0ICVsZFxcXFxuXFxcIiwgdGltZW8pO1xcbjI0NTk6XFx0XFx0XFx0bXB0Y3BfY2xlYW51cF9yYnVmKG1zaywgY29waWVkKTtcXG4yNDYwOlxcdFxcdFxcdGVyciA9IHNrX3dhaXRfZGF0YShzaywgXFx1MDAyNnRpbWVvLCBsYXN0KTtcXG4yNDYxOlxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuMjQ2MjpcXHRcXHRcXHRcXHRjb3BpZWQgPSBjb3BpZWQgPyA6IGVycjtcXG4yNDYzOlxcdFxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4yNDY0OlxcdFxcdFxcdH1cXG4yNDY1OlxcdFxcdH1cXG4yNDY2OlxcdFxcbjI0Njc6XFx0XFx0bXB0Y3BfY2xlYW51cF9yYnVmKG1zaywgY29waWVkKTtcXG4yNDY4OlxcdFxcbjI0Njk6XFx0b3V0X2VycjpcXG4yNDcwOlxcdFxcdGlmIChjbXNnX2ZsYWdzIFxcdTAwMjZcXHUwMDI2IGNvcGllZCBcXHUwMDNlPSAwKSB7XFxuMjQ3MTpcXHRcXHRcXHRpZiAoY21zZ19mbGFncyBcXHUwMDI2IE1QVENQX0NNU0dfVFMpXFxuMjQ3MjpcXHRcXHRcXHRcXHR0Y3BfcmVjdl90aW1lc3RhbXAobXNnLCBzaywgXFx1MDAyNnRzcyk7XFxuMjQ3MzpcXHRcXG4yNDc0OlxcdFxcdFxcdGlmIChjbXNnX2ZsYWdzIFxcdTAwMjYgTVBUQ1BfQ01TR19JTlEpIHtcXG4yNDc1OlxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBpbnEgPSBtcHRjcF9pbnFfaGludChzayk7XFxuMjQ3NjpcXHRcXG4yNDc3OlxcdFxcdFxcdFxcdHB1dF9jbXNnKG1zZywgU09MX1RDUCwgVENQX0NNX0lOUSwgc2l6ZW9mKGlucSksIFxcdTAwMjZpbnEpO1xcbjI0Nzg6XFx0XFx0XFx0fVxcbjI0Nzk6XFx0XFx0fVxcbjI0ODA6XFx0XFxuMjQ4MTpcXHRcXHRwcl9kZWJ1ZyhcXFwibXNrPSVwIHJ4IHF1ZXVlIGVtcHR5PSVkIGNvcGllZD0lZFxcXFxuXFxcIixcXG4yNDgyOlxcdFxcdFxcdCBtc2ssIHNrYl9xdWV1ZV9lbXB0eShcXHUwMDI2c2stXFx1MDAzZXNrX3JlY2VpdmVfcXVldWUpLCBjb3BpZWQpO1xcbjI0ODM6XFx0XFxuMjQ4NDpcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbjI0ODU6XFx0XFx0cmV0dXJuIGNvcGllZDtcXG4yNDg2OlxcdH1cXG4yNDg3OlxcdFxcbjI0ODg6XFx0c3RhdGljIHZvaWQgbXB0Y3BfcmV0cmFuc21pdF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4yNDg5OlxcdHtcXG4yNDkwOlxcdFxcdHN0cnVjdCBzb2NrICpzayA9IHRpbWVyX2NvbnRhaW5lcl9vZihzaywgdCwgbXB0Y3BfcmV0cmFuc21pdF90aW1lcik7XFxuMjQ5MTpcXHRcXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xcbjI0OTI6XFx0XFxuMjQ5MzpcXHRcXHRiaF9sb2NrX3NvY2soc2spO1xcbjI0OTQ6XFx0XFx0aWYgKCFzb2NrX293bmVkX2J5X3VzZXIoc2spKSB7XFxuMjQ5NTpcXHRcXHRcXHQvKiB3ZSBuZWVkIGEgcHJvY2VzcyBjb250ZXh0IHRvIHJldHJhbnNtaXQgKi9cXG4yNDk2OlxcdFxcdFxcdGlmICghdGVzdF9hbmRfc2V0X2JpdChNUFRDUF9XT1JLX1JUWCwgXFx1MDAyNm1zay1cXHUwMDNlZmxhZ3MpKVxcbjI0OTc6XFx0XFx0XFx0XFx0bXB0Y3Bfc2NoZWR1bGVfd29yayhzayk7XFxuMjQ5ODpcXHRcXHR9IGVsc2Uge1xcbjI0OTk6XFx0XFx0XFx0LyogZGVsZWdhdGUgb3VyIHdvcmsgdG8gdGNwX3JlbGVhc2VfY2IoKSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNDoxMS42MzA2MjU0MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMDQyMzI1MDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBtcHRjcF9yZWN2bXNnOiBFcnJvciBIYW5kbGluZyBhbmQgRGF0YSBUcmFuc2ZlcioqXG5cbkFscmlnaHQsIGxldCdzIGRpc3NlY3QgYG1wdGNwX3JlY3Ztc2dgIGZyb20gdGhlIGdyb3VuZCB1cCwgZm9jdXNpbmcgc3BlY2lmaWNhbGx5IG9uIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBgZXJyYCBhbmQgYGNvcGllZGAuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGVzZSB2YXJpYWJsZXMgYXJlIHVzZWQgdGhyb3VnaG91dCB0aGUgZnVuY3Rpb24ncyBleGVjdXRpb24uIFRoaXMgaXMgY29yZSB0byB1bmRlcnN0YW5kaW5nIGl0cyByZWxpYWJpbGl0eSBhbmQgZXJyb3IgcmVwb3J0aW5nLiBJ4oCZbSB0aGlua2luZyBhYm91dCBob3cgZXJyb3JzIGFyZSBzaWduYWxlZCBhbmQgaG93IG11Y2ggZGF0YSBnZXRzIHRyYW5zZmVycmVkIGluIGRpZmZlcmVudCBzY2VuYXJpb3MuIElzIGBlcnJgIGJlaW5nIHVzZWQgdG8gaW5kaWNhdGUgcGFydGlhbCByZWFkcyBkdWUgdG8gZXJyb3JzLCBvciBkb2VzIGl0IG9ubHkgZmxhZyBjb21wbGV0ZSBmYWlsdXJlcz8gQW5kIGhvdyBkb2VzIGBjb3BpZWRgIHRyYWNrIHRoZSBhbW91bnQgb2YgZGF0YSBzdWNjZXNzZnVsbHkgcGxhY2VkIGluIHRoZSB1c2VyIGJ1ZmZlciwgcGFydGljdWxhcmx5IHdoZW4gbXVsdGlwbGUgc3ViZmxvd3MgYXJlIGludm9sdmVkPyBJ4oCZbSBnb2luZyB0byB3YXRjaCBjYXJlZnVsbHkgZm9yIGVkZ2UgY2FzZXMgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW4gdGhlIGNvbnRleHQgb2YgbXVsdGlwYXRoIG9wZXJhdGlvbi4gVGhlIGZsb3cgaGVyZSBjYW4gZ2V0IGNvbXBsZXgsIHNvIHRyYWNpbmcgdGhlc2UgdmFyaWFibGVzIGlzIGtleSB0byBhIHNvbGlkIHVuZGVyc3RhbmRpbmcuIExldCdzIHNlZSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRob3NlIHNjZW5hcmlvcyFcblxuXG4iLCJJbnB1dFRva2VucyI6MzU3NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzQ6MTQuNjcyOTUzNzE3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MDc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbXB0Y3AvcHJvdG9jb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMzcwLFxuICBcIkxpbmVDb3VudFwiOiA3NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMzcwOlxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gVENQX0NMT1NFIHx8IChzay1cXHUwMDNlc2tfc2h1dGRvd24gXFx1MDAyNiBSQ1ZfU0hVVERPV04pKVxcbjIzNzE6XFx0XFx0XFx0cmV0dXJuIDE7XFxuMjM3MjpcXHRcXG4yMzczOlxcdFxcdHJldHVybiAwO1xcbjIzNzQ6XFx0fVxcbjIzNzU6XFx0XFxuMjM3NjpcXHRzdGF0aWMgaW50IG1wdGNwX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxuMjM3NzpcXHRcXHRcXHRcXHQgaW50IGZsYWdzKVxcbjIzNzg6XFx0e1xcbjIzNzk6XFx0XFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcXG4yMzgwOlxcdFxcdHN0cnVjdCBzY21fdGltZXN0YW1waW5nX2ludGVybmFsIHRzcztcXG4yMzgxOlxcdFxcdGludCBjb3BpZWQgPSAwLCBjbXNnX2ZsYWdzID0gMDtcXG4yMzgyOlxcdFxcdGludCB0YXJnZXQ7XFxuMjM4MzpcXHRcXHRsb25nIHRpbWVvO1xcbjIzODQ6XFx0XFxuMjM4NTpcXHRcXHQvKiBNU0dfRVJSUVVFVUUgaXMgcmVhbGx5IGEgbm8tb3AgdGlsbCB3ZSBzdXBwb3J0IElQX1JFQ1ZFUlIgKi9cXG4yMzg2OlxcdFxcdGlmICh1bmxpa2VseShmbGFncyBcXHUwMDI2IE1TR19FUlJRVUVVRSkpXFxuMjM4NzpcXHRcXHRcXHRyZXR1cm4gaW5ldF9yZWN2X2Vycm9yKHNrLCBtc2csIGxlbik7XFxuMjM4ODpcXHRcXG4yMzg5OlxcdFxcdGxvY2tfc29jayhzayk7XFxuMjM5MDpcXHRcXHRpZiAodW5saWtlbHkoc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9MSVNURU4pKSB7XFxuMjM5MTpcXHRcXHRcXHRjb3BpZWQgPSAtRU5PVENPTk47XFxuMjM5MjpcXHRcXHRcXHRnb3RvIG91dF9lcnI7XFxuMjM5MzpcXHRcXHR9XFxuMjM5NDpcXHRcXG4yMzk1OlxcdFxcdG1wdGNwX3Jwc19yZWNvcmRfc3ViZmxvd3MobXNrKTtcXG4yMzk2OlxcdFxcbjIzOTc6XFx0XFx0dGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBmbGFncyBcXHUwMDI2IE1TR19ET05UV0FJVCk7XFxuMjM5ODpcXHRcXG4yMzk5OlxcdFxcdGxlbiA9IG1pbl90KHNpemVfdCwgbGVuLCBJTlRfTUFYKTtcXG4yNDAwOlxcdFxcdHRhcmdldCA9IHNvY2tfcmN2bG93YXQoc2ssIGZsYWdzIFxcdTAwMjYgTVNHX1dBSVRBTEwsIGxlbik7XFxuMjQwMTpcXHRcXG4yNDAyOlxcdFxcdGlmICh1bmxpa2VseShtc2stXFx1MDAzZXJlY3Ztc2dfaW5xKSlcXG4yNDAzOlxcdFxcdFxcdGNtc2dfZmxhZ3MgPSBNUFRDUF9DTVNHX0lOUTtcXG4yNDA0OlxcdFxcbjI0MDU6XFx0XFx0d2hpbGUgKGNvcGllZCBcXHUwMDNjIGxlbikge1xcbjI0MDY6XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKmxhc3QgPSBOVUxMO1xcbjI0MDc6XFx0XFx0XFx0aW50IGVyciwgYnl0ZXNfcmVhZDtcXG4yNDA4OlxcdFxcbjI0MDk6XFx0XFx0XFx0Ynl0ZXNfcmVhZCA9IF9fbXB0Y3BfcmVjdm1zZ19tc2txKHNrLCBtc2csIGxlbiAtIGNvcGllZCwgZmxhZ3MsXFxuMjQxMDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGNvcGllZCwgXFx1MDAyNnRzcywgXFx1MDAyNmNtc2dfZmxhZ3MsXFxuMjQxMTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZsYXN0KTtcXG4yNDEyOlxcdFxcdFxcdGlmICh1bmxpa2VseShieXRlc19yZWFkIFxcdTAwM2MgMCkpIHtcXG4yNDEzOlxcdFxcdFxcdFxcdGlmICghY29waWVkKVxcbjI0MTQ6XFx0XFx0XFx0XFx0XFx0Y29waWVkID0gYnl0ZXNfcmVhZDtcXG4yNDE1OlxcdFxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4yNDE2OlxcdFxcdFxcdH1cXG4yNDE3OlxcdFxcbjI0MTg6XFx0XFx0XFx0Y29waWVkICs9IGJ5dGVzX3JlYWQ7XFxuMjQxOTpcXHRcXG4yNDIwOlxcdFxcdFxcdGlmICghbGlzdF9lbXB0eShcXHUwMDI2bXNrLVxcdTAwM2ViYWNrbG9nX2xpc3QpIFxcdTAwMjZcXHUwMDI2IG1wdGNwX21vdmVfc2ticyhzaykpXFxuMjQyMTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yNDIyOlxcdFxcbjI0MjM6XFx0XFx0XFx0Lyogb25seSB0aGUgTVBUQ1Agc29ja2V0IHN0YXR1cyBpcyByZWxldmFudCBoZXJlLiBUaGUgZXhpdFxcbjI0MjQ6XFx0XFx0XFx0ICogY29uZGl0aW9ucyBtaXJyb3IgY2xvc2VseSB0Y3BfcmVjdm1zZygpXFxuMjQyNTpcXHRcXHRcXHQgKi9cXG4yNDI2OlxcdFxcdFxcdGlmIChjb3BpZWQgXFx1MDAzZT0gdGFyZ2V0KVxcbjI0Mjc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjQyODpcXHRcXG4yNDI5OlxcdFxcdFxcdGlmIChjb3BpZWQpIHtcXG4yNDMwOlxcdFxcdFxcdFxcdGlmICh0Y3BfcmVjdl9zaG91bGRfc3RvcChzaykgfHxcXG4yNDMxOlxcdFxcdFxcdFxcdCAgICAhdGltZW8pXFxuMjQzMjpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4yNDMzOlxcdFxcdFxcdH0gZWxzZSB7XFxuMjQzNDpcXHRcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX2Vycikge1xcbjI0MzU6XFx0XFx0XFx0XFx0XFx0Y29waWVkID0gc29ja19lcnJvcihzayk7XFxuMjQzNjpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4yNDM3OlxcdFxcdFxcdFxcdH1cXG4yNDM4OlxcdFxcbjI0Mzk6XFx0XFx0XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19zaHV0ZG93biBcXHUwMDI2IFJDVl9TSFVURE9XTilcXG4yNDQwOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjI0NDE6XFx0XFxuMjQ0MjpcXHRcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9DTE9TRSkge1xcbjI0NDM6XFx0XFx0XFx0XFx0XFx0Y29waWVkID0gLUVOT1RDT05OO1xcbjI0NDQ6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM0OjE0LjY3MzIzNjgxN1oiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MjQwNDY0MjA3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNdWx0aWNhdGggVENQIFJlY2VpdmUgSXNzdWUqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgbXB0Y3BfcmVjdm1zZ2AgZnVuY3Rpb24uIEkgc2VlIHRoZSBjb2RlIHNuaXBwZXQgd2hlcmUgd2UncmUgd2FpdGluZyBmb3IgZGF0YSBvbiB0aGUgc29ja2V0IHdpdGggYHNrX3dhaXRfZGF0YWAuIFRoZSBjcml0aWNhbCBiaXQgaXMgcmlnaHQgYWZ0ZXIgdGhhdCB3YWl0OlxuXG5gYGBjXG5cdFx0ZXJyID0gc2tfd2FpdF9kYXRhKHNrLCBcdTAwMjZ0aW1lbywgbGFzdCk7XG5cdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuLVx0XHRcdGVyciA9IGNvcGllZCA/IDogZXJyO1xuK1x0XHRcdGNvcGllZCA9IGNvcGllZCA/IDogZXJyO1xuXHRcdFx0Z290byBvdXRfZXJyO1xuXHRcdH1cbmBgYFxuXG5Ob3csIHRoZSBwcmV2aW91cyB2ZXJzaW9uIHVzZWQgYGVyciA9IGNvcGllZCA/IDogZXJyO2AgYnV0IGl0IGhhcyBiZWVuIG1vZGlmaWVkIHRvIG5vdyByZWFkIGBjb3BpZWQgPSBjb3BpZWQgPyA6IGVycjtgLiBMZXQncyBzdGVwIGJhY2sgYW5kIHJlbWVtYmVyIHRoYXQgdGhlIGZ1bmN0aW9uIGlzIHN1cHBvc2VkIHRvIHJldHVybiBgY29waWVkYCAtIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQuIFRoZSB2YXJpYWJsZSBgZXJyYCBpcyBhIGxvY2FsIHZhcmlhYmxlIGRlY2xhcmVkICppbnNpZGUqIGEgYHdoaWxlYCBsb29wIHdpdGhpbiBgbXB0Y3BfcmVjdm1zZ2AuXG5cbkhlcmUncyB0aGUgcHJvYmxlbTogaWYgYGNvcGllZGAgd2FzIHN0aWxsIHplcm8gKG5vIGRhdGEgcmVhZCB5ZXQpIGFuZCBgc2tfd2FpdF9kYXRhYCByZXR1cm5lZCBhbiBlcnJvciAobGlrZSBhbiBpbnRlcnJ1cHQgb3IgYW4gRUFHQUlOKSwgdGhlIG9yaWdpbmFsIGNvZGUgd291bGQgc2V0IGBlcnJgIHRvIHRoYXQgZXJyb3IgY29kZSwgYnV0ICpzdGlsbCogcmV0dXJuIGBjb3BpZWRgLCB3aGljaCB3YXMgemVyby4gQSB6ZXJvIHZhbHVlIG9uIGEgYHJlY3Ztc2dgIGNhbGwgaXMgdHlwaWNhbGx5IGludGVycHJldGVkIGFzIGEgY2xlYW4gY2xvc2UvRU9GLCBub3QgYW4gZXJyb3IhIFRoYXQncyBiYWQuXG5cblRoZSBmaXgsIGBjb3BpZWQgPSBjb3BpZWQgPyA6IGVycjtgLCBtYWtlcyBzdXJlIHRoYXQgaWYgYW4gZXJyb3IgaGFwcGVuZWQgKmJlZm9yZSogYW55IGJ5dGVzIHdlcmUgY29waWVkLCB0aGF0IGBjb3BpZWRgIHRha2VzIG9uIHRoZSBlcnJvciBjb2RlLiBQZXJmZWN0ISBNYWtlcyBzZW5zZS5cblxuTm93LCBsZXQncyBzaGlmdCBnZWFycyBhbmQgdGhpbmsgYWJvdXQgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGZpeCBkb2Vzbid0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdGhhdCBLTVNBTiBtaWdodCBjYXRjaC4gQXJlIHRoZXJlIGFueSBvdGhlciB2YXJpYWJsZXMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBiZSB1bmluaXRpYWxpemVkIGluIHRoZSBlcnJvciBwYXRoP1xuXG5MZXQncyBjaGVjayBgdHNzYC4gYHN0cnVjdCBzY21fdGltZXN0YW1waW5nX2ludGVybmFsIHRzcztgIEl0J3MgZGVjbGFyZWQgbG9jYWxseSB3aXRoaW4gdGhlIGZ1bmN0aW9uLiBXaGVuIGlzIHRoZSBgTVBUQ1BfQ01TR19UU2AgZmxhZyBzZXQ/IEknbGwgbmVlZCB0byB0cmFjZSB3aGVyZSB0aGF0J3MgY29udHJvbGxlZCB0byBzZWUgaWYgdGhlcmUncyBhbnkgcmlzayBvZiB1c2luZyBhbiB1bmluaXRpYWxpemVkIGB0c3NgIHZhbHVlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTMwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzQ6NTcuMDc3ODg2ODAyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTk4NjMyMTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1QVENQX0NNU0dfXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jPTQzPWVudW0ge1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjQ0OlxcdE1QVENQX0NNU0dfVFMgPSBCSVQoMCksXFxubmV0L21wdGNwL3Byb3RvY29sLmM6NDU6XFx0TVBUQ1BfQ01TR19JTlEgPSBCSVQoMSksXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNDYtfTtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTIxNDk9c3RhdGljIGludCBfX21wdGNwX3JlY3Ztc2dfbXNrcShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIxOTAtXFx0XFx0XFx0dGNwX3VwZGF0ZV9yZWN2X3RzdGFtcHMoc2tiLCB0c3MpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIxOTE6XFx0XFx0XFx0KmNtc2dfZmxhZ3MgfD0gTVBUQ1BfQ01TR19UUztcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMTkyLVxcdFxcdH1cXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTIzNzY9c3RhdGljIGludCBtcHRjcF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjQwMi1cXHRpZiAodW5saWtlbHkobXNrLVxcdTAwM2VyZWN2bXNnX2lucSkpXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MjQwMzpcXHRcXHRjbXNnX2ZsYWdzID0gTVBUQ1BfQ01TR19JTlE7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjQwNC1cXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI0NzAtXFx0aWYgKGNtc2dfZmxhZ3MgXFx1MDAyNlxcdTAwMjYgY29waWVkIFxcdTAwM2U9IDApIHtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyNDcxOlxcdFxcdGlmIChjbXNnX2ZsYWdzIFxcdTAwMjYgTVBUQ1BfQ01TR19UUylcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNDcyLVxcdFxcdFxcdHRjcF9yZWN2X3RpbWVzdGFtcChtc2csIHNrLCBcXHUwMDI2dHNzKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNDczLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI0NzQ6XFx0XFx0aWYgKGNtc2dfZmxhZ3MgXFx1MDAyNiBNUFRDUF9DTVNHX0lOUSkge1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI0NzUtXFx0XFx0XFx0dW5zaWduZWQgaW50IGlucSA9IG1wdGNwX2lucV9oaW50KHNrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzQ6NTkuMjc2NTI1ODI2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc1NjA1NTEwNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogTm8gUmlza3MgSW50cm9kdWNlZCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcImRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzP1wiIEkgbmVlZCB0byBiZSAqc3VyZSogYWJvdXQgdGhpcywgc28gSSdtIGdvaW5nIHRocm91Z2ggdGhlIEtNU0FOIGNyaXRlcmlhIG1ldGhvZGljYWxseS5cblxuRmlyc3QsIEkgc2VlIHRoZSBjaGFuZ2U6IGZpeGluZyB0aGUgZXJyb3IgaGFuZGxpbmcgaW4gYG1wdGNwX3JlY3Ztc2coKWAuIEJhc2ljYWxseSwgdGhlIGNvZGUgd2FzIG1pc3Rha2VubHkgcmV0dXJuaW5nIGAwYCAoRU9GKSB3aGVuIGl0IHNob3VsZCBoYXZlIHJldHVybmVkIGFuIGVycm9yIGNvZGUgZnJvbSBgc2tfd2FpdF9kYXRhKClgLiBUaGF0J3Mgbm90IGdvb2QsIGJ1dCBpdCBkb2Vzbid0IGltbWVkaWF0ZWx5IHNjcmVhbSBcInVuaW5pdGlhbGl6ZWQgbWVtb3J5LlwiXG5cbk5vdyBJJ20gcnVubmluZyB0aHJvdWdoIHRoZSBLTVNBTiBjaGVja2xpc3QuIERvZXMgdGhlIHBhdGNoOlxuXG4xLiAgKipUb3VjaCBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2U/KiogTm9wZS4gVGhpcyBpcyBhbGwgYWJvdXQgaW50ZXJuYWwgZXJyb3IgcHJvcGFnYXRpb247IG5vIGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgcGFzc2VkIHRvIHVzZXJzcGFjZSB0aGF0IGNvdWxkIGJlIGFmZmVjdGVkLlxuMi4gICoqUmVseSBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBjb25kaXRpb25hbCBsb2dpYz8qKiBOb3QgdGhhdCBJIGNhbiBzZWUuIFRoZSByZWxldmFudCB2YXJpYWJsZXMgKGBlcnJgLCBgY29waWVkYCkgYXJlIGFsbCAqZXhwbGljaXRseSogaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cbjMuICAqKkFsbG9jYXRlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQ/KiogQWJzb2x1dGVseSBub3QuIE5vIG5ldyBhbGxvY2F0aW9ucyBhcmUgaGFwcGVuaW5nLlxuNC4gICoqSW52b2x2ZSBwb3RlbnRpYWwgYm91bmRzIGNoZWNrIGlzc3VlcyBvciBtZW1vcnkgYWNjZXNzIG9mIHVuaW5pdGlhbGl6ZWQgYnVmZmVycz8qKiBEb2Vzbid0IGxvb2sgbGlrZSBpdC4gVGhlIGNvcmUgY2hhbmdlIGlzIGp1c3QgYWJvdXQgd2hpY2ggdmFsdWUgaXMgcmV0dXJuZWQsIHdoaWNoIGlzIHRoZSBlcnJvciBjb2RlLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGlzIHNpbXBsZS4gSXQgY29ycmVjdHMgaG93IGFuIGVycm9yIGNvZGUgZnJvbSBgc2tfd2FpdF9kYXRhKClgIGlzIGhhbmRsZWQuIFRoZSBwcmV2aW91cyBjb2RlIHdhcyBvdmVyd3JpdGluZyB0aGUgZXJyb3Igd2l0aCAwIGluIHNvbWUgY2FzZXMuIFRoZSBmaXggcHJlc2VydmVzIHRoZSBhY3R1YWwgZXJyb3IgY29kZS5cblxuU28sIEknbSBjb25maWRlbnQ6XG5cbiogICBUaGUgY29kZSAqZG9lc24ndCogaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBvciBpbnRlcmFjdGlvbnMgd2l0aCB1c2VyIHNwYWNlIHRoYXQgY291bGQgYmUgc291cmNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS5cbiogICBOZWl0aGVyIGBlcnJgIG5vciBgY29waWVkYCBpcyB1bmluaXRpYWxpemVkLiBgZXJyYCBpcyBpbml0aWFsaXplZCBieSBgc2tfd2FpdF9kYXRhKClgLCBhbmQgYGNvcGllZGAgaXMgaW5pdGlhbGl6ZWQgdG8gMC5cbiogICBJdCBkb2VzICpub3QqIGxlYWsgYW55IGluZm9ybWF0aW9uLiBOZWdhdGl2ZSBlcnJvciBjb2RlIGlzIHJldHVybmVkLlxuXG5UaGVyZWZvcmUsIEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzLCBmdW5jdGlvbmFsIHRlc3RzLCBhbmQgS0FTQU4gc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IGlzc3VlcyByZWxhdGVkIHRvIHRoaXMgZml4IChsaWtlIG91dCBvZiBib3VuZHMsIE5VTEwgZGVyZWZlcmVuY2VzLCBldGMuKS4gVGhpcyBpcyBhIGNvbnRyb2wgZmxvdy9yZXR1cm4gdmFsdWUgYnVnLCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgYnVnLlxuXG5TbywgSSdtIGdvaW5nIHRvIHNldCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSSBuZWVkIHRvIGRvY3VtZW50IHRoaXMuIFRoZSByZWFzb25pbmcgSSdsbCBwdXQgd2l0aCBgc2V0LXJlc3VsdHNgIHdpbGwgZ28gc29tZXRoaW5nIGxpa2UgdGhpczpcblxuKiAgICoqUGF0Y2ggRGVzY3JpcHRpb246KiogVGhpcyBwYXRjaCBmaXhlcyBhbiBlcnJvciBwcm9wYWdhdGlvbiBidWcgaW4gYG1wdGNwX3JlY3Ztc2coKWAuIFRoZSBwcmV2aW91cyBjb2RlIGluY29ycmVjdGx5IHJldHVybmVkIGAwYCBpbnN0ZWFkIG9mIHByb3BhZ2F0aW5nIHRoZSBhY3R1YWwgZXJyb3IgY29kZSAoYC1FQUdBSU5gLCBgLUVJTlRSYCwgZXRjLikgd2hlbiBgY29waWVkYCB3YXMgemVyby5cbiogICAqKktNU0FOIEp1c3RpZmljYXRpb246KiogS01TQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0IHRoZSB1c2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzLiBUaGlzIGNoYW5nZSBvbmx5IGFmZmVjdHMgdGhlIHJldHVybiB2YWx1ZSBvZiBhIHN5c3RlbSBjYWxsIHVuZGVyIGVycm9yIGNvbmRpdGlvbnMgd2hlbiB0aGUgc29ja2V0IGlzIGJsb2NraW5nLiBOZWl0aGVyIGBjb3BpZWRgIG5vciBgZXJyYCBhcmUgdW5pbml0aWFsaXplZCAodGhleSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlKSwgYW5kIG5vIG5ldyBidWZmZXJzLCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UgYXJlIGludHJvZHVjZWQuIEJlY2F1c2Ugb2YgdGhpcywgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlxuXG5Ob3csIEknbSByZWFkeSB0byBpbnZva2UgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU4MywiT3V0cHV0VG9rZW5zIjoxODIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM1OjA2LjgzNzA4MzIzOFoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByZXR1cm4gdmFsdWUgYnVnIGluIG1wdGNwX3JlY3Ztc2coKSB3aGVyZSBhbiBlcnJvciByZXR1cm5lZCBieSBza193YWl0X2RhdGEoKSB3YXMgYXNzaWduZWQgdG8gdGhlIGlubmVyLXNjb3BlZCB2YXJpYWJsZSAnZXJyJyBpbnN0ZWFkIG9mICdjb3BpZWQnLCBjYXVzaW5nIG1wdGNwX3JlY3Ztc2coKSB0byByZXR1cm4gMCBpbnN0ZWFkIG9mIHRoZSBuZWdhdGl2ZSBlcnJvciBjb2RlIHdoZW4gbm8gZGF0YSBoYWQgYmVlbiBjb3BpZWQgeWV0LlxcblxcbkJvdGggJ2VycicgYW5kICdjb3BpZWQnIGFyZSBmdWxseSBpbml0aWFsaXplZCBzY2FsYXIgdmFyaWFibGVzIChjb3BpZWQgaXMgaW5pdGlhbGl6ZWQgdG8gMCwgYW5kIGVyciByZWNlaXZlcyB0aGUgcmV0dXJuIGNvZGUgZnJvbSBza193YWl0X2RhdGEpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIGFjY2Vzc2VzLiBCZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByZXR1cm4gdmFsdWUgYnVnIGluIG1wdGNwX3JlY3Ztc2coKSB3aGVyZSBhbiBlcnJvciByZXR1cm5lZCBieSBza193YWl0X2RhdGEoKSB3YXMgYXNzaWduZWQgdG8gdGhlIGlubmVyLXNjb3BlZCB2YXJpYWJsZSAnZXJyJyBpbnN0ZWFkIG9mICdjb3BpZWQnLCBjYXVzaW5nIG1wdGNwX3JlY3Ztc2coKSB0byByZXR1cm4gMCBpbnN0ZWFkIG9mIHRoZSBuZWdhdGl2ZSBlcnJvciBjb2RlIHdoZW4gbm8gZGF0YSBoYWQgYmVlbiBjb3BpZWQgeWV0LlxcblxcbkJvdGggJ2VycicgYW5kICdjb3BpZWQnIGFyZSBmdWxseSBpbml0aWFsaXplZCBzY2FsYXIgdmFyaWFibGVzIChjb3BpZWQgaXMgaW5pdGlhbGl6ZWQgdG8gMCwgYW5kIGVyciByZWNlaXZlcyB0aGUgcmV0dXJuIGNvZGUgZnJvbSBza193YWl0X2RhdGEpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIGFjY2Vzc2VzLiBCZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ls28[1] Phase: Succeeded StartedAt: 2026-09-13 10:35:18 +0000 UTC FinishedAt: 2026-09-13 10:35:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ls28[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-13 10:35:18 +0000 UTC FinishedAt: 2026-09-13 10:35:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ls28[2] Phase: Succeeded StartedAt: 2026-09-13 10:35:18 +0000 UTC FinishedAt: 2026-09-13 14:30:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ls28[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"b9623615-727d-4fa4-b655-609aab1c4c99","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-13 10:35:18 +0000 UTC FinishedAt: 2026-09-13 14:30:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_recvmsg"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"b9623615-727d-4fa4-b655-609aab1c4c99","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow7ls28[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"b9623615-727d-4fa4-b655-609aab1c4c99","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-13 10:35:18 +0000 UTC FinishedAt: 2026-09-13 10:35:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ls28[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"b9623615-727d-4fa4-b655-609aab1c4c99","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-13 10:35:18 +0000 UTC FinishedAt: 2026-09-13 10:35:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflow7ls28/series-workflow7ls28-convert-artifact-2918535623/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ls28[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"b9623615-727d-4fa4-b655-609aab1c4c99","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-13 10:35:28 +0000 UTC FinishedAt: 2026-09-13 10:53:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ls28[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"b9623615-727d-4fa4-b655-609aab1c4c99","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-13 10:35:28 +0000 UTC FinishedAt: 2026-09-13 10:53:46 +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:*172697f5-632e-476d-b28d-21dea8ea350a,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-workflow7ls28/series-workflow7ls28-convert-artifact-2918535623/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": "33336420-f4ce-4eab-83ca-c9e40252142d", "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-workflow7ls28/series-workflow7ls28-build-action-2107660893/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ls28[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"b9623615-727d-4fa4-b655-609aab1c4c99","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-13 10:35:28 +0000 UTC FinishedAt: 2026-09-13 10:53:36 +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:*172697f5-632e-476d-b28d-21dea8ea350a,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-workflow7ls28/series-workflow7ls28-convert-artifact-2918535623/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": "33336420-f4ce-4eab-83ca-c9e40252142d", "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-workflow7ls28/series-workflow7ls28-build-action-2107660893/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ls28[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"b9623615-727d-4fa4-b655-609aab1c4c99","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-13 10:53:46 +0000 UTC FinishedAt: 2026-09-13 10:53:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ls28[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"b9623615-727d-4fa4-b655-609aab1c4c99","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-13 10:53:46 +0000 UTC FinishedAt: 2026-09-13 10:53:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ls28[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"b9623615-727d-4fa4-b655-609aab1c4c99","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-13 10:53:46 +0000 UTC FinishedAt: 2026-09-13 10:53:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ls28[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"b9623615-727d-4fa4-b655-609aab1c4c99","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-13 10:53:46 +0000 UTC FinishedAt: 2026-09-13 10:53:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"b9623615-727d-4fa4-b655-609aab1c4c99","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflow7ls28/series-workflow7ls28-convert-artifact-1691775734/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ls28[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"b9623615-727d-4fa4-b655-609aab1c4c99","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-13 10:53:56 +0000 UTC FinishedAt: 2026-09-13 10:56:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ls28[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"b9623615-727d-4fa4-b655-609aab1c4c99","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-13 10:53:56 +0000 UTC FinishedAt: 2026-09-13 10:56:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*33336420-f4ce-4eab-83ca-c9e40252142d,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-workflow7ls28/series-workflow7ls28-build-action-2107660893/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-workflow7ls28[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"b9623615-727d-4fa4-b655-609aab1c4c99","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-13 10:56:23 +0000 UTC FinishedAt: 2026-09-13 10:56:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ls28[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"b9623615-727d-4fa4-b655-609aab1c4c99","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-13 10:56:23 +0000 UTC FinishedAt: 2026-09-13 10:56:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ls28[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"b9623615-727d-4fa4-b655-609aab1c4c99","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-13 10:56:23 +0000 UTC FinishedAt: 2026-09-13 11:17:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ls28[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"b9623615-727d-4fa4-b655-609aab1c4c99","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-13 10:56:23 +0000 UTC FinishedAt: 2026-09-13 11:17:28 +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:*172697f5-632e-476d-b28d-21dea8ea350a,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-workflow7ls28/series-workflow7ls28-convert-artifact-1691775734/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": "143c2790-962f-4a38-b338-8d1eb940ec79", "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-workflow7ls28/series-workflow7ls28-build-action-3177683450/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ls28[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"b9623615-727d-4fa4-b655-609aab1c4c99","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-13 10:56:23 +0000 UTC FinishedAt: 2026-09-13 11:17:15 +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:*172697f5-632e-476d-b28d-21dea8ea350a,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-workflow7ls28/series-workflow7ls28-convert-artifact-1691775734/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": "143c2790-962f-4a38-b338-8d1eb940ec79", "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-workflow7ls28/series-workflow7ls28-build-action-3177683450/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ls28[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"b9623615-727d-4fa4-b655-609aab1c4c99","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-13 11:17:28 +0000 UTC FinishedAt: 2026-09-13 11:17:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ls28[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"b9623615-727d-4fa4-b655-609aab1c4c99","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-13 11:17:28 +0000 UTC FinishedAt: 2026-09-13 11:17:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ls28[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"b9623615-727d-4fa4-b655-609aab1c4c99","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-13 11:17:28 +0000 UTC FinishedAt: 2026-09-13 11:19:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ls28[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"b9623615-727d-4fa4-b655-609aab1c4c99","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-13 11:17:28 +0000 UTC FinishedAt: 2026-09-13 11:19:08 +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:*143c2790-962f-4a38-b338-8d1eb940ec79,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-workflow7ls28/series-workflow7ls28-build-action-3177683450/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-workflow7ls28[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"b9623615-727d-4fa4-b655-609aab1c4c99","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-13 11:19:21 +0000 UTC FinishedAt: 2026-09-13 14:30:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ls28[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"b9623615-727d-4fa4-b655-609aab1c4c99","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-13 11:19:21 +0000 UTC FinishedAt: 2026-09-13 11:19:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ls28[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"b9623615-727d-4fa4-b655-609aab1c4c99","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-13 11:19:21 +0000 UTC FinishedAt: 2026-09-13 11:19:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ls28[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"b9623615-727d-4fa4-b655-609aab1c4c99","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-13 11:19:22 +0000 UTC FinishedAt: 2026-09-13 14:30:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_recvmsg"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*33336420-f4ce-4eab-83ca-c9e40252142d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*143c2790-962f-4a38-b338-8d1eb940ec79,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-workflow7ls28/series-workflow7ls28-build-action-2107660893/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-workflow7ls28/series-workflow7ls28-build-action-3177683450/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow7ls28[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"b9623615-727d-4fa4-b655-609aab1c4c99","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-13 11:19:22 +0000 UTC FinishedAt: 2026-09-13 11:19:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ls28[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"b9623615-727d-4fa4-b655-609aab1c4c99","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-13 11:19:22 +0000 UTC FinishedAt: 2026-09-13 11:19:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_recvmsg"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7ls28/series-workflow7ls28-convert-artifact-3487688731/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ls28[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"b9623615-727d-4fa4-b655-609aab1c4c99","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-13 11:19:22 +0000 UTC FinishedAt: 2026-09-13 11:19:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ls28[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"b9623615-727d-4fa4-b655-609aab1c4c99","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-13 11:19:43 +0000 UTC FinishedAt: 2026-09-13 14:30:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ls28[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"b9623615-727d-4fa4-b655-609aab1c4c99","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-13 11:19:43 +0000 UTC FinishedAt: 2026-09-13 14:30:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*33336420-f4ce-4eab-83ca-c9e40252142d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*143c2790-962f-4a38-b338-8d1eb940ec79,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-workflow7ls28/series-workflow7ls28-build-action-2107660893/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-workflow7ls28/series-workflow7ls28-build-action-3177683450/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-workflow7ls28/series-workflow7ls28-convert-artifact-3487688731/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,}