Name: series-workflowqbj57 Phase: Succeeded StartedAt: 2026-09-11 09:29:07 +0000 UTC FinishedAt: 2026-09-11 13:27:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbj57[0] Phase: Succeeded StartedAt: 2026-09-11 09:29:07 +0000 UTC FinishedAt: 2026-09-11 09:47:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbj57[0].run-triage Phase: Succeeded StartedAt: 2026-09-11 09:29:07 +0000 UTC FinishedAt: 2026-09-11 09:47:39 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "78445023439506ebd83b86d40b1e428a3b309d4a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SCTP", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "78445023439506ebd83b86d40b1e428a3b309d4a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SCTP", "INET" ], "series_id": "36f2051d-d2fd-42fe-af2a-cd4c6bf3dde4" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "sctp_sendmsg_to_asoc", "sctp_sendmsg", "sctp_wait_for_connect" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA5OjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1NDVFAmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjdHBfc2VuZG1zZ190b19hc29jJiMzNDssCiAgICAmIzM0O3NjdHBfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDtzY3RwX3dhaXRfZm9yX2Nvbm5lY3QmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYXNzb2NpYXRpb24gbGlmZXRpbWUgbWFuYWdlbWVudCBpbiBgc2N0cF9zZW5kbXNnX3RvX2Fzb2NgIGJ5IGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gYGFzb2NgIChgc2N0cF9hc3NvY2lhdGlvbl9ob2xkYC9gc2N0cF9hc3NvY2lhdGlvbl9wdXRgKSBhY3Jvc3MgdGhlIGJsb2NraW5nIGBzY3RwX3dhaXRfZm9yX2Nvbm5lY3RgIGNhbGwgYW5kIGNoZWNraW5nIGBhc29jLVx1MDAzZWJhc2UuZGVhZGAgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBvciBvcGVyYXRpb25zIG9uIGEgZGVhZCBhc3NvY2lhdGlvbi5cblxuLSBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5OlxuICAtIFRoaXMgY2hhbmdlIGFkZHJlc3NlcyBvYmplY3QgbGlmZXRpbWUgYW5kIHVzZS1hZnRlci1mcmVlIHJpc2tzLCB3aGljaCBhcmUgZGlyZWN0bHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4uXG4gIC0gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgYWxsb2NhdGVkLCBvciBleHBvc2VkLiBUaGUgbmV3bHkgaW50cm9kdWNlZCBsb2NhbCB2YXJpYWJsZSBgZGVhZGAgaXMgZXhwbGljaXRseSBhc3NpZ25lZCBgZGVhZCA9IGFzb2MtXHUwMDNlYmFzZS5kZWFkO2AgaW1tZWRpYXRlbHkgYmVmb3JlIGV2YWx1YXRpb24uXG4gIC0gVGhlcmUgYXJlIG5vIGtlcm5lbC10by11c2VyIG1lbW9yeSBjb3BpZXMsIHBhZGRpbmcgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcmVhZHMgaW52b2x2ZWQuXG5cblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkOyBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHNjdHBfc2VuZG1zZ190b19hc29jIGluIG5ldC9zY3RwL3NvY2tldC5jIHRvIHByb3Blcmx5IGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIFNDVFAgYXNzb2NpYXRpb24gYWNyb3NzIHNjdHBfd2FpdF9mb3JfY29ubmVjdCBhbmQgY2hlY2sgaWYgdGhlIGFzc29jaWF0aW9uIGlzIGRlYWQgd2hlbiBzdHJlYW0gaW50ZXJsZWF2aW5nIGlzIGVuYWJsZWQuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIHNvY2tldCBjb2RlIHRoYXQgY2FuIGJlIGV4ZXJjaXNlZCB2aWEgc3RhbmRhcmQgU0NUUCBzb2NrZXQgc2VuZG1zZyBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA5OjQ2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTI4ZjRlNjUyYmZiZTEzY2NiMmYxYzU0MWZlYTk0ZTdiNzg4YWQxMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDA5OjQ2OjQxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NvY2tldC5jIGIvbmV0L3NjdHAvc29ja2V0LmNcbmluZGV4IGM3YjllMzI1ZWMxY2QuLjA5ZmQ2Yjk1MTM3NDEgMTAwNjQ0XG4tLS0gYS9uZXQvc2N0cC9zb2NrZXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjdHAvc29ja2V0LmNcbkBAIC0xODQyLDkgJiM0MzsxODQyLDE0IEBAIHN0YXRpYyBpbnQgc2N0cF9zZW5kbXNnX3RvX2Fzb2Moc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXG4gXHRcdFx0Z290byBlcnI7XG4gXG4gXHRcdGlmIChhc29jLVx1MDAzZWVwLVx1MDAzZWludGxfZW5hYmxlKSB7XG4mIzQzO1x0XHRcdGJvb2wgZGVhZDtcbiYjNDM7XG4gXHRcdFx0dGltZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCAwKTtcbiYjNDM7XHRcdFx0c2N0cF9hc3NvY2lhdGlvbl9ob2xkKGFzb2MpO1xuIFx0XHRcdGVyciA9IHNjdHBfd2FpdF9mb3JfY29ubmVjdChhc29jLCBcdTAwMjZ0aW1lbyk7XG4tXHRcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHRkZWFkID0gYXNvYy1cdTAwM2ViYXNlLmRlYWQ7XG4mIzQzO1x0XHRcdHNjdHBfYXNzb2NpYXRpb25fcHV0KGFzb2MpO1xuJiM0MztcdFx0XHRpZiAoZXJyIHx8IGRlYWQpIHtcbiBcdFx0XHRcdGVyciA9IC1FU1JDSDtcbiBcdFx0XHRcdGdvdG8gZXJyO1xuIFx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwOTo0NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9TQ1RQJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzY3RwX3NlbmRtc2dfdG9fYXNvYyYjMzQ7LAogICAgJiMzNDtzY3RwX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7c2N0cF93YWl0X2Zvcl9jb25uZWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHNjdHBfc2VuZG1zZ190b19hc29jIGluIG5ldC9zY3RwL3NvY2tldC5jIHRvIHByb3Blcmx5IGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIFNDVFAgYXNzb2NpYXRpb24gYWNyb3NzIHNjdHBfd2FpdF9mb3JfY29ubmVjdCBhbmQgY2hlY2sgaWYgdGhlIGFzc29jaWF0aW9uIGlzIGRlYWQgd2hlbiBzdHJlYW0gaW50ZXJsZWF2aW5nIGlzIGVuYWJsZWQuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIHNvY2tldCBjb2RlIHRoYXQgY2FuIGJlIGV4ZXJjaXNlZCB2aWEgc3RhbmRhcmQgU0NUUCBzb2NrZXQgc2VuZG1zZyBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTI4ZjRlNjUyYmZiZTEzY2NiMmYxYzU0MWZlYTk0ZTdiNzg4YWQxMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDA5OjQ2OjQxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc29ja2V0LmMgYi9uZXQvc2N0cC9zb2NrZXQuYwppbmRleCBjN2I5ZTMyNWVjMWNkLi4wOWZkNmI5NTEzNzQxIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9zb2NrZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2N0cC9zb2NrZXQuYwpAQCAtMTg0Miw5ICYjNDM7MTg0MiwxNCBAQCBzdGF0aWMgaW50IHNjdHBfc2VuZG1zZ190b19hc29jKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAogCQkJZ290byBlcnI7CiAKIAkJaWYgKGFzb2MtJmd0O2VwLSZndDtpbnRsX2VuYWJsZSkgewomIzQzOwkJCWJvb2wgZGVhZDsKJiM0MzsKIAkJCXRpbWVvID0gc29ja19zbmR0aW1lbyhzaywgMCk7CiYjNDM7CQkJc2N0cF9hc3NvY2lhdGlvbl9ob2xkKGFzb2MpOwogCQkJZXJyID0gc2N0cF93YWl0X2Zvcl9jb25uZWN0KGFzb2MsICZhbXA7dGltZW8pOwotCQkJaWYgKGVycikgewomIzQzOwkJCWRlYWQgPSBhc29jLSZndDtiYXNlLmRlYWQ7CiYjNDM7CQkJc2N0cF9hc3NvY2lhdGlvbl9wdXQoYXNvYyk7CiYjNDM7CQkJaWYgKGVyciB8fCBkZWFkKSB7CiAJCQkJZXJyID0gLUVTUkNIOwogCQkJCWdvdG8gZXJyOwogCQkJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTM1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU0NUUCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gbWV0aWN1bG91c2x5IGFuYWx5emUgdGhpcyBwYXRjaCwga2VlcGluZyB0aGUgcmVsZXZhbnQgZ3VpZGVsaW5lcyBmaXJtbHkgaW4gbWluZC4gU2VlbXMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGNoYW5nZSB3aXRoaW4gYG5ldC9zY3RwL3NvY2tldC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgc2N0cF9zZW5kbXNnX3RvX2Fzb2NgIGZ1bmN0aW9uLiBUaGUgZGlmZiBzbmlwcGV0IHBvaW50cyBvdXQgdGhlIGtleSBtb2RpZmljYXRpb24uCgpJbml0aWFsbHksIEkgc2VlIHRoZSBjb25kaXRpb25hbCBjaGVjayByZWxhdGVkIHRvIGBhc29jLSZndDtlcC0mZ3Q7aW50bF9lbmFibGVgLCB3aGljaCBpcyBpbnRlcmVzdGluZywgbGlrZWx5IHJlbGF0ZWQgdG8gaW50ZXJydXB0aWJsZSBzZW5kIG9wZXJhdGlvbnMuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYGJvb2wgZGVhZGAgYW5kIHRoZSByZWxhdGVkIGBzY3RwX2Fzc29jaWF0aW9uX2hvbGRgIGFuZCBgc2N0cF9hc3NvY2lhdGlvbl9wdXRgIGNhbGxzIHdpdGhpbiB0aGlzIGNvbmRpdGlvbmFsIGJsb2NrIGltbWVkaWF0ZWx5IGNhdGNoZXMgbXkgYXR0ZW50aW9uLgoKTXkgZXhwZXJ0IGludHVpdGlvbiBzdWdnZXN0cyB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIGhhbmRsaW5nIGNvbm5lY3Rpb24gZmFpbHVyZXMgb3IgdGltZW91dHMgbW9yZSBncmFjZWZ1bGx5LCBwb3RlbnRpYWxseSBhZGRyZXNzaW5nIGEgcmFjZSBjb25kaXRpb24gb3IgZGVhZGxvY2sgc2NlbmFyaW8uIEl0IGxvb2tzIGxpa2UgdGhlIGNoZWNrIGlzIGF0dGVtcHRpbmcgdG8gc2VlIGlmIHRoZSBhc3NvY2lhdGlvbiBpcyAmIzM5O2RlYWQmIzM5OyBhZnRlciB3YWl0aW5nIGZvciBhIGNvbm5lY3Rpb24uIFRoZSB1c2Ugb2YgYHNjdHBfYXNzb2NpYXRpb25faG9sZGAgYW5kIGBzY3RwX2Fzc29jaWF0aW9uX3B1dGAgaW5kaWNhdGVzIHNvbWUga2luZCBvZiByZWZlcmVuY2UgY291bnRpbmcgb3IgcmVzb3VyY2UgbWFuYWdlbWVudCBoYXBwZW5pbmcgYXJvdW5kIHRoZSBwb3RlbnRpYWxseSBibG9ja2luZyBgc2N0cF93YWl0X2Zvcl9jb25uZWN0YC4gTWFrZXMgc2Vuc2UuIFdlIGFyZSBob2xkaW5nIHRoZSBhc3NvY2lhdGlvbiB0byBwcm90ZWN0IGl0IHdoaWxlIHdhaXRpbmcuCgpUbyBnYWluIGEgbW9yZSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nLCBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2l0aGluIGBzY3RwX3NlbmRtc2dfdG9fYXNvY2AuIEEgcXVpY2sgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSBicm9hZGVyIGNvbnRleHQgc2hvdWxkIGdpdmUgbWUgdGhlIGZ1bGwgcGljdHVyZSBhbmQgaGVscCBtZSBwaW5wb2ludCB0aGUgZXhhY3QgaXNzdWUgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nLiBJJiMzOTttIGtlZW4gdG8gc2VlIGhvdyBgZGVhZGAgaXMgYWN0dWFsbHkgZGV0ZXJtaW5lZCBhbmQgaG93IHRoaXMgY2hhbmdlcyB0aGUgZXJyb3IgaGFuZGxpbmcuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgbG9ja2luZyBpc3N1ZXMgb3IgcmVzb3VyY2UgbGVha3MuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY3RwL3NvY2tldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODI1Olx0XHRpZiAoc2N0cF93c3BhY2UoYXNvYykgXHUwMDNjIChpbnQpbXNnX2xlbilcbjE4MjY6XHRcdFx0c2N0cF9wcnNjdHBfcHJ1bmUoYXNvYywgc2luZm8sIG1zZ19sZW4gLSBzY3RwX3dzcGFjZShhc29jKSk7XG4xODI3Olx0XG4xODI4Olx0XHRpZiAoc2N0cF93c3BhY2UoYXNvYykgXHUwMDNjPSAwIHx8ICFza193bWVtX3NjaGVkdWxlKHNrLCBtc2dfbGVuKSkge1xuMTgyOTpcdFx0XHR0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIG1zZy1cdTAwM2Vtc2dfZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVCk7XG4xODMwOlx0XHRcdGVyciA9IHNjdHBfd2FpdF9mb3Jfc25kYnVmKGFzb2MsIHRyYW5zcG9ydCwgXHUwMDI2dGltZW8sIG1zZ19sZW4pO1xuMTgzMTpcdFx0XHRpZiAoZXJyKVxuMTgzMjpcdFx0XHRcdGdvdG8gZXJyO1xuMTgzMzpcdFx0XHRpZiAodW5saWtlbHkoc2luZm8tXHUwMDNlc2luZm9fc3RyZWFtIFx1MDAzZT0gYXNvYy1cdTAwM2VzdHJlYW0ub3V0Y250KSkge1xuMTgzNDpcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4xODM1Olx0XHRcdFx0Z290byBlcnI7XG4xODM2Olx0XHRcdH1cbjE4Mzc6XHRcdH1cbjE4Mzg6XHRcbjE4Mzk6XHRcdGlmIChzY3RwX3N0YXRlKGFzb2MsIENMT1NFRCkpIHtcbjE4NDA6XHRcdFx0ZXJyID0gc2N0cF9wcmltaXRpdmVfQVNTT0NJQVRFKG5ldCwgYXNvYywgTlVMTCk7XG4xODQxOlx0XHRcdGlmIChlcnIpXG4xODQyOlx0XHRcdFx0Z290byBlcnI7XG4xODQzOlx0XG4xODQ0Olx0XHRcdGlmIChhc29jLVx1MDAzZWVwLVx1MDAzZWludGxfZW5hYmxlKSB7XG4xODQ1Olx0XHRcdFx0Ym9vbCBkZWFkO1xuMTg0NjpcdFxuMTg0NzpcdFx0XHRcdHRpbWVvID0gc29ja19zbmR0aW1lbyhzaywgMCk7XG4xODQ4Olx0XHRcdFx0c2N0cF9hc3NvY2lhdGlvbl9ob2xkKGFzb2MpO1xuMTg0OTpcdFx0XHRcdGVyciA9IHNjdHBfd2FpdF9mb3JfY29ubmVjdChhc29jLCBcdTAwMjZ0aW1lbyk7XG4xODUwOlx0XHRcdFx0ZGVhZCA9IGFzb2MtXHUwMDNlYmFzZS5kZWFkO1xuMTg1MTpcdFx0XHRcdHNjdHBfYXNzb2NpYXRpb25fcHV0KGFzb2MpO1xuMTg1MjpcdFx0XHRcdGlmIChlcnIgfHwgZGVhZCkge1xuMTg1MzpcdFx0XHRcdFx0ZXJyID0gLUVTUkNIO1xuMTg1NDpcdFx0XHRcdFx0Z290byBlcnI7XG4xODU1Olx0XHRcdFx0fVxuMTg1NjpcdFx0XHR9IGVsc2Uge1xuMTg1NzpcdFx0XHRcdHdhaXRfY29ubmVjdCA9IHRydWU7XG4xODU4Olx0XHRcdH1cbjE4NTk6XHRcbjE4NjA6XHRcdFx0cHJfZGVidWcoXCYjMzQ7JXM6IHdlIGFzc29jaWF0ZWQgcHJpbWl0aXZlbHlcXG5cJiMzNDssIF9fZnVuY19fKTtcbjE4NjE6XHRcdH1cbjE4NjI6XHRcbjE4NjM6XHRcdGRhdGFtc2cgPSBzY3RwX2RhdGFtc2dfZnJvbV91c2VyKGFzb2MsIHNpbmZvLCBcdTAwMjZtc2ctXHUwMDNlbXNnX2l0ZXIpO1xuMTg2NDpcdFx0aWYgKElTX0VSUihkYXRhbXNnKSkge1xuMTg2NTpcdFx0XHRlcnIgPSBQVFJfRVJSKGRhdGFtc2cpO1xuMTg2NjpcdFx0XHRnb3RvIGVycjtcbjE4Njc6XHRcdH1cbjE4Njg6XHRcbjE4Njk6XHRcdGFzb2MtXHUwMDNlZm9yY2VfZGVsYXkgPSAhIShtc2ctXHUwMDNlbXNnX2ZsYWdzIFx1MDAyNiBNU0dfTU9SRSk7XG4xODcwOlx0XG4xODcxOlx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGNodW5rLCBcdTAwMjZkYXRhbXNnLVx1MDAzZWNodW5rcywgZnJhZ19saXN0KSB7XG4xODcyOlx0XHRcdHNjdHBfY2h1bmtfaG9sZChjaHVuayk7XG4xODczOlx0XHRcdHNjdHBfc2V0X293bmVyX3coY2h1bmspO1xuMTg3NDpcdFx0XHRjaHVuay1cdTAwM2V0cmFuc3BvcnQgPSB0cmFuc3BvcnQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ0OAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ2hlY2tpbmcgS2NvbmZpZyBmb3IgU0NUUCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBGaXJzdCBvcmRlciBvZiBidXNpbmVzczogSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBzdGF0ZSBvZiBTQ1RQIHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLCBzcGVjaWZpY2FsbHkgS2NvbmZpZy4gVGhpcyBpcyBsaWtlbHkgdGhlIGJlc3QgaW5pdGlhbCBzdGVwIHRvIGRldGVybWluZSBpZiBTQ1RQIGlzIGV2ZW4gZW5hYmxlZCwgZGlzYWJsZWQsIG9yIGJ1aWx0IGFzIGEgbW9kdWxlLiBJIGtub3cgbXkgd2F5IGFyb3VuZCB0aGUgS2NvbmZpZyBzeXN0ZW0sIGFuZCBJIGNhbiBxdWlja2x5IGRldGVybWluZSB0aGUgcmVsZXZhbnQgZGVwZW5kZW5jaWVzLCBwb3RlbnRpYWwgZGVmYXVsdCB2YWx1ZXMsIGFuZCBhbnkgcmVsZXZhbnQgb3B0aW9ucyByZWxhdGVkIHRvIFNDVFAuIE15IGdvYWwgaGVyZSBpcyB0byBnZXQgYSBoaWdoLWxldmVsIG92ZXJ2aWV3IG9mIHRoZSBjdXJyZW50IFNDVFAgY29uZmlndXJhdGlvbiB3aXRob3V0IGdldHRpbmcgYm9nZ2VkIGRvd24gaW4gdGhlIGRldGFpbHMganVzdCB5ZXQuIElzIGl0IGV2ZW4gaW4gdGhlIGJ1aWxkPyBBcmUgdGhlcmUgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGNvbnNpZGVyIGJhc2VkIG9uIHRoZSB0YXJnZXQgcGxhdGZvcm0gb3IgdXNlIGNhc2U/IEkmIzM5O20gaG9waW5nIHRoaXMgd2lsbCBwcm92aWRlIGEgY2xlYXIgcGF0aCBmb3J3YXJkIGZvciB3aGF0ZXZlciB0aGUgbmV4dCBzdGFnZSBpcy4gVGhlIGluaXRpYWwgaW5zcGVjdGlvbiBvZiBLY29uZmlnIHNob3VsZCBnaXZlIG1lIHRoYXQga2V5IGluZm9ybWF0aW9uIHF1aWNrbHksIGlkZWFsbHkgd2l0aGluIGEgZmV3IG1pbnV0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX1NDVFAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2N0cCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2N0cC9LY29uZmlnLTUtXG5uZXQvc2N0cC9LY29uZmlnOjY6bWVudWNvbmZpZyBJUF9TQ1RQXG5uZXQvc2N0cC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtUaGUgU0NUUCBQcm90b2NvbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NjQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIGBuZXQvc2N0cC9LY29uZmlnYCBmaWxlOgoKKipBbmFseXppbmcgdGhlIFNDVFAgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gYG5ldC9zY3RwL0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgU0NUUCAoU3RyZWFtIENvbnRyb2wgVHJhbnNtaXNzaW9uIFByb3RvY29sKSB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCBhcmUgZGVmaW5lZC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSB1c3VhbCBLY29uZmlnIGNvbnZlbnRpb25zIGhlcmUg4oCTIGEgaGllcmFyY2hpY2FsIHN0cnVjdHVyZSwgZGVwZW5kZW5jaWVzLCBoZWxwIHRleHQsIGFuZCBkZWZhdWx0IHNldHRpbmdzLiBUaGUgZ29hbCwgYXMgYWx3YXlzLCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBvcHRpb25zIGNvbnRyb2wgU0NUUCYjMzk7cyBmZWF0dXJlcywgYW5kIGhvdyB0aGV5IGltcGFjdCB0aGUgb3ZlcmFsbCBrZXJuZWwgYnVpbGQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOgoKKiAgICoqQ29yZSBFbmFibGVtZW50OioqIFRoZSB0b3AtbGV2ZWwgb3B0aW9uIHRvIGVuYWJsZSBvciBkaXNhYmxlIFNDVFAgZW50aXJlbHkuCiogICAqKkZlYXR1cmUgRmxhZ3M6KiogSW5kaXZpZHVhbCBvcHRpb25zIGNvbnRyb2xsaW5nIHNwZWNpZmljIFNDVFAgZmVhdHVyZXMgbGlrZSBtdWx0aS1ob21pbmcsIGR5bmFtaWMgYWRkcmVzcyBjb25maWd1cmF0aW9uLCBzdHJlYW0gc2VxdWVuY2luZywgYW5kIGFueSBleHRlbnNpb25zIGxpa2UgRXhwbGljaXQgQ29uZ2VzdGlvbiBOb3RpZmljYXRpb24gKEVDTikgc3VwcG9ydCwgb3IgVXNlciBEYXRhZ3JhbSBQcm90b2NvbCAoVURQKSBlbmNhcHN1bGF0aW9uLgoqICAgKipEZXBlbmRlbmNpZXM6KiogV2hhdCBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcyBvciBmZWF0dXJlcyBkb2VzIFNDVFAgZGVwZW5kIG9uPyBBcmUgdGhlcmUgYW55IGhhcmQgZGVwZW5kZW5jaWVzIG9uLCBzYXksIG5ldHdvcmtpbmcgc3RhY2sgY29tcG9uZW50cyBvciBzZWN1cml0eSBmZWF0dXJlcz8gQW5kIHdoYXQgYWJvdXQgYnVpbGQgZGVwZW5kZW5jaWVzLCBtYWtpbmcgc3VyZSBhbGwgdGhlIG5lZWRlZCBtb2R1bGVzIGFyZSBidWlsdC4KKiAgICoqRGVmYXVsdCBWYWx1ZXM6KiogVW5kZXJzdGFuZGluZyB0aGUgZGVmYXVsdCBzZXR0aW5ncyBpcyBjcnVjaWFsLiBBcmUgdGhleSBzZW5zaWJsZSBmb3IgZ2VuZXJhbCB1c2UsIG9yIGFyZSB0aGVyZSBzcGVjaWZpYyBzY2VuYXJpb3Mgd2hlcmUgSSBtaWdodCBuZWVkIHRvIGFkanVzdCB0aGVtPyBPZnRlbiB0aGUgZGVmYXVsdCBmb3IgbW9kdWxlcyBpcyBgbWAsIHNvIHRoZXkmIzM5O3JlIGJ1aWx0IGFzIGxvYWRhYmxlIG1vZHVsZXMuCiogICAqKkhlbHAgVGV4dDoqKiBUaGlzIHNob3VsZCBwcm92aWRlIGEgY2xlYXIgZGVzY3JpcHRpb24gb2YgZWFjaCBvcHRpb24uIFRoZSBoZWxwIHRleHQmIzM5O3MgYWNjdXJhY3kgYW5kIGNvbXBsZXRlbmVzcyBhcmUga2V5IGluZGljYXRvcnMgb2YgdGhlIHF1YWxpdHkgb2YgdGhlIEtjb25maWcgZmlsZSBpdHNlbGYuIEkmIzM5O2xsIGJlIGNvbXBhcmluZyBpdCB0byB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uLgoqICAgKipDb25kaXRpb25hbCBDb21waWxhdGlvbjoqKiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgb3B0aW9ucyB0aGF0IGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIGJhc2VkIG9uIHRoZSBhcmNoaXRlY3R1cmUsIENQVSwgb3Igb3RoZXIga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBUaGF0IG1pZ2h0IGluZmx1ZW5jZSBpdHMgaW1wYWN0IG9uIHBvd2VyLgoqICAgKipTZWN1cml0eSBDb25zaWRlcmF0aW9uczoqKiBIYXMgdGhlIEtjb25maWcgZmlsZSBhZGRyZXNzZWQgc2VjdXJpdHktcmVsYXRlZCBhc3BlY3RzPyBBcmUgdGhlcmUgb3B0aW9ucyByZWxhdGVkIHRvIElQc2VjLCBUTFMsIG9yIGFueSBoYXJkZW5pbmcgZmVhdHVyZXM/IEFyZSB0aGVyZSBhbnkgb3B0aW9ucyB0byBzdXBwb3J0IGhhcmRlbmluZywgb3IgZGlzYWJsaW5nIGZ1bmN0aW9ucyB0byByZWR1Y2UgdGhlIGF0dGFjayBzdXJmYWNlLgoKVWx0aW1hdGVseSwgSSB3YW50IHRvIGZvcm0gYSBjb21wbGV0ZSBtZW50YWwgcGljdHVyZSBvZiBob3cgU0NUUCBpcyBjb25maWd1cmVkIGFuZCBob3cgaXQmIzM5O3MgaW50ZWdyYXRlZCBpbnRvIHRoZSBsYXJnZXIgTGludXgga2VybmVsIG5ldHdvcmtpbmcgZnJhbWV3b3JrLiBJJiMzOTtsbCBiZSBub3RpbmcgYW55IGFyZWFzIHRoYXQgYXJlIHVuY2xlYXIsIG9yIGFueSBwb3RlbnRpYWwgaXNzdWVzIG9yIGltcHJvdmVtZW50cyB0aGF0IEkgY2FuIGlkZW50aWZ5IGFzIEkgZ28gdGhyb3VnaCB0aGUgb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY3RwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBTQ1RQIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0bWVudWNvbmZpZyBJUF9TQ1RQXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtUaGUgU0NUUCBQcm90b2NvbFwmIzM0O1xuICAgODpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA5Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEExXG4gIDEwOlx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEEyNTZcbiAgMTE6XHRcdHNlbGVjdCBDUllQVE9fTElCX1VUSUxTXG4gIDEyOlx0XHRzZWxlY3QgTkVUX0NSQzMyQ1xuICAxMzpcdFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXG4gIDE0Olx0XHRoZWxwXG4gIDE1Olx0XHQgIFN0cmVhbSBDb250cm9sIFRyYW5zbWlzc2lvbiBQcm90b2NvbFxuICAxNjpcdFxuICAxNzpcdFx0ICBGcm9tIFJGQyAyOTYwIFx1MDAzY2h0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzI5NjAudHh0XHUwMDNlLlxuICAxODpcdFxuICAxOTpcdFx0ICBcJiMzNDtTQ1RQIGlzIGEgcmVsaWFibGUgdHJhbnNwb3J0IHByb3RvY29sIG9wZXJhdGluZyBvbiB0b3Agb2YgYVxuICAyMDpcdFx0ICBjb25uZWN0aW9ubGVzcyBwYWNrZXQgbmV0d29yayBzdWNoIGFzIElQLiAgSXQgb2ZmZXJzIHRoZSBmb2xsb3dpbmdcbiAgMjE6XHRcdCAgc2VydmljZXMgdG8gaXRzIHVzZXJzOlxuICAyMjpcdFxuICAyMzpcdFx0ICAtLSBhY2tub3dsZWRnZWQgZXJyb3ItZnJlZSBub24tZHVwbGljYXRlZCB0cmFuc2ZlciBvZiB1c2VyIGRhdGEsXG4gIDI0Olx0XHQgIC0tIGRhdGEgZnJhZ21lbnRhdGlvbiB0byBjb25mb3JtIHRvIGRpc2NvdmVyZWQgcGF0aCBNVFUgc2l6ZSxcbiAgMjU6XHRcdCAgLS0gc2VxdWVuY2VkIGRlbGl2ZXJ5IG9mIHVzZXIgbWVzc2FnZXMgd2l0aGluIG11bHRpcGxlIHN0cmVhbXMsXG4gIDI2Olx0XHQgIHdpdGggYW4gb3B0aW9uIGZvciBvcmRlci1vZi1hcnJpdmFsIGRlbGl2ZXJ5IG9mIGluZGl2aWR1YWwgdXNlclxuICAyNzpcdFx0ICBtZXNzYWdlcyxcbiAgMjg6XHRcdCAgLS0gb3B0aW9uYWwgYnVuZGxpbmcgb2YgbXVsdGlwbGUgdXNlciBtZXNzYWdlcyBpbnRvIGEgc2luZ2xlIFNDVFBcbiAgMjk6XHRcdCAgcGFja2V0LCBhbmRcbiAgMzA6XHRcdCAgLS0gbmV0d29yay1sZXZlbCBmYXVsdCB0b2xlcmFuY2UgdGhyb3VnaCBzdXBwb3J0aW5nIG9mIG11bHRpLVxuICAzMTpcdFx0ICBob21pbmcgYXQgZWl0aGVyIG9yIGJvdGggZW5kcyBvZiBhbiBhc3NvY2lhdGlvbi5cJiMzNDtcbiAgMzI6XHRcbiAgMzM6XHRcdCAgVG8gY29tcGlsZSB0aGlzIHByb3RvY29sIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuICAzNDpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2N0cC4gRGVidWcgbWVzc2FnZXMgYXJlIGhhbmRsZWQgYnkgdGhlXG4gIDM1Olx0XHQgIGtlcm5lbCYjMzk7cyBkeW5hbWljIGRlYnVnZ2luZyBmcmFtZXdvcmsuXG4gIDM2Olx0XG4gIDM3Olx0XHQgIElmIGluIGRvdWJ0LCBzYXkgTi5cbiAgMzg6XHRcbiAgMzk6XHRpZiBJUF9TQ1RQXG4gIDQwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg2NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipUcmFjaW5nIHRoZSBTQ1RQIFNlbmQgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUgU0NUUCBzZW5kIHBhdGgsIHNwZWNpZmljYWxseSBob3cgZGF0YSBhY3R1YWxseSBnZXRzIHNlbnQgb3V0IGZyb20gdGhlIHVzZXIgc3BhY2Ugc29ja2V0IGxheWVyLiBNeSBzdGFydGluZyBwb2ludCBpcyBgc2N0cF9zZW5kbXNnX3RvX2Fzb2NgLiBJIGtub3cgdGhhdCBmdW5jdGlvbiBpcyBjcnVjaWFsLCBhcyBpdOKAmXMgdGhlIHdvcmtob3JzZSBjYWxsZWQgYnkgdGhlIGxhcmdlciBgc2N0cF9zZW5kbXNnYCBmdW5jdGlvbi4gVGhlIGtleSBoZXJlIGlzIHRvIGNvbmZpcm0gaG93IHdlIGdldCBmcm9tIGEgc3RhbmRhcmQgYHNlbmRtc2dgIG9yIGBzZW5kdG9gIHN5c2NhbGwg4oCTIHRoZSB0eXBpY2FsIHVzZXIgaW50ZXJhY3Rpb24g4oCTIHRvIHRoYXQgY29yZSBgc2N0cF9zZW5kbXNnX3RvX2Fzb2NgIGZ1bmN0aW9uLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgc3RhbmRhcmQgc29ja2V0IHN5c2NhbGxzIGV2ZW50dWFsbHkgbGVhZCB0byBgc2N0cF9zZW5kbXNnYCwgYnV0IEkgbmVlZCB0byBtYXAgdGhlIHBhdGggdG8gdmVyaWZ5LgoKVG8gbmFpbCB0aGlzIGRvd24sIEkmIzM5O2xsIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIEkmIzM5O2xsIG5lZWQgdG8gb3BlbiBgbmV0L3NjdHAvc29ja2V0LmNgIGFuZCBzZWFyY2ggZm9yIGFsbCBjYWxsIHNpdGVzIG9mIGBzY3RwX3NlbmRtc2dfdG9fYXNvY2AuIEtub3dpbmcgdGhlIGNhbGxlcnMgd2lsbCBoZWxwIG1lIHZpc3VhbGl6ZSB0aGUgZW50aXJlIHNlbmRpbmcgcGlwZWxpbmUsIGZyb20gdGhlIHN5c2NhbGwgZW50cnkgcG9pbnQgcmlnaHQgZG93biB0byB0aGlzIGNvcmUgc2VuZGluZyBmdW5jdGlvbi4gVGhhdCYjMzk7cyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IFNDVFAgaGFuZGxlcyBkYXRhIHRyYW5zbWlzc2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2N0cF9zZW5kbXNnX3RvX2Fzb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2N0cCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2N0cC9zb2NrZXQuYz0xNzUxPXN0YXRpYyBpbnQgc2N0cF9zZW5kbXNnX2NoZWNrX3NmbGFncyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbi0tXG5uZXQvc2N0cC9zb2NrZXQuYy0xNzg4LVxubmV0L3NjdHAvc29ja2V0LmM6MTc4OTpzdGF0aWMgaW50IHNjdHBfc2VuZG1zZ190b19hc29jKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxubmV0L3NjdHAvc29ja2V0LmMtMTc5MC1cdFx0XHRcdHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IG1zZ19sZW4sXG4tLVxubmV0L3NjdHAvc29ja2V0LmM9MTk0Nz1zdGF0aWMgaW50IHNjdHBfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IG1zZ19sZW4pXG4tLVxubmV0L3NjdHAvc29ja2V0LmMtMTk4Ny1cbm5ldC9zY3RwL3NvY2tldC5jOjE5ODg6XHRcdFx0ZXJyID0gc2N0cF9zZW5kbXNnX3RvX2Fzb2MoYXNvYywgbXNnLCBtc2dfbGVuLFxubmV0L3NjdHAvc29ja2V0LmMtMTk4OS1cdFx0XHRcdFx0XHQgICBOVUxMLCBzaW5mbyk7XG4tLVxubmV0L3NjdHAvc29ja2V0LmMtMTk5NC1cbm5ldC9zY3RwL3NvY2tldC5jOjE5OTU6XHRcdFx0Lyogc2N0cF9zZW5kbXNnX3RvX2Fzb2MoKSBtYXkgaGF2ZSByZWxlYXNlZCB0aGUgc29ja2V0XG5uZXQvc2N0cC9zb2NrZXQuYy0xOTk2LVx0XHRcdCAqIGxvY2sgKHNjdHBfd2FpdF9mb3Jfc25kYnVmKSwgZHVyaW5nIHdoaWNoIG90aGVyXG4tLVxubmV0L3NjdHAvc29ja2V0LmMtMjA0My1cdC8qIFNlbmQgbXNnIHRvIHRoZSBhc29jICovXG5uZXQvc2N0cC9zb2NrZXQuYzoyMDQ0Olx0ZXJyID0gc2N0cF9zZW5kbXNnX3RvX2Fzb2MoYXNvYywgbXNnLCBtc2dfbGVuLCB0cmFuc3BvcnQsIHNpbmZvKTtcbm5ldC9zY3RwL3NvY2tldC5jLTIwNDUtXHRpZiAoZXJyIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnIgIT0gLUVTUkNIIFx1MDAyNlx1MDAyNiBuZXcpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA5OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3MDkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHNjdHBfd2FpdF9mb3JfY29ubmVjdGAqKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGNvcmUgb2YgdGhpcyBTQ1RQIGNvbm5lY3Rpb24gbG9naWMuIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gYG5ldC9zY3RwL3NvY2tldC5jYCBhbmQgc3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoaW4gYHNjdHBfd2FpdF9mb3JfY29ubmVjdGAuIFRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWw7IGl0JiMzOTtzIHRoZSBnYXRla2VlcGVyLCB0aGUgcG9pbnQgd2hlcmUgdGhlIGFwcGxpY2F0aW9uIGNvZGUgaXMgYmxvY2tlZCB1bnRpbCB0aGUgU0NUUCBjb25uZWN0aW9uIGlzIGFjdHVhbGx5IGVzdGFibGlzaGVkLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBoZXJlLCBlc3BlY2lhbGx5IGFyb3VuZCB0aGUgYmxvY2tpbmcgYmVoYXZpb3IsIHRoZSBwb3RlbnRpYWwgZm9yIHNpZ25hbHMsIGFuZCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSB1bmRlcmx5aW5nIFNDVFAgc3RhdGUgdHJhbnNpdGlvbnMuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIHByZWNpc2UgbWVjaGFuaXNtcyB1c2VkIGZvciB3YWl0aW5nOiBhcmUgd2UgdGFsa2luZyBhYm91dCBhIHNpbXBsZSBzbGVlcCwgYSBwb2xsLWJhc2VkIGFwcHJvYWNoLCBvciBzb21ldGhpbmcgbW9yZSBpbnRyaWNhdGU/IElzIHRoZXJlIGEgc3BpbmxvY2sgaW52b2x2ZWQ/IEnigJltIGFsc28gaW50ZXJlc3RlZCBpbiBob3cgaXQgaGFuZGxlcyBlcnJvcnMgYW5kIHRpbWVvdXRzIOKAkyBhbGwgdGhvc2UgY29ybmVyIGNhc2VzIHdoZXJlIHRoZSBjb25uZWN0aW9uIGNhbiBmYWlsLiBVbmRlcnN0YW5kaW5nIHRoaXMgd2FpdCBmdW5jdGlvbiBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgbGF0ZW5jeSBpbnZvbHZlZCB3aXRoIGVzdGFibGlzaGluZyBhbiBTQ1RQIGNvbm5lY3Rpb24sIGFuZCBpdCBzaG91bGQgcmV2ZWFsIHRoZSBib3R0bGVuZWNrcyB3aXRoaW4gdGhlIGRyaXZlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2N0cF93YWl0X2Zvcl9jb25uZWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjdHAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jPTg3Mj1zdGF0aWMgdm9pZCBzY3RwX2NtZF9uZXdfc3RhdGUoc3RydWN0IHNjdHBfY21kX3NlcSAqY21kcyxcbi0tXG5uZXQvc2N0cC9zbV9zaWRlZWZmZWN0LmMtOTE1LVx0XHQvKiBXYWtlIHVwIGFueSBwcm9jZXNzZXMgd2FpdGluZyBpbiB0aGUgYXNvYyYjMzk7cyB3YWl0IHF1ZXVlIGluXG5uZXQvc2N0cC9zbV9zaWRlZWZmZWN0LmM6OTE2Olx0XHQgKiBzY3RwX3dhaXRfZm9yX2Nvbm5lY3QoKSBvciBzY3RwX3dhaXRfZm9yX3NuZGJ1ZigpLlxubmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jLTkxNy1cdFx0ICovXG4tLVxubmV0L3NjdHAvc29ja2V0LmM9Nzc9c3RhdGljIGludCBzY3RwX3dhaXRfZm9yX3BhY2tldChzdHJ1Y3Qgc29jayAqc2ssIGludCAqZXJyLCBsb25nICp0aW1lb19wKTtcbm5ldC9zY3RwL3NvY2tldC5jOjc4OnN0YXRpYyBpbnQgc2N0cF93YWl0X2Zvcl9jb25uZWN0KHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICosIGxvbmcgKnRpbWVvX3ApO1xubmV0L3NjdHAvc29ja2V0LmMtNzktc3RhdGljIGludCBzY3RwX3dhaXRfZm9yX2FjY2VwdChzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW8pO1xuLS1cbm5ldC9zY3RwL3NvY2tldC5jPTExNjc9c3RhdGljIGludCBfX3NjdHBfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkciAqa2FkZHJzLFxuLS1cbm5ldC9zY3RwL3NvY2tldC5jLTEyNDctXHR0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIGZsYWdzIFx1MDAyNiBPX05PTkJMT0NLKTtcbm5ldC9zY3RwL3NvY2tldC5jOjEyNDg6XHRyZXR1cm4gc2N0cF93YWl0X2Zvcl9jb25uZWN0KGFzb2MsIFx1MDAyNnRpbWVvKTtcbm5ldC9zY3RwL3NvY2tldC5jLTEyNDktXG4tLVxubmV0L3NjdHAvc29ja2V0LmM9MTc4OT1zdGF0aWMgaW50IHNjdHBfc2VuZG1zZ190b19hc29jKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxuLS1cbm5ldC9zY3RwL3NvY2tldC5jLTE4NDgtXHRcdFx0c2N0cF9hc3NvY2lhdGlvbl9ob2xkKGFzb2MpO1xubmV0L3NjdHAvc29ja2V0LmM6MTg0OTpcdFx0XHRlcnIgPSBzY3RwX3dhaXRfZm9yX2Nvbm5lY3QoYXNvYywgXHUwMDI2dGltZW8pO1xubmV0L3NjdHAvc29ja2V0LmMtMTg1MC1cdFx0XHRkZWFkID0gYXNvYy1cdTAwM2ViYXNlLmRlYWQ7XG4tLVxubmV0L3NjdHAvc29ja2V0LmMtMTg4OC1cdFx0dGltZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCBtc2ctXHUwMDNlbXNnX2ZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xubmV0L3NjdHAvc29ja2V0LmM6MTg4OTpcdFx0c2N0cF93YWl0X2Zvcl9jb25uZWN0KGFzb2MsIFx1MDAyNnRpbWVvKTtcbm5ldC9zY3RwL3NvY2tldC5jLTE4OTAtXHR9XG4tLVxubmV0L3NjdHAvc29ja2V0LmM9OTM4NT1zdGF0aWMgYm9vbCBzY3RwX3dyaXRlYWJsZShjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3NjdHAvc29ja2V0LmMtOTM5Mi0gKi9cbm5ldC9zY3RwL3NvY2tldC5jOjkzOTM6c3RhdGljIGludCBzY3RwX3dhaXRfZm9yX2Nvbm5lY3Qoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsIGxvbmcgKnRpbWVvX3ApXG5uZXQvc2N0cC9zb2NrZXQuYy05Mzk0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDk6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc0NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDM0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXR3b3JraW5nIFBhdGNoIGZvciBTQ1RQIEludGVybGVhdmUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGltcGFjdHMgdGhlIGBzY3RwX3NlbmRtc2dfdG9fYXNvY2AgZnVuY3Rpb24uIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBwaWVjZSBvZiBTQ1RQJiMzOTtzIHNlbmRpbmcgbG9naWMsIGFuZCB0aGUgbW9kaWZpY2F0aW9uIHNwZWNpZmljYWxseSBraWNrcyBpbiB3aGVuIGBhc29jLSZndDtlcC0mZ3Q7aW50bF9lbmFibGVgIGlzIHNldCDigJMgd2hpY2gsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgU0NUUCBzdHJlYW0gaW50ZXJsZWF2ZSBmZWF0dXJlLiBUaGUgcGF0Y2ggaXMgaW5zZXJ0aW5nIGFuIGBhc29jYCByZWZlcmVuY2UgYmVmb3JlIGBzY3RwX3dhaXRfZm9yX2Nvbm5lY3RgIGFuZCBjaGVja2luZyBpZiBgYXNvYy0mZ3Q7YmFzZS5kZWFkYCBhZnRlciBpdC4KCkZpcnN0IHRoaW5ncyBmaXJzdCwgaXMgdGhpcyBldmVuICpyZWFjaGFibGUqIGluIGEgdHlwaWNhbCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBBYnNvbHV0ZWx5LiBTQ1RQIGlzIHN0YW5kYXJkIHNvY2tldCBuZXR3b3JraW5nIHN0dWZmLCBBRl9JTkVUL0FGX0lORVQ2LCBJUFBST1RPX1NDVFAg4oCTIGl0IHNob3VsZCBiZSBhY2Nlc3NpYmxlLgoKTm93LCBsZXQmIzM5O3MgYXNzZXNzIGl0cyAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IHN0YXR1cy4gSGl0dGluZyBgbmV0L3NjdHAvc29ja2V0LmNgIGFuZCBzcGVjaWZpY2FsbHkgYHNjdHBfc2VuZG1zZ190b19hc29jYCBpcyBhIGNsZWFyIHBvc2l0aXZlIHNpZ24uIEl0JiMzOTtzIGNvcmUgbmV0d29ya2luZyBwcm90b2NvbCBjb2RlLCBhbmQgaXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUuICBTbywgV29ydGhGdXp6aW5nID0gdHJ1ZS4gIE5vIGRvdWJ0IGFib3V0IGl0LgoKTmV4dCwgdGhlIGZvY3VzIHN5bWJvbHMuIFdlIGhhdmUgYHNjdHBfc2VuZG1zZ190b19hc29jYCwgd2hpY2ggaXMgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uLCBwbHVzIGBzY3RwX3NlbmRtc2dgLCBpdHMgY2FsbGVyIGFuZCBsaWtlbHkgdGhlIGVudHJ5cG9pbnQgZm9yIG91ciBmdXp6aW5nLCBhbmQgYHNjdHBfd2FpdF9mb3JfY29ubmVjdGAsIHdoaWNoIGlzIGEgaGVscGVyIGZ1bmN0aW9uIHRoYXQgdGhpcyBwYXRjaCBpbnRlcmFjdHMgd2l0aC4gIFRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0byB0YXJnZXQuCgpBbmQgZmluYWxseSwgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFdlIG5lZWQgYElQX1NDVFBgLCB3aGljaCwgY29udmVuaWVudGx5LCBkZXBlbmRzIG9uIGBJTkVUYC4gT2theSwgZWFzeSBlbm91Z2ggdG8gc2F0aXNmeSB0aG9zZSBkZXBlbmRlbmNpZXMuIEkga25vdyB3aGVyZSB0aGF0JiMzOTtzIGxvY2F0ZWQsIHRvby4gQ2hlY2tpbmcgYG5ldC9zY3RwL0tjb25maWdgIGNvbmZpcm1zIGBJUF9TQ1RQYCBkZXBlbmRzIG9uIGBJTkVUYCBhbmQgaXMgaW4gdGhlIGNvcnJlY3QgbG9jYXRpb24uIExldCYjMzk7cyBtYWtlIHN1cmUgaXQmIzM5O3MgY29tcGlsZWQgd2l0aCBgbmV0L3NjdHAvTWFrZWZpbGVgLgoKT2theSwgSSB0aGluayB3ZSBoYXZlIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGF0Y2ggYW5kIGl0cyBpbXBsaWNhdGlvbnMgZm9yIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA5OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NjdHAuKnNvY2tldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY3RwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY3RwL2lwdjYuYz01Mjk9c3RhdGljIHZvaWQgc2N0cF92Nl9mcm9tX3NrYih1bmlvbiBzY3RwX2FkZHIgKmFkZHIsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3NjdHAvaXB2Ni5jLTU0OC1cbm5ldC9zY3RwL2lwdjYuYzo1NDk6LyogSW5pdGlhbGl6ZSBhbiBzY3RwX2FkZHIgZnJvbSBhIHNvY2tldC4gKi9cbm5ldC9zY3RwL2lwdjYuYy01NTAtc3RhdGljIHZvaWQgc2N0cF92Nl9mcm9tX3NrKHVuaW9uIHNjdHBfYWRkciAqYWRkciwgc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9zY3RwL2lwdjYuYz0xMDE1PXN0YXRpYyBpbnQgc2N0cF9pbmV0Nl9zdXBwb3J0ZWRfYWRkcnMoY29uc3Qgc3RydWN0IHNjdHBfc29jayAqb3B0LFxuLS1cbm5ldC9zY3RwL2lwdjYuYy0xMDI2LS8qIEhhbmRsZSBTQ1RQX0lfV0FOVF9NQVBQRURfVjRfQUREUiBmb3IgZ2V0cGVlcm5hbWUoKSBhbmQgZ2V0c29ja25hbWUoKSAqL1xubmV0L3NjdHAvaXB2Ni5jOjEwMjc6c3RhdGljIGludCBzY3RwX2dldG5hbWUoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICp1YWRkcixcbm5ldC9zY3RwL2lwdjYuYy0xMDI4LVx0XHRcdGludCBwZWVyKVxuLS1cbm5ldC9zY3RwL3Byb3RvY29sLmM9MjE1PXN0YXRpYyB2b2lkIHNjdHBfdjRfZnJvbV9za2IodW5pb24gc2N0cF9hZGRyICphZGRyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9zY3RwL3Byb3RvY29sLmMtMjMzLVxubmV0L3NjdHAvcHJvdG9jb2wuYzoyMzQ6LyogSW5pdGlhbGl6ZSBhbiBzY3RwX2FkZHIgZnJvbSBhIHNvY2tldC4gKi9cbm5ldC9zY3RwL3Byb3RvY29sLmMtMjM1LXN0YXRpYyB2b2lkIHNjdHBfdjRfZnJvbV9zayh1bmlvbiBzY3RwX2FkZHIgKmFkZHIsIHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvc2N0cC9wcm90b2NvbC5jPTE0NzY9c3RhdGljIF9faW5pdCBpbnQgc2N0cF9pbml0KHZvaWQpXG4tLVxubmV0L3NjdHAvcHJvdG9jb2wuYy0xNDk5LVxubmV0L3NjdHAvcHJvdG9jb2wuYzoxNTAwOlx0c3RhdHVzID0gcGVyY3B1X2NvdW50ZXJfaW5pdChcdTAwMjZzY3RwX3NvY2tldHNfYWxsb2NhdGVkLCAwLCBHRlBfS0VSTkVMKTtcbm5ldC9zY3RwL3Byb3RvY29sLmMtMTUwMS1cdGlmIChzdGF0dXMpXG4tLVxubmV0L3NjdHAvcHJvdG9jb2wuYy0xNjY1LWVycl9laGFzaF9hbGxvYzpcbm5ldC9zY3RwL3Byb3RvY29sLmM6MTY2NjpcdHBlcmNwdV9jb3VudGVyX2Rlc3Ryb3koXHUwMDI2c2N0cF9zb2NrZXRzX2FsbG9jYXRlZCk7XG5uZXQvc2N0cC9wcm90b2NvbC5jLTE2NjctZXJyX3BlcmNwdV9jb3VudGVyX2luaXQ6XG4tLVxubmV0L3NjdHAvcHJvdG9jb2wuYz0xNjc1PXN0YXRpYyBfX2V4aXQgdm9pZCBzY3RwX2V4aXQodm9pZClcbi0tXG5uZXQvc2N0cC9wcm90b2NvbC5jLTE3MDQtXG5uZXQvc2N0cC9wcm90b2NvbC5jOjE3MDU6XHRwZXJjcHVfY291bnRlcl9kZXN0cm95KFx1MDAyNnNjdHBfc29ja2V0c19hbGxvY2F0ZWQpO1xubmV0L3NjdHAvcHJvdG9jb2wuYy0xNzA2LVxuLS1cbm5ldC9zY3RwL3NvY2tldC5jPTkyPXN0YXRpYyBpbnQgc2N0cF9zb2NrX21pZ3JhdGUoc3RydWN0IHNvY2sgKm9sZHNrLCBzdHJ1Y3Qgc29jayAqbmV3c2ssXG5uZXQvc2N0cC9zb2NrZXQuYy05My1cdFx0XHQgICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc3NvYyxcbm5ldC9zY3RwL3NvY2tldC5jOjk0Olx0XHRcdCAgICAgZW51bSBzY3RwX3NvY2tldF90eXBlIHR5cGUpO1xubmV0L3NjdHAvc29ja2V0LmMtOTUtXG4tLVxubmV0L3NjdHAvc29ja2V0LmM9OTg9c3RhdGljIERFRklORV9QRVJfQ1BVKGludCwgc2N0cF9tZW1vcnlfcGVyX2NwdV9md19hbGxvYyk7XG5uZXQvc2N0cC9zb2NrZXQuYzo5OTpzdHJ1Y3QgcGVyY3B1X2NvdW50ZXIgc2N0cF9zb2NrZXRzX2FsbG9jYXRlZDtcbm5ldC9zY3RwL3NvY2tldC5jLTEwMC1cbi0tXG5uZXQvc2N0cC9zb2NrZXQuYz0xOTQ3PXN0YXRpYyBpbnQgc2N0cF9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbXNnX2xlbilcbi0tXG5uZXQvc2N0cC9zb2NrZXQuYy0xOTk0LVxubmV0L3NjdHAvc29ja2V0LmM6MTk5NTpcdFx0XHQvKiBzY3RwX3NlbmRtc2dfdG9fYXNvYygpIG1heSBoYXZlIHJlbGVhc2VkIHRoZSBzb2NrZXRcbm5ldC9zY3RwL3NvY2tldC5jLTE5OTYtXHRcdFx0ICogbG9jayAoc2N0cF93YWl0X2Zvcl9zbmRidWYpLCBkdXJpbmcgd2hpY2ggb3RoZXJcbi0tXG5uZXQvc2N0cC9zb2NrZXQuYz0yODQ0PXN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2RlbGF5ZWRfYWNrKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvc2N0cC9zb2NrZXQuYy0yODUzLVx0XHRcdFx0ICAgIFwmIzM0OyVzIChwaWQgJWQpIFwmIzM0O1xubmV0L3NjdHAvc29ja2V0LmM6Mjg1NDpcdFx0XHRcdCAgICBcJiMzNDtVc2Ugb2Ygc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgaW4gZGVsYXllZF9hY2sgc29ja2V0IG9wdGlvbi5cXG5cJiMzNDtcbm5ldC9zY3RwL3NvY2tldC5jLTI4NTUtXHRcdFx0XHQgICAgXCYjMzQ7VXNlIHN0cnVjdCBzY3RwX3NhY2tfaW5mbyBpbnN0ZWFkXFxuXCYjMzQ7LFxuLS1cbm5ldC9zY3RwL3NvY2tldC5jPTQ4MjA9c3RhdGljIGludCBzY3RwX2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsXG4tLVxubmV0L3NjdHAvc29ja2V0LmMtNDgzOC1cbm5ldC9zY3RwL3NvY2tldC5jOjQ4Mzk6aW50IHNjdHBfaW5ldF9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkcixcbm5ldC9zY3RwL3NvY2tldC5jLTQ4NDAtXHRcdCAgICAgIGludCBhZGRyX2xlbiwgaW50IGZsYWdzKVxuLS1cbm5ldC9zY3RwL3NvY2tldC5jPTQ4NjE9c3RhdGljIHN0cnVjdCBzb2NrICpzY3RwX2Nsb25lX3NvY2soc3RydWN0IHNvY2sgKnNrLFxubmV0L3NjdHAvc29ja2V0LmMtNDg2Mi1cdFx0XHRcdCAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbm5ldC9zY3RwL3NvY2tldC5jOjQ4NjM6XHRcdFx0XHQgICAgZW51bSBzY3RwX3NvY2tldF90eXBlIHR5cGUpXG5uZXQvc2N0cC9zb2NrZXQuYy00ODY0LXtcbi0tXG5uZXQvc2N0cC9zb2NrZXQuYz02MTMwPXN0YXRpYyBpbnQgc2N0cF9nZXRzb2Nrb3B0X2RlbGF5ZWRfYWNrKHN0cnVjdCBzb2NrICpzaywgaW50IGxlbixcbi0tXG5uZXQvc2N0cC9zb2NrZXQuYy02MTQ1LVx0XHRcdFx0ICAgIFwmIzM0OyVzIChwaWQgJWQpIFwmIzM0O1xubmV0L3NjdHAvc29ja2V0LmM6NjE0NjpcdFx0XHRcdCAgICBcJiMzNDtVc2Ugb2Ygc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgaW4gZGVsYXllZF9hY2sgc29ja2V0IG9wdGlvbi5cXG5cJiMzNDtcbm5ldC9zY3RwL3NvY2tldC5jLTYxNDctXHRcdFx0XHQgICAgXCYjMzQ7VXNlIHN0cnVjdCBzY3RwX3NhY2tfaW5mbyBpbnN0ZWFkXFxuXCYjMzQ7LFxuLS1cbm5ldC9zY3RwL3NvY2tldC5jPTg2MDA9c3RhdGljIGludCBzY3RwX2xpc3Rlbl9zdGFydChzdHJ1Y3Qgc29jayAqc2ssIGludCBiYWNrbG9nKVxuLS1cbm5ldC9zY3RwL3NvY2tldC5jLTg2NTQtICovXG5uZXQvc2N0cC9zb2NrZXQuYzo4NjU1OmludCBzY3RwX2luZXRfbGlzdGVuKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBiYWNrbG9nKVxubmV0L3NjdHAvc29ja2V0LmMtODY1Ni17XG4tLVxubmV0L3NjdHAvc29ja2V0LmMtODcxNi0gKi9cbm5ldC9zY3RwL3NvY2tldC5jOjg3MTc6X19wb2xsX3Qgc2N0cF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBwb2xsX3RhYmxlICp3YWl0KVxubmV0L3NjdHAvc29ja2V0LmMtODcxOC17XG4tLVxubmV0L3NjdHAvc29ja2V0LmM9OTUzMz1zdGF0aWMgaW50IHNjdHBfc29ja19taWdyYXRlKHN0cnVjdCBzb2NrICpvbGRzaywgc3RydWN0IHNvY2sgKm5ld3NrLFxubmV0L3NjdHAvc29ja2V0LmMtOTUzNC1cdFx0XHQgICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc3NvYyxcbm5ldC9zY3RwL3NvY2tldC5jOjk1MzU6XHRcdFx0ICAgICBlbnVtIHNjdHBfc29ja2V0X3R5cGUgdHlwZSlcbm5ldC9zY3RwL3NvY2tldC5jLTk1MzYte1xuLS1cbm5ldC9zY3RwL3NvY2tldC5jPTk2NTk9c3RydWN0IHByb3RvIHNjdHBfcHJvdCA9IHtcbi0tXG5uZXQvc2N0cC9zb2NrZXQuYy05NjkzLVxubmV0L3NjdHAvc29ja2V0LmM6OTY5NDpcdC5zb2NrZXRzX2FsbG9jYXRlZCA9IFx1MDAyNnNjdHBfc29ja2V0c19hbGxvY2F0ZWQsXG5uZXQvc2N0cC9zb2NrZXQuYy05Njk1LX07XG4tLVxubmV0L3NjdHAvc29ja2V0LmM9OTcxND1zdHJ1Y3QgcHJvdG8gc2N0cHY2X3Byb3QgPSB7XG4tLVxubmV0L3NjdHAvc29ja2V0LmMtOTc0OS1cbm5ldC9zY3RwL3NvY2tldC5jOjk3NTA6XHQuc29ja2V0c19hbGxvY2F0ZWQgPSBcdTAwMjZzY3RwX3NvY2tldHNfYWxsb2NhdGVkLFxubmV0L3NjdHAvc29ja2V0LmMtOTc1MS19O1xuLS1cbm5ldC9zY3RwL3VscHF1ZXVlLmMtOS0gKlxubmV0L3NjdHAvdWxwcXVldWUuYzoxMDogKiBUaGlzIGFic3RyYWN0aW9uIGNhcnJpZXMgc2N0cCBldmVudHMgdG8gdGhlIFVMUCAoc29ja2V0cykuXG5uZXQvc2N0cC91bHBxdWV1ZS5jLTExLSAqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA5OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjY3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIFNDVFAgQnVpbGQgUHJvY2VzcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBgc29ja2V0Lm9gIGlzIGNvbnN0cnVjdGVkIHdpdGhpbiB0aGUgU0NUUCBzdWJzeXN0ZW0uIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIGFsbW9zdCBjZXJ0YWlubHkgdGhlIGBuZXQvc2N0cC9NYWtlZmlsZWAuIFRoaXMgaXMgd2hlcmUgdGhlIGJ1aWxkIHByb2Nlc3MgaXMgb3JjaGVzdHJhdGVkLCBhbmQgaXQmIzM5O2xsIGdpdmUgbWUgdGhlIGRlcGVuZGVuY3kgY2hhaW4sIHRoZSBjb21waWxlciBmbGFncywgYW5kIGFueSBsaW5rLXRpbWUgbWFnaWMgdGhhdCYjMzk7cyBnb2luZyBvbi4gSSBleHBlY3QgdG8gZmluZCB0aGUgcnVsZXMgdGhhdCB0aWUgdGhlIHNvdXJjZSBmaWxlcyB0byB0aGUgb2JqZWN0IGZpbGUgYHNvY2tldC5vYCwgYWxvbmcgd2l0aCBhbnkgcmVsZXZhbnQgaW5jbHVkZSBwYXRocyBhbmQgcHJlcHJvY2Vzc29yIGRlZmluaXRpb25zLiBJ4oCZbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gd2hldGhlciB0aGVyZSBhcmUgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9ucyByZWxhdGVkIHRvIHNwZWNpZmljIFNDVFAgZmVhdHVyZXMgb3Iga2VybmVsIGNvbmZpZ3VyYXRpb25zIOKAkyB0aGF04oCZcyBhbHdheXMgYSBnb29kIHNwb3QgZm9yIHN1YnRsZSBidWdzLiBUaGlzIE1ha2VmaWxlIHNob3VsZCBwcm92aWRlIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBidWlsZCBwcm9jZXNzIGZvciB0aGF0IG9iamVjdCBmaWxlLiBMZXQmIzM5O3Mgc2VlIGlmIGl04oCZcyBhcyBzdHJhaWdodGZvcndhcmQgYXMgaXQgc2hvdWxkIGJlLCBvciBpZiB0aGVyZSBhcmUgYW55IGdvdGNoYXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY3RwL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZvciBTQ1RQIHN1cHBvcnQgY29kZS5cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0b2JqLSQoQ09ORklHX0lQX1NDVFApICYjNDM7PSBzY3RwLm9cbiAgIDc6XHRvYmotJChDT05GSUdfSU5FVF9TQ1RQX0RJQUcpICYjNDM7PSBzY3RwX2RpYWcub1xuICAgODpcdFxuICAgOTpcdHNjdHAteSA6PSBzbV9zdGF0ZXRhYmxlLm8gc21fc3RhdGVmdW5zLm8gc21fc2lkZWVmZmVjdC5vIFxcXG4gIDEwOlx0XHQgIHByb3RvY29sLm8gZW5kcG9pbnRvbGEubyBhc3NvY2lvbGEubyBcXFxuICAxMTpcdFx0ICB0cmFuc3BvcnQubyBjaHVuay5vIHNtX21ha2VfY2h1bmsubyB1bHBldmVudC5vIFxcXG4gIDEyOlx0XHQgIGlucXVldWUubyBvdXRxdWV1ZS5vIHVscHF1ZXVlLm8gXFxcbiAgMTM6XHRcdCAgdHNubWFwLm8gYmluZF9hZGRyLm8gc29ja2V0Lm8gcHJpbWl0aXZlLm8gXFxcbiAgMTQ6XHRcdCAgb3V0cHV0Lm8gaW5wdXQubyBkZWJ1Zy5vIHN0cmVhbS5vIGF1dGgubyBcXFxuICAxNTpcdFx0ICBvZmZsb2FkLm8gc3RyZWFtX3NjaGVkLm8gc3RyZWFtX3NjaGVkX3ByaW8ubyBcXFxuICAxNjpcdFx0ICBzdHJlYW1fc2NoZWRfcnIubyBzdHJlYW1fc2NoZWRfZmMubyBcXFxuICAxNzpcdFx0ICBzdHJlYW1faW50ZXJsZWF2ZS5vXG4gIDE4Olx0XG4gIDE5Olx0c2N0cF9kaWFnLXkgOj0gZGlhZy5vXG4gIDIwOlx0XG4gIDIxOlx0c2N0cC0kKENPTkZJR19TQ1RQX0RCR19PQkpDTlQpICYjNDM7PSBvYmpjbnQub1xuICAyMjpcdHNjdHAtJChDT05GSUdfUFJPQ19GUykgJiM0Mzs9IHByb2Mub1xuICAyMzpcdHNjdHAtJChDT05GSUdfU1lTQ1RMKSAmIzQzOz0gc3lzY3RsLm9cbiAgMjQ6XHRcbiAgMjU6XHRzY3RwLSQoc3Vic3QgbSx5LCQoQ09ORklHX0lQVjYpKVx0JiM0Mzs9IGlwdjYub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwOTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTM4OAoJCQkJCQkJb3V0cHV0OiAxNTQKCQkJCQkJCXRob3VnaHRzOiAxMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSVBfU0NUUCBTb2NrZXQgTW9kdWxlIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIGBJUF9TQ1RQYCBpcyBidWlsZGluZyBgc29ja2V0Lm9gLiBUaW1lIHRvIG1ldGljdWxvdXNseSByZXZpZXcgZXZlcnl0aGluZy4gRmlyc3QsIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyB0aGlzIG1vZHVsZSB3b3J0aCBmdXp6aW5nPyBUaGUgYW5zd2VyLCB1bmVxdWl2b2NhbGx5LCBpcyAqdHJ1ZSouIFdlJiMzOTt2ZSBkZWVtZWQgaXQgYSBoaWdoLXZhbHVlIHRhcmdldC4gTmV4dCwgd2UgaWRlbnRpZmllZCB0aGUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0czogYHNjdHBfc2VuZG1zZ190b19hc29jYCwgYHNjdHBfc2VuZG1zZ2AsIGFuZCBgc2N0cF93YWl0X2Zvcl9jb25uZWN0YC4gVGhlc2UgZnVuY3Rpb25zIGFyZSB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCBzbyB0byBzcGVhaywgaW4gU0NUUCBjb21tdW5pY2F0aW9uLiBUbyBlbnN1cmUgdGhlIGZ1enppbmcgZW52aXJvbm1lbnQgaXMgYXBwcm9wcmlhdGVseSBjb25maWd1cmVkLCB3ZSYjMzk7dmUgZW5hYmxlZCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zOiBgSVBfU0NUUGAgYW5kIGBJTkVUYCwgb2YgY291cnNlLiBGaW5hbGx5LCB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGlzIGRlY2lzaW9uIGlzIGNsZWFyIGFuZCBjb25jaXNlIOKAkyBpdCYjMzk7cyBhIHNvbGlkLCB3ZWxsLWRlZmluZWQgdGFyZ2V0IHdpdGgga25vd24gdnVsbmVyYWJpbGl0aWVzLiBUaW1lIHRvIGNvbmZpcm0gdGhlc2UgcmVzdWx0cyB3aXRoIGBzZXQtcmVzdWx0c2AsIGFuZCBtb3ZlIG9uIHRvIHRoZSBuZXh0IG1vZHVsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1NDVFAmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjdHBfc2VuZG1zZ190b19hc29jJiMzNDssCiAgICAmIzM0O3NjdHBfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDtzY3RwX3dhaXRfZm9yX2Nvbm5lY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc2N0cF9zZW5kbXNnX3RvX2Fzb2MgaW4gbmV0L3NjdHAvc29ja2V0LmMgdG8gcHJvcGVybHkgaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgU0NUUCBhc3NvY2lhdGlvbiBhY3Jvc3Mgc2N0cF93YWl0X2Zvcl9jb25uZWN0IGFuZCBjaGVjayBpZiB0aGUgYXNzb2NpYXRpb24gaXMgZGVhZCB3aGVuIHN0cmVhbSBpbnRlcmxlYXZpbmcgaXMgZW5hYmxlZC4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgc29ja2V0IGNvZGUgdGhhdCBjYW4gYmUgZXhlcmNpc2VkIHZpYSBzdGFuZGFyZCBTQ1RQIHNvY2tldCBzZW5kbXNnIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1NDVFAmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjdHBfc2VuZG1zZ190b19hc29jJiMzNDssCiAgICAmIzM0O3NjdHBfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDtzY3RwX3dhaXRfZm9yX2Nvbm5lY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc2N0cF9zZW5kbXNnX3RvX2Fzb2MgaW4gbmV0L3NjdHAvc29ja2V0LmMgdG8gcHJvcGVybHkgaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgU0NUUCBhc3NvY2lhdGlvbiBhY3Jvc3Mgc2N0cF93YWl0X2Zvcl9jb25uZWN0IGFuZCBjaGVjayBpZiB0aGUgYXNzb2NpYXRpb24gaXMgZGVhZCB3aGVuIHN0cmVhbSBpbnRlcmxlYXZpbmcgaXMgZW5hYmxlZC4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgc29ja2V0IGNvZGUgdGhhdCBjYW4gYmUgZXhlcmNpc2VkIHZpYSBzdGFuZGFyZCBTQ1RQIHNvY2tldCBzZW5kbXNnIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA5OjQ3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDk6NDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYXNzb2NpYXRpb24gbGlmZXRpbWUgbWFuYWdlbWVudCBpbiBgc2N0cF9zZW5kbXNnX3RvX2Fzb2NgIGJ5IGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gYGFzb2NgIChgc2N0cF9hc3NvY2lhdGlvbl9ob2xkYC9gc2N0cF9hc3NvY2lhdGlvbl9wdXRgKSBhY3Jvc3MgdGhlIGJsb2NraW5nIGBzY3RwX3dhaXRfZm9yX2Nvbm5lY3RgIGNhbGwgYW5kIGNoZWNraW5nIGBhc29jLVx1MDAzZWJhc2UuZGVhZGAgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBvciBvcGVyYXRpb25zIG9uIGEgZGVhZCBhc3NvY2lhdGlvbi5cblxuLSBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5OlxuICAtIFRoaXMgY2hhbmdlIGFkZHJlc3NlcyBvYmplY3QgbGlmZXRpbWUgYW5kIHVzZS1hZnRlci1mcmVlIHJpc2tzLCB3aGljaCBhcmUgZGlyZWN0bHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4uXG4gIC0gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgYWxsb2NhdGVkLCBvciBleHBvc2VkLiBUaGUgbmV3bHkgaW50cm9kdWNlZCBsb2NhbCB2YXJpYWJsZSBgZGVhZGAgaXMgZXhwbGljaXRseSBhc3NpZ25lZCBgZGVhZCA9IGFzb2MtXHUwMDNlYmFzZS5kZWFkO2AgaW1tZWRpYXRlbHkgYmVmb3JlIGV2YWx1YXRpb24uXG4gIC0gVGhlcmUgYXJlIG5vIGtlcm5lbC10by11c2VyIG1lbW9yeSBjb3BpZXMsIHBhZGRpbmcgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcmVhZHMgaW52b2x2ZWQuXG5cblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkOyBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5MjhmNGU2NTJiZmJlMTNjY2IyZjFjNTQxZmVhOTRlN2I3ODhhZDExCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMDk6NDY6NDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zb2NrZXQuYyBiL25ldC9zY3RwL3NvY2tldC5jCmluZGV4IGM3YjllMzI1ZWMxY2QuLjA5ZmQ2Yjk1MTM3NDEgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NvY2tldC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY3RwL3NvY2tldC5jCkBAIC0xODQyLDkgJiM0MzsxODQyLDE0IEBAIHN0YXRpYyBpbnQgc2N0cF9zZW5kbXNnX3RvX2Fzb2Moc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCiAJCQlnb3RvIGVycjsKIAogCQlpZiAoYXNvYy0mZ3Q7ZXAtJmd0O2ludGxfZW5hYmxlKSB7CiYjNDM7CQkJYm9vbCBkZWFkOwomIzQzOwogCQkJdGltZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCAwKTsKJiM0MzsJCQlzY3RwX2Fzc29jaWF0aW9uX2hvbGQoYXNvYyk7CiAJCQllcnIgPSBzY3RwX3dhaXRfZm9yX2Nvbm5lY3QoYXNvYywgJmFtcDt0aW1lbyk7Ci0JCQlpZiAoZXJyKSB7CiYjNDM7CQkJZGVhZCA9IGFzb2MtJmd0O2Jhc2UuZGVhZDsKJiM0MzsJCQlzY3RwX2Fzc29jaWF0aW9uX3B1dChhc29jKTsKJiM0MzsJCQlpZiAoZXJyIHx8IGRlYWQpIHsKIAkJCQllcnIgPSAtRVNSQ0g7CiAJCQkJZ290byBlcnI7CiAJCQl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwOTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTQ3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTQ1RQIFNvY2tldCBDb2RlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBUaGlzIHBhdGNoIHJlcXVpcmVzIGEgY2xvc2UgbG9vaywgYW5kIHRvIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucywgSSBuZWVkIHRvIHpvb20gaW4gb24gdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgaW4gYG5ldC9zY3RwL3NvY2tldC5jYC4gSSYjMzk7bGwgdXNlIG15IGVzdGFibGlzaGVkIHdvcmtmbG93OiBmaXJzdCwgSSYjMzk7bGwgcHVsbCB1cCB0aGUgY29kZSB1c2luZyBgcmVhZC1maWxlYCBhbmQgY2VudGVyIHRoZSB2aWV3IGFyb3VuZCBsaW5lIDE4NDIuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHZpc3VhbCBhbmNob3IgZm9yIHRoZSBjaGFuZ2UgYW5kIGhlbHAgbWUgcXVpY2tseSBncmFzcCB0aGUgbG9jYWwgZnVuY3Rpb24gYW5kIGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSBpbXBhY3RlZC4gRnJvbSB0aGVyZSwgSSBjYW4gc3RhcnQgdG8gaWRlbnRpZnkgdGhlIHNwZWNpZmljIGxvZ2ljIHRoaXMgcGF0Y2ggbW9kaWZpZXMgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgZXhpc3RpbmcgaW1wbGVtZW50YXRpb24uIFRoaXMgaXMgdGhlIGJlc3Qgd2F5IHRvIGdldCBhIHNvbGlkIGhhbmRsZSBvbiB0aGUgY2hhbmdlJiMzOTtzIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2N0cC9zb2NrZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4MjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTgyNTpcdFx0aWYgKHNjdHBfd3NwYWNlKGFzb2MpIFx1MDAzYyAoaW50KW1zZ19sZW4pXG4xODI2Olx0XHRcdHNjdHBfcHJzY3RwX3BydW5lKGFzb2MsIHNpbmZvLCBtc2dfbGVuIC0gc2N0cF93c3BhY2UoYXNvYykpO1xuMTgyNzpcdFxuMTgyODpcdFx0aWYgKHNjdHBfd3NwYWNlKGFzb2MpIFx1MDAzYz0gMCB8fCAhc2tfd21lbV9zY2hlZHVsZShzaywgbXNnX2xlbikpIHtcbjE4Mjk6XHRcdFx0dGltZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCBtc2ctXHUwMDNlbXNnX2ZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xuMTgzMDpcdFx0XHRlcnIgPSBzY3RwX3dhaXRfZm9yX3NuZGJ1Zihhc29jLCB0cmFuc3BvcnQsIFx1MDAyNnRpbWVvLCBtc2dfbGVuKTtcbjE4MzE6XHRcdFx0aWYgKGVycilcbjE4MzI6XHRcdFx0XHRnb3RvIGVycjtcbjE4MzM6XHRcdFx0aWYgKHVubGlrZWx5KHNpbmZvLVx1MDAzZXNpbmZvX3N0cmVhbSBcdTAwM2U9IGFzb2MtXHUwMDNlc3RyZWFtLm91dGNudCkpIHtcbjE4MzQ6XHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMTgzNTpcdFx0XHRcdGdvdG8gZXJyO1xuMTgzNjpcdFx0XHR9XG4xODM3Olx0XHR9XG4xODM4Olx0XG4xODM5Olx0XHRpZiAoc2N0cF9zdGF0ZShhc29jLCBDTE9TRUQpKSB7XG4xODQwOlx0XHRcdGVyciA9IHNjdHBfcHJpbWl0aXZlX0FTU09DSUFURShuZXQsIGFzb2MsIE5VTEwpO1xuMTg0MTpcdFx0XHRpZiAoZXJyKVxuMTg0MjpcdFx0XHRcdGdvdG8gZXJyO1xuMTg0MzpcdFxuMTg0NDpcdFx0XHRpZiAoYXNvYy1cdTAwM2VlcC1cdTAwM2VpbnRsX2VuYWJsZSkge1xuMTg0NTpcdFx0XHRcdGJvb2wgZGVhZDtcbjE4NDY6XHRcbjE4NDc6XHRcdFx0XHR0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIDApO1xuMTg0ODpcdFx0XHRcdHNjdHBfYXNzb2NpYXRpb25faG9sZChhc29jKTtcbjE4NDk6XHRcdFx0XHRlcnIgPSBzY3RwX3dhaXRfZm9yX2Nvbm5lY3QoYXNvYywgXHUwMDI2dGltZW8pO1xuMTg1MDpcdFx0XHRcdGRlYWQgPSBhc29jLVx1MDAzZWJhc2UuZGVhZDtcbjE4NTE6XHRcdFx0XHRzY3RwX2Fzc29jaWF0aW9uX3B1dChhc29jKTtcbjE4NTI6XHRcdFx0XHRpZiAoZXJyIHx8IGRlYWQpIHtcbjE4NTM6XHRcdFx0XHRcdGVyciA9IC1FU1JDSDtcbjE4NTQ6XHRcdFx0XHRcdGdvdG8gZXJyO1xuMTg1NTpcdFx0XHRcdH1cbjE4NTY6XHRcdFx0fSBlbHNlIHtcbjE4NTc6XHRcdFx0XHR3YWl0X2Nvbm5lY3QgPSB0cnVlO1xuMTg1ODpcdFx0XHR9XG4xODU5Olx0XG4xODYwOlx0XHRcdHByX2RlYnVnKFwmIzM0OyVzOiB3ZSBhc3NvY2lhdGVkIHByaW1pdGl2ZWx5XFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4xODYxOlx0XHR9XG4xODYyOlx0XG4xODYzOlx0XHRkYXRhbXNnID0gc2N0cF9kYXRhbXNnX2Zyb21fdXNlcihhc29jLCBzaW5mbywgXHUwMDI2bXNnLVx1MDAzZW1zZ19pdGVyKTtcbjE4NjQ6XHRcdGlmIChJU19FUlIoZGF0YW1zZykpIHtcbjE4NjU6XHRcdFx0ZXJyID0gUFRSX0VSUihkYXRhbXNnKTtcbjE4NjY6XHRcdFx0Z290byBlcnI7XG4xODY3Olx0XHR9XG4xODY4Olx0XG4xODY5Olx0XHRhc29jLVx1MDAzZWZvcmNlX2RlbGF5ID0gISEobXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX01PUkUpO1xuMTg3MDpcdFxuMTg3MTpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjaHVuaywgXHUwMDI2ZGF0YW1zZy1cdTAwM2VjaHVua3MsIGZyYWdfbGlzdCkge1xuMTg3MjpcdFx0XHRzY3RwX2NodW5rX2hvbGQoY2h1bmspO1xuMTg3MzpcdFx0XHRzY3RwX3NldF9vd25lcl93KGNodW5rKTtcbjE4NzQ6XHRcdFx0Y2h1bmstXHUwMDNldHJhbnNwb3J0ID0gdHJhbnNwb3J0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwOTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjExCgkJCQkJCQlvdXRwdXQ6IDIzNwoJCQkJCQkJdGhvdWdodHM6IDEwMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogU0NUUCBBc3NvY2lhdGlvbiBMaWZldGltZSBNYW5hZ2VtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzIHdpdGhpbiBgc2N0cF9zZW5kbXNnX3RvX2Fzb2NgLiBMb29raW5nIGF0IHRoZSBjb2RlLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXI6IFdlJiMzOTt2ZSBpbnRyb2R1Y2VkIHJlZmVyZW5jZSBjb3VudGluZyBhcm91bmQgdGhlIGNhbGwgdG8gYHNjdHBfd2FpdF9mb3JfY29ubmVjdGAuICBQcmV2aW91c2x5LCB3ZSBoYWQgdGhpczoKCmBgYGMKCQlpZiAoYXNvYy0mZ3Q7ZXAtJmd0O2ludGxfZW5hYmxlKSB7CgkJCXRpbWVvID0gc29ja19zbmR0aW1lbyhzaywgMCk7CgkJCWVyciA9IHNjdHBfd2FpdF9mb3JfY29ubmVjdChhc29jLCAmYW1wO3RpbWVvKTsKCQkJaWYgKGVycikgewoJCQkJZXJyID0gLUVTUkNIOwoJCQkJZ290byBlcnI7CgkJCX0KYGBgCgpOb3csIHdlIGhhdmU6CgpgYGBjCgkJaWYgKGFzb2MtJmd0O2VwLSZndDtpbnRsX2VuYWJsZSkgewoJCQlib29sIGRlYWQ7CgoJCQl0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIDApOwoJCQlzY3RwX2Fzc29jaWF0aW9uX2hvbGQoYXNvYyk7CgkJCWVyciA9IHNjdHBfd2FpdF9mb3JfY29ubmVjdChhc29jLCAmYW1wO3RpbWVvKTsKCQkJZGVhZCA9IGFzb2MtJmd0O2Jhc2UuZGVhZDsKCQkJc2N0cF9hc3NvY2lhdGlvbl9wdXQoYXNvYyk7CgkJCWlmIChlcnIgfHwgZGVhZCkgewoJCQkJZXJyID0gLUVTUkNIOwoJCQkJZ290byBlcnI7CgkJCX0KYGBgCgpUaGUgbW90aXZhdGlvbiBpcyBvYnZpb3VzOiBgc2N0cF93YWl0X2Zvcl9jb25uZWN0YCByZWxlYXNlcyB0aGUgc29ja2V0IGxvY2suIER1cmluZyB0aGUgd2FpdCwgdGhlIGBhc29jYCBhc3NvY2lhdGlvbiBjb3VsZCBiZSBmcmVlZCwgY2xvc2VkLCBvciBvdGhlcndpc2UgaW52YWxpZGF0ZWQuICBUaGUgYHNjdHBfYXNzb2NpYXRpb25faG9sZGAgaXMga2V5IHRvIHByZXZlbnQgYSB1c2UtYWZ0ZXItZnJlZSwgd2hpbGUgdGhlIGBhc29jLSZndDtiYXNlLmRlYWRgIGNoZWNrIHByb3ZpZGVzIGFuIGFkZGl0aW9uYWwgc2FmZWd1YXJkLgoKU28sIHRoaXMgaXMgYSBjbGVhciBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2U6ICByZWZjb3VudGluZyB0byBwcmV2ZW50IFVBRiBvciBhY2Nlc3NpbmcgYSBkZWFkIGFzc29jaWF0aW9uLiBUaGlzIGZhbGxzIHNxdWFyZWx5IGludG8gdGhlIHJlYWxtIG9mIEtBU0FOLgoKTm93LCBsZXQmIzM5O3MgbWV0aG9kaWNhbGx5IGNoZWNrIGZvciBLTVNBTi1zcGVjaWZpYyBjb25jZXJucy4gSXMgdGhlcmUgYSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gVGhlIGBkZWFkYCB2YXJpYWJsZSBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIGltbWVkaWF0ZWx5IGFmdGVyIGBzY3RwX3dhaXRfZm9yX2Nvbm5lY3RgIHJldHVybnMuIEl0JiMzOTtzIHRoZW4gcmVhZCBpbiB0aGUgYGlmYCBzdGF0ZW1lbnQuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgbGVha2VkLiBObyBrZXJuZWwgZGF0YSBpcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UuICBObyBwYWRkaW5nIGlzc3VlcyBvciB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMgYXJlIHByZXNlbnQuCgpMZXQgbWUgZ28gdGhyb3VnaCB0aGUgc3RhbmRhcmQgS01TQU4gY2hlY2tsaXN0LiBEb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIG9yIG1vZGlmeToKMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSB3aGVyZSBmaWVsZHMgb3IgcGFkZGluZyBtaWdodCBiZSB1bmluaXRpYWxpemVkPyBOb3BlLgoyLiAgQ29uZGl0aW9uYWwgbG9naWMgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHM/ICBOby4gYGRlYWRgIGlzIGluaXRpYWxpemVkIHJpZ2h0IGJlZm9yZSBiZWluZyB1c2VkLgozLiAgQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyPyBOby4KNC4gIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIHRoYXQgYWxsb3dzIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzPyBOb3QgaGVyZS4KClRoZSBib3R0b20gbGluZTogdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBjbGFzc2ljIFVBRi9saWZlY3ljbGUgaXNzdWUsIHBlcmZlY3QgZm9yIEtBU0FOLgoKVGhlIEtNU0FOIHJlYXNvbmluZyBpcyBjbGVhcjoKKiAgIFRoZSBwYXRjaCBhZGRyZXNzZXMgYXNzb2NpYXRpb24gbGlmZXRpbWUgbWFuYWdlbWVudCBhbmQgcHJldmVudHMgdXNlLWFmdGVyLWZyZWUgYnkgdXNpbmcgcmVmZXJlbmNlIGNvdW50aW5nLgoqICAgVGhlIGJ1ZyBiZWluZyBhZGRyZXNzZWQsIFVBRiByZWxhdGVkIHRvIGxpZmV0aW1lIG1hbmFnZW1lbnQsIGlzIHdpdGhpbiBLQVNBTiYjMzk7cyBkb21haW4uCiogICBObyBuZXcgdW5pbml0aWFsaXplZCBoZWFwLCBzdGFjaywgb3IgcGFnZSBhbGxvY2F0aW9ucyBhcmUgaW52b2x2ZWQuIFRoZSBgZGVhZGAgdmFyaWFibGUgaXMgYWx3YXlzIGluaXRpYWxpemVkLgoqICAgTm8ga2VybmVsIGRhdGEgaXMgY29waWVkIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBmYWxzZS4gRG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGFzc29jaWF0aW9uIGxpZmV0aW1lIG1hbmFnZW1lbnQgaW4gYHNjdHBfc2VuZG1zZ190b19hc29jYCBieSBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIGBhc29jYCAoYHNjdHBfYXNzb2NpYXRpb25faG9sZGAvYHNjdHBfYXNzb2NpYXRpb25fcHV0YCkgYWNyb3NzIHRoZSBibG9ja2luZyBgc2N0cF93YWl0X2Zvcl9jb25uZWN0YCBjYWxsIGFuZCBjaGVja2luZyBgYXNvYy1cdTAwM2ViYXNlLmRlYWRgIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgb3Igb3BlcmF0aW9ucyBvbiBhIGRlYWQgYXNzb2NpYXRpb24uXG5cbi0gS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eTpcbiAgLSBUaGlzIGNoYW5nZSBhZGRyZXNzZXMgb2JqZWN0IGxpZmV0aW1lIGFuZCB1c2UtYWZ0ZXItZnJlZSByaXNrcywgd2hpY2ggYXJlIGRpcmVjdGx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLlxuICAtIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGFsbG9jYXRlZCwgb3IgZXhwb3NlZC4gVGhlIG5ld2x5IGludHJvZHVjZWQgbG9jYWwgdmFyaWFibGUgYGRlYWRgIGlzIGV4cGxpY2l0bHkgYXNzaWduZWQgYGRlYWQgPSBhc29jLVx1MDAzZWJhc2UuZGVhZDtgIGltbWVkaWF0ZWx5IGJlZm9yZSBldmFsdWF0aW9uLlxuICAtIFRoZXJlIGFyZSBubyBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29waWVzLCBwYWRkaW5nIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHJlYWRzIGludm9sdmVkLlxuXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZDsgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGFzc29jaWF0aW9uIGxpZmV0aW1lIG1hbmFnZW1lbnQgaW4gYHNjdHBfc2VuZG1zZ190b19hc29jYCBieSBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIGBhc29jYCAoYHNjdHBfYXNzb2NpYXRpb25faG9sZGAvYHNjdHBfYXNzb2NpYXRpb25fcHV0YCkgYWNyb3NzIHRoZSBibG9ja2luZyBgc2N0cF93YWl0X2Zvcl9jb25uZWN0YCBjYWxsIGFuZCBjaGVja2luZyBgYXNvYy1cdTAwM2ViYXNlLmRlYWRgIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgb3Igb3BlcmF0aW9ucyBvbiBhIGRlYWQgYXNzb2NpYXRpb24uXG5cbi0gS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eTpcbiAgLSBUaGlzIGNoYW5nZSBhZGRyZXNzZXMgb2JqZWN0IGxpZmV0aW1lIGFuZCB1c2UtYWZ0ZXItZnJlZSByaXNrcywgd2hpY2ggYXJlIGRpcmVjdGx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLlxuICAtIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGFsbG9jYXRlZCwgb3IgZXhwb3NlZC4gVGhlIG5ld2x5IGludHJvZHVjZWQgbG9jYWwgdmFyaWFibGUgYGRlYWRgIGlzIGV4cGxpY2l0bHkgYXNzaWduZWQgYGRlYWQgPSBhc29jLVx1MDAzZWJhc2UuZGVhZDtgIGltbWVkaWF0ZWx5IGJlZm9yZSBldmFsdWF0aW9uLlxuICAtIFRoZXJlIGFyZSBubyBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29waWVzLCBwYWRkaW5nIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHJlYWRzIGludm9sdmVkLlxuXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZDsgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwOTo0Njo0MS45MjY4NDM3OTFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTYwMTQyNzE1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9TQ1RQXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2N0cF9zZW5kbXNnX3RvX2Fzb2NcIixcbiAgICBcInNjdHBfc2VuZG1zZ1wiLFxuICAgIFwic2N0cF93YWl0X2Zvcl9jb25uZWN0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYXNzb2NpYXRpb24gbGlmZXRpbWUgbWFuYWdlbWVudCBpbiBgc2N0cF9zZW5kbXNnX3RvX2Fzb2NgIGJ5IGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gYGFzb2NgIChgc2N0cF9hc3NvY2lhdGlvbl9ob2xkYC9gc2N0cF9hc3NvY2lhdGlvbl9wdXRgKSBhY3Jvc3MgdGhlIGJsb2NraW5nIGBzY3RwX3dhaXRfZm9yX2Nvbm5lY3RgIGNhbGwgYW5kIGNoZWNraW5nIGBhc29jLVxcdTAwM2ViYXNlLmRlYWRgIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgb3Igb3BlcmF0aW9ucyBvbiBhIGRlYWQgYXNzb2NpYXRpb24uXFxuXFxuLSBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5OlxcbiAgLSBUaGlzIGNoYW5nZSBhZGRyZXNzZXMgb2JqZWN0IGxpZmV0aW1lIGFuZCB1c2UtYWZ0ZXItZnJlZSByaXNrcywgd2hpY2ggYXJlIGRpcmVjdGx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLlxcbiAgLSBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBhbGxvY2F0ZWQsIG9yIGV4cG9zZWQuIFRoZSBuZXdseSBpbnRyb2R1Y2VkIGxvY2FsIHZhcmlhYmxlIGBkZWFkYCBpcyBleHBsaWNpdGx5IGFzc2lnbmVkIGBkZWFkID0gYXNvYy1cXHUwMDNlYmFzZS5kZWFkO2AgaW1tZWRpYXRlbHkgYmVmb3JlIGV2YWx1YXRpb24uXFxuICAtIFRoZXJlIGFyZSBubyBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29waWVzLCBwYWRkaW5nIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHJlYWRzIGludm9sdmVkLlxcblxcblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkOyBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc2N0cF9zZW5kbXNnX3RvX2Fzb2MgaW4gbmV0L3NjdHAvc29ja2V0LmMgdG8gcHJvcGVybHkgaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgU0NUUCBhc3NvY2lhdGlvbiBhY3Jvc3Mgc2N0cF93YWl0X2Zvcl9jb25uZWN0IGFuZCBjaGVjayBpZiB0aGUgYXNzb2NpYXRpb24gaXMgZGVhZCB3aGVuIHN0cmVhbSBpbnRlcmxlYXZpbmcgaXMgZW5hYmxlZC4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgc29ja2V0IGNvZGUgdGhhdCBjYW4gYmUgZXhlcmNpc2VkIHZpYSBzdGFuZGFyZCBTQ1RQIHNvY2tldCBzZW5kbXNnIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA5OjQ2OjQxLjkyNjg0OTA5MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY0MDExMjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTI4ZjRlNjUyYmZiZTEzY2NiMmYxYzU0MWZlYTk0ZTdiNzg4YWQxMVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCAxMSAwOTo0Njo0MSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zb2NrZXQuYyBiL25ldC9zY3RwL3NvY2tldC5jXFxuaW5kZXggYzdiOWUzMjVlYzFjZC4uMDlmZDZiOTUxMzc0MSAxMDA2NDRcXG4tLS0gYS9uZXQvc2N0cC9zb2NrZXQuY1xcbisrKyBiL25ldC9zY3RwL3NvY2tldC5jXFxuQEAgLTE4NDIsOSArMTg0MiwxNCBAQCBzdGF0aWMgaW50IHNjdHBfc2VuZG1zZ190b19hc29jKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxcbiBcXHRcXHRcXHRnb3RvIGVycjtcXG4gXFxuIFxcdFxcdGlmIChhc29jLVxcdTAwM2VlcC1cXHUwMDNlaW50bF9lbmFibGUpIHtcXG4rXFx0XFx0XFx0Ym9vbCBkZWFkO1xcbitcXG4gXFx0XFx0XFx0dGltZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCAwKTtcXG4rXFx0XFx0XFx0c2N0cF9hc3NvY2lhdGlvbl9ob2xkKGFzb2MpO1xcbiBcXHRcXHRcXHRlcnIgPSBzY3RwX3dhaXRfZm9yX2Nvbm5lY3QoYXNvYywgXFx1MDAyNnRpbWVvKTtcXG4tXFx0XFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHRkZWFkID0gYXNvYy1cXHUwMDNlYmFzZS5kZWFkO1xcbitcXHRcXHRcXHRzY3RwX2Fzc29jaWF0aW9uX3B1dChhc29jKTtcXG4rXFx0XFx0XFx0aWYgKGVyciB8fCBkZWFkKSB7XFxuIFxcdFxcdFxcdFxcdGVyciA9IC1FU1JDSDtcXG4gXFx0XFx0XFx0XFx0Z290byBlcnI7XFxuIFxcdFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDk6NDY6NDIuMzkxNTI5MDNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMzMzgzMzYyMjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1NDVFBcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzY3RwX3NlbmRtc2dfdG9fYXNvY1wiLFxuICAgIFwic2N0cF9zZW5kbXNnXCIsXG4gICAgXCJzY3RwX3dhaXRfZm9yX2Nvbm5lY3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzY3RwX3NlbmRtc2dfdG9fYXNvYyBpbiBuZXQvc2N0cC9zb2NrZXQuYyB0byBwcm9wZXJseSBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBTQ1RQIGFzc29jaWF0aW9uIGFjcm9zcyBzY3RwX3dhaXRfZm9yX2Nvbm5lY3QgYW5kIGNoZWNrIGlmIHRoZSBhc3NvY2lhdGlvbiBpcyBkZWFkIHdoZW4gc3RyZWFtIGludGVybGVhdmluZyBpcyBlbmFibGVkLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBzb2NrZXQgY29kZSB0aGF0IGNhbiBiZSBleGVyY2lzZWQgdmlhIHN0YW5kYXJkIFNDVFAgc29ja2V0IHNlbmRtc2cgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5MjhmNGU2NTJiZmJlMTNjY2IyZjFjNTQxZmVhOTRlN2I3ODhhZDExXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDk6NDY6NDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zb2NrZXQuYyBiL25ldC9zY3RwL3NvY2tldC5jXG5pbmRleCBjN2I5ZTMyNWVjMWNkLi4wOWZkNmI5NTEzNzQxIDEwMDY0NFxuLS0tIGEvbmV0L3NjdHAvc29ja2V0LmNcbisrKyBiL25ldC9zY3RwL3NvY2tldC5jXG5AQCAtMTg0Miw5ICsxODQyLDE0IEBAIHN0YXRpYyBpbnQgc2N0cF9zZW5kbXNnX3RvX2Fzb2Moc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXG4gXHRcdFx0Z290byBlcnI7XG4gXG4gXHRcdGlmIChhc29jLVx1MDAzZWVwLVx1MDAzZWludGxfZW5hYmxlKSB7XG4rXHRcdFx0Ym9vbCBkZWFkO1xuK1xuIFx0XHRcdHRpbWVvID0gc29ja19zbmR0aW1lbyhzaywgMCk7XG4rXHRcdFx0c2N0cF9hc3NvY2lhdGlvbl9ob2xkKGFzb2MpO1xuIFx0XHRcdGVyciA9IHNjdHBfd2FpdF9mb3JfY29ubmVjdChhc29jLCBcdTAwMjZ0aW1lbyk7XG4tXHRcdFx0aWYgKGVycikge1xuK1x0XHRcdGRlYWQgPSBhc29jLVx1MDAzZWJhc2UuZGVhZDtcbitcdFx0XHRzY3RwX2Fzc29jaWF0aW9uX3B1dChhc29jKTtcbitcdFx0XHRpZiAoZXJyIHx8IGRlYWQpIHtcbiBcdFx0XHRcdGVyciA9IC1FU1JDSDtcbiBcdFx0XHRcdGdvdG8gZXJyO1xuIFx0XHRcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA5OjQ2OjQyLjM5MTUzMDM2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzY1MDk0NTIwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNDVFAgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBtZXRpY3Vsb3VzbHkgYW5hbHl6ZSB0aGlzIHBhdGNoLCBrZWVwaW5nIHRoZSByZWxldmFudCBndWlkZWxpbmVzIGZpcm1seSBpbiBtaW5kLiBTZWVtcyB3ZSdyZSBkZWFsaW5nIHdpdGggYSBjaGFuZ2Ugd2l0aGluIGBuZXQvc2N0cC9zb2NrZXQuY2AsIHNwZWNpZmljYWxseSB0aGUgYHNjdHBfc2VuZG1zZ190b19hc29jYCBmdW5jdGlvbi4gVGhlIGRpZmYgc25pcHBldCBwb2ludHMgb3V0IHRoZSBrZXkgbW9kaWZpY2F0aW9uLlxuXG5Jbml0aWFsbHksIEkgc2VlIHRoZSBjb25kaXRpb25hbCBjaGVjayByZWxhdGVkIHRvIGBhc29jLVx1MDAzZWVwLVx1MDAzZWludGxfZW5hYmxlYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIGxpa2VseSByZWxhdGVkIHRvIGludGVycnVwdGlibGUgc2VuZCBvcGVyYXRpb25zLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBib29sIGRlYWRgIGFuZCB0aGUgcmVsYXRlZCBgc2N0cF9hc3NvY2lhdGlvbl9ob2xkYCBhbmQgYHNjdHBfYXNzb2NpYXRpb25fcHV0YCBjYWxscyB3aXRoaW4gdGhpcyBjb25kaXRpb25hbCBibG9jayBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGF0dGVudGlvbi5cblxuTXkgZXhwZXJ0IGludHVpdGlvbiBzdWdnZXN0cyB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIGhhbmRsaW5nIGNvbm5lY3Rpb24gZmFpbHVyZXMgb3IgdGltZW91dHMgbW9yZSBncmFjZWZ1bGx5LCBwb3RlbnRpYWxseSBhZGRyZXNzaW5nIGEgcmFjZSBjb25kaXRpb24gb3IgZGVhZGxvY2sgc2NlbmFyaW8uIEl0IGxvb2tzIGxpa2UgdGhlIGNoZWNrIGlzIGF0dGVtcHRpbmcgdG8gc2VlIGlmIHRoZSBhc3NvY2lhdGlvbiBpcyAnZGVhZCcgYWZ0ZXIgd2FpdGluZyBmb3IgYSBjb25uZWN0aW9uLiBUaGUgdXNlIG9mIGBzY3RwX2Fzc29jaWF0aW9uX2hvbGRgIGFuZCBgc2N0cF9hc3NvY2lhdGlvbl9wdXRgIGluZGljYXRlcyBzb21lIGtpbmQgb2YgcmVmZXJlbmNlIGNvdW50aW5nIG9yIHJlc291cmNlIG1hbmFnZW1lbnQgaGFwcGVuaW5nIGFyb3VuZCB0aGUgcG90ZW50aWFsbHkgYmxvY2tpbmcgYHNjdHBfd2FpdF9mb3JfY29ubmVjdGAuIE1ha2VzIHNlbnNlLiBXZSBhcmUgaG9sZGluZyB0aGUgYXNzb2NpYXRpb24gdG8gcHJvdGVjdCBpdCB3aGlsZSB3YWl0aW5nLlxuXG5UbyBnYWluIGEgbW9yZSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nLCBJJ2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSB3aXRoaW4gYHNjdHBfc2VuZG1zZ190b19hc29jYC4gQSBxdWljayBgcmVhZC1maWxlYCB0byBnZXQgdGhlIGJyb2FkZXIgY29udGV4dCBzaG91bGQgZ2l2ZSBtZSB0aGUgZnVsbCBwaWN0dXJlIGFuZCBoZWxwIG1lIHBpbnBvaW50IHRoZSBleGFjdCBpc3N1ZSB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcuIEknbSBrZWVuIHRvIHNlZSBob3cgYGRlYWRgIGlzIGFjdHVhbGx5IGRldGVybWluZWQgYW5kIGhvdyB0aGlzIGNoYW5nZXMgdGhlIGVycm9yIGhhbmRsaW5nLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBsb2NraW5nIGlzc3VlcyBvciByZXNvdXJjZSBsZWFrcy4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MzUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwOTo0Njo1MC4wNDI0NzgxNjlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzc2MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjdHAvc29ja2V0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTgyNSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTgyNTpcXHRcXHRpZiAoc2N0cF93c3BhY2UoYXNvYykgXFx1MDAzYyAoaW50KW1zZ19sZW4pXFxuMTgyNjpcXHRcXHRcXHRzY3RwX3Byc2N0cF9wcnVuZShhc29jLCBzaW5mbywgbXNnX2xlbiAtIHNjdHBfd3NwYWNlKGFzb2MpKTtcXG4xODI3OlxcdFxcbjE4Mjg6XFx0XFx0aWYgKHNjdHBfd3NwYWNlKGFzb2MpIFxcdTAwM2M9IDAgfHwgIXNrX3dtZW1fc2NoZWR1bGUoc2ssIG1zZ19sZW4pKSB7XFxuMTgyOTpcXHRcXHRcXHR0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIG1zZy1cXHUwMDNlbXNnX2ZsYWdzIFxcdTAwMjYgTVNHX0RPTlRXQUlUKTtcXG4xODMwOlxcdFxcdFxcdGVyciA9IHNjdHBfd2FpdF9mb3Jfc25kYnVmKGFzb2MsIHRyYW5zcG9ydCwgXFx1MDAyNnRpbWVvLCBtc2dfbGVuKTtcXG4xODMxOlxcdFxcdFxcdGlmIChlcnIpXFxuMTgzMjpcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4xODMzOlxcdFxcdFxcdGlmICh1bmxpa2VseShzaW5mby1cXHUwMDNlc2luZm9fc3RyZWFtIFxcdTAwM2U9IGFzb2MtXFx1MDAzZXN0cmVhbS5vdXRjbnQpKSB7XFxuMTgzNDpcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjE4MzU6XFx0XFx0XFx0XFx0Z290byBlcnI7XFxuMTgzNjpcXHRcXHRcXHR9XFxuMTgzNzpcXHRcXHR9XFxuMTgzODpcXHRcXG4xODM5OlxcdFxcdGlmIChzY3RwX3N0YXRlKGFzb2MsIENMT1NFRCkpIHtcXG4xODQwOlxcdFxcdFxcdGVyciA9IHNjdHBfcHJpbWl0aXZlX0FTU09DSUFURShuZXQsIGFzb2MsIE5VTEwpO1xcbjE4NDE6XFx0XFx0XFx0aWYgKGVycilcXG4xODQyOlxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbjE4NDM6XFx0XFxuMTg0NDpcXHRcXHRcXHRpZiAoYXNvYy1cXHUwMDNlZXAtXFx1MDAzZWludGxfZW5hYmxlKSB7XFxuMTg0NTpcXHRcXHRcXHRcXHRib29sIGRlYWQ7XFxuMTg0NjpcXHRcXG4xODQ3OlxcdFxcdFxcdFxcdHRpbWVvID0gc29ja19zbmR0aW1lbyhzaywgMCk7XFxuMTg0ODpcXHRcXHRcXHRcXHRzY3RwX2Fzc29jaWF0aW9uX2hvbGQoYXNvYyk7XFxuMTg0OTpcXHRcXHRcXHRcXHRlcnIgPSBzY3RwX3dhaXRfZm9yX2Nvbm5lY3QoYXNvYywgXFx1MDAyNnRpbWVvKTtcXG4xODUwOlxcdFxcdFxcdFxcdGRlYWQgPSBhc29jLVxcdTAwM2ViYXNlLmRlYWQ7XFxuMTg1MTpcXHRcXHRcXHRcXHRzY3RwX2Fzc29jaWF0aW9uX3B1dChhc29jKTtcXG4xODUyOlxcdFxcdFxcdFxcdGlmIChlcnIgfHwgZGVhZCkge1xcbjE4NTM6XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVTUkNIO1xcbjE4NTQ6XFx0XFx0XFx0XFx0XFx0Z290byBlcnI7XFxuMTg1NTpcXHRcXHRcXHRcXHR9XFxuMTg1NjpcXHRcXHRcXHR9IGVsc2Uge1xcbjE4NTc6XFx0XFx0XFx0XFx0d2FpdF9jb25uZWN0ID0gdHJ1ZTtcXG4xODU4OlxcdFxcdFxcdH1cXG4xODU5OlxcdFxcbjE4NjA6XFx0XFx0XFx0cHJfZGVidWcoXFxcIiVzOiB3ZSBhc3NvY2lhdGVkIHByaW1pdGl2ZWx5XFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuMTg2MTpcXHRcXHR9XFxuMTg2MjpcXHRcXG4xODYzOlxcdFxcdGRhdGFtc2cgPSBzY3RwX2RhdGFtc2dfZnJvbV91c2VyKGFzb2MsIHNpbmZvLCBcXHUwMDI2bXNnLVxcdTAwM2Vtc2dfaXRlcik7XFxuMTg2NDpcXHRcXHRpZiAoSVNfRVJSKGRhdGFtc2cpKSB7XFxuMTg2NTpcXHRcXHRcXHRlcnIgPSBQVFJfRVJSKGRhdGFtc2cpO1xcbjE4NjY6XFx0XFx0XFx0Z290byBlcnI7XFxuMTg2NzpcXHRcXHR9XFxuMTg2ODpcXHRcXG4xODY5OlxcdFxcdGFzb2MtXFx1MDAzZWZvcmNlX2RlbGF5ID0gISEobXNnLVxcdTAwM2Vtc2dfZmxhZ3MgXFx1MDAyNiBNU0dfTU9SRSk7XFxuMTg3MDpcXHRcXG4xODcxOlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2h1bmssIFxcdTAwMjZkYXRhbXNnLVxcdTAwM2VjaHVua3MsIGZyYWdfbGlzdCkge1xcbjE4NzI6XFx0XFx0XFx0c2N0cF9jaHVua19ob2xkKGNodW5rKTtcXG4xODczOlxcdFxcdFxcdHNjdHBfc2V0X293bmVyX3coY2h1bmspO1xcbjE4NzQ6XFx0XFx0XFx0Y2h1bmstXFx1MDAzZXRyYW5zcG9ydCA9IHRyYW5zcG9ydDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDk6NDY6NTAuMDQyOTYwMjJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTcwMDU0ODMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNoZWNraW5nIEtjb25maWcgZm9yIFNDVFAgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEZpcnN0IG9yZGVyIG9mIGJ1c2luZXNzOiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIHN0YXRlIG9mIFNDVFAgd2l0aGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzeXN0ZW0sIHNwZWNpZmljYWxseSBLY29uZmlnLiBUaGlzIGlzIGxpa2VseSB0aGUgYmVzdCBpbml0aWFsIHN0ZXAgdG8gZGV0ZXJtaW5lIGlmIFNDVFAgaXMgZXZlbiBlbmFibGVkLCBkaXNhYmxlZCwgb3IgYnVpbHQgYXMgYSBtb2R1bGUuIEkga25vdyBteSB3YXkgYXJvdW5kIHRoZSBLY29uZmlnIHN5c3RlbSwgYW5kIEkgY2FuIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSByZWxldmFudCBkZXBlbmRlbmNpZXMsIHBvdGVudGlhbCBkZWZhdWx0IHZhbHVlcywgYW5kIGFueSByZWxldmFudCBvcHRpb25zIHJlbGF0ZWQgdG8gU0NUUC4gTXkgZ29hbCBoZXJlIGlzIHRvIGdldCBhIGhpZ2gtbGV2ZWwgb3ZlcnZpZXcgb2YgdGhlIGN1cnJlbnQgU0NUUCBjb25maWd1cmF0aW9uIHdpdGhvdXQgZ2V0dGluZyBib2dnZWQgZG93biBpbiB0aGUgZGV0YWlscyBqdXN0IHlldC4gSXMgaXQgZXZlbiBpbiB0aGUgYnVpbGQ/IEFyZSB0aGVyZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gY29uc2lkZXIgYmFzZWQgb24gdGhlIHRhcmdldCBwbGF0Zm9ybSBvciB1c2UgY2FzZT8gSSdtIGhvcGluZyB0aGlzIHdpbGwgcHJvdmlkZSBhIGNsZWFyIHBhdGggZm9yd2FyZCBmb3Igd2hhdGV2ZXIgdGhlIG5leHQgc3RhZ2UgaXMuIFRoZSBpbml0aWFsIGluc3BlY3Rpb24gb2YgS2NvbmZpZyBzaG91bGQgZ2l2ZSBtZSB0aGF0IGtleSBpbmZvcm1hdGlvbiBxdWlja2x5LCBpZGVhbGx5IHdpdGhpbiBhIGZldyBtaW51dGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDQ4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwOTo0Njo1My42MTMwMTczMjFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2NzMzNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1NDVFBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjdHBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvS2NvbmZpZy01LVxcbm5ldC9zY3RwL0tjb25maWc6NjptZW51Y29uZmlnIElQX1NDVFBcXG5uZXQvc2N0cC9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIlRoZSBTQ1RQIFByb3RvY29sXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwOTo0Njo1My42NTk2OTYzMjhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTU2MDE1MzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBgbmV0L3NjdHAvS2NvbmZpZ2AgZmlsZTpcblxuKipBbmFseXppbmcgdGhlIFNDVFAgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byBgbmV0L3NjdHAvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBTQ1RQIChTdHJlYW0gQ29udHJvbCBUcmFuc21pc3Npb24gUHJvdG9jb2wpIHdpdGhpbiB0aGUgTGludXgga2VybmVsIGFyZSBkZWZpbmVkLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgdXN1YWwgS2NvbmZpZyBjb252ZW50aW9ucyBoZXJlIOKAkyBhIGhpZXJhcmNoaWNhbCBzdHJ1Y3R1cmUsIGRlcGVuZGVuY2llcywgaGVscCB0ZXh0LCBhbmQgZGVmYXVsdCBzZXR0aW5ncy4gVGhlIGdvYWwsIGFzIGFsd2F5cywgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugb3B0aW9ucyBjb250cm9sIFNDVFAncyBmZWF0dXJlcywgYW5kIGhvdyB0aGV5IGltcGFjdCB0aGUgb3ZlcmFsbCBrZXJuZWwgYnVpbGQuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6XG5cbiogICAqKkNvcmUgRW5hYmxlbWVudDoqKiBUaGUgdG9wLWxldmVsIG9wdGlvbiB0byBlbmFibGUgb3IgZGlzYWJsZSBTQ1RQIGVudGlyZWx5LlxuKiAgICoqRmVhdHVyZSBGbGFnczoqKiBJbmRpdmlkdWFsIG9wdGlvbnMgY29udHJvbGxpbmcgc3BlY2lmaWMgU0NUUCBmZWF0dXJlcyBsaWtlIG11bHRpLWhvbWluZywgZHluYW1pYyBhZGRyZXNzIGNvbmZpZ3VyYXRpb24sIHN0cmVhbSBzZXF1ZW5jaW5nLCBhbmQgYW55IGV4dGVuc2lvbnMgbGlrZSBFeHBsaWNpdCBDb25nZXN0aW9uIE5vdGlmaWNhdGlvbiAoRUNOKSBzdXBwb3J0LCBvciBVc2VyIERhdGFncmFtIFByb3RvY29sIChVRFApIGVuY2Fwc3VsYXRpb24uXG4qICAgKipEZXBlbmRlbmNpZXM6KiogV2hhdCBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcyBvciBmZWF0dXJlcyBkb2VzIFNDVFAgZGVwZW5kIG9uPyBBcmUgdGhlcmUgYW55IGhhcmQgZGVwZW5kZW5jaWVzIG9uLCBzYXksIG5ldHdvcmtpbmcgc3RhY2sgY29tcG9uZW50cyBvciBzZWN1cml0eSBmZWF0dXJlcz8gQW5kIHdoYXQgYWJvdXQgYnVpbGQgZGVwZW5kZW5jaWVzLCBtYWtpbmcgc3VyZSBhbGwgdGhlIG5lZWRlZCBtb2R1bGVzIGFyZSBidWlsdC5cbiogICAqKkRlZmF1bHQgVmFsdWVzOioqIFVuZGVyc3RhbmRpbmcgdGhlIGRlZmF1bHQgc2V0dGluZ3MgaXMgY3J1Y2lhbC4gQXJlIHRoZXkgc2Vuc2libGUgZm9yIGdlbmVyYWwgdXNlLCBvciBhcmUgdGhlcmUgc3BlY2lmaWMgc2NlbmFyaW9zIHdoZXJlIEkgbWlnaHQgbmVlZCB0byBhZGp1c3QgdGhlbT8gT2Z0ZW4gdGhlIGRlZmF1bHQgZm9yIG1vZHVsZXMgaXMgYG1gLCBzbyB0aGV5J3JlIGJ1aWx0IGFzIGxvYWRhYmxlIG1vZHVsZXMuXG4qICAgKipIZWxwIFRleHQ6KiogVGhpcyBzaG91bGQgcHJvdmlkZSBhIGNsZWFyIGRlc2NyaXB0aW9uIG9mIGVhY2ggb3B0aW9uLiBUaGUgaGVscCB0ZXh0J3MgYWNjdXJhY3kgYW5kIGNvbXBsZXRlbmVzcyBhcmUga2V5IGluZGljYXRvcnMgb2YgdGhlIHF1YWxpdHkgb2YgdGhlIEtjb25maWcgZmlsZSBpdHNlbGYuIEknbGwgYmUgY29tcGFyaW5nIGl0IHRvIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24uXG4qICAgKipDb25kaXRpb25hbCBDb21waWxhdGlvbjoqKiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBvcHRpb25zIHRoYXQgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgYmFzZWQgb24gdGhlIGFyY2hpdGVjdHVyZSwgQ1BVLCBvciBvdGhlciBrZXJuZWwgY29uZmlndXJhdGlvbnMuIFRoYXQgbWlnaHQgaW5mbHVlbmNlIGl0cyBpbXBhY3Qgb24gcG93ZXIuXG4qICAgKipTZWN1cml0eSBDb25zaWRlcmF0aW9uczoqKiBIYXMgdGhlIEtjb25maWcgZmlsZSBhZGRyZXNzZWQgc2VjdXJpdHktcmVsYXRlZCBhc3BlY3RzPyBBcmUgdGhlcmUgb3B0aW9ucyByZWxhdGVkIHRvIElQc2VjLCBUTFMsIG9yIGFueSBoYXJkZW5pbmcgZmVhdHVyZXM/IEFyZSB0aGVyZSBhbnkgb3B0aW9ucyB0byBzdXBwb3J0IGhhcmRlbmluZywgb3IgZGlzYWJsaW5nIGZ1bmN0aW9ucyB0byByZWR1Y2UgdGhlIGF0dGFjayBzdXJmYWNlLlxuXG5VbHRpbWF0ZWx5LCBJIHdhbnQgdG8gZm9ybSBhIGNvbXBsZXRlIG1lbnRhbCBwaWN0dXJlIG9mIGhvdyBTQ1RQIGlzIGNvbmZpZ3VyZWQgYW5kIGhvdyBpdCdzIGludGVncmF0ZWQgaW50byB0aGUgbGFyZ2VyIExpbnV4IGtlcm5lbCBuZXR3b3JraW5nIGZyYW1ld29yay4gSSdsbCBiZSBub3RpbmcgYW55IGFyZWFzIHRoYXQgYXJlIHVuY2xlYXIsIG9yIGFueSBwb3RlbnRpYWwgaXNzdWVzIG9yIGltcHJvdmVtZW50cyB0aGF0IEkgY2FuIGlkZW50aWZ5IGFzIEkgZ28gdGhyb3VnaCB0aGUgb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc2NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA5OjQ2OjU3LjgxNTcxMzg3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM5NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjdHAvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBTQ1RQIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0bWVudWNvbmZpZyBJUF9TQ1RQXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiVGhlIFNDVFAgUHJvdG9jb2xcXFwiXFxuICAgODpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA5OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1NIQTFcXG4gIDEwOlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxcbiAgMTE6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfVVRJTFNcXG4gIDEyOlxcdFxcdHNlbGVjdCBORVRfQ1JDMzJDXFxuICAxMzpcXHRcXHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcXG4gIDE0OlxcdFxcdGhlbHBcXG4gIDE1OlxcdFxcdCAgU3RyZWFtIENvbnRyb2wgVHJhbnNtaXNzaW9uIFByb3RvY29sXFxuICAxNjpcXHRcXG4gIDE3OlxcdFxcdCAgRnJvbSBSRkMgMjk2MCBcXHUwMDNjaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMjk2MC50eHRcXHUwMDNlLlxcbiAgMTg6XFx0XFxuICAxOTpcXHRcXHQgIFxcXCJTQ1RQIGlzIGEgcmVsaWFibGUgdHJhbnNwb3J0IHByb3RvY29sIG9wZXJhdGluZyBvbiB0b3Agb2YgYVxcbiAgMjA6XFx0XFx0ICBjb25uZWN0aW9ubGVzcyBwYWNrZXQgbmV0d29yayBzdWNoIGFzIElQLiAgSXQgb2ZmZXJzIHRoZSBmb2xsb3dpbmdcXG4gIDIxOlxcdFxcdCAgc2VydmljZXMgdG8gaXRzIHVzZXJzOlxcbiAgMjI6XFx0XFxuICAyMzpcXHRcXHQgIC0tIGFja25vd2xlZGdlZCBlcnJvci1mcmVlIG5vbi1kdXBsaWNhdGVkIHRyYW5zZmVyIG9mIHVzZXIgZGF0YSxcXG4gIDI0OlxcdFxcdCAgLS0gZGF0YSBmcmFnbWVudGF0aW9uIHRvIGNvbmZvcm0gdG8gZGlzY292ZXJlZCBwYXRoIE1UVSBzaXplLFxcbiAgMjU6XFx0XFx0ICAtLSBzZXF1ZW5jZWQgZGVsaXZlcnkgb2YgdXNlciBtZXNzYWdlcyB3aXRoaW4gbXVsdGlwbGUgc3RyZWFtcyxcXG4gIDI2OlxcdFxcdCAgd2l0aCBhbiBvcHRpb24gZm9yIG9yZGVyLW9mLWFycml2YWwgZGVsaXZlcnkgb2YgaW5kaXZpZHVhbCB1c2VyXFxuICAyNzpcXHRcXHQgIG1lc3NhZ2VzLFxcbiAgMjg6XFx0XFx0ICAtLSBvcHRpb25hbCBidW5kbGluZyBvZiBtdWx0aXBsZSB1c2VyIG1lc3NhZ2VzIGludG8gYSBzaW5nbGUgU0NUUFxcbiAgMjk6XFx0XFx0ICBwYWNrZXQsIGFuZFxcbiAgMzA6XFx0XFx0ICAtLSBuZXR3b3JrLWxldmVsIGZhdWx0IHRvbGVyYW5jZSB0aHJvdWdoIHN1cHBvcnRpbmcgb2YgbXVsdGktXFxuICAzMTpcXHRcXHQgIGhvbWluZyBhdCBlaXRoZXIgb3IgYm90aCBlbmRzIG9mIGFuIGFzc29jaWF0aW9uLlxcXCJcXG4gIDMyOlxcdFxcbiAgMzM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgcHJvdG9jb2wgc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuICAzNDpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzY3RwLiBEZWJ1ZyBtZXNzYWdlcyBhcmUgaGFuZGxlZCBieSB0aGVcXG4gIDM1OlxcdFxcdCAga2VybmVsJ3MgZHluYW1pYyBkZWJ1Z2dpbmcgZnJhbWV3b3JrLlxcbiAgMzY6XFx0XFxuICAzNzpcXHRcXHQgIElmIGluIGRvdWJ0LCBzYXkgTi5cXG4gIDM4OlxcdFxcbiAgMzk6XFx0aWYgSVBfU0NUUFxcbiAgNDA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA5OjQ2OjU3LjgxNTc3OTMxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzc0OTk1MzE4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKlRyYWNpbmcgdGhlIFNDVFAgU2VuZCBQYXRoKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGUgU0NUUCBzZW5kIHBhdGgsIHNwZWNpZmljYWxseSBob3cgZGF0YSBhY3R1YWxseSBnZXRzIHNlbnQgb3V0IGZyb20gdGhlIHVzZXIgc3BhY2Ugc29ja2V0IGxheWVyLiBNeSBzdGFydGluZyBwb2ludCBpcyBgc2N0cF9zZW5kbXNnX3RvX2Fzb2NgLiBJIGtub3cgdGhhdCBmdW5jdGlvbiBpcyBjcnVjaWFsLCBhcyBpdOKAmXMgdGhlIHdvcmtob3JzZSBjYWxsZWQgYnkgdGhlIGxhcmdlciBgc2N0cF9zZW5kbXNnYCBmdW5jdGlvbi4gVGhlIGtleSBoZXJlIGlzIHRvIGNvbmZpcm0gaG93IHdlIGdldCBmcm9tIGEgc3RhbmRhcmQgYHNlbmRtc2dgIG9yIGBzZW5kdG9gIHN5c2NhbGwg4oCTIHRoZSB0eXBpY2FsIHVzZXIgaW50ZXJhY3Rpb24g4oCTIHRvIHRoYXQgY29yZSBgc2N0cF9zZW5kbXNnX3RvX2Fzb2NgIGZ1bmN0aW9uLiBJJ20gYXNzdW1pbmcgdGhhdCBzdGFuZGFyZCBzb2NrZXQgc3lzY2FsbHMgZXZlbnR1YWxseSBsZWFkIHRvIGBzY3RwX3NlbmRtc2dgLCBidXQgSSBuZWVkIHRvIG1hcCB0aGUgcGF0aCB0byB2ZXJpZnkuXG5cblRvIG5haWwgdGhpcyBkb3duLCBJJ2xsIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIEknbGwgbmVlZCB0byBvcGVuIGBuZXQvc2N0cC9zb2NrZXQuY2AgYW5kIHNlYXJjaCBmb3IgYWxsIGNhbGwgc2l0ZXMgb2YgYHNjdHBfc2VuZG1zZ190b19hc29jYC4gS25vd2luZyB0aGUgY2FsbGVycyB3aWxsIGhlbHAgbWUgdmlzdWFsaXplIHRoZSBlbnRpcmUgc2VuZGluZyBwaXBlbGluZSwgZnJvbSB0aGUgc3lzY2FsbCBlbnRyeSBwb2ludCByaWdodCBkb3duIHRvIHRoaXMgY29yZSBzZW5kaW5nIGZ1bmN0aW9uLiBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBTQ1RQIGhhbmRsZXMgZGF0YSB0cmFuc21pc3Npb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4NjUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA5OjQ3OjAxLjU2NTczNTAyNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYwMDg0NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2N0cF9zZW5kbXNnX3RvX2Fzb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjdHBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvc29ja2V0LmM9MTc1MT1zdGF0aWMgaW50IHNjdHBfc2VuZG1zZ19jaGVja19zZmxhZ3Moc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYy0xNzg4LVxcbm5ldC9zY3RwL3NvY2tldC5jOjE3ODk6c3RhdGljIGludCBzY3RwX3NlbmRtc2dfdG9fYXNvYyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG5uZXQvc2N0cC9zb2NrZXQuYy0xNzkwLVxcdFxcdFxcdFxcdHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IG1zZ19sZW4sXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYz0xOTQ3PXN0YXRpYyBpbnQgc2N0cF9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbXNnX2xlbilcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jLTE5ODctXFxubmV0L3NjdHAvc29ja2V0LmM6MTk4ODpcXHRcXHRcXHRlcnIgPSBzY3RwX3NlbmRtc2dfdG9fYXNvYyhhc29jLCBtc2csIG1zZ19sZW4sXFxubmV0L3NjdHAvc29ja2V0LmMtMTk4OS1cXHRcXHRcXHRcXHRcXHRcXHQgICBOVUxMLCBzaW5mbyk7XFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYy0xOTk0LVxcbm5ldC9zY3RwL3NvY2tldC5jOjE5OTU6XFx0XFx0XFx0Lyogc2N0cF9zZW5kbXNnX3RvX2Fzb2MoKSBtYXkgaGF2ZSByZWxlYXNlZCB0aGUgc29ja2V0XFxubmV0L3NjdHAvc29ja2V0LmMtMTk5Ni1cXHRcXHRcXHQgKiBsb2NrIChzY3RwX3dhaXRfZm9yX3NuZGJ1ZiksIGR1cmluZyB3aGljaCBvdGhlclxcbi0tXFxubmV0L3NjdHAvc29ja2V0LmMtMjA0My1cXHQvKiBTZW5kIG1zZyB0byB0aGUgYXNvYyAqL1xcbm5ldC9zY3RwL3NvY2tldC5jOjIwNDQ6XFx0ZXJyID0gc2N0cF9zZW5kbXNnX3RvX2Fzb2MoYXNvYywgbXNnLCBtc2dfbGVuLCB0cmFuc3BvcnQsIHNpbmZvKTtcXG5uZXQvc2N0cC9zb2NrZXQuYy0yMDQ1LVxcdGlmIChlcnIgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IGVyciAhPSAtRVNSQ0ggXFx1MDAyNlxcdTAwMjYgbmV3KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwOTo0NzowMS42MTE3NDkxNDJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI5ODY1MjQ2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBzY3RwX3dhaXRfZm9yX2Nvbm5lY3RgKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGNvcmUgb2YgdGhpcyBTQ1RQIGNvbm5lY3Rpb24gbG9naWMuIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgbmV0L3NjdHAvc29ja2V0LmNgIGFuZCBzcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIGBzY3RwX3dhaXRfZm9yX2Nvbm5lY3RgLiBUaGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsOyBpdCdzIHRoZSBnYXRla2VlcGVyLCB0aGUgcG9pbnQgd2hlcmUgdGhlIGFwcGxpY2F0aW9uIGNvZGUgaXMgYmxvY2tlZCB1bnRpbCB0aGUgU0NUUCBjb25uZWN0aW9uIGlzIGFjdHVhbGx5IGVzdGFibGlzaGVkLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBoZXJlLCBlc3BlY2lhbGx5IGFyb3VuZCB0aGUgYmxvY2tpbmcgYmVoYXZpb3IsIHRoZSBwb3RlbnRpYWwgZm9yIHNpZ25hbHMsIGFuZCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSB1bmRlcmx5aW5nIFNDVFAgc3RhdGUgdHJhbnNpdGlvbnMuIEknbSBsb29raW5nIGZvciB0aGUgcHJlY2lzZSBtZWNoYW5pc21zIHVzZWQgZm9yIHdhaXRpbmc6IGFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIHNsZWVwLCBhIHBvbGwtYmFzZWQgYXBwcm9hY2gsIG9yIHNvbWV0aGluZyBtb3JlIGludHJpY2F0ZT8gSXMgdGhlcmUgYSBzcGlubG9jayBpbnZvbHZlZD8gSeKAmW0gYWxzbyBpbnRlcmVzdGVkIGluIGhvdyBpdCBoYW5kbGVzIGVycm9ycyBhbmQgdGltZW91dHMg4oCTIGFsbCB0aG9zZSBjb3JuZXIgY2FzZXMgd2hlcmUgdGhlIGNvbm5lY3Rpb24gY2FuIGZhaWwuIFVuZGVyc3RhbmRpbmcgdGhpcyB3YWl0IGZ1bmN0aW9uIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBsYXRlbmN5IGludm9sdmVkIHdpdGggZXN0YWJsaXNoaW5nIGFuIFNDVFAgY29ubmVjdGlvbiwgYW5kIGl0IHNob3VsZCByZXZlYWwgdGhlIGJvdHRsZW5lY2tzIHdpdGhpbiB0aGUgZHJpdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzA5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDk6NDc6MDMuOTEwNDA0Mzk2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjA4NDQwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY3RwX3dhaXRfZm9yX2Nvbm5lY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjdHBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jPTg3Mj1zdGF0aWMgdm9pZCBzY3RwX2NtZF9uZXdfc3RhdGUoc3RydWN0IHNjdHBfY21kX3NlcSAqY21kcyxcXG4tLVxcbm5ldC9zY3RwL3NtX3NpZGVlZmZlY3QuYy05MTUtXFx0XFx0LyogV2FrZSB1cCBhbnkgcHJvY2Vzc2VzIHdhaXRpbmcgaW4gdGhlIGFzb2MncyB3YWl0IHF1ZXVlIGluXFxubmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jOjkxNjpcXHRcXHQgKiBzY3RwX3dhaXRfZm9yX2Nvbm5lY3QoKSBvciBzY3RwX3dhaXRfZm9yX3NuZGJ1ZigpLlxcbm5ldC9zY3RwL3NtX3NpZGVlZmZlY3QuYy05MTctXFx0XFx0ICovXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYz03Nz1zdGF0aWMgaW50IHNjdHBfd2FpdF9mb3JfcGFja2V0KHN0cnVjdCBzb2NrICpzaywgaW50ICplcnIsIGxvbmcgKnRpbWVvX3ApO1xcbm5ldC9zY3RwL3NvY2tldC5jOjc4OnN0YXRpYyBpbnQgc2N0cF93YWl0X2Zvcl9jb25uZWN0KHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICosIGxvbmcgKnRpbWVvX3ApO1xcbm5ldC9zY3RwL3NvY2tldC5jLTc5LXN0YXRpYyBpbnQgc2N0cF93YWl0X2Zvcl9hY2NlcHQoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvKTtcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jPTExNjc9c3RhdGljIGludCBfX3NjdHBfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkciAqa2FkZHJzLFxcbi0tXFxubmV0L3NjdHAvc29ja2V0LmMtMTI0Ny1cXHR0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIGZsYWdzIFxcdTAwMjYgT19OT05CTE9DSyk7XFxubmV0L3NjdHAvc29ja2V0LmM6MTI0ODpcXHRyZXR1cm4gc2N0cF93YWl0X2Zvcl9jb25uZWN0KGFzb2MsIFxcdTAwMjZ0aW1lbyk7XFxubmV0L3NjdHAvc29ja2V0LmMtMTI0OS1cXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jPTE3ODk9c3RhdGljIGludCBzY3RwX3NlbmRtc2dfdG9fYXNvYyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jLTE4NDgtXFx0XFx0XFx0c2N0cF9hc3NvY2lhdGlvbl9ob2xkKGFzb2MpO1xcbm5ldC9zY3RwL3NvY2tldC5jOjE4NDk6XFx0XFx0XFx0ZXJyID0gc2N0cF93YWl0X2Zvcl9jb25uZWN0KGFzb2MsIFxcdTAwMjZ0aW1lbyk7XFxubmV0L3NjdHAvc29ja2V0LmMtMTg1MC1cXHRcXHRcXHRkZWFkID0gYXNvYy1cXHUwMDNlYmFzZS5kZWFkO1xcbi0tXFxubmV0L3NjdHAvc29ja2V0LmMtMTg4OC1cXHRcXHR0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIG1zZy1cXHUwMDNlbXNnX2ZsYWdzIFxcdTAwMjYgTVNHX0RPTlRXQUlUKTtcXG5uZXQvc2N0cC9zb2NrZXQuYzoxODg5OlxcdFxcdHNjdHBfd2FpdF9mb3JfY29ubmVjdChhc29jLCBcXHUwMDI2dGltZW8pO1xcbm5ldC9zY3RwL3NvY2tldC5jLTE4OTAtXFx0fVxcbi0tXFxubmV0L3NjdHAvc29ja2V0LmM9OTM4NT1zdGF0aWMgYm9vbCBzY3RwX3dyaXRlYWJsZShjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYy05MzkyLSAqL1xcbm5ldC9zY3RwL3NvY2tldC5jOjkzOTM6c3RhdGljIGludCBzY3RwX3dhaXRfZm9yX2Nvbm5lY3Qoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsIGxvbmcgKnRpbWVvX3ApXFxubmV0L3NjdHAvc29ja2V0LmMtOTM5NC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA5OjQ3OjAzLjk1NjQ5MzgyMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODc1NDg5MjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE5ldHdvcmtpbmcgUGF0Y2ggZm9yIFNDVFAgSW50ZXJsZWF2ZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UncmUgbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgaW1wYWN0cyB0aGUgYHNjdHBfc2VuZG1zZ190b19hc29jYCBmdW5jdGlvbi4gVGhhdCdzIGEgY3JpdGljYWwgcGllY2Ugb2YgU0NUUCdzIHNlbmRpbmcgbG9naWMsIGFuZCB0aGUgbW9kaWZpY2F0aW9uIHNwZWNpZmljYWxseSBraWNrcyBpbiB3aGVuIGBhc29jLVx1MDAzZWVwLVx1MDAzZWludGxfZW5hYmxlYCBpcyBzZXQg4oCTIHdoaWNoLCBpZiBJIHJlY2FsbCBjb3JyZWN0bHksIG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgU0NUUCBzdHJlYW0gaW50ZXJsZWF2ZSBmZWF0dXJlLiBUaGUgcGF0Y2ggaXMgaW5zZXJ0aW5nIGFuIGBhc29jYCByZWZlcmVuY2UgYmVmb3JlIGBzY3RwX3dhaXRfZm9yX2Nvbm5lY3RgIGFuZCBjaGVja2luZyBpZiBgYXNvYy1cdTAwM2ViYXNlLmRlYWRgIGFmdGVyIGl0LlxuXG5GaXJzdCB0aGluZ3MgZmlyc3QsIGlzIHRoaXMgZXZlbiAqcmVhY2hhYmxlKiBpbiBhIHR5cGljYWwgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gQWJzb2x1dGVseS4gU0NUUCBpcyBzdGFuZGFyZCBzb2NrZXQgbmV0d29ya2luZyBzdHVmZiwgQUZfSU5FVC9BRl9JTkVUNiwgSVBQUk9UT19TQ1RQIOKAkyBpdCBzaG91bGQgYmUgYWNjZXNzaWJsZS5cblxuTm93LCBsZXQncyBhc3Nlc3MgaXRzIFwiV29ydGhGdXp6aW5nXCIgc3RhdHVzLiBIaXR0aW5nIGBuZXQvc2N0cC9zb2NrZXQuY2AgYW5kIHNwZWNpZmljYWxseSBgc2N0cF9zZW5kbXNnX3RvX2Fzb2NgIGlzIGEgY2xlYXIgcG9zaXRpdmUgc2lnbi4gSXQncyBjb3JlIG5ldHdvcmtpbmcgcHJvdG9jb2wgY29kZSwgYW5kIGl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUuICBTbywgV29ydGhGdXp6aW5nID0gdHJ1ZS4gIE5vIGRvdWJ0IGFib3V0IGl0LlxuXG5OZXh0LCB0aGUgZm9jdXMgc3ltYm9scy4gV2UgaGF2ZSBgc2N0cF9zZW5kbXNnX3RvX2Fzb2NgLCB3aGljaCBpcyB0aGUgbW9kaWZpZWQgZnVuY3Rpb24sIHBsdXMgYHNjdHBfc2VuZG1zZ2AsIGl0cyBjYWxsZXIgYW5kIGxpa2VseSB0aGUgZW50cnlwb2ludCBmb3Igb3VyIGZ1enppbmcsIGFuZCBgc2N0cF93YWl0X2Zvcl9jb25uZWN0YCwgd2hpY2ggaXMgYSBoZWxwZXIgZnVuY3Rpb24gdGhhdCB0aGlzIHBhdGNoIGludGVyYWN0cyB3aXRoLiAgVGhlc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIHRvIHRhcmdldC5cblxuQW5kIGZpbmFsbHksIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBXZSBuZWVkIGBJUF9TQ1RQYCwgd2hpY2gsIGNvbnZlbmllbnRseSwgZGVwZW5kcyBvbiBgSU5FVGAuIE9rYXksIGVhc3kgZW5vdWdoIHRvIHNhdGlzZnkgdGhvc2UgZGVwZW5kZW5jaWVzLiBJIGtub3cgd2hlcmUgdGhhdCdzIGxvY2F0ZWQsIHRvby4gQ2hlY2tpbmcgYG5ldC9zY3RwL0tjb25maWdgIGNvbmZpcm1zIGBJUF9TQ1RQYCBkZXBlbmRzIG9uIGBJTkVUYCBhbmQgaXMgaW4gdGhlIGNvcnJlY3QgbG9jYXRpb24uIExldCdzIG1ha2Ugc3VyZSBpdCdzIGNvbXBpbGVkIHdpdGggYG5ldC9zY3RwL01ha2VmaWxlYC5cblxuT2theSwgSSB0aGluayB3ZSBoYXZlIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGF0Y2ggYW5kIGl0cyBpbXBsaWNhdGlvbnMgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3NDcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDk6NDc6MDguODMxOTg2MzUxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzE4NTY4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY3RwLipzb2NrZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjdHBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvaXB2Ni5jPTUyOT1zdGF0aWMgdm9pZCBzY3RwX3Y2X2Zyb21fc2tiKHVuaW9uIHNjdHBfYWRkciAqYWRkciwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9zY3RwL2lwdjYuYy01NDgtXFxubmV0L3NjdHAvaXB2Ni5jOjU0OTovKiBJbml0aWFsaXplIGFuIHNjdHBfYWRkciBmcm9tIGEgc29ja2V0LiAqL1xcbm5ldC9zY3RwL2lwdjYuYy01NTAtc3RhdGljIHZvaWQgc2N0cF92Nl9mcm9tX3NrKHVuaW9uIHNjdHBfYWRkciAqYWRkciwgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L3NjdHAvaXB2Ni5jPTEwMTU9c3RhdGljIGludCBzY3RwX2luZXQ2X3N1cHBvcnRlZF9hZGRycyhjb25zdCBzdHJ1Y3Qgc2N0cF9zb2NrICpvcHQsXFxuLS1cXG5uZXQvc2N0cC9pcHY2LmMtMTAyNi0vKiBIYW5kbGUgU0NUUF9JX1dBTlRfTUFQUEVEX1Y0X0FERFIgZm9yIGdldHBlZXJuYW1lKCkgYW5kIGdldHNvY2tuYW1lKCkgKi9cXG5uZXQvc2N0cC9pcHY2LmM6MTAyNzpzdGF0aWMgaW50IHNjdHBfZ2V0bmFtZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLFxcbm5ldC9zY3RwL2lwdjYuYy0xMDI4LVxcdFxcdFxcdGludCBwZWVyKVxcbi0tXFxubmV0L3NjdHAvcHJvdG9jb2wuYz0yMTU9c3RhdGljIHZvaWQgc2N0cF92NF9mcm9tX3NrYih1bmlvbiBzY3RwX2FkZHIgKmFkZHIsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvc2N0cC9wcm90b2NvbC5jLTIzMy1cXG5uZXQvc2N0cC9wcm90b2NvbC5jOjIzNDovKiBJbml0aWFsaXplIGFuIHNjdHBfYWRkciBmcm9tIGEgc29ja2V0LiAqL1xcbm5ldC9zY3RwL3Byb3RvY29sLmMtMjM1LXN0YXRpYyB2b2lkIHNjdHBfdjRfZnJvbV9zayh1bmlvbiBzY3RwX2FkZHIgKmFkZHIsIHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9zY3RwL3Byb3RvY29sLmM9MTQ3Nj1zdGF0aWMgX19pbml0IGludCBzY3RwX2luaXQodm9pZClcXG4tLVxcbm5ldC9zY3RwL3Byb3RvY29sLmMtMTQ5OS1cXG5uZXQvc2N0cC9wcm90b2NvbC5jOjE1MDA6XFx0c3RhdHVzID0gcGVyY3B1X2NvdW50ZXJfaW5pdChcXHUwMDI2c2N0cF9zb2NrZXRzX2FsbG9jYXRlZCwgMCwgR0ZQX0tFUk5FTCk7XFxubmV0L3NjdHAvcHJvdG9jb2wuYy0xNTAxLVxcdGlmIChzdGF0dXMpXFxuLS1cXG5uZXQvc2N0cC9wcm90b2NvbC5jLTE2NjUtZXJyX2VoYXNoX2FsbG9jOlxcbm5ldC9zY3RwL3Byb3RvY29sLmM6MTY2NjpcXHRwZXJjcHVfY291bnRlcl9kZXN0cm95KFxcdTAwMjZzY3RwX3NvY2tldHNfYWxsb2NhdGVkKTtcXG5uZXQvc2N0cC9wcm90b2NvbC5jLTE2NjctZXJyX3BlcmNwdV9jb3VudGVyX2luaXQ6XFxuLS1cXG5uZXQvc2N0cC9wcm90b2NvbC5jPTE2NzU9c3RhdGljIF9fZXhpdCB2b2lkIHNjdHBfZXhpdCh2b2lkKVxcbi0tXFxubmV0L3NjdHAvcHJvdG9jb2wuYy0xNzA0LVxcbm5ldC9zY3RwL3Byb3RvY29sLmM6MTcwNTpcXHRwZXJjcHVfY291bnRlcl9kZXN0cm95KFxcdTAwMjZzY3RwX3NvY2tldHNfYWxsb2NhdGVkKTtcXG5uZXQvc2N0cC9wcm90b2NvbC5jLTE3MDYtXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYz05Mj1zdGF0aWMgaW50IHNjdHBfc29ja19taWdyYXRlKHN0cnVjdCBzb2NrICpvbGRzaywgc3RydWN0IHNvY2sgKm5ld3NrLFxcbm5ldC9zY3RwL3NvY2tldC5jLTkzLVxcdFxcdFxcdCAgICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzc29jLFxcbm5ldC9zY3RwL3NvY2tldC5jOjk0OlxcdFxcdFxcdCAgICAgZW51bSBzY3RwX3NvY2tldF90eXBlIHR5cGUpO1xcbm5ldC9zY3RwL3NvY2tldC5jLTk1LVxcbi0tXFxubmV0L3NjdHAvc29ja2V0LmM9OTg9c3RhdGljIERFRklORV9QRVJfQ1BVKGludCwgc2N0cF9tZW1vcnlfcGVyX2NwdV9md19hbGxvYyk7XFxubmV0L3NjdHAvc29ja2V0LmM6OTk6c3RydWN0IHBlcmNwdV9jb3VudGVyIHNjdHBfc29ja2V0c19hbGxvY2F0ZWQ7XFxubmV0L3NjdHAvc29ja2V0LmMtMTAwLVxcbi0tXFxubmV0L3NjdHAvc29ja2V0LmM9MTk0Nz1zdGF0aWMgaW50IHNjdHBfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IG1zZ19sZW4pXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYy0xOTk0LVxcbm5ldC9zY3RwL3NvY2tldC5jOjE5OTU6XFx0XFx0XFx0Lyogc2N0cF9zZW5kbXNnX3RvX2Fzb2MoKSBtYXkgaGF2ZSByZWxlYXNlZCB0aGUgc29ja2V0XFxubmV0L3NjdHAvc29ja2V0LmMtMTk5Ni1cXHRcXHRcXHQgKiBsb2NrIChzY3RwX3dhaXRfZm9yX3NuZGJ1ZiksIGR1cmluZyB3aGljaCBvdGhlclxcbi0tXFxubmV0L3NjdHAvc29ja2V0LmM9Mjg0ND1zdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9kZWxheWVkX2FjayhzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYy0yODUzLVxcdFxcdFxcdFxcdCAgICBcXFwiJXMgKHBpZCAlZCkgXFxcIlxcbm5ldC9zY3RwL3NvY2tldC5jOjI4NTQ6XFx0XFx0XFx0XFx0ICAgIFxcXCJVc2Ugb2Ygc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgaW4gZGVsYXllZF9hY2sgc29ja2V0IG9wdGlvbi5cXFxcblxcXCJcXG5uZXQvc2N0cC9zb2NrZXQuYy0yODU1LVxcdFxcdFxcdFxcdCAgICBcXFwiVXNlIHN0cnVjdCBzY3RwX3NhY2tfaW5mbyBpbnN0ZWFkXFxcXG5cXFwiLFxcbi0tXFxubmV0L3NjdHAvc29ja2V0LmM9NDgyMD1zdGF0aWMgaW50IHNjdHBfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkciAqYWRkcixcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jLTQ4MzgtXFxubmV0L3NjdHAvc29ja2V0LmM6NDgzOTppbnQgc2N0cF9pbmV0X2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLFxcbm5ldC9zY3RwL3NvY2tldC5jLTQ4NDAtXFx0XFx0ICAgICAgaW50IGFkZHJfbGVuLCBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYz00ODYxPXN0YXRpYyBzdHJ1Y3Qgc29jayAqc2N0cF9jbG9uZV9zb2NrKHN0cnVjdCBzb2NrICpzayxcXG5uZXQvc2N0cC9zb2NrZXQuYy00ODYyLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG5uZXQvc2N0cC9zb2NrZXQuYzo0ODYzOlxcdFxcdFxcdFxcdCAgICBlbnVtIHNjdHBfc29ja2V0X3R5cGUgdHlwZSlcXG5uZXQvc2N0cC9zb2NrZXQuYy00ODY0LXtcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jPTYxMzA9c3RhdGljIGludCBzY3RwX2dldHNvY2tvcHRfZGVsYXllZF9hY2soc3RydWN0IHNvY2sgKnNrLCBpbnQgbGVuLFxcbi0tXFxubmV0L3NjdHAvc29ja2V0LmMtNjE0NS1cXHRcXHRcXHRcXHQgICAgXFxcIiVzIChwaWQgJWQpIFxcXCJcXG5uZXQvc2N0cC9zb2NrZXQuYzo2MTQ2OlxcdFxcdFxcdFxcdCAgICBcXFwiVXNlIG9mIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlIGluIGRlbGF5ZWRfYWNrIHNvY2tldCBvcHRpb24uXFxcXG5cXFwiXFxubmV0L3NjdHAvc29ja2V0LmMtNjE0Ny1cXHRcXHRcXHRcXHQgICAgXFxcIlVzZSBzdHJ1Y3Qgc2N0cF9zYWNrX2luZm8gaW5zdGVhZFxcXFxuXFxcIixcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jPTg2MDA9c3RhdGljIGludCBzY3RwX2xpc3Rlbl9zdGFydChzdHJ1Y3Qgc29jayAqc2ssIGludCBiYWNrbG9nKVxcbi0tXFxubmV0L3NjdHAvc29ja2V0LmMtODY1NC0gKi9cXG5uZXQvc2N0cC9zb2NrZXQuYzo4NjU1OmludCBzY3RwX2luZXRfbGlzdGVuKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBiYWNrbG9nKVxcbm5ldC9zY3RwL3NvY2tldC5jLTg2NTYte1xcbi0tXFxubmV0L3NjdHAvc29ja2V0LmMtODcxNi0gKi9cXG5uZXQvc2N0cC9zb2NrZXQuYzo4NzE3Ol9fcG9sbF90IHNjdHBfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jaywgcG9sbF90YWJsZSAqd2FpdClcXG5uZXQvc2N0cC9zb2NrZXQuYy04NzE4LXtcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jPTk1MzM9c3RhdGljIGludCBzY3RwX3NvY2tfbWlncmF0ZShzdHJ1Y3Qgc29jayAqb2xkc2ssIHN0cnVjdCBzb2NrICpuZXdzayxcXG5uZXQvc2N0cC9zb2NrZXQuYy05NTM0LVxcdFxcdFxcdCAgICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzc29jLFxcbm5ldC9zY3RwL3NvY2tldC5jOjk1MzU6XFx0XFx0XFx0ICAgICBlbnVtIHNjdHBfc29ja2V0X3R5cGUgdHlwZSlcXG5uZXQvc2N0cC9zb2NrZXQuYy05NTM2LXtcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jPTk2NTk9c3RydWN0IHByb3RvIHNjdHBfcHJvdCA9IHtcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jLTk2OTMtXFxubmV0L3NjdHAvc29ja2V0LmM6OTY5NDpcXHQuc29ja2V0c19hbGxvY2F0ZWQgPSBcXHUwMDI2c2N0cF9zb2NrZXRzX2FsbG9jYXRlZCxcXG5uZXQvc2N0cC9zb2NrZXQuYy05Njk1LX07XFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYz05NzE0PXN0cnVjdCBwcm90byBzY3RwdjZfcHJvdCA9IHtcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jLTk3NDktXFxubmV0L3NjdHAvc29ja2V0LmM6OTc1MDpcXHQuc29ja2V0c19hbGxvY2F0ZWQgPSBcXHUwMDI2c2N0cF9zb2NrZXRzX2FsbG9jYXRlZCxcXG5uZXQvc2N0cC9zb2NrZXQuYy05NzUxLX07XFxuLS1cXG5uZXQvc2N0cC91bHBxdWV1ZS5jLTktICpcXG5uZXQvc2N0cC91bHBxdWV1ZS5jOjEwOiAqIFRoaXMgYWJzdHJhY3Rpb24gY2FycmllcyBzY3RwIGV2ZW50cyB0byB0aGUgVUxQIChzb2NrZXRzKS5cXG5uZXQvc2N0cC91bHBxdWV1ZS5jLTExLSAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA5OjQ3OjA4Ljg3OTE3NjE0OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTI2NDA0NjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgU0NUUCBCdWlsZCBQcm9jZXNzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgYHNvY2tldC5vYCBpcyBjb25zdHJ1Y3RlZCB3aXRoaW4gdGhlIFNDVFAgc3Vic3lzdGVtLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCBpcyBhbG1vc3QgY2VydGFpbmx5IHRoZSBgbmV0L3NjdHAvTWFrZWZpbGVgLiBUaGlzIGlzIHdoZXJlIHRoZSBidWlsZCBwcm9jZXNzIGlzIG9yY2hlc3RyYXRlZCwgYW5kIGl0J2xsIGdpdmUgbWUgdGhlIGRlcGVuZGVuY3kgY2hhaW4sIHRoZSBjb21waWxlciBmbGFncywgYW5kIGFueSBsaW5rLXRpbWUgbWFnaWMgdGhhdCdzIGdvaW5nIG9uLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBydWxlcyB0aGF0IHRpZSB0aGUgc291cmNlIGZpbGVzIHRvIHRoZSBvYmplY3QgZmlsZSBgc29ja2V0Lm9gLCBhbG9uZyB3aXRoIGFueSByZWxldmFudCBpbmNsdWRlIHBhdGhzIGFuZCBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbnMuIEnigJltIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb25zIHJlbGF0ZWQgdG8gc3BlY2lmaWMgU0NUUCBmZWF0dXJlcyBvciBrZXJuZWwgY29uZmlndXJhdGlvbnMg4oCTIHRoYXTigJlzIGFsd2F5cyBhIGdvb2Qgc3BvdCBmb3Igc3VidGxlIGJ1Z3MuIFRoaXMgTWFrZWZpbGUgc2hvdWxkIHByb3ZpZGUgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIHRoYXQgb2JqZWN0IGZpbGUuIExldCdzIHNlZSBpZiBpdOKAmXMgYXMgc3RyYWlnaHRmb3J3YXJkIGFzIGl0IHNob3VsZCBiZSwgb3IgaWYgdGhlcmUgYXJlIGFueSBnb3RjaGFzIEkgbmVlZCB0byBiZSBhd2FyZSBvZi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2NjcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwOTo0NzoxMS4wMDU1ODQwMzNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjdHAvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciBTQ1RQIHN1cHBvcnQgY29kZS5cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0b2JqLSQoQ09ORklHX0lQX1NDVFApICs9IHNjdHAub1xcbiAgIDc6XFx0b2JqLSQoQ09ORklHX0lORVRfU0NUUF9ESUFHKSArPSBzY3RwX2RpYWcub1xcbiAgIDg6XFx0XFxuICAgOTpcXHRzY3RwLXkgOj0gc21fc3RhdGV0YWJsZS5vIHNtX3N0YXRlZnVucy5vIHNtX3NpZGVlZmZlY3QubyBcXFxcXFxuICAxMDpcXHRcXHQgIHByb3RvY29sLm8gZW5kcG9pbnRvbGEubyBhc3NvY2lvbGEubyBcXFxcXFxuICAxMTpcXHRcXHQgIHRyYW5zcG9ydC5vIGNodW5rLm8gc21fbWFrZV9jaHVuay5vIHVscGV2ZW50Lm8gXFxcXFxcbiAgMTI6XFx0XFx0ICBpbnF1ZXVlLm8gb3V0cXVldWUubyB1bHBxdWV1ZS5vIFxcXFxcXG4gIDEzOlxcdFxcdCAgdHNubWFwLm8gYmluZF9hZGRyLm8gc29ja2V0Lm8gcHJpbWl0aXZlLm8gXFxcXFxcbiAgMTQ6XFx0XFx0ICBvdXRwdXQubyBpbnB1dC5vIGRlYnVnLm8gc3RyZWFtLm8gYXV0aC5vIFxcXFxcXG4gIDE1OlxcdFxcdCAgb2ZmbG9hZC5vIHN0cmVhbV9zY2hlZC5vIHN0cmVhbV9zY2hlZF9wcmlvLm8gXFxcXFxcbiAgMTY6XFx0XFx0ICBzdHJlYW1fc2NoZWRfcnIubyBzdHJlYW1fc2NoZWRfZmMubyBcXFxcXFxuICAxNzpcXHRcXHQgIHN0cmVhbV9pbnRlcmxlYXZlLm9cXG4gIDE4OlxcdFxcbiAgMTk6XFx0c2N0cF9kaWFnLXkgOj0gZGlhZy5vXFxuICAyMDpcXHRcXG4gIDIxOlxcdHNjdHAtJChDT05GSUdfU0NUUF9EQkdfT0JKQ05UKSArPSBvYmpjbnQub1xcbiAgMjI6XFx0c2N0cC0kKENPTkZJR19QUk9DX0ZTKSArPSBwcm9jLm9cXG4gIDIzOlxcdHNjdHAtJChDT05GSUdfU1lTQ1RMKSArPSBzeXNjdGwub1xcbiAgMjQ6XFx0XFxuICAyNTpcXHRzY3RwLSQoc3Vic3QgbSx5LCQoQ09ORklHX0lQVjYpKVxcdCs9IGlwdjYub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwOTo0NzoxMS4wMDU2NTAyMjNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDY5MTI5NzAxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBJUF9TQ1RQIFNvY2tldCBNb2R1bGUgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBgSVBfU0NUUGAgaXMgYnVpbGRpbmcgYHNvY2tldC5vYC4gVGltZSB0byBtZXRpY3Vsb3VzbHkgcmV2aWV3IGV2ZXJ5dGhpbmcuIEZpcnN0LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogaXMgdGhpcyBtb2R1bGUgd29ydGggZnV6emluZz8gVGhlIGFuc3dlciwgdW5lcXVpdm9jYWxseSwgaXMgKnRydWUqLiBXZSd2ZSBkZWVtZWQgaXQgYSBoaWdoLXZhbHVlIHRhcmdldC4gTmV4dCwgd2UgaWRlbnRpZmllZCB0aGUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0czogYHNjdHBfc2VuZG1zZ190b19hc29jYCwgYHNjdHBfc2VuZG1zZ2AsIGFuZCBgc2N0cF93YWl0X2Zvcl9jb25uZWN0YC4gVGhlc2UgZnVuY3Rpb25zIGFyZSB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCBzbyB0byBzcGVhaywgaW4gU0NUUCBjb21tdW5pY2F0aW9uLiBUbyBlbnN1cmUgdGhlIGZ1enppbmcgZW52aXJvbm1lbnQgaXMgYXBwcm9wcmlhdGVseSBjb25maWd1cmVkLCB3ZSd2ZSBlbmFibGVkIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnM6IGBJUF9TQ1RQYCBhbmQgYElORVRgLCBvZiBjb3Vyc2UuIEZpbmFsbHksIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgZGVjaXNpb24gaXMgY2xlYXIgYW5kIGNvbmNpc2Ug4oCTIGl0J3MgYSBzb2xpZCwgd2VsbC1kZWZpbmVkIHRhcmdldCB3aXRoIGtub3duIHZ1bG5lcmFiaWxpdGllcy4gVGltZSB0byBjb25maXJtIHRoZXNlIHJlc3VsdHMgd2l0aCBgc2V0LXJlc3VsdHNgLCBhbmQgbW92ZSBvbiB0byB0aGUgbmV4dCBtb2R1bGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzg4LCJPdXRwdXRUb2tlbnMiOjE1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA5OjQ3OjE1LjY5Njk0OTY0NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3OTM3ODM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9TQ1RQXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2N0cF9zZW5kbXNnX3RvX2Fzb2NcIixcbiAgICBcInNjdHBfc2VuZG1zZ1wiLFxuICAgIFwic2N0cF93YWl0X2Zvcl9jb25uZWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc2N0cF9zZW5kbXNnX3RvX2Fzb2MgaW4gbmV0L3NjdHAvc29ja2V0LmMgdG8gcHJvcGVybHkgaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgU0NUUCBhc3NvY2lhdGlvbiBhY3Jvc3Mgc2N0cF93YWl0X2Zvcl9jb25uZWN0IGFuZCBjaGVjayBpZiB0aGUgYXNzb2NpYXRpb24gaXMgZGVhZCB3aGVuIHN0cmVhbSBpbnRlcmxlYXZpbmcgaXMgZW5hYmxlZC4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgc29ja2V0IGNvZGUgdGhhdCBjYW4gYmUgZXhlcmNpc2VkIHZpYSBzdGFuZGFyZCBTQ1RQIHNvY2tldCBzZW5kbXNnIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfU0NUUFwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNjdHBfc2VuZG1zZ190b19hc29jXCIsXG4gICAgXCJzY3RwX3NlbmRtc2dcIixcbiAgICBcInNjdHBfd2FpdF9mb3JfY29ubmVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHNjdHBfc2VuZG1zZ190b19hc29jIGluIG5ldC9zY3RwL3NvY2tldC5jIHRvIHByb3Blcmx5IGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIFNDVFAgYXNzb2NpYXRpb24gYWNyb3NzIHNjdHBfd2FpdF9mb3JfY29ubmVjdCBhbmQgY2hlY2sgaWYgdGhlIGFzc29jaWF0aW9uIGlzIGRlYWQgd2hlbiBzdHJlYW0gaW50ZXJsZWF2aW5nIGlzIGVuYWJsZWQuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIHNvY2tldCBjb2RlIHRoYXQgY2FuIGJlIGV4ZXJjaXNlZCB2aWEgc3RhbmRhcmQgU0NUUCBzb2NrZXQgc2VuZG1zZyBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwOTo0NzoxNS43NzQ4OTU0NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3NTMzNjcxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwOTo0NzoxNS43NzUzMzg3OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjExNzUyOTE5MTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYXNzb2NpYXRpb24gbGlmZXRpbWUgbWFuYWdlbWVudCBpbiBgc2N0cF9zZW5kbXNnX3RvX2Fzb2NgIGJ5IGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gYGFzb2NgIChgc2N0cF9hc3NvY2lhdGlvbl9ob2xkYC9gc2N0cF9hc3NvY2lhdGlvbl9wdXRgKSBhY3Jvc3MgdGhlIGJsb2NraW5nIGBzY3RwX3dhaXRfZm9yX2Nvbm5lY3RgIGNhbGwgYW5kIGNoZWNraW5nIGBhc29jLVxcdTAwM2ViYXNlLmRlYWRgIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgb3Igb3BlcmF0aW9ucyBvbiBhIGRlYWQgYXNzb2NpYXRpb24uXFxuXFxuLSBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5OlxcbiAgLSBUaGlzIGNoYW5nZSBhZGRyZXNzZXMgb2JqZWN0IGxpZmV0aW1lIGFuZCB1c2UtYWZ0ZXItZnJlZSByaXNrcywgd2hpY2ggYXJlIGRpcmVjdGx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLlxcbiAgLSBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBhbGxvY2F0ZWQsIG9yIGV4cG9zZWQuIFRoZSBuZXdseSBpbnRyb2R1Y2VkIGxvY2FsIHZhcmlhYmxlIGBkZWFkYCBpcyBleHBsaWNpdGx5IGFzc2lnbmVkIGBkZWFkID0gYXNvYy1cXHUwMDNlYmFzZS5kZWFkO2AgaW1tZWRpYXRlbHkgYmVmb3JlIGV2YWx1YXRpb24uXFxuICAtIFRoZXJlIGFyZSBubyBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29waWVzLCBwYWRkaW5nIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHJlYWRzIGludm9sdmVkLlxcblxcblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkOyBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTI4ZjRlNjUyYmZiZTEzY2NiMmYxYzU0MWZlYTk0ZTdiNzg4YWQxMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDA5OjQ2OjQxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc29ja2V0LmMgYi9uZXQvc2N0cC9zb2NrZXQuY1xuaW5kZXggYzdiOWUzMjVlYzFjZC4uMDlmZDZiOTUxMzc0MSAxMDA2NDRcbi0tLSBhL25ldC9zY3RwL3NvY2tldC5jXG4rKysgYi9uZXQvc2N0cC9zb2NrZXQuY1xuQEAgLTE4NDIsOSArMTg0MiwxNCBAQCBzdGF0aWMgaW50IHNjdHBfc2VuZG1zZ190b19hc29jKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxuIFx0XHRcdGdvdG8gZXJyO1xuIFxuIFx0XHRpZiAoYXNvYy1cdTAwM2VlcC1cdTAwM2VpbnRsX2VuYWJsZSkge1xuK1x0XHRcdGJvb2wgZGVhZDtcbitcbiBcdFx0XHR0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIDApO1xuK1x0XHRcdHNjdHBfYXNzb2NpYXRpb25faG9sZChhc29jKTtcbiBcdFx0XHRlcnIgPSBzY3RwX3dhaXRfZm9yX2Nvbm5lY3QoYXNvYywgXHUwMDI2dGltZW8pO1xuLVx0XHRcdGlmIChlcnIpIHtcbitcdFx0XHRkZWFkID0gYXNvYy1cdTAwM2ViYXNlLmRlYWQ7XG4rXHRcdFx0c2N0cF9hc3NvY2lhdGlvbl9wdXQoYXNvYyk7XG4rXHRcdFx0aWYgKGVyciB8fCBkZWFkKSB7XG4gXHRcdFx0XHRlcnIgPSAtRVNSQ0g7XG4gXHRcdFx0XHRnb3RvIGVycjtcbiBcdFx0XHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwOTo0NzoxNS43NzUzNDAwOVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTAxMTE2ODM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU0NUUCBTb2NrZXQgQ29kZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIFRoaXMgcGF0Y2ggcmVxdWlyZXMgYSBjbG9zZSBsb29rLCBhbmQgdG8gdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zLCBJIG5lZWQgdG8gem9vbSBpbiBvbiB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBpbiBgbmV0L3NjdHAvc29ja2V0LmNgLiBJJ2xsIHVzZSBteSBlc3RhYmxpc2hlZCB3b3JrZmxvdzogZmlyc3QsIEknbGwgcHVsbCB1cCB0aGUgY29kZSB1c2luZyBgcmVhZC1maWxlYCBhbmQgY2VudGVyIHRoZSB2aWV3IGFyb3VuZCBsaW5lIDE4NDIuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHZpc3VhbCBhbmNob3IgZm9yIHRoZSBjaGFuZ2UgYW5kIGhlbHAgbWUgcXVpY2tseSBncmFzcCB0aGUgbG9jYWwgZnVuY3Rpb24gYW5kIGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSBpbXBhY3RlZC4gRnJvbSB0aGVyZSwgSSBjYW4gc3RhcnQgdG8gaWRlbnRpZnkgdGhlIHNwZWNpZmljIGxvZ2ljIHRoaXMgcGF0Y2ggbW9kaWZpZXMgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgZXhpc3RpbmcgaW1wbGVtZW50YXRpb24uIFRoaXMgaXMgdGhlIGJlc3Qgd2F5IHRvIGdldCBhIHNvbGlkIGhhbmRsZSBvbiB0aGUgY2hhbmdlJ3MgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQ3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwOTo0NzoxOS42NzY0NjAzMzRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY0NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY3RwL3NvY2tldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MjUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4MjU6XFx0XFx0aWYgKHNjdHBfd3NwYWNlKGFzb2MpIFxcdTAwM2MgKGludCltc2dfbGVuKVxcbjE4MjY6XFx0XFx0XFx0c2N0cF9wcnNjdHBfcHJ1bmUoYXNvYywgc2luZm8sIG1zZ19sZW4gLSBzY3RwX3dzcGFjZShhc29jKSk7XFxuMTgyNzpcXHRcXG4xODI4OlxcdFxcdGlmIChzY3RwX3dzcGFjZShhc29jKSBcXHUwMDNjPSAwIHx8ICFza193bWVtX3NjaGVkdWxlKHNrLCBtc2dfbGVuKSkge1xcbjE4Mjk6XFx0XFx0XFx0dGltZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCBtc2ctXFx1MDAzZW1zZ19mbGFncyBcXHUwMDI2IE1TR19ET05UV0FJVCk7XFxuMTgzMDpcXHRcXHRcXHRlcnIgPSBzY3RwX3dhaXRfZm9yX3NuZGJ1Zihhc29jLCB0cmFuc3BvcnQsIFxcdTAwMjZ0aW1lbywgbXNnX2xlbik7XFxuMTgzMTpcXHRcXHRcXHRpZiAoZXJyKVxcbjE4MzI6XFx0XFx0XFx0XFx0Z290byBlcnI7XFxuMTgzMzpcXHRcXHRcXHRpZiAodW5saWtlbHkoc2luZm8tXFx1MDAzZXNpbmZvX3N0cmVhbSBcXHUwMDNlPSBhc29jLVxcdTAwM2VzdHJlYW0ub3V0Y250KSkge1xcbjE4MzQ6XFx0XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4xODM1OlxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbjE4MzY6XFx0XFx0XFx0fVxcbjE4Mzc6XFx0XFx0fVxcbjE4Mzg6XFx0XFxuMTgzOTpcXHRcXHRpZiAoc2N0cF9zdGF0ZShhc29jLCBDTE9TRUQpKSB7XFxuMTg0MDpcXHRcXHRcXHRlcnIgPSBzY3RwX3ByaW1pdGl2ZV9BU1NPQ0lBVEUobmV0LCBhc29jLCBOVUxMKTtcXG4xODQxOlxcdFxcdFxcdGlmIChlcnIpXFxuMTg0MjpcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4xODQzOlxcdFxcbjE4NDQ6XFx0XFx0XFx0aWYgKGFzb2MtXFx1MDAzZWVwLVxcdTAwM2VpbnRsX2VuYWJsZSkge1xcbjE4NDU6XFx0XFx0XFx0XFx0Ym9vbCBkZWFkO1xcbjE4NDY6XFx0XFxuMTg0NzpcXHRcXHRcXHRcXHR0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIDApO1xcbjE4NDg6XFx0XFx0XFx0XFx0c2N0cF9hc3NvY2lhdGlvbl9ob2xkKGFzb2MpO1xcbjE4NDk6XFx0XFx0XFx0XFx0ZXJyID0gc2N0cF93YWl0X2Zvcl9jb25uZWN0KGFzb2MsIFxcdTAwMjZ0aW1lbyk7XFxuMTg1MDpcXHRcXHRcXHRcXHRkZWFkID0gYXNvYy1cXHUwMDNlYmFzZS5kZWFkO1xcbjE4NTE6XFx0XFx0XFx0XFx0c2N0cF9hc3NvY2lhdGlvbl9wdXQoYXNvYyk7XFxuMTg1MjpcXHRcXHRcXHRcXHRpZiAoZXJyIHx8IGRlYWQpIHtcXG4xODUzOlxcdFxcdFxcdFxcdFxcdGVyciA9IC1FU1JDSDtcXG4xODU0OlxcdFxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbjE4NTU6XFx0XFx0XFx0XFx0fVxcbjE4NTY6XFx0XFx0XFx0fSBlbHNlIHtcXG4xODU3OlxcdFxcdFxcdFxcdHdhaXRfY29ubmVjdCA9IHRydWU7XFxuMTg1ODpcXHRcXHRcXHR9XFxuMTg1OTpcXHRcXG4xODYwOlxcdFxcdFxcdHByX2RlYnVnKFxcXCIlczogd2UgYXNzb2NpYXRlZCBwcmltaXRpdmVseVxcXFxuXFxcIiwgX19mdW5jX18pO1xcbjE4NjE6XFx0XFx0fVxcbjE4NjI6XFx0XFxuMTg2MzpcXHRcXHRkYXRhbXNnID0gc2N0cF9kYXRhbXNnX2Zyb21fdXNlcihhc29jLCBzaW5mbywgXFx1MDAyNm1zZy1cXHUwMDNlbXNnX2l0ZXIpO1xcbjE4NjQ6XFx0XFx0aWYgKElTX0VSUihkYXRhbXNnKSkge1xcbjE4NjU6XFx0XFx0XFx0ZXJyID0gUFRSX0VSUihkYXRhbXNnKTtcXG4xODY2OlxcdFxcdFxcdGdvdG8gZXJyO1xcbjE4Njc6XFx0XFx0fVxcbjE4Njg6XFx0XFxuMTg2OTpcXHRcXHRhc29jLVxcdTAwM2Vmb3JjZV9kZWxheSA9ICEhKG1zZy1cXHUwMDNlbXNnX2ZsYWdzIFxcdTAwMjYgTVNHX01PUkUpO1xcbjE4NzA6XFx0XFxuMTg3MTpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGNodW5rLCBcXHUwMDI2ZGF0YW1zZy1cXHUwMDNlY2h1bmtzLCBmcmFnX2xpc3QpIHtcXG4xODcyOlxcdFxcdFxcdHNjdHBfY2h1bmtfaG9sZChjaHVuayk7XFxuMTg3MzpcXHRcXHRcXHRzY3RwX3NldF9vd25lcl93KGNodW5rKTtcXG4xODc0OlxcdFxcdFxcdGNodW5rLVxcdTAwM2V0cmFuc3BvcnQgPSB0cmFuc3BvcnQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA5OjQ3OjE5LjY3NzAyNzA4NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3ODUxMjEwOTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IFNDVFAgQXNzb2NpYXRpb24gTGlmZXRpbWUgTWFuYWdlbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMgd2l0aGluIGBzY3RwX3NlbmRtc2dfdG9fYXNvY2AuIExvb2tpbmcgYXQgdGhlIGNvZGUsIGl0J3MgcHJldHR5IGNsZWFyOiBXZSd2ZSBpbnRyb2R1Y2VkIHJlZmVyZW5jZSBjb3VudGluZyBhcm91bmQgdGhlIGNhbGwgdG8gYHNjdHBfd2FpdF9mb3JfY29ubmVjdGAuICBQcmV2aW91c2x5LCB3ZSBoYWQgdGhpczpcblxuYGBgY1xuXHRcdGlmIChhc29jLVx1MDAzZWVwLVx1MDAzZWludGxfZW5hYmxlKSB7XG5cdFx0XHR0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIDApO1xuXHRcdFx0ZXJyID0gc2N0cF93YWl0X2Zvcl9jb25uZWN0KGFzb2MsIFx1MDAyNnRpbWVvKTtcblx0XHRcdGlmIChlcnIpIHtcblx0XHRcdFx0ZXJyID0gLUVTUkNIO1xuXHRcdFx0XHRnb3RvIGVycjtcblx0XHRcdH1cbmBgYFxuXG5Ob3csIHdlIGhhdmU6XG5cbmBgYGNcblx0XHRpZiAoYXNvYy1cdTAwM2VlcC1cdTAwM2VpbnRsX2VuYWJsZSkge1xuXHRcdFx0Ym9vbCBkZWFkO1xuXG5cdFx0XHR0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIDApO1xuXHRcdFx0c2N0cF9hc3NvY2lhdGlvbl9ob2xkKGFzb2MpO1xuXHRcdFx0ZXJyID0gc2N0cF93YWl0X2Zvcl9jb25uZWN0KGFzb2MsIFx1MDAyNnRpbWVvKTtcblx0XHRcdGRlYWQgPSBhc29jLVx1MDAzZWJhc2UuZGVhZDtcblx0XHRcdHNjdHBfYXNzb2NpYXRpb25fcHV0KGFzb2MpO1xuXHRcdFx0aWYgKGVyciB8fCBkZWFkKSB7XG5cdFx0XHRcdGVyciA9IC1FU1JDSDtcblx0XHRcdFx0Z290byBlcnI7XG5cdFx0XHR9XG5gYGBcblxuVGhlIG1vdGl2YXRpb24gaXMgb2J2aW91czogYHNjdHBfd2FpdF9mb3JfY29ubmVjdGAgcmVsZWFzZXMgdGhlIHNvY2tldCBsb2NrLiBEdXJpbmcgdGhlIHdhaXQsIHRoZSBgYXNvY2AgYXNzb2NpYXRpb24gY291bGQgYmUgZnJlZWQsIGNsb3NlZCwgb3Igb3RoZXJ3aXNlIGludmFsaWRhdGVkLiAgVGhlIGBzY3RwX2Fzc29jaWF0aW9uX2hvbGRgIGlzIGtleSB0byBwcmV2ZW50IGEgdXNlLWFmdGVyLWZyZWUsIHdoaWxlIHRoZSBgYXNvYy1cdTAwM2ViYXNlLmRlYWRgIGNoZWNrIHByb3ZpZGVzIGFuIGFkZGl0aW9uYWwgc2FmZWd1YXJkLlxuXG5TbywgdGhpcyBpcyBhIGNsZWFyIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZTogIHJlZmNvdW50aW5nIHRvIHByZXZlbnQgVUFGIG9yIGFjY2Vzc2luZyBhIGRlYWQgYXNzb2NpYXRpb24uIFRoaXMgZmFsbHMgc3F1YXJlbHkgaW50byB0aGUgcmVhbG0gb2YgS0FTQU4uXG5cbk5vdywgbGV0J3MgbWV0aG9kaWNhbGx5IGNoZWNrIGZvciBLTVNBTi1zcGVjaWZpYyBjb25jZXJucy4gSXMgdGhlcmUgYSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gVGhlIGBkZWFkYCB2YXJpYWJsZSBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIGltbWVkaWF0ZWx5IGFmdGVyIGBzY3RwX3dhaXRfZm9yX2Nvbm5lY3RgIHJldHVybnMuIEl0J3MgdGhlbiByZWFkIGluIHRoZSBgaWZgIHN0YXRlbWVudC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCBvciBsZWFrZWQuIE5vIGtlcm5lbCBkYXRhIGlzIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gIE5vIHBhZGRpbmcgaXNzdWVzIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBhcmUgcHJlc2VudC5cblxuTGV0IG1lIGdvIHRocm91Z2ggdGhlIHN0YW5kYXJkIEtNU0FOIGNoZWNrbGlzdC4gRG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBvciBtb2RpZnk6XG4xLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIGZpZWxkcyBvciBwYWRkaW5nIG1pZ2h0IGJlIHVuaW5pdGlhbGl6ZWQ/IE5vcGUuXG4yLiAgQ29uZGl0aW9uYWwgbG9naWMgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHM/ICBOby4gYGRlYWRgIGlzIGluaXRpYWxpemVkIHJpZ2h0IGJlZm9yZSBiZWluZyB1c2VkLlxuMy4gIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlcj8gTm8uXG40LiAgQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBhbGxvd3MgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXM/IE5vdCBoZXJlLlxuXG5UaGUgYm90dG9tIGxpbmU6IHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgY2xhc3NpYyBVQUYvbGlmZWN5Y2xlIGlzc3VlLCBwZXJmZWN0IGZvciBLQVNBTi5cblxuVGhlIEtNU0FOIHJlYXNvbmluZyBpcyBjbGVhcjpcbiogICBUaGUgcGF0Y2ggYWRkcmVzc2VzIGFzc29jaWF0aW9uIGxpZmV0aW1lIG1hbmFnZW1lbnQgYW5kIHByZXZlbnRzIHVzZS1hZnRlci1mcmVlIGJ5IHVzaW5nIHJlZmVyZW5jZSBjb3VudGluZy5cbiogICBUaGUgYnVnIGJlaW5nIGFkZHJlc3NlZCwgVUFGIHJlbGF0ZWQgdG8gbGlmZXRpbWUgbWFuYWdlbWVudCwgaXMgd2l0aGluIEtBU0FOJ3MgZG9tYWluLlxuKiAgIE5vIG5ldyB1bmluaXRpYWxpemVkIGhlYXAsIHN0YWNrLCBvciBwYWdlIGFsbG9jYXRpb25zIGFyZSBpbnZvbHZlZC4gVGhlIGBkZWFkYCB2YXJpYWJsZSBpcyBhbHdheXMgaW5pdGlhbGl6ZWQuXG4qICAgTm8ga2VybmVsIGRhdGEgaXMgY29waWVkIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGZhbHNlLiBEb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjExLCJPdXRwdXRUb2tlbnMiOjIzNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwOTo0NzoyNy41MjgyNDI3NTlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhc3NvY2lhdGlvbiBsaWZldGltZSBtYW5hZ2VtZW50IGluIGBzY3RwX3NlbmRtc2dfdG9fYXNvY2AgYnkgaG9sZGluZyBhIHJlZmVyZW5jZSB0byBgYXNvY2AgKGBzY3RwX2Fzc29jaWF0aW9uX2hvbGRgL2BzY3RwX2Fzc29jaWF0aW9uX3B1dGApIGFjcm9zcyB0aGUgYmxvY2tpbmcgYHNjdHBfd2FpdF9mb3JfY29ubmVjdGAgY2FsbCBhbmQgY2hlY2tpbmcgYGFzb2MtXFx1MDAzZWJhc2UuZGVhZGAgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBvciBvcGVyYXRpb25zIG9uIGEgZGVhZCBhc3NvY2lhdGlvbi5cXG5cXG4tIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHk6XFxuICAtIFRoaXMgY2hhbmdlIGFkZHJlc3NlcyBvYmplY3QgbGlmZXRpbWUgYW5kIHVzZS1hZnRlci1mcmVlIHJpc2tzLCB3aGljaCBhcmUgZGlyZWN0bHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4uXFxuICAtIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGFsbG9jYXRlZCwgb3IgZXhwb3NlZC4gVGhlIG5ld2x5IGludHJvZHVjZWQgbG9jYWwgdmFyaWFibGUgYGRlYWRgIGlzIGV4cGxpY2l0bHkgYXNzaWduZWQgYGRlYWQgPSBhc29jLVxcdTAwM2ViYXNlLmRlYWQ7YCBpbW1lZGlhdGVseSBiZWZvcmUgZXZhbHVhdGlvbi5cXG4gIC0gVGhlcmUgYXJlIG5vIGtlcm5lbC10by11c2VyIG1lbW9yeSBjb3BpZXMsIHBhZGRpbmcgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcmVhZHMgaW52b2x2ZWQuXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQ7IHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYXNzb2NpYXRpb24gbGlmZXRpbWUgbWFuYWdlbWVudCBpbiBgc2N0cF9zZW5kbXNnX3RvX2Fzb2NgIGJ5IGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gYGFzb2NgIChgc2N0cF9hc3NvY2lhdGlvbl9ob2xkYC9gc2N0cF9hc3NvY2lhdGlvbl9wdXRgKSBhY3Jvc3MgdGhlIGJsb2NraW5nIGBzY3RwX3dhaXRfZm9yX2Nvbm5lY3RgIGNhbGwgYW5kIGNoZWNraW5nIGBhc29jLVxcdTAwM2ViYXNlLmRlYWRgIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgb3Igb3BlcmF0aW9ucyBvbiBhIGRlYWQgYXNzb2NpYXRpb24uXFxuXFxuLSBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5OlxcbiAgLSBUaGlzIGNoYW5nZSBhZGRyZXNzZXMgb2JqZWN0IGxpZmV0aW1lIGFuZCB1c2UtYWZ0ZXItZnJlZSByaXNrcywgd2hpY2ggYXJlIGRpcmVjdGx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLlxcbiAgLSBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBhbGxvY2F0ZWQsIG9yIGV4cG9zZWQuIFRoZSBuZXdseSBpbnRyb2R1Y2VkIGxvY2FsIHZhcmlhYmxlIGBkZWFkYCBpcyBleHBsaWNpdGx5IGFzc2lnbmVkIGBkZWFkID0gYXNvYy1cXHUwMDNlYmFzZS5kZWFkO2AgaW1tZWRpYXRlbHkgYmVmb3JlIGV2YWx1YXRpb24uXFxuICAtIFRoZXJlIGFyZSBubyBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29waWVzLCBwYWRkaW5nIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHJlYWRzIGludm9sdmVkLlxcblxcblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkOyBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowqbj57[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-11 09:29:07 +0000 UTC FinishedAt: 2026-09-11 09:47:29 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "78445023439506ebd83b86d40b1e428a3b309d4a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SCTP", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "78445023439506ebd83b86d40b1e428a3b309d4a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SCTP", "INET" ], "series_id": "36f2051d-d2fd-42fe-af2a-cd4c6bf3dde4" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "sctp_sendmsg_to_asoc", "sctp_sendmsg", "sctp_wait_for_connect" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA5OjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1NDVFAmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjdHBfc2VuZG1zZ190b19hc29jJiMzNDssCiAgICAmIzM0O3NjdHBfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDtzY3RwX3dhaXRfZm9yX2Nvbm5lY3QmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYXNzb2NpYXRpb24gbGlmZXRpbWUgbWFuYWdlbWVudCBpbiBgc2N0cF9zZW5kbXNnX3RvX2Fzb2NgIGJ5IGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gYGFzb2NgIChgc2N0cF9hc3NvY2lhdGlvbl9ob2xkYC9gc2N0cF9hc3NvY2lhdGlvbl9wdXRgKSBhY3Jvc3MgdGhlIGJsb2NraW5nIGBzY3RwX3dhaXRfZm9yX2Nvbm5lY3RgIGNhbGwgYW5kIGNoZWNraW5nIGBhc29jLVx1MDAzZWJhc2UuZGVhZGAgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBvciBvcGVyYXRpb25zIG9uIGEgZGVhZCBhc3NvY2lhdGlvbi5cblxuLSBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5OlxuICAtIFRoaXMgY2hhbmdlIGFkZHJlc3NlcyBvYmplY3QgbGlmZXRpbWUgYW5kIHVzZS1hZnRlci1mcmVlIHJpc2tzLCB3aGljaCBhcmUgZGlyZWN0bHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4uXG4gIC0gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgYWxsb2NhdGVkLCBvciBleHBvc2VkLiBUaGUgbmV3bHkgaW50cm9kdWNlZCBsb2NhbCB2YXJpYWJsZSBgZGVhZGAgaXMgZXhwbGljaXRseSBhc3NpZ25lZCBgZGVhZCA9IGFzb2MtXHUwMDNlYmFzZS5kZWFkO2AgaW1tZWRpYXRlbHkgYmVmb3JlIGV2YWx1YXRpb24uXG4gIC0gVGhlcmUgYXJlIG5vIGtlcm5lbC10by11c2VyIG1lbW9yeSBjb3BpZXMsIHBhZGRpbmcgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcmVhZHMgaW52b2x2ZWQuXG5cblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkOyBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHNjdHBfc2VuZG1zZ190b19hc29jIGluIG5ldC9zY3RwL3NvY2tldC5jIHRvIHByb3Blcmx5IGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIFNDVFAgYXNzb2NpYXRpb24gYWNyb3NzIHNjdHBfd2FpdF9mb3JfY29ubmVjdCBhbmQgY2hlY2sgaWYgdGhlIGFzc29jaWF0aW9uIGlzIGRlYWQgd2hlbiBzdHJlYW0gaW50ZXJsZWF2aW5nIGlzIGVuYWJsZWQuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIHNvY2tldCBjb2RlIHRoYXQgY2FuIGJlIGV4ZXJjaXNlZCB2aWEgc3RhbmRhcmQgU0NUUCBzb2NrZXQgc2VuZG1zZyBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA5OjQ2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTI4ZjRlNjUyYmZiZTEzY2NiMmYxYzU0MWZlYTk0ZTdiNzg4YWQxMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDA5OjQ2OjQxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NvY2tldC5jIGIvbmV0L3NjdHAvc29ja2V0LmNcbmluZGV4IGM3YjllMzI1ZWMxY2QuLjA5ZmQ2Yjk1MTM3NDEgMTAwNjQ0XG4tLS0gYS9uZXQvc2N0cC9zb2NrZXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjdHAvc29ja2V0LmNcbkBAIC0xODQyLDkgJiM0MzsxODQyLDE0IEBAIHN0YXRpYyBpbnQgc2N0cF9zZW5kbXNnX3RvX2Fzb2Moc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXG4gXHRcdFx0Z290byBlcnI7XG4gXG4gXHRcdGlmIChhc29jLVx1MDAzZWVwLVx1MDAzZWludGxfZW5hYmxlKSB7XG4mIzQzO1x0XHRcdGJvb2wgZGVhZDtcbiYjNDM7XG4gXHRcdFx0dGltZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCAwKTtcbiYjNDM7XHRcdFx0c2N0cF9hc3NvY2lhdGlvbl9ob2xkKGFzb2MpO1xuIFx0XHRcdGVyciA9IHNjdHBfd2FpdF9mb3JfY29ubmVjdChhc29jLCBcdTAwMjZ0aW1lbyk7XG4tXHRcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHRkZWFkID0gYXNvYy1cdTAwM2ViYXNlLmRlYWQ7XG4mIzQzO1x0XHRcdHNjdHBfYXNzb2NpYXRpb25fcHV0KGFzb2MpO1xuJiM0MztcdFx0XHRpZiAoZXJyIHx8IGRlYWQpIHtcbiBcdFx0XHRcdGVyciA9IC1FU1JDSDtcbiBcdFx0XHRcdGdvdG8gZXJyO1xuIFx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwOTo0NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9TQ1RQJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzY3RwX3NlbmRtc2dfdG9fYXNvYyYjMzQ7LAogICAgJiMzNDtzY3RwX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7c2N0cF93YWl0X2Zvcl9jb25uZWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHNjdHBfc2VuZG1zZ190b19hc29jIGluIG5ldC9zY3RwL3NvY2tldC5jIHRvIHByb3Blcmx5IGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIFNDVFAgYXNzb2NpYXRpb24gYWNyb3NzIHNjdHBfd2FpdF9mb3JfY29ubmVjdCBhbmQgY2hlY2sgaWYgdGhlIGFzc29jaWF0aW9uIGlzIGRlYWQgd2hlbiBzdHJlYW0gaW50ZXJsZWF2aW5nIGlzIGVuYWJsZWQuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIHNvY2tldCBjb2RlIHRoYXQgY2FuIGJlIGV4ZXJjaXNlZCB2aWEgc3RhbmRhcmQgU0NUUCBzb2NrZXQgc2VuZG1zZyBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTI4ZjRlNjUyYmZiZTEzY2NiMmYxYzU0MWZlYTk0ZTdiNzg4YWQxMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDA5OjQ2OjQxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc29ja2V0LmMgYi9uZXQvc2N0cC9zb2NrZXQuYwppbmRleCBjN2I5ZTMyNWVjMWNkLi4wOWZkNmI5NTEzNzQxIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9zb2NrZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2N0cC9zb2NrZXQuYwpAQCAtMTg0Miw5ICYjNDM7MTg0MiwxNCBAQCBzdGF0aWMgaW50IHNjdHBfc2VuZG1zZ190b19hc29jKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAogCQkJZ290byBlcnI7CiAKIAkJaWYgKGFzb2MtJmd0O2VwLSZndDtpbnRsX2VuYWJsZSkgewomIzQzOwkJCWJvb2wgZGVhZDsKJiM0MzsKIAkJCXRpbWVvID0gc29ja19zbmR0aW1lbyhzaywgMCk7CiYjNDM7CQkJc2N0cF9hc3NvY2lhdGlvbl9ob2xkKGFzb2MpOwogCQkJZXJyID0gc2N0cF93YWl0X2Zvcl9jb25uZWN0KGFzb2MsICZhbXA7dGltZW8pOwotCQkJaWYgKGVycikgewomIzQzOwkJCWRlYWQgPSBhc29jLSZndDtiYXNlLmRlYWQ7CiYjNDM7CQkJc2N0cF9hc3NvY2lhdGlvbl9wdXQoYXNvYyk7CiYjNDM7CQkJaWYgKGVyciB8fCBkZWFkKSB7CiAJCQkJZXJyID0gLUVTUkNIOwogCQkJCWdvdG8gZXJyOwogCQkJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTM1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU0NUUCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gbWV0aWN1bG91c2x5IGFuYWx5emUgdGhpcyBwYXRjaCwga2VlcGluZyB0aGUgcmVsZXZhbnQgZ3VpZGVsaW5lcyBmaXJtbHkgaW4gbWluZC4gU2VlbXMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGNoYW5nZSB3aXRoaW4gYG5ldC9zY3RwL3NvY2tldC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgc2N0cF9zZW5kbXNnX3RvX2Fzb2NgIGZ1bmN0aW9uLiBUaGUgZGlmZiBzbmlwcGV0IHBvaW50cyBvdXQgdGhlIGtleSBtb2RpZmljYXRpb24uCgpJbml0aWFsbHksIEkgc2VlIHRoZSBjb25kaXRpb25hbCBjaGVjayByZWxhdGVkIHRvIGBhc29jLSZndDtlcC0mZ3Q7aW50bF9lbmFibGVgLCB3aGljaCBpcyBpbnRlcmVzdGluZywgbGlrZWx5IHJlbGF0ZWQgdG8gaW50ZXJydXB0aWJsZSBzZW5kIG9wZXJhdGlvbnMuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYGJvb2wgZGVhZGAgYW5kIHRoZSByZWxhdGVkIGBzY3RwX2Fzc29jaWF0aW9uX2hvbGRgIGFuZCBgc2N0cF9hc3NvY2lhdGlvbl9wdXRgIGNhbGxzIHdpdGhpbiB0aGlzIGNvbmRpdGlvbmFsIGJsb2NrIGltbWVkaWF0ZWx5IGNhdGNoZXMgbXkgYXR0ZW50aW9uLgoKTXkgZXhwZXJ0IGludHVpdGlvbiBzdWdnZXN0cyB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIGhhbmRsaW5nIGNvbm5lY3Rpb24gZmFpbHVyZXMgb3IgdGltZW91dHMgbW9yZSBncmFjZWZ1bGx5LCBwb3RlbnRpYWxseSBhZGRyZXNzaW5nIGEgcmFjZSBjb25kaXRpb24gb3IgZGVhZGxvY2sgc2NlbmFyaW8uIEl0IGxvb2tzIGxpa2UgdGhlIGNoZWNrIGlzIGF0dGVtcHRpbmcgdG8gc2VlIGlmIHRoZSBhc3NvY2lhdGlvbiBpcyAmIzM5O2RlYWQmIzM5OyBhZnRlciB3YWl0aW5nIGZvciBhIGNvbm5lY3Rpb24uIFRoZSB1c2Ugb2YgYHNjdHBfYXNzb2NpYXRpb25faG9sZGAgYW5kIGBzY3RwX2Fzc29jaWF0aW9uX3B1dGAgaW5kaWNhdGVzIHNvbWUga2luZCBvZiByZWZlcmVuY2UgY291bnRpbmcgb3IgcmVzb3VyY2UgbWFuYWdlbWVudCBoYXBwZW5pbmcgYXJvdW5kIHRoZSBwb3RlbnRpYWxseSBibG9ja2luZyBgc2N0cF93YWl0X2Zvcl9jb25uZWN0YC4gTWFrZXMgc2Vuc2UuIFdlIGFyZSBob2xkaW5nIHRoZSBhc3NvY2lhdGlvbiB0byBwcm90ZWN0IGl0IHdoaWxlIHdhaXRpbmcuCgpUbyBnYWluIGEgbW9yZSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nLCBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2l0aGluIGBzY3RwX3NlbmRtc2dfdG9fYXNvY2AuIEEgcXVpY2sgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSBicm9hZGVyIGNvbnRleHQgc2hvdWxkIGdpdmUgbWUgdGhlIGZ1bGwgcGljdHVyZSBhbmQgaGVscCBtZSBwaW5wb2ludCB0aGUgZXhhY3QgaXNzdWUgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nLiBJJiMzOTttIGtlZW4gdG8gc2VlIGhvdyBgZGVhZGAgaXMgYWN0dWFsbHkgZGV0ZXJtaW5lZCBhbmQgaG93IHRoaXMgY2hhbmdlcyB0aGUgZXJyb3IgaGFuZGxpbmcuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgbG9ja2luZyBpc3N1ZXMgb3IgcmVzb3VyY2UgbGVha3MuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY3RwL3NvY2tldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODI1Olx0XHRpZiAoc2N0cF93c3BhY2UoYXNvYykgXHUwMDNjIChpbnQpbXNnX2xlbilcbjE4MjY6XHRcdFx0c2N0cF9wcnNjdHBfcHJ1bmUoYXNvYywgc2luZm8sIG1zZ19sZW4gLSBzY3RwX3dzcGFjZShhc29jKSk7XG4xODI3Olx0XG4xODI4Olx0XHRpZiAoc2N0cF93c3BhY2UoYXNvYykgXHUwMDNjPSAwIHx8ICFza193bWVtX3NjaGVkdWxlKHNrLCBtc2dfbGVuKSkge1xuMTgyOTpcdFx0XHR0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIG1zZy1cdTAwM2Vtc2dfZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVCk7XG4xODMwOlx0XHRcdGVyciA9IHNjdHBfd2FpdF9mb3Jfc25kYnVmKGFzb2MsIHRyYW5zcG9ydCwgXHUwMDI2dGltZW8sIG1zZ19sZW4pO1xuMTgzMTpcdFx0XHRpZiAoZXJyKVxuMTgzMjpcdFx0XHRcdGdvdG8gZXJyO1xuMTgzMzpcdFx0XHRpZiAodW5saWtlbHkoc2luZm8tXHUwMDNlc2luZm9fc3RyZWFtIFx1MDAzZT0gYXNvYy1cdTAwM2VzdHJlYW0ub3V0Y250KSkge1xuMTgzNDpcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4xODM1Olx0XHRcdFx0Z290byBlcnI7XG4xODM2Olx0XHRcdH1cbjE4Mzc6XHRcdH1cbjE4Mzg6XHRcbjE4Mzk6XHRcdGlmIChzY3RwX3N0YXRlKGFzb2MsIENMT1NFRCkpIHtcbjE4NDA6XHRcdFx0ZXJyID0gc2N0cF9wcmltaXRpdmVfQVNTT0NJQVRFKG5ldCwgYXNvYywgTlVMTCk7XG4xODQxOlx0XHRcdGlmIChlcnIpXG4xODQyOlx0XHRcdFx0Z290byBlcnI7XG4xODQzOlx0XG4xODQ0Olx0XHRcdGlmIChhc29jLVx1MDAzZWVwLVx1MDAzZWludGxfZW5hYmxlKSB7XG4xODQ1Olx0XHRcdFx0Ym9vbCBkZWFkO1xuMTg0NjpcdFxuMTg0NzpcdFx0XHRcdHRpbWVvID0gc29ja19zbmR0aW1lbyhzaywgMCk7XG4xODQ4Olx0XHRcdFx0c2N0cF9hc3NvY2lhdGlvbl9ob2xkKGFzb2MpO1xuMTg0OTpcdFx0XHRcdGVyciA9IHNjdHBfd2FpdF9mb3JfY29ubmVjdChhc29jLCBcdTAwMjZ0aW1lbyk7XG4xODUwOlx0XHRcdFx0ZGVhZCA9IGFzb2MtXHUwMDNlYmFzZS5kZWFkO1xuMTg1MTpcdFx0XHRcdHNjdHBfYXNzb2NpYXRpb25fcHV0KGFzb2MpO1xuMTg1MjpcdFx0XHRcdGlmIChlcnIgfHwgZGVhZCkge1xuMTg1MzpcdFx0XHRcdFx0ZXJyID0gLUVTUkNIO1xuMTg1NDpcdFx0XHRcdFx0Z290byBlcnI7XG4xODU1Olx0XHRcdFx0fVxuMTg1NjpcdFx0XHR9IGVsc2Uge1xuMTg1NzpcdFx0XHRcdHdhaXRfY29ubmVjdCA9IHRydWU7XG4xODU4Olx0XHRcdH1cbjE4NTk6XHRcbjE4NjA6XHRcdFx0cHJfZGVidWcoXCYjMzQ7JXM6IHdlIGFzc29jaWF0ZWQgcHJpbWl0aXZlbHlcXG5cJiMzNDssIF9fZnVuY19fKTtcbjE4NjE6XHRcdH1cbjE4NjI6XHRcbjE4NjM6XHRcdGRhdGFtc2cgPSBzY3RwX2RhdGFtc2dfZnJvbV91c2VyKGFzb2MsIHNpbmZvLCBcdTAwMjZtc2ctXHUwMDNlbXNnX2l0ZXIpO1xuMTg2NDpcdFx0aWYgKElTX0VSUihkYXRhbXNnKSkge1xuMTg2NTpcdFx0XHRlcnIgPSBQVFJfRVJSKGRhdGFtc2cpO1xuMTg2NjpcdFx0XHRnb3RvIGVycjtcbjE4Njc6XHRcdH1cbjE4Njg6XHRcbjE4Njk6XHRcdGFzb2MtXHUwMDNlZm9yY2VfZGVsYXkgPSAhIShtc2ctXHUwMDNlbXNnX2ZsYWdzIFx1MDAyNiBNU0dfTU9SRSk7XG4xODcwOlx0XG4xODcxOlx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGNodW5rLCBcdTAwMjZkYXRhbXNnLVx1MDAzZWNodW5rcywgZnJhZ19saXN0KSB7XG4xODcyOlx0XHRcdHNjdHBfY2h1bmtfaG9sZChjaHVuayk7XG4xODczOlx0XHRcdHNjdHBfc2V0X293bmVyX3coY2h1bmspO1xuMTg3NDpcdFx0XHRjaHVuay1cdTAwM2V0cmFuc3BvcnQgPSB0cmFuc3BvcnQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ0OAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ2hlY2tpbmcgS2NvbmZpZyBmb3IgU0NUUCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBGaXJzdCBvcmRlciBvZiBidXNpbmVzczogSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBzdGF0ZSBvZiBTQ1RQIHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLCBzcGVjaWZpY2FsbHkgS2NvbmZpZy4gVGhpcyBpcyBsaWtlbHkgdGhlIGJlc3QgaW5pdGlhbCBzdGVwIHRvIGRldGVybWluZSBpZiBTQ1RQIGlzIGV2ZW4gZW5hYmxlZCwgZGlzYWJsZWQsIG9yIGJ1aWx0IGFzIGEgbW9kdWxlLiBJIGtub3cgbXkgd2F5IGFyb3VuZCB0aGUgS2NvbmZpZyBzeXN0ZW0sIGFuZCBJIGNhbiBxdWlja2x5IGRldGVybWluZSB0aGUgcmVsZXZhbnQgZGVwZW5kZW5jaWVzLCBwb3RlbnRpYWwgZGVmYXVsdCB2YWx1ZXMsIGFuZCBhbnkgcmVsZXZhbnQgb3B0aW9ucyByZWxhdGVkIHRvIFNDVFAuIE15IGdvYWwgaGVyZSBpcyB0byBnZXQgYSBoaWdoLWxldmVsIG92ZXJ2aWV3IG9mIHRoZSBjdXJyZW50IFNDVFAgY29uZmlndXJhdGlvbiB3aXRob3V0IGdldHRpbmcgYm9nZ2VkIGRvd24gaW4gdGhlIGRldGFpbHMganVzdCB5ZXQuIElzIGl0IGV2ZW4gaW4gdGhlIGJ1aWxkPyBBcmUgdGhlcmUgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGNvbnNpZGVyIGJhc2VkIG9uIHRoZSB0YXJnZXQgcGxhdGZvcm0gb3IgdXNlIGNhc2U/IEkmIzM5O20gaG9waW5nIHRoaXMgd2lsbCBwcm92aWRlIGEgY2xlYXIgcGF0aCBmb3J3YXJkIGZvciB3aGF0ZXZlciB0aGUgbmV4dCBzdGFnZSBpcy4gVGhlIGluaXRpYWwgaW5zcGVjdGlvbiBvZiBLY29uZmlnIHNob3VsZCBnaXZlIG1lIHRoYXQga2V5IGluZm9ybWF0aW9uIHF1aWNrbHksIGlkZWFsbHkgd2l0aGluIGEgZmV3IG1pbnV0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX1NDVFAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2N0cCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2N0cC9LY29uZmlnLTUtXG5uZXQvc2N0cC9LY29uZmlnOjY6bWVudWNvbmZpZyBJUF9TQ1RQXG5uZXQvc2N0cC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtUaGUgU0NUUCBQcm90b2NvbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NjQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIGBuZXQvc2N0cC9LY29uZmlnYCBmaWxlOgoKKipBbmFseXppbmcgdGhlIFNDVFAgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gYG5ldC9zY3RwL0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgU0NUUCAoU3RyZWFtIENvbnRyb2wgVHJhbnNtaXNzaW9uIFByb3RvY29sKSB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCBhcmUgZGVmaW5lZC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSB1c3VhbCBLY29uZmlnIGNvbnZlbnRpb25zIGhlcmUg4oCTIGEgaGllcmFyY2hpY2FsIHN0cnVjdHVyZSwgZGVwZW5kZW5jaWVzLCBoZWxwIHRleHQsIGFuZCBkZWZhdWx0IHNldHRpbmdzLiBUaGUgZ29hbCwgYXMgYWx3YXlzLCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBvcHRpb25zIGNvbnRyb2wgU0NUUCYjMzk7cyBmZWF0dXJlcywgYW5kIGhvdyB0aGV5IGltcGFjdCB0aGUgb3ZlcmFsbCBrZXJuZWwgYnVpbGQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOgoKKiAgICoqQ29yZSBFbmFibGVtZW50OioqIFRoZSB0b3AtbGV2ZWwgb3B0aW9uIHRvIGVuYWJsZSBvciBkaXNhYmxlIFNDVFAgZW50aXJlbHkuCiogICAqKkZlYXR1cmUgRmxhZ3M6KiogSW5kaXZpZHVhbCBvcHRpb25zIGNvbnRyb2xsaW5nIHNwZWNpZmljIFNDVFAgZmVhdHVyZXMgbGlrZSBtdWx0aS1ob21pbmcsIGR5bmFtaWMgYWRkcmVzcyBjb25maWd1cmF0aW9uLCBzdHJlYW0gc2VxdWVuY2luZywgYW5kIGFueSBleHRlbnNpb25zIGxpa2UgRXhwbGljaXQgQ29uZ2VzdGlvbiBOb3RpZmljYXRpb24gKEVDTikgc3VwcG9ydCwgb3IgVXNlciBEYXRhZ3JhbSBQcm90b2NvbCAoVURQKSBlbmNhcHN1bGF0aW9uLgoqICAgKipEZXBlbmRlbmNpZXM6KiogV2hhdCBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcyBvciBmZWF0dXJlcyBkb2VzIFNDVFAgZGVwZW5kIG9uPyBBcmUgdGhlcmUgYW55IGhhcmQgZGVwZW5kZW5jaWVzIG9uLCBzYXksIG5ldHdvcmtpbmcgc3RhY2sgY29tcG9uZW50cyBvciBzZWN1cml0eSBmZWF0dXJlcz8gQW5kIHdoYXQgYWJvdXQgYnVpbGQgZGVwZW5kZW5jaWVzLCBtYWtpbmcgc3VyZSBhbGwgdGhlIG5lZWRlZCBtb2R1bGVzIGFyZSBidWlsdC4KKiAgICoqRGVmYXVsdCBWYWx1ZXM6KiogVW5kZXJzdGFuZGluZyB0aGUgZGVmYXVsdCBzZXR0aW5ncyBpcyBjcnVjaWFsLiBBcmUgdGhleSBzZW5zaWJsZSBmb3IgZ2VuZXJhbCB1c2UsIG9yIGFyZSB0aGVyZSBzcGVjaWZpYyBzY2VuYXJpb3Mgd2hlcmUgSSBtaWdodCBuZWVkIHRvIGFkanVzdCB0aGVtPyBPZnRlbiB0aGUgZGVmYXVsdCBmb3IgbW9kdWxlcyBpcyBgbWAsIHNvIHRoZXkmIzM5O3JlIGJ1aWx0IGFzIGxvYWRhYmxlIG1vZHVsZXMuCiogICAqKkhlbHAgVGV4dDoqKiBUaGlzIHNob3VsZCBwcm92aWRlIGEgY2xlYXIgZGVzY3JpcHRpb24gb2YgZWFjaCBvcHRpb24uIFRoZSBoZWxwIHRleHQmIzM5O3MgYWNjdXJhY3kgYW5kIGNvbXBsZXRlbmVzcyBhcmUga2V5IGluZGljYXRvcnMgb2YgdGhlIHF1YWxpdHkgb2YgdGhlIEtjb25maWcgZmlsZSBpdHNlbGYuIEkmIzM5O2xsIGJlIGNvbXBhcmluZyBpdCB0byB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uLgoqICAgKipDb25kaXRpb25hbCBDb21waWxhdGlvbjoqKiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgb3B0aW9ucyB0aGF0IGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIGJhc2VkIG9uIHRoZSBhcmNoaXRlY3R1cmUsIENQVSwgb3Igb3RoZXIga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBUaGF0IG1pZ2h0IGluZmx1ZW5jZSBpdHMgaW1wYWN0IG9uIHBvd2VyLgoqICAgKipTZWN1cml0eSBDb25zaWRlcmF0aW9uczoqKiBIYXMgdGhlIEtjb25maWcgZmlsZSBhZGRyZXNzZWQgc2VjdXJpdHktcmVsYXRlZCBhc3BlY3RzPyBBcmUgdGhlcmUgb3B0aW9ucyByZWxhdGVkIHRvIElQc2VjLCBUTFMsIG9yIGFueSBoYXJkZW5pbmcgZmVhdHVyZXM/IEFyZSB0aGVyZSBhbnkgb3B0aW9ucyB0byBzdXBwb3J0IGhhcmRlbmluZywgb3IgZGlzYWJsaW5nIGZ1bmN0aW9ucyB0byByZWR1Y2UgdGhlIGF0dGFjayBzdXJmYWNlLgoKVWx0aW1hdGVseSwgSSB3YW50IHRvIGZvcm0gYSBjb21wbGV0ZSBtZW50YWwgcGljdHVyZSBvZiBob3cgU0NUUCBpcyBjb25maWd1cmVkIGFuZCBob3cgaXQmIzM5O3MgaW50ZWdyYXRlZCBpbnRvIHRoZSBsYXJnZXIgTGludXgga2VybmVsIG5ldHdvcmtpbmcgZnJhbWV3b3JrLiBJJiMzOTtsbCBiZSBub3RpbmcgYW55IGFyZWFzIHRoYXQgYXJlIHVuY2xlYXIsIG9yIGFueSBwb3RlbnRpYWwgaXNzdWVzIG9yIGltcHJvdmVtZW50cyB0aGF0IEkgY2FuIGlkZW50aWZ5IGFzIEkgZ28gdGhyb3VnaCB0aGUgb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY3RwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBTQ1RQIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0bWVudWNvbmZpZyBJUF9TQ1RQXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtUaGUgU0NUUCBQcm90b2NvbFwmIzM0O1xuICAgODpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA5Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEExXG4gIDEwOlx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEEyNTZcbiAgMTE6XHRcdHNlbGVjdCBDUllQVE9fTElCX1VUSUxTXG4gIDEyOlx0XHRzZWxlY3QgTkVUX0NSQzMyQ1xuICAxMzpcdFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXG4gIDE0Olx0XHRoZWxwXG4gIDE1Olx0XHQgIFN0cmVhbSBDb250cm9sIFRyYW5zbWlzc2lvbiBQcm90b2NvbFxuICAxNjpcdFxuICAxNzpcdFx0ICBGcm9tIFJGQyAyOTYwIFx1MDAzY2h0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzI5NjAudHh0XHUwMDNlLlxuICAxODpcdFxuICAxOTpcdFx0ICBcJiMzNDtTQ1RQIGlzIGEgcmVsaWFibGUgdHJhbnNwb3J0IHByb3RvY29sIG9wZXJhdGluZyBvbiB0b3Agb2YgYVxuICAyMDpcdFx0ICBjb25uZWN0aW9ubGVzcyBwYWNrZXQgbmV0d29yayBzdWNoIGFzIElQLiAgSXQgb2ZmZXJzIHRoZSBmb2xsb3dpbmdcbiAgMjE6XHRcdCAgc2VydmljZXMgdG8gaXRzIHVzZXJzOlxuICAyMjpcdFxuICAyMzpcdFx0ICAtLSBhY2tub3dsZWRnZWQgZXJyb3ItZnJlZSBub24tZHVwbGljYXRlZCB0cmFuc2ZlciBvZiB1c2VyIGRhdGEsXG4gIDI0Olx0XHQgIC0tIGRhdGEgZnJhZ21lbnRhdGlvbiB0byBjb25mb3JtIHRvIGRpc2NvdmVyZWQgcGF0aCBNVFUgc2l6ZSxcbiAgMjU6XHRcdCAgLS0gc2VxdWVuY2VkIGRlbGl2ZXJ5IG9mIHVzZXIgbWVzc2FnZXMgd2l0aGluIG11bHRpcGxlIHN0cmVhbXMsXG4gIDI2Olx0XHQgIHdpdGggYW4gb3B0aW9uIGZvciBvcmRlci1vZi1hcnJpdmFsIGRlbGl2ZXJ5IG9mIGluZGl2aWR1YWwgdXNlclxuICAyNzpcdFx0ICBtZXNzYWdlcyxcbiAgMjg6XHRcdCAgLS0gb3B0aW9uYWwgYnVuZGxpbmcgb2YgbXVsdGlwbGUgdXNlciBtZXNzYWdlcyBpbnRvIGEgc2luZ2xlIFNDVFBcbiAgMjk6XHRcdCAgcGFja2V0LCBhbmRcbiAgMzA6XHRcdCAgLS0gbmV0d29yay1sZXZlbCBmYXVsdCB0b2xlcmFuY2UgdGhyb3VnaCBzdXBwb3J0aW5nIG9mIG11bHRpLVxuICAzMTpcdFx0ICBob21pbmcgYXQgZWl0aGVyIG9yIGJvdGggZW5kcyBvZiBhbiBhc3NvY2lhdGlvbi5cJiMzNDtcbiAgMzI6XHRcbiAgMzM6XHRcdCAgVG8gY29tcGlsZSB0aGlzIHByb3RvY29sIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuICAzNDpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2N0cC4gRGVidWcgbWVzc2FnZXMgYXJlIGhhbmRsZWQgYnkgdGhlXG4gIDM1Olx0XHQgIGtlcm5lbCYjMzk7cyBkeW5hbWljIGRlYnVnZ2luZyBmcmFtZXdvcmsuXG4gIDM2Olx0XG4gIDM3Olx0XHQgIElmIGluIGRvdWJ0LCBzYXkgTi5cbiAgMzg6XHRcbiAgMzk6XHRpZiBJUF9TQ1RQXG4gIDQwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg2NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipUcmFjaW5nIHRoZSBTQ1RQIFNlbmQgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUgU0NUUCBzZW5kIHBhdGgsIHNwZWNpZmljYWxseSBob3cgZGF0YSBhY3R1YWxseSBnZXRzIHNlbnQgb3V0IGZyb20gdGhlIHVzZXIgc3BhY2Ugc29ja2V0IGxheWVyLiBNeSBzdGFydGluZyBwb2ludCBpcyBgc2N0cF9zZW5kbXNnX3RvX2Fzb2NgLiBJIGtub3cgdGhhdCBmdW5jdGlvbiBpcyBjcnVjaWFsLCBhcyBpdOKAmXMgdGhlIHdvcmtob3JzZSBjYWxsZWQgYnkgdGhlIGxhcmdlciBgc2N0cF9zZW5kbXNnYCBmdW5jdGlvbi4gVGhlIGtleSBoZXJlIGlzIHRvIGNvbmZpcm0gaG93IHdlIGdldCBmcm9tIGEgc3RhbmRhcmQgYHNlbmRtc2dgIG9yIGBzZW5kdG9gIHN5c2NhbGwg4oCTIHRoZSB0eXBpY2FsIHVzZXIgaW50ZXJhY3Rpb24g4oCTIHRvIHRoYXQgY29yZSBgc2N0cF9zZW5kbXNnX3RvX2Fzb2NgIGZ1bmN0aW9uLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgc3RhbmRhcmQgc29ja2V0IHN5c2NhbGxzIGV2ZW50dWFsbHkgbGVhZCB0byBgc2N0cF9zZW5kbXNnYCwgYnV0IEkgbmVlZCB0byBtYXAgdGhlIHBhdGggdG8gdmVyaWZ5LgoKVG8gbmFpbCB0aGlzIGRvd24sIEkmIzM5O2xsIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIEkmIzM5O2xsIG5lZWQgdG8gb3BlbiBgbmV0L3NjdHAvc29ja2V0LmNgIGFuZCBzZWFyY2ggZm9yIGFsbCBjYWxsIHNpdGVzIG9mIGBzY3RwX3NlbmRtc2dfdG9fYXNvY2AuIEtub3dpbmcgdGhlIGNhbGxlcnMgd2lsbCBoZWxwIG1lIHZpc3VhbGl6ZSB0aGUgZW50aXJlIHNlbmRpbmcgcGlwZWxpbmUsIGZyb20gdGhlIHN5c2NhbGwgZW50cnkgcG9pbnQgcmlnaHQgZG93biB0byB0aGlzIGNvcmUgc2VuZGluZyBmdW5jdGlvbi4gVGhhdCYjMzk7cyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IFNDVFAgaGFuZGxlcyBkYXRhIHRyYW5zbWlzc2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2N0cF9zZW5kbXNnX3RvX2Fzb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2N0cCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2N0cC9zb2NrZXQuYz0xNzUxPXN0YXRpYyBpbnQgc2N0cF9zZW5kbXNnX2NoZWNrX3NmbGFncyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbi0tXG5uZXQvc2N0cC9zb2NrZXQuYy0xNzg4LVxubmV0L3NjdHAvc29ja2V0LmM6MTc4OTpzdGF0aWMgaW50IHNjdHBfc2VuZG1zZ190b19hc29jKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxubmV0L3NjdHAvc29ja2V0LmMtMTc5MC1cdFx0XHRcdHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IG1zZ19sZW4sXG4tLVxubmV0L3NjdHAvc29ja2V0LmM9MTk0Nz1zdGF0aWMgaW50IHNjdHBfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IG1zZ19sZW4pXG4tLVxubmV0L3NjdHAvc29ja2V0LmMtMTk4Ny1cbm5ldC9zY3RwL3NvY2tldC5jOjE5ODg6XHRcdFx0ZXJyID0gc2N0cF9zZW5kbXNnX3RvX2Fzb2MoYXNvYywgbXNnLCBtc2dfbGVuLFxubmV0L3NjdHAvc29ja2V0LmMtMTk4OS1cdFx0XHRcdFx0XHQgICBOVUxMLCBzaW5mbyk7XG4tLVxubmV0L3NjdHAvc29ja2V0LmMtMTk5NC1cbm5ldC9zY3RwL3NvY2tldC5jOjE5OTU6XHRcdFx0Lyogc2N0cF9zZW5kbXNnX3RvX2Fzb2MoKSBtYXkgaGF2ZSByZWxlYXNlZCB0aGUgc29ja2V0XG5uZXQvc2N0cC9zb2NrZXQuYy0xOTk2LVx0XHRcdCAqIGxvY2sgKHNjdHBfd2FpdF9mb3Jfc25kYnVmKSwgZHVyaW5nIHdoaWNoIG90aGVyXG4tLVxubmV0L3NjdHAvc29ja2V0LmMtMjA0My1cdC8qIFNlbmQgbXNnIHRvIHRoZSBhc29jICovXG5uZXQvc2N0cC9zb2NrZXQuYzoyMDQ0Olx0ZXJyID0gc2N0cF9zZW5kbXNnX3RvX2Fzb2MoYXNvYywgbXNnLCBtc2dfbGVuLCB0cmFuc3BvcnQsIHNpbmZvKTtcbm5ldC9zY3RwL3NvY2tldC5jLTIwNDUtXHRpZiAoZXJyIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnIgIT0gLUVTUkNIIFx1MDAyNlx1MDAyNiBuZXcpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA5OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3MDkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHNjdHBfd2FpdF9mb3JfY29ubmVjdGAqKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGNvcmUgb2YgdGhpcyBTQ1RQIGNvbm5lY3Rpb24gbG9naWMuIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gYG5ldC9zY3RwL3NvY2tldC5jYCBhbmQgc3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoaW4gYHNjdHBfd2FpdF9mb3JfY29ubmVjdGAuIFRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWw7IGl0JiMzOTtzIHRoZSBnYXRla2VlcGVyLCB0aGUgcG9pbnQgd2hlcmUgdGhlIGFwcGxpY2F0aW9uIGNvZGUgaXMgYmxvY2tlZCB1bnRpbCB0aGUgU0NUUCBjb25uZWN0aW9uIGlzIGFjdHVhbGx5IGVzdGFibGlzaGVkLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBoZXJlLCBlc3BlY2lhbGx5IGFyb3VuZCB0aGUgYmxvY2tpbmcgYmVoYXZpb3IsIHRoZSBwb3RlbnRpYWwgZm9yIHNpZ25hbHMsIGFuZCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSB1bmRlcmx5aW5nIFNDVFAgc3RhdGUgdHJhbnNpdGlvbnMuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIHByZWNpc2UgbWVjaGFuaXNtcyB1c2VkIGZvciB3YWl0aW5nOiBhcmUgd2UgdGFsa2luZyBhYm91dCBhIHNpbXBsZSBzbGVlcCwgYSBwb2xsLWJhc2VkIGFwcHJvYWNoLCBvciBzb21ldGhpbmcgbW9yZSBpbnRyaWNhdGU/IElzIHRoZXJlIGEgc3BpbmxvY2sgaW52b2x2ZWQ/IEnigJltIGFsc28gaW50ZXJlc3RlZCBpbiBob3cgaXQgaGFuZGxlcyBlcnJvcnMgYW5kIHRpbWVvdXRzIOKAkyBhbGwgdGhvc2UgY29ybmVyIGNhc2VzIHdoZXJlIHRoZSBjb25uZWN0aW9uIGNhbiBmYWlsLiBVbmRlcnN0YW5kaW5nIHRoaXMgd2FpdCBmdW5jdGlvbiBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgbGF0ZW5jeSBpbnZvbHZlZCB3aXRoIGVzdGFibGlzaGluZyBhbiBTQ1RQIGNvbm5lY3Rpb24sIGFuZCBpdCBzaG91bGQgcmV2ZWFsIHRoZSBib3R0bGVuZWNrcyB3aXRoaW4gdGhlIGRyaXZlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2N0cF93YWl0X2Zvcl9jb25uZWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjdHAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jPTg3Mj1zdGF0aWMgdm9pZCBzY3RwX2NtZF9uZXdfc3RhdGUoc3RydWN0IHNjdHBfY21kX3NlcSAqY21kcyxcbi0tXG5uZXQvc2N0cC9zbV9zaWRlZWZmZWN0LmMtOTE1LVx0XHQvKiBXYWtlIHVwIGFueSBwcm9jZXNzZXMgd2FpdGluZyBpbiB0aGUgYXNvYyYjMzk7cyB3YWl0IHF1ZXVlIGluXG5uZXQvc2N0cC9zbV9zaWRlZWZmZWN0LmM6OTE2Olx0XHQgKiBzY3RwX3dhaXRfZm9yX2Nvbm5lY3QoKSBvciBzY3RwX3dhaXRfZm9yX3NuZGJ1ZigpLlxubmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jLTkxNy1cdFx0ICovXG4tLVxubmV0L3NjdHAvc29ja2V0LmM9Nzc9c3RhdGljIGludCBzY3RwX3dhaXRfZm9yX3BhY2tldChzdHJ1Y3Qgc29jayAqc2ssIGludCAqZXJyLCBsb25nICp0aW1lb19wKTtcbm5ldC9zY3RwL3NvY2tldC5jOjc4OnN0YXRpYyBpbnQgc2N0cF93YWl0X2Zvcl9jb25uZWN0KHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICosIGxvbmcgKnRpbWVvX3ApO1xubmV0L3NjdHAvc29ja2V0LmMtNzktc3RhdGljIGludCBzY3RwX3dhaXRfZm9yX2FjY2VwdChzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW8pO1xuLS1cbm5ldC9zY3RwL3NvY2tldC5jPTExNjc9c3RhdGljIGludCBfX3NjdHBfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkciAqa2FkZHJzLFxuLS1cbm5ldC9zY3RwL3NvY2tldC5jLTEyNDctXHR0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIGZsYWdzIFx1MDAyNiBPX05PTkJMT0NLKTtcbm5ldC9zY3RwL3NvY2tldC5jOjEyNDg6XHRyZXR1cm4gc2N0cF93YWl0X2Zvcl9jb25uZWN0KGFzb2MsIFx1MDAyNnRpbWVvKTtcbm5ldC9zY3RwL3NvY2tldC5jLTEyNDktXG4tLVxubmV0L3NjdHAvc29ja2V0LmM9MTc4OT1zdGF0aWMgaW50IHNjdHBfc2VuZG1zZ190b19hc29jKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxuLS1cbm5ldC9zY3RwL3NvY2tldC5jLTE4NDgtXHRcdFx0c2N0cF9hc3NvY2lhdGlvbl9ob2xkKGFzb2MpO1xubmV0L3NjdHAvc29ja2V0LmM6MTg0OTpcdFx0XHRlcnIgPSBzY3RwX3dhaXRfZm9yX2Nvbm5lY3QoYXNvYywgXHUwMDI2dGltZW8pO1xubmV0L3NjdHAvc29ja2V0LmMtMTg1MC1cdFx0XHRkZWFkID0gYXNvYy1cdTAwM2ViYXNlLmRlYWQ7XG4tLVxubmV0L3NjdHAvc29ja2V0LmMtMTg4OC1cdFx0dGltZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCBtc2ctXHUwMDNlbXNnX2ZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xubmV0L3NjdHAvc29ja2V0LmM6MTg4OTpcdFx0c2N0cF93YWl0X2Zvcl9jb25uZWN0KGFzb2MsIFx1MDAyNnRpbWVvKTtcbm5ldC9zY3RwL3NvY2tldC5jLTE4OTAtXHR9XG4tLVxubmV0L3NjdHAvc29ja2V0LmM9OTM4NT1zdGF0aWMgYm9vbCBzY3RwX3dyaXRlYWJsZShjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3NjdHAvc29ja2V0LmMtOTM5Mi0gKi9cbm5ldC9zY3RwL3NvY2tldC5jOjkzOTM6c3RhdGljIGludCBzY3RwX3dhaXRfZm9yX2Nvbm5lY3Qoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsIGxvbmcgKnRpbWVvX3ApXG5uZXQvc2N0cC9zb2NrZXQuYy05Mzk0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDk6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc0NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDM0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXR3b3JraW5nIFBhdGNoIGZvciBTQ1RQIEludGVybGVhdmUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGltcGFjdHMgdGhlIGBzY3RwX3NlbmRtc2dfdG9fYXNvY2AgZnVuY3Rpb24uIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBwaWVjZSBvZiBTQ1RQJiMzOTtzIHNlbmRpbmcgbG9naWMsIGFuZCB0aGUgbW9kaWZpY2F0aW9uIHNwZWNpZmljYWxseSBraWNrcyBpbiB3aGVuIGBhc29jLSZndDtlcC0mZ3Q7aW50bF9lbmFibGVgIGlzIHNldCDigJMgd2hpY2gsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgU0NUUCBzdHJlYW0gaW50ZXJsZWF2ZSBmZWF0dXJlLiBUaGUgcGF0Y2ggaXMgaW5zZXJ0aW5nIGFuIGBhc29jYCByZWZlcmVuY2UgYmVmb3JlIGBzY3RwX3dhaXRfZm9yX2Nvbm5lY3RgIGFuZCBjaGVja2luZyBpZiBgYXNvYy0mZ3Q7YmFzZS5kZWFkYCBhZnRlciBpdC4KCkZpcnN0IHRoaW5ncyBmaXJzdCwgaXMgdGhpcyBldmVuICpyZWFjaGFibGUqIGluIGEgdHlwaWNhbCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBBYnNvbHV0ZWx5LiBTQ1RQIGlzIHN0YW5kYXJkIHNvY2tldCBuZXR3b3JraW5nIHN0dWZmLCBBRl9JTkVUL0FGX0lORVQ2LCBJUFBST1RPX1NDVFAg4oCTIGl0IHNob3VsZCBiZSBhY2Nlc3NpYmxlLgoKTm93LCBsZXQmIzM5O3MgYXNzZXNzIGl0cyAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IHN0YXR1cy4gSGl0dGluZyBgbmV0L3NjdHAvc29ja2V0LmNgIGFuZCBzcGVjaWZpY2FsbHkgYHNjdHBfc2VuZG1zZ190b19hc29jYCBpcyBhIGNsZWFyIHBvc2l0aXZlIHNpZ24uIEl0JiMzOTtzIGNvcmUgbmV0d29ya2luZyBwcm90b2NvbCBjb2RlLCBhbmQgaXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUuICBTbywgV29ydGhGdXp6aW5nID0gdHJ1ZS4gIE5vIGRvdWJ0IGFib3V0IGl0LgoKTmV4dCwgdGhlIGZvY3VzIHN5bWJvbHMuIFdlIGhhdmUgYHNjdHBfc2VuZG1zZ190b19hc29jYCwgd2hpY2ggaXMgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uLCBwbHVzIGBzY3RwX3NlbmRtc2dgLCBpdHMgY2FsbGVyIGFuZCBsaWtlbHkgdGhlIGVudHJ5cG9pbnQgZm9yIG91ciBmdXp6aW5nLCBhbmQgYHNjdHBfd2FpdF9mb3JfY29ubmVjdGAsIHdoaWNoIGlzIGEgaGVscGVyIGZ1bmN0aW9uIHRoYXQgdGhpcyBwYXRjaCBpbnRlcmFjdHMgd2l0aC4gIFRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0byB0YXJnZXQuCgpBbmQgZmluYWxseSwgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFdlIG5lZWQgYElQX1NDVFBgLCB3aGljaCwgY29udmVuaWVudGx5LCBkZXBlbmRzIG9uIGBJTkVUYC4gT2theSwgZWFzeSBlbm91Z2ggdG8gc2F0aXNmeSB0aG9zZSBkZXBlbmRlbmNpZXMuIEkga25vdyB3aGVyZSB0aGF0JiMzOTtzIGxvY2F0ZWQsIHRvby4gQ2hlY2tpbmcgYG5ldC9zY3RwL0tjb25maWdgIGNvbmZpcm1zIGBJUF9TQ1RQYCBkZXBlbmRzIG9uIGBJTkVUYCBhbmQgaXMgaW4gdGhlIGNvcnJlY3QgbG9jYXRpb24uIExldCYjMzk7cyBtYWtlIHN1cmUgaXQmIzM5O3MgY29tcGlsZWQgd2l0aCBgbmV0L3NjdHAvTWFrZWZpbGVgLgoKT2theSwgSSB0aGluayB3ZSBoYXZlIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGF0Y2ggYW5kIGl0cyBpbXBsaWNhdGlvbnMgZm9yIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA5OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NjdHAuKnNvY2tldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY3RwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY3RwL2lwdjYuYz01Mjk9c3RhdGljIHZvaWQgc2N0cF92Nl9mcm9tX3NrYih1bmlvbiBzY3RwX2FkZHIgKmFkZHIsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3NjdHAvaXB2Ni5jLTU0OC1cbm5ldC9zY3RwL2lwdjYuYzo1NDk6LyogSW5pdGlhbGl6ZSBhbiBzY3RwX2FkZHIgZnJvbSBhIHNvY2tldC4gKi9cbm5ldC9zY3RwL2lwdjYuYy01NTAtc3RhdGljIHZvaWQgc2N0cF92Nl9mcm9tX3NrKHVuaW9uIHNjdHBfYWRkciAqYWRkciwgc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9zY3RwL2lwdjYuYz0xMDE1PXN0YXRpYyBpbnQgc2N0cF9pbmV0Nl9zdXBwb3J0ZWRfYWRkcnMoY29uc3Qgc3RydWN0IHNjdHBfc29jayAqb3B0LFxuLS1cbm5ldC9zY3RwL2lwdjYuYy0xMDI2LS8qIEhhbmRsZSBTQ1RQX0lfV0FOVF9NQVBQRURfVjRfQUREUiBmb3IgZ2V0cGVlcm5hbWUoKSBhbmQgZ2V0c29ja25hbWUoKSAqL1xubmV0L3NjdHAvaXB2Ni5jOjEwMjc6c3RhdGljIGludCBzY3RwX2dldG5hbWUoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICp1YWRkcixcbm5ldC9zY3RwL2lwdjYuYy0xMDI4LVx0XHRcdGludCBwZWVyKVxuLS1cbm5ldC9zY3RwL3Byb3RvY29sLmM9MjE1PXN0YXRpYyB2b2lkIHNjdHBfdjRfZnJvbV9za2IodW5pb24gc2N0cF9hZGRyICphZGRyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9zY3RwL3Byb3RvY29sLmMtMjMzLVxubmV0L3NjdHAvcHJvdG9jb2wuYzoyMzQ6LyogSW5pdGlhbGl6ZSBhbiBzY3RwX2FkZHIgZnJvbSBhIHNvY2tldC4gKi9cbm5ldC9zY3RwL3Byb3RvY29sLmMtMjM1LXN0YXRpYyB2b2lkIHNjdHBfdjRfZnJvbV9zayh1bmlvbiBzY3RwX2FkZHIgKmFkZHIsIHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvc2N0cC9wcm90b2NvbC5jPTE0NzY9c3RhdGljIF9faW5pdCBpbnQgc2N0cF9pbml0KHZvaWQpXG4tLVxubmV0L3NjdHAvcHJvdG9jb2wuYy0xNDk5LVxubmV0L3NjdHAvcHJvdG9jb2wuYzoxNTAwOlx0c3RhdHVzID0gcGVyY3B1X2NvdW50ZXJfaW5pdChcdTAwMjZzY3RwX3NvY2tldHNfYWxsb2NhdGVkLCAwLCBHRlBfS0VSTkVMKTtcbm5ldC9zY3RwL3Byb3RvY29sLmMtMTUwMS1cdGlmIChzdGF0dXMpXG4tLVxubmV0L3NjdHAvcHJvdG9jb2wuYy0xNjY1LWVycl9laGFzaF9hbGxvYzpcbm5ldC9zY3RwL3Byb3RvY29sLmM6MTY2NjpcdHBlcmNwdV9jb3VudGVyX2Rlc3Ryb3koXHUwMDI2c2N0cF9zb2NrZXRzX2FsbG9jYXRlZCk7XG5uZXQvc2N0cC9wcm90b2NvbC5jLTE2NjctZXJyX3BlcmNwdV9jb3VudGVyX2luaXQ6XG4tLVxubmV0L3NjdHAvcHJvdG9jb2wuYz0xNjc1PXN0YXRpYyBfX2V4aXQgdm9pZCBzY3RwX2V4aXQodm9pZClcbi0tXG5uZXQvc2N0cC9wcm90b2NvbC5jLTE3MDQtXG5uZXQvc2N0cC9wcm90b2NvbC5jOjE3MDU6XHRwZXJjcHVfY291bnRlcl9kZXN0cm95KFx1MDAyNnNjdHBfc29ja2V0c19hbGxvY2F0ZWQpO1xubmV0L3NjdHAvcHJvdG9jb2wuYy0xNzA2LVxuLS1cbm5ldC9zY3RwL3NvY2tldC5jPTkyPXN0YXRpYyBpbnQgc2N0cF9zb2NrX21pZ3JhdGUoc3RydWN0IHNvY2sgKm9sZHNrLCBzdHJ1Y3Qgc29jayAqbmV3c2ssXG5uZXQvc2N0cC9zb2NrZXQuYy05My1cdFx0XHQgICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc3NvYyxcbm5ldC9zY3RwL3NvY2tldC5jOjk0Olx0XHRcdCAgICAgZW51bSBzY3RwX3NvY2tldF90eXBlIHR5cGUpO1xubmV0L3NjdHAvc29ja2V0LmMtOTUtXG4tLVxubmV0L3NjdHAvc29ja2V0LmM9OTg9c3RhdGljIERFRklORV9QRVJfQ1BVKGludCwgc2N0cF9tZW1vcnlfcGVyX2NwdV9md19hbGxvYyk7XG5uZXQvc2N0cC9zb2NrZXQuYzo5OTpzdHJ1Y3QgcGVyY3B1X2NvdW50ZXIgc2N0cF9zb2NrZXRzX2FsbG9jYXRlZDtcbm5ldC9zY3RwL3NvY2tldC5jLTEwMC1cbi0tXG5uZXQvc2N0cC9zb2NrZXQuYz0xOTQ3PXN0YXRpYyBpbnQgc2N0cF9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbXNnX2xlbilcbi0tXG5uZXQvc2N0cC9zb2NrZXQuYy0xOTk0LVxubmV0L3NjdHAvc29ja2V0LmM6MTk5NTpcdFx0XHQvKiBzY3RwX3NlbmRtc2dfdG9fYXNvYygpIG1heSBoYXZlIHJlbGVhc2VkIHRoZSBzb2NrZXRcbm5ldC9zY3RwL3NvY2tldC5jLTE5OTYtXHRcdFx0ICogbG9jayAoc2N0cF93YWl0X2Zvcl9zbmRidWYpLCBkdXJpbmcgd2hpY2ggb3RoZXJcbi0tXG5uZXQvc2N0cC9zb2NrZXQuYz0yODQ0PXN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2RlbGF5ZWRfYWNrKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvc2N0cC9zb2NrZXQuYy0yODUzLVx0XHRcdFx0ICAgIFwmIzM0OyVzIChwaWQgJWQpIFwmIzM0O1xubmV0L3NjdHAvc29ja2V0LmM6Mjg1NDpcdFx0XHRcdCAgICBcJiMzNDtVc2Ugb2Ygc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgaW4gZGVsYXllZF9hY2sgc29ja2V0IG9wdGlvbi5cXG5cJiMzNDtcbm5ldC9zY3RwL3NvY2tldC5jLTI4NTUtXHRcdFx0XHQgICAgXCYjMzQ7VXNlIHN0cnVjdCBzY3RwX3NhY2tfaW5mbyBpbnN0ZWFkXFxuXCYjMzQ7LFxuLS1cbm5ldC9zY3RwL3NvY2tldC5jPTQ4MjA9c3RhdGljIGludCBzY3RwX2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsXG4tLVxubmV0L3NjdHAvc29ja2V0LmMtNDgzOC1cbm5ldC9zY3RwL3NvY2tldC5jOjQ4Mzk6aW50IHNjdHBfaW5ldF9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkcixcbm5ldC9zY3RwL3NvY2tldC5jLTQ4NDAtXHRcdCAgICAgIGludCBhZGRyX2xlbiwgaW50IGZsYWdzKVxuLS1cbm5ldC9zY3RwL3NvY2tldC5jPTQ4NjE9c3RhdGljIHN0cnVjdCBzb2NrICpzY3RwX2Nsb25lX3NvY2soc3RydWN0IHNvY2sgKnNrLFxubmV0L3NjdHAvc29ja2V0LmMtNDg2Mi1cdFx0XHRcdCAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbm5ldC9zY3RwL3NvY2tldC5jOjQ4NjM6XHRcdFx0XHQgICAgZW51bSBzY3RwX3NvY2tldF90eXBlIHR5cGUpXG5uZXQvc2N0cC9zb2NrZXQuYy00ODY0LXtcbi0tXG5uZXQvc2N0cC9zb2NrZXQuYz02MTMwPXN0YXRpYyBpbnQgc2N0cF9nZXRzb2Nrb3B0X2RlbGF5ZWRfYWNrKHN0cnVjdCBzb2NrICpzaywgaW50IGxlbixcbi0tXG5uZXQvc2N0cC9zb2NrZXQuYy02MTQ1LVx0XHRcdFx0ICAgIFwmIzM0OyVzIChwaWQgJWQpIFwmIzM0O1xubmV0L3NjdHAvc29ja2V0LmM6NjE0NjpcdFx0XHRcdCAgICBcJiMzNDtVc2Ugb2Ygc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgaW4gZGVsYXllZF9hY2sgc29ja2V0IG9wdGlvbi5cXG5cJiMzNDtcbm5ldC9zY3RwL3NvY2tldC5jLTYxNDctXHRcdFx0XHQgICAgXCYjMzQ7VXNlIHN0cnVjdCBzY3RwX3NhY2tfaW5mbyBpbnN0ZWFkXFxuXCYjMzQ7LFxuLS1cbm5ldC9zY3RwL3NvY2tldC5jPTg2MDA9c3RhdGljIGludCBzY3RwX2xpc3Rlbl9zdGFydChzdHJ1Y3Qgc29jayAqc2ssIGludCBiYWNrbG9nKVxuLS1cbm5ldC9zY3RwL3NvY2tldC5jLTg2NTQtICovXG5uZXQvc2N0cC9zb2NrZXQuYzo4NjU1OmludCBzY3RwX2luZXRfbGlzdGVuKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBiYWNrbG9nKVxubmV0L3NjdHAvc29ja2V0LmMtODY1Ni17XG4tLVxubmV0L3NjdHAvc29ja2V0LmMtODcxNi0gKi9cbm5ldC9zY3RwL3NvY2tldC5jOjg3MTc6X19wb2xsX3Qgc2N0cF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBwb2xsX3RhYmxlICp3YWl0KVxubmV0L3NjdHAvc29ja2V0LmMtODcxOC17XG4tLVxubmV0L3NjdHAvc29ja2V0LmM9OTUzMz1zdGF0aWMgaW50IHNjdHBfc29ja19taWdyYXRlKHN0cnVjdCBzb2NrICpvbGRzaywgc3RydWN0IHNvY2sgKm5ld3NrLFxubmV0L3NjdHAvc29ja2V0LmMtOTUzNC1cdFx0XHQgICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc3NvYyxcbm5ldC9zY3RwL3NvY2tldC5jOjk1MzU6XHRcdFx0ICAgICBlbnVtIHNjdHBfc29ja2V0X3R5cGUgdHlwZSlcbm5ldC9zY3RwL3NvY2tldC5jLTk1MzYte1xuLS1cbm5ldC9zY3RwL3NvY2tldC5jPTk2NTk9c3RydWN0IHByb3RvIHNjdHBfcHJvdCA9IHtcbi0tXG5uZXQvc2N0cC9zb2NrZXQuYy05NjkzLVxubmV0L3NjdHAvc29ja2V0LmM6OTY5NDpcdC5zb2NrZXRzX2FsbG9jYXRlZCA9IFx1MDAyNnNjdHBfc29ja2V0c19hbGxvY2F0ZWQsXG5uZXQvc2N0cC9zb2NrZXQuYy05Njk1LX07XG4tLVxubmV0L3NjdHAvc29ja2V0LmM9OTcxND1zdHJ1Y3QgcHJvdG8gc2N0cHY2X3Byb3QgPSB7XG4tLVxubmV0L3NjdHAvc29ja2V0LmMtOTc0OS1cbm5ldC9zY3RwL3NvY2tldC5jOjk3NTA6XHQuc29ja2V0c19hbGxvY2F0ZWQgPSBcdTAwMjZzY3RwX3NvY2tldHNfYWxsb2NhdGVkLFxubmV0L3NjdHAvc29ja2V0LmMtOTc1MS19O1xuLS1cbm5ldC9zY3RwL3VscHF1ZXVlLmMtOS0gKlxubmV0L3NjdHAvdWxwcXVldWUuYzoxMDogKiBUaGlzIGFic3RyYWN0aW9uIGNhcnJpZXMgc2N0cCBldmVudHMgdG8gdGhlIFVMUCAoc29ja2V0cykuXG5uZXQvc2N0cC91bHBxdWV1ZS5jLTExLSAqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA5OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjY3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIFNDVFAgQnVpbGQgUHJvY2VzcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBgc29ja2V0Lm9gIGlzIGNvbnN0cnVjdGVkIHdpdGhpbiB0aGUgU0NUUCBzdWJzeXN0ZW0uIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIGFsbW9zdCBjZXJ0YWlubHkgdGhlIGBuZXQvc2N0cC9NYWtlZmlsZWAuIFRoaXMgaXMgd2hlcmUgdGhlIGJ1aWxkIHByb2Nlc3MgaXMgb3JjaGVzdHJhdGVkLCBhbmQgaXQmIzM5O2xsIGdpdmUgbWUgdGhlIGRlcGVuZGVuY3kgY2hhaW4sIHRoZSBjb21waWxlciBmbGFncywgYW5kIGFueSBsaW5rLXRpbWUgbWFnaWMgdGhhdCYjMzk7cyBnb2luZyBvbi4gSSBleHBlY3QgdG8gZmluZCB0aGUgcnVsZXMgdGhhdCB0aWUgdGhlIHNvdXJjZSBmaWxlcyB0byB0aGUgb2JqZWN0IGZpbGUgYHNvY2tldC5vYCwgYWxvbmcgd2l0aCBhbnkgcmVsZXZhbnQgaW5jbHVkZSBwYXRocyBhbmQgcHJlcHJvY2Vzc29yIGRlZmluaXRpb25zLiBJ4oCZbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gd2hldGhlciB0aGVyZSBhcmUgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9ucyByZWxhdGVkIHRvIHNwZWNpZmljIFNDVFAgZmVhdHVyZXMgb3Iga2VybmVsIGNvbmZpZ3VyYXRpb25zIOKAkyB0aGF04oCZcyBhbHdheXMgYSBnb29kIHNwb3QgZm9yIHN1YnRsZSBidWdzLiBUaGlzIE1ha2VmaWxlIHNob3VsZCBwcm92aWRlIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBidWlsZCBwcm9jZXNzIGZvciB0aGF0IG9iamVjdCBmaWxlLiBMZXQmIzM5O3Mgc2VlIGlmIGl04oCZcyBhcyBzdHJhaWdodGZvcndhcmQgYXMgaXQgc2hvdWxkIGJlLCBvciBpZiB0aGVyZSBhcmUgYW55IGdvdGNoYXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY3RwL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZvciBTQ1RQIHN1cHBvcnQgY29kZS5cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0b2JqLSQoQ09ORklHX0lQX1NDVFApICYjNDM7PSBzY3RwLm9cbiAgIDc6XHRvYmotJChDT05GSUdfSU5FVF9TQ1RQX0RJQUcpICYjNDM7PSBzY3RwX2RpYWcub1xuICAgODpcdFxuICAgOTpcdHNjdHAteSA6PSBzbV9zdGF0ZXRhYmxlLm8gc21fc3RhdGVmdW5zLm8gc21fc2lkZWVmZmVjdC5vIFxcXG4gIDEwOlx0XHQgIHByb3RvY29sLm8gZW5kcG9pbnRvbGEubyBhc3NvY2lvbGEubyBcXFxuICAxMTpcdFx0ICB0cmFuc3BvcnQubyBjaHVuay5vIHNtX21ha2VfY2h1bmsubyB1bHBldmVudC5vIFxcXG4gIDEyOlx0XHQgIGlucXVldWUubyBvdXRxdWV1ZS5vIHVscHF1ZXVlLm8gXFxcbiAgMTM6XHRcdCAgdHNubWFwLm8gYmluZF9hZGRyLm8gc29ja2V0Lm8gcHJpbWl0aXZlLm8gXFxcbiAgMTQ6XHRcdCAgb3V0cHV0Lm8gaW5wdXQubyBkZWJ1Zy5vIHN0cmVhbS5vIGF1dGgubyBcXFxuICAxNTpcdFx0ICBvZmZsb2FkLm8gc3RyZWFtX3NjaGVkLm8gc3RyZWFtX3NjaGVkX3ByaW8ubyBcXFxuICAxNjpcdFx0ICBzdHJlYW1fc2NoZWRfcnIubyBzdHJlYW1fc2NoZWRfZmMubyBcXFxuICAxNzpcdFx0ICBzdHJlYW1faW50ZXJsZWF2ZS5vXG4gIDE4Olx0XG4gIDE5Olx0c2N0cF9kaWFnLXkgOj0gZGlhZy5vXG4gIDIwOlx0XG4gIDIxOlx0c2N0cC0kKENPTkZJR19TQ1RQX0RCR19PQkpDTlQpICYjNDM7PSBvYmpjbnQub1xuICAyMjpcdHNjdHAtJChDT05GSUdfUFJPQ19GUykgJiM0Mzs9IHByb2Mub1xuICAyMzpcdHNjdHAtJChDT05GSUdfU1lTQ1RMKSAmIzQzOz0gc3lzY3RsLm9cbiAgMjQ6XHRcbiAgMjU6XHRzY3RwLSQoc3Vic3QgbSx5LCQoQ09ORklHX0lQVjYpKVx0JiM0Mzs9IGlwdjYub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwOTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTM4OAoJCQkJCQkJb3V0cHV0OiAxNTQKCQkJCQkJCXRob3VnaHRzOiAxMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSVBfU0NUUCBTb2NrZXQgTW9kdWxlIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIGBJUF9TQ1RQYCBpcyBidWlsZGluZyBgc29ja2V0Lm9gLiBUaW1lIHRvIG1ldGljdWxvdXNseSByZXZpZXcgZXZlcnl0aGluZy4gRmlyc3QsIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyB0aGlzIG1vZHVsZSB3b3J0aCBmdXp6aW5nPyBUaGUgYW5zd2VyLCB1bmVxdWl2b2NhbGx5LCBpcyAqdHJ1ZSouIFdlJiMzOTt2ZSBkZWVtZWQgaXQgYSBoaWdoLXZhbHVlIHRhcmdldC4gTmV4dCwgd2UgaWRlbnRpZmllZCB0aGUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0czogYHNjdHBfc2VuZG1zZ190b19hc29jYCwgYHNjdHBfc2VuZG1zZ2AsIGFuZCBgc2N0cF93YWl0X2Zvcl9jb25uZWN0YC4gVGhlc2UgZnVuY3Rpb25zIGFyZSB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCBzbyB0byBzcGVhaywgaW4gU0NUUCBjb21tdW5pY2F0aW9uLiBUbyBlbnN1cmUgdGhlIGZ1enppbmcgZW52aXJvbm1lbnQgaXMgYXBwcm9wcmlhdGVseSBjb25maWd1cmVkLCB3ZSYjMzk7dmUgZW5hYmxlZCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zOiBgSVBfU0NUUGAgYW5kIGBJTkVUYCwgb2YgY291cnNlLiBGaW5hbGx5LCB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGlzIGRlY2lzaW9uIGlzIGNsZWFyIGFuZCBjb25jaXNlIOKAkyBpdCYjMzk7cyBhIHNvbGlkLCB3ZWxsLWRlZmluZWQgdGFyZ2V0IHdpdGgga25vd24gdnVsbmVyYWJpbGl0aWVzLiBUaW1lIHRvIGNvbmZpcm0gdGhlc2UgcmVzdWx0cyB3aXRoIGBzZXQtcmVzdWx0c2AsIGFuZCBtb3ZlIG9uIHRvIHRoZSBuZXh0IG1vZHVsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1NDVFAmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjdHBfc2VuZG1zZ190b19hc29jJiMzNDssCiAgICAmIzM0O3NjdHBfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDtzY3RwX3dhaXRfZm9yX2Nvbm5lY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc2N0cF9zZW5kbXNnX3RvX2Fzb2MgaW4gbmV0L3NjdHAvc29ja2V0LmMgdG8gcHJvcGVybHkgaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgU0NUUCBhc3NvY2lhdGlvbiBhY3Jvc3Mgc2N0cF93YWl0X2Zvcl9jb25uZWN0IGFuZCBjaGVjayBpZiB0aGUgYXNzb2NpYXRpb24gaXMgZGVhZCB3aGVuIHN0cmVhbSBpbnRlcmxlYXZpbmcgaXMgZW5hYmxlZC4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgc29ja2V0IGNvZGUgdGhhdCBjYW4gYmUgZXhlcmNpc2VkIHZpYSBzdGFuZGFyZCBTQ1RQIHNvY2tldCBzZW5kbXNnIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1NDVFAmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjdHBfc2VuZG1zZ190b19hc29jJiMzNDssCiAgICAmIzM0O3NjdHBfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDtzY3RwX3dhaXRfZm9yX2Nvbm5lY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc2N0cF9zZW5kbXNnX3RvX2Fzb2MgaW4gbmV0L3NjdHAvc29ja2V0LmMgdG8gcHJvcGVybHkgaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgU0NUUCBhc3NvY2lhdGlvbiBhY3Jvc3Mgc2N0cF93YWl0X2Zvcl9jb25uZWN0IGFuZCBjaGVjayBpZiB0aGUgYXNzb2NpYXRpb24gaXMgZGVhZCB3aGVuIHN0cmVhbSBpbnRlcmxlYXZpbmcgaXMgZW5hYmxlZC4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgc29ja2V0IGNvZGUgdGhhdCBjYW4gYmUgZXhlcmNpc2VkIHZpYSBzdGFuZGFyZCBTQ1RQIHNvY2tldCBzZW5kbXNnIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA5OjQ3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDk6NDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYXNzb2NpYXRpb24gbGlmZXRpbWUgbWFuYWdlbWVudCBpbiBgc2N0cF9zZW5kbXNnX3RvX2Fzb2NgIGJ5IGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gYGFzb2NgIChgc2N0cF9hc3NvY2lhdGlvbl9ob2xkYC9gc2N0cF9hc3NvY2lhdGlvbl9wdXRgKSBhY3Jvc3MgdGhlIGJsb2NraW5nIGBzY3RwX3dhaXRfZm9yX2Nvbm5lY3RgIGNhbGwgYW5kIGNoZWNraW5nIGBhc29jLVx1MDAzZWJhc2UuZGVhZGAgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBvciBvcGVyYXRpb25zIG9uIGEgZGVhZCBhc3NvY2lhdGlvbi5cblxuLSBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5OlxuICAtIFRoaXMgY2hhbmdlIGFkZHJlc3NlcyBvYmplY3QgbGlmZXRpbWUgYW5kIHVzZS1hZnRlci1mcmVlIHJpc2tzLCB3aGljaCBhcmUgZGlyZWN0bHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4uXG4gIC0gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgYWxsb2NhdGVkLCBvciBleHBvc2VkLiBUaGUgbmV3bHkgaW50cm9kdWNlZCBsb2NhbCB2YXJpYWJsZSBgZGVhZGAgaXMgZXhwbGljaXRseSBhc3NpZ25lZCBgZGVhZCA9IGFzb2MtXHUwMDNlYmFzZS5kZWFkO2AgaW1tZWRpYXRlbHkgYmVmb3JlIGV2YWx1YXRpb24uXG4gIC0gVGhlcmUgYXJlIG5vIGtlcm5lbC10by11c2VyIG1lbW9yeSBjb3BpZXMsIHBhZGRpbmcgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcmVhZHMgaW52b2x2ZWQuXG5cblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkOyBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5MjhmNGU2NTJiZmJlMTNjY2IyZjFjNTQxZmVhOTRlN2I3ODhhZDExCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMDk6NDY6NDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zb2NrZXQuYyBiL25ldC9zY3RwL3NvY2tldC5jCmluZGV4IGM3YjllMzI1ZWMxY2QuLjA5ZmQ2Yjk1MTM3NDEgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NvY2tldC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY3RwL3NvY2tldC5jCkBAIC0xODQyLDkgJiM0MzsxODQyLDE0IEBAIHN0YXRpYyBpbnQgc2N0cF9zZW5kbXNnX3RvX2Fzb2Moc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCiAJCQlnb3RvIGVycjsKIAogCQlpZiAoYXNvYy0mZ3Q7ZXAtJmd0O2ludGxfZW5hYmxlKSB7CiYjNDM7CQkJYm9vbCBkZWFkOwomIzQzOwogCQkJdGltZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCAwKTsKJiM0MzsJCQlzY3RwX2Fzc29jaWF0aW9uX2hvbGQoYXNvYyk7CiAJCQllcnIgPSBzY3RwX3dhaXRfZm9yX2Nvbm5lY3QoYXNvYywgJmFtcDt0aW1lbyk7Ci0JCQlpZiAoZXJyKSB7CiYjNDM7CQkJZGVhZCA9IGFzb2MtJmd0O2Jhc2UuZGVhZDsKJiM0MzsJCQlzY3RwX2Fzc29jaWF0aW9uX3B1dChhc29jKTsKJiM0MzsJCQlpZiAoZXJyIHx8IGRlYWQpIHsKIAkJCQllcnIgPSAtRVNSQ0g7CiAJCQkJZ290byBlcnI7CiAJCQl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwOTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTQ3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTQ1RQIFNvY2tldCBDb2RlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBUaGlzIHBhdGNoIHJlcXVpcmVzIGEgY2xvc2UgbG9vaywgYW5kIHRvIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucywgSSBuZWVkIHRvIHpvb20gaW4gb24gdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgaW4gYG5ldC9zY3RwL3NvY2tldC5jYC4gSSYjMzk7bGwgdXNlIG15IGVzdGFibGlzaGVkIHdvcmtmbG93OiBmaXJzdCwgSSYjMzk7bGwgcHVsbCB1cCB0aGUgY29kZSB1c2luZyBgcmVhZC1maWxlYCBhbmQgY2VudGVyIHRoZSB2aWV3IGFyb3VuZCBsaW5lIDE4NDIuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHZpc3VhbCBhbmNob3IgZm9yIHRoZSBjaGFuZ2UgYW5kIGhlbHAgbWUgcXVpY2tseSBncmFzcCB0aGUgbG9jYWwgZnVuY3Rpb24gYW5kIGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSBpbXBhY3RlZC4gRnJvbSB0aGVyZSwgSSBjYW4gc3RhcnQgdG8gaWRlbnRpZnkgdGhlIHNwZWNpZmljIGxvZ2ljIHRoaXMgcGF0Y2ggbW9kaWZpZXMgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgZXhpc3RpbmcgaW1wbGVtZW50YXRpb24uIFRoaXMgaXMgdGhlIGJlc3Qgd2F5IHRvIGdldCBhIHNvbGlkIGhhbmRsZSBvbiB0aGUgY2hhbmdlJiMzOTtzIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2N0cC9zb2NrZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4MjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTgyNTpcdFx0aWYgKHNjdHBfd3NwYWNlKGFzb2MpIFx1MDAzYyAoaW50KW1zZ19sZW4pXG4xODI2Olx0XHRcdHNjdHBfcHJzY3RwX3BydW5lKGFzb2MsIHNpbmZvLCBtc2dfbGVuIC0gc2N0cF93c3BhY2UoYXNvYykpO1xuMTgyNzpcdFxuMTgyODpcdFx0aWYgKHNjdHBfd3NwYWNlKGFzb2MpIFx1MDAzYz0gMCB8fCAhc2tfd21lbV9zY2hlZHVsZShzaywgbXNnX2xlbikpIHtcbjE4Mjk6XHRcdFx0dGltZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCBtc2ctXHUwMDNlbXNnX2ZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xuMTgzMDpcdFx0XHRlcnIgPSBzY3RwX3dhaXRfZm9yX3NuZGJ1Zihhc29jLCB0cmFuc3BvcnQsIFx1MDAyNnRpbWVvLCBtc2dfbGVuKTtcbjE4MzE6XHRcdFx0aWYgKGVycilcbjE4MzI6XHRcdFx0XHRnb3RvIGVycjtcbjE4MzM6XHRcdFx0aWYgKHVubGlrZWx5KHNpbmZvLVx1MDAzZXNpbmZvX3N0cmVhbSBcdTAwM2U9IGFzb2MtXHUwMDNlc3RyZWFtLm91dGNudCkpIHtcbjE4MzQ6XHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMTgzNTpcdFx0XHRcdGdvdG8gZXJyO1xuMTgzNjpcdFx0XHR9XG4xODM3Olx0XHR9XG4xODM4Olx0XG4xODM5Olx0XHRpZiAoc2N0cF9zdGF0ZShhc29jLCBDTE9TRUQpKSB7XG4xODQwOlx0XHRcdGVyciA9IHNjdHBfcHJpbWl0aXZlX0FTU09DSUFURShuZXQsIGFzb2MsIE5VTEwpO1xuMTg0MTpcdFx0XHRpZiAoZXJyKVxuMTg0MjpcdFx0XHRcdGdvdG8gZXJyO1xuMTg0MzpcdFxuMTg0NDpcdFx0XHRpZiAoYXNvYy1cdTAwM2VlcC1cdTAwM2VpbnRsX2VuYWJsZSkge1xuMTg0NTpcdFx0XHRcdGJvb2wgZGVhZDtcbjE4NDY6XHRcbjE4NDc6XHRcdFx0XHR0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIDApO1xuMTg0ODpcdFx0XHRcdHNjdHBfYXNzb2NpYXRpb25faG9sZChhc29jKTtcbjE4NDk6XHRcdFx0XHRlcnIgPSBzY3RwX3dhaXRfZm9yX2Nvbm5lY3QoYXNvYywgXHUwMDI2dGltZW8pO1xuMTg1MDpcdFx0XHRcdGRlYWQgPSBhc29jLVx1MDAzZWJhc2UuZGVhZDtcbjE4NTE6XHRcdFx0XHRzY3RwX2Fzc29jaWF0aW9uX3B1dChhc29jKTtcbjE4NTI6XHRcdFx0XHRpZiAoZXJyIHx8IGRlYWQpIHtcbjE4NTM6XHRcdFx0XHRcdGVyciA9IC1FU1JDSDtcbjE4NTQ6XHRcdFx0XHRcdGdvdG8gZXJyO1xuMTg1NTpcdFx0XHRcdH1cbjE4NTY6XHRcdFx0fSBlbHNlIHtcbjE4NTc6XHRcdFx0XHR3YWl0X2Nvbm5lY3QgPSB0cnVlO1xuMTg1ODpcdFx0XHR9XG4xODU5Olx0XG4xODYwOlx0XHRcdHByX2RlYnVnKFwmIzM0OyVzOiB3ZSBhc3NvY2lhdGVkIHByaW1pdGl2ZWx5XFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4xODYxOlx0XHR9XG4xODYyOlx0XG4xODYzOlx0XHRkYXRhbXNnID0gc2N0cF9kYXRhbXNnX2Zyb21fdXNlcihhc29jLCBzaW5mbywgXHUwMDI2bXNnLVx1MDAzZW1zZ19pdGVyKTtcbjE4NjQ6XHRcdGlmIChJU19FUlIoZGF0YW1zZykpIHtcbjE4NjU6XHRcdFx0ZXJyID0gUFRSX0VSUihkYXRhbXNnKTtcbjE4NjY6XHRcdFx0Z290byBlcnI7XG4xODY3Olx0XHR9XG4xODY4Olx0XG4xODY5Olx0XHRhc29jLVx1MDAzZWZvcmNlX2RlbGF5ID0gISEobXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX01PUkUpO1xuMTg3MDpcdFxuMTg3MTpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjaHVuaywgXHUwMDI2ZGF0YW1zZy1cdTAwM2VjaHVua3MsIGZyYWdfbGlzdCkge1xuMTg3MjpcdFx0XHRzY3RwX2NodW5rX2hvbGQoY2h1bmspO1xuMTg3MzpcdFx0XHRzY3RwX3NldF9vd25lcl93KGNodW5rKTtcbjE4NzQ6XHRcdFx0Y2h1bmstXHUwMDNldHJhbnNwb3J0ID0gdHJhbnNwb3J0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwOTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjExCgkJCQkJCQlvdXRwdXQ6IDIzNwoJCQkJCQkJdGhvdWdodHM6IDEwMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogU0NUUCBBc3NvY2lhdGlvbiBMaWZldGltZSBNYW5hZ2VtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzIHdpdGhpbiBgc2N0cF9zZW5kbXNnX3RvX2Fzb2NgLiBMb29raW5nIGF0IHRoZSBjb2RlLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXI6IFdlJiMzOTt2ZSBpbnRyb2R1Y2VkIHJlZmVyZW5jZSBjb3VudGluZyBhcm91bmQgdGhlIGNhbGwgdG8gYHNjdHBfd2FpdF9mb3JfY29ubmVjdGAuICBQcmV2aW91c2x5LCB3ZSBoYWQgdGhpczoKCmBgYGMKCQlpZiAoYXNvYy0mZ3Q7ZXAtJmd0O2ludGxfZW5hYmxlKSB7CgkJCXRpbWVvID0gc29ja19zbmR0aW1lbyhzaywgMCk7CgkJCWVyciA9IHNjdHBfd2FpdF9mb3JfY29ubmVjdChhc29jLCAmYW1wO3RpbWVvKTsKCQkJaWYgKGVycikgewoJCQkJZXJyID0gLUVTUkNIOwoJCQkJZ290byBlcnI7CgkJCX0KYGBgCgpOb3csIHdlIGhhdmU6CgpgYGBjCgkJaWYgKGFzb2MtJmd0O2VwLSZndDtpbnRsX2VuYWJsZSkgewoJCQlib29sIGRlYWQ7CgoJCQl0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIDApOwoJCQlzY3RwX2Fzc29jaWF0aW9uX2hvbGQoYXNvYyk7CgkJCWVyciA9IHNjdHBfd2FpdF9mb3JfY29ubmVjdChhc29jLCAmYW1wO3RpbWVvKTsKCQkJZGVhZCA9IGFzb2MtJmd0O2Jhc2UuZGVhZDsKCQkJc2N0cF9hc3NvY2lhdGlvbl9wdXQoYXNvYyk7CgkJCWlmIChlcnIgfHwgZGVhZCkgewoJCQkJZXJyID0gLUVTUkNIOwoJCQkJZ290byBlcnI7CgkJCX0KYGBgCgpUaGUgbW90aXZhdGlvbiBpcyBvYnZpb3VzOiBgc2N0cF93YWl0X2Zvcl9jb25uZWN0YCByZWxlYXNlcyB0aGUgc29ja2V0IGxvY2suIER1cmluZyB0aGUgd2FpdCwgdGhlIGBhc29jYCBhc3NvY2lhdGlvbiBjb3VsZCBiZSBmcmVlZCwgY2xvc2VkLCBvciBvdGhlcndpc2UgaW52YWxpZGF0ZWQuICBUaGUgYHNjdHBfYXNzb2NpYXRpb25faG9sZGAgaXMga2V5IHRvIHByZXZlbnQgYSB1c2UtYWZ0ZXItZnJlZSwgd2hpbGUgdGhlIGBhc29jLSZndDtiYXNlLmRlYWRgIGNoZWNrIHByb3ZpZGVzIGFuIGFkZGl0aW9uYWwgc2FmZWd1YXJkLgoKU28sIHRoaXMgaXMgYSBjbGVhciBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2U6ICByZWZjb3VudGluZyB0byBwcmV2ZW50IFVBRiBvciBhY2Nlc3NpbmcgYSBkZWFkIGFzc29jaWF0aW9uLiBUaGlzIGZhbGxzIHNxdWFyZWx5IGludG8gdGhlIHJlYWxtIG9mIEtBU0FOLgoKTm93LCBsZXQmIzM5O3MgbWV0aG9kaWNhbGx5IGNoZWNrIGZvciBLTVNBTi1zcGVjaWZpYyBjb25jZXJucy4gSXMgdGhlcmUgYSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gVGhlIGBkZWFkYCB2YXJpYWJsZSBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIGltbWVkaWF0ZWx5IGFmdGVyIGBzY3RwX3dhaXRfZm9yX2Nvbm5lY3RgIHJldHVybnMuIEl0JiMzOTtzIHRoZW4gcmVhZCBpbiB0aGUgYGlmYCBzdGF0ZW1lbnQuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgbGVha2VkLiBObyBrZXJuZWwgZGF0YSBpcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UuICBObyBwYWRkaW5nIGlzc3VlcyBvciB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMgYXJlIHByZXNlbnQuCgpMZXQgbWUgZ28gdGhyb3VnaCB0aGUgc3RhbmRhcmQgS01TQU4gY2hlY2tsaXN0LiBEb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIG9yIG1vZGlmeToKMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSB3aGVyZSBmaWVsZHMgb3IgcGFkZGluZyBtaWdodCBiZSB1bmluaXRpYWxpemVkPyBOb3BlLgoyLiAgQ29uZGl0aW9uYWwgbG9naWMgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHM/ICBOby4gYGRlYWRgIGlzIGluaXRpYWxpemVkIHJpZ2h0IGJlZm9yZSBiZWluZyB1c2VkLgozLiAgQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyPyBOby4KNC4gIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIHRoYXQgYWxsb3dzIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzPyBOb3QgaGVyZS4KClRoZSBib3R0b20gbGluZTogdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBjbGFzc2ljIFVBRi9saWZlY3ljbGUgaXNzdWUsIHBlcmZlY3QgZm9yIEtBU0FOLgoKVGhlIEtNU0FOIHJlYXNvbmluZyBpcyBjbGVhcjoKKiAgIFRoZSBwYXRjaCBhZGRyZXNzZXMgYXNzb2NpYXRpb24gbGlmZXRpbWUgbWFuYWdlbWVudCBhbmQgcHJldmVudHMgdXNlLWFmdGVyLWZyZWUgYnkgdXNpbmcgcmVmZXJlbmNlIGNvdW50aW5nLgoqICAgVGhlIGJ1ZyBiZWluZyBhZGRyZXNzZWQsIFVBRiByZWxhdGVkIHRvIGxpZmV0aW1lIG1hbmFnZW1lbnQsIGlzIHdpdGhpbiBLQVNBTiYjMzk7cyBkb21haW4uCiogICBObyBuZXcgdW5pbml0aWFsaXplZCBoZWFwLCBzdGFjaywgb3IgcGFnZSBhbGxvY2F0aW9ucyBhcmUgaW52b2x2ZWQuIFRoZSBgZGVhZGAgdmFyaWFibGUgaXMgYWx3YXlzIGluaXRpYWxpemVkLgoqICAgTm8ga2VybmVsIGRhdGEgaXMgY29waWVkIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBmYWxzZS4gRG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGFzc29jaWF0aW9uIGxpZmV0aW1lIG1hbmFnZW1lbnQgaW4gYHNjdHBfc2VuZG1zZ190b19hc29jYCBieSBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIGBhc29jYCAoYHNjdHBfYXNzb2NpYXRpb25faG9sZGAvYHNjdHBfYXNzb2NpYXRpb25fcHV0YCkgYWNyb3NzIHRoZSBibG9ja2luZyBgc2N0cF93YWl0X2Zvcl9jb25uZWN0YCBjYWxsIGFuZCBjaGVja2luZyBgYXNvYy1cdTAwM2ViYXNlLmRlYWRgIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgb3Igb3BlcmF0aW9ucyBvbiBhIGRlYWQgYXNzb2NpYXRpb24uXG5cbi0gS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eTpcbiAgLSBUaGlzIGNoYW5nZSBhZGRyZXNzZXMgb2JqZWN0IGxpZmV0aW1lIGFuZCB1c2UtYWZ0ZXItZnJlZSByaXNrcywgd2hpY2ggYXJlIGRpcmVjdGx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLlxuICAtIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGFsbG9jYXRlZCwgb3IgZXhwb3NlZC4gVGhlIG5ld2x5IGludHJvZHVjZWQgbG9jYWwgdmFyaWFibGUgYGRlYWRgIGlzIGV4cGxpY2l0bHkgYXNzaWduZWQgYGRlYWQgPSBhc29jLVx1MDAzZWJhc2UuZGVhZDtgIGltbWVkaWF0ZWx5IGJlZm9yZSBldmFsdWF0aW9uLlxuICAtIFRoZXJlIGFyZSBubyBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29waWVzLCBwYWRkaW5nIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHJlYWRzIGludm9sdmVkLlxuXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZDsgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGFzc29jaWF0aW9uIGxpZmV0aW1lIG1hbmFnZW1lbnQgaW4gYHNjdHBfc2VuZG1zZ190b19hc29jYCBieSBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIGBhc29jYCAoYHNjdHBfYXNzb2NpYXRpb25faG9sZGAvYHNjdHBfYXNzb2NpYXRpb25fcHV0YCkgYWNyb3NzIHRoZSBibG9ja2luZyBgc2N0cF93YWl0X2Zvcl9jb25uZWN0YCBjYWxsIGFuZCBjaGVja2luZyBgYXNvYy1cdTAwM2ViYXNlLmRlYWRgIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgb3Igb3BlcmF0aW9ucyBvbiBhIGRlYWQgYXNzb2NpYXRpb24uXG5cbi0gS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eTpcbiAgLSBUaGlzIGNoYW5nZSBhZGRyZXNzZXMgb2JqZWN0IGxpZmV0aW1lIGFuZCB1c2UtYWZ0ZXItZnJlZSByaXNrcywgd2hpY2ggYXJlIGRpcmVjdGx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLlxuICAtIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGFsbG9jYXRlZCwgb3IgZXhwb3NlZC4gVGhlIG5ld2x5IGludHJvZHVjZWQgbG9jYWwgdmFyaWFibGUgYGRlYWRgIGlzIGV4cGxpY2l0bHkgYXNzaWduZWQgYGRlYWQgPSBhc29jLVx1MDAzZWJhc2UuZGVhZDtgIGltbWVkaWF0ZWx5IGJlZm9yZSBldmFsdWF0aW9uLlxuICAtIFRoZXJlIGFyZSBubyBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29waWVzLCBwYWRkaW5nIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHJlYWRzIGludm9sdmVkLlxuXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZDsgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwOTo0Njo0MS45MjY4NDM3OTFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTYwMTQyNzE1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9TQ1RQXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2N0cF9zZW5kbXNnX3RvX2Fzb2NcIixcbiAgICBcInNjdHBfc2VuZG1zZ1wiLFxuICAgIFwic2N0cF93YWl0X2Zvcl9jb25uZWN0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYXNzb2NpYXRpb24gbGlmZXRpbWUgbWFuYWdlbWVudCBpbiBgc2N0cF9zZW5kbXNnX3RvX2Fzb2NgIGJ5IGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gYGFzb2NgIChgc2N0cF9hc3NvY2lhdGlvbl9ob2xkYC9gc2N0cF9hc3NvY2lhdGlvbl9wdXRgKSBhY3Jvc3MgdGhlIGJsb2NraW5nIGBzY3RwX3dhaXRfZm9yX2Nvbm5lY3RgIGNhbGwgYW5kIGNoZWNraW5nIGBhc29jLVxcdTAwM2ViYXNlLmRlYWRgIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgb3Igb3BlcmF0aW9ucyBvbiBhIGRlYWQgYXNzb2NpYXRpb24uXFxuXFxuLSBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5OlxcbiAgLSBUaGlzIGNoYW5nZSBhZGRyZXNzZXMgb2JqZWN0IGxpZmV0aW1lIGFuZCB1c2UtYWZ0ZXItZnJlZSByaXNrcywgd2hpY2ggYXJlIGRpcmVjdGx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLlxcbiAgLSBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBhbGxvY2F0ZWQsIG9yIGV4cG9zZWQuIFRoZSBuZXdseSBpbnRyb2R1Y2VkIGxvY2FsIHZhcmlhYmxlIGBkZWFkYCBpcyBleHBsaWNpdGx5IGFzc2lnbmVkIGBkZWFkID0gYXNvYy1cXHUwMDNlYmFzZS5kZWFkO2AgaW1tZWRpYXRlbHkgYmVmb3JlIGV2YWx1YXRpb24uXFxuICAtIFRoZXJlIGFyZSBubyBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29waWVzLCBwYWRkaW5nIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHJlYWRzIGludm9sdmVkLlxcblxcblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkOyBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc2N0cF9zZW5kbXNnX3RvX2Fzb2MgaW4gbmV0L3NjdHAvc29ja2V0LmMgdG8gcHJvcGVybHkgaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgU0NUUCBhc3NvY2lhdGlvbiBhY3Jvc3Mgc2N0cF93YWl0X2Zvcl9jb25uZWN0IGFuZCBjaGVjayBpZiB0aGUgYXNzb2NpYXRpb24gaXMgZGVhZCB3aGVuIHN0cmVhbSBpbnRlcmxlYXZpbmcgaXMgZW5hYmxlZC4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgc29ja2V0IGNvZGUgdGhhdCBjYW4gYmUgZXhlcmNpc2VkIHZpYSBzdGFuZGFyZCBTQ1RQIHNvY2tldCBzZW5kbXNnIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA5OjQ2OjQxLjkyNjg0OTA5MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY0MDExMjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTI4ZjRlNjUyYmZiZTEzY2NiMmYxYzU0MWZlYTk0ZTdiNzg4YWQxMVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCAxMSAwOTo0Njo0MSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zb2NrZXQuYyBiL25ldC9zY3RwL3NvY2tldC5jXFxuaW5kZXggYzdiOWUzMjVlYzFjZC4uMDlmZDZiOTUxMzc0MSAxMDA2NDRcXG4tLS0gYS9uZXQvc2N0cC9zb2NrZXQuY1xcbisrKyBiL25ldC9zY3RwL3NvY2tldC5jXFxuQEAgLTE4NDIsOSArMTg0MiwxNCBAQCBzdGF0aWMgaW50IHNjdHBfc2VuZG1zZ190b19hc29jKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxcbiBcXHRcXHRcXHRnb3RvIGVycjtcXG4gXFxuIFxcdFxcdGlmIChhc29jLVxcdTAwM2VlcC1cXHUwMDNlaW50bF9lbmFibGUpIHtcXG4rXFx0XFx0XFx0Ym9vbCBkZWFkO1xcbitcXG4gXFx0XFx0XFx0dGltZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCAwKTtcXG4rXFx0XFx0XFx0c2N0cF9hc3NvY2lhdGlvbl9ob2xkKGFzb2MpO1xcbiBcXHRcXHRcXHRlcnIgPSBzY3RwX3dhaXRfZm9yX2Nvbm5lY3QoYXNvYywgXFx1MDAyNnRpbWVvKTtcXG4tXFx0XFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHRkZWFkID0gYXNvYy1cXHUwMDNlYmFzZS5kZWFkO1xcbitcXHRcXHRcXHRzY3RwX2Fzc29jaWF0aW9uX3B1dChhc29jKTtcXG4rXFx0XFx0XFx0aWYgKGVyciB8fCBkZWFkKSB7XFxuIFxcdFxcdFxcdFxcdGVyciA9IC1FU1JDSDtcXG4gXFx0XFx0XFx0XFx0Z290byBlcnI7XFxuIFxcdFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDk6NDY6NDIuMzkxNTI5MDNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMzMzgzMzYyMjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1NDVFBcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzY3RwX3NlbmRtc2dfdG9fYXNvY1wiLFxuICAgIFwic2N0cF9zZW5kbXNnXCIsXG4gICAgXCJzY3RwX3dhaXRfZm9yX2Nvbm5lY3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzY3RwX3NlbmRtc2dfdG9fYXNvYyBpbiBuZXQvc2N0cC9zb2NrZXQuYyB0byBwcm9wZXJseSBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBTQ1RQIGFzc29jaWF0aW9uIGFjcm9zcyBzY3RwX3dhaXRfZm9yX2Nvbm5lY3QgYW5kIGNoZWNrIGlmIHRoZSBhc3NvY2lhdGlvbiBpcyBkZWFkIHdoZW4gc3RyZWFtIGludGVybGVhdmluZyBpcyBlbmFibGVkLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBzb2NrZXQgY29kZSB0aGF0IGNhbiBiZSBleGVyY2lzZWQgdmlhIHN0YW5kYXJkIFNDVFAgc29ja2V0IHNlbmRtc2cgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5MjhmNGU2NTJiZmJlMTNjY2IyZjFjNTQxZmVhOTRlN2I3ODhhZDExXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDk6NDY6NDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zb2NrZXQuYyBiL25ldC9zY3RwL3NvY2tldC5jXG5pbmRleCBjN2I5ZTMyNWVjMWNkLi4wOWZkNmI5NTEzNzQxIDEwMDY0NFxuLS0tIGEvbmV0L3NjdHAvc29ja2V0LmNcbisrKyBiL25ldC9zY3RwL3NvY2tldC5jXG5AQCAtMTg0Miw5ICsxODQyLDE0IEBAIHN0YXRpYyBpbnQgc2N0cF9zZW5kbXNnX3RvX2Fzb2Moc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXG4gXHRcdFx0Z290byBlcnI7XG4gXG4gXHRcdGlmIChhc29jLVx1MDAzZWVwLVx1MDAzZWludGxfZW5hYmxlKSB7XG4rXHRcdFx0Ym9vbCBkZWFkO1xuK1xuIFx0XHRcdHRpbWVvID0gc29ja19zbmR0aW1lbyhzaywgMCk7XG4rXHRcdFx0c2N0cF9hc3NvY2lhdGlvbl9ob2xkKGFzb2MpO1xuIFx0XHRcdGVyciA9IHNjdHBfd2FpdF9mb3JfY29ubmVjdChhc29jLCBcdTAwMjZ0aW1lbyk7XG4tXHRcdFx0aWYgKGVycikge1xuK1x0XHRcdGRlYWQgPSBhc29jLVx1MDAzZWJhc2UuZGVhZDtcbitcdFx0XHRzY3RwX2Fzc29jaWF0aW9uX3B1dChhc29jKTtcbitcdFx0XHRpZiAoZXJyIHx8IGRlYWQpIHtcbiBcdFx0XHRcdGVyciA9IC1FU1JDSDtcbiBcdFx0XHRcdGdvdG8gZXJyO1xuIFx0XHRcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA5OjQ2OjQyLjM5MTUzMDM2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzY1MDk0NTIwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNDVFAgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBtZXRpY3Vsb3VzbHkgYW5hbHl6ZSB0aGlzIHBhdGNoLCBrZWVwaW5nIHRoZSByZWxldmFudCBndWlkZWxpbmVzIGZpcm1seSBpbiBtaW5kLiBTZWVtcyB3ZSdyZSBkZWFsaW5nIHdpdGggYSBjaGFuZ2Ugd2l0aGluIGBuZXQvc2N0cC9zb2NrZXQuY2AsIHNwZWNpZmljYWxseSB0aGUgYHNjdHBfc2VuZG1zZ190b19hc29jYCBmdW5jdGlvbi4gVGhlIGRpZmYgc25pcHBldCBwb2ludHMgb3V0IHRoZSBrZXkgbW9kaWZpY2F0aW9uLlxuXG5Jbml0aWFsbHksIEkgc2VlIHRoZSBjb25kaXRpb25hbCBjaGVjayByZWxhdGVkIHRvIGBhc29jLVx1MDAzZWVwLVx1MDAzZWludGxfZW5hYmxlYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIGxpa2VseSByZWxhdGVkIHRvIGludGVycnVwdGlibGUgc2VuZCBvcGVyYXRpb25zLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBib29sIGRlYWRgIGFuZCB0aGUgcmVsYXRlZCBgc2N0cF9hc3NvY2lhdGlvbl9ob2xkYCBhbmQgYHNjdHBfYXNzb2NpYXRpb25fcHV0YCBjYWxscyB3aXRoaW4gdGhpcyBjb25kaXRpb25hbCBibG9jayBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGF0dGVudGlvbi5cblxuTXkgZXhwZXJ0IGludHVpdGlvbiBzdWdnZXN0cyB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIGhhbmRsaW5nIGNvbm5lY3Rpb24gZmFpbHVyZXMgb3IgdGltZW91dHMgbW9yZSBncmFjZWZ1bGx5LCBwb3RlbnRpYWxseSBhZGRyZXNzaW5nIGEgcmFjZSBjb25kaXRpb24gb3IgZGVhZGxvY2sgc2NlbmFyaW8uIEl0IGxvb2tzIGxpa2UgdGhlIGNoZWNrIGlzIGF0dGVtcHRpbmcgdG8gc2VlIGlmIHRoZSBhc3NvY2lhdGlvbiBpcyAnZGVhZCcgYWZ0ZXIgd2FpdGluZyBmb3IgYSBjb25uZWN0aW9uLiBUaGUgdXNlIG9mIGBzY3RwX2Fzc29jaWF0aW9uX2hvbGRgIGFuZCBgc2N0cF9hc3NvY2lhdGlvbl9wdXRgIGluZGljYXRlcyBzb21lIGtpbmQgb2YgcmVmZXJlbmNlIGNvdW50aW5nIG9yIHJlc291cmNlIG1hbmFnZW1lbnQgaGFwcGVuaW5nIGFyb3VuZCB0aGUgcG90ZW50aWFsbHkgYmxvY2tpbmcgYHNjdHBfd2FpdF9mb3JfY29ubmVjdGAuIE1ha2VzIHNlbnNlLiBXZSBhcmUgaG9sZGluZyB0aGUgYXNzb2NpYXRpb24gdG8gcHJvdGVjdCBpdCB3aGlsZSB3YWl0aW5nLlxuXG5UbyBnYWluIGEgbW9yZSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nLCBJJ2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSB3aXRoaW4gYHNjdHBfc2VuZG1zZ190b19hc29jYC4gQSBxdWljayBgcmVhZC1maWxlYCB0byBnZXQgdGhlIGJyb2FkZXIgY29udGV4dCBzaG91bGQgZ2l2ZSBtZSB0aGUgZnVsbCBwaWN0dXJlIGFuZCBoZWxwIG1lIHBpbnBvaW50IHRoZSBleGFjdCBpc3N1ZSB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcuIEknbSBrZWVuIHRvIHNlZSBob3cgYGRlYWRgIGlzIGFjdHVhbGx5IGRldGVybWluZWQgYW5kIGhvdyB0aGlzIGNoYW5nZXMgdGhlIGVycm9yIGhhbmRsaW5nLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBsb2NraW5nIGlzc3VlcyBvciByZXNvdXJjZSBsZWFrcy4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MzUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwOTo0Njo1MC4wNDI0NzgxNjlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzc2MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjdHAvc29ja2V0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTgyNSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTgyNTpcXHRcXHRpZiAoc2N0cF93c3BhY2UoYXNvYykgXFx1MDAzYyAoaW50KW1zZ19sZW4pXFxuMTgyNjpcXHRcXHRcXHRzY3RwX3Byc2N0cF9wcnVuZShhc29jLCBzaW5mbywgbXNnX2xlbiAtIHNjdHBfd3NwYWNlKGFzb2MpKTtcXG4xODI3OlxcdFxcbjE4Mjg6XFx0XFx0aWYgKHNjdHBfd3NwYWNlKGFzb2MpIFxcdTAwM2M9IDAgfHwgIXNrX3dtZW1fc2NoZWR1bGUoc2ssIG1zZ19sZW4pKSB7XFxuMTgyOTpcXHRcXHRcXHR0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIG1zZy1cXHUwMDNlbXNnX2ZsYWdzIFxcdTAwMjYgTVNHX0RPTlRXQUlUKTtcXG4xODMwOlxcdFxcdFxcdGVyciA9IHNjdHBfd2FpdF9mb3Jfc25kYnVmKGFzb2MsIHRyYW5zcG9ydCwgXFx1MDAyNnRpbWVvLCBtc2dfbGVuKTtcXG4xODMxOlxcdFxcdFxcdGlmIChlcnIpXFxuMTgzMjpcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4xODMzOlxcdFxcdFxcdGlmICh1bmxpa2VseShzaW5mby1cXHUwMDNlc2luZm9fc3RyZWFtIFxcdTAwM2U9IGFzb2MtXFx1MDAzZXN0cmVhbS5vdXRjbnQpKSB7XFxuMTgzNDpcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjE4MzU6XFx0XFx0XFx0XFx0Z290byBlcnI7XFxuMTgzNjpcXHRcXHRcXHR9XFxuMTgzNzpcXHRcXHR9XFxuMTgzODpcXHRcXG4xODM5OlxcdFxcdGlmIChzY3RwX3N0YXRlKGFzb2MsIENMT1NFRCkpIHtcXG4xODQwOlxcdFxcdFxcdGVyciA9IHNjdHBfcHJpbWl0aXZlX0FTU09DSUFURShuZXQsIGFzb2MsIE5VTEwpO1xcbjE4NDE6XFx0XFx0XFx0aWYgKGVycilcXG4xODQyOlxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbjE4NDM6XFx0XFxuMTg0NDpcXHRcXHRcXHRpZiAoYXNvYy1cXHUwMDNlZXAtXFx1MDAzZWludGxfZW5hYmxlKSB7XFxuMTg0NTpcXHRcXHRcXHRcXHRib29sIGRlYWQ7XFxuMTg0NjpcXHRcXG4xODQ3OlxcdFxcdFxcdFxcdHRpbWVvID0gc29ja19zbmR0aW1lbyhzaywgMCk7XFxuMTg0ODpcXHRcXHRcXHRcXHRzY3RwX2Fzc29jaWF0aW9uX2hvbGQoYXNvYyk7XFxuMTg0OTpcXHRcXHRcXHRcXHRlcnIgPSBzY3RwX3dhaXRfZm9yX2Nvbm5lY3QoYXNvYywgXFx1MDAyNnRpbWVvKTtcXG4xODUwOlxcdFxcdFxcdFxcdGRlYWQgPSBhc29jLVxcdTAwM2ViYXNlLmRlYWQ7XFxuMTg1MTpcXHRcXHRcXHRcXHRzY3RwX2Fzc29jaWF0aW9uX3B1dChhc29jKTtcXG4xODUyOlxcdFxcdFxcdFxcdGlmIChlcnIgfHwgZGVhZCkge1xcbjE4NTM6XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVTUkNIO1xcbjE4NTQ6XFx0XFx0XFx0XFx0XFx0Z290byBlcnI7XFxuMTg1NTpcXHRcXHRcXHRcXHR9XFxuMTg1NjpcXHRcXHRcXHR9IGVsc2Uge1xcbjE4NTc6XFx0XFx0XFx0XFx0d2FpdF9jb25uZWN0ID0gdHJ1ZTtcXG4xODU4OlxcdFxcdFxcdH1cXG4xODU5OlxcdFxcbjE4NjA6XFx0XFx0XFx0cHJfZGVidWcoXFxcIiVzOiB3ZSBhc3NvY2lhdGVkIHByaW1pdGl2ZWx5XFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuMTg2MTpcXHRcXHR9XFxuMTg2MjpcXHRcXG4xODYzOlxcdFxcdGRhdGFtc2cgPSBzY3RwX2RhdGFtc2dfZnJvbV91c2VyKGFzb2MsIHNpbmZvLCBcXHUwMDI2bXNnLVxcdTAwM2Vtc2dfaXRlcik7XFxuMTg2NDpcXHRcXHRpZiAoSVNfRVJSKGRhdGFtc2cpKSB7XFxuMTg2NTpcXHRcXHRcXHRlcnIgPSBQVFJfRVJSKGRhdGFtc2cpO1xcbjE4NjY6XFx0XFx0XFx0Z290byBlcnI7XFxuMTg2NzpcXHRcXHR9XFxuMTg2ODpcXHRcXG4xODY5OlxcdFxcdGFzb2MtXFx1MDAzZWZvcmNlX2RlbGF5ID0gISEobXNnLVxcdTAwM2Vtc2dfZmxhZ3MgXFx1MDAyNiBNU0dfTU9SRSk7XFxuMTg3MDpcXHRcXG4xODcxOlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2h1bmssIFxcdTAwMjZkYXRhbXNnLVxcdTAwM2VjaHVua3MsIGZyYWdfbGlzdCkge1xcbjE4NzI6XFx0XFx0XFx0c2N0cF9jaHVua19ob2xkKGNodW5rKTtcXG4xODczOlxcdFxcdFxcdHNjdHBfc2V0X293bmVyX3coY2h1bmspO1xcbjE4NzQ6XFx0XFx0XFx0Y2h1bmstXFx1MDAzZXRyYW5zcG9ydCA9IHRyYW5zcG9ydDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDk6NDY6NTAuMDQyOTYwMjJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTcwMDU0ODMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNoZWNraW5nIEtjb25maWcgZm9yIFNDVFAgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEZpcnN0IG9yZGVyIG9mIGJ1c2luZXNzOiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIHN0YXRlIG9mIFNDVFAgd2l0aGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzeXN0ZW0sIHNwZWNpZmljYWxseSBLY29uZmlnLiBUaGlzIGlzIGxpa2VseSB0aGUgYmVzdCBpbml0aWFsIHN0ZXAgdG8gZGV0ZXJtaW5lIGlmIFNDVFAgaXMgZXZlbiBlbmFibGVkLCBkaXNhYmxlZCwgb3IgYnVpbHQgYXMgYSBtb2R1bGUuIEkga25vdyBteSB3YXkgYXJvdW5kIHRoZSBLY29uZmlnIHN5c3RlbSwgYW5kIEkgY2FuIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSByZWxldmFudCBkZXBlbmRlbmNpZXMsIHBvdGVudGlhbCBkZWZhdWx0IHZhbHVlcywgYW5kIGFueSByZWxldmFudCBvcHRpb25zIHJlbGF0ZWQgdG8gU0NUUC4gTXkgZ29hbCBoZXJlIGlzIHRvIGdldCBhIGhpZ2gtbGV2ZWwgb3ZlcnZpZXcgb2YgdGhlIGN1cnJlbnQgU0NUUCBjb25maWd1cmF0aW9uIHdpdGhvdXQgZ2V0dGluZyBib2dnZWQgZG93biBpbiB0aGUgZGV0YWlscyBqdXN0IHlldC4gSXMgaXQgZXZlbiBpbiB0aGUgYnVpbGQ/IEFyZSB0aGVyZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gY29uc2lkZXIgYmFzZWQgb24gdGhlIHRhcmdldCBwbGF0Zm9ybSBvciB1c2UgY2FzZT8gSSdtIGhvcGluZyB0aGlzIHdpbGwgcHJvdmlkZSBhIGNsZWFyIHBhdGggZm9yd2FyZCBmb3Igd2hhdGV2ZXIgdGhlIG5leHQgc3RhZ2UgaXMuIFRoZSBpbml0aWFsIGluc3BlY3Rpb24gb2YgS2NvbmZpZyBzaG91bGQgZ2l2ZSBtZSB0aGF0IGtleSBpbmZvcm1hdGlvbiBxdWlja2x5LCBpZGVhbGx5IHdpdGhpbiBhIGZldyBtaW51dGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDQ4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwOTo0Njo1My42MTMwMTczMjFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2NzMzNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1NDVFBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjdHBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvS2NvbmZpZy01LVxcbm5ldC9zY3RwL0tjb25maWc6NjptZW51Y29uZmlnIElQX1NDVFBcXG5uZXQvc2N0cC9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIlRoZSBTQ1RQIFByb3RvY29sXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwOTo0Njo1My42NTk2OTYzMjhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTU2MDE1MzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBgbmV0L3NjdHAvS2NvbmZpZ2AgZmlsZTpcblxuKipBbmFseXppbmcgdGhlIFNDVFAgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byBgbmV0L3NjdHAvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBTQ1RQIChTdHJlYW0gQ29udHJvbCBUcmFuc21pc3Npb24gUHJvdG9jb2wpIHdpdGhpbiB0aGUgTGludXgga2VybmVsIGFyZSBkZWZpbmVkLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgdXN1YWwgS2NvbmZpZyBjb252ZW50aW9ucyBoZXJlIOKAkyBhIGhpZXJhcmNoaWNhbCBzdHJ1Y3R1cmUsIGRlcGVuZGVuY2llcywgaGVscCB0ZXh0LCBhbmQgZGVmYXVsdCBzZXR0aW5ncy4gVGhlIGdvYWwsIGFzIGFsd2F5cywgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugb3B0aW9ucyBjb250cm9sIFNDVFAncyBmZWF0dXJlcywgYW5kIGhvdyB0aGV5IGltcGFjdCB0aGUgb3ZlcmFsbCBrZXJuZWwgYnVpbGQuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6XG5cbiogICAqKkNvcmUgRW5hYmxlbWVudDoqKiBUaGUgdG9wLWxldmVsIG9wdGlvbiB0byBlbmFibGUgb3IgZGlzYWJsZSBTQ1RQIGVudGlyZWx5LlxuKiAgICoqRmVhdHVyZSBGbGFnczoqKiBJbmRpdmlkdWFsIG9wdGlvbnMgY29udHJvbGxpbmcgc3BlY2lmaWMgU0NUUCBmZWF0dXJlcyBsaWtlIG11bHRpLWhvbWluZywgZHluYW1pYyBhZGRyZXNzIGNvbmZpZ3VyYXRpb24sIHN0cmVhbSBzZXF1ZW5jaW5nLCBhbmQgYW55IGV4dGVuc2lvbnMgbGlrZSBFeHBsaWNpdCBDb25nZXN0aW9uIE5vdGlmaWNhdGlvbiAoRUNOKSBzdXBwb3J0LCBvciBVc2VyIERhdGFncmFtIFByb3RvY29sIChVRFApIGVuY2Fwc3VsYXRpb24uXG4qICAgKipEZXBlbmRlbmNpZXM6KiogV2hhdCBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcyBvciBmZWF0dXJlcyBkb2VzIFNDVFAgZGVwZW5kIG9uPyBBcmUgdGhlcmUgYW55IGhhcmQgZGVwZW5kZW5jaWVzIG9uLCBzYXksIG5ldHdvcmtpbmcgc3RhY2sgY29tcG9uZW50cyBvciBzZWN1cml0eSBmZWF0dXJlcz8gQW5kIHdoYXQgYWJvdXQgYnVpbGQgZGVwZW5kZW5jaWVzLCBtYWtpbmcgc3VyZSBhbGwgdGhlIG5lZWRlZCBtb2R1bGVzIGFyZSBidWlsdC5cbiogICAqKkRlZmF1bHQgVmFsdWVzOioqIFVuZGVyc3RhbmRpbmcgdGhlIGRlZmF1bHQgc2V0dGluZ3MgaXMgY3J1Y2lhbC4gQXJlIHRoZXkgc2Vuc2libGUgZm9yIGdlbmVyYWwgdXNlLCBvciBhcmUgdGhlcmUgc3BlY2lmaWMgc2NlbmFyaW9zIHdoZXJlIEkgbWlnaHQgbmVlZCB0byBhZGp1c3QgdGhlbT8gT2Z0ZW4gdGhlIGRlZmF1bHQgZm9yIG1vZHVsZXMgaXMgYG1gLCBzbyB0aGV5J3JlIGJ1aWx0IGFzIGxvYWRhYmxlIG1vZHVsZXMuXG4qICAgKipIZWxwIFRleHQ6KiogVGhpcyBzaG91bGQgcHJvdmlkZSBhIGNsZWFyIGRlc2NyaXB0aW9uIG9mIGVhY2ggb3B0aW9uLiBUaGUgaGVscCB0ZXh0J3MgYWNjdXJhY3kgYW5kIGNvbXBsZXRlbmVzcyBhcmUga2V5IGluZGljYXRvcnMgb2YgdGhlIHF1YWxpdHkgb2YgdGhlIEtjb25maWcgZmlsZSBpdHNlbGYuIEknbGwgYmUgY29tcGFyaW5nIGl0IHRvIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24uXG4qICAgKipDb25kaXRpb25hbCBDb21waWxhdGlvbjoqKiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBvcHRpb25zIHRoYXQgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgYmFzZWQgb24gdGhlIGFyY2hpdGVjdHVyZSwgQ1BVLCBvciBvdGhlciBrZXJuZWwgY29uZmlndXJhdGlvbnMuIFRoYXQgbWlnaHQgaW5mbHVlbmNlIGl0cyBpbXBhY3Qgb24gcG93ZXIuXG4qICAgKipTZWN1cml0eSBDb25zaWRlcmF0aW9uczoqKiBIYXMgdGhlIEtjb25maWcgZmlsZSBhZGRyZXNzZWQgc2VjdXJpdHktcmVsYXRlZCBhc3BlY3RzPyBBcmUgdGhlcmUgb3B0aW9ucyByZWxhdGVkIHRvIElQc2VjLCBUTFMsIG9yIGFueSBoYXJkZW5pbmcgZmVhdHVyZXM/IEFyZSB0aGVyZSBhbnkgb3B0aW9ucyB0byBzdXBwb3J0IGhhcmRlbmluZywgb3IgZGlzYWJsaW5nIGZ1bmN0aW9ucyB0byByZWR1Y2UgdGhlIGF0dGFjayBzdXJmYWNlLlxuXG5VbHRpbWF0ZWx5LCBJIHdhbnQgdG8gZm9ybSBhIGNvbXBsZXRlIG1lbnRhbCBwaWN0dXJlIG9mIGhvdyBTQ1RQIGlzIGNvbmZpZ3VyZWQgYW5kIGhvdyBpdCdzIGludGVncmF0ZWQgaW50byB0aGUgbGFyZ2VyIExpbnV4IGtlcm5lbCBuZXR3b3JraW5nIGZyYW1ld29yay4gSSdsbCBiZSBub3RpbmcgYW55IGFyZWFzIHRoYXQgYXJlIHVuY2xlYXIsIG9yIGFueSBwb3RlbnRpYWwgaXNzdWVzIG9yIGltcHJvdmVtZW50cyB0aGF0IEkgY2FuIGlkZW50aWZ5IGFzIEkgZ28gdGhyb3VnaCB0aGUgb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc2NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA5OjQ2OjU3LjgxNTcxMzg3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM5NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjdHAvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBTQ1RQIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0bWVudWNvbmZpZyBJUF9TQ1RQXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiVGhlIFNDVFAgUHJvdG9jb2xcXFwiXFxuICAgODpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA5OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1NIQTFcXG4gIDEwOlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxcbiAgMTE6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfVVRJTFNcXG4gIDEyOlxcdFxcdHNlbGVjdCBORVRfQ1JDMzJDXFxuICAxMzpcXHRcXHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcXG4gIDE0OlxcdFxcdGhlbHBcXG4gIDE1OlxcdFxcdCAgU3RyZWFtIENvbnRyb2wgVHJhbnNtaXNzaW9uIFByb3RvY29sXFxuICAxNjpcXHRcXG4gIDE3OlxcdFxcdCAgRnJvbSBSRkMgMjk2MCBcXHUwMDNjaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMjk2MC50eHRcXHUwMDNlLlxcbiAgMTg6XFx0XFxuICAxOTpcXHRcXHQgIFxcXCJTQ1RQIGlzIGEgcmVsaWFibGUgdHJhbnNwb3J0IHByb3RvY29sIG9wZXJhdGluZyBvbiB0b3Agb2YgYVxcbiAgMjA6XFx0XFx0ICBjb25uZWN0aW9ubGVzcyBwYWNrZXQgbmV0d29yayBzdWNoIGFzIElQLiAgSXQgb2ZmZXJzIHRoZSBmb2xsb3dpbmdcXG4gIDIxOlxcdFxcdCAgc2VydmljZXMgdG8gaXRzIHVzZXJzOlxcbiAgMjI6XFx0XFxuICAyMzpcXHRcXHQgIC0tIGFja25vd2xlZGdlZCBlcnJvci1mcmVlIG5vbi1kdXBsaWNhdGVkIHRyYW5zZmVyIG9mIHVzZXIgZGF0YSxcXG4gIDI0OlxcdFxcdCAgLS0gZGF0YSBmcmFnbWVudGF0aW9uIHRvIGNvbmZvcm0gdG8gZGlzY292ZXJlZCBwYXRoIE1UVSBzaXplLFxcbiAgMjU6XFx0XFx0ICAtLSBzZXF1ZW5jZWQgZGVsaXZlcnkgb2YgdXNlciBtZXNzYWdlcyB3aXRoaW4gbXVsdGlwbGUgc3RyZWFtcyxcXG4gIDI2OlxcdFxcdCAgd2l0aCBhbiBvcHRpb24gZm9yIG9yZGVyLW9mLWFycml2YWwgZGVsaXZlcnkgb2YgaW5kaXZpZHVhbCB1c2VyXFxuICAyNzpcXHRcXHQgIG1lc3NhZ2VzLFxcbiAgMjg6XFx0XFx0ICAtLSBvcHRpb25hbCBidW5kbGluZyBvZiBtdWx0aXBsZSB1c2VyIG1lc3NhZ2VzIGludG8gYSBzaW5nbGUgU0NUUFxcbiAgMjk6XFx0XFx0ICBwYWNrZXQsIGFuZFxcbiAgMzA6XFx0XFx0ICAtLSBuZXR3b3JrLWxldmVsIGZhdWx0IHRvbGVyYW5jZSB0aHJvdWdoIHN1cHBvcnRpbmcgb2YgbXVsdGktXFxuICAzMTpcXHRcXHQgIGhvbWluZyBhdCBlaXRoZXIgb3IgYm90aCBlbmRzIG9mIGFuIGFzc29jaWF0aW9uLlxcXCJcXG4gIDMyOlxcdFxcbiAgMzM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgcHJvdG9jb2wgc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuICAzNDpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzY3RwLiBEZWJ1ZyBtZXNzYWdlcyBhcmUgaGFuZGxlZCBieSB0aGVcXG4gIDM1OlxcdFxcdCAga2VybmVsJ3MgZHluYW1pYyBkZWJ1Z2dpbmcgZnJhbWV3b3JrLlxcbiAgMzY6XFx0XFxuICAzNzpcXHRcXHQgIElmIGluIGRvdWJ0LCBzYXkgTi5cXG4gIDM4OlxcdFxcbiAgMzk6XFx0aWYgSVBfU0NUUFxcbiAgNDA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA5OjQ2OjU3LjgxNTc3OTMxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzc0OTk1MzE4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKlRyYWNpbmcgdGhlIFNDVFAgU2VuZCBQYXRoKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGUgU0NUUCBzZW5kIHBhdGgsIHNwZWNpZmljYWxseSBob3cgZGF0YSBhY3R1YWxseSBnZXRzIHNlbnQgb3V0IGZyb20gdGhlIHVzZXIgc3BhY2Ugc29ja2V0IGxheWVyLiBNeSBzdGFydGluZyBwb2ludCBpcyBgc2N0cF9zZW5kbXNnX3RvX2Fzb2NgLiBJIGtub3cgdGhhdCBmdW5jdGlvbiBpcyBjcnVjaWFsLCBhcyBpdOKAmXMgdGhlIHdvcmtob3JzZSBjYWxsZWQgYnkgdGhlIGxhcmdlciBgc2N0cF9zZW5kbXNnYCBmdW5jdGlvbi4gVGhlIGtleSBoZXJlIGlzIHRvIGNvbmZpcm0gaG93IHdlIGdldCBmcm9tIGEgc3RhbmRhcmQgYHNlbmRtc2dgIG9yIGBzZW5kdG9gIHN5c2NhbGwg4oCTIHRoZSB0eXBpY2FsIHVzZXIgaW50ZXJhY3Rpb24g4oCTIHRvIHRoYXQgY29yZSBgc2N0cF9zZW5kbXNnX3RvX2Fzb2NgIGZ1bmN0aW9uLiBJJ20gYXNzdW1pbmcgdGhhdCBzdGFuZGFyZCBzb2NrZXQgc3lzY2FsbHMgZXZlbnR1YWxseSBsZWFkIHRvIGBzY3RwX3NlbmRtc2dgLCBidXQgSSBuZWVkIHRvIG1hcCB0aGUgcGF0aCB0byB2ZXJpZnkuXG5cblRvIG5haWwgdGhpcyBkb3duLCBJJ2xsIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIEknbGwgbmVlZCB0byBvcGVuIGBuZXQvc2N0cC9zb2NrZXQuY2AgYW5kIHNlYXJjaCBmb3IgYWxsIGNhbGwgc2l0ZXMgb2YgYHNjdHBfc2VuZG1zZ190b19hc29jYC4gS25vd2luZyB0aGUgY2FsbGVycyB3aWxsIGhlbHAgbWUgdmlzdWFsaXplIHRoZSBlbnRpcmUgc2VuZGluZyBwaXBlbGluZSwgZnJvbSB0aGUgc3lzY2FsbCBlbnRyeSBwb2ludCByaWdodCBkb3duIHRvIHRoaXMgY29yZSBzZW5kaW5nIGZ1bmN0aW9uLiBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBTQ1RQIGhhbmRsZXMgZGF0YSB0cmFuc21pc3Npb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4NjUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA5OjQ3OjAxLjU2NTczNTAyNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYwMDg0NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2N0cF9zZW5kbXNnX3RvX2Fzb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjdHBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvc29ja2V0LmM9MTc1MT1zdGF0aWMgaW50IHNjdHBfc2VuZG1zZ19jaGVja19zZmxhZ3Moc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYy0xNzg4LVxcbm5ldC9zY3RwL3NvY2tldC5jOjE3ODk6c3RhdGljIGludCBzY3RwX3NlbmRtc2dfdG9fYXNvYyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG5uZXQvc2N0cC9zb2NrZXQuYy0xNzkwLVxcdFxcdFxcdFxcdHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IG1zZ19sZW4sXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYz0xOTQ3PXN0YXRpYyBpbnQgc2N0cF9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbXNnX2xlbilcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jLTE5ODctXFxubmV0L3NjdHAvc29ja2V0LmM6MTk4ODpcXHRcXHRcXHRlcnIgPSBzY3RwX3NlbmRtc2dfdG9fYXNvYyhhc29jLCBtc2csIG1zZ19sZW4sXFxubmV0L3NjdHAvc29ja2V0LmMtMTk4OS1cXHRcXHRcXHRcXHRcXHRcXHQgICBOVUxMLCBzaW5mbyk7XFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYy0xOTk0LVxcbm5ldC9zY3RwL3NvY2tldC5jOjE5OTU6XFx0XFx0XFx0Lyogc2N0cF9zZW5kbXNnX3RvX2Fzb2MoKSBtYXkgaGF2ZSByZWxlYXNlZCB0aGUgc29ja2V0XFxubmV0L3NjdHAvc29ja2V0LmMtMTk5Ni1cXHRcXHRcXHQgKiBsb2NrIChzY3RwX3dhaXRfZm9yX3NuZGJ1ZiksIGR1cmluZyB3aGljaCBvdGhlclxcbi0tXFxubmV0L3NjdHAvc29ja2V0LmMtMjA0My1cXHQvKiBTZW5kIG1zZyB0byB0aGUgYXNvYyAqL1xcbm5ldC9zY3RwL3NvY2tldC5jOjIwNDQ6XFx0ZXJyID0gc2N0cF9zZW5kbXNnX3RvX2Fzb2MoYXNvYywgbXNnLCBtc2dfbGVuLCB0cmFuc3BvcnQsIHNpbmZvKTtcXG5uZXQvc2N0cC9zb2NrZXQuYy0yMDQ1LVxcdGlmIChlcnIgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IGVyciAhPSAtRVNSQ0ggXFx1MDAyNlxcdTAwMjYgbmV3KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwOTo0NzowMS42MTE3NDkxNDJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI5ODY1MjQ2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBzY3RwX3dhaXRfZm9yX2Nvbm5lY3RgKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGNvcmUgb2YgdGhpcyBTQ1RQIGNvbm5lY3Rpb24gbG9naWMuIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgbmV0L3NjdHAvc29ja2V0LmNgIGFuZCBzcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIGBzY3RwX3dhaXRfZm9yX2Nvbm5lY3RgLiBUaGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsOyBpdCdzIHRoZSBnYXRla2VlcGVyLCB0aGUgcG9pbnQgd2hlcmUgdGhlIGFwcGxpY2F0aW9uIGNvZGUgaXMgYmxvY2tlZCB1bnRpbCB0aGUgU0NUUCBjb25uZWN0aW9uIGlzIGFjdHVhbGx5IGVzdGFibGlzaGVkLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBoZXJlLCBlc3BlY2lhbGx5IGFyb3VuZCB0aGUgYmxvY2tpbmcgYmVoYXZpb3IsIHRoZSBwb3RlbnRpYWwgZm9yIHNpZ25hbHMsIGFuZCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSB1bmRlcmx5aW5nIFNDVFAgc3RhdGUgdHJhbnNpdGlvbnMuIEknbSBsb29raW5nIGZvciB0aGUgcHJlY2lzZSBtZWNoYW5pc21zIHVzZWQgZm9yIHdhaXRpbmc6IGFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIHNsZWVwLCBhIHBvbGwtYmFzZWQgYXBwcm9hY2gsIG9yIHNvbWV0aGluZyBtb3JlIGludHJpY2F0ZT8gSXMgdGhlcmUgYSBzcGlubG9jayBpbnZvbHZlZD8gSeKAmW0gYWxzbyBpbnRlcmVzdGVkIGluIGhvdyBpdCBoYW5kbGVzIGVycm9ycyBhbmQgdGltZW91dHMg4oCTIGFsbCB0aG9zZSBjb3JuZXIgY2FzZXMgd2hlcmUgdGhlIGNvbm5lY3Rpb24gY2FuIGZhaWwuIFVuZGVyc3RhbmRpbmcgdGhpcyB3YWl0IGZ1bmN0aW9uIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBsYXRlbmN5IGludm9sdmVkIHdpdGggZXN0YWJsaXNoaW5nIGFuIFNDVFAgY29ubmVjdGlvbiwgYW5kIGl0IHNob3VsZCByZXZlYWwgdGhlIGJvdHRsZW5lY2tzIHdpdGhpbiB0aGUgZHJpdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzA5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDk6NDc6MDMuOTEwNDA0Mzk2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjA4NDQwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY3RwX3dhaXRfZm9yX2Nvbm5lY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjdHBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jPTg3Mj1zdGF0aWMgdm9pZCBzY3RwX2NtZF9uZXdfc3RhdGUoc3RydWN0IHNjdHBfY21kX3NlcSAqY21kcyxcXG4tLVxcbm5ldC9zY3RwL3NtX3NpZGVlZmZlY3QuYy05MTUtXFx0XFx0LyogV2FrZSB1cCBhbnkgcHJvY2Vzc2VzIHdhaXRpbmcgaW4gdGhlIGFzb2MncyB3YWl0IHF1ZXVlIGluXFxubmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jOjkxNjpcXHRcXHQgKiBzY3RwX3dhaXRfZm9yX2Nvbm5lY3QoKSBvciBzY3RwX3dhaXRfZm9yX3NuZGJ1ZigpLlxcbm5ldC9zY3RwL3NtX3NpZGVlZmZlY3QuYy05MTctXFx0XFx0ICovXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYz03Nz1zdGF0aWMgaW50IHNjdHBfd2FpdF9mb3JfcGFja2V0KHN0cnVjdCBzb2NrICpzaywgaW50ICplcnIsIGxvbmcgKnRpbWVvX3ApO1xcbm5ldC9zY3RwL3NvY2tldC5jOjc4OnN0YXRpYyBpbnQgc2N0cF93YWl0X2Zvcl9jb25uZWN0KHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICosIGxvbmcgKnRpbWVvX3ApO1xcbm5ldC9zY3RwL3NvY2tldC5jLTc5LXN0YXRpYyBpbnQgc2N0cF93YWl0X2Zvcl9hY2NlcHQoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvKTtcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jPTExNjc9c3RhdGljIGludCBfX3NjdHBfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkciAqa2FkZHJzLFxcbi0tXFxubmV0L3NjdHAvc29ja2V0LmMtMTI0Ny1cXHR0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIGZsYWdzIFxcdTAwMjYgT19OT05CTE9DSyk7XFxubmV0L3NjdHAvc29ja2V0LmM6MTI0ODpcXHRyZXR1cm4gc2N0cF93YWl0X2Zvcl9jb25uZWN0KGFzb2MsIFxcdTAwMjZ0aW1lbyk7XFxubmV0L3NjdHAvc29ja2V0LmMtMTI0OS1cXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jPTE3ODk9c3RhdGljIGludCBzY3RwX3NlbmRtc2dfdG9fYXNvYyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jLTE4NDgtXFx0XFx0XFx0c2N0cF9hc3NvY2lhdGlvbl9ob2xkKGFzb2MpO1xcbm5ldC9zY3RwL3NvY2tldC5jOjE4NDk6XFx0XFx0XFx0ZXJyID0gc2N0cF93YWl0X2Zvcl9jb25uZWN0KGFzb2MsIFxcdTAwMjZ0aW1lbyk7XFxubmV0L3NjdHAvc29ja2V0LmMtMTg1MC1cXHRcXHRcXHRkZWFkID0gYXNvYy1cXHUwMDNlYmFzZS5kZWFkO1xcbi0tXFxubmV0L3NjdHAvc29ja2V0LmMtMTg4OC1cXHRcXHR0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIG1zZy1cXHUwMDNlbXNnX2ZsYWdzIFxcdTAwMjYgTVNHX0RPTlRXQUlUKTtcXG5uZXQvc2N0cC9zb2NrZXQuYzoxODg5OlxcdFxcdHNjdHBfd2FpdF9mb3JfY29ubmVjdChhc29jLCBcXHUwMDI2dGltZW8pO1xcbm5ldC9zY3RwL3NvY2tldC5jLTE4OTAtXFx0fVxcbi0tXFxubmV0L3NjdHAvc29ja2V0LmM9OTM4NT1zdGF0aWMgYm9vbCBzY3RwX3dyaXRlYWJsZShjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYy05MzkyLSAqL1xcbm5ldC9zY3RwL3NvY2tldC5jOjkzOTM6c3RhdGljIGludCBzY3RwX3dhaXRfZm9yX2Nvbm5lY3Qoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsIGxvbmcgKnRpbWVvX3ApXFxubmV0L3NjdHAvc29ja2V0LmMtOTM5NC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA5OjQ3OjAzLjk1NjQ5MzgyMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODc1NDg5MjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE5ldHdvcmtpbmcgUGF0Y2ggZm9yIFNDVFAgSW50ZXJsZWF2ZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UncmUgbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgaW1wYWN0cyB0aGUgYHNjdHBfc2VuZG1zZ190b19hc29jYCBmdW5jdGlvbi4gVGhhdCdzIGEgY3JpdGljYWwgcGllY2Ugb2YgU0NUUCdzIHNlbmRpbmcgbG9naWMsIGFuZCB0aGUgbW9kaWZpY2F0aW9uIHNwZWNpZmljYWxseSBraWNrcyBpbiB3aGVuIGBhc29jLVx1MDAzZWVwLVx1MDAzZWludGxfZW5hYmxlYCBpcyBzZXQg4oCTIHdoaWNoLCBpZiBJIHJlY2FsbCBjb3JyZWN0bHksIG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgU0NUUCBzdHJlYW0gaW50ZXJsZWF2ZSBmZWF0dXJlLiBUaGUgcGF0Y2ggaXMgaW5zZXJ0aW5nIGFuIGBhc29jYCByZWZlcmVuY2UgYmVmb3JlIGBzY3RwX3dhaXRfZm9yX2Nvbm5lY3RgIGFuZCBjaGVja2luZyBpZiBgYXNvYy1cdTAwM2ViYXNlLmRlYWRgIGFmdGVyIGl0LlxuXG5GaXJzdCB0aGluZ3MgZmlyc3QsIGlzIHRoaXMgZXZlbiAqcmVhY2hhYmxlKiBpbiBhIHR5cGljYWwgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gQWJzb2x1dGVseS4gU0NUUCBpcyBzdGFuZGFyZCBzb2NrZXQgbmV0d29ya2luZyBzdHVmZiwgQUZfSU5FVC9BRl9JTkVUNiwgSVBQUk9UT19TQ1RQIOKAkyBpdCBzaG91bGQgYmUgYWNjZXNzaWJsZS5cblxuTm93LCBsZXQncyBhc3Nlc3MgaXRzIFwiV29ydGhGdXp6aW5nXCIgc3RhdHVzLiBIaXR0aW5nIGBuZXQvc2N0cC9zb2NrZXQuY2AgYW5kIHNwZWNpZmljYWxseSBgc2N0cF9zZW5kbXNnX3RvX2Fzb2NgIGlzIGEgY2xlYXIgcG9zaXRpdmUgc2lnbi4gSXQncyBjb3JlIG5ldHdvcmtpbmcgcHJvdG9jb2wgY29kZSwgYW5kIGl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUuICBTbywgV29ydGhGdXp6aW5nID0gdHJ1ZS4gIE5vIGRvdWJ0IGFib3V0IGl0LlxuXG5OZXh0LCB0aGUgZm9jdXMgc3ltYm9scy4gV2UgaGF2ZSBgc2N0cF9zZW5kbXNnX3RvX2Fzb2NgLCB3aGljaCBpcyB0aGUgbW9kaWZpZWQgZnVuY3Rpb24sIHBsdXMgYHNjdHBfc2VuZG1zZ2AsIGl0cyBjYWxsZXIgYW5kIGxpa2VseSB0aGUgZW50cnlwb2ludCBmb3Igb3VyIGZ1enppbmcsIGFuZCBgc2N0cF93YWl0X2Zvcl9jb25uZWN0YCwgd2hpY2ggaXMgYSBoZWxwZXIgZnVuY3Rpb24gdGhhdCB0aGlzIHBhdGNoIGludGVyYWN0cyB3aXRoLiAgVGhlc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIHRvIHRhcmdldC5cblxuQW5kIGZpbmFsbHksIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBXZSBuZWVkIGBJUF9TQ1RQYCwgd2hpY2gsIGNvbnZlbmllbnRseSwgZGVwZW5kcyBvbiBgSU5FVGAuIE9rYXksIGVhc3kgZW5vdWdoIHRvIHNhdGlzZnkgdGhvc2UgZGVwZW5kZW5jaWVzLiBJIGtub3cgd2hlcmUgdGhhdCdzIGxvY2F0ZWQsIHRvby4gQ2hlY2tpbmcgYG5ldC9zY3RwL0tjb25maWdgIGNvbmZpcm1zIGBJUF9TQ1RQYCBkZXBlbmRzIG9uIGBJTkVUYCBhbmQgaXMgaW4gdGhlIGNvcnJlY3QgbG9jYXRpb24uIExldCdzIG1ha2Ugc3VyZSBpdCdzIGNvbXBpbGVkIHdpdGggYG5ldC9zY3RwL01ha2VmaWxlYC5cblxuT2theSwgSSB0aGluayB3ZSBoYXZlIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGF0Y2ggYW5kIGl0cyBpbXBsaWNhdGlvbnMgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3NDcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDk6NDc6MDguODMxOTg2MzUxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzE4NTY4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY3RwLipzb2NrZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjdHBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvaXB2Ni5jPTUyOT1zdGF0aWMgdm9pZCBzY3RwX3Y2X2Zyb21fc2tiKHVuaW9uIHNjdHBfYWRkciAqYWRkciwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9zY3RwL2lwdjYuYy01NDgtXFxubmV0L3NjdHAvaXB2Ni5jOjU0OTovKiBJbml0aWFsaXplIGFuIHNjdHBfYWRkciBmcm9tIGEgc29ja2V0LiAqL1xcbm5ldC9zY3RwL2lwdjYuYy01NTAtc3RhdGljIHZvaWQgc2N0cF92Nl9mcm9tX3NrKHVuaW9uIHNjdHBfYWRkciAqYWRkciwgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L3NjdHAvaXB2Ni5jPTEwMTU9c3RhdGljIGludCBzY3RwX2luZXQ2X3N1cHBvcnRlZF9hZGRycyhjb25zdCBzdHJ1Y3Qgc2N0cF9zb2NrICpvcHQsXFxuLS1cXG5uZXQvc2N0cC9pcHY2LmMtMTAyNi0vKiBIYW5kbGUgU0NUUF9JX1dBTlRfTUFQUEVEX1Y0X0FERFIgZm9yIGdldHBlZXJuYW1lKCkgYW5kIGdldHNvY2tuYW1lKCkgKi9cXG5uZXQvc2N0cC9pcHY2LmM6MTAyNzpzdGF0aWMgaW50IHNjdHBfZ2V0bmFtZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLFxcbm5ldC9zY3RwL2lwdjYuYy0xMDI4LVxcdFxcdFxcdGludCBwZWVyKVxcbi0tXFxubmV0L3NjdHAvcHJvdG9jb2wuYz0yMTU9c3RhdGljIHZvaWQgc2N0cF92NF9mcm9tX3NrYih1bmlvbiBzY3RwX2FkZHIgKmFkZHIsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvc2N0cC9wcm90b2NvbC5jLTIzMy1cXG5uZXQvc2N0cC9wcm90b2NvbC5jOjIzNDovKiBJbml0aWFsaXplIGFuIHNjdHBfYWRkciBmcm9tIGEgc29ja2V0LiAqL1xcbm5ldC9zY3RwL3Byb3RvY29sLmMtMjM1LXN0YXRpYyB2b2lkIHNjdHBfdjRfZnJvbV9zayh1bmlvbiBzY3RwX2FkZHIgKmFkZHIsIHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9zY3RwL3Byb3RvY29sLmM9MTQ3Nj1zdGF0aWMgX19pbml0IGludCBzY3RwX2luaXQodm9pZClcXG4tLVxcbm5ldC9zY3RwL3Byb3RvY29sLmMtMTQ5OS1cXG5uZXQvc2N0cC9wcm90b2NvbC5jOjE1MDA6XFx0c3RhdHVzID0gcGVyY3B1X2NvdW50ZXJfaW5pdChcXHUwMDI2c2N0cF9zb2NrZXRzX2FsbG9jYXRlZCwgMCwgR0ZQX0tFUk5FTCk7XFxubmV0L3NjdHAvcHJvdG9jb2wuYy0xNTAxLVxcdGlmIChzdGF0dXMpXFxuLS1cXG5uZXQvc2N0cC9wcm90b2NvbC5jLTE2NjUtZXJyX2VoYXNoX2FsbG9jOlxcbm5ldC9zY3RwL3Byb3RvY29sLmM6MTY2NjpcXHRwZXJjcHVfY291bnRlcl9kZXN0cm95KFxcdTAwMjZzY3RwX3NvY2tldHNfYWxsb2NhdGVkKTtcXG5uZXQvc2N0cC9wcm90b2NvbC5jLTE2NjctZXJyX3BlcmNwdV9jb3VudGVyX2luaXQ6XFxuLS1cXG5uZXQvc2N0cC9wcm90b2NvbC5jPTE2NzU9c3RhdGljIF9fZXhpdCB2b2lkIHNjdHBfZXhpdCh2b2lkKVxcbi0tXFxubmV0L3NjdHAvcHJvdG9jb2wuYy0xNzA0LVxcbm5ldC9zY3RwL3Byb3RvY29sLmM6MTcwNTpcXHRwZXJjcHVfY291bnRlcl9kZXN0cm95KFxcdTAwMjZzY3RwX3NvY2tldHNfYWxsb2NhdGVkKTtcXG5uZXQvc2N0cC9wcm90b2NvbC5jLTE3MDYtXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYz05Mj1zdGF0aWMgaW50IHNjdHBfc29ja19taWdyYXRlKHN0cnVjdCBzb2NrICpvbGRzaywgc3RydWN0IHNvY2sgKm5ld3NrLFxcbm5ldC9zY3RwL3NvY2tldC5jLTkzLVxcdFxcdFxcdCAgICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzc29jLFxcbm5ldC9zY3RwL3NvY2tldC5jOjk0OlxcdFxcdFxcdCAgICAgZW51bSBzY3RwX3NvY2tldF90eXBlIHR5cGUpO1xcbm5ldC9zY3RwL3NvY2tldC5jLTk1LVxcbi0tXFxubmV0L3NjdHAvc29ja2V0LmM9OTg9c3RhdGljIERFRklORV9QRVJfQ1BVKGludCwgc2N0cF9tZW1vcnlfcGVyX2NwdV9md19hbGxvYyk7XFxubmV0L3NjdHAvc29ja2V0LmM6OTk6c3RydWN0IHBlcmNwdV9jb3VudGVyIHNjdHBfc29ja2V0c19hbGxvY2F0ZWQ7XFxubmV0L3NjdHAvc29ja2V0LmMtMTAwLVxcbi0tXFxubmV0L3NjdHAvc29ja2V0LmM9MTk0Nz1zdGF0aWMgaW50IHNjdHBfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IG1zZ19sZW4pXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYy0xOTk0LVxcbm5ldC9zY3RwL3NvY2tldC5jOjE5OTU6XFx0XFx0XFx0Lyogc2N0cF9zZW5kbXNnX3RvX2Fzb2MoKSBtYXkgaGF2ZSByZWxlYXNlZCB0aGUgc29ja2V0XFxubmV0L3NjdHAvc29ja2V0LmMtMTk5Ni1cXHRcXHRcXHQgKiBsb2NrIChzY3RwX3dhaXRfZm9yX3NuZGJ1ZiksIGR1cmluZyB3aGljaCBvdGhlclxcbi0tXFxubmV0L3NjdHAvc29ja2V0LmM9Mjg0ND1zdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9kZWxheWVkX2FjayhzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYy0yODUzLVxcdFxcdFxcdFxcdCAgICBcXFwiJXMgKHBpZCAlZCkgXFxcIlxcbm5ldC9zY3RwL3NvY2tldC5jOjI4NTQ6XFx0XFx0XFx0XFx0ICAgIFxcXCJVc2Ugb2Ygc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgaW4gZGVsYXllZF9hY2sgc29ja2V0IG9wdGlvbi5cXFxcblxcXCJcXG5uZXQvc2N0cC9zb2NrZXQuYy0yODU1LVxcdFxcdFxcdFxcdCAgICBcXFwiVXNlIHN0cnVjdCBzY3RwX3NhY2tfaW5mbyBpbnN0ZWFkXFxcXG5cXFwiLFxcbi0tXFxubmV0L3NjdHAvc29ja2V0LmM9NDgyMD1zdGF0aWMgaW50IHNjdHBfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkciAqYWRkcixcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jLTQ4MzgtXFxubmV0L3NjdHAvc29ja2V0LmM6NDgzOTppbnQgc2N0cF9pbmV0X2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLFxcbm5ldC9zY3RwL3NvY2tldC5jLTQ4NDAtXFx0XFx0ICAgICAgaW50IGFkZHJfbGVuLCBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYz00ODYxPXN0YXRpYyBzdHJ1Y3Qgc29jayAqc2N0cF9jbG9uZV9zb2NrKHN0cnVjdCBzb2NrICpzayxcXG5uZXQvc2N0cC9zb2NrZXQuYy00ODYyLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG5uZXQvc2N0cC9zb2NrZXQuYzo0ODYzOlxcdFxcdFxcdFxcdCAgICBlbnVtIHNjdHBfc29ja2V0X3R5cGUgdHlwZSlcXG5uZXQvc2N0cC9zb2NrZXQuYy00ODY0LXtcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jPTYxMzA9c3RhdGljIGludCBzY3RwX2dldHNvY2tvcHRfZGVsYXllZF9hY2soc3RydWN0IHNvY2sgKnNrLCBpbnQgbGVuLFxcbi0tXFxubmV0L3NjdHAvc29ja2V0LmMtNjE0NS1cXHRcXHRcXHRcXHQgICAgXFxcIiVzIChwaWQgJWQpIFxcXCJcXG5uZXQvc2N0cC9zb2NrZXQuYzo2MTQ2OlxcdFxcdFxcdFxcdCAgICBcXFwiVXNlIG9mIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlIGluIGRlbGF5ZWRfYWNrIHNvY2tldCBvcHRpb24uXFxcXG5cXFwiXFxubmV0L3NjdHAvc29ja2V0LmMtNjE0Ny1cXHRcXHRcXHRcXHQgICAgXFxcIlVzZSBzdHJ1Y3Qgc2N0cF9zYWNrX2luZm8gaW5zdGVhZFxcXFxuXFxcIixcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jPTg2MDA9c3RhdGljIGludCBzY3RwX2xpc3Rlbl9zdGFydChzdHJ1Y3Qgc29jayAqc2ssIGludCBiYWNrbG9nKVxcbi0tXFxubmV0L3NjdHAvc29ja2V0LmMtODY1NC0gKi9cXG5uZXQvc2N0cC9zb2NrZXQuYzo4NjU1OmludCBzY3RwX2luZXRfbGlzdGVuKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBiYWNrbG9nKVxcbm5ldC9zY3RwL3NvY2tldC5jLTg2NTYte1xcbi0tXFxubmV0L3NjdHAvc29ja2V0LmMtODcxNi0gKi9cXG5uZXQvc2N0cC9zb2NrZXQuYzo4NzE3Ol9fcG9sbF90IHNjdHBfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jaywgcG9sbF90YWJsZSAqd2FpdClcXG5uZXQvc2N0cC9zb2NrZXQuYy04NzE4LXtcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jPTk1MzM9c3RhdGljIGludCBzY3RwX3NvY2tfbWlncmF0ZShzdHJ1Y3Qgc29jayAqb2xkc2ssIHN0cnVjdCBzb2NrICpuZXdzayxcXG5uZXQvc2N0cC9zb2NrZXQuYy05NTM0LVxcdFxcdFxcdCAgICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzc29jLFxcbm5ldC9zY3RwL3NvY2tldC5jOjk1MzU6XFx0XFx0XFx0ICAgICBlbnVtIHNjdHBfc29ja2V0X3R5cGUgdHlwZSlcXG5uZXQvc2N0cC9zb2NrZXQuYy05NTM2LXtcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jPTk2NTk9c3RydWN0IHByb3RvIHNjdHBfcHJvdCA9IHtcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jLTk2OTMtXFxubmV0L3NjdHAvc29ja2V0LmM6OTY5NDpcXHQuc29ja2V0c19hbGxvY2F0ZWQgPSBcXHUwMDI2c2N0cF9zb2NrZXRzX2FsbG9jYXRlZCxcXG5uZXQvc2N0cC9zb2NrZXQuYy05Njk1LX07XFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYz05NzE0PXN0cnVjdCBwcm90byBzY3RwdjZfcHJvdCA9IHtcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jLTk3NDktXFxubmV0L3NjdHAvc29ja2V0LmM6OTc1MDpcXHQuc29ja2V0c19hbGxvY2F0ZWQgPSBcXHUwMDI2c2N0cF9zb2NrZXRzX2FsbG9jYXRlZCxcXG5uZXQvc2N0cC9zb2NrZXQuYy05NzUxLX07XFxuLS1cXG5uZXQvc2N0cC91bHBxdWV1ZS5jLTktICpcXG5uZXQvc2N0cC91bHBxdWV1ZS5jOjEwOiAqIFRoaXMgYWJzdHJhY3Rpb24gY2FycmllcyBzY3RwIGV2ZW50cyB0byB0aGUgVUxQIChzb2NrZXRzKS5cXG5uZXQvc2N0cC91bHBxdWV1ZS5jLTExLSAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA5OjQ3OjA4Ljg3OTE3NjE0OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTI2NDA0NjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgU0NUUCBCdWlsZCBQcm9jZXNzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgYHNvY2tldC5vYCBpcyBjb25zdHJ1Y3RlZCB3aXRoaW4gdGhlIFNDVFAgc3Vic3lzdGVtLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCBpcyBhbG1vc3QgY2VydGFpbmx5IHRoZSBgbmV0L3NjdHAvTWFrZWZpbGVgLiBUaGlzIGlzIHdoZXJlIHRoZSBidWlsZCBwcm9jZXNzIGlzIG9yY2hlc3RyYXRlZCwgYW5kIGl0J2xsIGdpdmUgbWUgdGhlIGRlcGVuZGVuY3kgY2hhaW4sIHRoZSBjb21waWxlciBmbGFncywgYW5kIGFueSBsaW5rLXRpbWUgbWFnaWMgdGhhdCdzIGdvaW5nIG9uLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBydWxlcyB0aGF0IHRpZSB0aGUgc291cmNlIGZpbGVzIHRvIHRoZSBvYmplY3QgZmlsZSBgc29ja2V0Lm9gLCBhbG9uZyB3aXRoIGFueSByZWxldmFudCBpbmNsdWRlIHBhdGhzIGFuZCBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbnMuIEnigJltIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb25zIHJlbGF0ZWQgdG8gc3BlY2lmaWMgU0NUUCBmZWF0dXJlcyBvciBrZXJuZWwgY29uZmlndXJhdGlvbnMg4oCTIHRoYXTigJlzIGFsd2F5cyBhIGdvb2Qgc3BvdCBmb3Igc3VidGxlIGJ1Z3MuIFRoaXMgTWFrZWZpbGUgc2hvdWxkIHByb3ZpZGUgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIHRoYXQgb2JqZWN0IGZpbGUuIExldCdzIHNlZSBpZiBpdOKAmXMgYXMgc3RyYWlnaHRmb3J3YXJkIGFzIGl0IHNob3VsZCBiZSwgb3IgaWYgdGhlcmUgYXJlIGFueSBnb3RjaGFzIEkgbmVlZCB0byBiZSBhd2FyZSBvZi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2NjcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwOTo0NzoxMS4wMDU1ODQwMzNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjdHAvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciBTQ1RQIHN1cHBvcnQgY29kZS5cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0b2JqLSQoQ09ORklHX0lQX1NDVFApICs9IHNjdHAub1xcbiAgIDc6XFx0b2JqLSQoQ09ORklHX0lORVRfU0NUUF9ESUFHKSArPSBzY3RwX2RpYWcub1xcbiAgIDg6XFx0XFxuICAgOTpcXHRzY3RwLXkgOj0gc21fc3RhdGV0YWJsZS5vIHNtX3N0YXRlZnVucy5vIHNtX3NpZGVlZmZlY3QubyBcXFxcXFxuICAxMDpcXHRcXHQgIHByb3RvY29sLm8gZW5kcG9pbnRvbGEubyBhc3NvY2lvbGEubyBcXFxcXFxuICAxMTpcXHRcXHQgIHRyYW5zcG9ydC5vIGNodW5rLm8gc21fbWFrZV9jaHVuay5vIHVscGV2ZW50Lm8gXFxcXFxcbiAgMTI6XFx0XFx0ICBpbnF1ZXVlLm8gb3V0cXVldWUubyB1bHBxdWV1ZS5vIFxcXFxcXG4gIDEzOlxcdFxcdCAgdHNubWFwLm8gYmluZF9hZGRyLm8gc29ja2V0Lm8gcHJpbWl0aXZlLm8gXFxcXFxcbiAgMTQ6XFx0XFx0ICBvdXRwdXQubyBpbnB1dC5vIGRlYnVnLm8gc3RyZWFtLm8gYXV0aC5vIFxcXFxcXG4gIDE1OlxcdFxcdCAgb2ZmbG9hZC5vIHN0cmVhbV9zY2hlZC5vIHN0cmVhbV9zY2hlZF9wcmlvLm8gXFxcXFxcbiAgMTY6XFx0XFx0ICBzdHJlYW1fc2NoZWRfcnIubyBzdHJlYW1fc2NoZWRfZmMubyBcXFxcXFxuICAxNzpcXHRcXHQgIHN0cmVhbV9pbnRlcmxlYXZlLm9cXG4gIDE4OlxcdFxcbiAgMTk6XFx0c2N0cF9kaWFnLXkgOj0gZGlhZy5vXFxuICAyMDpcXHRcXG4gIDIxOlxcdHNjdHAtJChDT05GSUdfU0NUUF9EQkdfT0JKQ05UKSArPSBvYmpjbnQub1xcbiAgMjI6XFx0c2N0cC0kKENPTkZJR19QUk9DX0ZTKSArPSBwcm9jLm9cXG4gIDIzOlxcdHNjdHAtJChDT05GSUdfU1lTQ1RMKSArPSBzeXNjdGwub1xcbiAgMjQ6XFx0XFxuICAyNTpcXHRzY3RwLSQoc3Vic3QgbSx5LCQoQ09ORklHX0lQVjYpKVxcdCs9IGlwdjYub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwOTo0NzoxMS4wMDU2NTAyMjNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDY5MTI5NzAxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBJUF9TQ1RQIFNvY2tldCBNb2R1bGUgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBgSVBfU0NUUGAgaXMgYnVpbGRpbmcgYHNvY2tldC5vYC4gVGltZSB0byBtZXRpY3Vsb3VzbHkgcmV2aWV3IGV2ZXJ5dGhpbmcuIEZpcnN0LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogaXMgdGhpcyBtb2R1bGUgd29ydGggZnV6emluZz8gVGhlIGFuc3dlciwgdW5lcXVpdm9jYWxseSwgaXMgKnRydWUqLiBXZSd2ZSBkZWVtZWQgaXQgYSBoaWdoLXZhbHVlIHRhcmdldC4gTmV4dCwgd2UgaWRlbnRpZmllZCB0aGUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0czogYHNjdHBfc2VuZG1zZ190b19hc29jYCwgYHNjdHBfc2VuZG1zZ2AsIGFuZCBgc2N0cF93YWl0X2Zvcl9jb25uZWN0YC4gVGhlc2UgZnVuY3Rpb25zIGFyZSB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCBzbyB0byBzcGVhaywgaW4gU0NUUCBjb21tdW5pY2F0aW9uLiBUbyBlbnN1cmUgdGhlIGZ1enppbmcgZW52aXJvbm1lbnQgaXMgYXBwcm9wcmlhdGVseSBjb25maWd1cmVkLCB3ZSd2ZSBlbmFibGVkIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnM6IGBJUF9TQ1RQYCBhbmQgYElORVRgLCBvZiBjb3Vyc2UuIEZpbmFsbHksIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgZGVjaXNpb24gaXMgY2xlYXIgYW5kIGNvbmNpc2Ug4oCTIGl0J3MgYSBzb2xpZCwgd2VsbC1kZWZpbmVkIHRhcmdldCB3aXRoIGtub3duIHZ1bG5lcmFiaWxpdGllcy4gVGltZSB0byBjb25maXJtIHRoZXNlIHJlc3VsdHMgd2l0aCBgc2V0LXJlc3VsdHNgLCBhbmQgbW92ZSBvbiB0byB0aGUgbmV4dCBtb2R1bGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzg4LCJPdXRwdXRUb2tlbnMiOjE1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA5OjQ3OjE1LjY5Njk0OTY0NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3OTM3ODM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9TQ1RQXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2N0cF9zZW5kbXNnX3RvX2Fzb2NcIixcbiAgICBcInNjdHBfc2VuZG1zZ1wiLFxuICAgIFwic2N0cF93YWl0X2Zvcl9jb25uZWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc2N0cF9zZW5kbXNnX3RvX2Fzb2MgaW4gbmV0L3NjdHAvc29ja2V0LmMgdG8gcHJvcGVybHkgaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgU0NUUCBhc3NvY2lhdGlvbiBhY3Jvc3Mgc2N0cF93YWl0X2Zvcl9jb25uZWN0IGFuZCBjaGVjayBpZiB0aGUgYXNzb2NpYXRpb24gaXMgZGVhZCB3aGVuIHN0cmVhbSBpbnRlcmxlYXZpbmcgaXMgZW5hYmxlZC4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgc29ja2V0IGNvZGUgdGhhdCBjYW4gYmUgZXhlcmNpc2VkIHZpYSBzdGFuZGFyZCBTQ1RQIHNvY2tldCBzZW5kbXNnIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfU0NUUFwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNjdHBfc2VuZG1zZ190b19hc29jXCIsXG4gICAgXCJzY3RwX3NlbmRtc2dcIixcbiAgICBcInNjdHBfd2FpdF9mb3JfY29ubmVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHNjdHBfc2VuZG1zZ190b19hc29jIGluIG5ldC9zY3RwL3NvY2tldC5jIHRvIHByb3Blcmx5IGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIFNDVFAgYXNzb2NpYXRpb24gYWNyb3NzIHNjdHBfd2FpdF9mb3JfY29ubmVjdCBhbmQgY2hlY2sgaWYgdGhlIGFzc29jaWF0aW9uIGlzIGRlYWQgd2hlbiBzdHJlYW0gaW50ZXJsZWF2aW5nIGlzIGVuYWJsZWQuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIHNvY2tldCBjb2RlIHRoYXQgY2FuIGJlIGV4ZXJjaXNlZCB2aWEgc3RhbmRhcmQgU0NUUCBzb2NrZXQgc2VuZG1zZyBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwOTo0NzoxNS43NzQ4OTU0NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3NTMzNjcxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwOTo0NzoxNS43NzUzMzg3OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjExNzUyOTE5MTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYXNzb2NpYXRpb24gbGlmZXRpbWUgbWFuYWdlbWVudCBpbiBgc2N0cF9zZW5kbXNnX3RvX2Fzb2NgIGJ5IGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gYGFzb2NgIChgc2N0cF9hc3NvY2lhdGlvbl9ob2xkYC9gc2N0cF9hc3NvY2lhdGlvbl9wdXRgKSBhY3Jvc3MgdGhlIGJsb2NraW5nIGBzY3RwX3dhaXRfZm9yX2Nvbm5lY3RgIGNhbGwgYW5kIGNoZWNraW5nIGBhc29jLVxcdTAwM2ViYXNlLmRlYWRgIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgb3Igb3BlcmF0aW9ucyBvbiBhIGRlYWQgYXNzb2NpYXRpb24uXFxuXFxuLSBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5OlxcbiAgLSBUaGlzIGNoYW5nZSBhZGRyZXNzZXMgb2JqZWN0IGxpZmV0aW1lIGFuZCB1c2UtYWZ0ZXItZnJlZSByaXNrcywgd2hpY2ggYXJlIGRpcmVjdGx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLlxcbiAgLSBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBhbGxvY2F0ZWQsIG9yIGV4cG9zZWQuIFRoZSBuZXdseSBpbnRyb2R1Y2VkIGxvY2FsIHZhcmlhYmxlIGBkZWFkYCBpcyBleHBsaWNpdGx5IGFzc2lnbmVkIGBkZWFkID0gYXNvYy1cXHUwMDNlYmFzZS5kZWFkO2AgaW1tZWRpYXRlbHkgYmVmb3JlIGV2YWx1YXRpb24uXFxuICAtIFRoZXJlIGFyZSBubyBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29waWVzLCBwYWRkaW5nIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHJlYWRzIGludm9sdmVkLlxcblxcblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkOyBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTI4ZjRlNjUyYmZiZTEzY2NiMmYxYzU0MWZlYTk0ZTdiNzg4YWQxMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDA5OjQ2OjQxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc29ja2V0LmMgYi9uZXQvc2N0cC9zb2NrZXQuY1xuaW5kZXggYzdiOWUzMjVlYzFjZC4uMDlmZDZiOTUxMzc0MSAxMDA2NDRcbi0tLSBhL25ldC9zY3RwL3NvY2tldC5jXG4rKysgYi9uZXQvc2N0cC9zb2NrZXQuY1xuQEAgLTE4NDIsOSArMTg0MiwxNCBAQCBzdGF0aWMgaW50IHNjdHBfc2VuZG1zZ190b19hc29jKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxuIFx0XHRcdGdvdG8gZXJyO1xuIFxuIFx0XHRpZiAoYXNvYy1cdTAwM2VlcC1cdTAwM2VpbnRsX2VuYWJsZSkge1xuK1x0XHRcdGJvb2wgZGVhZDtcbitcbiBcdFx0XHR0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIDApO1xuK1x0XHRcdHNjdHBfYXNzb2NpYXRpb25faG9sZChhc29jKTtcbiBcdFx0XHRlcnIgPSBzY3RwX3dhaXRfZm9yX2Nvbm5lY3QoYXNvYywgXHUwMDI2dGltZW8pO1xuLVx0XHRcdGlmIChlcnIpIHtcbitcdFx0XHRkZWFkID0gYXNvYy1cdTAwM2ViYXNlLmRlYWQ7XG4rXHRcdFx0c2N0cF9hc3NvY2lhdGlvbl9wdXQoYXNvYyk7XG4rXHRcdFx0aWYgKGVyciB8fCBkZWFkKSB7XG4gXHRcdFx0XHRlcnIgPSAtRVNSQ0g7XG4gXHRcdFx0XHRnb3RvIGVycjtcbiBcdFx0XHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwOTo0NzoxNS43NzUzNDAwOVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTAxMTE2ODM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU0NUUCBTb2NrZXQgQ29kZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIFRoaXMgcGF0Y2ggcmVxdWlyZXMgYSBjbG9zZSBsb29rLCBhbmQgdG8gdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zLCBJIG5lZWQgdG8gem9vbSBpbiBvbiB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBpbiBgbmV0L3NjdHAvc29ja2V0LmNgLiBJJ2xsIHVzZSBteSBlc3RhYmxpc2hlZCB3b3JrZmxvdzogZmlyc3QsIEknbGwgcHVsbCB1cCB0aGUgY29kZSB1c2luZyBgcmVhZC1maWxlYCBhbmQgY2VudGVyIHRoZSB2aWV3IGFyb3VuZCBsaW5lIDE4NDIuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHZpc3VhbCBhbmNob3IgZm9yIHRoZSBjaGFuZ2UgYW5kIGhlbHAgbWUgcXVpY2tseSBncmFzcCB0aGUgbG9jYWwgZnVuY3Rpb24gYW5kIGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSBpbXBhY3RlZC4gRnJvbSB0aGVyZSwgSSBjYW4gc3RhcnQgdG8gaWRlbnRpZnkgdGhlIHNwZWNpZmljIGxvZ2ljIHRoaXMgcGF0Y2ggbW9kaWZpZXMgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgZXhpc3RpbmcgaW1wbGVtZW50YXRpb24uIFRoaXMgaXMgdGhlIGJlc3Qgd2F5IHRvIGdldCBhIHNvbGlkIGhhbmRsZSBvbiB0aGUgY2hhbmdlJ3MgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQ3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwOTo0NzoxOS42NzY0NjAzMzRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY0NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY3RwL3NvY2tldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MjUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4MjU6XFx0XFx0aWYgKHNjdHBfd3NwYWNlKGFzb2MpIFxcdTAwM2MgKGludCltc2dfbGVuKVxcbjE4MjY6XFx0XFx0XFx0c2N0cF9wcnNjdHBfcHJ1bmUoYXNvYywgc2luZm8sIG1zZ19sZW4gLSBzY3RwX3dzcGFjZShhc29jKSk7XFxuMTgyNzpcXHRcXG4xODI4OlxcdFxcdGlmIChzY3RwX3dzcGFjZShhc29jKSBcXHUwMDNjPSAwIHx8ICFza193bWVtX3NjaGVkdWxlKHNrLCBtc2dfbGVuKSkge1xcbjE4Mjk6XFx0XFx0XFx0dGltZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCBtc2ctXFx1MDAzZW1zZ19mbGFncyBcXHUwMDI2IE1TR19ET05UV0FJVCk7XFxuMTgzMDpcXHRcXHRcXHRlcnIgPSBzY3RwX3dhaXRfZm9yX3NuZGJ1Zihhc29jLCB0cmFuc3BvcnQsIFxcdTAwMjZ0aW1lbywgbXNnX2xlbik7XFxuMTgzMTpcXHRcXHRcXHRpZiAoZXJyKVxcbjE4MzI6XFx0XFx0XFx0XFx0Z290byBlcnI7XFxuMTgzMzpcXHRcXHRcXHRpZiAodW5saWtlbHkoc2luZm8tXFx1MDAzZXNpbmZvX3N0cmVhbSBcXHUwMDNlPSBhc29jLVxcdTAwM2VzdHJlYW0ub3V0Y250KSkge1xcbjE4MzQ6XFx0XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4xODM1OlxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbjE4MzY6XFx0XFx0XFx0fVxcbjE4Mzc6XFx0XFx0fVxcbjE4Mzg6XFx0XFxuMTgzOTpcXHRcXHRpZiAoc2N0cF9zdGF0ZShhc29jLCBDTE9TRUQpKSB7XFxuMTg0MDpcXHRcXHRcXHRlcnIgPSBzY3RwX3ByaW1pdGl2ZV9BU1NPQ0lBVEUobmV0LCBhc29jLCBOVUxMKTtcXG4xODQxOlxcdFxcdFxcdGlmIChlcnIpXFxuMTg0MjpcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4xODQzOlxcdFxcbjE4NDQ6XFx0XFx0XFx0aWYgKGFzb2MtXFx1MDAzZWVwLVxcdTAwM2VpbnRsX2VuYWJsZSkge1xcbjE4NDU6XFx0XFx0XFx0XFx0Ym9vbCBkZWFkO1xcbjE4NDY6XFx0XFxuMTg0NzpcXHRcXHRcXHRcXHR0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIDApO1xcbjE4NDg6XFx0XFx0XFx0XFx0c2N0cF9hc3NvY2lhdGlvbl9ob2xkKGFzb2MpO1xcbjE4NDk6XFx0XFx0XFx0XFx0ZXJyID0gc2N0cF93YWl0X2Zvcl9jb25uZWN0KGFzb2MsIFxcdTAwMjZ0aW1lbyk7XFxuMTg1MDpcXHRcXHRcXHRcXHRkZWFkID0gYXNvYy1cXHUwMDNlYmFzZS5kZWFkO1xcbjE4NTE6XFx0XFx0XFx0XFx0c2N0cF9hc3NvY2lhdGlvbl9wdXQoYXNvYyk7XFxuMTg1MjpcXHRcXHRcXHRcXHRpZiAoZXJyIHx8IGRlYWQpIHtcXG4xODUzOlxcdFxcdFxcdFxcdFxcdGVyciA9IC1FU1JDSDtcXG4xODU0OlxcdFxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbjE4NTU6XFx0XFx0XFx0XFx0fVxcbjE4NTY6XFx0XFx0XFx0fSBlbHNlIHtcXG4xODU3OlxcdFxcdFxcdFxcdHdhaXRfY29ubmVjdCA9IHRydWU7XFxuMTg1ODpcXHRcXHRcXHR9XFxuMTg1OTpcXHRcXG4xODYwOlxcdFxcdFxcdHByX2RlYnVnKFxcXCIlczogd2UgYXNzb2NpYXRlZCBwcmltaXRpdmVseVxcXFxuXFxcIiwgX19mdW5jX18pO1xcbjE4NjE6XFx0XFx0fVxcbjE4NjI6XFx0XFxuMTg2MzpcXHRcXHRkYXRhbXNnID0gc2N0cF9kYXRhbXNnX2Zyb21fdXNlcihhc29jLCBzaW5mbywgXFx1MDAyNm1zZy1cXHUwMDNlbXNnX2l0ZXIpO1xcbjE4NjQ6XFx0XFx0aWYgKElTX0VSUihkYXRhbXNnKSkge1xcbjE4NjU6XFx0XFx0XFx0ZXJyID0gUFRSX0VSUihkYXRhbXNnKTtcXG4xODY2OlxcdFxcdFxcdGdvdG8gZXJyO1xcbjE4Njc6XFx0XFx0fVxcbjE4Njg6XFx0XFxuMTg2OTpcXHRcXHRhc29jLVxcdTAwM2Vmb3JjZV9kZWxheSA9ICEhKG1zZy1cXHUwMDNlbXNnX2ZsYWdzIFxcdTAwMjYgTVNHX01PUkUpO1xcbjE4NzA6XFx0XFxuMTg3MTpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGNodW5rLCBcXHUwMDI2ZGF0YW1zZy1cXHUwMDNlY2h1bmtzLCBmcmFnX2xpc3QpIHtcXG4xODcyOlxcdFxcdFxcdHNjdHBfY2h1bmtfaG9sZChjaHVuayk7XFxuMTg3MzpcXHRcXHRcXHRzY3RwX3NldF9vd25lcl93KGNodW5rKTtcXG4xODc0OlxcdFxcdFxcdGNodW5rLVxcdTAwM2V0cmFuc3BvcnQgPSB0cmFuc3BvcnQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA5OjQ3OjE5LjY3NzAyNzA4NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3ODUxMjEwOTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IFNDVFAgQXNzb2NpYXRpb24gTGlmZXRpbWUgTWFuYWdlbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMgd2l0aGluIGBzY3RwX3NlbmRtc2dfdG9fYXNvY2AuIExvb2tpbmcgYXQgdGhlIGNvZGUsIGl0J3MgcHJldHR5IGNsZWFyOiBXZSd2ZSBpbnRyb2R1Y2VkIHJlZmVyZW5jZSBjb3VudGluZyBhcm91bmQgdGhlIGNhbGwgdG8gYHNjdHBfd2FpdF9mb3JfY29ubmVjdGAuICBQcmV2aW91c2x5LCB3ZSBoYWQgdGhpczpcblxuYGBgY1xuXHRcdGlmIChhc29jLVx1MDAzZWVwLVx1MDAzZWludGxfZW5hYmxlKSB7XG5cdFx0XHR0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIDApO1xuXHRcdFx0ZXJyID0gc2N0cF93YWl0X2Zvcl9jb25uZWN0KGFzb2MsIFx1MDAyNnRpbWVvKTtcblx0XHRcdGlmIChlcnIpIHtcblx0XHRcdFx0ZXJyID0gLUVTUkNIO1xuXHRcdFx0XHRnb3RvIGVycjtcblx0XHRcdH1cbmBgYFxuXG5Ob3csIHdlIGhhdmU6XG5cbmBgYGNcblx0XHRpZiAoYXNvYy1cdTAwM2VlcC1cdTAwM2VpbnRsX2VuYWJsZSkge1xuXHRcdFx0Ym9vbCBkZWFkO1xuXG5cdFx0XHR0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIDApO1xuXHRcdFx0c2N0cF9hc3NvY2lhdGlvbl9ob2xkKGFzb2MpO1xuXHRcdFx0ZXJyID0gc2N0cF93YWl0X2Zvcl9jb25uZWN0KGFzb2MsIFx1MDAyNnRpbWVvKTtcblx0XHRcdGRlYWQgPSBhc29jLVx1MDAzZWJhc2UuZGVhZDtcblx0XHRcdHNjdHBfYXNzb2NpYXRpb25fcHV0KGFzb2MpO1xuXHRcdFx0aWYgKGVyciB8fCBkZWFkKSB7XG5cdFx0XHRcdGVyciA9IC1FU1JDSDtcblx0XHRcdFx0Z290byBlcnI7XG5cdFx0XHR9XG5gYGBcblxuVGhlIG1vdGl2YXRpb24gaXMgb2J2aW91czogYHNjdHBfd2FpdF9mb3JfY29ubmVjdGAgcmVsZWFzZXMgdGhlIHNvY2tldCBsb2NrLiBEdXJpbmcgdGhlIHdhaXQsIHRoZSBgYXNvY2AgYXNzb2NpYXRpb24gY291bGQgYmUgZnJlZWQsIGNsb3NlZCwgb3Igb3RoZXJ3aXNlIGludmFsaWRhdGVkLiAgVGhlIGBzY3RwX2Fzc29jaWF0aW9uX2hvbGRgIGlzIGtleSB0byBwcmV2ZW50IGEgdXNlLWFmdGVyLWZyZWUsIHdoaWxlIHRoZSBgYXNvYy1cdTAwM2ViYXNlLmRlYWRgIGNoZWNrIHByb3ZpZGVzIGFuIGFkZGl0aW9uYWwgc2FmZWd1YXJkLlxuXG5TbywgdGhpcyBpcyBhIGNsZWFyIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZTogIHJlZmNvdW50aW5nIHRvIHByZXZlbnQgVUFGIG9yIGFjY2Vzc2luZyBhIGRlYWQgYXNzb2NpYXRpb24uIFRoaXMgZmFsbHMgc3F1YXJlbHkgaW50byB0aGUgcmVhbG0gb2YgS0FTQU4uXG5cbk5vdywgbGV0J3MgbWV0aG9kaWNhbGx5IGNoZWNrIGZvciBLTVNBTi1zcGVjaWZpYyBjb25jZXJucy4gSXMgdGhlcmUgYSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gVGhlIGBkZWFkYCB2YXJpYWJsZSBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIGltbWVkaWF0ZWx5IGFmdGVyIGBzY3RwX3dhaXRfZm9yX2Nvbm5lY3RgIHJldHVybnMuIEl0J3MgdGhlbiByZWFkIGluIHRoZSBgaWZgIHN0YXRlbWVudC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCBvciBsZWFrZWQuIE5vIGtlcm5lbCBkYXRhIGlzIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gIE5vIHBhZGRpbmcgaXNzdWVzIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBhcmUgcHJlc2VudC5cblxuTGV0IG1lIGdvIHRocm91Z2ggdGhlIHN0YW5kYXJkIEtNU0FOIGNoZWNrbGlzdC4gRG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBvciBtb2RpZnk6XG4xLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIGZpZWxkcyBvciBwYWRkaW5nIG1pZ2h0IGJlIHVuaW5pdGlhbGl6ZWQ/IE5vcGUuXG4yLiAgQ29uZGl0aW9uYWwgbG9naWMgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHM/ICBOby4gYGRlYWRgIGlzIGluaXRpYWxpemVkIHJpZ2h0IGJlZm9yZSBiZWluZyB1c2VkLlxuMy4gIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlcj8gTm8uXG40LiAgQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBhbGxvd3MgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXM/IE5vdCBoZXJlLlxuXG5UaGUgYm90dG9tIGxpbmU6IHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgY2xhc3NpYyBVQUYvbGlmZWN5Y2xlIGlzc3VlLCBwZXJmZWN0IGZvciBLQVNBTi5cblxuVGhlIEtNU0FOIHJlYXNvbmluZyBpcyBjbGVhcjpcbiogICBUaGUgcGF0Y2ggYWRkcmVzc2VzIGFzc29jaWF0aW9uIGxpZmV0aW1lIG1hbmFnZW1lbnQgYW5kIHByZXZlbnRzIHVzZS1hZnRlci1mcmVlIGJ5IHVzaW5nIHJlZmVyZW5jZSBjb3VudGluZy5cbiogICBUaGUgYnVnIGJlaW5nIGFkZHJlc3NlZCwgVUFGIHJlbGF0ZWQgdG8gbGlmZXRpbWUgbWFuYWdlbWVudCwgaXMgd2l0aGluIEtBU0FOJ3MgZG9tYWluLlxuKiAgIE5vIG5ldyB1bmluaXRpYWxpemVkIGhlYXAsIHN0YWNrLCBvciBwYWdlIGFsbG9jYXRpb25zIGFyZSBpbnZvbHZlZC4gVGhlIGBkZWFkYCB2YXJpYWJsZSBpcyBhbHdheXMgaW5pdGlhbGl6ZWQuXG4qICAgTm8ga2VybmVsIGRhdGEgaXMgY29waWVkIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGZhbHNlLiBEb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjExLCJPdXRwdXRUb2tlbnMiOjIzNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwOTo0NzoyNy41MjgyNDI3NTlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhc3NvY2lhdGlvbiBsaWZldGltZSBtYW5hZ2VtZW50IGluIGBzY3RwX3NlbmRtc2dfdG9fYXNvY2AgYnkgaG9sZGluZyBhIHJlZmVyZW5jZSB0byBgYXNvY2AgKGBzY3RwX2Fzc29jaWF0aW9uX2hvbGRgL2BzY3RwX2Fzc29jaWF0aW9uX3B1dGApIGFjcm9zcyB0aGUgYmxvY2tpbmcgYHNjdHBfd2FpdF9mb3JfY29ubmVjdGAgY2FsbCBhbmQgY2hlY2tpbmcgYGFzb2MtXFx1MDAzZWJhc2UuZGVhZGAgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBvciBvcGVyYXRpb25zIG9uIGEgZGVhZCBhc3NvY2lhdGlvbi5cXG5cXG4tIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHk6XFxuICAtIFRoaXMgY2hhbmdlIGFkZHJlc3NlcyBvYmplY3QgbGlmZXRpbWUgYW5kIHVzZS1hZnRlci1mcmVlIHJpc2tzLCB3aGljaCBhcmUgZGlyZWN0bHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4uXFxuICAtIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGFsbG9jYXRlZCwgb3IgZXhwb3NlZC4gVGhlIG5ld2x5IGludHJvZHVjZWQgbG9jYWwgdmFyaWFibGUgYGRlYWRgIGlzIGV4cGxpY2l0bHkgYXNzaWduZWQgYGRlYWQgPSBhc29jLVxcdTAwM2ViYXNlLmRlYWQ7YCBpbW1lZGlhdGVseSBiZWZvcmUgZXZhbHVhdGlvbi5cXG4gIC0gVGhlcmUgYXJlIG5vIGtlcm5lbC10by11c2VyIG1lbW9yeSBjb3BpZXMsIHBhZGRpbmcgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcmVhZHMgaW52b2x2ZWQuXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQ7IHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYXNzb2NpYXRpb24gbGlmZXRpbWUgbWFuYWdlbWVudCBpbiBgc2N0cF9zZW5kbXNnX3RvX2Fzb2NgIGJ5IGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gYGFzb2NgIChgc2N0cF9hc3NvY2lhdGlvbl9ob2xkYC9gc2N0cF9hc3NvY2lhdGlvbl9wdXRgKSBhY3Jvc3MgdGhlIGJsb2NraW5nIGBzY3RwX3dhaXRfZm9yX2Nvbm5lY3RgIGNhbGwgYW5kIGNoZWNraW5nIGBhc29jLVxcdTAwM2ViYXNlLmRlYWRgIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgb3Igb3BlcmF0aW9ucyBvbiBhIGRlYWQgYXNzb2NpYXRpb24uXFxuXFxuLSBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5OlxcbiAgLSBUaGlzIGNoYW5nZSBhZGRyZXNzZXMgb2JqZWN0IGxpZmV0aW1lIGFuZCB1c2UtYWZ0ZXItZnJlZSByaXNrcywgd2hpY2ggYXJlIGRpcmVjdGx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLlxcbiAgLSBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBhbGxvY2F0ZWQsIG9yIGV4cG9zZWQuIFRoZSBuZXdseSBpbnRyb2R1Y2VkIGxvY2FsIHZhcmlhYmxlIGBkZWFkYCBpcyBleHBsaWNpdGx5IGFzc2lnbmVkIGBkZWFkID0gYXNvYy1cXHUwMDNlYmFzZS5kZWFkO2AgaW1tZWRpYXRlbHkgYmVmb3JlIGV2YWx1YXRpb24uXFxuICAtIFRoZXJlIGFyZSBubyBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29waWVzLCBwYWRkaW5nIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHJlYWRzIGludm9sdmVkLlxcblxcblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkOyBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowqbj57[1] Phase: Succeeded StartedAt: 2026-09-11 09:47:39 +0000 UTC FinishedAt: 2026-09-11 09:47:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbj57[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-11 09:47:39 +0000 UTC FinishedAt: 2026-09-11 09:47:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbj57[2] Phase: Succeeded StartedAt: 2026-09-11 09:47:39 +0000 UTC FinishedAt: 2026-09-11 13:27:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbj57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_sendmsg_to_asoc","sctp_sendmsg","sctp_wait_for_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"36f2051d-d2fd-42fe-af2a-cd4c6bf3dde4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-11 09:47:39 +0000 UTC FinishedAt: 2026-09-11 13:27:16 +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":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_sendmsg_to_asoc","sctp_sendmsg","sctp_wait_for_connect"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"36f2051d-d2fd-42fe-af2a-cd4c6bf3dde4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowqbj57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_sendmsg_to_asoc","sctp_sendmsg","sctp_wait_for_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"36f2051d-d2fd-42fe-af2a-cd4c6bf3dde4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-11 09:47:39 +0000 UTC FinishedAt: 2026-09-11 09:47:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbj57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_sendmsg_to_asoc","sctp_sendmsg","sctp_wait_for_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"36f2051d-d2fd-42fe-af2a-cd4c6bf3dde4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-11 09:47:39 +0000 UTC FinishedAt: 2026-09-11 09:47:43 +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":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowqbj57/series-workflowqbj57-convert-artifact-1935732414/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqbj57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_sendmsg_to_asoc","sctp_sendmsg","sctp_wait_for_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"36f2051d-d2fd-42fe-af2a-cd4c6bf3dde4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-11 09:47:49 +0000 UTC FinishedAt: 2026-09-11 10:03:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbj57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_sendmsg_to_asoc","sctp_sendmsg","sctp_wait_for_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"36f2051d-d2fd-42fe-af2a-cd4c6bf3dde4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-11 09:47:49 +0000 UTC FinishedAt: 2026-09-11 10:03:57 +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:*24a2ecc5-4dea-4872-b02e-f886c4e53dd6,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-workflowqbj57/series-workflowqbj57-convert-artifact-1935732414/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": "d5db1c63-6c3f-458d-8d17-a4e399b96fac", "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-workflowqbj57/series-workflowqbj57-build-action-2497234852/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqbj57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_sendmsg_to_asoc","sctp_sendmsg","sctp_wait_for_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"36f2051d-d2fd-42fe-af2a-cd4c6bf3dde4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-11 09:47:49 +0000 UTC FinishedAt: 2026-09-11 10:03:45 +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:*24a2ecc5-4dea-4872-b02e-f886c4e53dd6,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-workflowqbj57/series-workflowqbj57-convert-artifact-1935732414/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": "d5db1c63-6c3f-458d-8d17-a4e399b96fac", "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-workflowqbj57/series-workflowqbj57-build-action-2497234852/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqbj57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_sendmsg_to_asoc","sctp_sendmsg","sctp_wait_for_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"36f2051d-d2fd-42fe-af2a-cd4c6bf3dde4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-11 10:03:57 +0000 UTC FinishedAt: 2026-09-11 10:03:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbj57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_sendmsg_to_asoc","sctp_sendmsg","sctp_wait_for_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"36f2051d-d2fd-42fe-af2a-cd4c6bf3dde4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-11 10:03:57 +0000 UTC FinishedAt: 2026-09-11 10:03:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbj57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_sendmsg_to_asoc","sctp_sendmsg","sctp_wait_for_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"36f2051d-d2fd-42fe-af2a-cd4c6bf3dde4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-11 10:03:57 +0000 UTC FinishedAt: 2026-09-11 10:04:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbj57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_sendmsg_to_asoc","sctp_sendmsg","sctp_wait_for_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"36f2051d-d2fd-42fe-af2a-cd4c6bf3dde4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-11 10:03:57 +0000 UTC FinishedAt: 2026-09-11 10:04:00 +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":["IP_SCTP","INET"],"series_id":"36f2051d-d2fd-42fe-af2a-cd4c6bf3dde4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowqbj57/series-workflowqbj57-convert-artifact-1188927985/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqbj57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_sendmsg_to_asoc","sctp_sendmsg","sctp_wait_for_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"36f2051d-d2fd-42fe-af2a-cd4c6bf3dde4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-11 10:04:07 +0000 UTC FinishedAt: 2026-09-11 10:06:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbj57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_sendmsg_to_asoc","sctp_sendmsg","sctp_wait_for_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"36f2051d-d2fd-42fe-af2a-cd4c6bf3dde4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-11 10:04:07 +0000 UTC FinishedAt: 2026-09-11 10:05:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d5db1c63-6c3f-458d-8d17-a4e399b96fac,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-workflowqbj57/series-workflowqbj57-build-action-2497234852/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-workflowqbj57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_sendmsg_to_asoc","sctp_sendmsg","sctp_wait_for_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"36f2051d-d2fd-42fe-af2a-cd4c6bf3dde4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-11 10:06:05 +0000 UTC FinishedAt: 2026-09-11 10:06:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbj57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_sendmsg_to_asoc","sctp_sendmsg","sctp_wait_for_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"36f2051d-d2fd-42fe-af2a-cd4c6bf3dde4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-11 10:06:05 +0000 UTC FinishedAt: 2026-09-11 10:06:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbj57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_sendmsg_to_asoc","sctp_sendmsg","sctp_wait_for_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"36f2051d-d2fd-42fe-af2a-cd4c6bf3dde4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-11 10:06:05 +0000 UTC FinishedAt: 2026-09-11 10:22:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbj57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_sendmsg_to_asoc","sctp_sendmsg","sctp_wait_for_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"36f2051d-d2fd-42fe-af2a-cd4c6bf3dde4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-11 10:06:05 +0000 UTC FinishedAt: 2026-09-11 10:22:07 +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:*24a2ecc5-4dea-4872-b02e-f886c4e53dd6,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-workflowqbj57/series-workflowqbj57-convert-artifact-1188927985/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": "f78c33de-feb9-4fbe-9ecc-bbcc8c336d62", "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-workflowqbj57/series-workflowqbj57-build-action-3040032701/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqbj57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_sendmsg_to_asoc","sctp_sendmsg","sctp_wait_for_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"36f2051d-d2fd-42fe-af2a-cd4c6bf3dde4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-11 10:06:05 +0000 UTC FinishedAt: 2026-09-11 10:21:57 +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:*24a2ecc5-4dea-4872-b02e-f886c4e53dd6,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-workflowqbj57/series-workflowqbj57-convert-artifact-1188927985/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": "f78c33de-feb9-4fbe-9ecc-bbcc8c336d62", "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-workflowqbj57/series-workflowqbj57-build-action-3040032701/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqbj57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_sendmsg_to_asoc","sctp_sendmsg","sctp_wait_for_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"36f2051d-d2fd-42fe-af2a-cd4c6bf3dde4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-11 10:22:07 +0000 UTC FinishedAt: 2026-09-11 10:22:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbj57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_sendmsg_to_asoc","sctp_sendmsg","sctp_wait_for_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"36f2051d-d2fd-42fe-af2a-cd4c6bf3dde4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-11 10:22:07 +0000 UTC FinishedAt: 2026-09-11 10:22:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbj57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_sendmsg_to_asoc","sctp_sendmsg","sctp_wait_for_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"36f2051d-d2fd-42fe-af2a-cd4c6bf3dde4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-11 10:22:07 +0000 UTC FinishedAt: 2026-09-11 10:23:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbj57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_sendmsg_to_asoc","sctp_sendmsg","sctp_wait_for_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"36f2051d-d2fd-42fe-af2a-cd4c6bf3dde4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-11 10:22:07 +0000 UTC FinishedAt: 2026-09-11 10:23:48 +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:*f78c33de-feb9-4fbe-9ecc-bbcc8c336d62,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-workflowqbj57/series-workflowqbj57-build-action-3040032701/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-workflowqbj57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_sendmsg_to_asoc","sctp_sendmsg","sctp_wait_for_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"36f2051d-d2fd-42fe-af2a-cd4c6bf3dde4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-11 10:23:58 +0000 UTC FinishedAt: 2026-09-11 13:27:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbj57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_sendmsg_to_asoc","sctp_sendmsg","sctp_wait_for_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"36f2051d-d2fd-42fe-af2a-cd4c6bf3dde4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-11 10:23:58 +0000 UTC FinishedAt: 2026-09-11 13:27:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_sendmsg_to_asoc","sctp_sendmsg","sctp_wait_for_connect"],"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:*d5db1c63-6c3f-458d-8d17-a4e399b96fac,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f78c33de-feb9-4fbe-9ecc-bbcc8c336d62,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-workflowqbj57/series-workflowqbj57-build-action-2497234852/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-workflowqbj57/series-workflowqbj57-build-action-3040032701/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowqbj57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_sendmsg_to_asoc","sctp_sendmsg","sctp_wait_for_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"36f2051d-d2fd-42fe-af2a-cd4c6bf3dde4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-11 10:23:58 +0000 UTC FinishedAt: 2026-09-11 10:24:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbj57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_sendmsg_to_asoc","sctp_sendmsg","sctp_wait_for_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"36f2051d-d2fd-42fe-af2a-cd4c6bf3dde4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-11 10:23:58 +0000 UTC FinishedAt: 2026-09-11 10:24:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_sendmsg_to_asoc","sctp_sendmsg","sctp_wait_for_connect"],"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-workflowqbj57/series-workflowqbj57-convert-artifact-3936774822/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqbj57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_sendmsg_to_asoc","sctp_sendmsg","sctp_wait_for_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"36f2051d-d2fd-42fe-af2a-cd4c6bf3dde4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-11 10:23:58 +0000 UTC FinishedAt: 2026-09-11 10:23:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbj57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_sendmsg_to_asoc","sctp_sendmsg","sctp_wait_for_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"36f2051d-d2fd-42fe-af2a-cd4c6bf3dde4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-11 10:23:58 +0000 UTC FinishedAt: 2026-09-11 10:23:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbj57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_sendmsg_to_asoc","sctp_sendmsg","sctp_wait_for_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"36f2051d-d2fd-42fe-af2a-cd4c6bf3dde4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-11 10:23:58 +0000 UTC FinishedAt: 2026-09-11 10:23:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbj57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_sendmsg_to_asoc","sctp_sendmsg","sctp_wait_for_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"36f2051d-d2fd-42fe-af2a-cd4c6bf3dde4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-11 10:24:08 +0000 UTC FinishedAt: 2026-09-11 13:27:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbj57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_sendmsg_to_asoc","sctp_sendmsg","sctp_wait_for_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"36f2051d-d2fd-42fe-af2a-cd4c6bf3dde4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-11 10:24:08 +0000 UTC FinishedAt: 2026-09-11 13:27:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d5db1c63-6c3f-458d-8d17-a4e399b96fac,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f78c33de-feb9-4fbe-9ecc-bbcc8c336d62,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-workflowqbj57/series-workflowqbj57-build-action-2497234852/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-workflowqbj57/series-workflowqbj57-build-action-3040032701/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-workflowqbj57/series-workflowqbj57-convert-artifact-3936774822/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,}