Name: series-workflowttf6w Phase: Succeeded StartedAt: 2026-09-08 14:01:04 +0000 UTC FinishedAt: 2026-09-08 15:45:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowttf6w[0] Phase: Succeeded StartedAt: 2026-09-08 14:01:04 +0000 UTC FinishedAt: 2026-09-08 14:54:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowttf6w[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 14:01:04 +0000 UTC FinishedAt: 2026-09-08 14:54:56 +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": "068e5a0bc57e57d24cbf38def29cc5fb4db9a0df", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "RDS", "RDS_RDMA", "INFINIBAND", "INFINIBAND_ADDR_TRANS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "068e5a0bc57e57d24cbf38def29cc5fb4db9a0df", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "RDS", "RDS_RDMA", "INFINIBAND", "INFINIBAND_ADDR_TRANS" ], "series_id": "2c6cb100-29a7-4679-83ab-2ac2ea9fcaf3" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rds_ib_cm_connect_complete", "rds_rdma_cm_event_handler_cmn", "rds_ib_cm_handle_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+CgkJCTx0ZD4yMDI2LzA5LzA4IDE0OjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JEUyYjMzQ7LAogICAgJiMzNDtSRFNfUkRNQSYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkRfQUREUl9UUkFOUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Jkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlJiMzNDssCiAgICAmIzM0O3Jkc19yZG1hX2NtX2V2ZW50X2hhbmRsZXJfY21uJiMzNDssCiAgICAmIzM0O3Jkc19pYl9jbV9oYW5kbGVfY29ubmVjdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGEgZGlyZWN0IGNhbGwgdG8gYHJkc19jb25uX2Rlc3Ryb3koKWAgd2l0aCBgcmRzX2Nvbm5fZHJvcCgpYCBpbiBgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGUoKWAgd2hlbiBhbiB1bnN1cHBvcnRlZCBwcm90b2NvbCB2ZXJzaW9uIGlzIGVuY291bnRlcmVkLiBgcmRzX2Nvbm5fZGVzdHJveSgpYCBpbW1lZGlhdGVseSBmcmVlcyB0aGUgY29ubmVjdGlvbiBvYmplY3QgKGBjb25uYCBhbmQgYGNvbm4tXHUwMDNlY19wYXRoYCksIHdoaWNoIGNhdXNlcyB1c2UtYWZ0ZXItZnJlZSBhbmQgcHJlbWF0dXJlIGNsZWFudXAgaXNzdWVzIGluIGNvbm5lY3Rpb24gZXZlbnQgaGFuZGxpbmcgcGF0aHMuIGByZHNfY29ubl9kcm9wKClgIGNsZWFubHkgdGVhcnMgZG93biB0aGUgY29ubmVjdGlvbiB2aWEgYXN5bmNocm9ub3VzIHdvcmsuXG5cblRoaXMgY2hhbmdlIGlzIHB1cmVseSBjb25jZXJuZWQgd2l0aCBvYmplY3QgbGlmZXRpbWVzLCByZWZlcmVuY2UgbWFuYWdlbWVudCwgYW5kIHRlYXJkb3duIHN5bmNocm9uaXphdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gbG9naWMsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcvYnVmZmVycyB0byB1c2Vyc3BhY2UuIE1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgUkRTIG92ZXIgSW5maW5pQmFuZCBjb25uZWN0aW9uIGxpZmVjeWNsZSBoYW5kbGluZyBieSBjaGFuZ2luZyBgcmRzX2Nvbm5fZGVzdHJveWAgdG8gYHJkc19jb25uX2Ryb3BgIHdoZW4gZW5jb3VudGVyaW5nIHVuc3VwcG9ydGVkIHByb3RvY29sIHZlcnNpb25zIGluIGByZHNfaWJfY21fY29ubmVjdF9jb21wbGV0ZWAuIFRoaXMgYWx0ZXJzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGVycm9yIGhhbmRsaW5nIGFuZCBjb25uZWN0aW9uIHRlYXJkb3duIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTQ6NTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmMDU5MzcxZWY3NmRlMTE0MDIyYjU0M2QwZjI2MTVjMzE1MWQxNDIxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAxNDo1MzozOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvcmRzL2liX2NtLmMgYi9uZXQvcmRzL2liX2NtLmNcbmluZGV4IGQ0NjE0Njg4N2JhNDAuLjI5MDlkYTgzNjNmMzkgMTAwNjQ0XG4tLS0gYS9uZXQvcmRzL2liX2NtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvaWJfY20uY1xuQEAgLTExNSw3ICYjNDM7MTE1LDcgQEAgdm9pZCByZHNfaWJfY21fY29ubmVjdF9jb21wbGV0ZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCByZG1hX2NtX2V2ZW5cbiBcdFx0XHRcdCAgXHUwMDI2Y29ubi1cdTAwM2VjX2xhZGRyLCBcdTAwMjZjb25uLVx1MDAzZWNfZmFkZHIsXG4gXHRcdFx0XHQgIFJEU19QUk9UT0NPTF9NQUpPUihjb25uLVx1MDAzZWNfdmVyc2lvbiksXG4gXHRcdFx0XHQgIFJEU19QUk9UT0NPTF9NSU5PUihjb25uLVx1MDAzZWNfdmVyc2lvbikpO1xuLVx0XHRcdHJkc19jb25uX2Rlc3Ryb3koY29ubik7XG4mIzQzO1x0XHRcdHJkc19jb25uX2Ryb3AoY29ubik7XG4gXHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4gXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTQ6NTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UkRTJiMzNDssCiAgICAmIzM0O1JEU19SRE1BJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OywKICAgICYjMzQ7SU5GSU5JQkFORF9BRERSX1RSQU5TJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGUmIzM0OywKICAgICYjMzQ7cmRzX3JkbWFfY21fZXZlbnRfaGFuZGxlcl9jbW4mIzM0OywKICAgICYjMzQ7cmRzX2liX2NtX2hhbmRsZV9jb25uZWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIFJEUyBvdmVyIEluZmluaUJhbmQgY29ubmVjdGlvbiBsaWZlY3ljbGUgaGFuZGxpbmcgYnkgY2hhbmdpbmcgYHJkc19jb25uX2Rlc3Ryb3lgIHRvIGByZHNfY29ubl9kcm9wYCB3aGVuIGVuY291bnRlcmluZyB1bnN1cHBvcnRlZCBwcm90b2NvbCB2ZXJzaW9ucyBpbiBgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGVgLiBUaGlzIGFsdGVycyByZWFjaGFibGUgbmV0d29ya2luZyBlcnJvciBoYW5kbGluZyBhbmQgY29ubmVjdGlvbiB0ZWFyZG93biBmbG93LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjA1OTM3MWVmNzZkZTExNDAyMmI1NDNkMGYyNjE1YzMxNTFkMTQyMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMTQ6NTM6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvcmRzL2liX2NtLmMgYi9uZXQvcmRzL2liX2NtLmMKaW5kZXggZDQ2MTQ2ODg3YmE0MC4uMjkwOWRhODM2M2YzOSAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9pYl9jbS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvaWJfY20uYwpAQCAtMTE1LDcgJiM0MzsxMTUsNyBAQCB2b2lkIHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHJkbWFfY21fZXZlbgogCQkJCSAgJmFtcDtjb25uLSZndDtjX2xhZGRyLCAmYW1wO2Nvbm4tJmd0O2NfZmFkZHIsCiAJCQkJICBSRFNfUFJPVE9DT0xfTUFKT1IoY29ubi0mZ3Q7Y192ZXJzaW9uKSwKIAkJCQkgIFJEU19QUk9UT0NPTF9NSU5PUihjb25uLSZndDtjX3ZlcnNpb24pKTsKLQkJCXJkc19jb25uX2Rlc3Ryb3koY29ubik7CiYjNDM7CQkJcmRzX2Nvbm5fZHJvcChjb25uKTsKIAkJCXJldHVybjsKIAkJfQogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg3NwoJCQkJCQkJb3V0cHV0OiA5NwoJCQkJCQkJdGhvdWdodHM6IDE2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEludmVzdGlnYXRpb24gaW50byB0aGUgUkRTL0luZmluaUJhbmQgQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIHJlYWxseSAqdW5kZXJzdGFuZCogaXQuIFRoZSBrZXkgY2hhbmdlIGlzIGluIGBuZXQvcmRzL2liX2NtLmNgLCBzcGVjaWZpY2FsbHkgaW4gYHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlYC4gVGhleSYjMzk7dmUgc3dhcHBlZCBvdXQgYHJkc19jb25uX2Rlc3Ryb3koY29ubik7YCBmb3IgYHJkc19jb25uX2Ryb3AoY29ubik7YC4gSG1tLCBzdWJ0bGUgYnV0IHBvdGVudGlhbGx5IHNpZ25pZmljYW50LiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgbWlnaHQgaGF2ZSBpbXBsaWNhdGlvbnMgZm9yIGNvbm5lY3Rpb24gdGVhcmRvd24sIHJlc291cmNlIGNsZWFudXAsIG9yIG1heWJlIGV2ZW4gZXJyb3IgaGFuZGxpbmcgaW4gdGhlIGNvbnRleHQgb2YgSW5maW5pQmFuZC4gVGhpcyBtZWFucyBhIGNsb3NlciBsb29rIGF0IHRoZSAqd2h5KiBvZiB0aGUgY2hhbmdlIGlzIG5lZWRlZC4KClRpbWUgdG8gZGl2ZSBkZWVwZXIgaW50byBgbmV0L3Jkcy9pYl9jbS5jYC4gSSYjMzk7bGwgdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBnZXQgdGhlIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBSRFMgaW50ZXJhY3RzIHdpdGggSW5maW5pQmFuZCBhbmQgUkRNQSBpbiB0aGlzIHNwZWNpZmljIG1vZHVsZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igb3ZlcmFsbCBhcmNoaXRlY3R1cmUsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAoYXJlIHRoZXJlIGFueSB0aGF0IGFmZmVjdCB0aGlzIGJlaGF2aW9yPyksIGFuZCBlcnJvciBwYXRocy4gVGhpcyBtZWFucyB1bmRlcnN0YW5kaW5nIGhvdyBjb25uZWN0aW9ucyBhcmUgZXN0YWJsaXNoZWQsIG1hbmFnZWQsIGFuZCByZWxlYXNlZCB3aXRoaW4gdGhlIFJEUy9JQiBmcmFtZXdvcmsuCgpBIG1vcmUgbG9uZy10ZXJtIGNvbmNlcm4gSSYjMzk7bSB0aGlua2luZyBhYm91dCBpcyBmdXp6aW5nIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBDYW4gSSByZWFzb25hYmx5IGV4cGVjdCB0byBmdXp6IHRoaXMgc3VjY2Vzc2Z1bGx5IGluIG15IHN0YW5kYXJkIHZpcnR1YWxpemVkIFFFTVUgZW52aXJvbm1lbnRzLCB1c2luZyBzb21ldGhpbmcgbGlrZSByZG1hX3J4ZSwgc29mdC1pV0FSUCwgb3IgU0lXPyBJdCYjMzk7cyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgZmVhc2liaWxpdHkgb2YgdGVzdGluZyB0aGlzIGNoYW5nZSBlZmZlY3RpdmVseS4gVG8gZG8gdGhpcywgSSBuZWVkIHRvIGNoZWNrIHRoZSBSRFMgY29uZmlndXJhdGlvbiBhbmQgUkRNQSBzdXBwb3J0IHdpdGhpbiBzeXprYWxsZXIgYW5kIHRoZSBtYWlubGluZSBrZXJuZWwuIFRoZSBsZXZlbCBvZiBzdXBwb3J0IGluIHRoZXNlIGFyZWFzIHdpbGwgZGljdGF0ZSBob3cgZGlmZmljdWx0IHRoaXMgY2hhbmdlIGlzIHRvIHZhbGlkYXRlIHRob3JvdWdobHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTQ6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcmRzL2liX2NtLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwMDpcdFx0XHRtYWpvciA9IGRwLVx1MDAzZXJpY3BfdjQuZHBfcHJvdG9jb2xfbWFqb3I7XG4gMTAxOlx0XHRcdG1pbm9yID0gZHAtXHUwMDNlcmljcF92NC5kcF9wcm90b2NvbF9taW5vcjtcbiAxMDI6XHRcdFx0Y3JlZGl0ID0gZHAtXHUwMDNlcmljcF92NC5kcF9jcmVkaXQ7XG4gMTAzOlx0XHRcdGFja19zZXEgPSBnZXRfdW5hbGlnbmVkKFx1MDAyNmRwLVx1MDAzZXJpY3BfdjQuZHBfYWNrX3NlcSk7XG4gMTA0Olx0XHR9XG4gMTA1Olx0XG4gMTA2Olx0XHQvKiBtYWtlIHN1cmUgaXQgaXNuJiMzOTt0IGVtcHR5IGRhdGEgKi9cbiAxMDc6XHRcdGlmIChtYWpvcikge1xuIDEwODpcdFx0XHRyZHNfaWJfc2V0X3Byb3RvY29sKGNvbm4sIFJEU19QUk9UT0NPTChtYWpvciwgbWlub3IpKTtcbiAxMDk6XHRcdFx0cmRzX2liX3NldF9mbG93X2NvbnRyb2woY29ubiwgYmUzMl90b19jcHUoY3JlZGl0KSk7XG4gMTEwOlx0XHR9XG4gMTExOlx0XG4gMTEyOlx0XHRpZiAoY29ubi1cdTAwM2VjX3ZlcnNpb24gXHUwMDNjIFJEU19QUk9UT0NPTF9WRVJTSU9OKSB7XG4gMTEzOlx0XHRcdGlmIChjb25uLVx1MDAzZWNfdmVyc2lvbiAhPSBSRFNfUFJPVE9DT0xfQ09NUEFUX1ZFUlNJT04pIHtcbiAxMTQ6XHRcdFx0XHRwcl9ub3RpY2UoXCYjMzQ7UkRTL0lCOiBDb25uZWN0aW9uIFx1MDAzYyVwSTZjLCVwSTZjXHUwMDNlIHZlcnNpb24gJXUuJXUgbm8gbG9uZ2VyIHN1cHBvcnRlZFxcblwmIzM0OyxcbiAxMTU6XHRcdFx0XHRcdCAgXHUwMDI2Y29ubi1cdTAwM2VjX2xhZGRyLCBcdTAwMjZjb25uLVx1MDAzZWNfZmFkZHIsXG4gMTE2Olx0XHRcdFx0XHQgIFJEU19QUk9UT0NPTF9NQUpPUihjb25uLVx1MDAzZWNfdmVyc2lvbiksXG4gMTE3Olx0XHRcdFx0XHQgIFJEU19QUk9UT0NPTF9NSU5PUihjb25uLVx1MDAzZWNfdmVyc2lvbikpO1xuIDExODpcdFx0XHRcdHJkc19jb25uX2Ryb3AoY29ubik7XG4gMTE5Olx0XHRcdFx0cmV0dXJuO1xuIDEyMDpcdFx0XHR9XG4gMTIxOlx0XHR9XG4gMTIyOlx0XG4gMTIzOlx0XHRwcl9ub3RpY2UoXCYjMzQ7UkRTL0lCOiAlcyBjb25uIGNvbm5lY3RlZCBcdTAwM2MlcEk2YywlcEk2YywlZFx1MDAzZSB2ZXJzaW9uICV1LiV1JXNcXG5cJiMzNDssXG4gMTI0Olx0XHRcdCAgaWMtXHUwMDNlaV9hY3RpdmVfc2lkZSA/IFwmIzM0O0FjdGl2ZVwmIzM0OyA6IFwmIzM0O1Bhc3NpdmVcJiMzNDssXG4gMTI1Olx0XHRcdCAgXHUwMDI2Y29ubi1cdTAwM2VjX2xhZGRyLCBcdTAwMjZjb25uLVx1MDAzZWNfZmFkZHIsIGNvbm4tXHUwMDNlY190b3MsXG4gMTI2Olx0XHRcdCAgUkRTX1BST1RPQ09MX01BSk9SKGNvbm4tXHUwMDNlY192ZXJzaW9uKSxcbiAxMjc6XHRcdFx0ICBSRFNfUFJPVE9DT0xfTUlOT1IoY29ubi1cdTAwM2VjX3ZlcnNpb24pLFxuIDEyODpcdFx0XHQgIGljLVx1MDAzZWlfZmxvd2N0bCA/IFwmIzM0OywgZmxvdyBjb250cm9sXCYjMzQ7IDogXCYjMzQ7XCYjMzQ7KTtcbiAxMjk6XHRcbiAxMzA6XHRcdC8qIHJlY2VpdmUgc2wgZnJvbSB0aGUgcGVlciAqL1xuIDEzMTpcdFx0aWMtXHUwMDNlaV9zbCA9IGljLVx1MDAzZWlfY21faWQtXHUwMDNlcm91dGUucGF0aF9yZWMtXHUwMDNlc2w7XG4gMTMyOlx0XG4gMTMzOlx0XHRhdG9taWNfc2V0KFx1MDAyNmljLVx1MDAzZWlfY3FfcXVpZXNjZSwgMCk7XG4gMTM0Olx0XG4gMTM1Olx0XHQvKiBJbml0IHJpbmdzIGFuZCBmaWxsIHJlY3YuIHRoaXMgbmVlZHMgdG8gd2FpdCB1bnRpbCBwcm90b2NvbFxuIDEzNjpcdFx0ICogbmVnb3RpYXRpb24gaXMgY29tcGxldGUsIHNpbmNlIHJpbmcgbGF5b3V0IGlzIGRpZmZlcmVudFxuIDEzNzpcdFx0ICogZnJvbSAzLjEgdG8gNC4xLlxuIDEzODpcdFx0ICovXG4gMTM5Olx0XHRyZHNfaWJfc2VuZF9pbml0X3JpbmcoaWMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE0OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBSRFNfUkRNQSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yZHMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yZHMvS2NvbmZpZz0zPWNvbmZpZyBSRFNcbi0tXG5uZXQvcmRzL0tjb25maWctOS1cbm5ldC9yZHMvS2NvbmZpZzoxMDpjb25maWcgUkRTX1JETUFcbm5ldC9yZHMvS2NvbmZpZy0xMS1cdHRyaXN0YXRlIFwmIzM0O1JEUyBvdmVyIEluZmluaWJhbmRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvYmotXFwkXFwoQ09ORklHX1JEUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yZHMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yZHMvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5uZXQvcmRzL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX1JEUykgJiM0Mzs9IHJkcy5vXG5uZXQvcmRzL01ha2VmaWxlLTMtcmRzLXkgOj1cdGFmX3Jkcy5vIGJpbmQubyBjb25nLm8gY29ubmVjdGlvbi5vIGluZm8ubyBtZXNzYWdlLm8gICBcXFxuLS1cbm5ldC9yZHMvTWFrZWZpbGUtNi1cbm5ldC9yZHMvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfUkRTX1JETUEpICYjNDM7PSByZHNfcmRtYS5vXG5uZXQvcmRzL01ha2VmaWxlLTgtcmRzX3JkbWEteSA6PVx0cmRtYV90cmFuc3BvcnQubyBcXFxuLS1cbm5ldC9yZHMvTWFrZWZpbGUtMTItXG5uZXQvcmRzL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19SRFNfVENQKSAmIzQzOz0gcmRzX3RjcC5vXG5uZXQvcmRzL01ha2VmaWxlLTE0LXJkc190Y3AteSA6PVx0XHR0Y3AubyB0Y3BfY29ubmVjdC5vIHRjcF9saXN0ZW4ubyB0Y3BfcmVjdi5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDUzOAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBSRE1BIENvbmZpZ3VyYXRpb24gaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gUkRNQSB3aXRoaW4gdGhlIFJEUyAoUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cykgc3Vic3lzdGVtIG9mIHRoZSBMaW51eCBrZXJuZWwuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBsb29rIGF0IHRoZSBgS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgbmV0L3Jkcy9LY29uZmlnYCBmaWxlIGJlY2F1c2UgdGhhdCYjMzk7cyB0aGUgb2J2aW91cyBwbGFjZSB0byBmaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBmb3IgdGhlIFJEUyBwcm90b2NvbC4gSSYjMzk7bSB6ZXJvaW5nIGluIG9uIGBjb25maWcgUkRTX1JETUFgLiBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhlcmUmIzM5O3MgbGlrZWx5IGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24sIHBlcmhhcHMgYSBib29sZWFuLCB0aGF0IGNvbnRyb2xzIHdoZXRoZXIgb3Igbm90IHRoZSBSRE1BIGZlYXR1cmVzIGFyZSBlbmFibGVkIHdpdGhpbiBSRFMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgb3B0aW9ucyBtaWdodCBkZXBlbmQgb24gaXQsIHdoYXQgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUsIGFuZCB3aGF0IHRoZSBhc3NvY2lhdGVkIGhlbHAgdGV4dCBzYXlzIGFib3V0IGl0cyBpbnRlbmRlZCB1c2UgYW5kIGltcGxpY2F0aW9ucy4gRXNzZW50aWFsbHksIEkmIzM5O20gdHJ5aW5nIHRvIG1lbnRhbGx5IHJlY29uc3RydWN0IHRoZSBjb25maWd1cmF0aW9uIGxvZ2ljIGFuZCB1bmRlcnN0YW5kIGhvdyBgUkRTX1JETUFgIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIG5ldHdvcmsgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBzcGVjaWZpYyBwcm90b2NvbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9yZHMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdFxuICAgMzpcdGNvbmZpZyBSRFNcbiAgIDQ6XHRcdHRyaXN0YXRlIFwmIzM0O1RoZSBSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzIFByb3RvY29sXCYjMzQ7XG4gICA1Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDY6XHRcdGhlbHBcbiAgIDc6XHRcdCAgVGhlIFJEUyAoUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cykgcHJvdG9jb2wgcHJvdmlkZXMgcmVsaWFibGUsXG4gICA4Olx0XHQgIHNlcXVlbmNlZCBkZWxpdmVyeSBvZiBkYXRhZ3JhbXMgb3ZlciBJbmZpbmliYW5kIG9yIFRDUC5cbiAgIDk6XHRcbiAgMTA6XHRjb25maWcgUkRTX1JETUFcbiAgMTE6XHRcdHRyaXN0YXRlIFwmIzM0O1JEUyBvdmVyIEluZmluaWJhbmRcJiMzNDtcbiAgMTI6XHRcdGRlcGVuZHMgb24gUkRTIFx1MDAyNlx1MDAyNiBJTkZJTklCQU5EIFx1MDAyNlx1MDAyNiBJTkZJTklCQU5EX0FERFJfVFJBTlNcbiAgMTM6XHRcdGhlbHBcbiAgMTQ6XHRcdCAgQWxsb3cgUkRTIHRvIHVzZSBJbmZpbmliYW5kIGFzIGEgdHJhbnNwb3J0LlxuICAxNTpcdFx0ICBUaGlzIHRyYW5zcG9ydCBzdXBwb3J0cyBSRE1BIG9wZXJhdGlvbnMuXG4gIDE2Olx0XG4gIDE3Olx0Y29uZmlnIFJEU19UQ1BcbiAgMTg6XHRcdHRyaXN0YXRlIFwmIzM0O1JEUyBvdmVyIFRDUFwmIzM0O1xuICAxOTpcdFx0ZGVwZW5kcyBvbiBSRFNcbiAgMjA6XHRcdGRlcGVuZHMgb24gSVBWNiB8fCAhSVBWNlxuICAyMTpcdFx0aGVscFxuICAyMjpcdFx0ICBBbGxvdyBSRFMgdG8gdXNlIFRDUCBhcyBhIHRyYW5zcG9ydC5cbiAgMjM6XHRcdCAgVGhpcyB0cmFuc3BvcnQgZG9lcyBub3Qgc3VwcG9ydCBSRE1BIG9wZXJhdGlvbnMuXG4gIDI0Olx0XG4gIDI1Olx0Y29uZmlnIFJEU19ERUJVR1xuICAyNjpcdFx0Ym9vbCBcJiMzNDtSRFMgZGVidWdnaW5nIG1lc3NhZ2VzXCYjMzQ7XG4gIDI3Olx0XHRkZXBlbmRzIG9uIFJEU1xuICAyODpcdFx0ZGVmYXVsdCBuXG4gIDI5Olx0XG4gIDMwOlx0Y29uZmlnIEdDT1ZfUFJPRklMRV9SRFNcbiAgMzE6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEdDT1YgcHJvZmlsaW5nIG9uIFJEU1wmIzM0O1xuICAzMjpcdFx0ZGVwZW5kcyBvbiBHQ09WX0tFUk5FTFxuICAzMzpcdFx0aGVscFxuICAzNDpcdFx0ICBFbmFibGUgR0NPViBwcm9maWxpbmcgb24gUkRTIGZvciBjaGVja2luZyB3aGljaCBmdW5jdGlvbnMvbGluZXNcbiAgMzU6XHRcdCAgYXJlIGV4ZWN1dGVkLlxuICAzNjpcdFxuICAzNzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE0OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNTQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUkRNQSBEcml2ZXIgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhlIFJETUEgZHJpdmVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc3BlY2lmaWNhbGx5IGZvciBwb3RlbnRpYWwgZGVwbG95bWVudCBzY2VuYXJpb3MuIE15IG1pbmQganVtcHMgaW1tZWRpYXRlbHkgdG8gYENPTkZJR19SRFNgLCB0aGF0JiMzOTtzIHRoZSBiYXNlIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgcHJvdG9jb2wgSSYjMzk7bSBtb3N0IGZhbWlsaWFyIHdpdGguIEJ1dCwgZ2l2ZW4gbXkgZm9jdXMgb24gUmVtb3RlIERpcmVjdCBNZW1vcnkgQWNjZXNzLCBJIG5lZWQgdG8gY29uc2lkZXIgYENPTkZJR19SRFNfUkRNQWAgd2hpY2ggaXMgdGhlIG9idmlvdXMgb25lLCBhbmQgYWxzbyBgQ09ORklHX0lORklOSUJBTkRgLiBPZiBjb3Vyc2UsIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYWRkcmVzcyB0cmFuc2xhdGlvbiBpcyB3b3JraW5nIGNvcnJlY3RseSwgc28gYENPTkZJR19JTkZJTklCQU5EX0FERFJfVFJBTlNgIGlzIGEgbXVzdC4gTm93LCBkZXBlbmRpbmcgb24gdGhlIGVudmlyb25tZW504oCUc3BlY2lmaWNhbGx5IGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdmlydHVhbGl6YXRpb27igJRJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGxvb2sgYXQgdGhlIHNvZnQtUkRNQSBkcml2ZXJzOiBgQ09ORklHX1JETUFfUlhFYCBvciBtYXliZSBgQ09ORklHX1JETUFfU0lXYC4gVGhlc2UgYXJlIGNydWNpYWwgZm9yIHNpdHVhdGlvbnMgbGlrZSB1c2luZyBRRU1VIG9yIG90aGVyIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhleSBlbmFibGUgUkRNQSBmdW5jdGlvbmFsaXR5IHdpdGhvdXQgZGVkaWNhdGVkIGhhcmR3YXJlLCB0aHJvdWdoIGByZG1hX3J4ZWAgb3IgYHNpd2AuIFRoYXQmIzM5O3MgYSBrZXkgY29uc2lkZXJhdGlvbi4KCk15IG5leHQgaW1tZWRpYXRlIHRhc2sgaXMgdG8gdHJhY2sgZG93biB3aGVyZSBgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGVgIGlzIGNhbGxlZC4gVGhhdCYjMzk7cyB0aGUgY3JpdGljYWwgY29ubmVjdGlvbiBjb21wbGV0aW9uIHBhdGgsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBJIG5lZWQgdG8gbGlzdCB0aGUgY2FsbGVycyBvZiB0aGF0IGZ1bmN0aW9uLCBzbyBJIGNhbiBzZWUgd2hhdCB0aGUgY3JpdGljYWwgcGF0aHMgYXJlLiBLbm93aW5nIHdobyBpcyAqdXNpbmcqIHRoZSBjb25uZWN0aW9uIGNvbXBsZXRlIGZ1bmN0aW9uIGlzIHZpdGFsIHRvIG1ha2luZyBkZWNpc2lvbnMgYWJvdXQgdGhpcyBhcmVhLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZHNfaWJfY21fY29ubmVjdF9jb21wbGV0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yZHMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yZHMvaWIuYz01NTk9c3RydWN0IHJkc190cmFuc3BvcnQgcmRzX2liX3RyYW5zcG9ydCA9IHtcbi0tXG5uZXQvcmRzL2liLmMtNTczLVx0LmNtX2hhbmRsZV9jb25uZWN0XHQ9IHJkc19pYl9jbV9oYW5kbGVfY29ubmVjdCxcbm5ldC9yZHMvaWIuYzo1NzQ6XHQuY21fY29ubmVjdF9jb21wbGV0ZVx0PSByZHNfaWJfY21fY29ubmVjdF9jb21wbGV0ZSxcbm5ldC9yZHMvaWIuYy01NzUtXHQuc3RhdHNfaW5mb19jb3B5XHQ9IHJkc19pYl9zdGF0c19pbmZvX2NvcHksXG4tLVxubmV0L3Jkcy9pYi5oPTM3Nj1pbnQgcmRzX2liX2NtX2luaXRpYXRlX2Nvbm5lY3Qoc3RydWN0IHJkbWFfY21faWQgKmNtX2lkLCBib29sIGlzdjYpO1xubmV0L3Jkcy9pYi5oOjM3Nzp2b2lkIHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubixcbm5ldC9yZHMvaWIuaC0zNzgtXHRcdFx0XHRzdHJ1Y3QgcmRtYV9jbV9ldmVudCAqZXZlbnQpO1xuLS1cbm5ldC9yZHMvaWJfY20uYz01Nz1zdGF0aWMgdm9pZCByZHNfaWJfc2V0X2Zsb3dfY29udHJvbChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHUzMiBjcmVkaXRzKVxuLS1cbm5ldC9yZHMvaWJfY20uYy03My0gKi9cbm5ldC9yZHMvaWJfY20uYzo3NDp2b2lkIHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHJkbWFfY21fZXZlbnQgKmV2ZW50KVxubmV0L3Jkcy9pYl9jbS5jLTc1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA3OAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgY21fY29ubmVjdF9jb21wbGV0ZWAgaW4gYG5ldC9yZHMvYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biBhbGwgdGhlIGNhbGwgc2l0ZXMgZm9yIGBjbV9jb25uZWN0X2NvbXBsZXRlYCB3aXRoaW4gdGhlIGBuZXQvcmRzL2AgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGJlc3Qgd2F5IHRvIHVuZGVyc3RhbmQgaG93IGEgc3BlY2lmaWMgZnVuY3Rpb24gaXMgdXNlZCBhbmQsIGluIHRoaXMgY2FzZSwgaG93IGNvbm5lY3Rpb24gY29tcGxldGlvbiBpcyBoYW5kbGVkIGluIHRoZSBSRFMgbmV0d29yayBzdGFjay4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGZvciBwbGFjZXMgd2hlcmUgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGdldHMgc2lnbmFsZWQsIG9yIHBlcmhhcHMgd2hlcmUgZXJyb3IgaGFuZGxpbmcgcmVsYXRlZCB0byB0aGF0IHBoYXNlIGlzIGltcGxlbWVudGVkLiBJJiMzOTttIGFudGljaXBhdGluZyBzb21lIGludHJpY2F0ZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgUkRNQSBzdGFjayBpZiBSRFMgaXMgaW52b2x2ZWQsIGFuZCBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgZXNwZWNpYWxseSBhcm91bmQgbG9jayB1c2FnZS4gVGltZSB0byBkaXZlIGludG8gdGhlIHNvdXJjZSBjb2RlIGFuZCBzdGFydCBncmVwcGluZyEgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB3aWxsIGludm9sdmUgbG9va2luZyBhdCBjb250ZXh0IHN3aXRjaGVzIGFuZCBkYXRhIHRyYW5zZmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjbV9jb25uZWN0X2NvbXBsZXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Jkcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9pYi5jPTU1OT1zdHJ1Y3QgcmRzX3RyYW5zcG9ydCByZHNfaWJfdHJhbnNwb3J0ID0ge1xuLS1cbm5ldC9yZHMvaWIuYy01NzMtXHQuY21faGFuZGxlX2Nvbm5lY3RcdD0gcmRzX2liX2NtX2hhbmRsZV9jb25uZWN0LFxubmV0L3Jkcy9pYi5jOjU3NDpcdC5jbV9jb25uZWN0X2NvbXBsZXRlXHQ9IHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlLFxubmV0L3Jkcy9pYi5jLTU3NS1cdC5zdGF0c19pbmZvX2NvcHlcdD0gcmRzX2liX3N0YXRzX2luZm9fY29weSxcbi0tXG5uZXQvcmRzL2liLmg9Mzc2PWludCByZHNfaWJfY21faW5pdGlhdGVfY29ubmVjdChzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQsIGJvb2wgaXN2Nik7XG5uZXQvcmRzL2liLmg6Mzc3OnZvaWQgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLFxubmV0L3Jkcy9pYi5oLTM3OC1cdFx0XHRcdHN0cnVjdCByZG1hX2NtX2V2ZW50ICpldmVudCk7XG4tLVxubmV0L3Jkcy9pYl9jbS5jPTU3PXN0YXRpYyB2b2lkIHJkc19pYl9zZXRfZmxvd19jb250cm9sKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgdTMyIGNyZWRpdHMpXG4tLVxubmV0L3Jkcy9pYl9jbS5jLTczLSAqL1xubmV0L3Jkcy9pYl9jbS5jOjc0OnZvaWQgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBzdHJ1Y3QgcmRtYV9jbV9ldmVudCAqZXZlbnQpXG5uZXQvcmRzL2liX2NtLmMtNzUte1xuLS1cbm5ldC9yZHMvaWJfc3lzY3RsLmM9NTA9c3RhdGljIHVuc2lnbmVkIGxvbmcgcmRzX2liX3N5c2N0bF9tYXhfdW5zaWdfd3JfbWF4ID0gNjQ7XG4tLVxubmV0L3Jkcy9pYl9zeXNjdGwuYy01OC0gKiBzZXR0aW5nIHRoaXMgdG8gMSBhbmQgbW92aW5nIGluaXQvcmVmaWxsIG9mIHNlbmQvcmVjdlxubmV0L3Jkcy9pYl9zeXNjdGwuYzo1OTogKiByaW5ncyBmcm9tIGliX2NtX2Nvbm5lY3RfY29tcGxldGUoKSBiYWNrIGludG8gaWJfc2V0dXBfcXAoKVxubmV0L3Jkcy9pYl9zeXNjdGwuYy02MC0gKiB3aWxsIGNhdXNlIGNyZWRpdHMgdG8gYmUgYWRkZWQgYmVmb3JlIHByb3RvY29sIG5lZ290aWF0aW9uLlxuLS1cbm5ldC9yZHMvcmRtYV90cmFuc3BvcnQuYz00OT1zdGF0aWMgaW50IHJkc19yZG1hX2NtX2V2ZW50X2hhbmRsZXJfY21uKHN0cnVjdCByZG1hX2NtX2lkICpjbV9pZCxcbi0tXG5uZXQvcmRzL3JkbWFfdHJhbnNwb3J0LmMtMTE3LVx0XHRpZiAoY29ubilcbm5ldC9yZHMvcmRtYV90cmFuc3BvcnQuYzoxMTg6XHRcdFx0dHJhbnMtXHUwMDNlY21fY29ubmVjdF9jb21wbGV0ZShjb25uLCBldmVudCk7XG5uZXQvcmRzL3JkbWFfdHJhbnNwb3J0LmMtMTE5LVx0XHRicmVhaztcbi0tXG5uZXQvcmRzL3Jkcy5oPTUyOT1zdHJ1Y3QgcmRzX3RyYW5zcG9ydCB7XG4tLVxubmV0L3Jkcy9yZHMuaC01OTQtXHRpbnQgKCpjbV9pbml0aWF0ZV9jb25uZWN0KShzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQsIGJvb2wgaXN2Nik7XG5uZXQvcmRzL3Jkcy5oOjU5NTpcdHZvaWQgKCpjbV9jb25uZWN0X2NvbXBsZXRlKShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sXG5uZXQvcmRzL3Jkcy5oLTU5Ni1cdFx0XHRcdCAgICBzdHJ1Y3QgcmRtYV9jbV9ldmVudCAqZXZlbnQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDQzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIFJETUEgRXZlbnQgSGFuZGxlcioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhlIFJEUyBSRE1BIGNvbm5lY3Rpb24gbWFuYWdlciBldmVudCBoYW5kbGluZy4gVGhlIHBsYWNlIHRvIHN0YXJ0LCBhcyB1c3VhbCwgaXMgdGhlIGNvcmUuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIGBuZXQvcmRzL3JkbWFfdHJhbnNwb3J0LmNgIGFuZCBzcGVjaWZpY2FsbHkgbG9vayBhdCBgcmRzX3JkbWFfY21fZXZlbnRfaGFuZGxlcl9jbW5gLiBUaGlzIGlzIHRoZSBzaGFyZWQsIGNvbW1vbiBoYW5kbGVyLCB3aGljaCBpcyBnZW5lcmFsbHkgd2hlcmUgdGhlIGxvd2VyLWxldmVsIFJETUEgQ00gZXZlbnRzIHdpbGwgYmUgcHJvY2Vzc2VkIGJlZm9yZSB0aGV5JiMzOTtyZSBkaXNwYXRjaGVkIHRvIG1vcmUgc3BlY2lmaWMgUkRTLWxldmVsIGxvZ2ljLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBpbml0aWFsIENNIGV2ZW50IHByb2Nlc3Npbmc6IGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCwgY29ubmVjdGlvbiBmYWlsdXJlcywgZGlzY29ubmVjdHMsIGFuZCBhbnkgZXJyb3IgaGFuZGxpbmcgaGFwcGVuaW5nIGF0IHRoZSBDTSBsZXZlbC4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IHRoZSBjb2RlIGludGVyZmFjZXMgd2l0aCB0aGUgUkRTIHByb3RvY29sIHN0YXRlIG1hY2hpbmVzIOKAkyBJJiMzOTttIGludGVyZXN0ZWQgaW4gaG93IGl0IHRyYW5zbGF0ZXMgdGhlIFJETUEgdHJhbnNwb3J0LWxldmVsIGV2ZW50cyBpbnRvIGhpZ2hlci1sZXZlbCBSRFMgY29ubmVjdGlvbiBzdGF0ZXMgYW5kIGFjdGlvbnMuIEkmIzM5O20gaG9waW5nIGl0JiMzOTtzIHdlbGwtc3RydWN0dXJlZCBhbmQgaGFuZGxlcyB0aGluZ3MgbGlrZSByZXRyaWVzLCBiYWNrb2ZmLCBhbmQgZXJyb3IgcmVwb3J0aW5nIGdyYWNlZnVsbHksIGFuZCB0aGF0IHRoZSBldmVudCB0eXBlcyBhcmUgY2xlYXJseSBzZXBhcmF0ZWQuIE15IGV4cGVjdGF0aW9uIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGEgY3JpdGljYWwgcGFydCBvZiBob3cgUkRTIGRlYWxzIHdpdGggdGhlIFJETUEgc3RhY2sgdW5kZXJuZWF0aC4gTGV0JiMzOTtzIHNlZSBpZiBteSBtZW50YWwgbW9kZWwgbGluZXMgdXAgd2l0aCB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcmRzL3JkbWFfdHJhbnNwb3J0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwMDpcdFx0XHQgKiBjbV9pZCBpcyB2YWxpZCBiZWZvcmUgcHJvY2VlZGluZ1xuIDEwMTpcdFx0XHQgKi9cbiAxMDI6XHRcdFx0aWYgKGNvbm4pIHtcbiAxMDM6XHRcdFx0XHRzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmliaWM7XG4gMTA0Olx0XG4gMTA1Olx0XHRcdFx0aWJpYyA9IGNvbm4tXHUwMDNlY190cmFuc3BvcnRfZGF0YTtcbiAxMDY6XHRcdFx0XHRpZiAoaWJpYyBcdTAwMjZcdTAwMjYgaWJpYy1cdTAwM2VpX2NtX2lkID09IGNtX2lkKSB7XG4gMTA3Olx0XHRcdFx0XHRjbV9pZC1cdTAwM2Vyb3V0ZS5wYXRoX3JlY1swXS5zbCA9XG4gMTA4Olx0XHRcdFx0XHRcdFRPU19UT19TTChjb25uLVx1MDAzZWNfdG9zKTtcbiAxMDk6XHRcdFx0XHRcdHJldCA9IHRyYW5zLVx1MDAzZWNtX2luaXRpYXRlX2Nvbm5lY3QoY21faWQsIGlzdjYpO1xuIDExMDpcdFx0XHRcdH0gZWxzZSB7XG4gMTExOlx0XHRcdFx0XHRyZHNfY29ubl9kcm9wKGNvbm4pO1xuIDExMjpcdFx0XHRcdH1cbiAxMTM6XHRcdFx0fVxuIDExNDpcdFx0XHRicmVhaztcbiAxMTU6XHRcbiAxMTY6XHRcdGNhc2UgUkRNQV9DTV9FVkVOVF9FU1RBQkxJU0hFRDpcbiAxMTc6XHRcdFx0aWYgKGNvbm4pXG4gMTE4Olx0XHRcdFx0dHJhbnMtXHUwMDNlY21fY29ubmVjdF9jb21wbGV0ZShjb25uLCBldmVudCk7XG4gMTE5Olx0XHRcdGJyZWFrO1xuIDEyMDpcdFxuIDEyMTpcdFx0Y2FzZSBSRE1BX0NNX0VWRU5UX1JFSkVDVEVEOlxuIDEyMjpcdFx0XHRpZiAoIWNvbm4pXG4gMTIzOlx0XHRcdFx0YnJlYWs7XG4gMTI0Olx0XHRcdGVyciA9IChpbnQgKilyZG1hX2NvbnN1bWVyX3JlamVjdF9kYXRhKGNtX2lkLCBldmVudCwgXHUwMDI2bGVuKTtcbiAxMjU6XHRcdFx0aWYgKCFlcnIgfHxcbiAxMjY6XHRcdFx0ICAgIChlcnIgXHUwMDI2XHUwMDI2IGxlbiBcdTAwM2U9IHNpemVvZigqZXJyKSBcdTAwMjZcdTAwMjZcbiAxMjc6XHRcdFx0ICAgICAoKCplcnIpIFx1MDAzYz0gUkRTX1JETUFfUkVKX0lOQ09NUEFUKSkpIHtcbiAxMjg6XHRcdFx0XHRwcl93YXJuKFwmIzM0O1JEUy9SRE1BOiBjb25uIFx1MDAzYyVwSTZjLCAlcEk2Y1x1MDAzZSByZWplY3RlZCwgZHJvcHBpbmcgY29ubmVjdGlvblxcblwmIzM0OyxcbiAxMjk6XHRcdFx0XHRcdFx1MDAyNmNvbm4tXHUwMDNlY19sYWRkciwgXHUwMDI2Y29ubi1cdTAwM2VjX2ZhZGRyKTtcbiAxMzA6XHRcbiAxMzE6XHRcdFx0XHRpZiAoIWNvbm4tXHUwMDNlY190b3MpXG4gMTMyOlx0XHRcdFx0XHRjb25uLVx1MDAzZWNfcHJvcG9zZWRfdmVyc2lvbiA9IFJEU19QUk9UT0NPTF9DT01QQVRfVkVSU0lPTjtcbiAxMzM6XHRcbiAxMzQ6XHRcdFx0XHRyZHNfY29ubl9kcm9wKGNvbm4pO1xuIDEzNTpcdFx0XHR9XG4gMTM2Olx0XHRcdHJkc2RlYnVnKFwmIzM0O0Nvbm5lY3Rpb24gcmVqZWN0ZWQ6ICVzXFxuXCYjMzQ7LFxuIDEzNzpcdFx0XHRcdCByZG1hX3JlamVjdF9tc2coY21faWQsIGV2ZW50LVx1MDAzZXN0YXR1cykpO1xuIDEzODpcdFx0XHRicmVhaztcbiAxMzk6XHRcdGNhc2UgUkRNQV9DTV9FVkVOVF9BRERSX0VSUk9SOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDI0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldDogUkRTIG92ZXIgUkRNQSBDb25uZWN0aW9uIEhhbmRsaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBhIGNoYW5nZSByZWxhdGVkIHRvIGhvdyBSRFMgKFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMpIGNvbm5lY3Rpb25zIGFyZSBoYW5kbGVkIHdoZW4gdXNpbmcgUkRNQSAoUmVtb3RlIERpcmVjdCBNZW1vcnkgQWNjZXNzKSwgc3BlY2lmaWNhbGx5IFJEU19SRE1BLCB3aGljaCByZWxpZXMgb24gdGhlIFJETUEgQ29ubmVjdGlvbiBNYW5hZ2VyIChDTSkuIFRoZSBjb3JlIGlzc3VlIHNlZW1zIHRvIGJlIGluIHRoZSBgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGVgIGZ1bmN0aW9uLCB3aGljaCBnZXRzIHRyaWdnZXJlZCB3aGVuIGFuIFJETUEgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGV2ZW50IGhhcHBlbnMsIHNwZWNpZmljYWxseSBgUkRNQV9DTV9FVkVOVF9FU1RBQkxJU0hFRGAuCgpQcmV2aW91c2x5LCBpZiB0aGUgY29ubmVjdGlvbiYjMzk7cyB2ZXJzaW9uIHdhc24mIzM5O3QgY29tcGF0aWJsZSAoZWl0aGVyIHRvbyBvbGQgb3IgYSBzcGVjaWZpYyBjb21wYXRpYmlsaXR5IHZlcnNpb24pLCB0aGUgY29kZSB3b3VsZCBqdXN0IGNhbGwgYHJkc19jb25uX2Rlc3Ryb3lgLiBCdXQgbm93LCBpdCYjMzk7cyBjYWxsaW5nIGByZHNfY29ubl9kcm9wYCBpbnN0ZWFkLiBUaGUga2V5IGRpZmZlcmVuY2UgaGVyZSBpcyB0aGUgdGltaW5nLiBgcmRzX2Nvbm5fZGVzdHJveWAgd2FzIGJlaW5nIGNhbGxlZCBkaXJlY3RseSB3aXRoaW4gYW4gZXZlbnQgaGFuZGxlciBvciBjb21wbGV0aW9uIGNhbGxiYWNrLCB3aGljaCBpcyBhIGJpZyByZWQgZmxhZyBmb3IgcG90ZW50aWFsIHByb2JsZW1zLiBJdCBjb3VsZCBoYXZlIGxlZCB0byB0aGluZ3MgbGlrZSBVc2UtQWZ0ZXItRnJlZSAoVUFGKSB2dWxuZXJhYmlsaXRpZXMsIGRlYWRsb2Nrcywgb3IgYXNzZXJ0aW9uIGZhaWx1cmVzLCBiZWNhdXNlIHlvdSYjMzk7cmUgdGVhcmluZyBkb3duIGEgY29ubmVjdGlvbiBkaXJlY3RseSBmcm9tIGFuIGV2ZW50IGhhbmRsZXIgY29udGV4dC4gYHJkc19jb25uX2Ryb3BgLCBvbiB0aGUgb3RoZXIgaGFuZCwgaW5pdGlhdGVzIGFuICphc3luY2hyb25vdXMqIHRlYXJkb3duLCB3aGljaCBpcyB0aGUgc2FmZXIgYXBwcm9hY2guCgpUaGUgY3JpdGljYWwgcXVlc3Rpb24gbm93IGlzLCBjYW4gSSByZWFjaCB0aGlzIGNvZGUgaW4gUUVNVT8gQW5kIHRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nIHllcyEgUkRTIHNvY2tldHMgKEFGX1JEUykgd2l0aCB0aGUgUkRTX1JETUEgcGF0aCwgcGFydGljdWxhcmx5IHVzaW5nIHNvZnR3YXJlIFJETUEgbGlrZSBgcmRtYV9yeGVgIG9yIGBzaXdgLCBhcmUgYWJzb2x1dGVseSBmdXp6YWJsZSBuZXR3b3JrIHByb3RvY29scyB3aXRoaW4gUUVNVS4gU3l6a2FsbGVyIHN1cHBvcnRzIHRoaXMuIFRoaXMgdG91Y2hlcyB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBSRFMgcHJvdG9jb2wgbG9naWMsIHNvIGl0JiMzOTtzIGludGVyZXN0aW5nLgoKU28sIGxldCYjMzk7cyBjaGVjayB0aGUgY3JpdGVyaWE6CgoqICAgKipSZWFjaGFiaWxpdHk6KiogV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBSRFMgb3ZlciBJbmZpbmlCYW5kIHVzaW5nIHNvZnR3YXJlIFJETUEgZGV2aWNlcy4gVGhpcyBtZWFucyBgc29ja2V0KEFGX1JEUywgLi4uKWAgb3IgdXNpbmcgdGhlIFJETUEgQ00sIHdoaWNoICppcyogYWNjZXNzaWJsZSBhbmQgZnV6emFibGUgaW4gdGhlIFFFTVUgZW52aXJvbm1lbnQuIENoZWNrLgoqICAgKipNb2RpZmljYXRpb246KiogVGhlIGNoYW5nZSBpcyByaWdodCB0aGVyZSBpbiBgbmV0L3Jkcy9pYl9jbS5jYDogd2UmIzM5O3ZlIHN3aXRjaGVkIGVycm9yIGhhbmRsaW5nIGFuZCBzdGF0ZSB0cmFuc2l0aW9uIGZyb20gYHJkc19jb25uX2Rlc3Ryb3lgIHRvIGByZHNfY29ubl9kcm9wYCBpbiBgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGVgLiBDaGVjay4KKiAgICoqSXMgV29ydGggRnV6emluZzoqKiBBYnNvbHV0ZWx5LiBXZSYjMzk7cmUgdG91Y2hpbmcgY29yZSBuZXR3b3JrIGNvZGUsIHNwZWNpZmljYWxseSBpbiBSRFMsIHRoYXQgaGFzIGNyaXRpY2FsIGVycm9yLWhhbmRsaW5nIGxvZ2ljLiBDaGVjay4KCkZpbmFsbHksIGxldCYjMzk7cyBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgcmlnaHQgY29uZmlndXJhdGlvbi4gV2UmIzM5O2xsIG5lZWQ6CgoqICAgUkRTCiogICBSRFNfUkRNQQoqICAgSU5GSU5JQkFORAoqICAgSU5GSU5JQkFORF9BRERSX1RSQU5TCgpMZXQmIzM5O3MgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGBuZXQvcmRzL0tjb25maWdgIGFuZCBgZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWdgIGZpbGVzIHRvIHZlcmlmeSB0aGVyZSBhcmUgbm8gaGlkZGVuIGRlcGVuZGVuY2llcy4gVGltZSB0byBtYWtlIHN1cmUgdGhvc2Uga2VybmVsIGNvbmZpZ3MgYXJlIHNldCBhbmQgc3RhcnQgZnV6emluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElORklOSUJBTkQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2luZmluaWJhbmQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzoyOm1lbnVjb25maWcgSU5GSU5JQkFORFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0luZmluaUJhbmQgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnPTE2PWlmIElORklOSUJBTkRcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTE3LVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6MTg6Y29uZmlnIElORklOSUJBTkRfVVNFUl9NQURcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTE5LVx0dHJpc3RhdGUgXCYjMzQ7SW5maW5pQmFuZCB1c2Vyc3BhY2UgTUFEIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy0yNy1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjI4OmNvbmZpZyBJTkZJTklCQU5EX1VTRVJfQUNDRVNTXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy0yOS1cdHRyaXN0YXRlIFwmIzM0O0luZmluaUJhbmQgdXNlcnNwYWNlIGFjY2VzcyAodmVyYnMgYW5kIENNKVwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTM5LVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NDA6Y29uZmlnIElORklOSUJBTkRfVVNFUl9BQ0NFU1NfQ09SRVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDEtXHRib29sXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDMtXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo0NDpjb25maWcgSU5GSU5JQkFORF9VU0VSX01FTVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDUtXHRib29sXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNTAtXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo1MTpjb25maWcgSU5GSU5JQkFORF9PTl9ERU1BTkRfUEFHSU5HXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy01Mi1cdGJvb2wgXCYjMzQ7SW5maW5pQmFuZCBvbi1kZW1hbmQgcGFnaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy02My1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjY0OmNvbmZpZyBJTkZJTklCQU5EX0FERFJfVFJBTlNcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTY1LVx0Ym9vbCBcJiMzNDtSRE1BL0NNXCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNzEtXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo3Mjpjb25maWcgSU5GSU5JQkFORF9BRERSX1RSQU5TX0NPTkZJR0ZTXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy03My1cdGJvb2xcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy04MC1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjgxOmNvbmZpZyBJTkZJTklCQU5EX1ZJUlRfRE1BXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy04Mi1cdGRlZl9ib29sICFISUdITUVNXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JuZ19yZS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm5nX3JlL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9CTkdfUkVcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibmdfcmUvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7QnJvYWRjb20gTmV4dCBnZW5lcmF0aW9uIFJvQ0UgSENBIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfQk5YVF9SRVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7QnJvYWRjb20gTmV0eHRyZW1lIEhDQSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfQ1hHQjRcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtDaGVsc2lvIFQ0L1Q1IFJETUEgRHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9LY29uZmlnLTYtXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZWZhL0tjb25maWc6Nzpjb25maWcgSU5GSU5JQkFORF9FRkFcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lZmEvS2NvbmZpZy04LVx0dHJpc3RhdGUgXCYjMzQ7QW1hem9uIEVsYXN0aWMgRmFicmljIEFkYXB0ZXIgKEVGQSkgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX0VSRE1BXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7QWxpYmFiYSBFbGFzdGljIFJETUEgQWRhcHRlciAoRVJETUEpIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfSEZJMVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hmaTEvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7Q29ybmVsaXMgT1BYIEdlbjEgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfSE5TX0hJUDA4XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0hpc2lsaWNvbiBIaXAwOCBGYW1pbHkgUm9DRSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL0tjb25maWctMy1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9LY29uZmlnOjQ6Y29uZmlnIElORklOSUJBTkRfSU9OSUNcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9LY29uZmlnLTUtXHR0cmlzdGF0ZSBcJiMzNDtBTUQgUGVuc2FuZG8gRFNDIFJETUEvUm9DRSBTdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfSVJETUFcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtJbnRlbChSKSBFdGhlcm5ldCBQcm90b2NvbCBEcml2ZXIgZm9yIFJETUFcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9NVEhDQVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O01lbGxhbm94IEhDQSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL0tjb25maWctOS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9LY29uZmlnOjEwOmNvbmZpZyBJTkZJTklCQU5EX01USENBX0RFQlVHXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZy0xMS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBkZWJ1Z2dpbmcgb3V0cHV0XCYjMzQ7IGlmIEVYUEVSVFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9vY3JkbWEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfT0NSRE1BXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvb2NyZG1hL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0VtdWxleCBPbmUgQ29ubmVjdCBIQ0Egc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9xZWRyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9xZWRyL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9RRURSXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvcWVkci9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtRTG9naWMgUm9DRSBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvdXNuaWMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3VzbmljL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9VU05JQ1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L3VzbmljL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1ZlcmJzIHN1cHBvcnQgZm9yIENpc2NvIFZJQ1wmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody92bXdfcHZyZG1hL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody92bXdfcHZyZG1hL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9WTVdBUkVfUFZSRE1BXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvdm13X3B2cmRtYS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtWTXdhcmUgUGFyYXZpcnR1YWxpemVkIFJETUEgRHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3JkbWF2dC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcmRtYXZ0L0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9SRE1BVlRcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yZG1hdnQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7UkRNQSB2ZXJicyB0cmFuc3BvcnQgbGlicmFyeVwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfSVBPSUJcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7SVAtb3Zlci1JbmZpbmlCYW5kXCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnLTExLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnOjEyOmNvbmZpZyBJTkZJTklCQU5EX0lQT0lCX0NNXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWctMTMtXHRib29sIFwmIzM0O0lQLW92ZXItSW5maW5pQmFuZCBDb25uZWN0ZWQgTW9kZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnLTI2LVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnOjI3OmNvbmZpZyBJTkZJTklCQU5EX0lQT0lCX0RFQlVHXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWctMjgtXHRib29sIFwmIzM0O0lQLW92ZXItSW5maW5pQmFuZCBkZWJ1Z2dpbmdcJiMzNDsgaWYgRVhQRVJUXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnLTQxLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnOjQyOmNvbmZpZyBJTkZJTklCQU5EX0lQT0lCX0RFQlVHX0RBVEFcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy00My1cdGJvb2wgXCYjMzQ7SVAtb3Zlci1JbmZpbmlCYW5kIGRhdGEgcGF0aCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9JU0VSXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7aVNDU0kgRXh0ZW5zaW9ucyBmb3IgUkRNQSAoaVNFUilcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXJ0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlcnQvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX0lTRVJUXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXJ0L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O2lTQ1NJIEV4dGVuc2lvbnMgZm9yIFJETUEgKGlTRVIpIHRhcmdldCBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctMi1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnOjM6Y29uZmlnIElORklOSUJBTkRfUlRSU1xuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctNC1cdHRyaXN0YXRlXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctNi1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnOjc6Y29uZmlnIElORklOSUJBTkRfUlRSU19DTElFTlRcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnLTgtXHR0cmlzdGF0ZSBcJiMzNDtSVFJTIGNsaWVudCBtb2R1bGVcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3J0cnMvS2NvbmZpZy0xNy1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnOjE4OmNvbmZpZyBJTkZJTklCQU5EX1JUUlNfU0VSVkVSXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3J0cnMvS2NvbmZpZy0xOS1cdHRyaXN0YXRlIFwmIzM0O1JUUlMgc2VydmVyIG1vZHVsZVwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9TUlBcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0luZmluaUJhbmQgU0NTSSBSRE1BIFByb3RvY29sXCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnB0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwdC9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfU1JQVFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnB0L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0luZmluaUJhbmQgU0NTSSBSRE1BIFByb3RvY29sIHRhcmdldCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTU4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgUkRNQSBSWEUgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBSRE1BX1JYRWAgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIEluZmluaWJhbmQgc3RhY2suIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGUgbW9zdCBsaWtlbHkgc3BvdCB0byBmaW5kIHRoZSByZWxldmFudCBLY29uZmlnIGlzIGluIGBkcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL2AuIExldCYjMzk7cyBuYXZpZ2F0ZSB0aGVyZSBhbmQgZXhhbWluZSB0aGUgYEtjb25maWdgIGZpbGUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgbWF5YmUgc29tZSBkZXNjcmlwdGlvbnMgdGhhdCBzaGVkIGxpZ2h0IG9uIGhvdyB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCwgZGlzYWJsZWQsIGFuZCBwZXJoYXBzIGNvbmZpZ3VyZWQgZnVydGhlci4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYXMgdG8gaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBkcml2ZXIsIGFuZCBwb3RlbnRpYWwgaW1wYWN0cyBvbiBwZXJmb3JtYW5jZSBvciBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gZGVjaXNpb25zIGFyZSB1c3VhbGx5IG1hZGUsIHNvIHRoaXMgS2NvbmZpZyBpcyBhIGNydWNpYWwgZmlyc3Qgc3RvcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFJETUFfUlhFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvS2NvbmZpZzoyOmNvbmZpZyBSRE1BX1JYRVxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtTb2Z0d2FyZSBSRE1BIG92ZXIgRXRoZXJuZXQgKFJvQ0UpIGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ5OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuCgoqKkZvY3VzaW5nIG9uIHRoZSBDb25uZWN0aW9uIE1hbmFnZW1lbnQgaW4gUkRTL0lCKioKClJpZ2h0LCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiBjb25uZWN0aW9uIGNvbXBsZXRpb24gd2l0aGluIHRoZSBSRFMgb3ZlciBJbmZpbmlCYW5kIChJQikgcmVhbG0uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyB0aGUgYHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbmV0L3Jkcy9pYl9jbS5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgYWN0aW9uIGlzLCBiYXNlZCBvbiB0aGUgY29udGV4dC4KCk5vdywgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBiaWdnZXIgcGljdHVyZSBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucywgSSBuZWVkIHRvIHNlZSB3aGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgaGFuZ2luZyBvdXQgaW4gdGhhdCBzYW1lIGBpYl9jbS5jYCBmaWxlLiBVbmRlcnN0YW5kaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBncmFzcCBvZiBob3cgYHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlYCBmaXRzIGludG8gdGhlIG92ZXJhbGwgY29ubmVjdGlvbiBtYW5hZ2VtZW50IHdvcmtmbG93LiBXaGF0IG90aGVyIHBpZWNlcyBhcmUgaW52b2x2ZWQgaW4gc2V0dGluZyB1cCwgdGVhcmluZyBkb3duLCBhbmQgZ2VuZXJhbGx5IHNoZXBoZXJkaW5nIHRoZXNlIElCIGNvbm5lY3Rpb25zPyBMZXQmIzM5O3MgdGFrZSBhIGxvb2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE0OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfXS4qXFwoJCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yZHMvaWJfY20uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzk2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgSUIgQ29ubmVjdGlvbiBNYW5hZ2VyIENvZGUqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCB0aGUgUkRNQSBjb25uZWN0aW9uIG1hbmFnZXIgY29kZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBuZXQvcmRzL2liX2NtLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEluZmluaUJhbmQgY29ubmVjdGlvbiBtYW5hZ2VyIGJlaGF2ZXMgd2l0aGluIHRoZSBSRFMgc3RhY2suIFRoZSBiZXN0IGFwcHJvYWNoIGhlcmUgaXMgZ29pbmcgdG8gYmUgYSBjb21iaW5hdGlvbiBvZiB0YXJnZXRlZCByZWFkaW5nIGFuZCBzb21lIHF1aWNrIGdyZXBwaW5nLiBJJiMzOTtsbCBzdGFydCBieSBicm93c2luZyB0aGUgY29kZSwgZ2V0dGluZyBhIGZlZWwgZm9yIHRoZSBtYWpvciBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZC4gVGhlbiwgSSYjMzk7bGwgdXNlIGBncmVwYCB0byBxdWlja2x5IGZpbmQgY3Jvc3MtcmVmZXJlbmNlcywgc2VlIHdoZXJlIGtleSBmdW5jdGlvbnMgYXJlIGNhbGxlZCwgYW5kIGZvbGxvdyB0aGUgY29udHJvbCBmbG93LiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb2YgdGhlIGludGVyYWN0aW9uIHBvaW50cy4gRnJvbSB0aGVyZSwgSSBjYW4gZHJpbGwgZG93biBmdXJ0aGVyIGFzIG5lZWRlZCwgYnV0IHRoaXMgaW5pdGlhbCByZWNvbm5haXNzYW5jZSB3aWxsIGdpdmUgbWUgYSBnb29kIGxheSBvZiB0aGUgbGFuZCBhbmQgcG9pbnQgb3V0IHRoZSBhcmVhcyB0aGF0IG5lZWQgdGhlIG1vc3QgYXR0ZW50aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgaW50ZXJlc3RpbmcgdGlkYml0cyB3ZSBjYW4gZGlnIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtcXGJyZHNfaWJfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Jkcy9pYl9jbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yZHMvaWJfY20uYy00OC0gKi9cbm5ldC9yZHMvaWJfY20uYzo0OTpzdGF0aWMgdm9pZCByZHNfaWJfc2V0X3Byb3RvY29sKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgdW5zaWduZWQgaW50IHZlcnNpb24pXG5uZXQvcmRzL2liX2NtLmMtNTAte1xuLS1cbm5ldC9yZHMvaWJfY20uYy01Ni0gKi9cbm5ldC9yZHMvaWJfY20uYzo1NzpzdGF0aWMgdm9pZCByZHNfaWJfc2V0X2Zsb3dfY29udHJvbChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHUzMiBjcmVkaXRzKVxubmV0L3Jkcy9pYl9jbS5jLTU4LXtcbm5ldC9yZHMvaWJfY20uYzo1OTpcdHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLVx1MDAzZWNfdHJhbnNwb3J0X2RhdGE7XG5uZXQvcmRzL2liX2NtLmMtNjAtXG5uZXQvcmRzL2liX2NtLmM6NjE6XHRpZiAocmRzX2liX3N5c2N0bF9mbG93X2NvbnRyb2wgXHUwMDI2XHUwMDI2IGNyZWRpdHMgIT0gMCkge1xubmV0L3Jkcy9pYl9jbS5jLTYyLVx0XHQvKiBXZSYjMzk7cmUgZG9pbmcgZmxvdyBjb250cm9sICovXG5uZXQvcmRzL2liX2NtLmMtNjMtXHRcdGljLVx1MDAzZWlfZmxvd2N0bCA9IDE7XG5uZXQvcmRzL2liX2NtLmM6NjQ6XHRcdHJkc19pYl9zZW5kX2FkZF9jcmVkaXRzKGNvbm4sIGNyZWRpdHMpO1xubmV0L3Jkcy9pYl9jbS5jLTY1LVx0fSBlbHNlIHtcbi0tXG5uZXQvcmRzL2liX2NtLmMtNzMtICovXG5uZXQvcmRzL2liX2NtLmM6NzQ6dm9pZCByZHNfaWJfY21fY29ubmVjdF9jb21wbGV0ZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCByZG1hX2NtX2V2ZW50ICpldmVudClcbm5ldC9yZHMvaWJfY20uYy03NS17XG5uZXQvcmRzL2liX2NtLmM6NzY6XHRzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi1cdTAwM2VjX3RyYW5zcG9ydF9kYXRhO1xubmV0L3Jkcy9pYl9jbS5jOjc3Olx0Y29uc3QgdW5pb24gcmRzX2liX2Nvbm5fcHJpdiAqZHAgPSBOVUxMO1xubmV0L3Jkcy9pYl9jbS5jLTc4LVx0X19iZTY0IGFja19zZXEgPSAwO1xuLS1cbm5ldC9yZHMvaWJfY20uYy05OC1cdH0gZWxzZSBpZiAoZXZlbnQtXHUwMDNlcGFyYW0uY29ubi5wcml2YXRlX2RhdGFfbGVuIFx1MDAzZT1cbm5ldC9yZHMvaWJfY20uYzo5OTpcdFx0ICAgc2l6ZW9mKHN0cnVjdCByZHNfaWJfY29ubmVjdF9wcml2YXRlKSkge1xubmV0L3Jkcy9pYl9jbS5jLTEwMC1cdFx0bWFqb3IgPSBkcC1cdTAwM2VyaWNwX3Y0LmRwX3Byb3RvY29sX21ham9yO1xuLS1cbm5ldC9yZHMvaWJfY20uYy0xMDctXHRpZiAobWFqb3IpIHtcbm5ldC9yZHMvaWJfY20uYzoxMDg6XHRcdHJkc19pYl9zZXRfcHJvdG9jb2woY29ubiwgUkRTX1BST1RPQ09MKG1ham9yLCBtaW5vcikpO1xubmV0L3Jkcy9pYl9jbS5jOjEwOTpcdFx0cmRzX2liX3NldF9mbG93X2NvbnRyb2woY29ubiwgYmUzMl90b19jcHUoY3JlZGl0KSk7XG5uZXQvcmRzL2liX2NtLmMtMTEwLVx0fVxuLS1cbm5ldC9yZHMvaWJfY20uYy0xMzgtXHQgKi9cbm5ldC9yZHMvaWJfY20uYzoxMzk6XHRyZHNfaWJfc2VuZF9pbml0X3JpbmcoaWMpO1xubmV0L3Jkcy9pYl9jbS5jOjE0MDpcdHJkc19pYl9yZWN2X2luaXRfcmluZyhpYyk7XG5uZXQvcmRzL2liX2NtLmMtMTQxLVx0LyogUG9zdCByZWNlaXZlIGJ1ZmZlcnMgLSBhcyBhIHNpZGUgZWZmZWN0LCB0aGlzIHdpbGwgdXBkYXRlXG5uZXQvcmRzL2liX2NtLmMtMTQyLVx0ICogdGhlIHBvc3RlZCBjcmVkaXQgY291bnQuICovXG5uZXQvcmRzL2liX2NtLmM6MTQzOlx0cmRzX2liX3JlY3ZfcmVmaWxsKGNvbm4sIDEsIEdGUF9LRVJORUwpO1xubmV0L3Jkcy9pYl9jbS5jLTE0NC1cbm5ldC9yZHMvaWJfY20uYy0xNDUtXHQvKiB1cGRhdGUgaWJfZGV2aWNlIHdpdGggdGhpcyBsb2NhbCBpcGFkZHIgKi9cbm5ldC9yZHMvaWJfY20uYzoxNDY6XHRlcnIgPSByZHNfaWJfdXBkYXRlX2lwYWRkcihpYy1cdTAwM2VyZHNfaWJkZXYsIFx1MDAyNmNvbm4tXHUwMDNlY19sYWRkcik7XG5uZXQvcmRzL2liX2NtLmMtMTQ3LVx0aWYgKGVycilcbm5ldC9yZHMvaWJfY20uYzoxNDg6XHRcdHByaW50ayhLRVJOX0VSUiBcJiMzNDtyZHNfaWJfdXBkYXRlX2lwYWRkciBmYWlsZWQgKCVkKVxcblwmIzM0Oyxcbm5ldC9yZHMvaWJfY20uYy0xNDktXHRcdFx0ZXJyKTtcbi0tXG5uZXQvcmRzL2liX2NtLmMtMTYyLVxubmV0L3Jkcy9pYl9jbS5jOjE2MzpzdGF0aWMgdm9pZCByZHNfaWJfY21fZmlsbF9jb25uX3BhcmFtKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubixcbm5ldC9yZHMvaWJfY20uYy0xNjQtXHRcdFx0XHQgICAgICBzdHJ1Y3QgcmRtYV9jb25uX3BhcmFtICpjb25uX3BhcmFtLFxubmV0L3Jkcy9pYl9jbS5jOjE2NTpcdFx0XHRcdCAgICAgIHVuaW9uIHJkc19pYl9jb25uX3ByaXYgKmRwLFxubmV0L3Jkcy9pYl9jbS5jLTE2Ni1cdFx0XHRcdCAgICAgIHUzMiBwcm90b2NvbF92ZXJzaW9uLFxuLS1cbm5ldC9yZHMvaWJfY20uYy0xNzAte1xubmV0L3Jkcy9pYl9jbS5jOjE3MTpcdHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLVx1MDAzZWNfdHJhbnNwb3J0X2RhdGE7XG5uZXQvcmRzL2liX2NtLmM6MTcyOlx0c3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldiA9IGljLVx1MDAzZXJkc19pYmRldjtcbm5ldC9yZHMvaWJfY20uYy0xNzMtXG4tLVxubmV0L3Jkcy9pYl9jbS5jLTE3OS1cdFx0bWluX3QodTMyLCByZHNfaWJkZXYtXHUwMDNlbWF4X2luaXRpYXRvcl9kZXB0aCwgbWF4X2luaXRpYXRvcl9kZXB0aCk7XG5uZXQvcmRzL2liX2NtLmM6MTgwOlx0Y29ubl9wYXJhbS1cdTAwM2VyZXRyeV9jb3VudCA9IG1pbl90KHVuc2lnbmVkIGludCwgcmRzX2liX3JldHJ5X2NvdW50LCA3KTtcbm5ldC9yZHMvaWJfY20uYy0xODEtXHRjb25uX3BhcmFtLVx1MDAzZXJucl9yZXRyeV9jb3VudCA9IDc7XG4tLVxubmV0L3Jkcy9pYl9jbS5jLTE5NC1cdFx0XHRkcC1cdTAwM2VyaWNwX3Y2LmRwX2Fja19zZXEgPVxubmV0L3Jkcy9pYl9jbS5jOjE5NTpcdFx0XHQgICAgY3B1X3RvX2JlNjQocmRzX2liX3BpZ2d5Yl9hY2soaWMpKTtcbm5ldC9yZHMvaWJfY20uYy0xOTYtXHRcdFx0ZHAtXHUwMDNlcmljcF92Ni5kcF9jbW4ucmljcGNfZHBfdG9zcyA9IGNvbm4tXHUwMDNlY190b3M7XG4tLVxubmV0L3Jkcy9pYl9jbS5jLTIwOS1cdFx0XHRkcC1cdTAwM2VyaWNwX3Y0LmRwX2Fja19zZXEgPVxubmV0L3Jkcy9pYl9jbS5jOjIxMDpcdFx0XHQgICAgY3B1X3RvX2JlNjQocmRzX2liX3BpZ2d5Yl9hY2soaWMpKTtcbm5ldC9yZHMvaWJfY20uYy0yMTEtXHRcdFx0ZHAtXHUwMDNlcmljcF92NC5kcF9jbW4ucmljcGNfZHBfdG9zcyA9IGNvbm4tXHUwMDNlY190b3M7XG4tLVxubmV0L3Jkcy9pYl9jbS5jLTIzMi1cbm5ldC9yZHMvaWJfY20uYzoyMzM6c3RhdGljIHZvaWQgcmRzX2liX2NxX2V2ZW50X2hhbmRsZXIoc3RydWN0IGliX2V2ZW50ICpldmVudCwgdm9pZCAqZGF0YSlcbm5ldC9yZHMvaWJfY20uYy0yMzQte1xuLS1cbm5ldC9yZHMvaWJfY20uYy0yNDYtICovXG5uZXQvcmRzL2liX2NtLmM6MjQ3OnN0YXRpYyB2b2lkIHJkc19pYl9jcV9jb21wX2hhbmRsZXJfcmVjdihzdHJ1Y3QgaWJfY3EgKmNxLCB2b2lkICpjb250ZXh0KVxubmV0L3Jkcy9pYl9jbS5jLTI0OC17XG5uZXQvcmRzL2liX2NtLmMtMjQ5LVx0c3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gY29udGV4dDtcbm5ldC9yZHMvaWJfY20uYzoyNTA6XHRzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi1cdTAwM2VjX3RyYW5zcG9ydF9kYXRhO1xubmV0L3Jkcy9pYl9jbS5jLTI1MS1cbi0tXG5uZXQvcmRzL2liX2NtLmMtMjUzLVxubmV0L3Jkcy9pYl9jbS5jOjI1NDpcdHJkc19pYl9zdGF0c19pbmMoc19pYl9ldnRfaGFuZGxlcl9jYWxsKTtcbm5ldC9yZHMvaWJfY20uYy0yNTUtXG4tLVxubmV0L3Jkcy9pYl9jbS5jLTI1OC1cbm5ldC9yZHMvaWJfY20uYzoyNTk6c3RhdGljIHZvaWQgcG9sbF9zY3Eoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywgc3RydWN0IGliX2NxICpjcSxcbm5ldC9yZHMvaWJfY20uYy0yNjAtXHRcdCAgICAgc3RydWN0IGliX3djICp3Y3MpXG4tLVxubmV0L3Jkcy9pYl9jbS5jLTI3My1cdFx0XHQgICAgd2MtXHUwMDNld3JfaWQgPT0gUkRTX0lCX0FDS19XUl9JRClcbm5ldC9yZHMvaWJfY20uYzoyNzQ6XHRcdFx0XHRyZHNfaWJfc2VuZF9jcWVfaGFuZGxlcihpYywgd2MpO1xubmV0L3Jkcy9pYl9jbS5jLTI3NS1cdFx0XHRlbHNlXG5uZXQvcmRzL2liX2NtLmM6Mjc2Olx0XHRcdFx0cmRzX2liX21yX2NxZV9oYW5kbGVyKGljLCB3Yyk7XG5uZXQvcmRzL2liX2NtLmMtMjc3LVxuLS1cbm5ldC9yZHMvaWJfY20uYy0yODEtXG5uZXQvcmRzL2liX2NtLmM6MjgyOnN0YXRpYyB2b2lkIHJkc19pYl90YXNrbGV0X2ZuX3NlbmQodW5zaWduZWQgbG9uZyBkYXRhKVxubmV0L3Jkcy9pYl9jbS5jLTI4My17XG5uZXQvcmRzL2liX2NtLmM6Mjg0Olx0c3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IChzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKilkYXRhO1xubmV0L3Jkcy9pYl9jbS5jLTI4NS1cdHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGljLVx1MDAzZWNvbm47XG5uZXQvcmRzL2liX2NtLmMtMjg2LVxubmV0L3Jkcy9pYl9jbS5jOjI4NzpcdHJkc19pYl9zdGF0c19pbmMoc19pYl90YXNrbGV0X2NhbGwpO1xubmV0L3Jkcy9pYl9jbS5jLTI4OC1cbi0tXG5uZXQvcmRzL2liX2NtLmMtMzAyLVxubmV0L3Jkcy9pYl9jbS5jOjMwMzpzdGF0aWMgdm9pZCBwb2xsX3JjcShzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljLCBzdHJ1Y3QgaWJfY3EgKmNxLFxubmV0L3Jkcy9pYl9jbS5jLTMwNC1cdFx0ICAgICBzdHJ1Y3QgaWJfd2MgKndjcyxcbm5ldC9yZHMvaWJfY20uYzozMDU6XHRcdCAgICAgc3RydWN0IHJkc19pYl9hY2tfc3RhdGUgKmFja19zdGF0ZSlcbm5ldC9yZHMvaWJfY20uYy0zMDYte1xuLS1cbm5ldC9yZHMvaWJfY20uYy0zMTYtXG5uZXQvcmRzL2liX2NtLmM6MzE3Olx0XHRcdHJkc19pYl9yZWN2X2NxZV9oYW5kbGVyKGljLCB3YywgYWNrX3N0YXRlKTtcbm5ldC9yZHMvaWJfY20uYy0zMTgtXHRcdH1cbi0tXG5uZXQvcmRzL2liX2NtLmMtMzIxLVxubmV0L3Jkcy9pYl9jbS5jOjMyMjpzdGF0aWMgdm9pZCByZHNfaWJfdGFza2xldF9mbl9yZWN2KHVuc2lnbmVkIGxvbmcgZGF0YSlcbm5ldC9yZHMvaWJfY20uYy0zMjMte1xubmV0L3Jkcy9pYl9jbS5jOjMyNDpcdHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSAoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICopZGF0YTtcbm5ldC9yZHMvaWJfY20uYy0zMjUtXHRzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBpYy1cdTAwM2Vjb25uO1xubmV0L3Jkcy9pYl9jbS5jOjMyNjpcdHN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYgPSBpYy1cdTAwM2VyZHNfaWJkZXY7XG5uZXQvcmRzL2liX2NtLmM6MzI3Olx0c3RydWN0IHJkc19pYl9hY2tfc3RhdGUgc3RhdGU7XG5uZXQvcmRzL2liX2NtLmMtMzI4LVxuLS1cbm5ldC9yZHMvaWJfY20uYy0zMzEtXG5uZXQvcmRzL2liX2NtLmM6MzMyOlx0cmRzX2liX3N0YXRzX2luYyhzX2liX3Rhc2tsZXRfY2FsbCk7XG5uZXQvcmRzL2liX2NtLmMtMzMzLVxuLS1cbm5ldC9yZHMvaWJfY20uYy0zNDMtXHRpZiAoc3RhdGUuYWNrX25leHRfdmFsaWQpXG5uZXQvcmRzL2liX2NtLmM6MzQ0Olx0XHRyZHNfaWJfc2V0X2FjayhpYywgc3RhdGUuYWNrX25leHQsIHN0YXRlLmFja19yZXF1aXJlZCk7XG5uZXQvcmRzL2liX2NtLmMtMzQ1LVx0aWYgKHN0YXRlLmFja19yZWN2X3ZhbGlkIFx1MDAyNlx1MDAyNiBzdGF0ZS5hY2tfcmVjdiBcdTAwM2UgaWMtXHUwMDNlaV9hY2tfcmVjdikge1xuLS1cbm5ldC9yZHMvaWJfY20uYy0zNTAtXHRpZiAocmRzX2Nvbm5fdXAoY29ubikpXG5uZXQvcmRzL2liX2NtLmM6MzUxOlx0XHRyZHNfaWJfYXR0ZW1wdF9hY2soaWMpO1xubmV0L3Jkcy9pYl9jbS5jLTM1Mi19XG5uZXQvcmRzL2liX2NtLmMtMzUzLVxubmV0L3Jkcy9pYl9jbS5jOjM1NDpzdGF0aWMgdm9pZCByZHNfaWJfcXBfZXZlbnRfaGFuZGxlcihzdHJ1Y3QgaWJfZXZlbnQgKmV2ZW50LCB2b2lkICpkYXRhKVxubmV0L3Jkcy9pYl9jbS5jLTM1NS17XG5uZXQvcmRzL2liX2NtLmMtMzU2LVx0c3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gZGF0YTtcbm5ldC9yZHMvaWJfY20uYzozNTc6XHRzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi1cdTAwM2VjX3RyYW5zcG9ydF9kYXRhO1xubmV0L3Jkcy9pYl9jbS5jLTM1OC1cbi0tXG5uZXQvcmRzL2liX2NtLmMtMzc0LVxubmV0L3Jkcy9pYl9jbS5jOjM3NTpzdGF0aWMgdm9pZCByZHNfaWJfY3FfY29tcF9oYW5kbGVyX3NlbmQoc3RydWN0IGliX2NxICpjcSwgdm9pZCAqY29udGV4dClcbm5ldC9yZHMvaWJfY20uYy0zNzYte1xubmV0L3Jkcy9pYl9jbS5jLTM3Ny1cdHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGNvbnRleHQ7XG5uZXQvcmRzL2liX2NtLmM6Mzc4Olx0c3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tXHUwMDNlY190cmFuc3BvcnRfZGF0YTtcbm5ldC9yZHMvaWJfY20uYy0zNzktXG4tLVxubmV0L3Jkcy9pYl9jbS5jLTM4MS1cbm5ldC9yZHMvaWJfY20uYzozODI6XHRyZHNfaWJfc3RhdHNfaW5jKHNfaWJfZXZ0X2hhbmRsZXJfY2FsbCk7XG5uZXQvcmRzL2liX2NtLmMtMzgzLVxuLS1cbm5ldC9yZHMvaWJfY20uYy0zODYtXG5uZXQvcmRzL2liX2NtLmM6Mzg3OnN0YXRpYyBpbmxpbmUgaW50IGliZGV2X2dldF91bnVzZWRfdmVjdG9yKHN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYpXG5uZXQvcmRzL2liX2NtLmMtMzg4LXtcbi0tXG5uZXQvcmRzL2liX2NtLmMtNDAzLVxubmV0L3Jkcy9pYl9jbS5jOjQwNDpzdGF0aWMgaW5saW5lIHZvaWQgaWJkZXZfcHV0X3ZlY3RvcihzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2LCBpbnQgaW5kZXgpXG5uZXQvcmRzL2liX2NtLmMtNDA1LXtcbi0tXG5uZXQvcmRzL2liX2NtLmM9NDE2PXN0YXRpYyBzdHJ1Y3QgcmRzX2hlYWRlciAqcmRzX2RtYV9oZHJfYWxsb2Moc3RydWN0IGliX2RldmljZSAqZGV2LFxuLS1cbm5ldC9yZHMvaWJfY20uYy00NDEtICovXG5uZXQvcmRzL2liX2NtLmM6NDQyOnN0YXRpYyB2b2lkIHJkc19kbWFfaGRyc19mcmVlKHN0cnVjdCByZHNfaWJfZGV2aWNlICpkZXYsXG5uZXQvcmRzL2liX2NtLmMtNDQzLVx0XHRzdHJ1Y3QgcmRzX2hlYWRlciAqKmhkcnMsIGRtYV9hZGRyX3QgKmRtYV9hZGRycywgdTMyIG51bV9oZHJzLFxuLS1cbm5ldC9yZHMvaWJfY20uYy00NjUtICovXG5uZXQvcmRzL2liX2NtLmM6NDY2OnN0YXRpYyBzdHJ1Y3QgcmRzX2hlYWRlciAqKnJkc19kbWFfaGRyc19hbGxvYyhzdHJ1Y3QgcmRzX2liX2RldmljZSAqZGV2LFxubmV0L3Jkcy9pYl9jbS5jLTQ2Ny1cdFx0ZG1hX2FkZHJfdCAqKmRtYV9hZGRycywgdTMyIG51bV9oZHJzLFxuLS1cbm5ldC9yZHMvaWJfY20uYy01MDEtICovXG5uZXQvcmRzL2liX2NtLmM6NTAyOnN0YXRpYyBpbnQgcmRzX2liX3NldHVwX3FwKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubilcbm5ldC9yZHMvaWJfY20uYy01MDMte1xubmV0L3Jkcy9pYl9jbS5jOjUwNDpcdHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLVx1MDAzZWNfdHJhbnNwb3J0X2RhdGE7XG5uZXQvcmRzL2liX2NtLmMtNTA1LVx0c3RydWN0IGliX2RldmljZSAqZGV2ID0gaWMtXHUwMDNlaV9jbV9pZC1cdTAwM2VkZXZpY2U7XG4tLVxubmV0L3Jkcy9pYl9jbS5jLTUwNy1cdHN0cnVjdCBpYl9jcV9pbml0X2F0dHIgY3FfYXR0ciA9IHt9O1xubmV0L3Jkcy9pYl9jbS5jOjUwODpcdHN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXY7XG5uZXQvcmRzL2liX2NtLmMtNTA5LVx0dW5zaWduZWQgbG9uZyBtYXhfd3JzO1xuLS1cbm5ldC9yZHMvaWJfY20uYy01MTUtXHQgKi9cbm5ldC9yZHMvaWJfY20uYzo1MTY6XHRyZHNfaWJkZXYgPSByZHNfaWJfZ2V0X2NsaWVudF9kYXRhKGRldik7XG5uZXQvcmRzL2liX2NtLmMtNTE3LVx0aWYgKCFyZHNfaWJkZXYpXG4tLVxubmV0L3Jkcy9pYl9jbS5jLTUyNi1cdC8qIGFkZCB0aGUgY29ubiBub3cgc28gdGhhdCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgaGFzIHRoZSBkZXYgKi9cbm5ldC9yZHMvaWJfY20uYzo1Mjc6XHRyZHNfaWJfYWRkX2Nvbm4ocmRzX2liZGV2LCBjb25uKTtcbm5ldC9yZHMvaWJfY20uYy01MjgtXG5uZXQvcmRzL2liX2NtLmM6NTI5Olx0bWF4X3dycyA9IHJkc19pYmRldi1cdTAwM2VtYXhfd3JzIFx1MDAzYyByZHNfaWJfc3lzY3RsX21heF9zZW5kX3dyICYjNDM7IDEgP1xubmV0L3Jkcy9pYl9jbS5jOjUzMDpcdFx0cmRzX2liZGV2LVx1MDAzZW1heF93cnMgLSAxIDogcmRzX2liX3N5c2N0bF9tYXhfc2VuZF93cjtcbm5ldC9yZHMvaWJfY20uYy01MzEtXHRpZiAoaWMtXHUwMDNlaV9zZW5kX3Jpbmcud19uciAhPSBtYXhfd3JzKVxubmV0L3Jkcy9pYl9jbS5jOjUzMjpcdFx0cmRzX2liX3JpbmdfcmVzaXplKFx1MDAyNmljLVx1MDAzZWlfc2VuZF9yaW5nLCBtYXhfd3JzKTtcbm5ldC9yZHMvaWJfY20uYy01MzMtXG5uZXQvcmRzL2liX2NtLmM6NTM0Olx0bWF4X3dycyA9IHJkc19pYmRldi1cdTAwM2VtYXhfd3JzIFx1MDAzYyByZHNfaWJfc3lzY3RsX21heF9yZWN2X3dyICYjNDM7IDEgP1xubmV0L3Jkcy9pYl9jbS5jOjUzNTpcdFx0cmRzX2liZGV2LVx1MDAzZW1heF93cnMgLSAxIDogcmRzX2liX3N5c2N0bF9tYXhfcmVjdl93cjtcbm5ldC9yZHMvaWJfY20uYy01MzYtXHRpZiAoaWMtXHUwMDNlaV9yZWN2X3Jpbmcud19uciAhPSBtYXhfd3JzKVxubmV0L3Jkcy9pYl9jbS5jOjUzNzpcdFx0cmRzX2liX3JpbmdfcmVzaXplKFx1MDAyNmljLVx1MDAzZWlfcmVjdl9yaW5nLCBtYXhfd3JzKTtcbm5ldC9yZHMvaWJfY20uYy01MzgtXG4tLVxubmV0L3Jkcy9pYl9jbS5jLTU0NC1cdGNxX2F0dHIuY29tcF92ZWN0b3IgPSBpYy1cdTAwM2VpX3NjcV92ZWN0b3I7XG5uZXQvcmRzL2liX2NtLmM6NTQ1Olx0aWMtXHUwMDNlaV9zZW5kX2NxID0gaWJfY3JlYXRlX2NxKGRldiwgcmRzX2liX2NxX2NvbXBfaGFuZGxlcl9zZW5kLFxubmV0L3Jkcy9pYl9jbS5jOjU0NjpcdFx0XHRcdCAgICAgcmRzX2liX2NxX2V2ZW50X2hhbmRsZXIsIGNvbm4sXG5uZXQvcmRzL2liX2NtLmMtNTQ3LVx0XHRcdFx0ICAgICBcdTAwMjZjcV9hdHRyKTtcbi0tXG5uZXQvcmRzL2liX2NtLmMtNTU4LVx0Y3FfYXR0ci5jb21wX3ZlY3RvciA9IGljLVx1MDAzZWlfcmNxX3ZlY3Rvcjtcbm5ldC9yZHMvaWJfY20uYzo1NTk6XHRpYy1cdTAwM2VpX3JlY3ZfY3EgPSBpYl9jcmVhdGVfY3EoZGV2LCByZHNfaWJfY3FfY29tcF9oYW5kbGVyX3JlY3YsXG5uZXQvcmRzL2liX2NtLmM6NTYwOlx0XHRcdFx0ICAgICByZHNfaWJfY3FfZXZlbnRfaGFuZGxlciwgY29ubixcbm5ldC9yZHMvaWJfY20uYy01NjEtXHRcdFx0XHQgICAgIFx1MDAyNmNxX2F0dHIpO1xuLS1cbm5ldC9yZHMvaWJfY20uYy01ODMtXHRtZW1zZXQoXHUwMDI2YXR0ciwgMCwgc2l6ZW9mKGF0dHIpKTtcbm5ldC9yZHMvaWJfY20uYzo1ODQ6XHRhdHRyLmV2ZW50X2hhbmRsZXIgPSByZHNfaWJfcXBfZXZlbnRfaGFuZGxlcjtcbm5ldC9yZHMvaWJfY20uYy01ODUtXHRhdHRyLnFwX2NvbnRleHQgPSBjb25uO1xuLS1cbm5ldC9yZHMvaWJfY20uYy02MzEtXG5uZXQvcmRzL2liX2NtLmM6NjMyOlx0aWMtXHUwMDNlaV9zZW5kcyA9IHZ6YWxsb2Nfbm9kZShhcnJheV9zaXplKHNpemVvZihzdHJ1Y3QgcmRzX2liX3NlbmRfd29yayksXG5uZXQvcmRzL2liX2NtLmMtNjMzLVx0XHRcdFx0XHQgICAgICBpYy1cdTAwM2VpX3NlbmRfcmluZy53X25yKSxcbi0tXG5uZXQvcmRzL2liX2NtLmMtNjQwLVxubmV0L3Jkcy9pYl9jbS5jOjY0MTpcdGljLVx1MDAzZWlfcmVjdnMgPSB2emFsbG9jX25vZGUoYXJyYXlfc2l6ZShzaXplb2Yoc3RydWN0IHJkc19pYl9yZWN2X3dvcmspLFxubmV0L3Jkcy9pYl9jbS5jLTY0Mi1cdFx0XHRcdFx0ICAgICAgaWMtXHUwMDNlaV9yZWN2X3Jpbmcud19uciksXG4tLVxubmV0L3Jkcy9pYl9jbS5jLTY0OS1cbm5ldC9yZHMvaWJfY20uYzo2NTA6XHRyZHNfaWJfcmVjdl9pbml0X2FjayhpYyk7XG5uZXQvcmRzL2liX2NtLmMtNjUxLVxuLS1cbm5ldC9yZHMvaWJfY20uYy02ODYtcmRzX2liZGV2X291dDpcbm5ldC9yZHMvaWJfY20uYzo2ODc6XHRyZHNfaWJfcmVtb3ZlX2Nvbm4ocmRzX2liZGV2LCBjb25uKTtcbm5ldC9yZHMvaWJfY20uYy02ODgtb3V0OlxubmV0L3Jkcy9pYl9jbS5jOjY4OTpcdHJkc19pYl9kZXZfcHV0KHJkc19pYmRldik7XG5uZXQvcmRzL2liX2NtLmMtNjkwLVxuLS1cbm5ldC9yZHMvaWJfY20uYy02OTMtXG5uZXQvcmRzL2liX2NtLmM6Njk0OnN0YXRpYyB1MzIgcmRzX2liX3Byb3RvY29sX2NvbXBhdGlibGUoc3RydWN0IHJkbWFfY21fZXZlbnQgKmV2ZW50LCBib29sIGlzdjYpXG5uZXQvcmRzL2liX2NtLmMtNjk1LXtcbm5ldC9yZHMvaWJfY20uYzo2OTY6XHRjb25zdCB1bmlvbiByZHNfaWJfY29ubl9wcml2ICpkcCA9IGV2ZW50LVx1MDAzZXBhcmFtLmNvbm4ucHJpdmF0ZV9kYXRhO1xubmV0L3Jkcy9pYl9jbS5jLTY5Ny1cdHU4IGRhdGFfbGVuLCBtYWpvciwgbWlub3I7XG4tLVxubmV0L3Jkcy9pYl9jbS5jLTcyNC1cdH0gZWxzZSB7XG5uZXQvcmRzL2liX2NtLmM6NzI1Olx0XHRkYXRhX2xlbiA9IHNpemVvZihzdHJ1Y3QgcmRzX2liX2Nvbm5lY3RfcHJpdmF0ZSk7XG5uZXQvcmRzL2liX2NtLmMtNzI2LVx0XHRtYWpvciA9IGRwLVx1MDAzZXJpY3BfdjQuZHBfcHJvdG9jb2xfbWFqb3I7XG4tLVxubmV0L3Jkcy9pYl9jbS5jLTc1NS0vKiBHaXZlbiBhbiBJUHY2IGFkZHJlc3MsIGZpbmQgdGhlIG5ldF9kZXZpY2Ugd2hpY2ggaG9zdHMgdGhhdCBhZGRyZXNzIGFuZFxubmV0L3Jkcy9pYl9jbS5jOjc1NjogKiByZXR1cm4gaXRzIGluZGV4LiAgVGhpcyBpcyB1c2VkIGJ5IHRoZSByZHNfaWJfY21faGFuZGxlX2Nvbm5lY3QoKSBjb2RlIHRvXG5uZXQvcmRzL2liX2NtLmMtNzU3LSAqIGZpbmQgdGhlIGludGVyZmFjZSBpbmRleCBvZiB3aGVyZSBhbiBpbmNvbWluZyByZXF1ZXN0IGNvbWVzIGZyb20gd2hlblxuLS1cbm5ldC9yZHMvaWJfY20uYz03NjU9c3RhdGljIHUzMiBfX3Jkc19maW5kX2lmaW5kZXgoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpXG4tLVxubmV0L3Jkcy9pYl9jbS5jLTc4Mi1cbm5ldC9yZHMvaWJfY20uYzo3ODM6aW50IHJkc19pYl9jbV9oYW5kbGVfY29ubmVjdChzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQsXG5uZXQvcmRzL2liX2NtLmMtNzg0LVx0XHRcdCAgICAgc3RydWN0IHJkbWFfY21fZXZlbnQgKmV2ZW50LCBib29sIGlzdjYpXG4tLVxubmV0L3Jkcy9pYl9jbS5jLTc4Ny1cdF9fYmU2NCBmZ3VpZCA9IGNtX2lkLVx1MDAzZXJvdXRlLnBhdGhfcmVjLVx1MDAzZWRnaWQuZ2xvYmFsLmludGVyZmFjZV9pZDtcbm5ldC9yZHMvaWJfY20uYzo3ODg6XHRjb25zdCBzdHJ1Y3QgcmRzX2liX2Nvbm5fcHJpdl9jbW4gKmRwX2Ntbjtcbm5ldC9yZHMvaWJfY20uYy03ODktXHRzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBOVUxMO1xubmV0L3Jkcy9pYl9jbS5jOjc5MDpcdHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBOVUxMO1xubmV0L3Jkcy9pYl9jbS5jLTc5MS1cdHN0cnVjdCByZG1hX2Nvbm5fcGFyYW0gY29ubl9wYXJhbTtcbm5ldC9yZHMvaWJfY20uYzo3OTI6XHRjb25zdCB1bmlvbiByZHNfaWJfY29ubl9wcml2ICpkcDtcbm5ldC9yZHMvaWJfY20uYzo3OTM6XHR1bmlvbiByZHNfaWJfY29ubl9wcml2IGRwX3JlcDtcbm5ldC9yZHMvaWJfY20uYy03OTQtXHRzdHJ1Y3QgaW42X2FkZHIgc19tYXBwZWRfYWRkcjtcbi0tXG5uZXQvcmRzL2liX2NtLmMtODAzLVx0LyogQ2hlY2sgd2hldGhlciB0aGUgcmVtb3RlIHByb3RvY29sIHZlcnNpb24gbWF0Y2hlcyBvdXJzLiAqL1xubmV0L3Jkcy9pYl9jbS5jOjgwNDpcdHZlcnNpb24gPSByZHNfaWJfcHJvdG9jb2xfY29tcGF0aWJsZShldmVudCwgaXN2Nik7XG5uZXQvcmRzL2liX2NtLmMtODA1LVx0aWYgKCF2ZXJzaW9uKSB7XG4tLVxubmV0L3Jkcy9pYl9jbS5jLTg2MC1cdGNvbm4gPSByZHNfY29ubl9jcmVhdGUoXHUwMDI2aW5pdF9uZXQsIGRhZGRyNiwgc2FkZHI2LFxubmV0L3Jkcy9pYl9jbS5jOjg2MTpcdFx0XHQgICAgICAgXHUwMDI2cmRzX2liX3RyYW5zcG9ydCwgZHBfY21uLVx1MDAzZXJpY3BjX2RwX3Rvc3MsXG5uZXQvcmRzL2liX2NtLmMtODYyLVx0XHRcdCAgICAgICBHRlBfS0VSTkVMLCBpZmluZGV4KTtcbi0tXG5uZXQvcmRzL2liX2NtLmMtODgwLVx0XHRcdHJkc19jb25uX2Ryb3AoY29ubik7XG5uZXQvcmRzL2liX2NtLmM6ODgxOlx0XHRcdHJkc19pYl9zdGF0c19pbmMoc19pYl9saXN0ZW5fY2xvc2VkX3N0YWxlKTtcbm5ldC9yZHMvaWJfY20uYy04ODItXHRcdH0gZWxzZVxuLS1cbm5ldC9yZHMvaWJfY20uYy04ODQtXHRcdFx0LyogV2FpdCBhbmQgc2VlIC0gb3VyIGNvbm5lY3QgbWF5IHN0aWxsIGJlIHN1Y2NlZWRpbmcgKi9cbm5ldC9yZHMvaWJfY20uYzo4ODU6XHRcdFx0cmRzX2liX3N0YXRzX2luYyhzX2liX2Nvbm5lY3RfcmFjZWQpO1xubmV0L3Jkcy9pYl9jbS5jLTg4Ni1cdFx0fVxuLS1cbm5ldC9yZHMvaWJfY20uYy04OTEtXG5uZXQvcmRzL2liX2NtLmM6ODkyOlx0cmRzX2liX3NldF9wcm90b2NvbChjb25uLCB2ZXJzaW9uKTtcbm5ldC9yZHMvaWJfY20uYzo4OTM6XHRyZHNfaWJfc2V0X2Zsb3dfY29udHJvbChjb25uLCBiZTMyX3RvX2NwdShkcF9jbW4tXHUwMDNlcmljcGNfY3JlZGl0KSk7XG5uZXQvcmRzL2liX2NtLmMtODk0LVxuLS1cbm5ldC9yZHMvaWJfY20uYy05MTAtXG5uZXQvcmRzL2liX2NtLmM6OTExOlx0ZXJyID0gcmRzX2liX3NldHVwX3FwKGNvbm4pO1xubmV0L3Jkcy9pYl9jbS5jLTkxMi1cdGlmIChlcnIpIHtcbm5ldC9yZHMvaWJfY20uYzo5MTM6XHRcdHJkc19pYl9jb25uX2Vycm9yKGNvbm4sIFwmIzM0O3Jkc19pYl9zZXR1cF9xcCBmYWlsZWQgKCVkKVxcblwmIzM0OywgZXJyKTtcbm5ldC9yZHMvaWJfY20uYy05MTQtXHRcdGdvdG8gb3V0O1xuLS1cbm5ldC9yZHMvaWJfY20uYy05MTYtXG5uZXQvcmRzL2liX2NtLmM6OTE3Olx0cmRzX2liX2NtX2ZpbGxfY29ubl9wYXJhbShjb25uLCBcdTAwMjZjb25uX3BhcmFtLCBcdTAwMjZkcF9yZXAsIHZlcnNpb24sXG5uZXQvcmRzL2liX2NtLmMtOTE4LVx0XHRcdFx0ICBldmVudC1cdTAwM2VwYXJhbS5jb25uLnJlc3BvbmRlcl9yZXNvdXJjZXMsXG4tLVxubmV0L3Jkcy9pYl9jbS5jLTkyMy1cdGlmIChyZG1hX2FjY2VwdChjbV9pZCwgXHUwMDI2Y29ubl9wYXJhbSkpXG5uZXQvcmRzL2liX2NtLmM6OTI0Olx0XHRyZHNfaWJfY29ubl9lcnJvcihjb25uLCBcJiMzNDtyZG1hX2FjY2VwdCBmYWlsZWRcXG5cJiMzNDspO1xubmV0L3Jkcy9pYl9jbS5jLTkyNS1cbi0tXG5uZXQvcmRzL2liX2NtLmMtOTM1LVxubmV0L3Jkcy9pYl9jbS5jOjkzNjppbnQgcmRzX2liX2NtX2luaXRpYXRlX2Nvbm5lY3Qoc3RydWN0IHJkbWFfY21faWQgKmNtX2lkLCBib29sIGlzdjYpXG5uZXQvcmRzL2liX2NtLmMtOTM3LXtcbm5ldC9yZHMvaWJfY20uYy05MzgtXHRzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBjbV9pZC1cdTAwM2Vjb250ZXh0O1xubmV0L3Jkcy9pYl9jbS5jOjkzOTpcdHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLVx1MDAzZWNfdHJhbnNwb3J0X2RhdGE7XG5uZXQvcmRzL2liX2NtLmMtOTQwLVx0c3RydWN0IHJkbWFfY29ubl9wYXJhbSBjb25uX3BhcmFtO1xubmV0L3Jkcy9pYl9jbS5jOjk0MTpcdHVuaW9uIHJkc19pYl9jb25uX3ByaXYgZHA7XG5uZXQvcmRzL2liX2NtLmMtOTQyLVx0aW50IHJldDtcbi0tXG5uZXQvcmRzL2liX2NtLmMtOTQ1LVx0ICogZGVmYXVsdCB0byBSRFN2My4wICovXG5uZXQvcmRzL2liX2NtLmM6OTQ2Olx0cmRzX2liX3NldF9wcm90b2NvbChjb25uLCBSRFNfUFJPVE9DT0xfNF8xKTtcbm5ldC9yZHMvaWJfY20uYzo5NDc6XHRpYy1cdTAwM2VpX2Zsb3djdGwgPSByZHNfaWJfc3lzY3RsX2Zsb3dfY29udHJvbDtcdC8qIGFkdmVydGlzZSBmbG93IGNvbnRyb2wgKi9cbm5ldC9yZHMvaWJfY20uYy05NDgtXG5uZXQvcmRzL2liX2NtLmM6OTQ5Olx0cmV0ID0gcmRzX2liX3NldHVwX3FwKGNvbm4pO1xubmV0L3Jkcy9pYl9jbS5jLTk1MC1cdGlmIChyZXQpIHtcbm5ldC9yZHMvaWJfY20uYzo5NTE6XHRcdHJkc19pYl9jb25uX2Vycm9yKGNvbm4sIFwmIzM0O3Jkc19pYl9zZXR1cF9xcCBmYWlsZWQgKCVkKVxcblwmIzM0OywgcmV0KTtcbm5ldC9yZHMvaWJfY20uYy05NTItXHRcdGdvdG8gb3V0O1xuLS1cbm5ldC9yZHMvaWJfY20uYy05NTQtXG5uZXQvcmRzL2liX2NtLmM6OTU1Olx0cmRzX2liX2NtX2ZpbGxfY29ubl9wYXJhbShjb25uLCBcdTAwMjZjb25uX3BhcmFtLCBcdTAwMjZkcCxcbm5ldC9yZHMvaWJfY20uYy05NTYtXHRcdFx0XHQgIGNvbm4tXHUwMDNlY19wcm9wb3NlZF92ZXJzaW9uLFxuLS1cbm5ldC9yZHMvaWJfY20uYy05NTktXHRpZiAocmV0KVxubmV0L3Jkcy9pYl9jbS5jOjk2MDpcdFx0cmRzX2liX2Nvbm5fZXJyb3IoY29ubiwgXCYjMzQ7cmRtYV9jb25uZWN0X2xvY2tlZCBmYWlsZWQgKCVkKVxcblwmIzM0Oyxcbm5ldC9yZHMvaWJfY20uYy05NjEtXHRcdFx0XHQgIHJldCk7XG4tLVxubmV0L3Jkcy9pYl9jbS5jLTk3NC1cbm5ldC9yZHMvaWJfY20uYzo5NzU6aW50IHJkc19pYl9jb25uX3BhdGhfY29ubmVjdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG5uZXQvcmRzL2liX2NtLmMtOTc2LXtcbi0tXG5uZXQvcmRzL2liX2NtLmMtOTc5LVx0cmRtYV9jbV9ldmVudF9oYW5kbGVyIGhhbmRsZXI7XG5uZXQvcmRzL2liX2NtLmM6OTgwOlx0c3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYztcbm5ldC9yZHMvaWJfY20uYy05ODEtXHRpbnQgcmV0O1xuLS1cbm5ldC9yZHMvaWJfY20uYy0xMDQ1LVxubmV0L3Jkcy9pYl9jbS5jOjEwNDY6c3RhdGljIHVuc2lnbmVkIGxvbmcgcmRzX2liX2Nvbm5fcGF0aF9zaHV0ZG93bl9jaGVja193YWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbm5ldC9yZHMvaWJfY20uYy0xMDQ3LXtcbm5ldC9yZHMvaWJfY20uYy0xMDQ4LVx0c3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gY3AtXHUwMDNlY3BfY29ubjtcbm5ldC9yZHMvaWJfY20uYzoxMDQ5Olx0c3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tXHUwMDNlY190cmFuc3BvcnRfZGF0YTtcbm5ldC9yZHMvaWJfY20uYy0xMDUwLVxubmV0L3Jkcy9pYl9jbS5jLTEwNTEtXHRyZXR1cm4gKCFpYy1cdTAwM2VpX2NtX2lkIHx8XG5uZXQvcmRzL2liX2NtLmM6MTA1MjpcdFx0KHJkc19pYl9yaW5nX2VtcHR5KFx1MDAyNmljLVx1MDAzZWlfcmVjdl9yaW5nKSBcdTAwMjZcdTAwMjZcbm5ldC9yZHMvaWJfY20uYy0xMDUzLVx0XHQgKGF0b21pY19yZWFkKFx1MDAyNmljLVx1MDAzZWlfc2lnbmFsZWRfc2VuZHMpID09IDApIFx1MDAyNlx1MDAyNlxuLS1cbm5ldC9yZHMvaWJfY20uYy0xMDYzLSAqL1xubmV0L3Jkcy9pYl9jbS5jOjEwNjQ6dm9pZCByZHNfaWJfY29ubl9wYXRoX3NodXRkb3duKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbm5ldC9yZHMvaWJfY20uYy0xMDY1LXtcbm5ldC9yZHMvaWJfY20uYy0xMDY2LVx0c3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gY3AtXHUwMDNlY3BfY29ubjtcbm5ldC9yZHMvaWJfY20uYzoxMDY3Olx0c3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tXHUwMDNlY190cmFuc3BvcnRfZGF0YTtcbm5ldC9yZHMvaWJfY20uYy0xMDY4LVx0aW50IGVyciA9IDA7XG4tLVxubmV0L3Jkcy9pYl9jbS5jLTEwODctXHRcdCAqL1xubmV0L3Jkcy9pYl9jbS5jOjEwODg6XHRcdHJkc19pYl9mbHVzaF9tcnMoKTtcbm5ldC9yZHMvaWJfY20uYy0xMDg5LVxuLS1cbm5ldC9yZHMvaWJfY20uYy0xMDk4LVx0XHQgKi9cbm5ldC9yZHMvaWJfY20uYzoxMDk5Olx0XHR3aGlsZSAoIXdhaXRfZXZlbnRfdGltZW91dChyZHNfaWJfcmluZ19lbXB0eV93YWl0LFxubmV0L3Jkcy9pYl9jbS5jOjExMDA6XHRcdFx0XHRcdCAgIHJkc19pYl9jb25uX3BhdGhfc2h1dGRvd25fY2hlY2tfd2FpdChjcCkgPT0gMCxcbm5ldC9yZHMvaWJfY20uYy0xMTAxLVx0XHRcdFx0XHQgICBtc2Vjc190b19qaWZmaWVzKDEwMDApKSkge1xuLS1cbm5ldC9yZHMvaWJfY20uYy0xMTYxLVx0XHRpZiAoaWMtXHUwMDNlaV9zZW5kcylcbm5ldC9yZHMvaWJfY20uYzoxMTYyOlx0XHRcdHJkc19pYl9zZW5kX2NsZWFyX3JpbmcoaWMpO1xubmV0L3Jkcy9pYl9jbS5jLTExNjMtXHRcdGlmIChpYy1cdTAwM2VpX3JlY3ZzKVxubmV0L3Jkcy9pYl9jbS5jOjExNjQ6XHRcdFx0cmRzX2liX3JlY3ZfY2xlYXJfcmluZyhpYyk7XG5uZXQvcmRzL2liX2NtLmMtMTE2NS1cbi0tXG5uZXQvcmRzL2liX2NtLmMtMTE3MS1cdFx0aWYgKGljLVx1MDAzZXJkc19pYmRldilcbm5ldC9yZHMvaWJfY20uYzoxMTcyOlx0XHRcdHJkc19pYl9yZW1vdmVfY29ubihpYy1cdTAwM2VyZHNfaWJkZXYsIGNvbm4pO1xubmV0L3Jkcy9pYl9jbS5jLTExNzMtXG4tLVxubmV0L3Jkcy9pYl9jbS5jLTEyMDMtXHQvKiBSZS1pbml0IHJpbmdzLCBidXQgcmV0YWluIHNpemVzLiAqL1xubmV0L3Jkcy9pYl9jbS5jOjEyMDQ6XHRyZHNfaWJfcmluZ19pbml0KFx1MDAyNmljLVx1MDAzZWlfc2VuZF9yaW5nLCBpYy1cdTAwM2VpX3NlbmRfcmluZy53X25yKTtcbm5ldC9yZHMvaWJfY20uYzoxMjA1Olx0cmRzX2liX3JpbmdfaW5pdChcdTAwMjZpYy1cdTAwM2VpX3JlY3ZfcmluZywgaWMtXHUwMDNlaV9yZWN2X3Jpbmcud19ucik7XG5uZXQvcmRzL2liX2NtLmMtMTIwNi1cbi0tXG5uZXQvcmRzL2liX2NtLmMtMTIxOC1cbm5ldC9yZHMvaWJfY20uYzoxMjE5OmludCByZHNfaWJfY29ubl9hbGxvYyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGdmcF90IGdmcClcbm5ldC9yZHMvaWJfY20uYy0xMjIwLXtcbm5ldC9yZHMvaWJfY20uYzoxMjIxOlx0c3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYztcbm5ldC9yZHMvaWJfY20uYy0xMjIyLVx0dW5zaWduZWQgbG9uZyBmbGFncztcbi0tXG5uZXQvcmRzL2liX2NtLmMtMTIyNS1cdC8qIFhYWCB0b28gbGF6eT8gKi9cbm5ldC9yZHMvaWJfY20uYzoxMjI2Olx0aWMgPSBremFsbG9jX29iaihzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24sIGdmcCk7XG5uZXQvcmRzL2liX2NtLmMtMTIyNy1cdGlmICghaWMpXG4tLVxubmV0L3Jkcy9pYl9jbS5jLTEyMjktXG5uZXQvcmRzL2liX2NtLmM6MTIzMDpcdHJldCA9IHJkc19pYl9yZWN2X2FsbG9jX2NhY2hlcyhpYywgZ2ZwKTtcbm5ldC9yZHMvaWJfY20uYy0xMjMxLVx0aWYgKHJldCkge1xuLS1cbm5ldC9yZHMvaWJfY20uYy0xMjM2LVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2aWMtXHUwMDNlaWJfbm9kZSk7XG5uZXQvcmRzL2liX2NtLmM6MTIzNzpcdHRhc2tsZXRfaW5pdChcdTAwMjZpYy1cdTAwM2VpX3NlbmRfdGFza2xldCwgcmRzX2liX3Rhc2tsZXRfZm5fc2VuZCxcbm5ldC9yZHMvaWJfY20uYy0xMjM4LVx0XHQgICAgICh1bnNpZ25lZCBsb25nKWljKTtcbm5ldC9yZHMvaWJfY20uYzoxMjM5Olx0dGFza2xldF9pbml0KFx1MDAyNmljLVx1MDAzZWlfcmVjdl90YXNrbGV0LCByZHNfaWJfdGFza2xldF9mbl9yZWN2LFxubmV0L3Jkcy9pYl9jbS5jLTEyNDAtXHRcdCAgICAgKHVuc2lnbmVkIGxvbmcpaWMpO1xuLS1cbm5ldC9yZHMvaWJfY20uYy0xMjQ4LVx0Lypcbm5ldC9yZHMvaWJfY20uYzoxMjQ5Olx0ICogcmRzX2liX2Nvbm5fc2h1dGRvd24oKSB3YWl0cyBmb3IgdGhlc2UgdG8gYmUgZW1wdGllZCBzbyB0aGV5XG5uZXQvcmRzL2liX2NtLmMtMTI1MC1cdCAqIG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGl0IGNhbiBiZSBjYWxsZWQuXG5uZXQvcmRzL2liX2NtLmMtMTI1MS1cdCAqL1xubmV0L3Jkcy9pYl9jbS5jOjEyNTI6XHRyZHNfaWJfcmluZ19pbml0KFx1MDAyNmljLVx1MDAzZWlfc2VuZF9yaW5nLCAwKTtcbm5ldC9yZHMvaWJfY20uYzoxMjUzOlx0cmRzX2liX3JpbmdfaW5pdChcdTAwMjZpYy1cdTAwM2VpX3JlY3ZfcmluZywgMCk7XG5uZXQvcmRzL2liX2NtLmMtMTI1NC1cbi0tXG5uZXQvcmRzL2liX2NtLmMtMTI2OS0gKi9cbm5ldC9yZHMvaWJfY20uYzoxMjcwOnZvaWQgcmRzX2liX2Nvbm5fZnJlZSh2b2lkICphcmcpXG5uZXQvcmRzL2liX2NtLmMtMTI3MS17XG5uZXQvcmRzL2liX2NtLmM6MTI3MjpcdHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBhcmc7XG5uZXQvcmRzL2liX2NtLmMtMTI3My1cdHNwaW5sb2NrX3RcdCpsb2NrX3B0cjtcbi0tXG5uZXQvcmRzL2liX2NtLmMtMTI4Ny1cbm5ldC9yZHMvaWJfY20uYzoxMjg4Olx0cmRzX2liX3JlY3ZfZnJlZV9jYWNoZXMoaWMpO1xubmV0L3Jkcy9pYl9jbS5jLTEyODktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMTEwCgkJCQkJCQlvdXRwdXQ6IDE1MwoJCQkJCQkJdGhvdWdodHM6IDMzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIENvbmZpZ3VyYXRpb24gYW5kIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCB0aGUgZGVwZW5kZW5jaWVzIHN0cmFpZ2h0LiBMb29raW5nIGF0IGBuZXQvcmRzL0tjb25maWdgLCBpdCBjb25maXJtcyB0aGF0IFJEUyBkZXBlbmRzIG9uIElORVQsIGFuZCBSRFNfUkRNQSBuZWVkcyBib3RoIFJEUyBhbmQgSU5GSU5JQkFORCwgYWxvbmcgd2l0aCBJTkZJTklCQU5EX0FERFJfVFJBTlMuIFRoYXQgbWVhbnMgSSAqbXVzdCogaGF2ZSBSRFMsIFJEU19SRE1BLCBJTkZJTklCQU5ELCBhbmQgSU5GSU5JQkFORF9BRERSX1RSQU5TIGVuYWJsZWQgZm9yIHRoaXMgY2hhbmdlIHRvIGJlIHJlbGV2YW50LiBHb29kLCBnb29kLgoKTmV4dCwgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGVzZSBzeW1ib2xzOiBgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGVgLCBgcmRzX3JkbWFfY21fZXZlbnRfaGFuZGxlcl9jbW5gLCBgcmRzX2liX2NtX2hhbmRsZV9jb25uZWN0YCwgYW5kIGByZHNfaWJfY21faW5pdGlhdGVfY29ubmVjdGAuIFRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBJJiMzOTttIGV4cGVjdGluZyB0byBiZSBpbXBhY3RlZCBieSB0aGUgY2hhbmdlcy4gU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGF0IHRoZSBwcmltYXJ5IGNoYW5nZSBzZWVtcyB0byBiZSBpbiBgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGVgLCBjb25maXJtZWQgYnkgdGhlIGxpbmUgbnVtYmVyIG1lbnRpb25lZC4KCk5vdyBmb3IgdGhlIGNvcmUgb2YgdGhlIG1hdHRlcjogVGhpcyBwYXRjaCBsb29rcyBzb3VuZC4gVGhlIHJlYXNvbmluZyBpcyBjbGVhciBhbmQgY29uY2lzZTogaXQmIzM5O3MgZml4aW5nIGFuIFJEUyBvdmVyIEluZmluaUJhbmQgY29ubmVjdGlvbiBoYW5kbGluZyBpc3N1ZS4gVGhlIHBhdGNoIHJlcGxhY2VzIGByZHNfY29ubl9kZXN0cm95KClgIHdpdGggYHJkc19jb25uX2Ryb3AoKWAgaW4gYSBjb25uZWN0aW9uIGNvbXBsZXRlIGV2ZW50IHdoZW4gYW4gdW5zdXBwb3J0ZWQgcHJvdG9jb2wgdmVyc2lvbiBpcyBuZWdvdGlhdGVkLiBUaGlzIGluZGljYXRlcyB0aGF0IHdlIGFyZSBjaGFuZ2luZyBob3cgdW5yZWFjaGFibGUgbmV0d29yayAvIFJEUyB0ZWFyZG93biBsb2dpYyBpcyBoYW5kbGVkLiBUaGlzIGlzIGEgY3JpdGljYWwgYWRqdXN0bWVudCB0byBwcmV2ZW50IHBvdGVudGlhbCBpc3N1ZXMgZHVyaW5nIGNvbm5lY3Rpb24gYXR0ZW1wdHMuIEFsbCB0aGUgaW1wb3J0YW50IHBpZWNlcyBhcmUgaGVyZS4KClRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIGlzIHNldCB0byB0cnVlLCB3aGljaCBpcyBhcHByb3ByaWF0ZS4gVGhlIGZvY3VzIHN5bWJvbHMgYWxpZ24gd2l0aCB0aGUgZGVzY3JpYmVkIGZpeCwgYW5kIEkgaGF2ZSB0aGUgcmVxdWlyZWQgY29uZmlnczogYFJEU2AsIGBSRFNfUkRNQWAsIGBJTkZJTklCQU5EYCwgYW5kIGBJTkZJTklCQU5EX0FERFJfVFJBTlNgLiBJJiMzOTttIHNhdGlzZmllZC4KClRpbWUgdG8gaW52b2tlIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE0OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtSRFMmIzM0OywKICAgICYjMzQ7UkRTX1JETUEmIzM0OywKICAgICYjMzQ7SU5GSU5JQkFORCYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EX0FERFJfVFJBTlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZHNfaWJfY21fY29ubmVjdF9jb21wbGV0ZSYjMzQ7LAogICAgJiMzNDtyZHNfcmRtYV9jbV9ldmVudF9oYW5kbGVyX2NtbiYjMzQ7LAogICAgJiMzNDtyZHNfaWJfY21faGFuZGxlX2Nvbm5lY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgUkRTIG92ZXIgSW5maW5pQmFuZCBjb25uZWN0aW9uIGxpZmVjeWNsZSBoYW5kbGluZyBieSBjaGFuZ2luZyBgcmRzX2Nvbm5fZGVzdHJveWAgdG8gYHJkc19jb25uX2Ryb3BgIHdoZW4gZW5jb3VudGVyaW5nIHVuc3VwcG9ydGVkIHByb3RvY29sIHZlcnNpb25zIGluIGByZHNfaWJfY21fY29ubmVjdF9jb21wbGV0ZWAuIFRoaXMgYWx0ZXJzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGVycm9yIGhhbmRsaW5nIGFuZCBjb25uZWN0aW9uIHRlYXJkb3duIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JEUyYjMzQ7LAogICAgJiMzNDtSRFNfUkRNQSYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkRfQUREUl9UUkFOUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Jkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlJiMzNDssCiAgICAmIzM0O3Jkc19yZG1hX2NtX2V2ZW50X2hhbmRsZXJfY21uJiMzNDssCiAgICAmIzM0O3Jkc19pYl9jbV9oYW5kbGVfY29ubmVjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBSRFMgb3ZlciBJbmZpbmlCYW5kIGNvbm5lY3Rpb24gbGlmZWN5Y2xlIGhhbmRsaW5nIGJ5IGNoYW5naW5nIGByZHNfY29ubl9kZXN0cm95YCB0byBgcmRzX2Nvbm5fZHJvcGAgd2hlbiBlbmNvdW50ZXJpbmcgdW5zdXBwb3J0ZWQgcHJvdG9jb2wgdmVyc2lvbnMgaW4gYHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlYC4gVGhpcyBhbHRlcnMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgZXJyb3IgaGFuZGxpbmcgYW5kIGNvbm5lY3Rpb24gdGVhcmRvd24gZmxvdy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTQ6NTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDo1NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGEgZGlyZWN0IGNhbGwgdG8gYHJkc19jb25uX2Rlc3Ryb3koKWAgd2l0aCBgcmRzX2Nvbm5fZHJvcCgpYCBpbiBgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGUoKWAgd2hlbiBhbiB1bnN1cHBvcnRlZCBwcm90b2NvbCB2ZXJzaW9uIGlzIGVuY291bnRlcmVkLiBgcmRzX2Nvbm5fZGVzdHJveSgpYCBpbW1lZGlhdGVseSBmcmVlcyB0aGUgY29ubmVjdGlvbiBvYmplY3QgKGBjb25uYCBhbmQgYGNvbm4tXHUwMDNlY19wYXRoYCksIHdoaWNoIGNhdXNlcyB1c2UtYWZ0ZXItZnJlZSBhbmQgcHJlbWF0dXJlIGNsZWFudXAgaXNzdWVzIGluIGNvbm5lY3Rpb24gZXZlbnQgaGFuZGxpbmcgcGF0aHMuIGByZHNfY29ubl9kcm9wKClgIGNsZWFubHkgdGVhcnMgZG93biB0aGUgY29ubmVjdGlvbiB2aWEgYXN5bmNocm9ub3VzIHdvcmsuXG5cblRoaXMgY2hhbmdlIGlzIHB1cmVseSBjb25jZXJuZWQgd2l0aCBvYmplY3QgbGlmZXRpbWVzLCByZWZlcmVuY2UgbWFuYWdlbWVudCwgYW5kIHRlYXJkb3duIHN5bmNocm9uaXphdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gbG9naWMsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcvYnVmZmVycyB0byB1c2Vyc3BhY2UuIE1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGYwNTkzNzFlZjc2ZGUxMTQwMjJiNTQzZDBmMjYxNWMzMTUxZDE0MjEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDE0OjUzOjM5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYl9jbS5jIGIvbmV0L3Jkcy9pYl9jbS5jCmluZGV4IGQ0NjE0Njg4N2JhNDAuLjI5MDlkYTgzNjNmMzkgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvaWJfY20uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL2liX2NtLmMKQEAgLTExNSw3ICYjNDM7MTE1LDcgQEAgdm9pZCByZHNfaWJfY21fY29ubmVjdF9jb21wbGV0ZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCByZG1hX2NtX2V2ZW4KIAkJCQkgICZhbXA7Y29ubi0mZ3Q7Y19sYWRkciwgJmFtcDtjb25uLSZndDtjX2ZhZGRyLAogCQkJCSAgUkRTX1BST1RPQ09MX01BSk9SKGNvbm4tJmd0O2NfdmVyc2lvbiksCiAJCQkJICBSRFNfUFJPVE9DT0xfTUlOT1IoY29ubi0mZ3Q7Y192ZXJzaW9uKSk7Ci0JCQlyZHNfY29ubl9kZXN0cm95KGNvbm4pOwomIzQzOwkJCXJkc19jb25uX2Ryb3AoY29ubik7CiAJCQlyZXR1cm47CiAJCX0KIAl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDg5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSRFMgSUIgQ29ubmVjdGlvbiBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGBuZXQvcmRzL2liX2NtLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIHJlcGxhY2luZyBgcmRzX2Nvbm5fZGVzdHJveShjb25uKWAgd2l0aCBgcmRzX2Nvbm5fZHJvcChjb25uKWAgd2l0aGluIHRoZSBgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGVgIGZ1bmN0aW9uLiBNeSBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBzd2FwLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0cmlnZ2VyZWQgdGhpcyBjaGFuZ2UuIFdoYXQmIzM5O3MgdGhlIGZ1bmRhbWVudGFsIGRpZmZlcmVuY2UgYmV0d2VlbiBgZGVzdHJveWAgYW5kIGBkcm9wYCBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQ/IElzIHRoZXJlIGEgc3VidGxlIHNlbWFudGljIGRpc3RpbmN0aW9uIGF0IHBsYXkgdGhhdCBuZWNlc3NpdGF0ZXMgdGhpcyBtb2RpZmljYXRpb24/CgpUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bGwgcmVhY2ggZm9yIGBncmVwcGVyYCAob3IgZXZlbiBhIHF1aWNrIGByZWFkLWZpbGVgIHRvIGtlZXAgdGhpbmdzIHNpbXBsZSkgYW5kIHplcm8gaW4gb24gdGhlIGFyZWEgYXJvdW5kIGxpbmUgMTE1IGluIGBuZXQvcmRzL2liX2NtLmNgLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBpbW1lZGlhdGUgc3Vycm91bmRpbmcgY29kZSBhbmQgY29udGV4dC4gVW5kZXJzdGFuZGluZyB0aGUgYWRqYWNlbnQgbG9naWMgaXMgY3J1Y2lhbCB0byBncmFzcGluZyB0aGUgaW50ZW5kZWQgYmVoYXZpb3IgaGVyZS4gSSYjMzk7bSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgY29ubmVjdGlvbiYjMzk7cyBsaWZlY3ljbGUgc3RhdGUsIGVycm9yIGhhbmRsaW5nLCBvciByZXNvdXJjZSBtYW5hZ2VtZW50IGltbWVkaWF0ZWx5IGJlZm9yZSBhbmQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE0OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3Jkcy9pYl9jbS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA5MDpcdFx0XHRcdGNyZWRpdCA9IGRwLVx1MDAzZXJpY3BfdjYuZHBfY3JlZGl0O1xuICA5MTpcdFx0XHRcdC8qIGRwIHN0cnVjdHVyZSBzdGFydCBpcyBub3QgZ3VhcmFudGVlZCB0byBiZSA4IGJ5dGVzXG4gIDkyOlx0XHRcdFx0ICogYWxpZ25lZC4gIFNpbmNlIGRwX2Fja19zZXEgaXMgNjQtYml0IGV4dGVuZGVkIGxvYWRcbiAgOTM6XHRcdFx0XHQgKiBvcGVyYXRpb25zIGNhbiBiZSB1c2VkIHNvIGdvIHRocm91Z2ggZ2V0X3VuYWxpZ25lZFxuICA5NDpcdFx0XHRcdCAqIHRvIGF2b2lkIHVuYWxpZ25lZCBlcnJvcnMuXG4gIDk1Olx0XHRcdFx0ICovXG4gIDk2Olx0XHRcdFx0YWNrX3NlcSA9IGdldF91bmFsaWduZWQoXHUwMDI2ZHAtXHUwMDNlcmljcF92Ni5kcF9hY2tfc2VxKTtcbiAgOTc6XHRcdFx0fVxuICA5ODpcdFx0fSBlbHNlIGlmIChldmVudC1cdTAwM2VwYXJhbS5jb25uLnByaXZhdGVfZGF0YV9sZW4gXHUwMDNlPVxuICA5OTpcdFx0XHQgICBzaXplb2Yoc3RydWN0IHJkc19pYl9jb25uZWN0X3ByaXZhdGUpKSB7XG4gMTAwOlx0XHRcdG1ham9yID0gZHAtXHUwMDNlcmljcF92NC5kcF9wcm90b2NvbF9tYWpvcjtcbiAxMDE6XHRcdFx0bWlub3IgPSBkcC1cdTAwM2VyaWNwX3Y0LmRwX3Byb3RvY29sX21pbm9yO1xuIDEwMjpcdFx0XHRjcmVkaXQgPSBkcC1cdTAwM2VyaWNwX3Y0LmRwX2NyZWRpdDtcbiAxMDM6XHRcdFx0YWNrX3NlcSA9IGdldF91bmFsaWduZWQoXHUwMDI2ZHAtXHUwMDNlcmljcF92NC5kcF9hY2tfc2VxKTtcbiAxMDQ6XHRcdH1cbiAxMDU6XHRcbiAxMDY6XHRcdC8qIG1ha2Ugc3VyZSBpdCBpc24mIzM5O3QgZW1wdHkgZGF0YSAqL1xuIDEwNzpcdFx0aWYgKG1ham9yKSB7XG4gMTA4Olx0XHRcdHJkc19pYl9zZXRfcHJvdG9jb2woY29ubiwgUkRTX1BST1RPQ09MKG1ham9yLCBtaW5vcikpO1xuIDEwOTpcdFx0XHRyZHNfaWJfc2V0X2Zsb3dfY29udHJvbChjb25uLCBiZTMyX3RvX2NwdShjcmVkaXQpKTtcbiAxMTA6XHRcdH1cbiAxMTE6XHRcbiAxMTI6XHRcdGlmIChjb25uLVx1MDAzZWNfdmVyc2lvbiBcdTAwM2MgUkRTX1BST1RPQ09MX1ZFUlNJT04pIHtcbiAxMTM6XHRcdFx0aWYgKGNvbm4tXHUwMDNlY192ZXJzaW9uICE9IFJEU19QUk9UT0NPTF9DT01QQVRfVkVSU0lPTikge1xuIDExNDpcdFx0XHRcdHByX25vdGljZShcJiMzNDtSRFMvSUI6IENvbm5lY3Rpb24gXHUwMDNjJXBJNmMsJXBJNmNcdTAwM2UgdmVyc2lvbiAldS4ldSBubyBsb25nZXIgc3VwcG9ydGVkXFxuXCYjMzQ7LFxuIDExNTpcdFx0XHRcdFx0ICBcdTAwMjZjb25uLVx1MDAzZWNfbGFkZHIsIFx1MDAyNmNvbm4tXHUwMDNlY19mYWRkcixcbiAxMTY6XHRcdFx0XHRcdCAgUkRTX1BST1RPQ09MX01BSk9SKGNvbm4tXHUwMDNlY192ZXJzaW9uKSxcbiAxMTc6XHRcdFx0XHRcdCAgUkRTX1BST1RPQ09MX01JTk9SKGNvbm4tXHUwMDNlY192ZXJzaW9uKSk7XG4gMTE4Olx0XHRcdFx0cmRzX2Nvbm5fZHJvcChjb25uKTtcbiAxMTk6XHRcdFx0XHRyZXR1cm47XG4gMTIwOlx0XHRcdH1cbiAxMjE6XHRcdH1cbiAxMjI6XHRcbiAxMjM6XHRcdHByX25vdGljZShcJiMzNDtSRFMvSUI6ICVzIGNvbm4gY29ubmVjdGVkIFx1MDAzYyVwSTZjLCVwSTZjLCVkXHUwMDNlIHZlcnNpb24gJXUuJXUlc1xcblwmIzM0OyxcbiAxMjQ6XHRcdFx0ICBpYy1cdTAwM2VpX2FjdGl2ZV9zaWRlID8gXCYjMzQ7QWN0aXZlXCYjMzQ7IDogXCYjMzQ7UGFzc2l2ZVwmIzM0OyxcbiAxMjU6XHRcdFx0ICBcdTAwMjZjb25uLVx1MDAzZWNfbGFkZHIsIFx1MDAyNmNvbm4tXHUwMDNlY19mYWRkciwgY29ubi1cdTAwM2VjX3RvcyxcbiAxMjY6XHRcdFx0ICBSRFNfUFJPVE9DT0xfTUFKT1IoY29ubi1cdTAwM2VjX3ZlcnNpb24pLFxuIDEyNzpcdFx0XHQgIFJEU19QUk9UT0NPTF9NSU5PUihjb25uLVx1MDAzZWNfdmVyc2lvbiksXG4gMTI4Olx0XHRcdCAgaWMtXHUwMDNlaV9mbG93Y3RsID8gXCYjMzQ7LCBmbG93IGNvbnRyb2xcJiMzNDsgOiBcJiMzNDtcJiMzNDspO1xuIDEyOTpcdFxuIDEzMDpcdFx0LyogcmVjZWl2ZSBzbCBmcm9tIHRoZSBwZWVyICovXG4gMTMxOlx0XHRpYy1cdTAwM2VpX3NsID0gaWMtXHUwMDNlaV9jbV9pZC1cdTAwM2Vyb3V0ZS5wYXRoX3JlYy1cdTAwM2VzbDtcbiAxMzI6XHRcbiAxMzM6XHRcdGF0b21pY19zZXQoXHUwMDI2aWMtXHUwMDNlaV9jcV9xdWllc2NlLCAwKTtcbiAxMzQ6XHRcbiAxMzU6XHRcdC8qIEluaXQgcmluZ3MgYW5kIGZpbGwgcmVjdi4gdGhpcyBuZWVkcyB0byB3YWl0IHVudGlsIHByb3RvY29sXG4gMTM2Olx0XHQgKiBuZWdvdGlhdGlvbiBpcyBjb21wbGV0ZSwgc2luY2UgcmluZyBsYXlvdXQgaXMgZGlmZmVyZW50XG4gMTM3Olx0XHQgKiBmcm9tIDMuMSB0byA0LjEuXG4gMTM4Olx0XHQgKi9cbiAxMzk6XHRcdHJkc19pYl9zZW5kX2luaXRfcmluZyhpYyk7XG4gMTQwOlx0XHRyZHNfaWJfcmVjdl9pbml0X3JpbmcoaWMpO1xuIDE0MTpcdFx0LyogUG9zdCByZWNlaXZlIGJ1ZmZlcnMgLSBhcyBhIHNpZGUgZWZmZWN0LCB0aGlzIHdpbGwgdXBkYXRlXG4gMTQyOlx0XHQgKiB0aGUgcG9zdGVkIGNyZWRpdCBjb3VudC4gKi9cbiAxNDM6XHRcdHJkc19pYl9yZWN2X3JlZmlsbChjb25uLCAxLCBHRlBfS0VSTkVMKTtcbiAxNDQ6XHRcbiAxNDU6XHRcdC8qIHVwZGF0ZSBpYl9kZXZpY2Ugd2l0aCB0aGlzIGxvY2FsIGlwYWRkciAqL1xuIDE0NjpcdFx0ZXJyID0gcmRzX2liX3VwZGF0ZV9pcGFkZHIoaWMtXHUwMDNlcmRzX2liZGV2LCBcdTAwMjZjb25uLVx1MDAzZWNfbGFkZHIpO1xuIDE0NzpcdFx0aWYgKGVycilcbiAxNDg6XHRcdFx0cHJpbnRrKEtFUk5fRVJSIFwmIzM0O3Jkc19pYl91cGRhdGVfaXBhZGRyIGZhaWxlZCAoJWQpXFxuXCYjMzQ7LFxuIDE0OTpcdFx0XHRcdGVycik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NjkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucywgYXMgaWYgSSYjMzk7bSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIFJEUyBDb25uZWN0aW9uIERlc3RydWN0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIGJldHdlZW4gYHJkc19jb25uX2Rlc3Ryb3lgIGFuZCBgcmRzX2Nvbm5fZHJvcGAuIEl0JiMzOTtzIHRpbWUgdG8gZ2V0IGEgYml0IGdyYW51bGFyIGhlcmUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZWFjaCBvbmUgYWN0dWFsbHkgKmRvZXMqIGF0IHRoZSBjb25uZWN0aW9uIGxldmVsLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBzb21lIHBhdHRlcm4gbWF0Y2hpbmcgdG8gcHVsbCB1cCBhbnkgaW5zdGFuY2VzIG9mIHRoZXNlIGZ1bmN0aW9ucyBpbiB0aGUgY29kZSBiYXNlLCB0byBnZXQgYSBoYW5kbGUgb24gdGhlaXIgdXNhZ2UgYW5kIGNvbnRleHQuIExldCYjMzk7cyBmaXJlIHVwIGBncmVwYCBhbmQgc2VlIHdoYXQgY29tZXMgdXAuIFRoaXMgc2hvdWxkIHRlbGwgbWUgcXVpY2tseSB3aGVyZSB0aGV5JiMzOTtyZSB1c2VkIGFuZCBob3cuIFRpbWUgdG8gZ2V0IHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE0OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgcmRzX2Nvbm5fKGRlc3Ryb3l8ZHJvcCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcmRzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yZHMvY29ubmVjdGlvbi5jPTQ2OD1zdGF0aWMgdm9pZCByZHNfY29ubl9wYXRoX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxuLS1cbm5ldC9yZHMvY29ubmVjdGlvbi5jLTUxMi0gKi9cbm5ldC9yZHMvY29ubmVjdGlvbi5jOjUxMzp2b2lkIHJkc19jb25uX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxubmV0L3Jkcy9jb25uZWN0aW9uLmMtNTE0LXtcbi0tXG5uZXQvcmRzL2Nvbm5lY3Rpb24uYz05NDg9RVhQT1JUX1NZTUJPTF9HUEwocmRzX2Nvbm5fcGF0aF9kcm9wKTtcbm5ldC9yZHMvY29ubmVjdGlvbi5jLTk0OS1cbm5ldC9yZHMvY29ubmVjdGlvbi5jOjk1MDp2b2lkIHJkc19jb25uX2Ryb3Aoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxubmV0L3Jkcy9jb25uZWN0aW9uLmMtOTUxLXtcbi0tXG5uZXQvcmRzL3Jkcy5oPTgwOT12b2lkIHJkc19jb25uX3NodXRkb3duKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcGF0aCk7XG5uZXQvcmRzL3Jkcy5oOjgxMDp2b2lkIHJkc19jb25uX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTtcbm5ldC9yZHMvcmRzLmg6ODExOnZvaWQgcmRzX2Nvbm5fZHJvcChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pO1xubmV0L3Jkcy9yZHMuaC04MTItdm9pZCByZHNfY29ubl9wYXRoX2Ryb3Aoc3RydWN0IHJkc19jb25uX3BhdGggKmNwYXRoLCBib29sIGRlc3Ryb3kpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDk1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIE5ldHdvcmsgQ29ubmVjdGlvbiBEZW1pc2UqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gdGhlIGBuZXQvcmRzL2Nvbm5lY3Rpb24uY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIHNlY3Rpb25zIGFyb3VuZCBgcmRzX2Nvbm5fZGVzdHJveWAgYW5kIGByZHNfY29ubl9kcm9wYC4gVGhlc2UgYXJlIGNyaXRpY2FsIGZ1bmN0aW9ucywgdGhlIGhlYXJ0IG9mIGhvdyBSRFMgY29ubmVjdGlvbnMgYXJlIHRlcm1pbmF0ZWQsIGFuZCBob3cgd2UgaGFuZGxlIHRob3NlIHRlcm1pbmF0aW9uIGV2ZW50cy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IG1lY2hhbmljcyBvZiB3aGF0IGhhcHBlbnMgd2hlbiBhIGNvbm5lY3Rpb24gZ29lcyBkb3duIGFuZCBob3cgd2UgZW5zdXJlIGEgY2xlYW4sIHJlbGlhYmxlIHRlYXJkb3duLiBJdCYjMzk7cyBhYm91dCBlbnN1cmluZyBtaW5pbWFsIHJlc291cmNlIGxlYWthZ2UgYW5kIG1haW50YWluaW5nIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIG92ZXJhbGwgc3lzdGVtLiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgdGhhdCBtaWdodCBhcmlzZSBkdXJpbmcgdGhlc2UgY3JpdGljYWwgb3BlcmF0aW9ucywgYW5kIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGVkLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGluZ3MgYXJlIHJlYWxseSBkb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9yZHMvY29ubmVjdGlvbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MTA6XHQgKiB0aGUgY29ubiBoYXMgYmVlbiBzaHV0ZG93biB0aGF0IG5vIG9uZSBlbHNlIGlzIHJlZmVyZW5jaW5nIHRoZSBjb25uZWN0aW9uLlxuIDUxMTpcdCAqIFdlIGNhbiBvbmx5IGVuc3VyZSB0aGlzIGluIHRoZSBybW1vZCBwYXRoIGluIHRoZSBjdXJyZW50IGNvZGUuXG4gNTEyOlx0ICovXG4gNTEzOlx0dm9pZCByZHNfY29ubl9kZXN0cm95KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubilcbiA1MTQ6XHR7XG4gNTE1Olx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIDUxNjpcdFx0aW50IGk7XG4gNTE3Olx0XHRzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3A7XG4gNTE4Olx0XHRpbnQgbnBhdGhzID0gKGNvbm4tXHUwMDNlY190cmFucy1cdTAwM2V0X21wX2NhcGFibGUgPyBSRFNfTVBBVEhfV09SS0VSUyA6IDEpO1xuIDUxOTpcdFxuIDUyMDpcdFx0cmRzZGVidWcoXCYjMzQ7ZnJlZWluZyBjb25uICVwIGZvciAlcEk0IC1cdTAwM2UgXCYjMzQ7XG4gNTIxOlx0XHRcdCBcJiMzNDslcEk0XFxuXCYjMzQ7LCBjb25uLCBcdTAwMjZjb25uLVx1MDAzZWNfbGFkZHIsXG4gNTIyOlx0XHRcdCBcdTAwMjZjb25uLVx1MDAzZWNfZmFkZHIpO1xuIDUyMzpcdFxuIDUyNDpcdFx0LyogRW5zdXJlIGNvbm4gd2lsbCBub3QgYmUgc2NoZWR1bGVkIGZvciByZWNvbm5lY3QgKi9cbiA1MjU6XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2cmRzX2Nvbm5fbG9jayk7XG4gNTI2Olx0XHRobGlzdF9kZWxfaW5pdF9yY3UoXHUwMDI2Y29ubi1cdTAwM2VjX2hhc2hfbm9kZSk7XG4gNTI3Olx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2cmRzX2Nvbm5fbG9jayk7XG4gNTI4Olx0XHRzeW5jaHJvbml6ZV9yY3UoKTtcbiA1Mjk6XHRcbiA1MzA6XHRcdC8qIHNodXQgdGhlIGNvbm5lY3Rpb24gZG93biAqL1xuIDUzMTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnBhdGhzOyBpJiM0MzsmIzQzOykge1xuIDUzMjpcdFx0XHRjcCA9IFx1MDAyNmNvbm4tXHUwMDNlY19wYXRoW2ldO1xuIDUzMzpcdFx0XHRyZHNfY29ubl9wYXRoX2Rlc3Ryb3koY3ApO1xuIDUzNDpcdFx0XHRCVUdfT04oIWxpc3RfZW1wdHkoXHUwMDI2Y3AtXHUwMDNlY3BfcmV0cmFucykpO1xuIDUzNTpcdFx0fVxuIDUzNjpcdFxuIDUzNzpcdFx0LypcbiA1Mzg6XHRcdCAqIFRoZSBjb25nZXN0aW9uIG1hcHMgYXJlbiYjMzk7dCBmcmVlZCB1cCBoZXJlLiAgVGhleSYjMzk7cmVcbiA1Mzk6XHRcdCAqIGZyZWVkIGJ5IHJkc19jb25nX2V4aXQoKSBhZnRlciBhbGwgdGhlIGNvbm5lY3Rpb25zXG4gNTQwOlx0XHQgKiBoYXZlIGJlZW4gZnJlZWQuXG4gNTQxOlx0XHQgKi9cbiA1NDI6XHRcdHJkc19jb25nX3JlbW92ZV9jb25uKGNvbm4pO1xuIDU0MzpcdFxuIDU0NDpcdFx0a2ZyZWUoY29ubi1cdTAwM2VjX3BhdGgpO1xuIDU0NTpcdFx0a21lbV9jYWNoZV9mcmVlKHJkc19jb25uX3NsYWIsIGNvbm4pO1xuIDU0NjpcdFxuIDU0NzpcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cmRzX2Nvbm5fbG9jaywgZmxhZ3MpO1xuIDU0ODpcdFx0cmRzX2Nvbm5fY291bnQtLTtcbiA1NDk6XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cmRzX2Nvbm5fbG9jaywgZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTk4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQ2hlY2tpbmcgQ29kZSBmb3IgYG5ldC9yZHMvY29ubmVjdGlvbi5jYCBhbmQgTGluZSA5NTAqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgbGV0JiMzOTtzIGp1c3QgbWFrZSBhYnNvbHV0ZWx5IGNlcnRhaW4gd2UmIzM5O3JlIG5vdCBtaXNzaW5nIGFueXRoaW5nIGluIHRoZSBSRFMgY29ubmVjdGlvbiBoYW5kbGluZy4gV2UgbmVlZCB0byBnbyBiYWNrIGFuZCBjcm9zcy1yZWZlcmVuY2UgYSBzcGVjaWZpYyBsaW5lLCBsaW5lIDk1MCwgd2l0aGluIHRoZSBgbmV0L3Jkcy9jb25uZWN0aW9uLmNgIGZpbGUuIFRoaXMgcGFydGljdWxhciBzZWN0aW9uIGhhcyBwcm92ZW4gdG8gYmUgYW4gYXJlYSBvZiBpbnRlcmVzdCBpbiB0aGUgcGFzdC4gSXQmIzM5O3MgdGltZSB0byB0aG9yb3VnaGx5IHJldmlldyBpdHMgaW1wbGVtZW50YXRpb24gYW5kIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgcG90ZW50aWFsIGlzc3VlcyBvciBvdmVyc2lnaHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9yZHMvY29ubmVjdGlvbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NDU6XHRcdHF1ZXVlX3dvcmsoY3AtXHUwMDNlY3Bfd3EsIFx1MDAyNmNwLVx1MDAzZWNwX2Rvd25fdyk7XG4gOTQ2Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiA5NDc6XHR9XG4gOTQ4Olx0RVhQT1JUX1NZTUJPTF9HUEwocmRzX2Nvbm5fcGF0aF9kcm9wKTtcbiA5NDk6XHRcbiA5NTA6XHR2b2lkIHJkc19jb25uX2Ryb3Aoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxuIDk1MTpcdHtcbiA5NTI6XHRcdFdBUk5fT04oY29ubi1cdTAwM2VjX3RyYW5zLVx1MDAzZXRfbXBfY2FwYWJsZSk7XG4gOTUzOlx0XHRyZHNfY29ubl9wYXRoX2Ryb3AoXHUwMDI2Y29ubi1cdTAwM2VjX3BhdGhbMF0sIGZhbHNlKTtcbiA5NTQ6XHR9XG4gOTU1Olx0RVhQT1JUX1NZTUJPTF9HUEwocmRzX2Nvbm5fZHJvcCk7XG4gOTU2Olx0XG4gOTU3Olx0LypcbiA5NTg6XHQgKiBJZiB0aGUgY29ubmVjdGlvbiBpcyBkb3duLCB0cmlnZ2VyIGEgY29ubmVjdC4gV2UgbWF5IGhhdmUgc2NoZWR1bGVkIGFcbiA5NTk6XHQgKiBkZWxheWVkIHJlY29ubmVjdCBob3dldmVyIC0gaW4gdGhpcyBjYXNlIHdlIHNob3VsZCBub3QgaW50ZXJmZXJlLlxuIDk2MDpcdCAqL1xuIDk2MTpcdHZvaWQgcmRzX2Nvbm5fcGF0aF9jb25uZWN0X2lmX2Rvd24oc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxuIDk2MjpcdHtcbiA5NjM6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiA5NjQ6XHRcdGlmIChyZHNfZGVzdHJveV9wZW5kaW5nKGNwLVx1MDAzZWNwX2Nvbm4pKSB7XG4gOTY1Olx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDk2NjpcdFx0XHRyZXR1cm47XG4gOTY3Olx0XHR9XG4gOTY4Olx0XHRpZiAocmRzX2Nvbm5fcGF0aF9zdGF0ZShjcCkgPT0gUkRTX0NPTk5fRE9XTiBcdTAwMjZcdTAwMjZcbiA5Njk6XHRcdCAgICAhdGVzdF9hbmRfc2V0X2JpdChSRFNfUkVDT05ORUNUX1BFTkRJTkcsIFx1MDAyNmNwLVx1MDAzZWNwX2ZsYWdzKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTQ6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYwNwoJCQkJCQkJb3V0cHV0OiAyMDIKCQkJCQkJCXRob3VnaHRzOiAzMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFJEUyBDb25uZWN0aW9uIFRlYXJkb3duIEZpeCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1llcywgdGhpcyBpcyBkZWZpbml0ZWx5IGEgcG90ZW50aWFsIHByb2JsZW0gYXJlYS4mIzM0OyBgcmRzX2Nvbm5fZGVzdHJveShjb25uKWAgaXMgYSAqZGlyZWN0KiBmcmVlIG9mIHRoZSBjb25uZWN0aW9uIGFuZCBpdHMgYXNzb2NpYXRlZCBwYXRocywgd2hpY2ggaXMgYWx3YXlzIHJpc2t5IGluIGEga2VybmVsIGNvbnRleHQsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggaGFuZGxlcnMgb3Igd29ya3F1ZXVlcyB0aGF0IG1pZ2h0IHN0aWxsIGhhdmUgYWN0aXZlIHJlZmVyZW5jZXMgb3IgYmUgaW4gdGhlIHByb2Nlc3Mgb2YgZXhlY3V0aW5nLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUgKFVBRikgb3IgZXZlbiBkb3VibGUtZnJlZSBzY2VuYXJpbyBpZiBub3QgaGFuZGxlZCBjYXJlZnVsbHkuIGByZHNfY29ubl9kcm9wKGNvbm4pYCBpcyB0aGUgbW9yZSBhcHByb3ByaWF0ZSBjaG9pY2UgYXMgaXQgZGVmZXJzIHRoZSB0ZWFyZG93biwgcXVldWVpbmcgdGhlIHdvcmsgdG8gYWxsb3cgYSBncmFjZWZ1bCBkaXNjb25uZWN0aW9uLgoKTm93LCBsZXQmIzM5O3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0LgoKKiAgICoqVW5pbml0aWFsaXplZCBtZW1vcnk/KiogTm8sIHRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBrZXJuZWwgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlcnNwYWNlLiBUaGVyZSYjMzk7cyBhbHNvIG5vIHNpZ24gb2YgaXQgcmVhZGluZywgY29weWluZywgb3IgcGFzc2luZyBhcm91bmQgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoqICAgKipLTVNBTiBDb25jZXJucz8qKiBOb3BlLCBubyBLTVNBTi1zcGVjaWZpYyBidWdzIGxpa2UgdW5pbml0aWFsaXplZCBtZW1vcnksIHBhZGRpbmcgaXNzdWVzLCBvciBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhpcyBpcyBncmVhdCwgYXMgd2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVseSBvbiBLQVNBTiB0byBkZXRlY3QgVUFGL21lbW9yeSBtYW5hZ2VtZW50IGlzc3Vlcy4KKiAgICoqVGhlIGJ1ZyBpcyBpbmRlZWQgYSBsaWZldGltZSAvIHRlYXJkb3duIC8gVUFGIGlzc3VlLioqIFdlJiMzOTtyZSBmaXhpbmcgYSBzaXR1YXRpb24gd2hlcmUgYW4gZXZlbnQgaGFuZGxlciBwcmVtYXR1cmVseSBkZXN0cm95ZWQgdGhlIGNvbm5lY3Rpb24uIFRoaXMgZGlyZWN0bHkgbGVhZHMgdG8gdGhlIGRyZWFkZWQgcHJlbWF0dXJlIGZyZWUvVUFGLiBJdCYjMzk7cyBhIHRleHRib29rIGV4YW1wbGUgb2YgdGhlIGtpbmQgb2YgYnVnIEtBU0FOIGlzIGJ1aWx0IHRvIGNhdGNoLgoKTGV0JiMzOTtzIGRvdWJsZSBjaGVjayBhbGwgYXNwZWN0cyBvZiB0aGlzLgoKKiAgICoqSW4gYG5ldC9yZHMvaWJfY20uY2AqKiBUaGUgY2hhbmdlIHNwZWNpZmljYWxseSByZXBsYWNlcyBgcmRzX2Nvbm5fZGVzdHJveShjb25uKWAgd2l0aCBgcmRzX2Nvbm5fZHJvcChjb25uKWAgd2hlbiB0aGUgUkRTIHByb3RvY29sIHZlcnNpb24gaXMgdW5zdXBwb3J0ZWQuCiogICAqKlByZXZlbnRpbmcgYSBkaXJlY3QgZGVzdHJveS9mcmVlIGluIHRoZSBjb25uZWN0IGNvbXBsZXRlIGhhbmRsZXIuKiogVGhpcyBhdm9pZHMgdGhlIHBvdGVudGlhbCBmb3IgVUFGIGFuZCBtZW1vcnkgY29ycnVwdGlvbiwgZXhhY3RseSBhcyBzdXNwZWN0ZWQuCgpTaW5jZSBLTVNBTiBpc24mIzM5O3QgbmVlZGVkLCBsZXQmIzM5O3MgcHJlcGFyZSB0aGUgdG9vbCBjYWxsIGFuZCB3cmFwIHRoaXMgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE0OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGEgZGlyZWN0IGNhbGwgdG8gYHJkc19jb25uX2Rlc3Ryb3koKWAgd2l0aCBgcmRzX2Nvbm5fZHJvcCgpYCBpbiBgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGUoKWAgd2hlbiBhbiB1bnN1cHBvcnRlZCBwcm90b2NvbCB2ZXJzaW9uIGlzIGVuY291bnRlcmVkLiBgcmRzX2Nvbm5fZGVzdHJveSgpYCBpbW1lZGlhdGVseSBmcmVlcyB0aGUgY29ubmVjdGlvbiBvYmplY3QgKGBjb25uYCBhbmQgYGNvbm4tXHUwMDNlY19wYXRoYCksIHdoaWNoIGNhdXNlcyB1c2UtYWZ0ZXItZnJlZSBhbmQgcHJlbWF0dXJlIGNsZWFudXAgaXNzdWVzIGluIGNvbm5lY3Rpb24gZXZlbnQgaGFuZGxpbmcgcGF0aHMuIGByZHNfY29ubl9kcm9wKClgIGNsZWFubHkgdGVhcnMgZG93biB0aGUgY29ubmVjdGlvbiB2aWEgYXN5bmNocm9ub3VzIHdvcmsuXG5cblRoaXMgY2hhbmdlIGlzIHB1cmVseSBjb25jZXJuZWQgd2l0aCBvYmplY3QgbGlmZXRpbWVzLCByZWZlcmVuY2UgbWFuYWdlbWVudCwgYW5kIHRlYXJkb3duIHN5bmNocm9uaXphdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gbG9naWMsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcvYnVmZmVycyB0byB1c2Vyc3BhY2UuIE1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGEgZGlyZWN0IGNhbGwgdG8gYHJkc19jb25uX2Rlc3Ryb3koKWAgd2l0aCBgcmRzX2Nvbm5fZHJvcCgpYCBpbiBgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGUoKWAgd2hlbiBhbiB1bnN1cHBvcnRlZCBwcm90b2NvbCB2ZXJzaW9uIGlzIGVuY291bnRlcmVkLiBgcmRzX2Nvbm5fZGVzdHJveSgpYCBpbW1lZGlhdGVseSBmcmVlcyB0aGUgY29ubmVjdGlvbiBvYmplY3QgKGBjb25uYCBhbmQgYGNvbm4tXHUwMDNlY19wYXRoYCksIHdoaWNoIGNhdXNlcyB1c2UtYWZ0ZXItZnJlZSBhbmQgcHJlbWF0dXJlIGNsZWFudXAgaXNzdWVzIGluIGNvbm5lY3Rpb24gZXZlbnQgaGFuZGxpbmcgcGF0aHMuIGByZHNfY29ubl9kcm9wKClgIGNsZWFubHkgdGVhcnMgZG93biB0aGUgY29ubmVjdGlvbiB2aWEgYXN5bmNocm9ub3VzIHdvcmsuXG5cblRoaXMgY2hhbmdlIGlzIHB1cmVseSBjb25jZXJuZWQgd2l0aCBvYmplY3QgbGlmZXRpbWVzLCByZWZlcmVuY2UgbWFuYWdlbWVudCwgYW5kIHRlYXJkb3duIHN5bmNocm9uaXphdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gbG9naWMsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcvYnVmZmVycyB0byB1c2Vyc3BhY2UuIE1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6NTM6NDEuODk1MDI1NzA1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjIyMjAwMTQ2NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUkRTXCIsXG4gICAgXCJSRFNfUkRNQVwiLFxuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiSU5GSU5JQkFORF9BRERSX1RSQU5TXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGVcIixcbiAgICBcInJkc19yZG1hX2NtX2V2ZW50X2hhbmRsZXJfY21uXCIsXG4gICAgXCJyZHNfaWJfY21faGFuZGxlX2Nvbm5lY3RcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGEgZGlyZWN0IGNhbGwgdG8gYHJkc19jb25uX2Rlc3Ryb3koKWAgd2l0aCBgcmRzX2Nvbm5fZHJvcCgpYCBpbiBgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGUoKWAgd2hlbiBhbiB1bnN1cHBvcnRlZCBwcm90b2NvbCB2ZXJzaW9uIGlzIGVuY291bnRlcmVkLiBgcmRzX2Nvbm5fZGVzdHJveSgpYCBpbW1lZGlhdGVseSBmcmVlcyB0aGUgY29ubmVjdGlvbiBvYmplY3QgKGBjb25uYCBhbmQgYGNvbm4tXFx1MDAzZWNfcGF0aGApLCB3aGljaCBjYXVzZXMgdXNlLWFmdGVyLWZyZWUgYW5kIHByZW1hdHVyZSBjbGVhbnVwIGlzc3VlcyBpbiBjb25uZWN0aW9uIGV2ZW50IGhhbmRsaW5nIHBhdGhzLiBgcmRzX2Nvbm5fZHJvcCgpYCBjbGVhbmx5IHRlYXJzIGRvd24gdGhlIGNvbm5lY3Rpb24gdmlhIGFzeW5jaHJvbm91cyB3b3JrLlxcblxcblRoaXMgY2hhbmdlIGlzIHB1cmVseSBjb25jZXJuZWQgd2l0aCBvYmplY3QgbGlmZXRpbWVzLCByZWZlcmVuY2UgbWFuYWdlbWVudCwgYW5kIHRlYXJkb3duIHN5bmNocm9uaXphdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gbG9naWMsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcvYnVmZmVycyB0byB1c2Vyc3BhY2UuIE1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBSRFMgb3ZlciBJbmZpbmlCYW5kIGNvbm5lY3Rpb24gbGlmZWN5Y2xlIGhhbmRsaW5nIGJ5IGNoYW5naW5nIGByZHNfY29ubl9kZXN0cm95YCB0byBgcmRzX2Nvbm5fZHJvcGAgd2hlbiBlbmNvdW50ZXJpbmcgdW5zdXBwb3J0ZWQgcHJvdG9jb2wgdmVyc2lvbnMgaW4gYHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlYC4gVGhpcyBhbHRlcnMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgZXJyb3IgaGFuZGxpbmcgYW5kIGNvbm5lY3Rpb24gdGVhcmRvd24gZmxvdy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6NTM6NDEuODk1MDMxNzY1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzgxMjEzMjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjA1OTM3MWVmNzZkZTExNDAyMmI1NDNkMGYyNjE1YzMxNTFkMTQyMVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCA4IDE0OjUzOjM5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9yZHMvaWJfY20uYyBiL25ldC9yZHMvaWJfY20uY1xcbmluZGV4IGQ0NjE0Njg4N2JhNDAuLjI5MDlkYTgzNjNmMzkgMTAwNjQ0XFxuLS0tIGEvbmV0L3Jkcy9pYl9jbS5jXFxuKysrIGIvbmV0L3Jkcy9pYl9jbS5jXFxuQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHJkbWFfY21fZXZlblxcbiBcXHRcXHRcXHRcXHQgIFxcdTAwMjZjb25uLVxcdTAwM2VjX2xhZGRyLCBcXHUwMDI2Y29ubi1cXHUwMDNlY19mYWRkcixcXG4gXFx0XFx0XFx0XFx0ICBSRFNfUFJPVE9DT0xfTUFKT1IoY29ubi1cXHUwMDNlY192ZXJzaW9uKSxcXG4gXFx0XFx0XFx0XFx0ICBSRFNfUFJPVE9DT0xfTUlOT1IoY29ubi1cXHUwMDNlY192ZXJzaW9uKSk7XFxuLVxcdFxcdFxcdHJkc19jb25uX2Rlc3Ryb3koY29ubik7XFxuK1xcdFxcdFxcdHJkc19jb25uX2Ryb3AoY29ubik7XFxuIFxcdFxcdFxcdHJldHVybjtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE0OjUzOjQzLjY3NzA0NzMwN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzYwNzc1OTYyOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUkRTXCIsXG4gICAgXCJSRFNfUkRNQVwiLFxuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiSU5GSU5JQkFORF9BRERSX1RSQU5TXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGVcIixcbiAgICBcInJkc19yZG1hX2NtX2V2ZW50X2hhbmRsZXJfY21uXCIsXG4gICAgXCJyZHNfaWJfY21faGFuZGxlX2Nvbm5lY3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBSRFMgb3ZlciBJbmZpbmlCYW5kIGNvbm5lY3Rpb24gbGlmZWN5Y2xlIGhhbmRsaW5nIGJ5IGNoYW5naW5nIGByZHNfY29ubl9kZXN0cm95YCB0byBgcmRzX2Nvbm5fZHJvcGAgd2hlbiBlbmNvdW50ZXJpbmcgdW5zdXBwb3J0ZWQgcHJvdG9jb2wgdmVyc2lvbnMgaW4gYHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlYC4gVGhpcyBhbHRlcnMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgZXJyb3IgaGFuZGxpbmcgYW5kIGNvbm5lY3Rpb24gdGVhcmRvd24gZmxvdy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmMDU5MzcxZWY3NmRlMTE0MDIyYjU0M2QwZjI2MTVjMzE1MWQxNDIxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAxNDo1MzozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9yZHMvaWJfY20uYyBiL25ldC9yZHMvaWJfY20uY1xuaW5kZXggZDQ2MTQ2ODg3YmE0MC4uMjkwOWRhODM2M2YzOSAxMDA2NDRcbi0tLSBhL25ldC9yZHMvaWJfY20uY1xuKysrIGIvbmV0L3Jkcy9pYl9jbS5jXG5AQCAtMTE1LDcgKzExNSw3IEBAIHZvaWQgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBzdHJ1Y3QgcmRtYV9jbV9ldmVuXG4gXHRcdFx0XHQgIFx1MDAyNmNvbm4tXHUwMDNlY19sYWRkciwgXHUwMDI2Y29ubi1cdTAwM2VjX2ZhZGRyLFxuIFx0XHRcdFx0ICBSRFNfUFJPVE9DT0xfTUFKT1IoY29ubi1cdTAwM2VjX3ZlcnNpb24pLFxuIFx0XHRcdFx0ICBSRFNfUFJPVE9DT0xfTUlOT1IoY29ubi1cdTAwM2VjX3ZlcnNpb24pKTtcbi1cdFx0XHRyZHNfY29ubl9kZXN0cm95KGNvbm4pO1xuK1x0XHRcdHJkc19jb25uX2Ryb3AoY29ubik7XG4gXHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNDo1Mzo0My42NzcwNDkyMTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MzY1NDMxNzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgSW52ZXN0aWdhdGlvbiBpbnRvIHRoZSBSRFMvSW5maW5pQmFuZCBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIHJlYWxseSAqdW5kZXJzdGFuZCogaXQuIFRoZSBrZXkgY2hhbmdlIGlzIGluIGBuZXQvcmRzL2liX2NtLmNgLCBzcGVjaWZpY2FsbHkgaW4gYHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlYC4gVGhleSd2ZSBzd2FwcGVkIG91dCBgcmRzX2Nvbm5fZGVzdHJveShjb25uKTtgIGZvciBgcmRzX2Nvbm5fZHJvcChjb25uKTtgLiBIbW0sIHN1YnRsZSBidXQgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQuIEknbSBndWVzc2luZyB0aGlzIG1pZ2h0IGhhdmUgaW1wbGljYXRpb25zIGZvciBjb25uZWN0aW9uIHRlYXJkb3duLCByZXNvdXJjZSBjbGVhbnVwLCBvciBtYXliZSBldmVuIGVycm9yIGhhbmRsaW5nIGluIHRoZSBjb250ZXh0IG9mIEluZmluaUJhbmQuIFRoaXMgbWVhbnMgYSBjbG9zZXIgbG9vayBhdCB0aGUgKndoeSogb2YgdGhlIGNoYW5nZSBpcyBuZWVkZWQuXG5cblRpbWUgdG8gZGl2ZSBkZWVwZXIgaW50byBgbmV0L3Jkcy9pYl9jbS5jYC4gSSdsbCB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGdldCB0aGUgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IFJEUyBpbnRlcmFjdHMgd2l0aCBJbmZpbmlCYW5kIGFuZCBSRE1BIGluIHRoaXMgc3BlY2lmaWMgbW9kdWxlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLCBjb25maWd1cmF0aW9uIG9wdGlvbnMgKGFyZSB0aGVyZSBhbnkgdGhhdCBhZmZlY3QgdGhpcyBiZWhhdmlvcj8pLCBhbmQgZXJyb3IgcGF0aHMuIFRoaXMgbWVhbnMgdW5kZXJzdGFuZGluZyBob3cgY29ubmVjdGlvbnMgYXJlIGVzdGFibGlzaGVkLCBtYW5hZ2VkLCBhbmQgcmVsZWFzZWQgd2l0aGluIHRoZSBSRFMvSUIgZnJhbWV3b3JrLlxuXG5BIG1vcmUgbG9uZy10ZXJtIGNvbmNlcm4gSSdtIHRoaW5raW5nIGFib3V0IGlzIGZ1enppbmcgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIENhbiBJIHJlYXNvbmFibHkgZXhwZWN0IHRvIGZ1enogdGhpcyBzdWNjZXNzZnVsbHkgaW4gbXkgc3RhbmRhcmQgdmlydHVhbGl6ZWQgUUVNVSBlbnZpcm9ubWVudHMsIHVzaW5nIHNvbWV0aGluZyBsaWtlIHJkbWFfcnhlLCBzb2Z0LWlXQVJQLCBvciBTSVc/IEl0J3MgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhlIGZlYXNpYmlsaXR5IG9mIHRlc3RpbmcgdGhpcyBjaGFuZ2UgZWZmZWN0aXZlbHkuIFRvIGRvIHRoaXMsIEkgbmVlZCB0byBjaGVjayB0aGUgUkRTIGNvbmZpZ3VyYXRpb24gYW5kIFJETUEgc3VwcG9ydCB3aXRoaW4gc3l6a2FsbGVyIGFuZCB0aGUgbWFpbmxpbmUga2VybmVsLiBUaGUgbGV2ZWwgb2Ygc3VwcG9ydCBpbiB0aGVzZSBhcmVhcyB3aWxsIGRpY3RhdGUgaG93IGRpZmZpY3VsdCB0aGlzIGNoYW5nZSBpcyB0byB2YWxpZGF0ZSB0aG9yb3VnaGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODc3LCJPdXRwdXRUb2tlbnMiOjk3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6NTM6NDkuMDQyNDgzNTQ4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwMzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9yZHMvaWJfY20uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDA6XFx0XFx0XFx0bWFqb3IgPSBkcC1cXHUwMDNlcmljcF92NC5kcF9wcm90b2NvbF9tYWpvcjtcXG4gMTAxOlxcdFxcdFxcdG1pbm9yID0gZHAtXFx1MDAzZXJpY3BfdjQuZHBfcHJvdG9jb2xfbWlub3I7XFxuIDEwMjpcXHRcXHRcXHRjcmVkaXQgPSBkcC1cXHUwMDNlcmljcF92NC5kcF9jcmVkaXQ7XFxuIDEwMzpcXHRcXHRcXHRhY2tfc2VxID0gZ2V0X3VuYWxpZ25lZChcXHUwMDI2ZHAtXFx1MDAzZXJpY3BfdjQuZHBfYWNrX3NlcSk7XFxuIDEwNDpcXHRcXHR9XFxuIDEwNTpcXHRcXG4gMTA2OlxcdFxcdC8qIG1ha2Ugc3VyZSBpdCBpc24ndCBlbXB0eSBkYXRhICovXFxuIDEwNzpcXHRcXHRpZiAobWFqb3IpIHtcXG4gMTA4OlxcdFxcdFxcdHJkc19pYl9zZXRfcHJvdG9jb2woY29ubiwgUkRTX1BST1RPQ09MKG1ham9yLCBtaW5vcikpO1xcbiAxMDk6XFx0XFx0XFx0cmRzX2liX3NldF9mbG93X2NvbnRyb2woY29ubiwgYmUzMl90b19jcHUoY3JlZGl0KSk7XFxuIDExMDpcXHRcXHR9XFxuIDExMTpcXHRcXG4gMTEyOlxcdFxcdGlmIChjb25uLVxcdTAwM2VjX3ZlcnNpb24gXFx1MDAzYyBSRFNfUFJPVE9DT0xfVkVSU0lPTikge1xcbiAxMTM6XFx0XFx0XFx0aWYgKGNvbm4tXFx1MDAzZWNfdmVyc2lvbiAhPSBSRFNfUFJPVE9DT0xfQ09NUEFUX1ZFUlNJT04pIHtcXG4gMTE0OlxcdFxcdFxcdFxcdHByX25vdGljZShcXFwiUkRTL0lCOiBDb25uZWN0aW9uIFxcdTAwM2MlcEk2YywlcEk2Y1xcdTAwM2UgdmVyc2lvbiAldS4ldSBubyBsb25nZXIgc3VwcG9ydGVkXFxcXG5cXFwiLFxcbiAxMTU6XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2Y29ubi1cXHUwMDNlY19sYWRkciwgXFx1MDAyNmNvbm4tXFx1MDAzZWNfZmFkZHIsXFxuIDExNjpcXHRcXHRcXHRcXHRcXHQgIFJEU19QUk9UT0NPTF9NQUpPUihjb25uLVxcdTAwM2VjX3ZlcnNpb24pLFxcbiAxMTc6XFx0XFx0XFx0XFx0XFx0ICBSRFNfUFJPVE9DT0xfTUlOT1IoY29ubi1cXHUwMDNlY192ZXJzaW9uKSk7XFxuIDExODpcXHRcXHRcXHRcXHRyZHNfY29ubl9kcm9wKGNvbm4pO1xcbiAxMTk6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiAxMjA6XFx0XFx0XFx0fVxcbiAxMjE6XFx0XFx0fVxcbiAxMjI6XFx0XFxuIDEyMzpcXHRcXHRwcl9ub3RpY2UoXFxcIlJEUy9JQjogJXMgY29ubiBjb25uZWN0ZWQgXFx1MDAzYyVwSTZjLCVwSTZjLCVkXFx1MDAzZSB2ZXJzaW9uICV1LiV1JXNcXFxcblxcXCIsXFxuIDEyNDpcXHRcXHRcXHQgIGljLVxcdTAwM2VpX2FjdGl2ZV9zaWRlID8gXFxcIkFjdGl2ZVxcXCIgOiBcXFwiUGFzc2l2ZVxcXCIsXFxuIDEyNTpcXHRcXHRcXHQgIFxcdTAwMjZjb25uLVxcdTAwM2VjX2xhZGRyLCBcXHUwMDI2Y29ubi1cXHUwMDNlY19mYWRkciwgY29ubi1cXHUwMDNlY190b3MsXFxuIDEyNjpcXHRcXHRcXHQgIFJEU19QUk9UT0NPTF9NQUpPUihjb25uLVxcdTAwM2VjX3ZlcnNpb24pLFxcbiAxMjc6XFx0XFx0XFx0ICBSRFNfUFJPVE9DT0xfTUlOT1IoY29ubi1cXHUwMDNlY192ZXJzaW9uKSxcXG4gMTI4OlxcdFxcdFxcdCAgaWMtXFx1MDAzZWlfZmxvd2N0bCA/IFxcXCIsIGZsb3cgY29udHJvbFxcXCIgOiBcXFwiXFxcIik7XFxuIDEyOTpcXHRcXG4gMTMwOlxcdFxcdC8qIHJlY2VpdmUgc2wgZnJvbSB0aGUgcGVlciAqL1xcbiAxMzE6XFx0XFx0aWMtXFx1MDAzZWlfc2wgPSBpYy1cXHUwMDNlaV9jbV9pZC1cXHUwMDNlcm91dGUucGF0aF9yZWMtXFx1MDAzZXNsO1xcbiAxMzI6XFx0XFxuIDEzMzpcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZpYy1cXHUwMDNlaV9jcV9xdWllc2NlLCAwKTtcXG4gMTM0OlxcdFxcbiAxMzU6XFx0XFx0LyogSW5pdCByaW5ncyBhbmQgZmlsbCByZWN2LiB0aGlzIG5lZWRzIHRvIHdhaXQgdW50aWwgcHJvdG9jb2xcXG4gMTM2OlxcdFxcdCAqIG5lZ290aWF0aW9uIGlzIGNvbXBsZXRlLCBzaW5jZSByaW5nIGxheW91dCBpcyBkaWZmZXJlbnRcXG4gMTM3OlxcdFxcdCAqIGZyb20gMy4xIHRvIDQuMS5cXG4gMTM4OlxcdFxcdCAqL1xcbiAxMzk6XFx0XFx0cmRzX2liX3NlbmRfaW5pdF9yaW5nKGljKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6NTM6NDkuMDQyNjY2MDc4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMTU2MTk0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUkRTX1JETUFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Jkcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Jkcy9LY29uZmlnPTM9Y29uZmlnIFJEU1xcbi0tXFxubmV0L3Jkcy9LY29uZmlnLTktXFxubmV0L3Jkcy9LY29uZmlnOjEwOmNvbmZpZyBSRFNfUkRNQVxcbm5ldC9yZHMvS2NvbmZpZy0xMS1cXHR0cmlzdGF0ZSBcXFwiUkRTIG92ZXIgSW5maW5pYmFuZFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6NTM6NDkuMjU0MjMyNDU0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDA5NjA3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvYmotXFxcXCRcXFxcKENPTkZJR19SRFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Jkcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Jkcy9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5uZXQvcmRzL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX1JEUykgKz0gcmRzLm9cXG5uZXQvcmRzL01ha2VmaWxlLTMtcmRzLXkgOj1cXHRhZl9yZHMubyBiaW5kLm8gY29uZy5vIGNvbm5lY3Rpb24ubyBpbmZvLm8gbWVzc2FnZS5vICAgXFxcXFxcbi0tXFxubmV0L3Jkcy9NYWtlZmlsZS02LVxcbm5ldC9yZHMvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfUkRTX1JETUEpICs9IHJkc19yZG1hLm9cXG5uZXQvcmRzL01ha2VmaWxlLTgtcmRzX3JkbWEteSA6PVxcdHJkbWFfdHJhbnNwb3J0Lm8gXFxcXFxcbi0tXFxubmV0L3Jkcy9NYWtlZmlsZS0xMi1cXG5uZXQvcmRzL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19SRFNfVENQKSArPSByZHNfdGNwLm9cXG5uZXQvcmRzL01ha2VmaWxlLTE0LXJkc190Y3AteSA6PVxcdFxcdHRjcC5vIHRjcF9jb25uZWN0Lm8gdGNwX2xpc3Rlbi5vIHRjcF9yZWN2Lm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNDo1Mzo0OS4zNjgzMzUzOTVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTk2NjU1Mjk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgUkRNQSBDb25maWd1cmF0aW9uIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gUkRNQSB3aXRoaW4gdGhlIFJEUyAoUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cykgc3Vic3lzdGVtIG9mIHRoZSBMaW51eCBrZXJuZWwuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBsb29rIGF0IHRoZSBgS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ20gZm9jdXNpbmcgb24gdGhlIGBuZXQvcmRzL0tjb25maWdgIGZpbGUgYmVjYXVzZSB0aGF0J3MgdGhlIG9idmlvdXMgcGxhY2UgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgZm9yIHRoZSBSRFMgcHJvdG9jb2wuIEknbSB6ZXJvaW5nIGluIG9uIGBjb25maWcgUkRTX1JETUFgLiBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhlcmUncyBsaWtlbHkgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbiwgcGVyaGFwcyBhIGJvb2xlYW4sIHRoYXQgY29udHJvbHMgd2hldGhlciBvciBub3QgdGhlIFJETUEgZmVhdHVyZXMgYXJlIGVuYWJsZWQgd2l0aGluIFJEUy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBvcHRpb25zIG1pZ2h0IGRlcGVuZCBvbiBpdCwgd2hhdCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZSwgYW5kIHdoYXQgdGhlIGFzc29jaWF0ZWQgaGVscCB0ZXh0IHNheXMgYWJvdXQgaXRzIGludGVuZGVkIHVzZSBhbmQgaW1wbGljYXRpb25zLiBFc3NlbnRpYWxseSwgSSdtIHRyeWluZyB0byBtZW50YWxseSByZWNvbnN0cnVjdCB0aGUgY29uZmlndXJhdGlvbiBsb2dpYyBhbmQgdW5kZXJzdGFuZCBob3cgYFJEU19SRE1BYCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgc3BlY2lmaWMgcHJvdG9jb2wuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1MzgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSIsImdyZXBwZXIiLCJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6NTM6NTIuOTY0OTkzMTgzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExMDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9yZHMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0XFxuICAgMzpcXHRjb25maWcgUkRTXFxuICAgNDpcXHRcXHR0cmlzdGF0ZSBcXFwiVGhlIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgUHJvdG9jb2xcXFwiXFxuICAgNTpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA2OlxcdFxcdGhlbHBcXG4gICA3OlxcdFxcdCAgVGhlIFJEUyAoUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cykgcHJvdG9jb2wgcHJvdmlkZXMgcmVsaWFibGUsXFxuICAgODpcXHRcXHQgIHNlcXVlbmNlZCBkZWxpdmVyeSBvZiBkYXRhZ3JhbXMgb3ZlciBJbmZpbmliYW5kIG9yIFRDUC5cXG4gICA5OlxcdFxcbiAgMTA6XFx0Y29uZmlnIFJEU19SRE1BXFxuICAxMTpcXHRcXHR0cmlzdGF0ZSBcXFwiUkRTIG92ZXIgSW5maW5pYmFuZFxcXCJcXG4gIDEyOlxcdFxcdGRlcGVuZHMgb24gUkRTIFxcdTAwMjZcXHUwMDI2IElORklOSUJBTkQgXFx1MDAyNlxcdTAwMjYgSU5GSU5JQkFORF9BRERSX1RSQU5TXFxuICAxMzpcXHRcXHRoZWxwXFxuICAxNDpcXHRcXHQgIEFsbG93IFJEUyB0byB1c2UgSW5maW5pYmFuZCBhcyBhIHRyYW5zcG9ydC5cXG4gIDE1OlxcdFxcdCAgVGhpcyB0cmFuc3BvcnQgc3VwcG9ydHMgUkRNQSBvcGVyYXRpb25zLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRjb25maWcgUkRTX1RDUFxcbiAgMTg6XFx0XFx0dHJpc3RhdGUgXFxcIlJEUyBvdmVyIFRDUFxcXCJcXG4gIDE5OlxcdFxcdGRlcGVuZHMgb24gUkRTXFxuICAyMDpcXHRcXHRkZXBlbmRzIG9uIElQVjYgfHwgIUlQVjZcXG4gIDIxOlxcdFxcdGhlbHBcXG4gIDIyOlxcdFxcdCAgQWxsb3cgUkRTIHRvIHVzZSBUQ1AgYXMgYSB0cmFuc3BvcnQuXFxuICAyMzpcXHRcXHQgIFRoaXMgdHJhbnNwb3J0IGRvZXMgbm90IHN1cHBvcnQgUkRNQSBvcGVyYXRpb25zLlxcbiAgMjQ6XFx0XFxuICAyNTpcXHRjb25maWcgUkRTX0RFQlVHXFxuICAyNjpcXHRcXHRib29sIFxcXCJSRFMgZGVidWdnaW5nIG1lc3NhZ2VzXFxcIlxcbiAgMjc6XFx0XFx0ZGVwZW5kcyBvbiBSRFNcXG4gIDI4OlxcdFxcdGRlZmF1bHQgblxcbiAgMjk6XFx0XFxuICAzMDpcXHRjb25maWcgR0NPVl9QUk9GSUxFX1JEU1xcbiAgMzE6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEdDT1YgcHJvZmlsaW5nIG9uIFJEU1xcXCJcXG4gIDMyOlxcdFxcdGRlcGVuZHMgb24gR0NPVl9LRVJORUxcXG4gIDMzOlxcdFxcdGhlbHBcXG4gIDM0OlxcdFxcdCAgRW5hYmxlIEdDT1YgcHJvZmlsaW5nIG9uIFJEUyBmb3IgY2hlY2tpbmcgd2hpY2ggZnVuY3Rpb25zL2xpbmVzXFxuICAzNTpcXHRcXHQgIGFyZSBleGVjdXRlZC5cXG4gIDM2OlxcdFxcbiAgMzc6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNDo1Mzo1Mi45NjcxNTYwMjNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjc2NTI4OTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJETUEgRHJpdmVyIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSB0aGlua2luZyB0aHJvdWdoIHRoZSBSRE1BIGRyaXZlciBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNwZWNpZmljYWxseSBmb3IgcG90ZW50aWFsIGRlcGxveW1lbnQgc2NlbmFyaW9zLiBNeSBtaW5kIGp1bXBzIGltbWVkaWF0ZWx5IHRvIGBDT05GSUdfUkRTYCwgdGhhdCdzIHRoZSBiYXNlIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgcHJvdG9jb2wgSSdtIG1vc3QgZmFtaWxpYXIgd2l0aC4gQnV0LCBnaXZlbiBteSBmb2N1cyBvbiBSZW1vdGUgRGlyZWN0IE1lbW9yeSBBY2Nlc3MsIEkgbmVlZCB0byBjb25zaWRlciBgQ09ORklHX1JEU19SRE1BYCB3aGljaCBpcyB0aGUgb2J2aW91cyBvbmUsIGFuZCBhbHNvIGBDT05GSUdfSU5GSU5JQkFORGAuIE9mIGNvdXJzZSwgSSdtIGdvaW5nIHRvIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGFkZHJlc3MgdHJhbnNsYXRpb24gaXMgd29ya2luZyBjb3JyZWN0bHksIHNvIGBDT05GSUdfSU5GSU5JQkFORF9BRERSX1RSQU5TYCBpcyBhIG11c3QuIE5vdywgZGVwZW5kaW5nIG9uIHRoZSBlbnZpcm9ubWVudOKAlHNwZWNpZmljYWxseSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggdmlydHVhbGl6YXRpb27igJRJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gbG9vayBhdCB0aGUgc29mdC1SRE1BIGRyaXZlcnM6IGBDT05GSUdfUkRNQV9SWEVgIG9yIG1heWJlIGBDT05GSUdfUkRNQV9TSVdgLiBUaGVzZSBhcmUgY3J1Y2lhbCBmb3Igc2l0dWF0aW9ucyBsaWtlIHVzaW5nIFFFTVUgb3Igb3RoZXIgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGV5IGVuYWJsZSBSRE1BIGZ1bmN0aW9uYWxpdHkgd2l0aG91dCBkZWRpY2F0ZWQgaGFyZHdhcmUsIHRocm91Z2ggYHJkbWFfcnhlYCBvciBgc2l3YC4gVGhhdCdzIGEga2V5IGNvbnNpZGVyYXRpb24uXG5cbk15IG5leHQgaW1tZWRpYXRlIHRhc2sgaXMgdG8gdHJhY2sgZG93biB3aGVyZSBgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGVgIGlzIGNhbGxlZC4gVGhhdCdzIHRoZSBjcml0aWNhbCBjb25uZWN0aW9uIGNvbXBsZXRpb24gcGF0aCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIEkgbmVlZCB0byBsaXN0IHRoZSBjYWxsZXJzIG9mIHRoYXQgZnVuY3Rpb24sIHNvIEkgY2FuIHNlZSB3aGF0IHRoZSBjcml0aWNhbCBwYXRocyBhcmUuIEtub3dpbmcgd2hvIGlzICp1c2luZyogdGhlIGNvbm5lY3Rpb24gY29tcGxldGUgZnVuY3Rpb24gaXMgdml0YWwgdG8gbWFraW5nIGRlY2lzaW9ucyBhYm91dCB0aGlzIGFyZWEuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyNTQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNDo1Mzo1NS42NDM2ODgxMjlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzU0Nzc5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZHNfaWJfY21fY29ubmVjdF9jb21wbGV0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcmRzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcmRzL2liLmM9NTU5PXN0cnVjdCByZHNfdHJhbnNwb3J0IHJkc19pYl90cmFuc3BvcnQgPSB7XFxuLS1cXG5uZXQvcmRzL2liLmMtNTczLVxcdC5jbV9oYW5kbGVfY29ubmVjdFxcdD0gcmRzX2liX2NtX2hhbmRsZV9jb25uZWN0LFxcbm5ldC9yZHMvaWIuYzo1NzQ6XFx0LmNtX2Nvbm5lY3RfY29tcGxldGVcXHQ9IHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlLFxcbm5ldC9yZHMvaWIuYy01NzUtXFx0LnN0YXRzX2luZm9fY29weVxcdD0gcmRzX2liX3N0YXRzX2luZm9fY29weSxcXG4tLVxcbm5ldC9yZHMvaWIuaD0zNzY9aW50IHJkc19pYl9jbV9pbml0aWF0ZV9jb25uZWN0KHN0cnVjdCByZG1hX2NtX2lkICpjbV9pZCwgYm9vbCBpc3Y2KTtcXG5uZXQvcmRzL2liLmg6Mzc3OnZvaWQgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLFxcbm5ldC9yZHMvaWIuaC0zNzgtXFx0XFx0XFx0XFx0c3RydWN0IHJkbWFfY21fZXZlbnQgKmV2ZW50KTtcXG4tLVxcbm5ldC9yZHMvaWJfY20uYz01Nz1zdGF0aWMgdm9pZCByZHNfaWJfc2V0X2Zsb3dfY29udHJvbChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHUzMiBjcmVkaXRzKVxcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTczLSAqL1xcbm5ldC9yZHMvaWJfY20uYzo3NDp2b2lkIHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHJkbWFfY21fZXZlbnQgKmV2ZW50KVxcbm5ldC9yZHMvaWJfY20uYy03NS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE0OjUzOjU1LjgwMTI0NDU5NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODk4MzgzOTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYGNtX2Nvbm5lY3RfY29tcGxldGVgIGluIGBuZXQvcmRzL2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biBhbGwgdGhlIGNhbGwgc2l0ZXMgZm9yIGBjbV9jb25uZWN0X2NvbXBsZXRlYCB3aXRoaW4gdGhlIGBuZXQvcmRzL2AgZGlyZWN0b3J5LiBUaGF0J3MgdXN1YWxseSB0aGUgYmVzdCB3YXkgdG8gdW5kZXJzdGFuZCBob3cgYSBzcGVjaWZpYyBmdW5jdGlvbiBpcyB1c2VkIGFuZCwgaW4gdGhpcyBjYXNlLCBob3cgY29ubmVjdGlvbiBjb21wbGV0aW9uIGlzIGhhbmRsZWQgaW4gdGhlIFJEUyBuZXR3b3JrIHN0YWNrLiBJJ20gcHJvYmFibHkgbG9va2luZyBmb3IgcGxhY2VzIHdoZXJlIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBnZXRzIHNpZ25hbGVkLCBvciBwZXJoYXBzIHdoZXJlIGVycm9yIGhhbmRsaW5nIHJlbGF0ZWQgdG8gdGhhdCBwaGFzZSBpcyBpbXBsZW1lbnRlZC4gSSdtIGFudGljaXBhdGluZyBzb21lIGludHJpY2F0ZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgUkRNQSBzdGFjayBpZiBSRFMgaXMgaW52b2x2ZWQsIGFuZCBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBlc3BlY2lhbGx5IGFyb3VuZCBsb2NrIHVzYWdlLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgc291cmNlIGNvZGUgYW5kIHN0YXJ0IGdyZXBwaW5nISBJJ20gZXhwZWN0aW5nIHRoaXMgd2lsbCBpbnZvbHZlIGxvb2tpbmcgYXQgY29udGV4dCBzd2l0Y2hlcyBhbmQgZGF0YSB0cmFuc2Zlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA3OCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE0OjUzOjU3LjY5OTYzMjA4NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4NjIwNjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNtX2Nvbm5lY3RfY29tcGxldGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Jkcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Jkcy9pYi5jPTU1OT1zdHJ1Y3QgcmRzX3RyYW5zcG9ydCByZHNfaWJfdHJhbnNwb3J0ID0ge1xcbi0tXFxubmV0L3Jkcy9pYi5jLTU3My1cXHQuY21faGFuZGxlX2Nvbm5lY3RcXHQ9IHJkc19pYl9jbV9oYW5kbGVfY29ubmVjdCxcXG5uZXQvcmRzL2liLmM6NTc0OlxcdC5jbV9jb25uZWN0X2NvbXBsZXRlXFx0PSByZHNfaWJfY21fY29ubmVjdF9jb21wbGV0ZSxcXG5uZXQvcmRzL2liLmMtNTc1LVxcdC5zdGF0c19pbmZvX2NvcHlcXHQ9IHJkc19pYl9zdGF0c19pbmZvX2NvcHksXFxuLS1cXG5uZXQvcmRzL2liLmg9Mzc2PWludCByZHNfaWJfY21faW5pdGlhdGVfY29ubmVjdChzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQsIGJvb2wgaXN2Nik7XFxubmV0L3Jkcy9pYi5oOjM3Nzp2b2lkIHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubixcXG5uZXQvcmRzL2liLmgtMzc4LVxcdFxcdFxcdFxcdHN0cnVjdCByZG1hX2NtX2V2ZW50ICpldmVudCk7XFxuLS1cXG5uZXQvcmRzL2liX2NtLmM9NTc9c3RhdGljIHZvaWQgcmRzX2liX3NldF9mbG93X2NvbnRyb2woc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCB1MzIgY3JlZGl0cylcXG4tLVxcbm5ldC9yZHMvaWJfY20uYy03My0gKi9cXG5uZXQvcmRzL2liX2NtLmM6NzQ6dm9pZCByZHNfaWJfY21fY29ubmVjdF9jb21wbGV0ZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCByZG1hX2NtX2V2ZW50ICpldmVudClcXG5uZXQvcmRzL2liX2NtLmMtNzUte1xcbi0tXFxubmV0L3Jkcy9pYl9zeXNjdGwuYz01MD1zdGF0aWMgdW5zaWduZWQgbG9uZyByZHNfaWJfc3lzY3RsX21heF91bnNpZ193cl9tYXggPSA2NDtcXG4tLVxcbm5ldC9yZHMvaWJfc3lzY3RsLmMtNTgtICogc2V0dGluZyB0aGlzIHRvIDEgYW5kIG1vdmluZyBpbml0L3JlZmlsbCBvZiBzZW5kL3JlY3ZcXG5uZXQvcmRzL2liX3N5c2N0bC5jOjU5OiAqIHJpbmdzIGZyb20gaWJfY21fY29ubmVjdF9jb21wbGV0ZSgpIGJhY2sgaW50byBpYl9zZXR1cF9xcCgpXFxubmV0L3Jkcy9pYl9zeXNjdGwuYy02MC0gKiB3aWxsIGNhdXNlIGNyZWRpdHMgdG8gYmUgYWRkZWQgYmVmb3JlIHByb3RvY29sIG5lZ290aWF0aW9uLlxcbi0tXFxubmV0L3Jkcy9yZG1hX3RyYW5zcG9ydC5jPTQ5PXN0YXRpYyBpbnQgcmRzX3JkbWFfY21fZXZlbnRfaGFuZGxlcl9jbW4oc3RydWN0IHJkbWFfY21faWQgKmNtX2lkLFxcbi0tXFxubmV0L3Jkcy9yZG1hX3RyYW5zcG9ydC5jLTExNy1cXHRcXHRpZiAoY29ubilcXG5uZXQvcmRzL3JkbWFfdHJhbnNwb3J0LmM6MTE4OlxcdFxcdFxcdHRyYW5zLVxcdTAwM2VjbV9jb25uZWN0X2NvbXBsZXRlKGNvbm4sIGV2ZW50KTtcXG5uZXQvcmRzL3JkbWFfdHJhbnNwb3J0LmMtMTE5LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L3Jkcy9yZHMuaD01Mjk9c3RydWN0IHJkc190cmFuc3BvcnQge1xcbi0tXFxubmV0L3Jkcy9yZHMuaC01OTQtXFx0aW50ICgqY21faW5pdGlhdGVfY29ubmVjdCkoc3RydWN0IHJkbWFfY21faWQgKmNtX2lkLCBib29sIGlzdjYpO1xcbm5ldC9yZHMvcmRzLmg6NTk1OlxcdHZvaWQgKCpjbV9jb25uZWN0X2NvbXBsZXRlKShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sXFxubmV0L3Jkcy9yZHMuaC01OTYtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCByZG1hX2NtX2V2ZW50ICpldmVudCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE0OjUzOjU3LjgwODI1OTE0OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0Mzk2MTc2NDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgUkRNQSBFdmVudCBIYW5kbGVyKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhlIFJEUyBSRE1BIGNvbm5lY3Rpb24gbWFuYWdlciBldmVudCBoYW5kbGluZy4gVGhlIHBsYWNlIHRvIHN0YXJ0LCBhcyB1c3VhbCwgaXMgdGhlIGNvcmUuIEknbSBnb2luZyB0byBqdW1wIGludG8gYG5ldC9yZHMvcmRtYV90cmFuc3BvcnQuY2AgYW5kIHNwZWNpZmljYWxseSBsb29rIGF0IGByZHNfcmRtYV9jbV9ldmVudF9oYW5kbGVyX2NtbmAuIFRoaXMgaXMgdGhlIHNoYXJlZCwgY29tbW9uIGhhbmRsZXIsIHdoaWNoIGlzIGdlbmVyYWxseSB3aGVyZSB0aGUgbG93ZXItbGV2ZWwgUkRNQSBDTSBldmVudHMgd2lsbCBiZSBwcm9jZXNzZWQgYmVmb3JlIHRoZXkncmUgZGlzcGF0Y2hlZCB0byBtb3JlIHNwZWNpZmljIFJEUy1sZXZlbCBsb2dpYy4gSSBleHBlY3QgdG8gZmluZCB0aGUgaW5pdGlhbCBDTSBldmVudCBwcm9jZXNzaW5nOiBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQsIGNvbm5lY3Rpb24gZmFpbHVyZXMsIGRpc2Nvbm5lY3RzLCBhbmQgYW55IGVycm9yIGhhbmRsaW5nIGhhcHBlbmluZyBhdCB0aGUgQ00gbGV2ZWwuIEZyb20gdGhlcmUsIEknbGwgbmVlZCB0byBzZWUgaG93IHRoZSBjb2RlIGludGVyZmFjZXMgd2l0aCB0aGUgUkRTIHByb3RvY29sIHN0YXRlIG1hY2hpbmVzIOKAkyBJJ20gaW50ZXJlc3RlZCBpbiBob3cgaXQgdHJhbnNsYXRlcyB0aGUgUkRNQSB0cmFuc3BvcnQtbGV2ZWwgZXZlbnRzIGludG8gaGlnaGVyLWxldmVsIFJEUyBjb25uZWN0aW9uIHN0YXRlcyBhbmQgYWN0aW9ucy4gSSdtIGhvcGluZyBpdCdzIHdlbGwtc3RydWN0dXJlZCBhbmQgaGFuZGxlcyB0aGluZ3MgbGlrZSByZXRyaWVzLCBiYWNrb2ZmLCBhbmQgZXJyb3IgcmVwb3J0aW5nIGdyYWNlZnVsbHksIGFuZCB0aGF0IHRoZSBldmVudCB0eXBlcyBhcmUgY2xlYXJseSBzZXBhcmF0ZWQuIE15IGV4cGVjdGF0aW9uIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGEgY3JpdGljYWwgcGFydCBvZiBob3cgUkRTIGRlYWxzIHdpdGggdGhlIFJETUEgc3RhY2sgdW5kZXJuZWF0aC4gTGV0J3Mgc2VlIGlmIG15IG1lbnRhbCBtb2RlbCBsaW5lcyB1cCB3aXRoIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDQzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6NTQ6MDIuMjA0NDM5NzY3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvcmRzL3JkbWFfdHJhbnNwb3J0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAwOlxcdFxcdFxcdCAqIGNtX2lkIGlzIHZhbGlkIGJlZm9yZSBwcm9jZWVkaW5nXFxuIDEwMTpcXHRcXHRcXHQgKi9cXG4gMTAyOlxcdFxcdFxcdGlmIChjb25uKSB7XFxuIDEwMzpcXHRcXHRcXHRcXHRzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmliaWM7XFxuIDEwNDpcXHRcXG4gMTA1OlxcdFxcdFxcdFxcdGliaWMgPSBjb25uLVxcdTAwM2VjX3RyYW5zcG9ydF9kYXRhO1xcbiAxMDY6XFx0XFx0XFx0XFx0aWYgKGliaWMgXFx1MDAyNlxcdTAwMjYgaWJpYy1cXHUwMDNlaV9jbV9pZCA9PSBjbV9pZCkge1xcbiAxMDc6XFx0XFx0XFx0XFx0XFx0Y21faWQtXFx1MDAzZXJvdXRlLnBhdGhfcmVjWzBdLnNsID1cXG4gMTA4OlxcdFxcdFxcdFxcdFxcdFxcdFRPU19UT19TTChjb25uLVxcdTAwM2VjX3Rvcyk7XFxuIDEwOTpcXHRcXHRcXHRcXHRcXHRyZXQgPSB0cmFucy1cXHUwMDNlY21faW5pdGlhdGVfY29ubmVjdChjbV9pZCwgaXN2Nik7XFxuIDExMDpcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbiAxMTE6XFx0XFx0XFx0XFx0XFx0cmRzX2Nvbm5fZHJvcChjb25uKTtcXG4gMTEyOlxcdFxcdFxcdFxcdH1cXG4gMTEzOlxcdFxcdFxcdH1cXG4gMTE0OlxcdFxcdFxcdGJyZWFrO1xcbiAxMTU6XFx0XFxuIDExNjpcXHRcXHRjYXNlIFJETUFfQ01fRVZFTlRfRVNUQUJMSVNIRUQ6XFxuIDExNzpcXHRcXHRcXHRpZiAoY29ubilcXG4gMTE4OlxcdFxcdFxcdFxcdHRyYW5zLVxcdTAwM2VjbV9jb25uZWN0X2NvbXBsZXRlKGNvbm4sIGV2ZW50KTtcXG4gMTE5OlxcdFxcdFxcdGJyZWFrO1xcbiAxMjA6XFx0XFxuIDEyMTpcXHRcXHRjYXNlIFJETUFfQ01fRVZFTlRfUkVKRUNURUQ6XFxuIDEyMjpcXHRcXHRcXHRpZiAoIWNvbm4pXFxuIDEyMzpcXHRcXHRcXHRcXHRicmVhaztcXG4gMTI0OlxcdFxcdFxcdGVyciA9IChpbnQgKilyZG1hX2NvbnN1bWVyX3JlamVjdF9kYXRhKGNtX2lkLCBldmVudCwgXFx1MDAyNmxlbik7XFxuIDEyNTpcXHRcXHRcXHRpZiAoIWVyciB8fFxcbiAxMjY6XFx0XFx0XFx0ICAgIChlcnIgXFx1MDAyNlxcdTAwMjYgbGVuIFxcdTAwM2U9IHNpemVvZigqZXJyKSBcXHUwMDI2XFx1MDAyNlxcbiAxMjc6XFx0XFx0XFx0ICAgICAoKCplcnIpIFxcdTAwM2M9IFJEU19SRE1BX1JFSl9JTkNPTVBBVCkpKSB7XFxuIDEyODpcXHRcXHRcXHRcXHRwcl93YXJuKFxcXCJSRFMvUkRNQTogY29ubiBcXHUwMDNjJXBJNmMsICVwSTZjXFx1MDAzZSByZWplY3RlZCwgZHJvcHBpbmcgY29ubmVjdGlvblxcXFxuXFxcIixcXG4gMTI5OlxcdFxcdFxcdFxcdFxcdFxcdTAwMjZjb25uLVxcdTAwM2VjX2xhZGRyLCBcXHUwMDI2Y29ubi1cXHUwMDNlY19mYWRkcik7XFxuIDEzMDpcXHRcXG4gMTMxOlxcdFxcdFxcdFxcdGlmICghY29ubi1cXHUwMDNlY190b3MpXFxuIDEzMjpcXHRcXHRcXHRcXHRcXHRjb25uLVxcdTAwM2VjX3Byb3Bvc2VkX3ZlcnNpb24gPSBSRFNfUFJPVE9DT0xfQ09NUEFUX1ZFUlNJT047XFxuIDEzMzpcXHRcXG4gMTM0OlxcdFxcdFxcdFxcdHJkc19jb25uX2Ryb3AoY29ubik7XFxuIDEzNTpcXHRcXHRcXHR9XFxuIDEzNjpcXHRcXHRcXHRyZHNkZWJ1ZyhcXFwiQ29ubmVjdGlvbiByZWplY3RlZDogJXNcXFxcblxcXCIsXFxuIDEzNzpcXHRcXHRcXHRcXHQgcmRtYV9yZWplY3RfbXNnKGNtX2lkLCBldmVudC1cXHUwMDNlc3RhdHVzKSk7XFxuIDEzODpcXHRcXHRcXHRicmVhaztcXG4gMTM5OlxcdFxcdGNhc2UgUkRNQV9DTV9FVkVOVF9BRERSX0VSUk9SOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNDo1NDowMi4yMDQ1NTAyNzdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTU3MjU5ODkyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXQ6IFJEUyBvdmVyIFJETUEgQ29ubmVjdGlvbiBIYW5kbGluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYSBjaGFuZ2UgcmVsYXRlZCB0byBob3cgUkRTIChSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzKSBjb25uZWN0aW9ucyBhcmUgaGFuZGxlZCB3aGVuIHVzaW5nIFJETUEgKFJlbW90ZSBEaXJlY3QgTWVtb3J5IEFjY2VzcyksIHNwZWNpZmljYWxseSBSRFNfUkRNQSwgd2hpY2ggcmVsaWVzIG9uIHRoZSBSRE1BIENvbm5lY3Rpb24gTWFuYWdlciAoQ00pLiBUaGUgY29yZSBpc3N1ZSBzZWVtcyB0byBiZSBpbiB0aGUgYHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlYCBmdW5jdGlvbiwgd2hpY2ggZ2V0cyB0cmlnZ2VyZWQgd2hlbiBhbiBSRE1BIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBldmVudCBoYXBwZW5zLCBzcGVjaWZpY2FsbHkgYFJETUFfQ01fRVZFTlRfRVNUQUJMSVNIRURgLlxuXG5QcmV2aW91c2x5LCBpZiB0aGUgY29ubmVjdGlvbidzIHZlcnNpb24gd2Fzbid0IGNvbXBhdGlibGUgKGVpdGhlciB0b28gb2xkIG9yIGEgc3BlY2lmaWMgY29tcGF0aWJpbGl0eSB2ZXJzaW9uKSwgdGhlIGNvZGUgd291bGQganVzdCBjYWxsIGByZHNfY29ubl9kZXN0cm95YC4gQnV0IG5vdywgaXQncyBjYWxsaW5nIGByZHNfY29ubl9kcm9wYCBpbnN0ZWFkLiBUaGUga2V5IGRpZmZlcmVuY2UgaGVyZSBpcyB0aGUgdGltaW5nLiBgcmRzX2Nvbm5fZGVzdHJveWAgd2FzIGJlaW5nIGNhbGxlZCBkaXJlY3RseSB3aXRoaW4gYW4gZXZlbnQgaGFuZGxlciBvciBjb21wbGV0aW9uIGNhbGxiYWNrLCB3aGljaCBpcyBhIGJpZyByZWQgZmxhZyBmb3IgcG90ZW50aWFsIHByb2JsZW1zLiBJdCBjb3VsZCBoYXZlIGxlZCB0byB0aGluZ3MgbGlrZSBVc2UtQWZ0ZXItRnJlZSAoVUFGKSB2dWxuZXJhYmlsaXRpZXMsIGRlYWRsb2Nrcywgb3IgYXNzZXJ0aW9uIGZhaWx1cmVzLCBiZWNhdXNlIHlvdSdyZSB0ZWFyaW5nIGRvd24gYSBjb25uZWN0aW9uIGRpcmVjdGx5IGZyb20gYW4gZXZlbnQgaGFuZGxlciBjb250ZXh0LiBgcmRzX2Nvbm5fZHJvcGAsIG9uIHRoZSBvdGhlciBoYW5kLCBpbml0aWF0ZXMgYW4gKmFzeW5jaHJvbm91cyogdGVhcmRvd24sIHdoaWNoIGlzIHRoZSBzYWZlciBhcHByb2FjaC5cblxuVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIG5vdyBpcywgY2FuIEkgcmVhY2ggdGhpcyBjb2RlIGluIFFFTVU/IEFuZCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyB5ZXMhIFJEUyBzb2NrZXRzIChBRl9SRFMpIHdpdGggdGhlIFJEU19SRE1BIHBhdGgsIHBhcnRpY3VsYXJseSB1c2luZyBzb2Z0d2FyZSBSRE1BIGxpa2UgYHJkbWFfcnhlYCBvciBgc2l3YCwgYXJlIGFic29sdXRlbHkgZnV6emFibGUgbmV0d29yayBwcm90b2NvbHMgd2l0aGluIFFFTVUuIFN5emthbGxlciBzdXBwb3J0cyB0aGlzLiBUaGlzIHRvdWNoZXMgdGhlIGNvcmUgbmV0d29ya2luZyBhbmQgUkRTIHByb3RvY29sIGxvZ2ljLCBzbyBpdCdzIGludGVyZXN0aW5nLlxuXG5TbywgbGV0J3MgY2hlY2sgdGhlIGNyaXRlcmlhOlxuXG4qICAgKipSZWFjaGFiaWxpdHk6KiogV2UncmUgZGVhbGluZyB3aXRoIFJEUyBvdmVyIEluZmluaUJhbmQgdXNpbmcgc29mdHdhcmUgUkRNQSBkZXZpY2VzLiBUaGlzIG1lYW5zIGBzb2NrZXQoQUZfUkRTLCAuLi4pYCBvciB1c2luZyB0aGUgUkRNQSBDTSwgd2hpY2ggKmlzKiBhY2Nlc3NpYmxlIGFuZCBmdXp6YWJsZSBpbiB0aGUgUUVNVSBlbnZpcm9ubWVudC4gQ2hlY2suXG4qICAgKipNb2RpZmljYXRpb246KiogVGhlIGNoYW5nZSBpcyByaWdodCB0aGVyZSBpbiBgbmV0L3Jkcy9pYl9jbS5jYDogd2UndmUgc3dpdGNoZWQgZXJyb3IgaGFuZGxpbmcgYW5kIHN0YXRlIHRyYW5zaXRpb24gZnJvbSBgcmRzX2Nvbm5fZGVzdHJveWAgdG8gYHJkc19jb25uX2Ryb3BgIGluIGByZHNfaWJfY21fY29ubmVjdF9jb21wbGV0ZWAuIENoZWNrLlxuKiAgICoqSXMgV29ydGggRnV6emluZzoqKiBBYnNvbHV0ZWx5LiBXZSdyZSB0b3VjaGluZyBjb3JlIG5ldHdvcmsgY29kZSwgc3BlY2lmaWNhbGx5IGluIFJEUywgdGhhdCBoYXMgY3JpdGljYWwgZXJyb3ItaGFuZGxpbmcgbG9naWMuIENoZWNrLlxuXG5GaW5hbGx5LCBsZXQncyBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgcmlnaHQgY29uZmlndXJhdGlvbi4gV2UnbGwgbmVlZDpcblxuKiAgIFJEU1xuKiAgIFJEU19SRE1BXG4qICAgSU5GSU5JQkFORFxuKiAgIElORklOSUJBTkRfQUREUl9UUkFOU1xuXG5MZXQncyBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgYG5ldC9yZHMvS2NvbmZpZ2AgYW5kIGBkcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZ2AgZmlsZXMgdG8gdmVyaWZ5IHRoZXJlIGFyZSBubyBoaWRkZW4gZGVwZW5kZW5jaWVzLiBUaW1lIHRvIG1ha2Ugc3VyZSB0aG9zZSBrZXJuZWwgY29uZmlncyBhcmUgc2V0IGFuZCBzdGFydCBmdXp6aW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDI0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6NTQ6MDcuNzc3MTUyMjI1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTg3NzYzOTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElORklOSUJBTkRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjI6bWVudWNvbmZpZyBJTkZJTklCQU5EXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiSW5maW5pQmFuZCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc9MTY9aWYgSU5GSU5JQkFORFxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTE3LVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjE4OmNvbmZpZyBJTkZJTklCQU5EX1VTRVJfTUFEXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMTktXFx0dHJpc3RhdGUgXFxcIkluZmluaUJhbmQgdXNlcnNwYWNlIE1BRCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMjctXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6Mjg6Y29uZmlnIElORklOSUJBTkRfVVNFUl9BQ0NFU1NcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy0yOS1cXHR0cmlzdGF0ZSBcXFwiSW5maW5pQmFuZCB1c2Vyc3BhY2UgYWNjZXNzICh2ZXJicyBhbmQgQ00pXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMzktXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NDA6Y29uZmlnIElORklOSUJBTkRfVVNFUl9BQ0NFU1NfQ09SRVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTQxLVxcdGJvb2xcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTQzLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjQ0OmNvbmZpZyBJTkZJTklCQU5EX1VTRVJfTUVNXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDUtXFx0Ym9vbFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNTAtXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NTE6Y29uZmlnIElORklOSUJBTkRfT05fREVNQU5EX1BBR0lOR1xcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTUyLVxcdGJvb2wgXFxcIkluZmluaUJhbmQgb24tZGVtYW5kIHBhZ2luZyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNjMtXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NjQ6Y29uZmlnIElORklOSUJBTkRfQUREUl9UUkFOU1xcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTY1LVxcdGJvb2wgXFxcIlJETUEvQ01cXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy03MS1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo3Mjpjb25maWcgSU5GSU5JQkFORF9BRERSX1RSQU5TX0NPTkZJR0ZTXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNzMtXFx0Ym9vbFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctODAtXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6ODE6Y29uZmlnIElORklOSUJBTkRfVklSVF9ETUFcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy04Mi1cXHRkZWZfYm9vbCAhSElHSE1FTVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JuZ19yZS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JuZ19yZS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfQk5HX1JFXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JuZ19yZS9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkJyb2FkY29tIE5leHQgZ2VuZXJhdGlvbiBSb0NFIEhDQSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9CTlhUX1JFXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJCcm9hZGNvbSBOZXR4dHJlbWUgSENBIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfQ1hHQjRcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJDaGVsc2lvIFQ0L1Q1IFJETUEgRHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9LY29uZmlnLTYtXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9LY29uZmlnOjc6Y29uZmlnIElORklOSUJBTkRfRUZBXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9LY29uZmlnLTgtXFx0dHJpc3RhdGUgXFxcIkFtYXpvbiBFbGFzdGljIEZhYnJpYyBBZGFwdGVyIChFRkEpIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfRVJETUFcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJBbGliYWJhIEVsYXN0aWMgUkRNQSBBZGFwdGVyIChFUkRNQSkgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfSEZJMVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiQ29ybmVsaXMgT1BYIEdlbjEgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX0hOU19ISVAwOFxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJIaXNpbGljb24gSGlwMDggRmFtaWx5IFJvQ0Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9LY29uZmlnLTMtXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL0tjb25maWc6NDpjb25maWcgSU5GSU5JQkFORF9JT05JQ1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9LY29uZmlnLTUtXFx0dHJpc3RhdGUgXFxcIkFNRCBQZW5zYW5kbyBEU0MgUkRNQS9Sb0NFIFN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfSVJETUFcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJJbnRlbChSKSBFdGhlcm5ldCBQcm90b2NvbCBEcml2ZXIgZm9yIFJETUFcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfTVRIQ0FcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJNZWxsYW5veCBIQ0Egc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9LY29uZmlnLTktXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL0tjb25maWc6MTA6Y29uZmlnIElORklOSUJBTkRfTVRIQ0FfREVCVUdcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZy0xMS1cXHRib29sIFxcXCJWZXJib3NlIGRlYnVnZ2luZyBvdXRwdXRcXFwiIGlmIEVYUEVSVFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfT0NSRE1BXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkVtdWxleCBPbmUgQ29ubmVjdCBIQ0Egc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9xZWRyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvcWVkci9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfUUVEUlxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9xZWRyL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiUUxvZ2ljIFJvQ0UgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3VzbmljL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvdXNuaWMvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX1VTTklDXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3VzbmljL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiVmVyYnMgc3VwcG9ydCBmb3IgQ2lzY28gVklDXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3Ztd19wdnJkbWEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody92bXdfcHZyZG1hL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9WTVdBUkVfUFZSRE1BXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3Ztd19wdnJkbWEvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJWTXdhcmUgUGFyYXZpcnR1YWxpemVkIFJETUEgRHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3JkbWF2dC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3JkbWF2dC9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfUkRNQVZUXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3JkbWF2dC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlJETUEgdmVyYnMgdHJhbnNwb3J0IGxpYnJhcnlcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9JUE9JQlxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJJUC1vdmVyLUluZmluaUJhbmRcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWctMTEtXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnOjEyOmNvbmZpZyBJTkZJTklCQU5EX0lQT0lCX0NNXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnLTEzLVxcdGJvb2wgXFxcIklQLW92ZXItSW5maW5pQmFuZCBDb25uZWN0ZWQgTW9kZSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnLTI2LVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZzoyNzpjb25maWcgSU5GSU5JQkFORF9JUE9JQl9ERUJVR1xcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJJUC1vdmVyLUluZmluaUJhbmQgZGVidWdnaW5nXFxcIiBpZiBFWFBFUlRcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy00MS1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWc6NDI6Y29uZmlnIElORklOSUJBTkRfSVBPSUJfREVCVUdfREFUQVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy00My1cXHRib29sIFxcXCJJUC1vdmVyLUluZmluaUJhbmQgZGF0YSBwYXRoIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9JU0VSXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiaVNDU0kgRXh0ZW5zaW9ucyBmb3IgUkRNQSAoaVNFUilcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXJ0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXJ0L0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9JU0VSVFxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlcnQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJpU0NTSSBFeHRlbnNpb25zIGZvciBSRE1BIChpU0VSKSB0YXJnZXQgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnLTItXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWc6Mzpjb25maWcgSU5GSU5JQkFORF9SVFJTXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctNC1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctNi1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3J0cnMvS2NvbmZpZzo3OmNvbmZpZyBJTkZJTklCQU5EX1JUUlNfQ0xJRU5UXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctOC1cXHR0cmlzdGF0ZSBcXFwiUlRSUyBjbGllbnQgbW9kdWxlXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctMTctXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWc6MTg6Y29uZmlnIElORklOSUJBTkRfUlRSU19TRVJWRVJcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3J0cnMvS2NvbmZpZy0xOS1cXHR0cmlzdGF0ZSBcXFwiUlRSUyBzZXJ2ZXIgbW9kdWxlXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9TUlBcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkluZmluaUJhbmQgU0NTSSBSRE1BIFByb3RvY29sXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnB0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycHQvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX1NSUFRcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycHQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJJbmZpbmlCYW5kIFNDU0kgUkRNQSBQcm90b2NvbCB0YXJnZXQgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6NTQ6MDcuOTM1OTM1MDI5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMjAyMDM4OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIFJETUEgUlhFIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBSRE1BX1JYRWAgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIEluZmluaWJhbmQgc3RhY2suIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGUgbW9zdCBsaWtlbHkgc3BvdCB0byBmaW5kIHRoZSByZWxldmFudCBLY29uZmlnIGlzIGluIGBkcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL2AuIExldCdzIG5hdmlnYXRlIHRoZXJlIGFuZCBleGFtaW5lIHRoZSBgS2NvbmZpZ2AgZmlsZS4gSSdtIGV4cGVjdGluZyB0byBzZWUgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgYW5kIG1heWJlIHNvbWUgZGVzY3JpcHRpb25zIHRoYXQgc2hlZCBsaWdodCBvbiBob3cgdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsIGRpc2FibGVkLCBhbmQgcGVyaGFwcyBjb25maWd1cmVkIGZ1cnRoZXIuIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYXMgdG8gaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBkcml2ZXIsIGFuZCBwb3RlbnRpYWwgaW1wYWN0cyBvbiBwZXJmb3JtYW5jZSBvciBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gZGVjaXNpb25zIGFyZSB1c3VhbGx5IG1hZGUsIHNvIHRoaXMgS2NvbmZpZyBpcyBhIGNydWNpYWwgZmlyc3Qgc3RvcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxNTgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNDo1NDoxMC4wNTYxNDE0NTZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTEwMzkxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUkRNQV9SWEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL0tjb25maWc6Mjpjb25maWcgUkRNQV9SWEVcXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiU29mdHdhcmUgUkRNQSBvdmVyIEV0aGVybmV0IChSb0NFKSBkcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE0OjU0OjEwLjIwMTI1MTI3MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzU1NTUzMzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy5cblxuKipGb2N1c2luZyBvbiB0aGUgQ29ubmVjdGlvbiBNYW5hZ2VtZW50IGluIFJEUy9JQioqXG5cblJpZ2h0LCBzbyBJJ20gaG9uaW5nIGluIG9uIGNvbm5lY3Rpb24gY29tcGxldGlvbiB3aXRoaW4gdGhlIFJEUyBvdmVyIEluZmluaUJhbmQgKElCKSByZWFsbS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIHRoZSBgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGVgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBuZXQvcmRzL2liX2NtLmNgLiBUaGF0J3Mgd2hlcmUgdGhlIGFjdGlvbiBpcywgYmFzZWQgb24gdGhlIGNvbnRleHQuXG5cbk5vdywgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBiaWdnZXIgcGljdHVyZSBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucywgSSBuZWVkIHRvIHNlZSB3aGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgaGFuZ2luZyBvdXQgaW4gdGhhdCBzYW1lIGBpYl9jbS5jYCBmaWxlLiBVbmRlcnN0YW5kaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBncmFzcCBvZiBob3cgYHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlYCBmaXRzIGludG8gdGhlIG92ZXJhbGwgY29ubmVjdGlvbiBtYW5hZ2VtZW50IHdvcmtmbG93LiBXaGF0IG90aGVyIHBpZWNlcyBhcmUgaW52b2x2ZWQgaW4gc2V0dGluZyB1cCwgdGVhcmluZyBkb3duLCBhbmQgZ2VuZXJhbGx5IHNoZXBoZXJkaW5nIHRoZXNlIElCIGNvbm5lY3Rpb25zPyBMZXQncyB0YWtlIGEgbG9vay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0OTksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNDo1NDoxMi45NTY4MDgyMDZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NzQ5NTMzNCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfXS4qXFxcXCgkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yZHMvaWJfY20uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6NTQ6MTMuMzA0MzE1MDlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjExNDk4ODQ5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgSUIgQ29ubmVjdGlvbiBNYW5hZ2VyIENvZGUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSB3aXRoIHRoZSBSRE1BIGNvbm5lY3Rpb24gbWFuYWdlciBjb2RlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYG5ldC9yZHMvaWJfY20uY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgSW5maW5pQmFuZCBjb25uZWN0aW9uIG1hbmFnZXIgYmVoYXZlcyB3aXRoaW4gdGhlIFJEUyBzdGFjay4gVGhlIGJlc3QgYXBwcm9hY2ggaGVyZSBpcyBnb2luZyB0byBiZSBhIGNvbWJpbmF0aW9uIG9mIHRhcmdldGVkIHJlYWRpbmcgYW5kIHNvbWUgcXVpY2sgZ3JlcHBpbmcuIEknbGwgc3RhcnQgYnkgYnJvd3NpbmcgdGhlIGNvZGUsIGdldHRpbmcgYSBmZWVsIGZvciB0aGUgbWFqb3IgZnVuY3Rpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQuIFRoZW4sIEknbGwgdXNlIGBncmVwYCB0byBxdWlja2x5IGZpbmQgY3Jvc3MtcmVmZXJlbmNlcywgc2VlIHdoZXJlIGtleSBmdW5jdGlvbnMgYXJlIGNhbGxlZCwgYW5kIGZvbGxvdyB0aGUgY29udHJvbCBmbG93LiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb2YgdGhlIGludGVyYWN0aW9uIHBvaW50cy4gRnJvbSB0aGVyZSwgSSBjYW4gZHJpbGwgZG93biBmdXJ0aGVyIGFzIG5lZWRlZCwgYnV0IHRoaXMgaW5pdGlhbCByZWNvbm5haXNzYW5jZSB3aWxsIGdpdmUgbWUgYSBnb29kIGxheSBvZiB0aGUgbGFuZCBhbmQgcG9pbnQgb3V0IHRoZSBhcmVhcyB0aGF0IG5lZWQgdGhlIG1vc3QgYXR0ZW50aW9uLiBMZXQncyBzZWUgd2hhdCBpbnRlcmVzdGluZyB0aWRiaXRzIHdlIGNhbiBkaWcgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzk2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6NTQ6MTUuNDE5MzA2NjY3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTg5ODg2MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXFxcXGJyZHNfaWJfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yZHMvaWJfY20uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcmRzL2liX2NtLmMtNDgtICovXFxubmV0L3Jkcy9pYl9jbS5jOjQ5OnN0YXRpYyB2b2lkIHJkc19pYl9zZXRfcHJvdG9jb2woc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCB1bnNpZ25lZCBpbnQgdmVyc2lvbilcXG5uZXQvcmRzL2liX2NtLmMtNTAte1xcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTU2LSAqL1xcbm5ldC9yZHMvaWJfY20uYzo1NzpzdGF0aWMgdm9pZCByZHNfaWJfc2V0X2Zsb3dfY29udHJvbChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHUzMiBjcmVkaXRzKVxcbm5ldC9yZHMvaWJfY20uYy01OC17XFxubmV0L3Jkcy9pYl9jbS5jOjU5OlxcdHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLVxcdTAwM2VjX3RyYW5zcG9ydF9kYXRhO1xcbm5ldC9yZHMvaWJfY20uYy02MC1cXG5uZXQvcmRzL2liX2NtLmM6NjE6XFx0aWYgKHJkc19pYl9zeXNjdGxfZmxvd19jb250cm9sIFxcdTAwMjZcXHUwMDI2IGNyZWRpdHMgIT0gMCkge1xcbm5ldC9yZHMvaWJfY20uYy02Mi1cXHRcXHQvKiBXZSdyZSBkb2luZyBmbG93IGNvbnRyb2wgKi9cXG5uZXQvcmRzL2liX2NtLmMtNjMtXFx0XFx0aWMtXFx1MDAzZWlfZmxvd2N0bCA9IDE7XFxubmV0L3Jkcy9pYl9jbS5jOjY0OlxcdFxcdHJkc19pYl9zZW5kX2FkZF9jcmVkaXRzKGNvbm4sIGNyZWRpdHMpO1xcbm5ldC9yZHMvaWJfY20uYy02NS1cXHR9IGVsc2Uge1xcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTczLSAqL1xcbm5ldC9yZHMvaWJfY20uYzo3NDp2b2lkIHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHJkbWFfY21fZXZlbnQgKmV2ZW50KVxcbm5ldC9yZHMvaWJfY20uYy03NS17XFxubmV0L3Jkcy9pYl9jbS5jOjc2OlxcdHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLVxcdTAwM2VjX3RyYW5zcG9ydF9kYXRhO1xcbm5ldC9yZHMvaWJfY20uYzo3NzpcXHRjb25zdCB1bmlvbiByZHNfaWJfY29ubl9wcml2ICpkcCA9IE5VTEw7XFxubmV0L3Jkcy9pYl9jbS5jLTc4LVxcdF9fYmU2NCBhY2tfc2VxID0gMDtcXG4tLVxcbm5ldC9yZHMvaWJfY20uYy05OC1cXHR9IGVsc2UgaWYgKGV2ZW50LVxcdTAwM2VwYXJhbS5jb25uLnByaXZhdGVfZGF0YV9sZW4gXFx1MDAzZT1cXG5uZXQvcmRzL2liX2NtLmM6OTk6XFx0XFx0ICAgc2l6ZW9mKHN0cnVjdCByZHNfaWJfY29ubmVjdF9wcml2YXRlKSkge1xcbm5ldC9yZHMvaWJfY20uYy0xMDAtXFx0XFx0bWFqb3IgPSBkcC1cXHUwMDNlcmljcF92NC5kcF9wcm90b2NvbF9tYWpvcjtcXG4tLVxcbm5ldC9yZHMvaWJfY20uYy0xMDctXFx0aWYgKG1ham9yKSB7XFxubmV0L3Jkcy9pYl9jbS5jOjEwODpcXHRcXHRyZHNfaWJfc2V0X3Byb3RvY29sKGNvbm4sIFJEU19QUk9UT0NPTChtYWpvciwgbWlub3IpKTtcXG5uZXQvcmRzL2liX2NtLmM6MTA5OlxcdFxcdHJkc19pYl9zZXRfZmxvd19jb250cm9sKGNvbm4sIGJlMzJfdG9fY3B1KGNyZWRpdCkpO1xcbm5ldC9yZHMvaWJfY20uYy0xMTAtXFx0fVxcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTEzOC1cXHQgKi9cXG5uZXQvcmRzL2liX2NtLmM6MTM5OlxcdHJkc19pYl9zZW5kX2luaXRfcmluZyhpYyk7XFxubmV0L3Jkcy9pYl9jbS5jOjE0MDpcXHRyZHNfaWJfcmVjdl9pbml0X3JpbmcoaWMpO1xcbm5ldC9yZHMvaWJfY20uYy0xNDEtXFx0LyogUG9zdCByZWNlaXZlIGJ1ZmZlcnMgLSBhcyBhIHNpZGUgZWZmZWN0LCB0aGlzIHdpbGwgdXBkYXRlXFxubmV0L3Jkcy9pYl9jbS5jLTE0Mi1cXHQgKiB0aGUgcG9zdGVkIGNyZWRpdCBjb3VudC4gKi9cXG5uZXQvcmRzL2liX2NtLmM6MTQzOlxcdHJkc19pYl9yZWN2X3JlZmlsbChjb25uLCAxLCBHRlBfS0VSTkVMKTtcXG5uZXQvcmRzL2liX2NtLmMtMTQ0LVxcbm5ldC9yZHMvaWJfY20uYy0xNDUtXFx0LyogdXBkYXRlIGliX2RldmljZSB3aXRoIHRoaXMgbG9jYWwgaXBhZGRyICovXFxubmV0L3Jkcy9pYl9jbS5jOjE0NjpcXHRlcnIgPSByZHNfaWJfdXBkYXRlX2lwYWRkcihpYy1cXHUwMDNlcmRzX2liZGV2LCBcXHUwMDI2Y29ubi1cXHUwMDNlY19sYWRkcik7XFxubmV0L3Jkcy9pYl9jbS5jLTE0Ny1cXHRpZiAoZXJyKVxcbm5ldC9yZHMvaWJfY20uYzoxNDg6XFx0XFx0cHJpbnRrKEtFUk5fRVJSIFxcXCJyZHNfaWJfdXBkYXRlX2lwYWRkciBmYWlsZWQgKCVkKVxcXFxuXFxcIixcXG5uZXQvcmRzL2liX2NtLmMtMTQ5LVxcdFxcdFxcdGVycik7XFxuLS1cXG5uZXQvcmRzL2liX2NtLmMtMTYyLVxcbm5ldC9yZHMvaWJfY20uYzoxNjM6c3RhdGljIHZvaWQgcmRzX2liX2NtX2ZpbGxfY29ubl9wYXJhbShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sXFxubmV0L3Jkcy9pYl9jbS5jLTE2NC1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgcmRtYV9jb25uX3BhcmFtICpjb25uX3BhcmFtLFxcbm5ldC9yZHMvaWJfY20uYzoxNjU6XFx0XFx0XFx0XFx0ICAgICAgdW5pb24gcmRzX2liX2Nvbm5fcHJpdiAqZHAsXFxubmV0L3Jkcy9pYl9jbS5jLTE2Ni1cXHRcXHRcXHRcXHQgICAgICB1MzIgcHJvdG9jb2xfdmVyc2lvbixcXG4tLVxcbm5ldC9yZHMvaWJfY20uYy0xNzAte1xcbm5ldC9yZHMvaWJfY20uYzoxNzE6XFx0c3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tXFx1MDAzZWNfdHJhbnNwb3J0X2RhdGE7XFxubmV0L3Jkcy9pYl9jbS5jOjE3MjpcXHRzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2ID0gaWMtXFx1MDAzZXJkc19pYmRldjtcXG5uZXQvcmRzL2liX2NtLmMtMTczLVxcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTE3OS1cXHRcXHRtaW5fdCh1MzIsIHJkc19pYmRldi1cXHUwMDNlbWF4X2luaXRpYXRvcl9kZXB0aCwgbWF4X2luaXRpYXRvcl9kZXB0aCk7XFxubmV0L3Jkcy9pYl9jbS5jOjE4MDpcXHRjb25uX3BhcmFtLVxcdTAwM2VyZXRyeV9jb3VudCA9IG1pbl90KHVuc2lnbmVkIGludCwgcmRzX2liX3JldHJ5X2NvdW50LCA3KTtcXG5uZXQvcmRzL2liX2NtLmMtMTgxLVxcdGNvbm5fcGFyYW0tXFx1MDAzZXJucl9yZXRyeV9jb3VudCA9IDc7XFxuLS1cXG5uZXQvcmRzL2liX2NtLmMtMTk0LVxcdFxcdFxcdGRwLVxcdTAwM2VyaWNwX3Y2LmRwX2Fja19zZXEgPVxcbm5ldC9yZHMvaWJfY20uYzoxOTU6XFx0XFx0XFx0ICAgIGNwdV90b19iZTY0KHJkc19pYl9waWdneWJfYWNrKGljKSk7XFxubmV0L3Jkcy9pYl9jbS5jLTE5Ni1cXHRcXHRcXHRkcC1cXHUwMDNlcmljcF92Ni5kcF9jbW4ucmljcGNfZHBfdG9zcyA9IGNvbm4tXFx1MDAzZWNfdG9zO1xcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTIwOS1cXHRcXHRcXHRkcC1cXHUwMDNlcmljcF92NC5kcF9hY2tfc2VxID1cXG5uZXQvcmRzL2liX2NtLmM6MjEwOlxcdFxcdFxcdCAgICBjcHVfdG9fYmU2NChyZHNfaWJfcGlnZ3liX2FjayhpYykpO1xcbm5ldC9yZHMvaWJfY20uYy0yMTEtXFx0XFx0XFx0ZHAtXFx1MDAzZXJpY3BfdjQuZHBfY21uLnJpY3BjX2RwX3Rvc3MgPSBjb25uLVxcdTAwM2VjX3RvcztcXG4tLVxcbm5ldC9yZHMvaWJfY20uYy0yMzItXFxubmV0L3Jkcy9pYl9jbS5jOjIzMzpzdGF0aWMgdm9pZCByZHNfaWJfY3FfZXZlbnRfaGFuZGxlcihzdHJ1Y3QgaWJfZXZlbnQgKmV2ZW50LCB2b2lkICpkYXRhKVxcbm5ldC9yZHMvaWJfY20uYy0yMzQte1xcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTI0Ni0gKi9cXG5uZXQvcmRzL2liX2NtLmM6MjQ3OnN0YXRpYyB2b2lkIHJkc19pYl9jcV9jb21wX2hhbmRsZXJfcmVjdihzdHJ1Y3QgaWJfY3EgKmNxLCB2b2lkICpjb250ZXh0KVxcbm5ldC9yZHMvaWJfY20uYy0yNDgte1xcbm5ldC9yZHMvaWJfY20uYy0yNDktXFx0c3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gY29udGV4dDtcXG5uZXQvcmRzL2liX2NtLmM6MjUwOlxcdHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLVxcdTAwM2VjX3RyYW5zcG9ydF9kYXRhO1xcbm5ldC9yZHMvaWJfY20uYy0yNTEtXFxuLS1cXG5uZXQvcmRzL2liX2NtLmMtMjUzLVxcbm5ldC9yZHMvaWJfY20uYzoyNTQ6XFx0cmRzX2liX3N0YXRzX2luYyhzX2liX2V2dF9oYW5kbGVyX2NhbGwpO1xcbm5ldC9yZHMvaWJfY20uYy0yNTUtXFxuLS1cXG5uZXQvcmRzL2liX2NtLmMtMjU4LVxcbm5ldC9yZHMvaWJfY20uYzoyNTk6c3RhdGljIHZvaWQgcG9sbF9zY3Eoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywgc3RydWN0IGliX2NxICpjcSxcXG5uZXQvcmRzL2liX2NtLmMtMjYwLVxcdFxcdCAgICAgc3RydWN0IGliX3djICp3Y3MpXFxuLS1cXG5uZXQvcmRzL2liX2NtLmMtMjczLVxcdFxcdFxcdCAgICB3Yy1cXHUwMDNld3JfaWQgPT0gUkRTX0lCX0FDS19XUl9JRClcXG5uZXQvcmRzL2liX2NtLmM6Mjc0OlxcdFxcdFxcdFxcdHJkc19pYl9zZW5kX2NxZV9oYW5kbGVyKGljLCB3Yyk7XFxubmV0L3Jkcy9pYl9jbS5jLTI3NS1cXHRcXHRcXHRlbHNlXFxubmV0L3Jkcy9pYl9jbS5jOjI3NjpcXHRcXHRcXHRcXHRyZHNfaWJfbXJfY3FlX2hhbmRsZXIoaWMsIHdjKTtcXG5uZXQvcmRzL2liX2NtLmMtMjc3LVxcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTI4MS1cXG5uZXQvcmRzL2liX2NtLmM6MjgyOnN0YXRpYyB2b2lkIHJkc19pYl90YXNrbGV0X2ZuX3NlbmQodW5zaWduZWQgbG9uZyBkYXRhKVxcbm5ldC9yZHMvaWJfY20uYy0yODMte1xcbm5ldC9yZHMvaWJfY20uYzoyODQ6XFx0c3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IChzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKilkYXRhO1xcbm5ldC9yZHMvaWJfY20uYy0yODUtXFx0c3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gaWMtXFx1MDAzZWNvbm47XFxubmV0L3Jkcy9pYl9jbS5jLTI4Ni1cXG5uZXQvcmRzL2liX2NtLmM6Mjg3OlxcdHJkc19pYl9zdGF0c19pbmMoc19pYl90YXNrbGV0X2NhbGwpO1xcbm5ldC9yZHMvaWJfY20uYy0yODgtXFxuLS1cXG5uZXQvcmRzL2liX2NtLmMtMzAyLVxcbm5ldC9yZHMvaWJfY20uYzozMDM6c3RhdGljIHZvaWQgcG9sbF9yY3Eoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywgc3RydWN0IGliX2NxICpjcSxcXG5uZXQvcmRzL2liX2NtLmMtMzA0LVxcdFxcdCAgICAgc3RydWN0IGliX3djICp3Y3MsXFxubmV0L3Jkcy9pYl9jbS5jOjMwNTpcXHRcXHQgICAgIHN0cnVjdCByZHNfaWJfYWNrX3N0YXRlICphY2tfc3RhdGUpXFxubmV0L3Jkcy9pYl9jbS5jLTMwNi17XFxuLS1cXG5uZXQvcmRzL2liX2NtLmMtMzE2LVxcbm5ldC9yZHMvaWJfY20uYzozMTc6XFx0XFx0XFx0cmRzX2liX3JlY3ZfY3FlX2hhbmRsZXIoaWMsIHdjLCBhY2tfc3RhdGUpO1xcbm5ldC9yZHMvaWJfY20uYy0zMTgtXFx0XFx0fVxcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTMyMS1cXG5uZXQvcmRzL2liX2NtLmM6MzIyOnN0YXRpYyB2b2lkIHJkc19pYl90YXNrbGV0X2ZuX3JlY3YodW5zaWduZWQgbG9uZyBkYXRhKVxcbm5ldC9yZHMvaWJfY20uYy0zMjMte1xcbm5ldC9yZHMvaWJfY20uYzozMjQ6XFx0c3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IChzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKilkYXRhO1xcbm5ldC9yZHMvaWJfY20uYy0zMjUtXFx0c3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gaWMtXFx1MDAzZWNvbm47XFxubmV0L3Jkcy9pYl9jbS5jOjMyNjpcXHRzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2ID0gaWMtXFx1MDAzZXJkc19pYmRldjtcXG5uZXQvcmRzL2liX2NtLmM6MzI3OlxcdHN0cnVjdCByZHNfaWJfYWNrX3N0YXRlIHN0YXRlO1xcbm5ldC9yZHMvaWJfY20uYy0zMjgtXFxuLS1cXG5uZXQvcmRzL2liX2NtLmMtMzMxLVxcbm5ldC9yZHMvaWJfY20uYzozMzI6XFx0cmRzX2liX3N0YXRzX2luYyhzX2liX3Rhc2tsZXRfY2FsbCk7XFxubmV0L3Jkcy9pYl9jbS5jLTMzMy1cXG4tLVxcbm5ldC9yZHMvaWJfY20uYy0zNDMtXFx0aWYgKHN0YXRlLmFja19uZXh0X3ZhbGlkKVxcbm5ldC9yZHMvaWJfY20uYzozNDQ6XFx0XFx0cmRzX2liX3NldF9hY2soaWMsIHN0YXRlLmFja19uZXh0LCBzdGF0ZS5hY2tfcmVxdWlyZWQpO1xcbm5ldC9yZHMvaWJfY20uYy0zNDUtXFx0aWYgKHN0YXRlLmFja19yZWN2X3ZhbGlkIFxcdTAwMjZcXHUwMDI2IHN0YXRlLmFja19yZWN2IFxcdTAwM2UgaWMtXFx1MDAzZWlfYWNrX3JlY3YpIHtcXG4tLVxcbm5ldC9yZHMvaWJfY20uYy0zNTAtXFx0aWYgKHJkc19jb25uX3VwKGNvbm4pKVxcbm5ldC9yZHMvaWJfY20uYzozNTE6XFx0XFx0cmRzX2liX2F0dGVtcHRfYWNrKGljKTtcXG5uZXQvcmRzL2liX2NtLmMtMzUyLX1cXG5uZXQvcmRzL2liX2NtLmMtMzUzLVxcbm5ldC9yZHMvaWJfY20uYzozNTQ6c3RhdGljIHZvaWQgcmRzX2liX3FwX2V2ZW50X2hhbmRsZXIoc3RydWN0IGliX2V2ZW50ICpldmVudCwgdm9pZCAqZGF0YSlcXG5uZXQvcmRzL2liX2NtLmMtMzU1LXtcXG5uZXQvcmRzL2liX2NtLmMtMzU2LVxcdHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGRhdGE7XFxubmV0L3Jkcy9pYl9jbS5jOjM1NzpcXHRzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi1cXHUwMDNlY190cmFuc3BvcnRfZGF0YTtcXG5uZXQvcmRzL2liX2NtLmMtMzU4LVxcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTM3NC1cXG5uZXQvcmRzL2liX2NtLmM6Mzc1OnN0YXRpYyB2b2lkIHJkc19pYl9jcV9jb21wX2hhbmRsZXJfc2VuZChzdHJ1Y3QgaWJfY3EgKmNxLCB2b2lkICpjb250ZXh0KVxcbm5ldC9yZHMvaWJfY20uYy0zNzYte1xcbm5ldC9yZHMvaWJfY20uYy0zNzctXFx0c3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gY29udGV4dDtcXG5uZXQvcmRzL2liX2NtLmM6Mzc4OlxcdHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLVxcdTAwM2VjX3RyYW5zcG9ydF9kYXRhO1xcbm5ldC9yZHMvaWJfY20uYy0zNzktXFxuLS1cXG5uZXQvcmRzL2liX2NtLmMtMzgxLVxcbm5ldC9yZHMvaWJfY20uYzozODI6XFx0cmRzX2liX3N0YXRzX2luYyhzX2liX2V2dF9oYW5kbGVyX2NhbGwpO1xcbm5ldC9yZHMvaWJfY20uYy0zODMtXFxuLS1cXG5uZXQvcmRzL2liX2NtLmMtMzg2LVxcbm5ldC9yZHMvaWJfY20uYzozODc6c3RhdGljIGlubGluZSBpbnQgaWJkZXZfZ2V0X3VudXNlZF92ZWN0b3Ioc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldilcXG5uZXQvcmRzL2liX2NtLmMtMzg4LXtcXG4tLVxcbm5ldC9yZHMvaWJfY20uYy00MDMtXFxubmV0L3Jkcy9pYl9jbS5jOjQwNDpzdGF0aWMgaW5saW5lIHZvaWQgaWJkZXZfcHV0X3ZlY3RvcihzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2LCBpbnQgaW5kZXgpXFxubmV0L3Jkcy9pYl9jbS5jLTQwNS17XFxuLS1cXG5uZXQvcmRzL2liX2NtLmM9NDE2PXN0YXRpYyBzdHJ1Y3QgcmRzX2hlYWRlciAqcmRzX2RtYV9oZHJfYWxsb2Moc3RydWN0IGliX2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTQ0MS0gKi9cXG5uZXQvcmRzL2liX2NtLmM6NDQyOnN0YXRpYyB2b2lkIHJkc19kbWFfaGRyc19mcmVlKHN0cnVjdCByZHNfaWJfZGV2aWNlICpkZXYsXFxubmV0L3Jkcy9pYl9jbS5jLTQ0My1cXHRcXHRzdHJ1Y3QgcmRzX2hlYWRlciAqKmhkcnMsIGRtYV9hZGRyX3QgKmRtYV9hZGRycywgdTMyIG51bV9oZHJzLFxcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTQ2NS0gKi9cXG5uZXQvcmRzL2liX2NtLmM6NDY2OnN0YXRpYyBzdHJ1Y3QgcmRzX2hlYWRlciAqKnJkc19kbWFfaGRyc19hbGxvYyhzdHJ1Y3QgcmRzX2liX2RldmljZSAqZGV2LFxcbm5ldC9yZHMvaWJfY20uYy00NjctXFx0XFx0ZG1hX2FkZHJfdCAqKmRtYV9hZGRycywgdTMyIG51bV9oZHJzLFxcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTUwMS0gKi9cXG5uZXQvcmRzL2liX2NtLmM6NTAyOnN0YXRpYyBpbnQgcmRzX2liX3NldHVwX3FwKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubilcXG5uZXQvcmRzL2liX2NtLmMtNTAzLXtcXG5uZXQvcmRzL2liX2NtLmM6NTA0OlxcdHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLVxcdTAwM2VjX3RyYW5zcG9ydF9kYXRhO1xcbm5ldC9yZHMvaWJfY20uYy01MDUtXFx0c3RydWN0IGliX2RldmljZSAqZGV2ID0gaWMtXFx1MDAzZWlfY21faWQtXFx1MDAzZWRldmljZTtcXG4tLVxcbm5ldC9yZHMvaWJfY20uYy01MDctXFx0c3RydWN0IGliX2NxX2luaXRfYXR0ciBjcV9hdHRyID0ge307XFxubmV0L3Jkcy9pYl9jbS5jOjUwODpcXHRzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2O1xcbm5ldC9yZHMvaWJfY20uYy01MDktXFx0dW5zaWduZWQgbG9uZyBtYXhfd3JzO1xcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTUxNS1cXHQgKi9cXG5uZXQvcmRzL2liX2NtLmM6NTE2OlxcdHJkc19pYmRldiA9IHJkc19pYl9nZXRfY2xpZW50X2RhdGEoZGV2KTtcXG5uZXQvcmRzL2liX2NtLmMtNTE3LVxcdGlmICghcmRzX2liZGV2KVxcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTUyNi1cXHQvKiBhZGQgdGhlIGNvbm4gbm93IHNvIHRoYXQgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGhhcyB0aGUgZGV2ICovXFxubmV0L3Jkcy9pYl9jbS5jOjUyNzpcXHRyZHNfaWJfYWRkX2Nvbm4ocmRzX2liZGV2LCBjb25uKTtcXG5uZXQvcmRzL2liX2NtLmMtNTI4LVxcbm5ldC9yZHMvaWJfY20uYzo1Mjk6XFx0bWF4X3dycyA9IHJkc19pYmRldi1cXHUwMDNlbWF4X3dycyBcXHUwMDNjIHJkc19pYl9zeXNjdGxfbWF4X3NlbmRfd3IgKyAxID9cXG5uZXQvcmRzL2liX2NtLmM6NTMwOlxcdFxcdHJkc19pYmRldi1cXHUwMDNlbWF4X3dycyAtIDEgOiByZHNfaWJfc3lzY3RsX21heF9zZW5kX3dyO1xcbm5ldC9yZHMvaWJfY20uYy01MzEtXFx0aWYgKGljLVxcdTAwM2VpX3NlbmRfcmluZy53X25yICE9IG1heF93cnMpXFxubmV0L3Jkcy9pYl9jbS5jOjUzMjpcXHRcXHRyZHNfaWJfcmluZ19yZXNpemUoXFx1MDAyNmljLVxcdTAwM2VpX3NlbmRfcmluZywgbWF4X3dycyk7XFxubmV0L3Jkcy9pYl9jbS5jLTUzMy1cXG5uZXQvcmRzL2liX2NtLmM6NTM0OlxcdG1heF93cnMgPSByZHNfaWJkZXYtXFx1MDAzZW1heF93cnMgXFx1MDAzYyByZHNfaWJfc3lzY3RsX21heF9yZWN2X3dyICsgMSA/XFxubmV0L3Jkcy9pYl9jbS5jOjUzNTpcXHRcXHRyZHNfaWJkZXYtXFx1MDAzZW1heF93cnMgLSAxIDogcmRzX2liX3N5c2N0bF9tYXhfcmVjdl93cjtcXG5uZXQvcmRzL2liX2NtLmMtNTM2LVxcdGlmIChpYy1cXHUwMDNlaV9yZWN2X3Jpbmcud19uciAhPSBtYXhfd3JzKVxcbm5ldC9yZHMvaWJfY20uYzo1Mzc6XFx0XFx0cmRzX2liX3JpbmdfcmVzaXplKFxcdTAwMjZpYy1cXHUwMDNlaV9yZWN2X3JpbmcsIG1heF93cnMpO1xcbm5ldC9yZHMvaWJfY20uYy01MzgtXFxuLS1cXG5uZXQvcmRzL2liX2NtLmMtNTQ0LVxcdGNxX2F0dHIuY29tcF92ZWN0b3IgPSBpYy1cXHUwMDNlaV9zY3FfdmVjdG9yO1xcbm5ldC9yZHMvaWJfY20uYzo1NDU6XFx0aWMtXFx1MDAzZWlfc2VuZF9jcSA9IGliX2NyZWF0ZV9jcShkZXYsIHJkc19pYl9jcV9jb21wX2hhbmRsZXJfc2VuZCxcXG5uZXQvcmRzL2liX2NtLmM6NTQ2OlxcdFxcdFxcdFxcdCAgICAgcmRzX2liX2NxX2V2ZW50X2hhbmRsZXIsIGNvbm4sXFxubmV0L3Jkcy9pYl9jbS5jLTU0Ny1cXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZjcV9hdHRyKTtcXG4tLVxcbm5ldC9yZHMvaWJfY20uYy01NTgtXFx0Y3FfYXR0ci5jb21wX3ZlY3RvciA9IGljLVxcdTAwM2VpX3JjcV92ZWN0b3I7XFxubmV0L3Jkcy9pYl9jbS5jOjU1OTpcXHRpYy1cXHUwMDNlaV9yZWN2X2NxID0gaWJfY3JlYXRlX2NxKGRldiwgcmRzX2liX2NxX2NvbXBfaGFuZGxlcl9yZWN2LFxcbm5ldC9yZHMvaWJfY20uYzo1NjA6XFx0XFx0XFx0XFx0ICAgICByZHNfaWJfY3FfZXZlbnRfaGFuZGxlciwgY29ubixcXG5uZXQvcmRzL2liX2NtLmMtNTYxLVxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmNxX2F0dHIpO1xcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTU4My1cXHRtZW1zZXQoXFx1MDAyNmF0dHIsIDAsIHNpemVvZihhdHRyKSk7XFxubmV0L3Jkcy9pYl9jbS5jOjU4NDpcXHRhdHRyLmV2ZW50X2hhbmRsZXIgPSByZHNfaWJfcXBfZXZlbnRfaGFuZGxlcjtcXG5uZXQvcmRzL2liX2NtLmMtNTg1LVxcdGF0dHIucXBfY29udGV4dCA9IGNvbm47XFxuLS1cXG5uZXQvcmRzL2liX2NtLmMtNjMxLVxcbm5ldC9yZHMvaWJfY20uYzo2MzI6XFx0aWMtXFx1MDAzZWlfc2VuZHMgPSB2emFsbG9jX25vZGUoYXJyYXlfc2l6ZShzaXplb2Yoc3RydWN0IHJkc19pYl9zZW5kX3dvcmspLFxcbm5ldC9yZHMvaWJfY20uYy02MzMtXFx0XFx0XFx0XFx0XFx0ICAgICAgaWMtXFx1MDAzZWlfc2VuZF9yaW5nLndfbnIpLFxcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTY0MC1cXG5uZXQvcmRzL2liX2NtLmM6NjQxOlxcdGljLVxcdTAwM2VpX3JlY3ZzID0gdnphbGxvY19ub2RlKGFycmF5X3NpemUoc2l6ZW9mKHN0cnVjdCByZHNfaWJfcmVjdl93b3JrKSxcXG5uZXQvcmRzL2liX2NtLmMtNjQyLVxcdFxcdFxcdFxcdFxcdCAgICAgIGljLVxcdTAwM2VpX3JlY3ZfcmluZy53X25yKSxcXG4tLVxcbm5ldC9yZHMvaWJfY20uYy02NDktXFxubmV0L3Jkcy9pYl9jbS5jOjY1MDpcXHRyZHNfaWJfcmVjdl9pbml0X2FjayhpYyk7XFxubmV0L3Jkcy9pYl9jbS5jLTY1MS1cXG4tLVxcbm5ldC9yZHMvaWJfY20uYy02ODYtcmRzX2liZGV2X291dDpcXG5uZXQvcmRzL2liX2NtLmM6Njg3OlxcdHJkc19pYl9yZW1vdmVfY29ubihyZHNfaWJkZXYsIGNvbm4pO1xcbm5ldC9yZHMvaWJfY20uYy02ODgtb3V0Olxcbm5ldC9yZHMvaWJfY20uYzo2ODk6XFx0cmRzX2liX2Rldl9wdXQocmRzX2liZGV2KTtcXG5uZXQvcmRzL2liX2NtLmMtNjkwLVxcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTY5My1cXG5uZXQvcmRzL2liX2NtLmM6Njk0OnN0YXRpYyB1MzIgcmRzX2liX3Byb3RvY29sX2NvbXBhdGlibGUoc3RydWN0IHJkbWFfY21fZXZlbnQgKmV2ZW50LCBib29sIGlzdjYpXFxubmV0L3Jkcy9pYl9jbS5jLTY5NS17XFxubmV0L3Jkcy9pYl9jbS5jOjY5NjpcXHRjb25zdCB1bmlvbiByZHNfaWJfY29ubl9wcml2ICpkcCA9IGV2ZW50LVxcdTAwM2VwYXJhbS5jb25uLnByaXZhdGVfZGF0YTtcXG5uZXQvcmRzL2liX2NtLmMtNjk3LVxcdHU4IGRhdGFfbGVuLCBtYWpvciwgbWlub3I7XFxuLS1cXG5uZXQvcmRzL2liX2NtLmMtNzI0LVxcdH0gZWxzZSB7XFxubmV0L3Jkcy9pYl9jbS5jOjcyNTpcXHRcXHRkYXRhX2xlbiA9IHNpemVvZihzdHJ1Y3QgcmRzX2liX2Nvbm5lY3RfcHJpdmF0ZSk7XFxubmV0L3Jkcy9pYl9jbS5jLTcyNi1cXHRcXHRtYWpvciA9IGRwLVxcdTAwM2VyaWNwX3Y0LmRwX3Byb3RvY29sX21ham9yO1xcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTc1NS0vKiBHaXZlbiBhbiBJUHY2IGFkZHJlc3MsIGZpbmQgdGhlIG5ldF9kZXZpY2Ugd2hpY2ggaG9zdHMgdGhhdCBhZGRyZXNzIGFuZFxcbm5ldC9yZHMvaWJfY20uYzo3NTY6ICogcmV0dXJuIGl0cyBpbmRleC4gIFRoaXMgaXMgdXNlZCBieSB0aGUgcmRzX2liX2NtX2hhbmRsZV9jb25uZWN0KCkgY29kZSB0b1xcbm5ldC9yZHMvaWJfY20uYy03NTctICogZmluZCB0aGUgaW50ZXJmYWNlIGluZGV4IG9mIHdoZXJlIGFuIGluY29taW5nIHJlcXVlc3QgY29tZXMgZnJvbSB3aGVuXFxuLS1cXG5uZXQvcmRzL2liX2NtLmM9NzY1PXN0YXRpYyB1MzIgX19yZHNfZmluZF9pZmluZGV4KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKVxcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTc4Mi1cXG5uZXQvcmRzL2liX2NtLmM6NzgzOmludCByZHNfaWJfY21faGFuZGxlX2Nvbm5lY3Qoc3RydWN0IHJkbWFfY21faWQgKmNtX2lkLFxcbm5ldC9yZHMvaWJfY20uYy03ODQtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgcmRtYV9jbV9ldmVudCAqZXZlbnQsIGJvb2wgaXN2NilcXG4tLVxcbm5ldC9yZHMvaWJfY20uYy03ODctXFx0X19iZTY0IGZndWlkID0gY21faWQtXFx1MDAzZXJvdXRlLnBhdGhfcmVjLVxcdTAwM2VkZ2lkLmdsb2JhbC5pbnRlcmZhY2VfaWQ7XFxubmV0L3Jkcy9pYl9jbS5jOjc4ODpcXHRjb25zdCBzdHJ1Y3QgcmRzX2liX2Nvbm5fcHJpdl9jbW4gKmRwX2NtbjtcXG5uZXQvcmRzL2liX2NtLmMtNzg5LVxcdHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IE5VTEw7XFxubmV0L3Jkcy9pYl9jbS5jOjc5MDpcXHRzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gTlVMTDtcXG5uZXQvcmRzL2liX2NtLmMtNzkxLVxcdHN0cnVjdCByZG1hX2Nvbm5fcGFyYW0gY29ubl9wYXJhbTtcXG5uZXQvcmRzL2liX2NtLmM6NzkyOlxcdGNvbnN0IHVuaW9uIHJkc19pYl9jb25uX3ByaXYgKmRwO1xcbm5ldC9yZHMvaWJfY20uYzo3OTM6XFx0dW5pb24gcmRzX2liX2Nvbm5fcHJpdiBkcF9yZXA7XFxubmV0L3Jkcy9pYl9jbS5jLTc5NC1cXHRzdHJ1Y3QgaW42X2FkZHIgc19tYXBwZWRfYWRkcjtcXG4tLVxcbm5ldC9yZHMvaWJfY20uYy04MDMtXFx0LyogQ2hlY2sgd2hldGhlciB0aGUgcmVtb3RlIHByb3RvY29sIHZlcnNpb24gbWF0Y2hlcyBvdXJzLiAqL1xcbm5ldC9yZHMvaWJfY20uYzo4MDQ6XFx0dmVyc2lvbiA9IHJkc19pYl9wcm90b2NvbF9jb21wYXRpYmxlKGV2ZW50LCBpc3Y2KTtcXG5uZXQvcmRzL2liX2NtLmMtODA1LVxcdGlmICghdmVyc2lvbikge1xcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTg2MC1cXHRjb25uID0gcmRzX2Nvbm5fY3JlYXRlKFxcdTAwMjZpbml0X25ldCwgZGFkZHI2LCBzYWRkcjYsXFxubmV0L3Jkcy9pYl9jbS5jOjg2MTpcXHRcXHRcXHQgICAgICAgXFx1MDAyNnJkc19pYl90cmFuc3BvcnQsIGRwX2Ntbi1cXHUwMDNlcmljcGNfZHBfdG9zcyxcXG5uZXQvcmRzL2liX2NtLmMtODYyLVxcdFxcdFxcdCAgICAgICBHRlBfS0VSTkVMLCBpZmluZGV4KTtcXG4tLVxcbm5ldC9yZHMvaWJfY20uYy04ODAtXFx0XFx0XFx0cmRzX2Nvbm5fZHJvcChjb25uKTtcXG5uZXQvcmRzL2liX2NtLmM6ODgxOlxcdFxcdFxcdHJkc19pYl9zdGF0c19pbmMoc19pYl9saXN0ZW5fY2xvc2VkX3N0YWxlKTtcXG5uZXQvcmRzL2liX2NtLmMtODgyLVxcdFxcdH0gZWxzZVxcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTg4NC1cXHRcXHRcXHQvKiBXYWl0IGFuZCBzZWUgLSBvdXIgY29ubmVjdCBtYXkgc3RpbGwgYmUgc3VjY2VlZGluZyAqL1xcbm5ldC9yZHMvaWJfY20uYzo4ODU6XFx0XFx0XFx0cmRzX2liX3N0YXRzX2luYyhzX2liX2Nvbm5lY3RfcmFjZWQpO1xcbm5ldC9yZHMvaWJfY20uYy04ODYtXFx0XFx0fVxcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTg5MS1cXG5uZXQvcmRzL2liX2NtLmM6ODkyOlxcdHJkc19pYl9zZXRfcHJvdG9jb2woY29ubiwgdmVyc2lvbik7XFxubmV0L3Jkcy9pYl9jbS5jOjg5MzpcXHRyZHNfaWJfc2V0X2Zsb3dfY29udHJvbChjb25uLCBiZTMyX3RvX2NwdShkcF9jbW4tXFx1MDAzZXJpY3BjX2NyZWRpdCkpO1xcbm5ldC9yZHMvaWJfY20uYy04OTQtXFxuLS1cXG5uZXQvcmRzL2liX2NtLmMtOTEwLVxcbm5ldC9yZHMvaWJfY20uYzo5MTE6XFx0ZXJyID0gcmRzX2liX3NldHVwX3FwKGNvbm4pO1xcbm5ldC9yZHMvaWJfY20uYy05MTItXFx0aWYgKGVycikge1xcbm5ldC9yZHMvaWJfY20uYzo5MTM6XFx0XFx0cmRzX2liX2Nvbm5fZXJyb3IoY29ubiwgXFxcInJkc19pYl9zZXR1cF9xcCBmYWlsZWQgKCVkKVxcXFxuXFxcIiwgZXJyKTtcXG5uZXQvcmRzL2liX2NtLmMtOTE0LVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTkxNi1cXG5uZXQvcmRzL2liX2NtLmM6OTE3OlxcdHJkc19pYl9jbV9maWxsX2Nvbm5fcGFyYW0oY29ubiwgXFx1MDAyNmNvbm5fcGFyYW0sIFxcdTAwMjZkcF9yZXAsIHZlcnNpb24sXFxubmV0L3Jkcy9pYl9jbS5jLTkxOC1cXHRcXHRcXHRcXHQgIGV2ZW50LVxcdTAwM2VwYXJhbS5jb25uLnJlc3BvbmRlcl9yZXNvdXJjZXMsXFxuLS1cXG5uZXQvcmRzL2liX2NtLmMtOTIzLVxcdGlmIChyZG1hX2FjY2VwdChjbV9pZCwgXFx1MDAyNmNvbm5fcGFyYW0pKVxcbm5ldC9yZHMvaWJfY20uYzo5MjQ6XFx0XFx0cmRzX2liX2Nvbm5fZXJyb3IoY29ubiwgXFxcInJkbWFfYWNjZXB0IGZhaWxlZFxcXFxuXFxcIik7XFxubmV0L3Jkcy9pYl9jbS5jLTkyNS1cXG4tLVxcbm5ldC9yZHMvaWJfY20uYy05MzUtXFxubmV0L3Jkcy9pYl9jbS5jOjkzNjppbnQgcmRzX2liX2NtX2luaXRpYXRlX2Nvbm5lY3Qoc3RydWN0IHJkbWFfY21faWQgKmNtX2lkLCBib29sIGlzdjYpXFxubmV0L3Jkcy9pYl9jbS5jLTkzNy17XFxubmV0L3Jkcy9pYl9jbS5jLTkzOC1cXHRzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBjbV9pZC1cXHUwMDNlY29udGV4dDtcXG5uZXQvcmRzL2liX2NtLmM6OTM5OlxcdHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLVxcdTAwM2VjX3RyYW5zcG9ydF9kYXRhO1xcbm5ldC9yZHMvaWJfY20uYy05NDAtXFx0c3RydWN0IHJkbWFfY29ubl9wYXJhbSBjb25uX3BhcmFtO1xcbm5ldC9yZHMvaWJfY20uYzo5NDE6XFx0dW5pb24gcmRzX2liX2Nvbm5fcHJpdiBkcDtcXG5uZXQvcmRzL2liX2NtLmMtOTQyLVxcdGludCByZXQ7XFxuLS1cXG5uZXQvcmRzL2liX2NtLmMtOTQ1LVxcdCAqIGRlZmF1bHQgdG8gUkRTdjMuMCAqL1xcbm5ldC9yZHMvaWJfY20uYzo5NDY6XFx0cmRzX2liX3NldF9wcm90b2NvbChjb25uLCBSRFNfUFJPVE9DT0xfNF8xKTtcXG5uZXQvcmRzL2liX2NtLmM6OTQ3OlxcdGljLVxcdTAwM2VpX2Zsb3djdGwgPSByZHNfaWJfc3lzY3RsX2Zsb3dfY29udHJvbDtcXHQvKiBhZHZlcnRpc2UgZmxvdyBjb250cm9sICovXFxubmV0L3Jkcy9pYl9jbS5jLTk0OC1cXG5uZXQvcmRzL2liX2NtLmM6OTQ5OlxcdHJldCA9IHJkc19pYl9zZXR1cF9xcChjb25uKTtcXG5uZXQvcmRzL2liX2NtLmMtOTUwLVxcdGlmIChyZXQpIHtcXG5uZXQvcmRzL2liX2NtLmM6OTUxOlxcdFxcdHJkc19pYl9jb25uX2Vycm9yKGNvbm4sIFxcXCJyZHNfaWJfc2V0dXBfcXAgZmFpbGVkICglZClcXFxcblxcXCIsIHJldCk7XFxubmV0L3Jkcy9pYl9jbS5jLTk1Mi1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbm5ldC9yZHMvaWJfY20uYy05NTQtXFxubmV0L3Jkcy9pYl9jbS5jOjk1NTpcXHRyZHNfaWJfY21fZmlsbF9jb25uX3BhcmFtKGNvbm4sIFxcdTAwMjZjb25uX3BhcmFtLCBcXHUwMDI2ZHAsXFxubmV0L3Jkcy9pYl9jbS5jLTk1Ni1cXHRcXHRcXHRcXHQgIGNvbm4tXFx1MDAzZWNfcHJvcG9zZWRfdmVyc2lvbixcXG4tLVxcbm5ldC9yZHMvaWJfY20uYy05NTktXFx0aWYgKHJldClcXG5uZXQvcmRzL2liX2NtLmM6OTYwOlxcdFxcdHJkc19pYl9jb25uX2Vycm9yKGNvbm4sIFxcXCJyZG1hX2Nvbm5lY3RfbG9ja2VkIGZhaWxlZCAoJWQpXFxcXG5cXFwiLFxcbm5ldC9yZHMvaWJfY20uYy05NjEtXFx0XFx0XFx0XFx0ICByZXQpO1xcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTk3NC1cXG5uZXQvcmRzL2liX2NtLmM6OTc1OmludCByZHNfaWJfY29ubl9wYXRoX2Nvbm5lY3Qoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxcbm5ldC9yZHMvaWJfY20uYy05NzYte1xcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTk3OS1cXHRyZG1hX2NtX2V2ZW50X2hhbmRsZXIgaGFuZGxlcjtcXG5uZXQvcmRzL2liX2NtLmM6OTgwOlxcdHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWM7XFxubmV0L3Jkcy9pYl9jbS5jLTk4MS1cXHRpbnQgcmV0O1xcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTEwNDUtXFxubmV0L3Jkcy9pYl9jbS5jOjEwNDY6c3RhdGljIHVuc2lnbmVkIGxvbmcgcmRzX2liX2Nvbm5fcGF0aF9zaHV0ZG93bl9jaGVja193YWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcXG5uZXQvcmRzL2liX2NtLmMtMTA0Ny17XFxubmV0L3Jkcy9pYl9jbS5jLTEwNDgtXFx0c3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gY3AtXFx1MDAzZWNwX2Nvbm47XFxubmV0L3Jkcy9pYl9jbS5jOjEwNDk6XFx0c3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tXFx1MDAzZWNfdHJhbnNwb3J0X2RhdGE7XFxubmV0L3Jkcy9pYl9jbS5jLTEwNTAtXFxubmV0L3Jkcy9pYl9jbS5jLTEwNTEtXFx0cmV0dXJuICghaWMtXFx1MDAzZWlfY21faWQgfHxcXG5uZXQvcmRzL2liX2NtLmM6MTA1MjpcXHRcXHQocmRzX2liX3JpbmdfZW1wdHkoXFx1MDAyNmljLVxcdTAwM2VpX3JlY3ZfcmluZykgXFx1MDAyNlxcdTAwMjZcXG5uZXQvcmRzL2liX2NtLmMtMTA1My1cXHRcXHQgKGF0b21pY19yZWFkKFxcdTAwMjZpYy1cXHUwMDNlaV9zaWduYWxlZF9zZW5kcykgPT0gMCkgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC9yZHMvaWJfY20uYy0xMDYzLSAqL1xcbm5ldC9yZHMvaWJfY20uYzoxMDY0OnZvaWQgcmRzX2liX2Nvbm5fcGF0aF9zaHV0ZG93bihzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXFxubmV0L3Jkcy9pYl9jbS5jLTEwNjUte1xcbm5ldC9yZHMvaWJfY20uYy0xMDY2LVxcdHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGNwLVxcdTAwM2VjcF9jb25uO1xcbm5ldC9yZHMvaWJfY20uYzoxMDY3OlxcdHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLVxcdTAwM2VjX3RyYW5zcG9ydF9kYXRhO1xcbm5ldC9yZHMvaWJfY20uYy0xMDY4LVxcdGludCBlcnIgPSAwO1xcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTEwODctXFx0XFx0ICovXFxubmV0L3Jkcy9pYl9jbS5jOjEwODg6XFx0XFx0cmRzX2liX2ZsdXNoX21ycygpO1xcbm5ldC9yZHMvaWJfY20uYy0xMDg5LVxcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTEwOTgtXFx0XFx0ICovXFxubmV0L3Jkcy9pYl9jbS5jOjEwOTk6XFx0XFx0d2hpbGUgKCF3YWl0X2V2ZW50X3RpbWVvdXQocmRzX2liX3JpbmdfZW1wdHlfd2FpdCxcXG5uZXQvcmRzL2liX2NtLmM6MTEwMDpcXHRcXHRcXHRcXHRcXHQgICByZHNfaWJfY29ubl9wYXRoX3NodXRkb3duX2NoZWNrX3dhaXQoY3ApID09IDAsXFxubmV0L3Jkcy9pYl9jbS5jLTExMDEtXFx0XFx0XFx0XFx0XFx0ICAgbXNlY3NfdG9famlmZmllcygxMDAwKSkpIHtcXG4tLVxcbm5ldC9yZHMvaWJfY20uYy0xMTYxLVxcdFxcdGlmIChpYy1cXHUwMDNlaV9zZW5kcylcXG5uZXQvcmRzL2liX2NtLmM6MTE2MjpcXHRcXHRcXHRyZHNfaWJfc2VuZF9jbGVhcl9yaW5nKGljKTtcXG5uZXQvcmRzL2liX2NtLmMtMTE2My1cXHRcXHRpZiAoaWMtXFx1MDAzZWlfcmVjdnMpXFxubmV0L3Jkcy9pYl9jbS5jOjExNjQ6XFx0XFx0XFx0cmRzX2liX3JlY3ZfY2xlYXJfcmluZyhpYyk7XFxubmV0L3Jkcy9pYl9jbS5jLTExNjUtXFxuLS1cXG5uZXQvcmRzL2liX2NtLmMtMTE3MS1cXHRcXHRpZiAoaWMtXFx1MDAzZXJkc19pYmRldilcXG5uZXQvcmRzL2liX2NtLmM6MTE3MjpcXHRcXHRcXHRyZHNfaWJfcmVtb3ZlX2Nvbm4oaWMtXFx1MDAzZXJkc19pYmRldiwgY29ubik7XFxubmV0L3Jkcy9pYl9jbS5jLTExNzMtXFxuLS1cXG5uZXQvcmRzL2liX2NtLmMtMTIwMy1cXHQvKiBSZS1pbml0IHJpbmdzLCBidXQgcmV0YWluIHNpemVzLiAqL1xcbm5ldC9yZHMvaWJfY20uYzoxMjA0OlxcdHJkc19pYl9yaW5nX2luaXQoXFx1MDAyNmljLVxcdTAwM2VpX3NlbmRfcmluZywgaWMtXFx1MDAzZWlfc2VuZF9yaW5nLndfbnIpO1xcbm5ldC9yZHMvaWJfY20uYzoxMjA1OlxcdHJkc19pYl9yaW5nX2luaXQoXFx1MDAyNmljLVxcdTAwM2VpX3JlY3ZfcmluZywgaWMtXFx1MDAzZWlfcmVjdl9yaW5nLndfbnIpO1xcbm5ldC9yZHMvaWJfY20uYy0xMjA2LVxcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTEyMTgtXFxubmV0L3Jkcy9pYl9jbS5jOjEyMTk6aW50IHJkc19pYl9jb25uX2FsbG9jKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgZ2ZwX3QgZ2ZwKVxcbm5ldC9yZHMvaWJfY20uYy0xMjIwLXtcXG5uZXQvcmRzL2liX2NtLmM6MTIyMTpcXHRzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljO1xcbm5ldC9yZHMvaWJfY20uYy0xMjIyLVxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuLS1cXG5uZXQvcmRzL2liX2NtLmMtMTIyNS1cXHQvKiBYWFggdG9vIGxhenk/ICovXFxubmV0L3Jkcy9pYl9jbS5jOjEyMjY6XFx0aWMgPSBremFsbG9jX29iaihzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24sIGdmcCk7XFxubmV0L3Jkcy9pYl9jbS5jLTEyMjctXFx0aWYgKCFpYylcXG4tLVxcbm5ldC9yZHMvaWJfY20uYy0xMjI5LVxcbm5ldC9yZHMvaWJfY20uYzoxMjMwOlxcdHJldCA9IHJkc19pYl9yZWN2X2FsbG9jX2NhY2hlcyhpYywgZ2ZwKTtcXG5uZXQvcmRzL2liX2NtLmMtMTIzMS1cXHRpZiAocmV0KSB7XFxuLS1cXG5uZXQvcmRzL2liX2NtLmMtMTIzNi1cXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2aWMtXFx1MDAzZWliX25vZGUpO1xcbm5ldC9yZHMvaWJfY20uYzoxMjM3OlxcdHRhc2tsZXRfaW5pdChcXHUwMDI2aWMtXFx1MDAzZWlfc2VuZF90YXNrbGV0LCByZHNfaWJfdGFza2xldF9mbl9zZW5kLFxcbm5ldC9yZHMvaWJfY20uYy0xMjM4LVxcdFxcdCAgICAgKHVuc2lnbmVkIGxvbmcpaWMpO1xcbm5ldC9yZHMvaWJfY20uYzoxMjM5OlxcdHRhc2tsZXRfaW5pdChcXHUwMDI2aWMtXFx1MDAzZWlfcmVjdl90YXNrbGV0LCByZHNfaWJfdGFza2xldF9mbl9yZWN2LFxcbm5ldC9yZHMvaWJfY20uYy0xMjQwLVxcdFxcdCAgICAgKHVuc2lnbmVkIGxvbmcpaWMpO1xcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTEyNDgtXFx0LypcXG5uZXQvcmRzL2liX2NtLmM6MTI0OTpcXHQgKiByZHNfaWJfY29ubl9zaHV0ZG93bigpIHdhaXRzIGZvciB0aGVzZSB0byBiZSBlbXB0aWVkIHNvIHRoZXlcXG5uZXQvcmRzL2liX2NtLmMtMTI1MC1cXHQgKiBtdXN0IGJlIGluaXRpYWxpemVkIGJlZm9yZSBpdCBjYW4gYmUgY2FsbGVkLlxcbm5ldC9yZHMvaWJfY20uYy0xMjUxLVxcdCAqL1xcbm5ldC9yZHMvaWJfY20uYzoxMjUyOlxcdHJkc19pYl9yaW5nX2luaXQoXFx1MDAyNmljLVxcdTAwM2VpX3NlbmRfcmluZywgMCk7XFxubmV0L3Jkcy9pYl9jbS5jOjEyNTM6XFx0cmRzX2liX3JpbmdfaW5pdChcXHUwMDI2aWMtXFx1MDAzZWlfcmVjdl9yaW5nLCAwKTtcXG5uZXQvcmRzL2liX2NtLmMtMTI1NC1cXG4tLVxcbm5ldC9yZHMvaWJfY20uYy0xMjY5LSAqL1xcbm5ldC9yZHMvaWJfY20uYzoxMjcwOnZvaWQgcmRzX2liX2Nvbm5fZnJlZSh2b2lkICphcmcpXFxubmV0L3Jkcy9pYl9jbS5jLTEyNzEte1xcbm5ldC9yZHMvaWJfY20uYzoxMjcyOlxcdHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBhcmc7XFxubmV0L3Jkcy9pYl9jbS5jLTEyNzMtXFx0c3BpbmxvY2tfdFxcdCpsb2NrX3B0cjtcXG4tLVxcbm5ldC9yZHMvaWJfY20uYy0xMjg3LVxcbm5ldC9yZHMvaWJfY20uYzoxMjg4OlxcdHJkc19pYl9yZWN2X2ZyZWVfY2FjaGVzKGljKTtcXG5uZXQvcmRzL2liX2NtLmMtMTI4OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6NTQ6MTUuNjE4MzAwNzg1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5NDA0NDI5MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhpcyBDb25maWd1cmF0aW9uIGFuZCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgdGhlIGRlcGVuZGVuY2llcyBzdHJhaWdodC4gTG9va2luZyBhdCBgbmV0L3Jkcy9LY29uZmlnYCwgaXQgY29uZmlybXMgdGhhdCBSRFMgZGVwZW5kcyBvbiBJTkVULCBhbmQgUkRTX1JETUEgbmVlZHMgYm90aCBSRFMgYW5kIElORklOSUJBTkQsIGFsb25nIHdpdGggSU5GSU5JQkFORF9BRERSX1RSQU5TLiBUaGF0IG1lYW5zIEkgKm11c3QqIGhhdmUgUkRTLCBSRFNfUkRNQSwgSU5GSU5JQkFORCwgYW5kIElORklOSUJBTkRfQUREUl9UUkFOUyBlbmFibGVkIGZvciB0aGlzIGNoYW5nZSB0byBiZSByZWxldmFudC4gR29vZCwgZ29vZC5cblxuTmV4dCwgSSdtIGZvY3VzaW5nIG9uIHRoZXNlIHN5bWJvbHM6IGByZHNfaWJfY21fY29ubmVjdF9jb21wbGV0ZWAsIGByZHNfcmRtYV9jbV9ldmVudF9oYW5kbGVyX2NtbmAsIGByZHNfaWJfY21faGFuZGxlX2Nvbm5lY3RgLCBhbmQgYHJkc19pYl9jbV9pbml0aWF0ZV9jb25uZWN0YC4gVGhlc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIEknbSBleHBlY3RpbmcgdG8gYmUgaW1wYWN0ZWQgYnkgdGhlIGNoYW5nZXMuIFNwZWNpZmljYWxseSwgSSBzZWUgdGhhdCB0aGUgcHJpbWFyeSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gYHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlYCwgY29uZmlybWVkIGJ5IHRoZSBsaW5lIG51bWJlciBtZW50aW9uZWQuXG5cbk5vdyBmb3IgdGhlIGNvcmUgb2YgdGhlIG1hdHRlcjogVGhpcyBwYXRjaCBsb29rcyBzb3VuZC4gVGhlIHJlYXNvbmluZyBpcyBjbGVhciBhbmQgY29uY2lzZTogaXQncyBmaXhpbmcgYW4gUkRTIG92ZXIgSW5maW5pQmFuZCBjb25uZWN0aW9uIGhhbmRsaW5nIGlzc3VlLiBUaGUgcGF0Y2ggcmVwbGFjZXMgYHJkc19jb25uX2Rlc3Ryb3koKWAgd2l0aCBgcmRzX2Nvbm5fZHJvcCgpYCBpbiBhIGNvbm5lY3Rpb24gY29tcGxldGUgZXZlbnQgd2hlbiBhbiB1bnN1cHBvcnRlZCBwcm90b2NvbCB2ZXJzaW9uIGlzIG5lZ290aWF0ZWQuIFRoaXMgaW5kaWNhdGVzIHRoYXQgd2UgYXJlIGNoYW5naW5nIGhvdyB1bnJlYWNoYWJsZSBuZXR3b3JrIC8gUkRTIHRlYXJkb3duIGxvZ2ljIGlzIGhhbmRsZWQuIFRoaXMgaXMgYSBjcml0aWNhbCBhZGp1c3RtZW50IHRvIHByZXZlbnQgcG90ZW50aWFsIGlzc3VlcyBkdXJpbmcgY29ubmVjdGlvbiBhdHRlbXB0cy4gQWxsIHRoZSBpbXBvcnRhbnQgcGllY2VzIGFyZSBoZXJlLlxuXG5UaGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBzZXQgdG8gdHJ1ZSwgd2hpY2ggaXMgYXBwcm9wcmlhdGUuIFRoZSBmb2N1cyBzeW1ib2xzIGFsaWduIHdpdGggdGhlIGRlc2NyaWJlZCBmaXgsIGFuZCBJIGhhdmUgdGhlIHJlcXVpcmVkIGNvbmZpZ3M6IGBSRFNgLCBgUkRTX1JETUFgLCBgSU5GSU5JQkFORGAsIGFuZCBgSU5GSU5JQkFORF9BRERSX1RSQU5TYC4gSSdtIHNhdGlzZmllZC5cblxuVGltZSB0byBpbnZva2UgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIxMTAsIk91dHB1dFRva2VucyI6MTUzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE0OjU0OjE5LjU1ODc0NzQ1N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NTg5MDc3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUkRTXCIsXG4gICAgXCJSRFNfUkRNQVwiLFxuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiSU5GSU5JQkFORF9BRERSX1RSQU5TXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGVcIixcbiAgICBcInJkc19yZG1hX2NtX2V2ZW50X2hhbmRsZXJfY21uXCIsXG4gICAgXCJyZHNfaWJfY21faGFuZGxlX2Nvbm5lY3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBSRFMgb3ZlciBJbmZpbmlCYW5kIGNvbm5lY3Rpb24gbGlmZWN5Y2xlIGhhbmRsaW5nIGJ5IGNoYW5naW5nIGByZHNfY29ubl9kZXN0cm95YCB0byBgcmRzX2Nvbm5fZHJvcGAgd2hlbiBlbmNvdW50ZXJpbmcgdW5zdXBwb3J0ZWQgcHJvdG9jb2wgdmVyc2lvbnMgaW4gYHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlYC4gVGhpcyBhbHRlcnMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgZXJyb3IgaGFuZGxpbmcgYW5kIGNvbm5lY3Rpb24gdGVhcmRvd24gZmxvdy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSRFNcIixcbiAgICBcIlJEU19SRE1BXCIsXG4gICAgXCJJTkZJTklCQU5EXCIsXG4gICAgXCJJTkZJTklCQU5EX0FERFJfVFJBTlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZHNfaWJfY21fY29ubmVjdF9jb21wbGV0ZVwiLFxuICAgIFwicmRzX3JkbWFfY21fZXZlbnRfaGFuZGxlcl9jbW5cIixcbiAgICBcInJkc19pYl9jbV9oYW5kbGVfY29ubmVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIFJEUyBvdmVyIEluZmluaUJhbmQgY29ubmVjdGlvbiBsaWZlY3ljbGUgaGFuZGxpbmcgYnkgY2hhbmdpbmcgYHJkc19jb25uX2Rlc3Ryb3lgIHRvIGByZHNfY29ubl9kcm9wYCB3aGVuIGVuY291bnRlcmluZyB1bnN1cHBvcnRlZCBwcm90b2NvbCB2ZXJzaW9ucyBpbiBgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGVgLiBUaGlzIGFsdGVycyByZWFjaGFibGUgbmV0d29ya2luZyBlcnJvciBoYW5kbGluZyBhbmQgY29ubmVjdGlvbiB0ZWFyZG93biBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNDo1NDoxOS43NTQ2NDkxNjVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MzYwMzc4MTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6NTQ6MTkuNzU1NDgyODA1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjQzNTk1Mzk0MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGEgZGlyZWN0IGNhbGwgdG8gYHJkc19jb25uX2Rlc3Ryb3koKWAgd2l0aCBgcmRzX2Nvbm5fZHJvcCgpYCBpbiBgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGUoKWAgd2hlbiBhbiB1bnN1cHBvcnRlZCBwcm90b2NvbCB2ZXJzaW9uIGlzIGVuY291bnRlcmVkLiBgcmRzX2Nvbm5fZGVzdHJveSgpYCBpbW1lZGlhdGVseSBmcmVlcyB0aGUgY29ubmVjdGlvbiBvYmplY3QgKGBjb25uYCBhbmQgYGNvbm4tXFx1MDAzZWNfcGF0aGApLCB3aGljaCBjYXVzZXMgdXNlLWFmdGVyLWZyZWUgYW5kIHByZW1hdHVyZSBjbGVhbnVwIGlzc3VlcyBpbiBjb25uZWN0aW9uIGV2ZW50IGhhbmRsaW5nIHBhdGhzLiBgcmRzX2Nvbm5fZHJvcCgpYCBjbGVhbmx5IHRlYXJzIGRvd24gdGhlIGNvbm5lY3Rpb24gdmlhIGFzeW5jaHJvbm91cyB3b3JrLlxcblxcblRoaXMgY2hhbmdlIGlzIHB1cmVseSBjb25jZXJuZWQgd2l0aCBvYmplY3QgbGlmZXRpbWVzLCByZWZlcmVuY2UgbWFuYWdlbWVudCwgYW5kIHRlYXJkb3duIHN5bmNocm9uaXphdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gbG9naWMsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcvYnVmZmVycyB0byB1c2Vyc3BhY2UuIE1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmMDU5MzcxZWY3NmRlMTE0MDIyYjU0M2QwZjI2MTVjMzE1MWQxNDIxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAxNDo1MzozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9yZHMvaWJfY20uYyBiL25ldC9yZHMvaWJfY20uY1xuaW5kZXggZDQ2MTQ2ODg3YmE0MC4uMjkwOWRhODM2M2YzOSAxMDA2NDRcbi0tLSBhL25ldC9yZHMvaWJfY20uY1xuKysrIGIvbmV0L3Jkcy9pYl9jbS5jXG5AQCAtMTE1LDcgKzExNSw3IEBAIHZvaWQgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBzdHJ1Y3QgcmRtYV9jbV9ldmVuXG4gXHRcdFx0XHQgIFx1MDAyNmNvbm4tXHUwMDNlY19sYWRkciwgXHUwMDI2Y29ubi1cdTAwM2VjX2ZhZGRyLFxuIFx0XHRcdFx0ICBSRFNfUFJPVE9DT0xfTUFKT1IoY29ubi1cdTAwM2VjX3ZlcnNpb24pLFxuIFx0XHRcdFx0ICBSRFNfUFJPVE9DT0xfTUlOT1IoY29ubi1cdTAwM2VjX3ZlcnNpb24pKTtcbi1cdFx0XHRyZHNfY29ubl9kZXN0cm95KGNvbm4pO1xuK1x0XHRcdHJkc19jb25uX2Ryb3AoY29ubik7XG4gXHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNDo1NDoxOS43NTU0ODQ1MDVaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTIzNzIwMDQ2NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSRFMgSUIgQ29ubmVjdGlvbiBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBgbmV0L3Jkcy9pYl9jbS5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSByZXBsYWNpbmcgYHJkc19jb25uX2Rlc3Ryb3koY29ubilgIHdpdGggYHJkc19jb25uX2Ryb3AoY29ubilgIHdpdGhpbiB0aGUgYHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlYCBmdW5jdGlvbi4gTXkgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgc3dhcC5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0cmlnZ2VyZWQgdGhpcyBjaGFuZ2UuIFdoYXQncyB0aGUgZnVuZGFtZW50YWwgZGlmZmVyZW5jZSBiZXR3ZWVuIGBkZXN0cm95YCBhbmQgYGRyb3BgIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dD8gSXMgdGhlcmUgYSBzdWJ0bGUgc2VtYW50aWMgZGlzdGluY3Rpb24gYXQgcGxheSB0aGF0IG5lY2Vzc2l0YXRlcyB0aGlzIG1vZGlmaWNhdGlvbj9cblxuVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbGwgcmVhY2ggZm9yIGBncmVwcGVyYCAob3IgZXZlbiBhIHF1aWNrIGByZWFkLWZpbGVgIHRvIGtlZXAgdGhpbmdzIHNpbXBsZSkgYW5kIHplcm8gaW4gb24gdGhlIGFyZWEgYXJvdW5kIGxpbmUgMTE1IGluIGBuZXQvcmRzL2liX2NtLmNgLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBpbW1lZGlhdGUgc3Vycm91bmRpbmcgY29kZSBhbmQgY29udGV4dC4gVW5kZXJzdGFuZGluZyB0aGUgYWRqYWNlbnQgbG9naWMgaXMgY3J1Y2lhbCB0byBncmFzcGluZyB0aGUgaW50ZW5kZWQgYmVoYXZpb3IgaGVyZS4gSSdtIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBjb25uZWN0aW9uJ3MgbGlmZWN5Y2xlIHN0YXRlLCBlcnJvciBoYW5kbGluZywgb3IgcmVzb3VyY2UgbWFuYWdlbWVudCBpbW1lZGlhdGVseSBiZWZvcmUgYW5kIGFmdGVyIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDg5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNDo1NDozMi4xMjc0OTMzNjJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0NDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9yZHMvaWJfY20uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA5MDpcXHRcXHRcXHRcXHRjcmVkaXQgPSBkcC1cXHUwMDNlcmljcF92Ni5kcF9jcmVkaXQ7XFxuICA5MTpcXHRcXHRcXHRcXHQvKiBkcCBzdHJ1Y3R1cmUgc3RhcnQgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgOCBieXRlc1xcbiAgOTI6XFx0XFx0XFx0XFx0ICogYWxpZ25lZC4gIFNpbmNlIGRwX2Fja19zZXEgaXMgNjQtYml0IGV4dGVuZGVkIGxvYWRcXG4gIDkzOlxcdFxcdFxcdFxcdCAqIG9wZXJhdGlvbnMgY2FuIGJlIHVzZWQgc28gZ28gdGhyb3VnaCBnZXRfdW5hbGlnbmVkXFxuICA5NDpcXHRcXHRcXHRcXHQgKiB0byBhdm9pZCB1bmFsaWduZWQgZXJyb3JzLlxcbiAgOTU6XFx0XFx0XFx0XFx0ICovXFxuICA5NjpcXHRcXHRcXHRcXHRhY2tfc2VxID0gZ2V0X3VuYWxpZ25lZChcXHUwMDI2ZHAtXFx1MDAzZXJpY3BfdjYuZHBfYWNrX3NlcSk7XFxuICA5NzpcXHRcXHRcXHR9XFxuICA5ODpcXHRcXHR9IGVsc2UgaWYgKGV2ZW50LVxcdTAwM2VwYXJhbS5jb25uLnByaXZhdGVfZGF0YV9sZW4gXFx1MDAzZT1cXG4gIDk5OlxcdFxcdFxcdCAgIHNpemVvZihzdHJ1Y3QgcmRzX2liX2Nvbm5lY3RfcHJpdmF0ZSkpIHtcXG4gMTAwOlxcdFxcdFxcdG1ham9yID0gZHAtXFx1MDAzZXJpY3BfdjQuZHBfcHJvdG9jb2xfbWFqb3I7XFxuIDEwMTpcXHRcXHRcXHRtaW5vciA9IGRwLVxcdTAwM2VyaWNwX3Y0LmRwX3Byb3RvY29sX21pbm9yO1xcbiAxMDI6XFx0XFx0XFx0Y3JlZGl0ID0gZHAtXFx1MDAzZXJpY3BfdjQuZHBfY3JlZGl0O1xcbiAxMDM6XFx0XFx0XFx0YWNrX3NlcSA9IGdldF91bmFsaWduZWQoXFx1MDAyNmRwLVxcdTAwM2VyaWNwX3Y0LmRwX2Fja19zZXEpO1xcbiAxMDQ6XFx0XFx0fVxcbiAxMDU6XFx0XFxuIDEwNjpcXHRcXHQvKiBtYWtlIHN1cmUgaXQgaXNuJ3QgZW1wdHkgZGF0YSAqL1xcbiAxMDc6XFx0XFx0aWYgKG1ham9yKSB7XFxuIDEwODpcXHRcXHRcXHRyZHNfaWJfc2V0X3Byb3RvY29sKGNvbm4sIFJEU19QUk9UT0NPTChtYWpvciwgbWlub3IpKTtcXG4gMTA5OlxcdFxcdFxcdHJkc19pYl9zZXRfZmxvd19jb250cm9sKGNvbm4sIGJlMzJfdG9fY3B1KGNyZWRpdCkpO1xcbiAxMTA6XFx0XFx0fVxcbiAxMTE6XFx0XFxuIDExMjpcXHRcXHRpZiAoY29ubi1cXHUwMDNlY192ZXJzaW9uIFxcdTAwM2MgUkRTX1BST1RPQ09MX1ZFUlNJT04pIHtcXG4gMTEzOlxcdFxcdFxcdGlmIChjb25uLVxcdTAwM2VjX3ZlcnNpb24gIT0gUkRTX1BST1RPQ09MX0NPTVBBVF9WRVJTSU9OKSB7XFxuIDExNDpcXHRcXHRcXHRcXHRwcl9ub3RpY2UoXFxcIlJEUy9JQjogQ29ubmVjdGlvbiBcXHUwMDNjJXBJNmMsJXBJNmNcXHUwMDNlIHZlcnNpb24gJXUuJXUgbm8gbG9uZ2VyIHN1cHBvcnRlZFxcXFxuXFxcIixcXG4gMTE1OlxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmNvbm4tXFx1MDAzZWNfbGFkZHIsIFxcdTAwMjZjb25uLVxcdTAwM2VjX2ZhZGRyLFxcbiAxMTY6XFx0XFx0XFx0XFx0XFx0ICBSRFNfUFJPVE9DT0xfTUFKT1IoY29ubi1cXHUwMDNlY192ZXJzaW9uKSxcXG4gMTE3OlxcdFxcdFxcdFxcdFxcdCAgUkRTX1BST1RPQ09MX01JTk9SKGNvbm4tXFx1MDAzZWNfdmVyc2lvbikpO1xcbiAxMTg6XFx0XFx0XFx0XFx0cmRzX2Nvbm5fZHJvcChjb25uKTtcXG4gMTE5OlxcdFxcdFxcdFxcdHJldHVybjtcXG4gMTIwOlxcdFxcdFxcdH1cXG4gMTIxOlxcdFxcdH1cXG4gMTIyOlxcdFxcbiAxMjM6XFx0XFx0cHJfbm90aWNlKFxcXCJSRFMvSUI6ICVzIGNvbm4gY29ubmVjdGVkIFxcdTAwM2MlcEk2YywlcEk2YywlZFxcdTAwM2UgdmVyc2lvbiAldS4ldSVzXFxcXG5cXFwiLFxcbiAxMjQ6XFx0XFx0XFx0ICBpYy1cXHUwMDNlaV9hY3RpdmVfc2lkZSA/IFxcXCJBY3RpdmVcXFwiIDogXFxcIlBhc3NpdmVcXFwiLFxcbiAxMjU6XFx0XFx0XFx0ICBcXHUwMDI2Y29ubi1cXHUwMDNlY19sYWRkciwgXFx1MDAyNmNvbm4tXFx1MDAzZWNfZmFkZHIsIGNvbm4tXFx1MDAzZWNfdG9zLFxcbiAxMjY6XFx0XFx0XFx0ICBSRFNfUFJPVE9DT0xfTUFKT1IoY29ubi1cXHUwMDNlY192ZXJzaW9uKSxcXG4gMTI3OlxcdFxcdFxcdCAgUkRTX1BST1RPQ09MX01JTk9SKGNvbm4tXFx1MDAzZWNfdmVyc2lvbiksXFxuIDEyODpcXHRcXHRcXHQgIGljLVxcdTAwM2VpX2Zsb3djdGwgPyBcXFwiLCBmbG93IGNvbnRyb2xcXFwiIDogXFxcIlxcXCIpO1xcbiAxMjk6XFx0XFxuIDEzMDpcXHRcXHQvKiByZWNlaXZlIHNsIGZyb20gdGhlIHBlZXIgKi9cXG4gMTMxOlxcdFxcdGljLVxcdTAwM2VpX3NsID0gaWMtXFx1MDAzZWlfY21faWQtXFx1MDAzZXJvdXRlLnBhdGhfcmVjLVxcdTAwM2VzbDtcXG4gMTMyOlxcdFxcbiAxMzM6XFx0XFx0YXRvbWljX3NldChcXHUwMDI2aWMtXFx1MDAzZWlfY3FfcXVpZXNjZSwgMCk7XFxuIDEzNDpcXHRcXG4gMTM1OlxcdFxcdC8qIEluaXQgcmluZ3MgYW5kIGZpbGwgcmVjdi4gdGhpcyBuZWVkcyB0byB3YWl0IHVudGlsIHByb3RvY29sXFxuIDEzNjpcXHRcXHQgKiBuZWdvdGlhdGlvbiBpcyBjb21wbGV0ZSwgc2luY2UgcmluZyBsYXlvdXQgaXMgZGlmZmVyZW50XFxuIDEzNzpcXHRcXHQgKiBmcm9tIDMuMSB0byA0LjEuXFxuIDEzODpcXHRcXHQgKi9cXG4gMTM5OlxcdFxcdHJkc19pYl9zZW5kX2luaXRfcmluZyhpYyk7XFxuIDE0MDpcXHRcXHRyZHNfaWJfcmVjdl9pbml0X3JpbmcoaWMpO1xcbiAxNDE6XFx0XFx0LyogUG9zdCByZWNlaXZlIGJ1ZmZlcnMgLSBhcyBhIHNpZGUgZWZmZWN0LCB0aGlzIHdpbGwgdXBkYXRlXFxuIDE0MjpcXHRcXHQgKiB0aGUgcG9zdGVkIGNyZWRpdCBjb3VudC4gKi9cXG4gMTQzOlxcdFxcdHJkc19pYl9yZWN2X3JlZmlsbChjb25uLCAxLCBHRlBfS0VSTkVMKTtcXG4gMTQ0OlxcdFxcbiAxNDU6XFx0XFx0LyogdXBkYXRlIGliX2RldmljZSB3aXRoIHRoaXMgbG9jYWwgaXBhZGRyICovXFxuIDE0NjpcXHRcXHRlcnIgPSByZHNfaWJfdXBkYXRlX2lwYWRkcihpYy1cXHUwMDNlcmRzX2liZGV2LCBcXHUwMDI2Y29ubi1cXHUwMDNlY19sYWRkcik7XFxuIDE0NzpcXHRcXHRpZiAoZXJyKVxcbiAxNDg6XFx0XFx0XFx0cHJpbnRrKEtFUk5fRVJSIFxcXCJyZHNfaWJfdXBkYXRlX2lwYWRkciBmYWlsZWQgKCVkKVxcXFxuXFxcIixcXG4gMTQ5OlxcdFxcdFxcdFxcdGVycik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE0OjU0OjMyLjEyNzY4MDYwMloiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODYzNDgzMzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMsIGFzIGlmIEknbSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gUkRTIENvbm5lY3Rpb24gRGVzdHJ1Y3Rpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBiZXR3ZWVuIGByZHNfY29ubl9kZXN0cm95YCBhbmQgYHJkc19jb25uX2Ryb3BgLiBJdCdzIHRpbWUgdG8gZ2V0IGEgYml0IGdyYW51bGFyIGhlcmUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZWFjaCBvbmUgYWN0dWFsbHkgKmRvZXMqIGF0IHRoZSBjb25uZWN0aW9uIGxldmVsLiBJJ2xsIG5lZWQgdG8gdXNlIHNvbWUgcGF0dGVybiBtYXRjaGluZyB0byBwdWxsIHVwIGFueSBpbnN0YW5jZXMgb2YgdGhlc2UgZnVuY3Rpb25zIGluIHRoZSBjb2RlIGJhc2UsIHRvIGdldCBhIGhhbmRsZSBvbiB0aGVpciB1c2FnZSBhbmQgY29udGV4dC4gTGV0J3MgZmlyZSB1cCBgZ3JlcGAgYW5kIHNlZSB3aGF0IGNvbWVzIHVwLiBUaGlzIHNob3VsZCB0ZWxsIG1lIHF1aWNrbHkgd2hlcmUgdGhleSdyZSB1c2VkIGFuZCBob3cuIFRpbWUgdG8gZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1NjksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE0OjU0OjMzLjk5MTE2NzE1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzY0OTcyNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCByZHNfY29ubl8oZGVzdHJveXxkcm9wKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcmRzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yZHMvY29ubmVjdGlvbi5jPTQ2OD1zdGF0aWMgdm9pZCByZHNfY29ubl9wYXRoX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxcbi0tXFxubmV0L3Jkcy9jb25uZWN0aW9uLmMtNTEyLSAqL1xcbm5ldC9yZHMvY29ubmVjdGlvbi5jOjUxMzp2b2lkIHJkc19jb25uX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxcbm5ldC9yZHMvY29ubmVjdGlvbi5jLTUxNC17XFxuLS1cXG5uZXQvcmRzL2Nvbm5lY3Rpb24uYz05NDg9RVhQT1JUX1NZTUJPTF9HUEwocmRzX2Nvbm5fcGF0aF9kcm9wKTtcXG5uZXQvcmRzL2Nvbm5lY3Rpb24uYy05NDktXFxubmV0L3Jkcy9jb25uZWN0aW9uLmM6OTUwOnZvaWQgcmRzX2Nvbm5fZHJvcChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pXFxubmV0L3Jkcy9jb25uZWN0aW9uLmMtOTUxLXtcXG4tLVxcbm5ldC9yZHMvcmRzLmg9ODA5PXZvaWQgcmRzX2Nvbm5fc2h1dGRvd24oc3RydWN0IHJkc19jb25uX3BhdGggKmNwYXRoKTtcXG5uZXQvcmRzL3Jkcy5oOjgxMDp2b2lkIHJkc19jb25uX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTtcXG5uZXQvcmRzL3Jkcy5oOjgxMTp2b2lkIHJkc19jb25uX2Ryb3Aoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTtcXG5uZXQvcmRzL3Jkcy5oLTgxMi12b2lkIHJkc19jb25uX3BhdGhfZHJvcChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3BhdGgsIGJvb2wgZGVzdHJveSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE0OjU0OjM0LjEyNzY3MzIwOFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjA1MjkzNjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgTmV0d29yayBDb25uZWN0aW9uIERlbWlzZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gZGlnIGludG8gdGhlIGBuZXQvcmRzL2Nvbm5lY3Rpb24uY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIHNlY3Rpb25zIGFyb3VuZCBgcmRzX2Nvbm5fZGVzdHJveWAgYW5kIGByZHNfY29ubl9kcm9wYC4gVGhlc2UgYXJlIGNyaXRpY2FsIGZ1bmN0aW9ucywgdGhlIGhlYXJ0IG9mIGhvdyBSRFMgY29ubmVjdGlvbnMgYXJlIHRlcm1pbmF0ZWQsIGFuZCBob3cgd2UgaGFuZGxlIHRob3NlIHRlcm1pbmF0aW9uIGV2ZW50cy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IG1lY2hhbmljcyBvZiB3aGF0IGhhcHBlbnMgd2hlbiBhIGNvbm5lY3Rpb24gZ29lcyBkb3duIGFuZCBob3cgd2UgZW5zdXJlIGEgY2xlYW4sIHJlbGlhYmxlIHRlYXJkb3duLiBJdCdzIGFib3V0IGVuc3VyaW5nIG1pbmltYWwgcmVzb3VyY2UgbGVha2FnZSBhbmQgbWFpbnRhaW5pbmcgdGhlIGludGVncml0eSBvZiB0aGUgb3ZlcmFsbCBzeXN0ZW0uIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzIHRoYXQgbWlnaHQgYXJpc2UgZHVyaW5nIHRoZXNlIGNyaXRpY2FsIG9wZXJhdGlvbnMsIGFuZCBob3cgdGhleSdyZSBoYW5kbGVkLiBMZXQncyBzZWUgaG93IHRoaW5ncyBhcmUgcmVhbGx5IGRvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwOTUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNDo1NDozNi4zMzI5Njk4M1oiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTcwNzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9yZHMvY29ubmVjdGlvbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUxMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUxMDpcXHQgKiB0aGUgY29ubiBoYXMgYmVlbiBzaHV0ZG93biB0aGF0IG5vIG9uZSBlbHNlIGlzIHJlZmVyZW5jaW5nIHRoZSBjb25uZWN0aW9uLlxcbiA1MTE6XFx0ICogV2UgY2FuIG9ubHkgZW5zdXJlIHRoaXMgaW4gdGhlIHJtbW9kIHBhdGggaW4gdGhlIGN1cnJlbnQgY29kZS5cXG4gNTEyOlxcdCAqL1xcbiA1MTM6XFx0dm9pZCByZHNfY29ubl9kZXN0cm95KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubilcXG4gNTE0OlxcdHtcXG4gNTE1OlxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIDUxNjpcXHRcXHRpbnQgaTtcXG4gNTE3OlxcdFxcdHN0cnVjdCByZHNfY29ubl9wYXRoICpjcDtcXG4gNTE4OlxcdFxcdGludCBucGF0aHMgPSAoY29ubi1cXHUwMDNlY190cmFucy1cXHUwMDNldF9tcF9jYXBhYmxlID8gUkRTX01QQVRIX1dPUktFUlMgOiAxKTtcXG4gNTE5OlxcdFxcbiA1MjA6XFx0XFx0cmRzZGVidWcoXFxcImZyZWVpbmcgY29ubiAlcCBmb3IgJXBJNCAtXFx1MDAzZSBcXFwiXFxuIDUyMTpcXHRcXHRcXHQgXFxcIiVwSTRcXFxcblxcXCIsIGNvbm4sIFxcdTAwMjZjb25uLVxcdTAwM2VjX2xhZGRyLFxcbiA1MjI6XFx0XFx0XFx0IFxcdTAwMjZjb25uLVxcdTAwM2VjX2ZhZGRyKTtcXG4gNTIzOlxcdFxcbiA1MjQ6XFx0XFx0LyogRW5zdXJlIGNvbm4gd2lsbCBub3QgYmUgc2NoZWR1bGVkIGZvciByZWNvbm5lY3QgKi9cXG4gNTI1OlxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNnJkc19jb25uX2xvY2spO1xcbiA1MjY6XFx0XFx0aGxpc3RfZGVsX2luaXRfcmN1KFxcdTAwMjZjb25uLVxcdTAwM2VjX2hhc2hfbm9kZSk7XFxuIDUyNzpcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNnJkc19jb25uX2xvY2spO1xcbiA1Mjg6XFx0XFx0c3luY2hyb25pemVfcmN1KCk7XFxuIDUyOTpcXHRcXG4gNTMwOlxcdFxcdC8qIHNodXQgdGhlIGNvbm5lY3Rpb24gZG93biAqL1xcbiA1MzE6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5wYXRoczsgaSsrKSB7XFxuIDUzMjpcXHRcXHRcXHRjcCA9IFxcdTAwMjZjb25uLVxcdTAwM2VjX3BhdGhbaV07XFxuIDUzMzpcXHRcXHRcXHRyZHNfY29ubl9wYXRoX2Rlc3Ryb3koY3ApO1xcbiA1MzQ6XFx0XFx0XFx0QlVHX09OKCFsaXN0X2VtcHR5KFxcdTAwMjZjcC1cXHUwMDNlY3BfcmV0cmFucykpO1xcbiA1MzU6XFx0XFx0fVxcbiA1MzY6XFx0XFxuIDUzNzpcXHRcXHQvKlxcbiA1Mzg6XFx0XFx0ICogVGhlIGNvbmdlc3Rpb24gbWFwcyBhcmVuJ3QgZnJlZWQgdXAgaGVyZS4gIFRoZXkncmVcXG4gNTM5OlxcdFxcdCAqIGZyZWVkIGJ5IHJkc19jb25nX2V4aXQoKSBhZnRlciBhbGwgdGhlIGNvbm5lY3Rpb25zXFxuIDU0MDpcXHRcXHQgKiBoYXZlIGJlZW4gZnJlZWQuXFxuIDU0MTpcXHRcXHQgKi9cXG4gNTQyOlxcdFxcdHJkc19jb25nX3JlbW92ZV9jb25uKGNvbm4pO1xcbiA1NDM6XFx0XFxuIDU0NDpcXHRcXHRrZnJlZShjb25uLVxcdTAwM2VjX3BhdGgpO1xcbiA1NDU6XFx0XFx0a21lbV9jYWNoZV9mcmVlKHJkc19jb25uX3NsYWIsIGNvbm4pO1xcbiA1NDY6XFx0XFxuIDU0NzpcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cmRzX2Nvbm5fbG9jaywgZmxhZ3MpO1xcbiA1NDg6XFx0XFx0cmRzX2Nvbm5fY291bnQtLTtcXG4gNTQ5OlxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnJkc19jb25uX2xvY2ssIGZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6NTQ6MzYuMzM1MTQ0NTRaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYxODkwMjE4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQ2hlY2tpbmcgQ29kZSBmb3IgYG5ldC9yZHMvY29ubmVjdGlvbi5jYCBhbmQgTGluZSA5NTAqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIGxldCdzIGp1c3QgbWFrZSBhYnNvbHV0ZWx5IGNlcnRhaW4gd2UncmUgbm90IG1pc3NpbmcgYW55dGhpbmcgaW4gdGhlIFJEUyBjb25uZWN0aW9uIGhhbmRsaW5nLiBXZSBuZWVkIHRvIGdvIGJhY2sgYW5kIGNyb3NzLXJlZmVyZW5jZSBhIHNwZWNpZmljIGxpbmUsIGxpbmUgOTUwLCB3aXRoaW4gdGhlIGBuZXQvcmRzL2Nvbm5lY3Rpb24uY2AgZmlsZS4gVGhpcyBwYXJ0aWN1bGFyIHNlY3Rpb24gaGFzIHByb3ZlbiB0byBiZSBhbiBhcmVhIG9mIGludGVyZXN0IGluIHRoZSBwYXN0LiBJdCdzIHRpbWUgdG8gdGhvcm91Z2hseSByZXZpZXcgaXRzIGltcGxlbWVudGF0aW9uIGFuZCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHBvdGVudGlhbCBpc3N1ZXMgb3Igb3ZlcnNpZ2h0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk5OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6NTQ6MzguOTU0MDQ5MzU2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzM0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Jkcy9jb25uZWN0aW9uLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTQ1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTQ1OlxcdFxcdHF1ZXVlX3dvcmsoY3AtXFx1MDAzZWNwX3dxLCBcXHUwMDI2Y3AtXFx1MDAzZWNwX2Rvd25fdyk7XFxuIDk0NjpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gOTQ3OlxcdH1cXG4gOTQ4OlxcdEVYUE9SVF9TWU1CT0xfR1BMKHJkc19jb25uX3BhdGhfZHJvcCk7XFxuIDk0OTpcXHRcXG4gOTUwOlxcdHZvaWQgcmRzX2Nvbm5fZHJvcChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pXFxuIDk1MTpcXHR7XFxuIDk1MjpcXHRcXHRXQVJOX09OKGNvbm4tXFx1MDAzZWNfdHJhbnMtXFx1MDAzZXRfbXBfY2FwYWJsZSk7XFxuIDk1MzpcXHRcXHRyZHNfY29ubl9wYXRoX2Ryb3AoXFx1MDAyNmNvbm4tXFx1MDAzZWNfcGF0aFswXSwgZmFsc2UpO1xcbiA5NTQ6XFx0fVxcbiA5NTU6XFx0RVhQT1JUX1NZTUJPTF9HUEwocmRzX2Nvbm5fZHJvcCk7XFxuIDk1NjpcXHRcXG4gOTU3OlxcdC8qXFxuIDk1ODpcXHQgKiBJZiB0aGUgY29ubmVjdGlvbiBpcyBkb3duLCB0cmlnZ2VyIGEgY29ubmVjdC4gV2UgbWF5IGhhdmUgc2NoZWR1bGVkIGFcXG4gOTU5OlxcdCAqIGRlbGF5ZWQgcmVjb25uZWN0IGhvd2V2ZXIgLSBpbiB0aGlzIGNhc2Ugd2Ugc2hvdWxkIG5vdCBpbnRlcmZlcmUuXFxuIDk2MDpcXHQgKi9cXG4gOTYxOlxcdHZvaWQgcmRzX2Nvbm5fcGF0aF9jb25uZWN0X2lmX2Rvd24oc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxcbiA5NjI6XFx0e1xcbiA5NjM6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiA5NjQ6XFx0XFx0aWYgKHJkc19kZXN0cm95X3BlbmRpbmcoY3AtXFx1MDAzZWNwX2Nvbm4pKSB7XFxuIDk2NTpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gOTY2OlxcdFxcdFxcdHJldHVybjtcXG4gOTY3OlxcdFxcdH1cXG4gOTY4OlxcdFxcdGlmIChyZHNfY29ubl9wYXRoX3N0YXRlKGNwKSA9PSBSRFNfQ09OTl9ET1dOIFxcdTAwMjZcXHUwMDI2XFxuIDk2OTpcXHRcXHQgICAgIXRlc3RfYW5kX3NldF9iaXQoUkRTX1JFQ09OTkVDVF9QRU5ESU5HLCBcXHUwMDI2Y3AtXFx1MDAzZWNwX2ZsYWdzKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6NTQ6MzguOTU1MjI5NjE2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUxNTk3NjQzMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFJEUyBDb25uZWN0aW9uIFRlYXJkb3duIEZpeCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgXCJZZXMsIHRoaXMgaXMgZGVmaW5pdGVseSBhIHBvdGVudGlhbCBwcm9ibGVtIGFyZWEuXCIgYHJkc19jb25uX2Rlc3Ryb3koY29ubilgIGlzIGEgKmRpcmVjdCogZnJlZSBvZiB0aGUgY29ubmVjdGlvbiBhbmQgaXRzIGFzc29jaWF0ZWQgcGF0aHMsIHdoaWNoIGlzIGFsd2F5cyByaXNreSBpbiBhIGtlcm5lbCBjb250ZXh0LCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGhhbmRsZXJzIG9yIHdvcmtxdWV1ZXMgdGhhdCBtaWdodCBzdGlsbCBoYXZlIGFjdGl2ZSByZWZlcmVuY2VzIG9yIGJlIGluIHRoZSBwcm9jZXNzIG9mIGV4ZWN1dGluZy4gV2UncmUgdGFsa2luZyBhYm91dCBhIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUgKFVBRikgb3IgZXZlbiBkb3VibGUtZnJlZSBzY2VuYXJpbyBpZiBub3QgaGFuZGxlZCBjYXJlZnVsbHkuIGByZHNfY29ubl9kcm9wKGNvbm4pYCBpcyB0aGUgbW9yZSBhcHByb3ByaWF0ZSBjaG9pY2UgYXMgaXQgZGVmZXJzIHRoZSB0ZWFyZG93biwgcXVldWVpbmcgdGhlIHdvcmsgdG8gYWxsb3cgYSBncmFjZWZ1bCBkaXNjb25uZWN0aW9uLlxuXG5Ob3csIGxldCdzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdC5cblxuKiAgICoqVW5pbml0aWFsaXplZCBtZW1vcnk/KiogTm8sIHRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2Vyc3BhY2UuIFRoZXJlJ3MgYWxzbyBubyBzaWduIG9mIGl0IHJlYWRpbmcsIGNvcHlpbmcsIG9yIHBhc3NpbmcgYXJvdW5kIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS5cbiogICAqKktNU0FOIENvbmNlcm5zPyoqIE5vcGUsIG5vIEtNU0FOLXNwZWNpZmljIGJ1Z3MgbGlrZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZyBpc3N1ZXMsIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGlzIGlzIGdyZWF0LCBhcyB3ZSBzaG91bGQgYmUgYWJsZSB0byByZWx5IG9uIEtBU0FOIHRvIGRldGVjdCBVQUYvbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzLlxuKiAgICoqVGhlIGJ1ZyBpcyBpbmRlZWQgYSBsaWZldGltZSAvIHRlYXJkb3duIC8gVUFGIGlzc3VlLioqIFdlJ3JlIGZpeGluZyBhIHNpdHVhdGlvbiB3aGVyZSBhbiBldmVudCBoYW5kbGVyIHByZW1hdHVyZWx5IGRlc3Ryb3llZCB0aGUgY29ubmVjdGlvbi4gVGhpcyBkaXJlY3RseSBsZWFkcyB0byB0aGUgZHJlYWRlZCBwcmVtYXR1cmUgZnJlZS9VQUYuIEl0J3MgYSB0ZXh0Ym9vayBleGFtcGxlIG9mIHRoZSBraW5kIG9mIGJ1ZyBLQVNBTiBpcyBidWlsdCB0byBjYXRjaC5cblxuTGV0J3MgZG91YmxlIGNoZWNrIGFsbCBhc3BlY3RzIG9mIHRoaXMuXG5cbiogICAqKkluIGBuZXQvcmRzL2liX2NtLmNgKiogVGhlIGNoYW5nZSBzcGVjaWZpY2FsbHkgcmVwbGFjZXMgYHJkc19jb25uX2Rlc3Ryb3koY29ubilgIHdpdGggYHJkc19jb25uX2Ryb3AoY29ubilgIHdoZW4gdGhlIFJEUyBwcm90b2NvbCB2ZXJzaW9uIGlzIHVuc3VwcG9ydGVkLlxuKiAgICoqUHJldmVudGluZyBhIGRpcmVjdCBkZXN0cm95L2ZyZWUgaW4gdGhlIGNvbm5lY3QgY29tcGxldGUgaGFuZGxlci4qKiBUaGlzIGF2b2lkcyB0aGUgcG90ZW50aWFsIGZvciBVQUYgYW5kIG1lbW9yeSBjb3JydXB0aW9uLCBleGFjdGx5IGFzIHN1c3BlY3RlZC5cblxuU2luY2UgS01TQU4gaXNuJ3QgbmVlZGVkLCBsZXQncyBwcmVwYXJlIHRoZSB0b29sIGNhbGwgYW5kIHdyYXAgdGhpcyB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTYwNywiT3V0cHV0VG9rZW5zIjoyMDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNDo1NDo0NC4xMTQ5OTc2OVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgYSBkaXJlY3QgY2FsbCB0byBgcmRzX2Nvbm5fZGVzdHJveSgpYCB3aXRoIGByZHNfY29ubl9kcm9wKClgIGluIGByZHNfaWJfY21fY29ubmVjdF9jb21wbGV0ZSgpYCB3aGVuIGFuIHVuc3VwcG9ydGVkIHByb3RvY29sIHZlcnNpb24gaXMgZW5jb3VudGVyZWQuIGByZHNfY29ubl9kZXN0cm95KClgIGltbWVkaWF0ZWx5IGZyZWVzIHRoZSBjb25uZWN0aW9uIG9iamVjdCAoYGNvbm5gIGFuZCBgY29ubi1cXHUwMDNlY19wYXRoYCksIHdoaWNoIGNhdXNlcyB1c2UtYWZ0ZXItZnJlZSBhbmQgcHJlbWF0dXJlIGNsZWFudXAgaXNzdWVzIGluIGNvbm5lY3Rpb24gZXZlbnQgaGFuZGxpbmcgcGF0aHMuIGByZHNfY29ubl9kcm9wKClgIGNsZWFubHkgdGVhcnMgZG93biB0aGUgY29ubmVjdGlvbiB2aWEgYXN5bmNocm9ub3VzIHdvcmsuXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGNvbmNlcm5lZCB3aXRoIG9iamVjdCBsaWZldGltZXMsIHJlZmVyZW5jZSBtYW5hZ2VtZW50LCBhbmQgdGVhcmRvd24gc3luY2hyb25pemF0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbW9kaWZ5IG1lbW9yeSBpbml0aWFsaXphdGlvbiBsb2dpYywgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgcGFkZGluZy9idWZmZXJzIHRvIHVzZXJzcGFjZS4gTWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWZyZWUgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGEgZGlyZWN0IGNhbGwgdG8gYHJkc19jb25uX2Rlc3Ryb3koKWAgd2l0aCBgcmRzX2Nvbm5fZHJvcCgpYCBpbiBgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGUoKWAgd2hlbiBhbiB1bnN1cHBvcnRlZCBwcm90b2NvbCB2ZXJzaW9uIGlzIGVuY291bnRlcmVkLiBgcmRzX2Nvbm5fZGVzdHJveSgpYCBpbW1lZGlhdGVseSBmcmVlcyB0aGUgY29ubmVjdGlvbiBvYmplY3QgKGBjb25uYCBhbmQgYGNvbm4tXFx1MDAzZWNfcGF0aGApLCB3aGljaCBjYXVzZXMgdXNlLWFmdGVyLWZyZWUgYW5kIHByZW1hdHVyZSBjbGVhbnVwIGlzc3VlcyBpbiBjb25uZWN0aW9uIGV2ZW50IGhhbmRsaW5nIHBhdGhzLiBgcmRzX2Nvbm5fZHJvcCgpYCBjbGVhbmx5IHRlYXJzIGRvd24gdGhlIGNvbm5lY3Rpb24gdmlhIGFzeW5jaHJvbm91cyB3b3JrLlxcblxcblRoaXMgY2hhbmdlIGlzIHB1cmVseSBjb25jZXJuZWQgd2l0aCBvYmplY3QgbGlmZXRpbWVzLCByZWZlcmVuY2UgbWFuYWdlbWVudCwgYW5kIHRlYXJkb3duIHN5bmNocm9uaXphdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gbG9naWMsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcvYnVmZmVycyB0byB1c2Vyc3BhY2UuIE1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowttf6w[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 14:01:04 +0000 UTC FinishedAt: 2026-09-08 14:54:46 +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": "068e5a0bc57e57d24cbf38def29cc5fb4db9a0df", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "RDS", "RDS_RDMA", "INFINIBAND", "INFINIBAND_ADDR_TRANS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "068e5a0bc57e57d24cbf38def29cc5fb4db9a0df", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "RDS", "RDS_RDMA", "INFINIBAND", "INFINIBAND_ADDR_TRANS" ], "series_id": "2c6cb100-29a7-4679-83ab-2ac2ea9fcaf3" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rds_ib_cm_connect_complete", "rds_rdma_cm_event_handler_cmn", "rds_ib_cm_handle_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+CgkJCTx0ZD4yMDI2LzA5LzA4IDE0OjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JEUyYjMzQ7LAogICAgJiMzNDtSRFNfUkRNQSYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkRfQUREUl9UUkFOUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Jkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlJiMzNDssCiAgICAmIzM0O3Jkc19yZG1hX2NtX2V2ZW50X2hhbmRsZXJfY21uJiMzNDssCiAgICAmIzM0O3Jkc19pYl9jbV9oYW5kbGVfY29ubmVjdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGEgZGlyZWN0IGNhbGwgdG8gYHJkc19jb25uX2Rlc3Ryb3koKWAgd2l0aCBgcmRzX2Nvbm5fZHJvcCgpYCBpbiBgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGUoKWAgd2hlbiBhbiB1bnN1cHBvcnRlZCBwcm90b2NvbCB2ZXJzaW9uIGlzIGVuY291bnRlcmVkLiBgcmRzX2Nvbm5fZGVzdHJveSgpYCBpbW1lZGlhdGVseSBmcmVlcyB0aGUgY29ubmVjdGlvbiBvYmplY3QgKGBjb25uYCBhbmQgYGNvbm4tXHUwMDNlY19wYXRoYCksIHdoaWNoIGNhdXNlcyB1c2UtYWZ0ZXItZnJlZSBhbmQgcHJlbWF0dXJlIGNsZWFudXAgaXNzdWVzIGluIGNvbm5lY3Rpb24gZXZlbnQgaGFuZGxpbmcgcGF0aHMuIGByZHNfY29ubl9kcm9wKClgIGNsZWFubHkgdGVhcnMgZG93biB0aGUgY29ubmVjdGlvbiB2aWEgYXN5bmNocm9ub3VzIHdvcmsuXG5cblRoaXMgY2hhbmdlIGlzIHB1cmVseSBjb25jZXJuZWQgd2l0aCBvYmplY3QgbGlmZXRpbWVzLCByZWZlcmVuY2UgbWFuYWdlbWVudCwgYW5kIHRlYXJkb3duIHN5bmNocm9uaXphdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gbG9naWMsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcvYnVmZmVycyB0byB1c2Vyc3BhY2UuIE1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgUkRTIG92ZXIgSW5maW5pQmFuZCBjb25uZWN0aW9uIGxpZmVjeWNsZSBoYW5kbGluZyBieSBjaGFuZ2luZyBgcmRzX2Nvbm5fZGVzdHJveWAgdG8gYHJkc19jb25uX2Ryb3BgIHdoZW4gZW5jb3VudGVyaW5nIHVuc3VwcG9ydGVkIHByb3RvY29sIHZlcnNpb25zIGluIGByZHNfaWJfY21fY29ubmVjdF9jb21wbGV0ZWAuIFRoaXMgYWx0ZXJzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGVycm9yIGhhbmRsaW5nIGFuZCBjb25uZWN0aW9uIHRlYXJkb3duIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTQ6NTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmMDU5MzcxZWY3NmRlMTE0MDIyYjU0M2QwZjI2MTVjMzE1MWQxNDIxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAxNDo1MzozOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvcmRzL2liX2NtLmMgYi9uZXQvcmRzL2liX2NtLmNcbmluZGV4IGQ0NjE0Njg4N2JhNDAuLjI5MDlkYTgzNjNmMzkgMTAwNjQ0XG4tLS0gYS9uZXQvcmRzL2liX2NtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvaWJfY20uY1xuQEAgLTExNSw3ICYjNDM7MTE1LDcgQEAgdm9pZCByZHNfaWJfY21fY29ubmVjdF9jb21wbGV0ZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCByZG1hX2NtX2V2ZW5cbiBcdFx0XHRcdCAgXHUwMDI2Y29ubi1cdTAwM2VjX2xhZGRyLCBcdTAwMjZjb25uLVx1MDAzZWNfZmFkZHIsXG4gXHRcdFx0XHQgIFJEU19QUk9UT0NPTF9NQUpPUihjb25uLVx1MDAzZWNfdmVyc2lvbiksXG4gXHRcdFx0XHQgIFJEU19QUk9UT0NPTF9NSU5PUihjb25uLVx1MDAzZWNfdmVyc2lvbikpO1xuLVx0XHRcdHJkc19jb25uX2Rlc3Ryb3koY29ubik7XG4mIzQzO1x0XHRcdHJkc19jb25uX2Ryb3AoY29ubik7XG4gXHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4gXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTQ6NTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UkRTJiMzNDssCiAgICAmIzM0O1JEU19SRE1BJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OywKICAgICYjMzQ7SU5GSU5JQkFORF9BRERSX1RSQU5TJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGUmIzM0OywKICAgICYjMzQ7cmRzX3JkbWFfY21fZXZlbnRfaGFuZGxlcl9jbW4mIzM0OywKICAgICYjMzQ7cmRzX2liX2NtX2hhbmRsZV9jb25uZWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIFJEUyBvdmVyIEluZmluaUJhbmQgY29ubmVjdGlvbiBsaWZlY3ljbGUgaGFuZGxpbmcgYnkgY2hhbmdpbmcgYHJkc19jb25uX2Rlc3Ryb3lgIHRvIGByZHNfY29ubl9kcm9wYCB3aGVuIGVuY291bnRlcmluZyB1bnN1cHBvcnRlZCBwcm90b2NvbCB2ZXJzaW9ucyBpbiBgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGVgLiBUaGlzIGFsdGVycyByZWFjaGFibGUgbmV0d29ya2luZyBlcnJvciBoYW5kbGluZyBhbmQgY29ubmVjdGlvbiB0ZWFyZG93biBmbG93LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjA1OTM3MWVmNzZkZTExNDAyMmI1NDNkMGYyNjE1YzMxNTFkMTQyMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMTQ6NTM6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvcmRzL2liX2NtLmMgYi9uZXQvcmRzL2liX2NtLmMKaW5kZXggZDQ2MTQ2ODg3YmE0MC4uMjkwOWRhODM2M2YzOSAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9pYl9jbS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvaWJfY20uYwpAQCAtMTE1LDcgJiM0MzsxMTUsNyBAQCB2b2lkIHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHJkbWFfY21fZXZlbgogCQkJCSAgJmFtcDtjb25uLSZndDtjX2xhZGRyLCAmYW1wO2Nvbm4tJmd0O2NfZmFkZHIsCiAJCQkJICBSRFNfUFJPVE9DT0xfTUFKT1IoY29ubi0mZ3Q7Y192ZXJzaW9uKSwKIAkJCQkgIFJEU19QUk9UT0NPTF9NSU5PUihjb25uLSZndDtjX3ZlcnNpb24pKTsKLQkJCXJkc19jb25uX2Rlc3Ryb3koY29ubik7CiYjNDM7CQkJcmRzX2Nvbm5fZHJvcChjb25uKTsKIAkJCXJldHVybjsKIAkJfQogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg3NwoJCQkJCQkJb3V0cHV0OiA5NwoJCQkJCQkJdGhvdWdodHM6IDE2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEludmVzdGlnYXRpb24gaW50byB0aGUgUkRTL0luZmluaUJhbmQgQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIHJlYWxseSAqdW5kZXJzdGFuZCogaXQuIFRoZSBrZXkgY2hhbmdlIGlzIGluIGBuZXQvcmRzL2liX2NtLmNgLCBzcGVjaWZpY2FsbHkgaW4gYHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlYC4gVGhleSYjMzk7dmUgc3dhcHBlZCBvdXQgYHJkc19jb25uX2Rlc3Ryb3koY29ubik7YCBmb3IgYHJkc19jb25uX2Ryb3AoY29ubik7YC4gSG1tLCBzdWJ0bGUgYnV0IHBvdGVudGlhbGx5IHNpZ25pZmljYW50LiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgbWlnaHQgaGF2ZSBpbXBsaWNhdGlvbnMgZm9yIGNvbm5lY3Rpb24gdGVhcmRvd24sIHJlc291cmNlIGNsZWFudXAsIG9yIG1heWJlIGV2ZW4gZXJyb3IgaGFuZGxpbmcgaW4gdGhlIGNvbnRleHQgb2YgSW5maW5pQmFuZC4gVGhpcyBtZWFucyBhIGNsb3NlciBsb29rIGF0IHRoZSAqd2h5KiBvZiB0aGUgY2hhbmdlIGlzIG5lZWRlZC4KClRpbWUgdG8gZGl2ZSBkZWVwZXIgaW50byBgbmV0L3Jkcy9pYl9jbS5jYC4gSSYjMzk7bGwgdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBnZXQgdGhlIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBSRFMgaW50ZXJhY3RzIHdpdGggSW5maW5pQmFuZCBhbmQgUkRNQSBpbiB0aGlzIHNwZWNpZmljIG1vZHVsZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igb3ZlcmFsbCBhcmNoaXRlY3R1cmUsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAoYXJlIHRoZXJlIGFueSB0aGF0IGFmZmVjdCB0aGlzIGJlaGF2aW9yPyksIGFuZCBlcnJvciBwYXRocy4gVGhpcyBtZWFucyB1bmRlcnN0YW5kaW5nIGhvdyBjb25uZWN0aW9ucyBhcmUgZXN0YWJsaXNoZWQsIG1hbmFnZWQsIGFuZCByZWxlYXNlZCB3aXRoaW4gdGhlIFJEUy9JQiBmcmFtZXdvcmsuCgpBIG1vcmUgbG9uZy10ZXJtIGNvbmNlcm4gSSYjMzk7bSB0aGlua2luZyBhYm91dCBpcyBmdXp6aW5nIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBDYW4gSSByZWFzb25hYmx5IGV4cGVjdCB0byBmdXp6IHRoaXMgc3VjY2Vzc2Z1bGx5IGluIG15IHN0YW5kYXJkIHZpcnR1YWxpemVkIFFFTVUgZW52aXJvbm1lbnRzLCB1c2luZyBzb21ldGhpbmcgbGlrZSByZG1hX3J4ZSwgc29mdC1pV0FSUCwgb3IgU0lXPyBJdCYjMzk7cyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgZmVhc2liaWxpdHkgb2YgdGVzdGluZyB0aGlzIGNoYW5nZSBlZmZlY3RpdmVseS4gVG8gZG8gdGhpcywgSSBuZWVkIHRvIGNoZWNrIHRoZSBSRFMgY29uZmlndXJhdGlvbiBhbmQgUkRNQSBzdXBwb3J0IHdpdGhpbiBzeXprYWxsZXIgYW5kIHRoZSBtYWlubGluZSBrZXJuZWwuIFRoZSBsZXZlbCBvZiBzdXBwb3J0IGluIHRoZXNlIGFyZWFzIHdpbGwgZGljdGF0ZSBob3cgZGlmZmljdWx0IHRoaXMgY2hhbmdlIGlzIHRvIHZhbGlkYXRlIHRob3JvdWdobHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTQ6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcmRzL2liX2NtLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwMDpcdFx0XHRtYWpvciA9IGRwLVx1MDAzZXJpY3BfdjQuZHBfcHJvdG9jb2xfbWFqb3I7XG4gMTAxOlx0XHRcdG1pbm9yID0gZHAtXHUwMDNlcmljcF92NC5kcF9wcm90b2NvbF9taW5vcjtcbiAxMDI6XHRcdFx0Y3JlZGl0ID0gZHAtXHUwMDNlcmljcF92NC5kcF9jcmVkaXQ7XG4gMTAzOlx0XHRcdGFja19zZXEgPSBnZXRfdW5hbGlnbmVkKFx1MDAyNmRwLVx1MDAzZXJpY3BfdjQuZHBfYWNrX3NlcSk7XG4gMTA0Olx0XHR9XG4gMTA1Olx0XG4gMTA2Olx0XHQvKiBtYWtlIHN1cmUgaXQgaXNuJiMzOTt0IGVtcHR5IGRhdGEgKi9cbiAxMDc6XHRcdGlmIChtYWpvcikge1xuIDEwODpcdFx0XHRyZHNfaWJfc2V0X3Byb3RvY29sKGNvbm4sIFJEU19QUk9UT0NPTChtYWpvciwgbWlub3IpKTtcbiAxMDk6XHRcdFx0cmRzX2liX3NldF9mbG93X2NvbnRyb2woY29ubiwgYmUzMl90b19jcHUoY3JlZGl0KSk7XG4gMTEwOlx0XHR9XG4gMTExOlx0XG4gMTEyOlx0XHRpZiAoY29ubi1cdTAwM2VjX3ZlcnNpb24gXHUwMDNjIFJEU19QUk9UT0NPTF9WRVJTSU9OKSB7XG4gMTEzOlx0XHRcdGlmIChjb25uLVx1MDAzZWNfdmVyc2lvbiAhPSBSRFNfUFJPVE9DT0xfQ09NUEFUX1ZFUlNJT04pIHtcbiAxMTQ6XHRcdFx0XHRwcl9ub3RpY2UoXCYjMzQ7UkRTL0lCOiBDb25uZWN0aW9uIFx1MDAzYyVwSTZjLCVwSTZjXHUwMDNlIHZlcnNpb24gJXUuJXUgbm8gbG9uZ2VyIHN1cHBvcnRlZFxcblwmIzM0OyxcbiAxMTU6XHRcdFx0XHRcdCAgXHUwMDI2Y29ubi1cdTAwM2VjX2xhZGRyLCBcdTAwMjZjb25uLVx1MDAzZWNfZmFkZHIsXG4gMTE2Olx0XHRcdFx0XHQgIFJEU19QUk9UT0NPTF9NQUpPUihjb25uLVx1MDAzZWNfdmVyc2lvbiksXG4gMTE3Olx0XHRcdFx0XHQgIFJEU19QUk9UT0NPTF9NSU5PUihjb25uLVx1MDAzZWNfdmVyc2lvbikpO1xuIDExODpcdFx0XHRcdHJkc19jb25uX2Ryb3AoY29ubik7XG4gMTE5Olx0XHRcdFx0cmV0dXJuO1xuIDEyMDpcdFx0XHR9XG4gMTIxOlx0XHR9XG4gMTIyOlx0XG4gMTIzOlx0XHRwcl9ub3RpY2UoXCYjMzQ7UkRTL0lCOiAlcyBjb25uIGNvbm5lY3RlZCBcdTAwM2MlcEk2YywlcEk2YywlZFx1MDAzZSB2ZXJzaW9uICV1LiV1JXNcXG5cJiMzNDssXG4gMTI0Olx0XHRcdCAgaWMtXHUwMDNlaV9hY3RpdmVfc2lkZSA/IFwmIzM0O0FjdGl2ZVwmIzM0OyA6IFwmIzM0O1Bhc3NpdmVcJiMzNDssXG4gMTI1Olx0XHRcdCAgXHUwMDI2Y29ubi1cdTAwM2VjX2xhZGRyLCBcdTAwMjZjb25uLVx1MDAzZWNfZmFkZHIsIGNvbm4tXHUwMDNlY190b3MsXG4gMTI2Olx0XHRcdCAgUkRTX1BST1RPQ09MX01BSk9SKGNvbm4tXHUwMDNlY192ZXJzaW9uKSxcbiAxMjc6XHRcdFx0ICBSRFNfUFJPVE9DT0xfTUlOT1IoY29ubi1cdTAwM2VjX3ZlcnNpb24pLFxuIDEyODpcdFx0XHQgIGljLVx1MDAzZWlfZmxvd2N0bCA/IFwmIzM0OywgZmxvdyBjb250cm9sXCYjMzQ7IDogXCYjMzQ7XCYjMzQ7KTtcbiAxMjk6XHRcbiAxMzA6XHRcdC8qIHJlY2VpdmUgc2wgZnJvbSB0aGUgcGVlciAqL1xuIDEzMTpcdFx0aWMtXHUwMDNlaV9zbCA9IGljLVx1MDAzZWlfY21faWQtXHUwMDNlcm91dGUucGF0aF9yZWMtXHUwMDNlc2w7XG4gMTMyOlx0XG4gMTMzOlx0XHRhdG9taWNfc2V0KFx1MDAyNmljLVx1MDAzZWlfY3FfcXVpZXNjZSwgMCk7XG4gMTM0Olx0XG4gMTM1Olx0XHQvKiBJbml0IHJpbmdzIGFuZCBmaWxsIHJlY3YuIHRoaXMgbmVlZHMgdG8gd2FpdCB1bnRpbCBwcm90b2NvbFxuIDEzNjpcdFx0ICogbmVnb3RpYXRpb24gaXMgY29tcGxldGUsIHNpbmNlIHJpbmcgbGF5b3V0IGlzIGRpZmZlcmVudFxuIDEzNzpcdFx0ICogZnJvbSAzLjEgdG8gNC4xLlxuIDEzODpcdFx0ICovXG4gMTM5Olx0XHRyZHNfaWJfc2VuZF9pbml0X3JpbmcoaWMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE0OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBSRFNfUkRNQSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yZHMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yZHMvS2NvbmZpZz0zPWNvbmZpZyBSRFNcbi0tXG5uZXQvcmRzL0tjb25maWctOS1cbm5ldC9yZHMvS2NvbmZpZzoxMDpjb25maWcgUkRTX1JETUFcbm5ldC9yZHMvS2NvbmZpZy0xMS1cdHRyaXN0YXRlIFwmIzM0O1JEUyBvdmVyIEluZmluaWJhbmRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvYmotXFwkXFwoQ09ORklHX1JEUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yZHMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yZHMvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5uZXQvcmRzL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX1JEUykgJiM0Mzs9IHJkcy5vXG5uZXQvcmRzL01ha2VmaWxlLTMtcmRzLXkgOj1cdGFmX3Jkcy5vIGJpbmQubyBjb25nLm8gY29ubmVjdGlvbi5vIGluZm8ubyBtZXNzYWdlLm8gICBcXFxuLS1cbm5ldC9yZHMvTWFrZWZpbGUtNi1cbm5ldC9yZHMvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfUkRTX1JETUEpICYjNDM7PSByZHNfcmRtYS5vXG5uZXQvcmRzL01ha2VmaWxlLTgtcmRzX3JkbWEteSA6PVx0cmRtYV90cmFuc3BvcnQubyBcXFxuLS1cbm5ldC9yZHMvTWFrZWZpbGUtMTItXG5uZXQvcmRzL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19SRFNfVENQKSAmIzQzOz0gcmRzX3RjcC5vXG5uZXQvcmRzL01ha2VmaWxlLTE0LXJkc190Y3AteSA6PVx0XHR0Y3AubyB0Y3BfY29ubmVjdC5vIHRjcF9saXN0ZW4ubyB0Y3BfcmVjdi5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDUzOAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBSRE1BIENvbmZpZ3VyYXRpb24gaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gUkRNQSB3aXRoaW4gdGhlIFJEUyAoUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cykgc3Vic3lzdGVtIG9mIHRoZSBMaW51eCBrZXJuZWwuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBsb29rIGF0IHRoZSBgS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgbmV0L3Jkcy9LY29uZmlnYCBmaWxlIGJlY2F1c2UgdGhhdCYjMzk7cyB0aGUgb2J2aW91cyBwbGFjZSB0byBmaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBmb3IgdGhlIFJEUyBwcm90b2NvbC4gSSYjMzk7bSB6ZXJvaW5nIGluIG9uIGBjb25maWcgUkRTX1JETUFgLiBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhlcmUmIzM5O3MgbGlrZWx5IGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24sIHBlcmhhcHMgYSBib29sZWFuLCB0aGF0IGNvbnRyb2xzIHdoZXRoZXIgb3Igbm90IHRoZSBSRE1BIGZlYXR1cmVzIGFyZSBlbmFibGVkIHdpdGhpbiBSRFMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgb3B0aW9ucyBtaWdodCBkZXBlbmQgb24gaXQsIHdoYXQgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUsIGFuZCB3aGF0IHRoZSBhc3NvY2lhdGVkIGhlbHAgdGV4dCBzYXlzIGFib3V0IGl0cyBpbnRlbmRlZCB1c2UgYW5kIGltcGxpY2F0aW9ucy4gRXNzZW50aWFsbHksIEkmIzM5O20gdHJ5aW5nIHRvIG1lbnRhbGx5IHJlY29uc3RydWN0IHRoZSBjb25maWd1cmF0aW9uIGxvZ2ljIGFuZCB1bmRlcnN0YW5kIGhvdyBgUkRTX1JETUFgIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIG5ldHdvcmsgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBzcGVjaWZpYyBwcm90b2NvbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9yZHMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdFxuICAgMzpcdGNvbmZpZyBSRFNcbiAgIDQ6XHRcdHRyaXN0YXRlIFwmIzM0O1RoZSBSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzIFByb3RvY29sXCYjMzQ7XG4gICA1Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDY6XHRcdGhlbHBcbiAgIDc6XHRcdCAgVGhlIFJEUyAoUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cykgcHJvdG9jb2wgcHJvdmlkZXMgcmVsaWFibGUsXG4gICA4Olx0XHQgIHNlcXVlbmNlZCBkZWxpdmVyeSBvZiBkYXRhZ3JhbXMgb3ZlciBJbmZpbmliYW5kIG9yIFRDUC5cbiAgIDk6XHRcbiAgMTA6XHRjb25maWcgUkRTX1JETUFcbiAgMTE6XHRcdHRyaXN0YXRlIFwmIzM0O1JEUyBvdmVyIEluZmluaWJhbmRcJiMzNDtcbiAgMTI6XHRcdGRlcGVuZHMgb24gUkRTIFx1MDAyNlx1MDAyNiBJTkZJTklCQU5EIFx1MDAyNlx1MDAyNiBJTkZJTklCQU5EX0FERFJfVFJBTlNcbiAgMTM6XHRcdGhlbHBcbiAgMTQ6XHRcdCAgQWxsb3cgUkRTIHRvIHVzZSBJbmZpbmliYW5kIGFzIGEgdHJhbnNwb3J0LlxuICAxNTpcdFx0ICBUaGlzIHRyYW5zcG9ydCBzdXBwb3J0cyBSRE1BIG9wZXJhdGlvbnMuXG4gIDE2Olx0XG4gIDE3Olx0Y29uZmlnIFJEU19UQ1BcbiAgMTg6XHRcdHRyaXN0YXRlIFwmIzM0O1JEUyBvdmVyIFRDUFwmIzM0O1xuICAxOTpcdFx0ZGVwZW5kcyBvbiBSRFNcbiAgMjA6XHRcdGRlcGVuZHMgb24gSVBWNiB8fCAhSVBWNlxuICAyMTpcdFx0aGVscFxuICAyMjpcdFx0ICBBbGxvdyBSRFMgdG8gdXNlIFRDUCBhcyBhIHRyYW5zcG9ydC5cbiAgMjM6XHRcdCAgVGhpcyB0cmFuc3BvcnQgZG9lcyBub3Qgc3VwcG9ydCBSRE1BIG9wZXJhdGlvbnMuXG4gIDI0Olx0XG4gIDI1Olx0Y29uZmlnIFJEU19ERUJVR1xuICAyNjpcdFx0Ym9vbCBcJiMzNDtSRFMgZGVidWdnaW5nIG1lc3NhZ2VzXCYjMzQ7XG4gIDI3Olx0XHRkZXBlbmRzIG9uIFJEU1xuICAyODpcdFx0ZGVmYXVsdCBuXG4gIDI5Olx0XG4gIDMwOlx0Y29uZmlnIEdDT1ZfUFJPRklMRV9SRFNcbiAgMzE6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEdDT1YgcHJvZmlsaW5nIG9uIFJEU1wmIzM0O1xuICAzMjpcdFx0ZGVwZW5kcyBvbiBHQ09WX0tFUk5FTFxuICAzMzpcdFx0aGVscFxuICAzNDpcdFx0ICBFbmFibGUgR0NPViBwcm9maWxpbmcgb24gUkRTIGZvciBjaGVja2luZyB3aGljaCBmdW5jdGlvbnMvbGluZXNcbiAgMzU6XHRcdCAgYXJlIGV4ZWN1dGVkLlxuICAzNjpcdFxuICAzNzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE0OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNTQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUkRNQSBEcml2ZXIgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhlIFJETUEgZHJpdmVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc3BlY2lmaWNhbGx5IGZvciBwb3RlbnRpYWwgZGVwbG95bWVudCBzY2VuYXJpb3MuIE15IG1pbmQganVtcHMgaW1tZWRpYXRlbHkgdG8gYENPTkZJR19SRFNgLCB0aGF0JiMzOTtzIHRoZSBiYXNlIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgcHJvdG9jb2wgSSYjMzk7bSBtb3N0IGZhbWlsaWFyIHdpdGguIEJ1dCwgZ2l2ZW4gbXkgZm9jdXMgb24gUmVtb3RlIERpcmVjdCBNZW1vcnkgQWNjZXNzLCBJIG5lZWQgdG8gY29uc2lkZXIgYENPTkZJR19SRFNfUkRNQWAgd2hpY2ggaXMgdGhlIG9idmlvdXMgb25lLCBhbmQgYWxzbyBgQ09ORklHX0lORklOSUJBTkRgLiBPZiBjb3Vyc2UsIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYWRkcmVzcyB0cmFuc2xhdGlvbiBpcyB3b3JraW5nIGNvcnJlY3RseSwgc28gYENPTkZJR19JTkZJTklCQU5EX0FERFJfVFJBTlNgIGlzIGEgbXVzdC4gTm93LCBkZXBlbmRpbmcgb24gdGhlIGVudmlyb25tZW504oCUc3BlY2lmaWNhbGx5IGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdmlydHVhbGl6YXRpb27igJRJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGxvb2sgYXQgdGhlIHNvZnQtUkRNQSBkcml2ZXJzOiBgQ09ORklHX1JETUFfUlhFYCBvciBtYXliZSBgQ09ORklHX1JETUFfU0lXYC4gVGhlc2UgYXJlIGNydWNpYWwgZm9yIHNpdHVhdGlvbnMgbGlrZSB1c2luZyBRRU1VIG9yIG90aGVyIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhleSBlbmFibGUgUkRNQSBmdW5jdGlvbmFsaXR5IHdpdGhvdXQgZGVkaWNhdGVkIGhhcmR3YXJlLCB0aHJvdWdoIGByZG1hX3J4ZWAgb3IgYHNpd2AuIFRoYXQmIzM5O3MgYSBrZXkgY29uc2lkZXJhdGlvbi4KCk15IG5leHQgaW1tZWRpYXRlIHRhc2sgaXMgdG8gdHJhY2sgZG93biB3aGVyZSBgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGVgIGlzIGNhbGxlZC4gVGhhdCYjMzk7cyB0aGUgY3JpdGljYWwgY29ubmVjdGlvbiBjb21wbGV0aW9uIHBhdGgsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBJIG5lZWQgdG8gbGlzdCB0aGUgY2FsbGVycyBvZiB0aGF0IGZ1bmN0aW9uLCBzbyBJIGNhbiBzZWUgd2hhdCB0aGUgY3JpdGljYWwgcGF0aHMgYXJlLiBLbm93aW5nIHdobyBpcyAqdXNpbmcqIHRoZSBjb25uZWN0aW9uIGNvbXBsZXRlIGZ1bmN0aW9uIGlzIHZpdGFsIHRvIG1ha2luZyBkZWNpc2lvbnMgYWJvdXQgdGhpcyBhcmVhLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZHNfaWJfY21fY29ubmVjdF9jb21wbGV0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yZHMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yZHMvaWIuYz01NTk9c3RydWN0IHJkc190cmFuc3BvcnQgcmRzX2liX3RyYW5zcG9ydCA9IHtcbi0tXG5uZXQvcmRzL2liLmMtNTczLVx0LmNtX2hhbmRsZV9jb25uZWN0XHQ9IHJkc19pYl9jbV9oYW5kbGVfY29ubmVjdCxcbm5ldC9yZHMvaWIuYzo1NzQ6XHQuY21fY29ubmVjdF9jb21wbGV0ZVx0PSByZHNfaWJfY21fY29ubmVjdF9jb21wbGV0ZSxcbm5ldC9yZHMvaWIuYy01NzUtXHQuc3RhdHNfaW5mb19jb3B5XHQ9IHJkc19pYl9zdGF0c19pbmZvX2NvcHksXG4tLVxubmV0L3Jkcy9pYi5oPTM3Nj1pbnQgcmRzX2liX2NtX2luaXRpYXRlX2Nvbm5lY3Qoc3RydWN0IHJkbWFfY21faWQgKmNtX2lkLCBib29sIGlzdjYpO1xubmV0L3Jkcy9pYi5oOjM3Nzp2b2lkIHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubixcbm5ldC9yZHMvaWIuaC0zNzgtXHRcdFx0XHRzdHJ1Y3QgcmRtYV9jbV9ldmVudCAqZXZlbnQpO1xuLS1cbm5ldC9yZHMvaWJfY20uYz01Nz1zdGF0aWMgdm9pZCByZHNfaWJfc2V0X2Zsb3dfY29udHJvbChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHUzMiBjcmVkaXRzKVxuLS1cbm5ldC9yZHMvaWJfY20uYy03My0gKi9cbm5ldC9yZHMvaWJfY20uYzo3NDp2b2lkIHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHJkbWFfY21fZXZlbnQgKmV2ZW50KVxubmV0L3Jkcy9pYl9jbS5jLTc1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA3OAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgY21fY29ubmVjdF9jb21wbGV0ZWAgaW4gYG5ldC9yZHMvYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biBhbGwgdGhlIGNhbGwgc2l0ZXMgZm9yIGBjbV9jb25uZWN0X2NvbXBsZXRlYCB3aXRoaW4gdGhlIGBuZXQvcmRzL2AgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGJlc3Qgd2F5IHRvIHVuZGVyc3RhbmQgaG93IGEgc3BlY2lmaWMgZnVuY3Rpb24gaXMgdXNlZCBhbmQsIGluIHRoaXMgY2FzZSwgaG93IGNvbm5lY3Rpb24gY29tcGxldGlvbiBpcyBoYW5kbGVkIGluIHRoZSBSRFMgbmV0d29yayBzdGFjay4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGZvciBwbGFjZXMgd2hlcmUgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGdldHMgc2lnbmFsZWQsIG9yIHBlcmhhcHMgd2hlcmUgZXJyb3IgaGFuZGxpbmcgcmVsYXRlZCB0byB0aGF0IHBoYXNlIGlzIGltcGxlbWVudGVkLiBJJiMzOTttIGFudGljaXBhdGluZyBzb21lIGludHJpY2F0ZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgUkRNQSBzdGFjayBpZiBSRFMgaXMgaW52b2x2ZWQsIGFuZCBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgZXNwZWNpYWxseSBhcm91bmQgbG9jayB1c2FnZS4gVGltZSB0byBkaXZlIGludG8gdGhlIHNvdXJjZSBjb2RlIGFuZCBzdGFydCBncmVwcGluZyEgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB3aWxsIGludm9sdmUgbG9va2luZyBhdCBjb250ZXh0IHN3aXRjaGVzIGFuZCBkYXRhIHRyYW5zZmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjbV9jb25uZWN0X2NvbXBsZXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Jkcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9pYi5jPTU1OT1zdHJ1Y3QgcmRzX3RyYW5zcG9ydCByZHNfaWJfdHJhbnNwb3J0ID0ge1xuLS1cbm5ldC9yZHMvaWIuYy01NzMtXHQuY21faGFuZGxlX2Nvbm5lY3RcdD0gcmRzX2liX2NtX2hhbmRsZV9jb25uZWN0LFxubmV0L3Jkcy9pYi5jOjU3NDpcdC5jbV9jb25uZWN0X2NvbXBsZXRlXHQ9IHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlLFxubmV0L3Jkcy9pYi5jLTU3NS1cdC5zdGF0c19pbmZvX2NvcHlcdD0gcmRzX2liX3N0YXRzX2luZm9fY29weSxcbi0tXG5uZXQvcmRzL2liLmg9Mzc2PWludCByZHNfaWJfY21faW5pdGlhdGVfY29ubmVjdChzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQsIGJvb2wgaXN2Nik7XG5uZXQvcmRzL2liLmg6Mzc3OnZvaWQgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLFxubmV0L3Jkcy9pYi5oLTM3OC1cdFx0XHRcdHN0cnVjdCByZG1hX2NtX2V2ZW50ICpldmVudCk7XG4tLVxubmV0L3Jkcy9pYl9jbS5jPTU3PXN0YXRpYyB2b2lkIHJkc19pYl9zZXRfZmxvd19jb250cm9sKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgdTMyIGNyZWRpdHMpXG4tLVxubmV0L3Jkcy9pYl9jbS5jLTczLSAqL1xubmV0L3Jkcy9pYl9jbS5jOjc0OnZvaWQgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBzdHJ1Y3QgcmRtYV9jbV9ldmVudCAqZXZlbnQpXG5uZXQvcmRzL2liX2NtLmMtNzUte1xuLS1cbm5ldC9yZHMvaWJfc3lzY3RsLmM9NTA9c3RhdGljIHVuc2lnbmVkIGxvbmcgcmRzX2liX3N5c2N0bF9tYXhfdW5zaWdfd3JfbWF4ID0gNjQ7XG4tLVxubmV0L3Jkcy9pYl9zeXNjdGwuYy01OC0gKiBzZXR0aW5nIHRoaXMgdG8gMSBhbmQgbW92aW5nIGluaXQvcmVmaWxsIG9mIHNlbmQvcmVjdlxubmV0L3Jkcy9pYl9zeXNjdGwuYzo1OTogKiByaW5ncyBmcm9tIGliX2NtX2Nvbm5lY3RfY29tcGxldGUoKSBiYWNrIGludG8gaWJfc2V0dXBfcXAoKVxubmV0L3Jkcy9pYl9zeXNjdGwuYy02MC0gKiB3aWxsIGNhdXNlIGNyZWRpdHMgdG8gYmUgYWRkZWQgYmVmb3JlIHByb3RvY29sIG5lZ290aWF0aW9uLlxuLS1cbm5ldC9yZHMvcmRtYV90cmFuc3BvcnQuYz00OT1zdGF0aWMgaW50IHJkc19yZG1hX2NtX2V2ZW50X2hhbmRsZXJfY21uKHN0cnVjdCByZG1hX2NtX2lkICpjbV9pZCxcbi0tXG5uZXQvcmRzL3JkbWFfdHJhbnNwb3J0LmMtMTE3LVx0XHRpZiAoY29ubilcbm5ldC9yZHMvcmRtYV90cmFuc3BvcnQuYzoxMTg6XHRcdFx0dHJhbnMtXHUwMDNlY21fY29ubmVjdF9jb21wbGV0ZShjb25uLCBldmVudCk7XG5uZXQvcmRzL3JkbWFfdHJhbnNwb3J0LmMtMTE5LVx0XHRicmVhaztcbi0tXG5uZXQvcmRzL3Jkcy5oPTUyOT1zdHJ1Y3QgcmRzX3RyYW5zcG9ydCB7XG4tLVxubmV0L3Jkcy9yZHMuaC01OTQtXHRpbnQgKCpjbV9pbml0aWF0ZV9jb25uZWN0KShzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQsIGJvb2wgaXN2Nik7XG5uZXQvcmRzL3Jkcy5oOjU5NTpcdHZvaWQgKCpjbV9jb25uZWN0X2NvbXBsZXRlKShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sXG5uZXQvcmRzL3Jkcy5oLTU5Ni1cdFx0XHRcdCAgICBzdHJ1Y3QgcmRtYV9jbV9ldmVudCAqZXZlbnQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDQzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIFJETUEgRXZlbnQgSGFuZGxlcioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhlIFJEUyBSRE1BIGNvbm5lY3Rpb24gbWFuYWdlciBldmVudCBoYW5kbGluZy4gVGhlIHBsYWNlIHRvIHN0YXJ0LCBhcyB1c3VhbCwgaXMgdGhlIGNvcmUuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIGBuZXQvcmRzL3JkbWFfdHJhbnNwb3J0LmNgIGFuZCBzcGVjaWZpY2FsbHkgbG9vayBhdCBgcmRzX3JkbWFfY21fZXZlbnRfaGFuZGxlcl9jbW5gLiBUaGlzIGlzIHRoZSBzaGFyZWQsIGNvbW1vbiBoYW5kbGVyLCB3aGljaCBpcyBnZW5lcmFsbHkgd2hlcmUgdGhlIGxvd2VyLWxldmVsIFJETUEgQ00gZXZlbnRzIHdpbGwgYmUgcHJvY2Vzc2VkIGJlZm9yZSB0aGV5JiMzOTtyZSBkaXNwYXRjaGVkIHRvIG1vcmUgc3BlY2lmaWMgUkRTLWxldmVsIGxvZ2ljLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBpbml0aWFsIENNIGV2ZW50IHByb2Nlc3Npbmc6IGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCwgY29ubmVjdGlvbiBmYWlsdXJlcywgZGlzY29ubmVjdHMsIGFuZCBhbnkgZXJyb3IgaGFuZGxpbmcgaGFwcGVuaW5nIGF0IHRoZSBDTSBsZXZlbC4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IHRoZSBjb2RlIGludGVyZmFjZXMgd2l0aCB0aGUgUkRTIHByb3RvY29sIHN0YXRlIG1hY2hpbmVzIOKAkyBJJiMzOTttIGludGVyZXN0ZWQgaW4gaG93IGl0IHRyYW5zbGF0ZXMgdGhlIFJETUEgdHJhbnNwb3J0LWxldmVsIGV2ZW50cyBpbnRvIGhpZ2hlci1sZXZlbCBSRFMgY29ubmVjdGlvbiBzdGF0ZXMgYW5kIGFjdGlvbnMuIEkmIzM5O20gaG9waW5nIGl0JiMzOTtzIHdlbGwtc3RydWN0dXJlZCBhbmQgaGFuZGxlcyB0aGluZ3MgbGlrZSByZXRyaWVzLCBiYWNrb2ZmLCBhbmQgZXJyb3IgcmVwb3J0aW5nIGdyYWNlZnVsbHksIGFuZCB0aGF0IHRoZSBldmVudCB0eXBlcyBhcmUgY2xlYXJseSBzZXBhcmF0ZWQuIE15IGV4cGVjdGF0aW9uIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGEgY3JpdGljYWwgcGFydCBvZiBob3cgUkRTIGRlYWxzIHdpdGggdGhlIFJETUEgc3RhY2sgdW5kZXJuZWF0aC4gTGV0JiMzOTtzIHNlZSBpZiBteSBtZW50YWwgbW9kZWwgbGluZXMgdXAgd2l0aCB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcmRzL3JkbWFfdHJhbnNwb3J0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwMDpcdFx0XHQgKiBjbV9pZCBpcyB2YWxpZCBiZWZvcmUgcHJvY2VlZGluZ1xuIDEwMTpcdFx0XHQgKi9cbiAxMDI6XHRcdFx0aWYgKGNvbm4pIHtcbiAxMDM6XHRcdFx0XHRzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmliaWM7XG4gMTA0Olx0XG4gMTA1Olx0XHRcdFx0aWJpYyA9IGNvbm4tXHUwMDNlY190cmFuc3BvcnRfZGF0YTtcbiAxMDY6XHRcdFx0XHRpZiAoaWJpYyBcdTAwMjZcdTAwMjYgaWJpYy1cdTAwM2VpX2NtX2lkID09IGNtX2lkKSB7XG4gMTA3Olx0XHRcdFx0XHRjbV9pZC1cdTAwM2Vyb3V0ZS5wYXRoX3JlY1swXS5zbCA9XG4gMTA4Olx0XHRcdFx0XHRcdFRPU19UT19TTChjb25uLVx1MDAzZWNfdG9zKTtcbiAxMDk6XHRcdFx0XHRcdHJldCA9IHRyYW5zLVx1MDAzZWNtX2luaXRpYXRlX2Nvbm5lY3QoY21faWQsIGlzdjYpO1xuIDExMDpcdFx0XHRcdH0gZWxzZSB7XG4gMTExOlx0XHRcdFx0XHRyZHNfY29ubl9kcm9wKGNvbm4pO1xuIDExMjpcdFx0XHRcdH1cbiAxMTM6XHRcdFx0fVxuIDExNDpcdFx0XHRicmVhaztcbiAxMTU6XHRcbiAxMTY6XHRcdGNhc2UgUkRNQV9DTV9FVkVOVF9FU1RBQkxJU0hFRDpcbiAxMTc6XHRcdFx0aWYgKGNvbm4pXG4gMTE4Olx0XHRcdFx0dHJhbnMtXHUwMDNlY21fY29ubmVjdF9jb21wbGV0ZShjb25uLCBldmVudCk7XG4gMTE5Olx0XHRcdGJyZWFrO1xuIDEyMDpcdFxuIDEyMTpcdFx0Y2FzZSBSRE1BX0NNX0VWRU5UX1JFSkVDVEVEOlxuIDEyMjpcdFx0XHRpZiAoIWNvbm4pXG4gMTIzOlx0XHRcdFx0YnJlYWs7XG4gMTI0Olx0XHRcdGVyciA9IChpbnQgKilyZG1hX2NvbnN1bWVyX3JlamVjdF9kYXRhKGNtX2lkLCBldmVudCwgXHUwMDI2bGVuKTtcbiAxMjU6XHRcdFx0aWYgKCFlcnIgfHxcbiAxMjY6XHRcdFx0ICAgIChlcnIgXHUwMDI2XHUwMDI2IGxlbiBcdTAwM2U9IHNpemVvZigqZXJyKSBcdTAwMjZcdTAwMjZcbiAxMjc6XHRcdFx0ICAgICAoKCplcnIpIFx1MDAzYz0gUkRTX1JETUFfUkVKX0lOQ09NUEFUKSkpIHtcbiAxMjg6XHRcdFx0XHRwcl93YXJuKFwmIzM0O1JEUy9SRE1BOiBjb25uIFx1MDAzYyVwSTZjLCAlcEk2Y1x1MDAzZSByZWplY3RlZCwgZHJvcHBpbmcgY29ubmVjdGlvblxcblwmIzM0OyxcbiAxMjk6XHRcdFx0XHRcdFx1MDAyNmNvbm4tXHUwMDNlY19sYWRkciwgXHUwMDI2Y29ubi1cdTAwM2VjX2ZhZGRyKTtcbiAxMzA6XHRcbiAxMzE6XHRcdFx0XHRpZiAoIWNvbm4tXHUwMDNlY190b3MpXG4gMTMyOlx0XHRcdFx0XHRjb25uLVx1MDAzZWNfcHJvcG9zZWRfdmVyc2lvbiA9IFJEU19QUk9UT0NPTF9DT01QQVRfVkVSU0lPTjtcbiAxMzM6XHRcbiAxMzQ6XHRcdFx0XHRyZHNfY29ubl9kcm9wKGNvbm4pO1xuIDEzNTpcdFx0XHR9XG4gMTM2Olx0XHRcdHJkc2RlYnVnKFwmIzM0O0Nvbm5lY3Rpb24gcmVqZWN0ZWQ6ICVzXFxuXCYjMzQ7LFxuIDEzNzpcdFx0XHRcdCByZG1hX3JlamVjdF9tc2coY21faWQsIGV2ZW50LVx1MDAzZXN0YXR1cykpO1xuIDEzODpcdFx0XHRicmVhaztcbiAxMzk6XHRcdGNhc2UgUkRNQV9DTV9FVkVOVF9BRERSX0VSUk9SOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDI0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldDogUkRTIG92ZXIgUkRNQSBDb25uZWN0aW9uIEhhbmRsaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBhIGNoYW5nZSByZWxhdGVkIHRvIGhvdyBSRFMgKFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMpIGNvbm5lY3Rpb25zIGFyZSBoYW5kbGVkIHdoZW4gdXNpbmcgUkRNQSAoUmVtb3RlIERpcmVjdCBNZW1vcnkgQWNjZXNzKSwgc3BlY2lmaWNhbGx5IFJEU19SRE1BLCB3aGljaCByZWxpZXMgb24gdGhlIFJETUEgQ29ubmVjdGlvbiBNYW5hZ2VyIChDTSkuIFRoZSBjb3JlIGlzc3VlIHNlZW1zIHRvIGJlIGluIHRoZSBgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGVgIGZ1bmN0aW9uLCB3aGljaCBnZXRzIHRyaWdnZXJlZCB3aGVuIGFuIFJETUEgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGV2ZW50IGhhcHBlbnMsIHNwZWNpZmljYWxseSBgUkRNQV9DTV9FVkVOVF9FU1RBQkxJU0hFRGAuCgpQcmV2aW91c2x5LCBpZiB0aGUgY29ubmVjdGlvbiYjMzk7cyB2ZXJzaW9uIHdhc24mIzM5O3QgY29tcGF0aWJsZSAoZWl0aGVyIHRvbyBvbGQgb3IgYSBzcGVjaWZpYyBjb21wYXRpYmlsaXR5IHZlcnNpb24pLCB0aGUgY29kZSB3b3VsZCBqdXN0IGNhbGwgYHJkc19jb25uX2Rlc3Ryb3lgLiBCdXQgbm93LCBpdCYjMzk7cyBjYWxsaW5nIGByZHNfY29ubl9kcm9wYCBpbnN0ZWFkLiBUaGUga2V5IGRpZmZlcmVuY2UgaGVyZSBpcyB0aGUgdGltaW5nLiBgcmRzX2Nvbm5fZGVzdHJveWAgd2FzIGJlaW5nIGNhbGxlZCBkaXJlY3RseSB3aXRoaW4gYW4gZXZlbnQgaGFuZGxlciBvciBjb21wbGV0aW9uIGNhbGxiYWNrLCB3aGljaCBpcyBhIGJpZyByZWQgZmxhZyBmb3IgcG90ZW50aWFsIHByb2JsZW1zLiBJdCBjb3VsZCBoYXZlIGxlZCB0byB0aGluZ3MgbGlrZSBVc2UtQWZ0ZXItRnJlZSAoVUFGKSB2dWxuZXJhYmlsaXRpZXMsIGRlYWRsb2Nrcywgb3IgYXNzZXJ0aW9uIGZhaWx1cmVzLCBiZWNhdXNlIHlvdSYjMzk7cmUgdGVhcmluZyBkb3duIGEgY29ubmVjdGlvbiBkaXJlY3RseSBmcm9tIGFuIGV2ZW50IGhhbmRsZXIgY29udGV4dC4gYHJkc19jb25uX2Ryb3BgLCBvbiB0aGUgb3RoZXIgaGFuZCwgaW5pdGlhdGVzIGFuICphc3luY2hyb25vdXMqIHRlYXJkb3duLCB3aGljaCBpcyB0aGUgc2FmZXIgYXBwcm9hY2guCgpUaGUgY3JpdGljYWwgcXVlc3Rpb24gbm93IGlzLCBjYW4gSSByZWFjaCB0aGlzIGNvZGUgaW4gUUVNVT8gQW5kIHRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nIHllcyEgUkRTIHNvY2tldHMgKEFGX1JEUykgd2l0aCB0aGUgUkRTX1JETUEgcGF0aCwgcGFydGljdWxhcmx5IHVzaW5nIHNvZnR3YXJlIFJETUEgbGlrZSBgcmRtYV9yeGVgIG9yIGBzaXdgLCBhcmUgYWJzb2x1dGVseSBmdXp6YWJsZSBuZXR3b3JrIHByb3RvY29scyB3aXRoaW4gUUVNVS4gU3l6a2FsbGVyIHN1cHBvcnRzIHRoaXMuIFRoaXMgdG91Y2hlcyB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBSRFMgcHJvdG9jb2wgbG9naWMsIHNvIGl0JiMzOTtzIGludGVyZXN0aW5nLgoKU28sIGxldCYjMzk7cyBjaGVjayB0aGUgY3JpdGVyaWE6CgoqICAgKipSZWFjaGFiaWxpdHk6KiogV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBSRFMgb3ZlciBJbmZpbmlCYW5kIHVzaW5nIHNvZnR3YXJlIFJETUEgZGV2aWNlcy4gVGhpcyBtZWFucyBgc29ja2V0KEFGX1JEUywgLi4uKWAgb3IgdXNpbmcgdGhlIFJETUEgQ00sIHdoaWNoICppcyogYWNjZXNzaWJsZSBhbmQgZnV6emFibGUgaW4gdGhlIFFFTVUgZW52aXJvbm1lbnQuIENoZWNrLgoqICAgKipNb2RpZmljYXRpb246KiogVGhlIGNoYW5nZSBpcyByaWdodCB0aGVyZSBpbiBgbmV0L3Jkcy9pYl9jbS5jYDogd2UmIzM5O3ZlIHN3aXRjaGVkIGVycm9yIGhhbmRsaW5nIGFuZCBzdGF0ZSB0cmFuc2l0aW9uIGZyb20gYHJkc19jb25uX2Rlc3Ryb3lgIHRvIGByZHNfY29ubl9kcm9wYCBpbiBgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGVgLiBDaGVjay4KKiAgICoqSXMgV29ydGggRnV6emluZzoqKiBBYnNvbHV0ZWx5LiBXZSYjMzk7cmUgdG91Y2hpbmcgY29yZSBuZXR3b3JrIGNvZGUsIHNwZWNpZmljYWxseSBpbiBSRFMsIHRoYXQgaGFzIGNyaXRpY2FsIGVycm9yLWhhbmRsaW5nIGxvZ2ljLiBDaGVjay4KCkZpbmFsbHksIGxldCYjMzk7cyBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgcmlnaHQgY29uZmlndXJhdGlvbi4gV2UmIzM5O2xsIG5lZWQ6CgoqICAgUkRTCiogICBSRFNfUkRNQQoqICAgSU5GSU5JQkFORAoqICAgSU5GSU5JQkFORF9BRERSX1RSQU5TCgpMZXQmIzM5O3MgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGBuZXQvcmRzL0tjb25maWdgIGFuZCBgZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWdgIGZpbGVzIHRvIHZlcmlmeSB0aGVyZSBhcmUgbm8gaGlkZGVuIGRlcGVuZGVuY2llcy4gVGltZSB0byBtYWtlIHN1cmUgdGhvc2Uga2VybmVsIGNvbmZpZ3MgYXJlIHNldCBhbmQgc3RhcnQgZnV6emluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElORklOSUJBTkQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2luZmluaWJhbmQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzoyOm1lbnVjb25maWcgSU5GSU5JQkFORFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0luZmluaUJhbmQgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnPTE2PWlmIElORklOSUJBTkRcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTE3LVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6MTg6Y29uZmlnIElORklOSUJBTkRfVVNFUl9NQURcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTE5LVx0dHJpc3RhdGUgXCYjMzQ7SW5maW5pQmFuZCB1c2Vyc3BhY2UgTUFEIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy0yNy1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjI4OmNvbmZpZyBJTkZJTklCQU5EX1VTRVJfQUNDRVNTXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy0yOS1cdHRyaXN0YXRlIFwmIzM0O0luZmluaUJhbmQgdXNlcnNwYWNlIGFjY2VzcyAodmVyYnMgYW5kIENNKVwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTM5LVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NDA6Y29uZmlnIElORklOSUJBTkRfVVNFUl9BQ0NFU1NfQ09SRVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDEtXHRib29sXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDMtXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo0NDpjb25maWcgSU5GSU5JQkFORF9VU0VSX01FTVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDUtXHRib29sXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNTAtXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo1MTpjb25maWcgSU5GSU5JQkFORF9PTl9ERU1BTkRfUEFHSU5HXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy01Mi1cdGJvb2wgXCYjMzQ7SW5maW5pQmFuZCBvbi1kZW1hbmQgcGFnaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy02My1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjY0OmNvbmZpZyBJTkZJTklCQU5EX0FERFJfVFJBTlNcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTY1LVx0Ym9vbCBcJiMzNDtSRE1BL0NNXCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNzEtXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo3Mjpjb25maWcgSU5GSU5JQkFORF9BRERSX1RSQU5TX0NPTkZJR0ZTXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy03My1cdGJvb2xcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy04MC1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjgxOmNvbmZpZyBJTkZJTklCQU5EX1ZJUlRfRE1BXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy04Mi1cdGRlZl9ib29sICFISUdITUVNXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JuZ19yZS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm5nX3JlL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9CTkdfUkVcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibmdfcmUvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7QnJvYWRjb20gTmV4dCBnZW5lcmF0aW9uIFJvQ0UgSENBIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfQk5YVF9SRVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7QnJvYWRjb20gTmV0eHRyZW1lIEhDQSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfQ1hHQjRcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtDaGVsc2lvIFQ0L1Q1IFJETUEgRHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9LY29uZmlnLTYtXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZWZhL0tjb25maWc6Nzpjb25maWcgSU5GSU5JQkFORF9FRkFcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lZmEvS2NvbmZpZy04LVx0dHJpc3RhdGUgXCYjMzQ7QW1hem9uIEVsYXN0aWMgRmFicmljIEFkYXB0ZXIgKEVGQSkgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX0VSRE1BXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7QWxpYmFiYSBFbGFzdGljIFJETUEgQWRhcHRlciAoRVJETUEpIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfSEZJMVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hmaTEvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7Q29ybmVsaXMgT1BYIEdlbjEgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfSE5TX0hJUDA4XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0hpc2lsaWNvbiBIaXAwOCBGYW1pbHkgUm9DRSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL0tjb25maWctMy1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9LY29uZmlnOjQ6Y29uZmlnIElORklOSUJBTkRfSU9OSUNcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9LY29uZmlnLTUtXHR0cmlzdGF0ZSBcJiMzNDtBTUQgUGVuc2FuZG8gRFNDIFJETUEvUm9DRSBTdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfSVJETUFcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtJbnRlbChSKSBFdGhlcm5ldCBQcm90b2NvbCBEcml2ZXIgZm9yIFJETUFcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9NVEhDQVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O01lbGxhbm94IEhDQSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL0tjb25maWctOS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9LY29uZmlnOjEwOmNvbmZpZyBJTkZJTklCQU5EX01USENBX0RFQlVHXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZy0xMS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBkZWJ1Z2dpbmcgb3V0cHV0XCYjMzQ7IGlmIEVYUEVSVFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9vY3JkbWEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfT0NSRE1BXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvb2NyZG1hL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0VtdWxleCBPbmUgQ29ubmVjdCBIQ0Egc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9xZWRyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9xZWRyL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9RRURSXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvcWVkci9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtRTG9naWMgUm9DRSBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvdXNuaWMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3VzbmljL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9VU05JQ1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L3VzbmljL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1ZlcmJzIHN1cHBvcnQgZm9yIENpc2NvIFZJQ1wmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody92bXdfcHZyZG1hL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody92bXdfcHZyZG1hL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9WTVdBUkVfUFZSRE1BXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvdm13X3B2cmRtYS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtWTXdhcmUgUGFyYXZpcnR1YWxpemVkIFJETUEgRHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3JkbWF2dC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcmRtYXZ0L0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9SRE1BVlRcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yZG1hdnQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7UkRNQSB2ZXJicyB0cmFuc3BvcnQgbGlicmFyeVwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfSVBPSUJcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7SVAtb3Zlci1JbmZpbmlCYW5kXCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnLTExLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnOjEyOmNvbmZpZyBJTkZJTklCQU5EX0lQT0lCX0NNXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWctMTMtXHRib29sIFwmIzM0O0lQLW92ZXItSW5maW5pQmFuZCBDb25uZWN0ZWQgTW9kZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnLTI2LVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnOjI3OmNvbmZpZyBJTkZJTklCQU5EX0lQT0lCX0RFQlVHXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWctMjgtXHRib29sIFwmIzM0O0lQLW92ZXItSW5maW5pQmFuZCBkZWJ1Z2dpbmdcJiMzNDsgaWYgRVhQRVJUXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnLTQxLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnOjQyOmNvbmZpZyBJTkZJTklCQU5EX0lQT0lCX0RFQlVHX0RBVEFcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy00My1cdGJvb2wgXCYjMzQ7SVAtb3Zlci1JbmZpbmlCYW5kIGRhdGEgcGF0aCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9JU0VSXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7aVNDU0kgRXh0ZW5zaW9ucyBmb3IgUkRNQSAoaVNFUilcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXJ0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlcnQvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX0lTRVJUXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXJ0L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O2lTQ1NJIEV4dGVuc2lvbnMgZm9yIFJETUEgKGlTRVIpIHRhcmdldCBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctMi1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnOjM6Y29uZmlnIElORklOSUJBTkRfUlRSU1xuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctNC1cdHRyaXN0YXRlXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctNi1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnOjc6Y29uZmlnIElORklOSUJBTkRfUlRSU19DTElFTlRcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnLTgtXHR0cmlzdGF0ZSBcJiMzNDtSVFJTIGNsaWVudCBtb2R1bGVcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3J0cnMvS2NvbmZpZy0xNy1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnOjE4OmNvbmZpZyBJTkZJTklCQU5EX1JUUlNfU0VSVkVSXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3J0cnMvS2NvbmZpZy0xOS1cdHRyaXN0YXRlIFwmIzM0O1JUUlMgc2VydmVyIG1vZHVsZVwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9TUlBcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0luZmluaUJhbmQgU0NTSSBSRE1BIFByb3RvY29sXCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnB0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwdC9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfU1JQVFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnB0L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0luZmluaUJhbmQgU0NTSSBSRE1BIFByb3RvY29sIHRhcmdldCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTU4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgUkRNQSBSWEUgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBSRE1BX1JYRWAgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIEluZmluaWJhbmQgc3RhY2suIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGUgbW9zdCBsaWtlbHkgc3BvdCB0byBmaW5kIHRoZSByZWxldmFudCBLY29uZmlnIGlzIGluIGBkcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL2AuIExldCYjMzk7cyBuYXZpZ2F0ZSB0aGVyZSBhbmQgZXhhbWluZSB0aGUgYEtjb25maWdgIGZpbGUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgbWF5YmUgc29tZSBkZXNjcmlwdGlvbnMgdGhhdCBzaGVkIGxpZ2h0IG9uIGhvdyB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCwgZGlzYWJsZWQsIGFuZCBwZXJoYXBzIGNvbmZpZ3VyZWQgZnVydGhlci4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYXMgdG8gaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBkcml2ZXIsIGFuZCBwb3RlbnRpYWwgaW1wYWN0cyBvbiBwZXJmb3JtYW5jZSBvciBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gZGVjaXNpb25zIGFyZSB1c3VhbGx5IG1hZGUsIHNvIHRoaXMgS2NvbmZpZyBpcyBhIGNydWNpYWwgZmlyc3Qgc3RvcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFJETUFfUlhFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvS2NvbmZpZzoyOmNvbmZpZyBSRE1BX1JYRVxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtTb2Z0d2FyZSBSRE1BIG92ZXIgRXRoZXJuZXQgKFJvQ0UpIGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ5OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuCgoqKkZvY3VzaW5nIG9uIHRoZSBDb25uZWN0aW9uIE1hbmFnZW1lbnQgaW4gUkRTL0lCKioKClJpZ2h0LCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiBjb25uZWN0aW9uIGNvbXBsZXRpb24gd2l0aGluIHRoZSBSRFMgb3ZlciBJbmZpbmlCYW5kIChJQikgcmVhbG0uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyB0aGUgYHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbmV0L3Jkcy9pYl9jbS5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgYWN0aW9uIGlzLCBiYXNlZCBvbiB0aGUgY29udGV4dC4KCk5vdywgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBiaWdnZXIgcGljdHVyZSBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucywgSSBuZWVkIHRvIHNlZSB3aGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgaGFuZ2luZyBvdXQgaW4gdGhhdCBzYW1lIGBpYl9jbS5jYCBmaWxlLiBVbmRlcnN0YW5kaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBncmFzcCBvZiBob3cgYHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlYCBmaXRzIGludG8gdGhlIG92ZXJhbGwgY29ubmVjdGlvbiBtYW5hZ2VtZW50IHdvcmtmbG93LiBXaGF0IG90aGVyIHBpZWNlcyBhcmUgaW52b2x2ZWQgaW4gc2V0dGluZyB1cCwgdGVhcmluZyBkb3duLCBhbmQgZ2VuZXJhbGx5IHNoZXBoZXJkaW5nIHRoZXNlIElCIGNvbm5lY3Rpb25zPyBMZXQmIzM5O3MgdGFrZSBhIGxvb2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE0OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfXS4qXFwoJCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yZHMvaWJfY20uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzk2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgSUIgQ29ubmVjdGlvbiBNYW5hZ2VyIENvZGUqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCB0aGUgUkRNQSBjb25uZWN0aW9uIG1hbmFnZXIgY29kZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBuZXQvcmRzL2liX2NtLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEluZmluaUJhbmQgY29ubmVjdGlvbiBtYW5hZ2VyIGJlaGF2ZXMgd2l0aGluIHRoZSBSRFMgc3RhY2suIFRoZSBiZXN0IGFwcHJvYWNoIGhlcmUgaXMgZ29pbmcgdG8gYmUgYSBjb21iaW5hdGlvbiBvZiB0YXJnZXRlZCByZWFkaW5nIGFuZCBzb21lIHF1aWNrIGdyZXBwaW5nLiBJJiMzOTtsbCBzdGFydCBieSBicm93c2luZyB0aGUgY29kZSwgZ2V0dGluZyBhIGZlZWwgZm9yIHRoZSBtYWpvciBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZC4gVGhlbiwgSSYjMzk7bGwgdXNlIGBncmVwYCB0byBxdWlja2x5IGZpbmQgY3Jvc3MtcmVmZXJlbmNlcywgc2VlIHdoZXJlIGtleSBmdW5jdGlvbnMgYXJlIGNhbGxlZCwgYW5kIGZvbGxvdyB0aGUgY29udHJvbCBmbG93LiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb2YgdGhlIGludGVyYWN0aW9uIHBvaW50cy4gRnJvbSB0aGVyZSwgSSBjYW4gZHJpbGwgZG93biBmdXJ0aGVyIGFzIG5lZWRlZCwgYnV0IHRoaXMgaW5pdGlhbCByZWNvbm5haXNzYW5jZSB3aWxsIGdpdmUgbWUgYSBnb29kIGxheSBvZiB0aGUgbGFuZCBhbmQgcG9pbnQgb3V0IHRoZSBhcmVhcyB0aGF0IG5lZWQgdGhlIG1vc3QgYXR0ZW50aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgaW50ZXJlc3RpbmcgdGlkYml0cyB3ZSBjYW4gZGlnIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtcXGJyZHNfaWJfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Jkcy9pYl9jbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yZHMvaWJfY20uYy00OC0gKi9cbm5ldC9yZHMvaWJfY20uYzo0OTpzdGF0aWMgdm9pZCByZHNfaWJfc2V0X3Byb3RvY29sKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgdW5zaWduZWQgaW50IHZlcnNpb24pXG5uZXQvcmRzL2liX2NtLmMtNTAte1xuLS1cbm5ldC9yZHMvaWJfY20uYy01Ni0gKi9cbm5ldC9yZHMvaWJfY20uYzo1NzpzdGF0aWMgdm9pZCByZHNfaWJfc2V0X2Zsb3dfY29udHJvbChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHUzMiBjcmVkaXRzKVxubmV0L3Jkcy9pYl9jbS5jLTU4LXtcbm5ldC9yZHMvaWJfY20uYzo1OTpcdHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLVx1MDAzZWNfdHJhbnNwb3J0X2RhdGE7XG5uZXQvcmRzL2liX2NtLmMtNjAtXG5uZXQvcmRzL2liX2NtLmM6NjE6XHRpZiAocmRzX2liX3N5c2N0bF9mbG93X2NvbnRyb2wgXHUwMDI2XHUwMDI2IGNyZWRpdHMgIT0gMCkge1xubmV0L3Jkcy9pYl9jbS5jLTYyLVx0XHQvKiBXZSYjMzk7cmUgZG9pbmcgZmxvdyBjb250cm9sICovXG5uZXQvcmRzL2liX2NtLmMtNjMtXHRcdGljLVx1MDAzZWlfZmxvd2N0bCA9IDE7XG5uZXQvcmRzL2liX2NtLmM6NjQ6XHRcdHJkc19pYl9zZW5kX2FkZF9jcmVkaXRzKGNvbm4sIGNyZWRpdHMpO1xubmV0L3Jkcy9pYl9jbS5jLTY1LVx0fSBlbHNlIHtcbi0tXG5uZXQvcmRzL2liX2NtLmMtNzMtICovXG5uZXQvcmRzL2liX2NtLmM6NzQ6dm9pZCByZHNfaWJfY21fY29ubmVjdF9jb21wbGV0ZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCByZG1hX2NtX2V2ZW50ICpldmVudClcbm5ldC9yZHMvaWJfY20uYy03NS17XG5uZXQvcmRzL2liX2NtLmM6NzY6XHRzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi1cdTAwM2VjX3RyYW5zcG9ydF9kYXRhO1xubmV0L3Jkcy9pYl9jbS5jOjc3Olx0Y29uc3QgdW5pb24gcmRzX2liX2Nvbm5fcHJpdiAqZHAgPSBOVUxMO1xubmV0L3Jkcy9pYl9jbS5jLTc4LVx0X19iZTY0IGFja19zZXEgPSAwO1xuLS1cbm5ldC9yZHMvaWJfY20uYy05OC1cdH0gZWxzZSBpZiAoZXZlbnQtXHUwMDNlcGFyYW0uY29ubi5wcml2YXRlX2RhdGFfbGVuIFx1MDAzZT1cbm5ldC9yZHMvaWJfY20uYzo5OTpcdFx0ICAgc2l6ZW9mKHN0cnVjdCByZHNfaWJfY29ubmVjdF9wcml2YXRlKSkge1xubmV0L3Jkcy9pYl9jbS5jLTEwMC1cdFx0bWFqb3IgPSBkcC1cdTAwM2VyaWNwX3Y0LmRwX3Byb3RvY29sX21ham9yO1xuLS1cbm5ldC9yZHMvaWJfY20uYy0xMDctXHRpZiAobWFqb3IpIHtcbm5ldC9yZHMvaWJfY20uYzoxMDg6XHRcdHJkc19pYl9zZXRfcHJvdG9jb2woY29ubiwgUkRTX1BST1RPQ09MKG1ham9yLCBtaW5vcikpO1xubmV0L3Jkcy9pYl9jbS5jOjEwOTpcdFx0cmRzX2liX3NldF9mbG93X2NvbnRyb2woY29ubiwgYmUzMl90b19jcHUoY3JlZGl0KSk7XG5uZXQvcmRzL2liX2NtLmMtMTEwLVx0fVxuLS1cbm5ldC9yZHMvaWJfY20uYy0xMzgtXHQgKi9cbm5ldC9yZHMvaWJfY20uYzoxMzk6XHRyZHNfaWJfc2VuZF9pbml0X3JpbmcoaWMpO1xubmV0L3Jkcy9pYl9jbS5jOjE0MDpcdHJkc19pYl9yZWN2X2luaXRfcmluZyhpYyk7XG5uZXQvcmRzL2liX2NtLmMtMTQxLVx0LyogUG9zdCByZWNlaXZlIGJ1ZmZlcnMgLSBhcyBhIHNpZGUgZWZmZWN0LCB0aGlzIHdpbGwgdXBkYXRlXG5uZXQvcmRzL2liX2NtLmMtMTQyLVx0ICogdGhlIHBvc3RlZCBjcmVkaXQgY291bnQuICovXG5uZXQvcmRzL2liX2NtLmM6MTQzOlx0cmRzX2liX3JlY3ZfcmVmaWxsKGNvbm4sIDEsIEdGUF9LRVJORUwpO1xubmV0L3Jkcy9pYl9jbS5jLTE0NC1cbm5ldC9yZHMvaWJfY20uYy0xNDUtXHQvKiB1cGRhdGUgaWJfZGV2aWNlIHdpdGggdGhpcyBsb2NhbCBpcGFkZHIgKi9cbm5ldC9yZHMvaWJfY20uYzoxNDY6XHRlcnIgPSByZHNfaWJfdXBkYXRlX2lwYWRkcihpYy1cdTAwM2VyZHNfaWJkZXYsIFx1MDAyNmNvbm4tXHUwMDNlY19sYWRkcik7XG5uZXQvcmRzL2liX2NtLmMtMTQ3LVx0aWYgKGVycilcbm5ldC9yZHMvaWJfY20uYzoxNDg6XHRcdHByaW50ayhLRVJOX0VSUiBcJiMzNDtyZHNfaWJfdXBkYXRlX2lwYWRkciBmYWlsZWQgKCVkKVxcblwmIzM0Oyxcbm5ldC9yZHMvaWJfY20uYy0xNDktXHRcdFx0ZXJyKTtcbi0tXG5uZXQvcmRzL2liX2NtLmMtMTYyLVxubmV0L3Jkcy9pYl9jbS5jOjE2MzpzdGF0aWMgdm9pZCByZHNfaWJfY21fZmlsbF9jb25uX3BhcmFtKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubixcbm5ldC9yZHMvaWJfY20uYy0xNjQtXHRcdFx0XHQgICAgICBzdHJ1Y3QgcmRtYV9jb25uX3BhcmFtICpjb25uX3BhcmFtLFxubmV0L3Jkcy9pYl9jbS5jOjE2NTpcdFx0XHRcdCAgICAgIHVuaW9uIHJkc19pYl9jb25uX3ByaXYgKmRwLFxubmV0L3Jkcy9pYl9jbS5jLTE2Ni1cdFx0XHRcdCAgICAgIHUzMiBwcm90b2NvbF92ZXJzaW9uLFxuLS1cbm5ldC9yZHMvaWJfY20uYy0xNzAte1xubmV0L3Jkcy9pYl9jbS5jOjE3MTpcdHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLVx1MDAzZWNfdHJhbnNwb3J0X2RhdGE7XG5uZXQvcmRzL2liX2NtLmM6MTcyOlx0c3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldiA9IGljLVx1MDAzZXJkc19pYmRldjtcbm5ldC9yZHMvaWJfY20uYy0xNzMtXG4tLVxubmV0L3Jkcy9pYl9jbS5jLTE3OS1cdFx0bWluX3QodTMyLCByZHNfaWJkZXYtXHUwMDNlbWF4X2luaXRpYXRvcl9kZXB0aCwgbWF4X2luaXRpYXRvcl9kZXB0aCk7XG5uZXQvcmRzL2liX2NtLmM6MTgwOlx0Y29ubl9wYXJhbS1cdTAwM2VyZXRyeV9jb3VudCA9IG1pbl90KHVuc2lnbmVkIGludCwgcmRzX2liX3JldHJ5X2NvdW50LCA3KTtcbm5ldC9yZHMvaWJfY20uYy0xODEtXHRjb25uX3BhcmFtLVx1MDAzZXJucl9yZXRyeV9jb3VudCA9IDc7XG4tLVxubmV0L3Jkcy9pYl9jbS5jLTE5NC1cdFx0XHRkcC1cdTAwM2VyaWNwX3Y2LmRwX2Fja19zZXEgPVxubmV0L3Jkcy9pYl9jbS5jOjE5NTpcdFx0XHQgICAgY3B1X3RvX2JlNjQocmRzX2liX3BpZ2d5Yl9hY2soaWMpKTtcbm5ldC9yZHMvaWJfY20uYy0xOTYtXHRcdFx0ZHAtXHUwMDNlcmljcF92Ni5kcF9jbW4ucmljcGNfZHBfdG9zcyA9IGNvbm4tXHUwMDNlY190b3M7XG4tLVxubmV0L3Jkcy9pYl9jbS5jLTIwOS1cdFx0XHRkcC1cdTAwM2VyaWNwX3Y0LmRwX2Fja19zZXEgPVxubmV0L3Jkcy9pYl9jbS5jOjIxMDpcdFx0XHQgICAgY3B1X3RvX2JlNjQocmRzX2liX3BpZ2d5Yl9hY2soaWMpKTtcbm5ldC9yZHMvaWJfY20uYy0yMTEtXHRcdFx0ZHAtXHUwMDNlcmljcF92NC5kcF9jbW4ucmljcGNfZHBfdG9zcyA9IGNvbm4tXHUwMDNlY190b3M7XG4tLVxubmV0L3Jkcy9pYl9jbS5jLTIzMi1cbm5ldC9yZHMvaWJfY20uYzoyMzM6c3RhdGljIHZvaWQgcmRzX2liX2NxX2V2ZW50X2hhbmRsZXIoc3RydWN0IGliX2V2ZW50ICpldmVudCwgdm9pZCAqZGF0YSlcbm5ldC9yZHMvaWJfY20uYy0yMzQte1xuLS1cbm5ldC9yZHMvaWJfY20uYy0yNDYtICovXG5uZXQvcmRzL2liX2NtLmM6MjQ3OnN0YXRpYyB2b2lkIHJkc19pYl9jcV9jb21wX2hhbmRsZXJfcmVjdihzdHJ1Y3QgaWJfY3EgKmNxLCB2b2lkICpjb250ZXh0KVxubmV0L3Jkcy9pYl9jbS5jLTI0OC17XG5uZXQvcmRzL2liX2NtLmMtMjQ5LVx0c3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gY29udGV4dDtcbm5ldC9yZHMvaWJfY20uYzoyNTA6XHRzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi1cdTAwM2VjX3RyYW5zcG9ydF9kYXRhO1xubmV0L3Jkcy9pYl9jbS5jLTI1MS1cbi0tXG5uZXQvcmRzL2liX2NtLmMtMjUzLVxubmV0L3Jkcy9pYl9jbS5jOjI1NDpcdHJkc19pYl9zdGF0c19pbmMoc19pYl9ldnRfaGFuZGxlcl9jYWxsKTtcbm5ldC9yZHMvaWJfY20uYy0yNTUtXG4tLVxubmV0L3Jkcy9pYl9jbS5jLTI1OC1cbm5ldC9yZHMvaWJfY20uYzoyNTk6c3RhdGljIHZvaWQgcG9sbF9zY3Eoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywgc3RydWN0IGliX2NxICpjcSxcbm5ldC9yZHMvaWJfY20uYy0yNjAtXHRcdCAgICAgc3RydWN0IGliX3djICp3Y3MpXG4tLVxubmV0L3Jkcy9pYl9jbS5jLTI3My1cdFx0XHQgICAgd2MtXHUwMDNld3JfaWQgPT0gUkRTX0lCX0FDS19XUl9JRClcbm5ldC9yZHMvaWJfY20uYzoyNzQ6XHRcdFx0XHRyZHNfaWJfc2VuZF9jcWVfaGFuZGxlcihpYywgd2MpO1xubmV0L3Jkcy9pYl9jbS5jLTI3NS1cdFx0XHRlbHNlXG5uZXQvcmRzL2liX2NtLmM6Mjc2Olx0XHRcdFx0cmRzX2liX21yX2NxZV9oYW5kbGVyKGljLCB3Yyk7XG5uZXQvcmRzL2liX2NtLmMtMjc3LVxuLS1cbm5ldC9yZHMvaWJfY20uYy0yODEtXG5uZXQvcmRzL2liX2NtLmM6MjgyOnN0YXRpYyB2b2lkIHJkc19pYl90YXNrbGV0X2ZuX3NlbmQodW5zaWduZWQgbG9uZyBkYXRhKVxubmV0L3Jkcy9pYl9jbS5jLTI4My17XG5uZXQvcmRzL2liX2NtLmM6Mjg0Olx0c3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IChzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKilkYXRhO1xubmV0L3Jkcy9pYl9jbS5jLTI4NS1cdHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGljLVx1MDAzZWNvbm47XG5uZXQvcmRzL2liX2NtLmMtMjg2LVxubmV0L3Jkcy9pYl9jbS5jOjI4NzpcdHJkc19pYl9zdGF0c19pbmMoc19pYl90YXNrbGV0X2NhbGwpO1xubmV0L3Jkcy9pYl9jbS5jLTI4OC1cbi0tXG5uZXQvcmRzL2liX2NtLmMtMzAyLVxubmV0L3Jkcy9pYl9jbS5jOjMwMzpzdGF0aWMgdm9pZCBwb2xsX3JjcShzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljLCBzdHJ1Y3QgaWJfY3EgKmNxLFxubmV0L3Jkcy9pYl9jbS5jLTMwNC1cdFx0ICAgICBzdHJ1Y3QgaWJfd2MgKndjcyxcbm5ldC9yZHMvaWJfY20uYzozMDU6XHRcdCAgICAgc3RydWN0IHJkc19pYl9hY2tfc3RhdGUgKmFja19zdGF0ZSlcbm5ldC9yZHMvaWJfY20uYy0zMDYte1xuLS1cbm5ldC9yZHMvaWJfY20uYy0zMTYtXG5uZXQvcmRzL2liX2NtLmM6MzE3Olx0XHRcdHJkc19pYl9yZWN2X2NxZV9oYW5kbGVyKGljLCB3YywgYWNrX3N0YXRlKTtcbm5ldC9yZHMvaWJfY20uYy0zMTgtXHRcdH1cbi0tXG5uZXQvcmRzL2liX2NtLmMtMzIxLVxubmV0L3Jkcy9pYl9jbS5jOjMyMjpzdGF0aWMgdm9pZCByZHNfaWJfdGFza2xldF9mbl9yZWN2KHVuc2lnbmVkIGxvbmcgZGF0YSlcbm5ldC9yZHMvaWJfY20uYy0zMjMte1xubmV0L3Jkcy9pYl9jbS5jOjMyNDpcdHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSAoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICopZGF0YTtcbm5ldC9yZHMvaWJfY20uYy0zMjUtXHRzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBpYy1cdTAwM2Vjb25uO1xubmV0L3Jkcy9pYl9jbS5jOjMyNjpcdHN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYgPSBpYy1cdTAwM2VyZHNfaWJkZXY7XG5uZXQvcmRzL2liX2NtLmM6MzI3Olx0c3RydWN0IHJkc19pYl9hY2tfc3RhdGUgc3RhdGU7XG5uZXQvcmRzL2liX2NtLmMtMzI4LVxuLS1cbm5ldC9yZHMvaWJfY20uYy0zMzEtXG5uZXQvcmRzL2liX2NtLmM6MzMyOlx0cmRzX2liX3N0YXRzX2luYyhzX2liX3Rhc2tsZXRfY2FsbCk7XG5uZXQvcmRzL2liX2NtLmMtMzMzLVxuLS1cbm5ldC9yZHMvaWJfY20uYy0zNDMtXHRpZiAoc3RhdGUuYWNrX25leHRfdmFsaWQpXG5uZXQvcmRzL2liX2NtLmM6MzQ0Olx0XHRyZHNfaWJfc2V0X2FjayhpYywgc3RhdGUuYWNrX25leHQsIHN0YXRlLmFja19yZXF1aXJlZCk7XG5uZXQvcmRzL2liX2NtLmMtMzQ1LVx0aWYgKHN0YXRlLmFja19yZWN2X3ZhbGlkIFx1MDAyNlx1MDAyNiBzdGF0ZS5hY2tfcmVjdiBcdTAwM2UgaWMtXHUwMDNlaV9hY2tfcmVjdikge1xuLS1cbm5ldC9yZHMvaWJfY20uYy0zNTAtXHRpZiAocmRzX2Nvbm5fdXAoY29ubikpXG5uZXQvcmRzL2liX2NtLmM6MzUxOlx0XHRyZHNfaWJfYXR0ZW1wdF9hY2soaWMpO1xubmV0L3Jkcy9pYl9jbS5jLTM1Mi19XG5uZXQvcmRzL2liX2NtLmMtMzUzLVxubmV0L3Jkcy9pYl9jbS5jOjM1NDpzdGF0aWMgdm9pZCByZHNfaWJfcXBfZXZlbnRfaGFuZGxlcihzdHJ1Y3QgaWJfZXZlbnQgKmV2ZW50LCB2b2lkICpkYXRhKVxubmV0L3Jkcy9pYl9jbS5jLTM1NS17XG5uZXQvcmRzL2liX2NtLmMtMzU2LVx0c3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gZGF0YTtcbm5ldC9yZHMvaWJfY20uYzozNTc6XHRzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi1cdTAwM2VjX3RyYW5zcG9ydF9kYXRhO1xubmV0L3Jkcy9pYl9jbS5jLTM1OC1cbi0tXG5uZXQvcmRzL2liX2NtLmMtMzc0LVxubmV0L3Jkcy9pYl9jbS5jOjM3NTpzdGF0aWMgdm9pZCByZHNfaWJfY3FfY29tcF9oYW5kbGVyX3NlbmQoc3RydWN0IGliX2NxICpjcSwgdm9pZCAqY29udGV4dClcbm5ldC9yZHMvaWJfY20uYy0zNzYte1xubmV0L3Jkcy9pYl9jbS5jLTM3Ny1cdHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGNvbnRleHQ7XG5uZXQvcmRzL2liX2NtLmM6Mzc4Olx0c3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tXHUwMDNlY190cmFuc3BvcnRfZGF0YTtcbm5ldC9yZHMvaWJfY20uYy0zNzktXG4tLVxubmV0L3Jkcy9pYl9jbS5jLTM4MS1cbm5ldC9yZHMvaWJfY20uYzozODI6XHRyZHNfaWJfc3RhdHNfaW5jKHNfaWJfZXZ0X2hhbmRsZXJfY2FsbCk7XG5uZXQvcmRzL2liX2NtLmMtMzgzLVxuLS1cbm5ldC9yZHMvaWJfY20uYy0zODYtXG5uZXQvcmRzL2liX2NtLmM6Mzg3OnN0YXRpYyBpbmxpbmUgaW50IGliZGV2X2dldF91bnVzZWRfdmVjdG9yKHN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYpXG5uZXQvcmRzL2liX2NtLmMtMzg4LXtcbi0tXG5uZXQvcmRzL2liX2NtLmMtNDAzLVxubmV0L3Jkcy9pYl9jbS5jOjQwNDpzdGF0aWMgaW5saW5lIHZvaWQgaWJkZXZfcHV0X3ZlY3RvcihzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2LCBpbnQgaW5kZXgpXG5uZXQvcmRzL2liX2NtLmMtNDA1LXtcbi0tXG5uZXQvcmRzL2liX2NtLmM9NDE2PXN0YXRpYyBzdHJ1Y3QgcmRzX2hlYWRlciAqcmRzX2RtYV9oZHJfYWxsb2Moc3RydWN0IGliX2RldmljZSAqZGV2LFxuLS1cbm5ldC9yZHMvaWJfY20uYy00NDEtICovXG5uZXQvcmRzL2liX2NtLmM6NDQyOnN0YXRpYyB2b2lkIHJkc19kbWFfaGRyc19mcmVlKHN0cnVjdCByZHNfaWJfZGV2aWNlICpkZXYsXG5uZXQvcmRzL2liX2NtLmMtNDQzLVx0XHRzdHJ1Y3QgcmRzX2hlYWRlciAqKmhkcnMsIGRtYV9hZGRyX3QgKmRtYV9hZGRycywgdTMyIG51bV9oZHJzLFxuLS1cbm5ldC9yZHMvaWJfY20uYy00NjUtICovXG5uZXQvcmRzL2liX2NtLmM6NDY2OnN0YXRpYyBzdHJ1Y3QgcmRzX2hlYWRlciAqKnJkc19kbWFfaGRyc19hbGxvYyhzdHJ1Y3QgcmRzX2liX2RldmljZSAqZGV2LFxubmV0L3Jkcy9pYl9jbS5jLTQ2Ny1cdFx0ZG1hX2FkZHJfdCAqKmRtYV9hZGRycywgdTMyIG51bV9oZHJzLFxuLS1cbm5ldC9yZHMvaWJfY20uYy01MDEtICovXG5uZXQvcmRzL2liX2NtLmM6NTAyOnN0YXRpYyBpbnQgcmRzX2liX3NldHVwX3FwKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubilcbm5ldC9yZHMvaWJfY20uYy01MDMte1xubmV0L3Jkcy9pYl9jbS5jOjUwNDpcdHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLVx1MDAzZWNfdHJhbnNwb3J0X2RhdGE7XG5uZXQvcmRzL2liX2NtLmMtNTA1LVx0c3RydWN0IGliX2RldmljZSAqZGV2ID0gaWMtXHUwMDNlaV9jbV9pZC1cdTAwM2VkZXZpY2U7XG4tLVxubmV0L3Jkcy9pYl9jbS5jLTUwNy1cdHN0cnVjdCBpYl9jcV9pbml0X2F0dHIgY3FfYXR0ciA9IHt9O1xubmV0L3Jkcy9pYl9jbS5jOjUwODpcdHN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXY7XG5uZXQvcmRzL2liX2NtLmMtNTA5LVx0dW5zaWduZWQgbG9uZyBtYXhfd3JzO1xuLS1cbm5ldC9yZHMvaWJfY20uYy01MTUtXHQgKi9cbm5ldC9yZHMvaWJfY20uYzo1MTY6XHRyZHNfaWJkZXYgPSByZHNfaWJfZ2V0X2NsaWVudF9kYXRhKGRldik7XG5uZXQvcmRzL2liX2NtLmMtNTE3LVx0aWYgKCFyZHNfaWJkZXYpXG4tLVxubmV0L3Jkcy9pYl9jbS5jLTUyNi1cdC8qIGFkZCB0aGUgY29ubiBub3cgc28gdGhhdCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgaGFzIHRoZSBkZXYgKi9cbm5ldC9yZHMvaWJfY20uYzo1Mjc6XHRyZHNfaWJfYWRkX2Nvbm4ocmRzX2liZGV2LCBjb25uKTtcbm5ldC9yZHMvaWJfY20uYy01MjgtXG5uZXQvcmRzL2liX2NtLmM6NTI5Olx0bWF4X3dycyA9IHJkc19pYmRldi1cdTAwM2VtYXhfd3JzIFx1MDAzYyByZHNfaWJfc3lzY3RsX21heF9zZW5kX3dyICYjNDM7IDEgP1xubmV0L3Jkcy9pYl9jbS5jOjUzMDpcdFx0cmRzX2liZGV2LVx1MDAzZW1heF93cnMgLSAxIDogcmRzX2liX3N5c2N0bF9tYXhfc2VuZF93cjtcbm5ldC9yZHMvaWJfY20uYy01MzEtXHRpZiAoaWMtXHUwMDNlaV9zZW5kX3Jpbmcud19uciAhPSBtYXhfd3JzKVxubmV0L3Jkcy9pYl9jbS5jOjUzMjpcdFx0cmRzX2liX3JpbmdfcmVzaXplKFx1MDAyNmljLVx1MDAzZWlfc2VuZF9yaW5nLCBtYXhfd3JzKTtcbm5ldC9yZHMvaWJfY20uYy01MzMtXG5uZXQvcmRzL2liX2NtLmM6NTM0Olx0bWF4X3dycyA9IHJkc19pYmRldi1cdTAwM2VtYXhfd3JzIFx1MDAzYyByZHNfaWJfc3lzY3RsX21heF9yZWN2X3dyICYjNDM7IDEgP1xubmV0L3Jkcy9pYl9jbS5jOjUzNTpcdFx0cmRzX2liZGV2LVx1MDAzZW1heF93cnMgLSAxIDogcmRzX2liX3N5c2N0bF9tYXhfcmVjdl93cjtcbm5ldC9yZHMvaWJfY20uYy01MzYtXHRpZiAoaWMtXHUwMDNlaV9yZWN2X3Jpbmcud19uciAhPSBtYXhfd3JzKVxubmV0L3Jkcy9pYl9jbS5jOjUzNzpcdFx0cmRzX2liX3JpbmdfcmVzaXplKFx1MDAyNmljLVx1MDAzZWlfcmVjdl9yaW5nLCBtYXhfd3JzKTtcbm5ldC9yZHMvaWJfY20uYy01MzgtXG4tLVxubmV0L3Jkcy9pYl9jbS5jLTU0NC1cdGNxX2F0dHIuY29tcF92ZWN0b3IgPSBpYy1cdTAwM2VpX3NjcV92ZWN0b3I7XG5uZXQvcmRzL2liX2NtLmM6NTQ1Olx0aWMtXHUwMDNlaV9zZW5kX2NxID0gaWJfY3JlYXRlX2NxKGRldiwgcmRzX2liX2NxX2NvbXBfaGFuZGxlcl9zZW5kLFxubmV0L3Jkcy9pYl9jbS5jOjU0NjpcdFx0XHRcdCAgICAgcmRzX2liX2NxX2V2ZW50X2hhbmRsZXIsIGNvbm4sXG5uZXQvcmRzL2liX2NtLmMtNTQ3LVx0XHRcdFx0ICAgICBcdTAwMjZjcV9hdHRyKTtcbi0tXG5uZXQvcmRzL2liX2NtLmMtNTU4LVx0Y3FfYXR0ci5jb21wX3ZlY3RvciA9IGljLVx1MDAzZWlfcmNxX3ZlY3Rvcjtcbm5ldC9yZHMvaWJfY20uYzo1NTk6XHRpYy1cdTAwM2VpX3JlY3ZfY3EgPSBpYl9jcmVhdGVfY3EoZGV2LCByZHNfaWJfY3FfY29tcF9oYW5kbGVyX3JlY3YsXG5uZXQvcmRzL2liX2NtLmM6NTYwOlx0XHRcdFx0ICAgICByZHNfaWJfY3FfZXZlbnRfaGFuZGxlciwgY29ubixcbm5ldC9yZHMvaWJfY20uYy01NjEtXHRcdFx0XHQgICAgIFx1MDAyNmNxX2F0dHIpO1xuLS1cbm5ldC9yZHMvaWJfY20uYy01ODMtXHRtZW1zZXQoXHUwMDI2YXR0ciwgMCwgc2l6ZW9mKGF0dHIpKTtcbm5ldC9yZHMvaWJfY20uYzo1ODQ6XHRhdHRyLmV2ZW50X2hhbmRsZXIgPSByZHNfaWJfcXBfZXZlbnRfaGFuZGxlcjtcbm5ldC9yZHMvaWJfY20uYy01ODUtXHRhdHRyLnFwX2NvbnRleHQgPSBjb25uO1xuLS1cbm5ldC9yZHMvaWJfY20uYy02MzEtXG5uZXQvcmRzL2liX2NtLmM6NjMyOlx0aWMtXHUwMDNlaV9zZW5kcyA9IHZ6YWxsb2Nfbm9kZShhcnJheV9zaXplKHNpemVvZihzdHJ1Y3QgcmRzX2liX3NlbmRfd29yayksXG5uZXQvcmRzL2liX2NtLmMtNjMzLVx0XHRcdFx0XHQgICAgICBpYy1cdTAwM2VpX3NlbmRfcmluZy53X25yKSxcbi0tXG5uZXQvcmRzL2liX2NtLmMtNjQwLVxubmV0L3Jkcy9pYl9jbS5jOjY0MTpcdGljLVx1MDAzZWlfcmVjdnMgPSB2emFsbG9jX25vZGUoYXJyYXlfc2l6ZShzaXplb2Yoc3RydWN0IHJkc19pYl9yZWN2X3dvcmspLFxubmV0L3Jkcy9pYl9jbS5jLTY0Mi1cdFx0XHRcdFx0ICAgICAgaWMtXHUwMDNlaV9yZWN2X3Jpbmcud19uciksXG4tLVxubmV0L3Jkcy9pYl9jbS5jLTY0OS1cbm5ldC9yZHMvaWJfY20uYzo2NTA6XHRyZHNfaWJfcmVjdl9pbml0X2FjayhpYyk7XG5uZXQvcmRzL2liX2NtLmMtNjUxLVxuLS1cbm5ldC9yZHMvaWJfY20uYy02ODYtcmRzX2liZGV2X291dDpcbm5ldC9yZHMvaWJfY20uYzo2ODc6XHRyZHNfaWJfcmVtb3ZlX2Nvbm4ocmRzX2liZGV2LCBjb25uKTtcbm5ldC9yZHMvaWJfY20uYy02ODgtb3V0OlxubmV0L3Jkcy9pYl9jbS5jOjY4OTpcdHJkc19pYl9kZXZfcHV0KHJkc19pYmRldik7XG5uZXQvcmRzL2liX2NtLmMtNjkwLVxuLS1cbm5ldC9yZHMvaWJfY20uYy02OTMtXG5uZXQvcmRzL2liX2NtLmM6Njk0OnN0YXRpYyB1MzIgcmRzX2liX3Byb3RvY29sX2NvbXBhdGlibGUoc3RydWN0IHJkbWFfY21fZXZlbnQgKmV2ZW50LCBib29sIGlzdjYpXG5uZXQvcmRzL2liX2NtLmMtNjk1LXtcbm5ldC9yZHMvaWJfY20uYzo2OTY6XHRjb25zdCB1bmlvbiByZHNfaWJfY29ubl9wcml2ICpkcCA9IGV2ZW50LVx1MDAzZXBhcmFtLmNvbm4ucHJpdmF0ZV9kYXRhO1xubmV0L3Jkcy9pYl9jbS5jLTY5Ny1cdHU4IGRhdGFfbGVuLCBtYWpvciwgbWlub3I7XG4tLVxubmV0L3Jkcy9pYl9jbS5jLTcyNC1cdH0gZWxzZSB7XG5uZXQvcmRzL2liX2NtLmM6NzI1Olx0XHRkYXRhX2xlbiA9IHNpemVvZihzdHJ1Y3QgcmRzX2liX2Nvbm5lY3RfcHJpdmF0ZSk7XG5uZXQvcmRzL2liX2NtLmMtNzI2LVx0XHRtYWpvciA9IGRwLVx1MDAzZXJpY3BfdjQuZHBfcHJvdG9jb2xfbWFqb3I7XG4tLVxubmV0L3Jkcy9pYl9jbS5jLTc1NS0vKiBHaXZlbiBhbiBJUHY2IGFkZHJlc3MsIGZpbmQgdGhlIG5ldF9kZXZpY2Ugd2hpY2ggaG9zdHMgdGhhdCBhZGRyZXNzIGFuZFxubmV0L3Jkcy9pYl9jbS5jOjc1NjogKiByZXR1cm4gaXRzIGluZGV4LiAgVGhpcyBpcyB1c2VkIGJ5IHRoZSByZHNfaWJfY21faGFuZGxlX2Nvbm5lY3QoKSBjb2RlIHRvXG5uZXQvcmRzL2liX2NtLmMtNzU3LSAqIGZpbmQgdGhlIGludGVyZmFjZSBpbmRleCBvZiB3aGVyZSBhbiBpbmNvbWluZyByZXF1ZXN0IGNvbWVzIGZyb20gd2hlblxuLS1cbm5ldC9yZHMvaWJfY20uYz03NjU9c3RhdGljIHUzMiBfX3Jkc19maW5kX2lmaW5kZXgoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpXG4tLVxubmV0L3Jkcy9pYl9jbS5jLTc4Mi1cbm5ldC9yZHMvaWJfY20uYzo3ODM6aW50IHJkc19pYl9jbV9oYW5kbGVfY29ubmVjdChzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQsXG5uZXQvcmRzL2liX2NtLmMtNzg0LVx0XHRcdCAgICAgc3RydWN0IHJkbWFfY21fZXZlbnQgKmV2ZW50LCBib29sIGlzdjYpXG4tLVxubmV0L3Jkcy9pYl9jbS5jLTc4Ny1cdF9fYmU2NCBmZ3VpZCA9IGNtX2lkLVx1MDAzZXJvdXRlLnBhdGhfcmVjLVx1MDAzZWRnaWQuZ2xvYmFsLmludGVyZmFjZV9pZDtcbm5ldC9yZHMvaWJfY20uYzo3ODg6XHRjb25zdCBzdHJ1Y3QgcmRzX2liX2Nvbm5fcHJpdl9jbW4gKmRwX2Ntbjtcbm5ldC9yZHMvaWJfY20uYy03ODktXHRzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBOVUxMO1xubmV0L3Jkcy9pYl9jbS5jOjc5MDpcdHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBOVUxMO1xubmV0L3Jkcy9pYl9jbS5jLTc5MS1cdHN0cnVjdCByZG1hX2Nvbm5fcGFyYW0gY29ubl9wYXJhbTtcbm5ldC9yZHMvaWJfY20uYzo3OTI6XHRjb25zdCB1bmlvbiByZHNfaWJfY29ubl9wcml2ICpkcDtcbm5ldC9yZHMvaWJfY20uYzo3OTM6XHR1bmlvbiByZHNfaWJfY29ubl9wcml2IGRwX3JlcDtcbm5ldC9yZHMvaWJfY20uYy03OTQtXHRzdHJ1Y3QgaW42X2FkZHIgc19tYXBwZWRfYWRkcjtcbi0tXG5uZXQvcmRzL2liX2NtLmMtODAzLVx0LyogQ2hlY2sgd2hldGhlciB0aGUgcmVtb3RlIHByb3RvY29sIHZlcnNpb24gbWF0Y2hlcyBvdXJzLiAqL1xubmV0L3Jkcy9pYl9jbS5jOjgwNDpcdHZlcnNpb24gPSByZHNfaWJfcHJvdG9jb2xfY29tcGF0aWJsZShldmVudCwgaXN2Nik7XG5uZXQvcmRzL2liX2NtLmMtODA1LVx0aWYgKCF2ZXJzaW9uKSB7XG4tLVxubmV0L3Jkcy9pYl9jbS5jLTg2MC1cdGNvbm4gPSByZHNfY29ubl9jcmVhdGUoXHUwMDI2aW5pdF9uZXQsIGRhZGRyNiwgc2FkZHI2LFxubmV0L3Jkcy9pYl9jbS5jOjg2MTpcdFx0XHQgICAgICAgXHUwMDI2cmRzX2liX3RyYW5zcG9ydCwgZHBfY21uLVx1MDAzZXJpY3BjX2RwX3Rvc3MsXG5uZXQvcmRzL2liX2NtLmMtODYyLVx0XHRcdCAgICAgICBHRlBfS0VSTkVMLCBpZmluZGV4KTtcbi0tXG5uZXQvcmRzL2liX2NtLmMtODgwLVx0XHRcdHJkc19jb25uX2Ryb3AoY29ubik7XG5uZXQvcmRzL2liX2NtLmM6ODgxOlx0XHRcdHJkc19pYl9zdGF0c19pbmMoc19pYl9saXN0ZW5fY2xvc2VkX3N0YWxlKTtcbm5ldC9yZHMvaWJfY20uYy04ODItXHRcdH0gZWxzZVxuLS1cbm5ldC9yZHMvaWJfY20uYy04ODQtXHRcdFx0LyogV2FpdCBhbmQgc2VlIC0gb3VyIGNvbm5lY3QgbWF5IHN0aWxsIGJlIHN1Y2NlZWRpbmcgKi9cbm5ldC9yZHMvaWJfY20uYzo4ODU6XHRcdFx0cmRzX2liX3N0YXRzX2luYyhzX2liX2Nvbm5lY3RfcmFjZWQpO1xubmV0L3Jkcy9pYl9jbS5jLTg4Ni1cdFx0fVxuLS1cbm5ldC9yZHMvaWJfY20uYy04OTEtXG5uZXQvcmRzL2liX2NtLmM6ODkyOlx0cmRzX2liX3NldF9wcm90b2NvbChjb25uLCB2ZXJzaW9uKTtcbm5ldC9yZHMvaWJfY20uYzo4OTM6XHRyZHNfaWJfc2V0X2Zsb3dfY29udHJvbChjb25uLCBiZTMyX3RvX2NwdShkcF9jbW4tXHUwMDNlcmljcGNfY3JlZGl0KSk7XG5uZXQvcmRzL2liX2NtLmMtODk0LVxuLS1cbm5ldC9yZHMvaWJfY20uYy05MTAtXG5uZXQvcmRzL2liX2NtLmM6OTExOlx0ZXJyID0gcmRzX2liX3NldHVwX3FwKGNvbm4pO1xubmV0L3Jkcy9pYl9jbS5jLTkxMi1cdGlmIChlcnIpIHtcbm5ldC9yZHMvaWJfY20uYzo5MTM6XHRcdHJkc19pYl9jb25uX2Vycm9yKGNvbm4sIFwmIzM0O3Jkc19pYl9zZXR1cF9xcCBmYWlsZWQgKCVkKVxcblwmIzM0OywgZXJyKTtcbm5ldC9yZHMvaWJfY20uYy05MTQtXHRcdGdvdG8gb3V0O1xuLS1cbm5ldC9yZHMvaWJfY20uYy05MTYtXG5uZXQvcmRzL2liX2NtLmM6OTE3Olx0cmRzX2liX2NtX2ZpbGxfY29ubl9wYXJhbShjb25uLCBcdTAwMjZjb25uX3BhcmFtLCBcdTAwMjZkcF9yZXAsIHZlcnNpb24sXG5uZXQvcmRzL2liX2NtLmMtOTE4LVx0XHRcdFx0ICBldmVudC1cdTAwM2VwYXJhbS5jb25uLnJlc3BvbmRlcl9yZXNvdXJjZXMsXG4tLVxubmV0L3Jkcy9pYl9jbS5jLTkyMy1cdGlmIChyZG1hX2FjY2VwdChjbV9pZCwgXHUwMDI2Y29ubl9wYXJhbSkpXG5uZXQvcmRzL2liX2NtLmM6OTI0Olx0XHRyZHNfaWJfY29ubl9lcnJvcihjb25uLCBcJiMzNDtyZG1hX2FjY2VwdCBmYWlsZWRcXG5cJiMzNDspO1xubmV0L3Jkcy9pYl9jbS5jLTkyNS1cbi0tXG5uZXQvcmRzL2liX2NtLmMtOTM1LVxubmV0L3Jkcy9pYl9jbS5jOjkzNjppbnQgcmRzX2liX2NtX2luaXRpYXRlX2Nvbm5lY3Qoc3RydWN0IHJkbWFfY21faWQgKmNtX2lkLCBib29sIGlzdjYpXG5uZXQvcmRzL2liX2NtLmMtOTM3LXtcbm5ldC9yZHMvaWJfY20uYy05MzgtXHRzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBjbV9pZC1cdTAwM2Vjb250ZXh0O1xubmV0L3Jkcy9pYl9jbS5jOjkzOTpcdHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLVx1MDAzZWNfdHJhbnNwb3J0X2RhdGE7XG5uZXQvcmRzL2liX2NtLmMtOTQwLVx0c3RydWN0IHJkbWFfY29ubl9wYXJhbSBjb25uX3BhcmFtO1xubmV0L3Jkcy9pYl9jbS5jOjk0MTpcdHVuaW9uIHJkc19pYl9jb25uX3ByaXYgZHA7XG5uZXQvcmRzL2liX2NtLmMtOTQyLVx0aW50IHJldDtcbi0tXG5uZXQvcmRzL2liX2NtLmMtOTQ1LVx0ICogZGVmYXVsdCB0byBSRFN2My4wICovXG5uZXQvcmRzL2liX2NtLmM6OTQ2Olx0cmRzX2liX3NldF9wcm90b2NvbChjb25uLCBSRFNfUFJPVE9DT0xfNF8xKTtcbm5ldC9yZHMvaWJfY20uYzo5NDc6XHRpYy1cdTAwM2VpX2Zsb3djdGwgPSByZHNfaWJfc3lzY3RsX2Zsb3dfY29udHJvbDtcdC8qIGFkdmVydGlzZSBmbG93IGNvbnRyb2wgKi9cbm5ldC9yZHMvaWJfY20uYy05NDgtXG5uZXQvcmRzL2liX2NtLmM6OTQ5Olx0cmV0ID0gcmRzX2liX3NldHVwX3FwKGNvbm4pO1xubmV0L3Jkcy9pYl9jbS5jLTk1MC1cdGlmIChyZXQpIHtcbm5ldC9yZHMvaWJfY20uYzo5NTE6XHRcdHJkc19pYl9jb25uX2Vycm9yKGNvbm4sIFwmIzM0O3Jkc19pYl9zZXR1cF9xcCBmYWlsZWQgKCVkKVxcblwmIzM0OywgcmV0KTtcbm5ldC9yZHMvaWJfY20uYy05NTItXHRcdGdvdG8gb3V0O1xuLS1cbm5ldC9yZHMvaWJfY20uYy05NTQtXG5uZXQvcmRzL2liX2NtLmM6OTU1Olx0cmRzX2liX2NtX2ZpbGxfY29ubl9wYXJhbShjb25uLCBcdTAwMjZjb25uX3BhcmFtLCBcdTAwMjZkcCxcbm5ldC9yZHMvaWJfY20uYy05NTYtXHRcdFx0XHQgIGNvbm4tXHUwMDNlY19wcm9wb3NlZF92ZXJzaW9uLFxuLS1cbm5ldC9yZHMvaWJfY20uYy05NTktXHRpZiAocmV0KVxubmV0L3Jkcy9pYl9jbS5jOjk2MDpcdFx0cmRzX2liX2Nvbm5fZXJyb3IoY29ubiwgXCYjMzQ7cmRtYV9jb25uZWN0X2xvY2tlZCBmYWlsZWQgKCVkKVxcblwmIzM0Oyxcbm5ldC9yZHMvaWJfY20uYy05NjEtXHRcdFx0XHQgIHJldCk7XG4tLVxubmV0L3Jkcy9pYl9jbS5jLTk3NC1cbm5ldC9yZHMvaWJfY20uYzo5NzU6aW50IHJkc19pYl9jb25uX3BhdGhfY29ubmVjdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG5uZXQvcmRzL2liX2NtLmMtOTc2LXtcbi0tXG5uZXQvcmRzL2liX2NtLmMtOTc5LVx0cmRtYV9jbV9ldmVudF9oYW5kbGVyIGhhbmRsZXI7XG5uZXQvcmRzL2liX2NtLmM6OTgwOlx0c3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYztcbm5ldC9yZHMvaWJfY20uYy05ODEtXHRpbnQgcmV0O1xuLS1cbm5ldC9yZHMvaWJfY20uYy0xMDQ1LVxubmV0L3Jkcy9pYl9jbS5jOjEwNDY6c3RhdGljIHVuc2lnbmVkIGxvbmcgcmRzX2liX2Nvbm5fcGF0aF9zaHV0ZG93bl9jaGVja193YWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbm5ldC9yZHMvaWJfY20uYy0xMDQ3LXtcbm5ldC9yZHMvaWJfY20uYy0xMDQ4LVx0c3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gY3AtXHUwMDNlY3BfY29ubjtcbm5ldC9yZHMvaWJfY20uYzoxMDQ5Olx0c3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tXHUwMDNlY190cmFuc3BvcnRfZGF0YTtcbm5ldC9yZHMvaWJfY20uYy0xMDUwLVxubmV0L3Jkcy9pYl9jbS5jLTEwNTEtXHRyZXR1cm4gKCFpYy1cdTAwM2VpX2NtX2lkIHx8XG5uZXQvcmRzL2liX2NtLmM6MTA1MjpcdFx0KHJkc19pYl9yaW5nX2VtcHR5KFx1MDAyNmljLVx1MDAzZWlfcmVjdl9yaW5nKSBcdTAwMjZcdTAwMjZcbm5ldC9yZHMvaWJfY20uYy0xMDUzLVx0XHQgKGF0b21pY19yZWFkKFx1MDAyNmljLVx1MDAzZWlfc2lnbmFsZWRfc2VuZHMpID09IDApIFx1MDAyNlx1MDAyNlxuLS1cbm5ldC9yZHMvaWJfY20uYy0xMDYzLSAqL1xubmV0L3Jkcy9pYl9jbS5jOjEwNjQ6dm9pZCByZHNfaWJfY29ubl9wYXRoX3NodXRkb3duKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbm5ldC9yZHMvaWJfY20uYy0xMDY1LXtcbm5ldC9yZHMvaWJfY20uYy0xMDY2LVx0c3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gY3AtXHUwMDNlY3BfY29ubjtcbm5ldC9yZHMvaWJfY20uYzoxMDY3Olx0c3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tXHUwMDNlY190cmFuc3BvcnRfZGF0YTtcbm5ldC9yZHMvaWJfY20uYy0xMDY4LVx0aW50IGVyciA9IDA7XG4tLVxubmV0L3Jkcy9pYl9jbS5jLTEwODctXHRcdCAqL1xubmV0L3Jkcy9pYl9jbS5jOjEwODg6XHRcdHJkc19pYl9mbHVzaF9tcnMoKTtcbm5ldC9yZHMvaWJfY20uYy0xMDg5LVxuLS1cbm5ldC9yZHMvaWJfY20uYy0xMDk4LVx0XHQgKi9cbm5ldC9yZHMvaWJfY20uYzoxMDk5Olx0XHR3aGlsZSAoIXdhaXRfZXZlbnRfdGltZW91dChyZHNfaWJfcmluZ19lbXB0eV93YWl0LFxubmV0L3Jkcy9pYl9jbS5jOjExMDA6XHRcdFx0XHRcdCAgIHJkc19pYl9jb25uX3BhdGhfc2h1dGRvd25fY2hlY2tfd2FpdChjcCkgPT0gMCxcbm5ldC9yZHMvaWJfY20uYy0xMTAxLVx0XHRcdFx0XHQgICBtc2Vjc190b19qaWZmaWVzKDEwMDApKSkge1xuLS1cbm5ldC9yZHMvaWJfY20uYy0xMTYxLVx0XHRpZiAoaWMtXHUwMDNlaV9zZW5kcylcbm5ldC9yZHMvaWJfY20uYzoxMTYyOlx0XHRcdHJkc19pYl9zZW5kX2NsZWFyX3JpbmcoaWMpO1xubmV0L3Jkcy9pYl9jbS5jLTExNjMtXHRcdGlmIChpYy1cdTAwM2VpX3JlY3ZzKVxubmV0L3Jkcy9pYl9jbS5jOjExNjQ6XHRcdFx0cmRzX2liX3JlY3ZfY2xlYXJfcmluZyhpYyk7XG5uZXQvcmRzL2liX2NtLmMtMTE2NS1cbi0tXG5uZXQvcmRzL2liX2NtLmMtMTE3MS1cdFx0aWYgKGljLVx1MDAzZXJkc19pYmRldilcbm5ldC9yZHMvaWJfY20uYzoxMTcyOlx0XHRcdHJkc19pYl9yZW1vdmVfY29ubihpYy1cdTAwM2VyZHNfaWJkZXYsIGNvbm4pO1xubmV0L3Jkcy9pYl9jbS5jLTExNzMtXG4tLVxubmV0L3Jkcy9pYl9jbS5jLTEyMDMtXHQvKiBSZS1pbml0IHJpbmdzLCBidXQgcmV0YWluIHNpemVzLiAqL1xubmV0L3Jkcy9pYl9jbS5jOjEyMDQ6XHRyZHNfaWJfcmluZ19pbml0KFx1MDAyNmljLVx1MDAzZWlfc2VuZF9yaW5nLCBpYy1cdTAwM2VpX3NlbmRfcmluZy53X25yKTtcbm5ldC9yZHMvaWJfY20uYzoxMjA1Olx0cmRzX2liX3JpbmdfaW5pdChcdTAwMjZpYy1cdTAwM2VpX3JlY3ZfcmluZywgaWMtXHUwMDNlaV9yZWN2X3Jpbmcud19ucik7XG5uZXQvcmRzL2liX2NtLmMtMTIwNi1cbi0tXG5uZXQvcmRzL2liX2NtLmMtMTIxOC1cbm5ldC9yZHMvaWJfY20uYzoxMjE5OmludCByZHNfaWJfY29ubl9hbGxvYyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGdmcF90IGdmcClcbm5ldC9yZHMvaWJfY20uYy0xMjIwLXtcbm5ldC9yZHMvaWJfY20uYzoxMjIxOlx0c3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYztcbm5ldC9yZHMvaWJfY20uYy0xMjIyLVx0dW5zaWduZWQgbG9uZyBmbGFncztcbi0tXG5uZXQvcmRzL2liX2NtLmMtMTIyNS1cdC8qIFhYWCB0b28gbGF6eT8gKi9cbm5ldC9yZHMvaWJfY20uYzoxMjI2Olx0aWMgPSBremFsbG9jX29iaihzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24sIGdmcCk7XG5uZXQvcmRzL2liX2NtLmMtMTIyNy1cdGlmICghaWMpXG4tLVxubmV0L3Jkcy9pYl9jbS5jLTEyMjktXG5uZXQvcmRzL2liX2NtLmM6MTIzMDpcdHJldCA9IHJkc19pYl9yZWN2X2FsbG9jX2NhY2hlcyhpYywgZ2ZwKTtcbm5ldC9yZHMvaWJfY20uYy0xMjMxLVx0aWYgKHJldCkge1xuLS1cbm5ldC9yZHMvaWJfY20uYy0xMjM2LVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2aWMtXHUwMDNlaWJfbm9kZSk7XG5uZXQvcmRzL2liX2NtLmM6MTIzNzpcdHRhc2tsZXRfaW5pdChcdTAwMjZpYy1cdTAwM2VpX3NlbmRfdGFza2xldCwgcmRzX2liX3Rhc2tsZXRfZm5fc2VuZCxcbm5ldC9yZHMvaWJfY20uYy0xMjM4LVx0XHQgICAgICh1bnNpZ25lZCBsb25nKWljKTtcbm5ldC9yZHMvaWJfY20uYzoxMjM5Olx0dGFza2xldF9pbml0KFx1MDAyNmljLVx1MDAzZWlfcmVjdl90YXNrbGV0LCByZHNfaWJfdGFza2xldF9mbl9yZWN2LFxubmV0L3Jkcy9pYl9jbS5jLTEyNDAtXHRcdCAgICAgKHVuc2lnbmVkIGxvbmcpaWMpO1xuLS1cbm5ldC9yZHMvaWJfY20uYy0xMjQ4LVx0Lypcbm5ldC9yZHMvaWJfY20uYzoxMjQ5Olx0ICogcmRzX2liX2Nvbm5fc2h1dGRvd24oKSB3YWl0cyBmb3IgdGhlc2UgdG8gYmUgZW1wdGllZCBzbyB0aGV5XG5uZXQvcmRzL2liX2NtLmMtMTI1MC1cdCAqIG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGl0IGNhbiBiZSBjYWxsZWQuXG5uZXQvcmRzL2liX2NtLmMtMTI1MS1cdCAqL1xubmV0L3Jkcy9pYl9jbS5jOjEyNTI6XHRyZHNfaWJfcmluZ19pbml0KFx1MDAyNmljLVx1MDAzZWlfc2VuZF9yaW5nLCAwKTtcbm5ldC9yZHMvaWJfY20uYzoxMjUzOlx0cmRzX2liX3JpbmdfaW5pdChcdTAwMjZpYy1cdTAwM2VpX3JlY3ZfcmluZywgMCk7XG5uZXQvcmRzL2liX2NtLmMtMTI1NC1cbi0tXG5uZXQvcmRzL2liX2NtLmMtMTI2OS0gKi9cbm5ldC9yZHMvaWJfY20uYzoxMjcwOnZvaWQgcmRzX2liX2Nvbm5fZnJlZSh2b2lkICphcmcpXG5uZXQvcmRzL2liX2NtLmMtMTI3MS17XG5uZXQvcmRzL2liX2NtLmM6MTI3MjpcdHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBhcmc7XG5uZXQvcmRzL2liX2NtLmMtMTI3My1cdHNwaW5sb2NrX3RcdCpsb2NrX3B0cjtcbi0tXG5uZXQvcmRzL2liX2NtLmMtMTI4Ny1cbm5ldC9yZHMvaWJfY20uYzoxMjg4Olx0cmRzX2liX3JlY3ZfZnJlZV9jYWNoZXMoaWMpO1xubmV0L3Jkcy9pYl9jbS5jLTEyODktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMTEwCgkJCQkJCQlvdXRwdXQ6IDE1MwoJCQkJCQkJdGhvdWdodHM6IDMzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIENvbmZpZ3VyYXRpb24gYW5kIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCB0aGUgZGVwZW5kZW5jaWVzIHN0cmFpZ2h0LiBMb29raW5nIGF0IGBuZXQvcmRzL0tjb25maWdgLCBpdCBjb25maXJtcyB0aGF0IFJEUyBkZXBlbmRzIG9uIElORVQsIGFuZCBSRFNfUkRNQSBuZWVkcyBib3RoIFJEUyBhbmQgSU5GSU5JQkFORCwgYWxvbmcgd2l0aCBJTkZJTklCQU5EX0FERFJfVFJBTlMuIFRoYXQgbWVhbnMgSSAqbXVzdCogaGF2ZSBSRFMsIFJEU19SRE1BLCBJTkZJTklCQU5ELCBhbmQgSU5GSU5JQkFORF9BRERSX1RSQU5TIGVuYWJsZWQgZm9yIHRoaXMgY2hhbmdlIHRvIGJlIHJlbGV2YW50LiBHb29kLCBnb29kLgoKTmV4dCwgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGVzZSBzeW1ib2xzOiBgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGVgLCBgcmRzX3JkbWFfY21fZXZlbnRfaGFuZGxlcl9jbW5gLCBgcmRzX2liX2NtX2hhbmRsZV9jb25uZWN0YCwgYW5kIGByZHNfaWJfY21faW5pdGlhdGVfY29ubmVjdGAuIFRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBJJiMzOTttIGV4cGVjdGluZyB0byBiZSBpbXBhY3RlZCBieSB0aGUgY2hhbmdlcy4gU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGF0IHRoZSBwcmltYXJ5IGNoYW5nZSBzZWVtcyB0byBiZSBpbiBgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGVgLCBjb25maXJtZWQgYnkgdGhlIGxpbmUgbnVtYmVyIG1lbnRpb25lZC4KCk5vdyBmb3IgdGhlIGNvcmUgb2YgdGhlIG1hdHRlcjogVGhpcyBwYXRjaCBsb29rcyBzb3VuZC4gVGhlIHJlYXNvbmluZyBpcyBjbGVhciBhbmQgY29uY2lzZTogaXQmIzM5O3MgZml4aW5nIGFuIFJEUyBvdmVyIEluZmluaUJhbmQgY29ubmVjdGlvbiBoYW5kbGluZyBpc3N1ZS4gVGhlIHBhdGNoIHJlcGxhY2VzIGByZHNfY29ubl9kZXN0cm95KClgIHdpdGggYHJkc19jb25uX2Ryb3AoKWAgaW4gYSBjb25uZWN0aW9uIGNvbXBsZXRlIGV2ZW50IHdoZW4gYW4gdW5zdXBwb3J0ZWQgcHJvdG9jb2wgdmVyc2lvbiBpcyBuZWdvdGlhdGVkLiBUaGlzIGluZGljYXRlcyB0aGF0IHdlIGFyZSBjaGFuZ2luZyBob3cgdW5yZWFjaGFibGUgbmV0d29yayAvIFJEUyB0ZWFyZG93biBsb2dpYyBpcyBoYW5kbGVkLiBUaGlzIGlzIGEgY3JpdGljYWwgYWRqdXN0bWVudCB0byBwcmV2ZW50IHBvdGVudGlhbCBpc3N1ZXMgZHVyaW5nIGNvbm5lY3Rpb24gYXR0ZW1wdHMuIEFsbCB0aGUgaW1wb3J0YW50IHBpZWNlcyBhcmUgaGVyZS4KClRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIGlzIHNldCB0byB0cnVlLCB3aGljaCBpcyBhcHByb3ByaWF0ZS4gVGhlIGZvY3VzIHN5bWJvbHMgYWxpZ24gd2l0aCB0aGUgZGVzY3JpYmVkIGZpeCwgYW5kIEkgaGF2ZSB0aGUgcmVxdWlyZWQgY29uZmlnczogYFJEU2AsIGBSRFNfUkRNQWAsIGBJTkZJTklCQU5EYCwgYW5kIGBJTkZJTklCQU5EX0FERFJfVFJBTlNgLiBJJiMzOTttIHNhdGlzZmllZC4KClRpbWUgdG8gaW52b2tlIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE0OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtSRFMmIzM0OywKICAgICYjMzQ7UkRTX1JETUEmIzM0OywKICAgICYjMzQ7SU5GSU5JQkFORCYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EX0FERFJfVFJBTlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZHNfaWJfY21fY29ubmVjdF9jb21wbGV0ZSYjMzQ7LAogICAgJiMzNDtyZHNfcmRtYV9jbV9ldmVudF9oYW5kbGVyX2NtbiYjMzQ7LAogICAgJiMzNDtyZHNfaWJfY21faGFuZGxlX2Nvbm5lY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgUkRTIG92ZXIgSW5maW5pQmFuZCBjb25uZWN0aW9uIGxpZmVjeWNsZSBoYW5kbGluZyBieSBjaGFuZ2luZyBgcmRzX2Nvbm5fZGVzdHJveWAgdG8gYHJkc19jb25uX2Ryb3BgIHdoZW4gZW5jb3VudGVyaW5nIHVuc3VwcG9ydGVkIHByb3RvY29sIHZlcnNpb25zIGluIGByZHNfaWJfY21fY29ubmVjdF9jb21wbGV0ZWAuIFRoaXMgYWx0ZXJzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGVycm9yIGhhbmRsaW5nIGFuZCBjb25uZWN0aW9uIHRlYXJkb3duIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JEUyYjMzQ7LAogICAgJiMzNDtSRFNfUkRNQSYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkRfQUREUl9UUkFOUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Jkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlJiMzNDssCiAgICAmIzM0O3Jkc19yZG1hX2NtX2V2ZW50X2hhbmRsZXJfY21uJiMzNDssCiAgICAmIzM0O3Jkc19pYl9jbV9oYW5kbGVfY29ubmVjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBSRFMgb3ZlciBJbmZpbmlCYW5kIGNvbm5lY3Rpb24gbGlmZWN5Y2xlIGhhbmRsaW5nIGJ5IGNoYW5naW5nIGByZHNfY29ubl9kZXN0cm95YCB0byBgcmRzX2Nvbm5fZHJvcGAgd2hlbiBlbmNvdW50ZXJpbmcgdW5zdXBwb3J0ZWQgcHJvdG9jb2wgdmVyc2lvbnMgaW4gYHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlYC4gVGhpcyBhbHRlcnMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgZXJyb3IgaGFuZGxpbmcgYW5kIGNvbm5lY3Rpb24gdGVhcmRvd24gZmxvdy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTQ6NTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDo1NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGEgZGlyZWN0IGNhbGwgdG8gYHJkc19jb25uX2Rlc3Ryb3koKWAgd2l0aCBgcmRzX2Nvbm5fZHJvcCgpYCBpbiBgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGUoKWAgd2hlbiBhbiB1bnN1cHBvcnRlZCBwcm90b2NvbCB2ZXJzaW9uIGlzIGVuY291bnRlcmVkLiBgcmRzX2Nvbm5fZGVzdHJveSgpYCBpbW1lZGlhdGVseSBmcmVlcyB0aGUgY29ubmVjdGlvbiBvYmplY3QgKGBjb25uYCBhbmQgYGNvbm4tXHUwMDNlY19wYXRoYCksIHdoaWNoIGNhdXNlcyB1c2UtYWZ0ZXItZnJlZSBhbmQgcHJlbWF0dXJlIGNsZWFudXAgaXNzdWVzIGluIGNvbm5lY3Rpb24gZXZlbnQgaGFuZGxpbmcgcGF0aHMuIGByZHNfY29ubl9kcm9wKClgIGNsZWFubHkgdGVhcnMgZG93biB0aGUgY29ubmVjdGlvbiB2aWEgYXN5bmNocm9ub3VzIHdvcmsuXG5cblRoaXMgY2hhbmdlIGlzIHB1cmVseSBjb25jZXJuZWQgd2l0aCBvYmplY3QgbGlmZXRpbWVzLCByZWZlcmVuY2UgbWFuYWdlbWVudCwgYW5kIHRlYXJkb3duIHN5bmNocm9uaXphdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gbG9naWMsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcvYnVmZmVycyB0byB1c2Vyc3BhY2UuIE1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGYwNTkzNzFlZjc2ZGUxMTQwMjJiNTQzZDBmMjYxNWMzMTUxZDE0MjEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDE0OjUzOjM5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYl9jbS5jIGIvbmV0L3Jkcy9pYl9jbS5jCmluZGV4IGQ0NjE0Njg4N2JhNDAuLjI5MDlkYTgzNjNmMzkgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvaWJfY20uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL2liX2NtLmMKQEAgLTExNSw3ICYjNDM7MTE1LDcgQEAgdm9pZCByZHNfaWJfY21fY29ubmVjdF9jb21wbGV0ZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCByZG1hX2NtX2V2ZW4KIAkJCQkgICZhbXA7Y29ubi0mZ3Q7Y19sYWRkciwgJmFtcDtjb25uLSZndDtjX2ZhZGRyLAogCQkJCSAgUkRTX1BST1RPQ09MX01BSk9SKGNvbm4tJmd0O2NfdmVyc2lvbiksCiAJCQkJICBSRFNfUFJPVE9DT0xfTUlOT1IoY29ubi0mZ3Q7Y192ZXJzaW9uKSk7Ci0JCQlyZHNfY29ubl9kZXN0cm95KGNvbm4pOwomIzQzOwkJCXJkc19jb25uX2Ryb3AoY29ubik7CiAJCQlyZXR1cm47CiAJCX0KIAl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDg5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSRFMgSUIgQ29ubmVjdGlvbiBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGBuZXQvcmRzL2liX2NtLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIHJlcGxhY2luZyBgcmRzX2Nvbm5fZGVzdHJveShjb25uKWAgd2l0aCBgcmRzX2Nvbm5fZHJvcChjb25uKWAgd2l0aGluIHRoZSBgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGVgIGZ1bmN0aW9uLiBNeSBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBzd2FwLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0cmlnZ2VyZWQgdGhpcyBjaGFuZ2UuIFdoYXQmIzM5O3MgdGhlIGZ1bmRhbWVudGFsIGRpZmZlcmVuY2UgYmV0d2VlbiBgZGVzdHJveWAgYW5kIGBkcm9wYCBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQ/IElzIHRoZXJlIGEgc3VidGxlIHNlbWFudGljIGRpc3RpbmN0aW9uIGF0IHBsYXkgdGhhdCBuZWNlc3NpdGF0ZXMgdGhpcyBtb2RpZmljYXRpb24/CgpUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bGwgcmVhY2ggZm9yIGBncmVwcGVyYCAob3IgZXZlbiBhIHF1aWNrIGByZWFkLWZpbGVgIHRvIGtlZXAgdGhpbmdzIHNpbXBsZSkgYW5kIHplcm8gaW4gb24gdGhlIGFyZWEgYXJvdW5kIGxpbmUgMTE1IGluIGBuZXQvcmRzL2liX2NtLmNgLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBpbW1lZGlhdGUgc3Vycm91bmRpbmcgY29kZSBhbmQgY29udGV4dC4gVW5kZXJzdGFuZGluZyB0aGUgYWRqYWNlbnQgbG9naWMgaXMgY3J1Y2lhbCB0byBncmFzcGluZyB0aGUgaW50ZW5kZWQgYmVoYXZpb3IgaGVyZS4gSSYjMzk7bSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgY29ubmVjdGlvbiYjMzk7cyBsaWZlY3ljbGUgc3RhdGUsIGVycm9yIGhhbmRsaW5nLCBvciByZXNvdXJjZSBtYW5hZ2VtZW50IGltbWVkaWF0ZWx5IGJlZm9yZSBhbmQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE0OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3Jkcy9pYl9jbS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA5MDpcdFx0XHRcdGNyZWRpdCA9IGRwLVx1MDAzZXJpY3BfdjYuZHBfY3JlZGl0O1xuICA5MTpcdFx0XHRcdC8qIGRwIHN0cnVjdHVyZSBzdGFydCBpcyBub3QgZ3VhcmFudGVlZCB0byBiZSA4IGJ5dGVzXG4gIDkyOlx0XHRcdFx0ICogYWxpZ25lZC4gIFNpbmNlIGRwX2Fja19zZXEgaXMgNjQtYml0IGV4dGVuZGVkIGxvYWRcbiAgOTM6XHRcdFx0XHQgKiBvcGVyYXRpb25zIGNhbiBiZSB1c2VkIHNvIGdvIHRocm91Z2ggZ2V0X3VuYWxpZ25lZFxuICA5NDpcdFx0XHRcdCAqIHRvIGF2b2lkIHVuYWxpZ25lZCBlcnJvcnMuXG4gIDk1Olx0XHRcdFx0ICovXG4gIDk2Olx0XHRcdFx0YWNrX3NlcSA9IGdldF91bmFsaWduZWQoXHUwMDI2ZHAtXHUwMDNlcmljcF92Ni5kcF9hY2tfc2VxKTtcbiAgOTc6XHRcdFx0fVxuICA5ODpcdFx0fSBlbHNlIGlmIChldmVudC1cdTAwM2VwYXJhbS5jb25uLnByaXZhdGVfZGF0YV9sZW4gXHUwMDNlPVxuICA5OTpcdFx0XHQgICBzaXplb2Yoc3RydWN0IHJkc19pYl9jb25uZWN0X3ByaXZhdGUpKSB7XG4gMTAwOlx0XHRcdG1ham9yID0gZHAtXHUwMDNlcmljcF92NC5kcF9wcm90b2NvbF9tYWpvcjtcbiAxMDE6XHRcdFx0bWlub3IgPSBkcC1cdTAwM2VyaWNwX3Y0LmRwX3Byb3RvY29sX21pbm9yO1xuIDEwMjpcdFx0XHRjcmVkaXQgPSBkcC1cdTAwM2VyaWNwX3Y0LmRwX2NyZWRpdDtcbiAxMDM6XHRcdFx0YWNrX3NlcSA9IGdldF91bmFsaWduZWQoXHUwMDI2ZHAtXHUwMDNlcmljcF92NC5kcF9hY2tfc2VxKTtcbiAxMDQ6XHRcdH1cbiAxMDU6XHRcbiAxMDY6XHRcdC8qIG1ha2Ugc3VyZSBpdCBpc24mIzM5O3QgZW1wdHkgZGF0YSAqL1xuIDEwNzpcdFx0aWYgKG1ham9yKSB7XG4gMTA4Olx0XHRcdHJkc19pYl9zZXRfcHJvdG9jb2woY29ubiwgUkRTX1BST1RPQ09MKG1ham9yLCBtaW5vcikpO1xuIDEwOTpcdFx0XHRyZHNfaWJfc2V0X2Zsb3dfY29udHJvbChjb25uLCBiZTMyX3RvX2NwdShjcmVkaXQpKTtcbiAxMTA6XHRcdH1cbiAxMTE6XHRcbiAxMTI6XHRcdGlmIChjb25uLVx1MDAzZWNfdmVyc2lvbiBcdTAwM2MgUkRTX1BST1RPQ09MX1ZFUlNJT04pIHtcbiAxMTM6XHRcdFx0aWYgKGNvbm4tXHUwMDNlY192ZXJzaW9uICE9IFJEU19QUk9UT0NPTF9DT01QQVRfVkVSU0lPTikge1xuIDExNDpcdFx0XHRcdHByX25vdGljZShcJiMzNDtSRFMvSUI6IENvbm5lY3Rpb24gXHUwMDNjJXBJNmMsJXBJNmNcdTAwM2UgdmVyc2lvbiAldS4ldSBubyBsb25nZXIgc3VwcG9ydGVkXFxuXCYjMzQ7LFxuIDExNTpcdFx0XHRcdFx0ICBcdTAwMjZjb25uLVx1MDAzZWNfbGFkZHIsIFx1MDAyNmNvbm4tXHUwMDNlY19mYWRkcixcbiAxMTY6XHRcdFx0XHRcdCAgUkRTX1BST1RPQ09MX01BSk9SKGNvbm4tXHUwMDNlY192ZXJzaW9uKSxcbiAxMTc6XHRcdFx0XHRcdCAgUkRTX1BST1RPQ09MX01JTk9SKGNvbm4tXHUwMDNlY192ZXJzaW9uKSk7XG4gMTE4Olx0XHRcdFx0cmRzX2Nvbm5fZHJvcChjb25uKTtcbiAxMTk6XHRcdFx0XHRyZXR1cm47XG4gMTIwOlx0XHRcdH1cbiAxMjE6XHRcdH1cbiAxMjI6XHRcbiAxMjM6XHRcdHByX25vdGljZShcJiMzNDtSRFMvSUI6ICVzIGNvbm4gY29ubmVjdGVkIFx1MDAzYyVwSTZjLCVwSTZjLCVkXHUwMDNlIHZlcnNpb24gJXUuJXUlc1xcblwmIzM0OyxcbiAxMjQ6XHRcdFx0ICBpYy1cdTAwM2VpX2FjdGl2ZV9zaWRlID8gXCYjMzQ7QWN0aXZlXCYjMzQ7IDogXCYjMzQ7UGFzc2l2ZVwmIzM0OyxcbiAxMjU6XHRcdFx0ICBcdTAwMjZjb25uLVx1MDAzZWNfbGFkZHIsIFx1MDAyNmNvbm4tXHUwMDNlY19mYWRkciwgY29ubi1cdTAwM2VjX3RvcyxcbiAxMjY6XHRcdFx0ICBSRFNfUFJPVE9DT0xfTUFKT1IoY29ubi1cdTAwM2VjX3ZlcnNpb24pLFxuIDEyNzpcdFx0XHQgIFJEU19QUk9UT0NPTF9NSU5PUihjb25uLVx1MDAzZWNfdmVyc2lvbiksXG4gMTI4Olx0XHRcdCAgaWMtXHUwMDNlaV9mbG93Y3RsID8gXCYjMzQ7LCBmbG93IGNvbnRyb2xcJiMzNDsgOiBcJiMzNDtcJiMzNDspO1xuIDEyOTpcdFxuIDEzMDpcdFx0LyogcmVjZWl2ZSBzbCBmcm9tIHRoZSBwZWVyICovXG4gMTMxOlx0XHRpYy1cdTAwM2VpX3NsID0gaWMtXHUwMDNlaV9jbV9pZC1cdTAwM2Vyb3V0ZS5wYXRoX3JlYy1cdTAwM2VzbDtcbiAxMzI6XHRcbiAxMzM6XHRcdGF0b21pY19zZXQoXHUwMDI2aWMtXHUwMDNlaV9jcV9xdWllc2NlLCAwKTtcbiAxMzQ6XHRcbiAxMzU6XHRcdC8qIEluaXQgcmluZ3MgYW5kIGZpbGwgcmVjdi4gdGhpcyBuZWVkcyB0byB3YWl0IHVudGlsIHByb3RvY29sXG4gMTM2Olx0XHQgKiBuZWdvdGlhdGlvbiBpcyBjb21wbGV0ZSwgc2luY2UgcmluZyBsYXlvdXQgaXMgZGlmZmVyZW50XG4gMTM3Olx0XHQgKiBmcm9tIDMuMSB0byA0LjEuXG4gMTM4Olx0XHQgKi9cbiAxMzk6XHRcdHJkc19pYl9zZW5kX2luaXRfcmluZyhpYyk7XG4gMTQwOlx0XHRyZHNfaWJfcmVjdl9pbml0X3JpbmcoaWMpO1xuIDE0MTpcdFx0LyogUG9zdCByZWNlaXZlIGJ1ZmZlcnMgLSBhcyBhIHNpZGUgZWZmZWN0LCB0aGlzIHdpbGwgdXBkYXRlXG4gMTQyOlx0XHQgKiB0aGUgcG9zdGVkIGNyZWRpdCBjb3VudC4gKi9cbiAxNDM6XHRcdHJkc19pYl9yZWN2X3JlZmlsbChjb25uLCAxLCBHRlBfS0VSTkVMKTtcbiAxNDQ6XHRcbiAxNDU6XHRcdC8qIHVwZGF0ZSBpYl9kZXZpY2Ugd2l0aCB0aGlzIGxvY2FsIGlwYWRkciAqL1xuIDE0NjpcdFx0ZXJyID0gcmRzX2liX3VwZGF0ZV9pcGFkZHIoaWMtXHUwMDNlcmRzX2liZGV2LCBcdTAwMjZjb25uLVx1MDAzZWNfbGFkZHIpO1xuIDE0NzpcdFx0aWYgKGVycilcbiAxNDg6XHRcdFx0cHJpbnRrKEtFUk5fRVJSIFwmIzM0O3Jkc19pYl91cGRhdGVfaXBhZGRyIGZhaWxlZCAoJWQpXFxuXCYjMzQ7LFxuIDE0OTpcdFx0XHRcdGVycik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NjkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucywgYXMgaWYgSSYjMzk7bSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIFJEUyBDb25uZWN0aW9uIERlc3RydWN0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIGJldHdlZW4gYHJkc19jb25uX2Rlc3Ryb3lgIGFuZCBgcmRzX2Nvbm5fZHJvcGAuIEl0JiMzOTtzIHRpbWUgdG8gZ2V0IGEgYml0IGdyYW51bGFyIGhlcmUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZWFjaCBvbmUgYWN0dWFsbHkgKmRvZXMqIGF0IHRoZSBjb25uZWN0aW9uIGxldmVsLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBzb21lIHBhdHRlcm4gbWF0Y2hpbmcgdG8gcHVsbCB1cCBhbnkgaW5zdGFuY2VzIG9mIHRoZXNlIGZ1bmN0aW9ucyBpbiB0aGUgY29kZSBiYXNlLCB0byBnZXQgYSBoYW5kbGUgb24gdGhlaXIgdXNhZ2UgYW5kIGNvbnRleHQuIExldCYjMzk7cyBmaXJlIHVwIGBncmVwYCBhbmQgc2VlIHdoYXQgY29tZXMgdXAuIFRoaXMgc2hvdWxkIHRlbGwgbWUgcXVpY2tseSB3aGVyZSB0aGV5JiMzOTtyZSB1c2VkIGFuZCBob3cuIFRpbWUgdG8gZ2V0IHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE0OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgcmRzX2Nvbm5fKGRlc3Ryb3l8ZHJvcCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcmRzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yZHMvY29ubmVjdGlvbi5jPTQ2OD1zdGF0aWMgdm9pZCByZHNfY29ubl9wYXRoX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxuLS1cbm5ldC9yZHMvY29ubmVjdGlvbi5jLTUxMi0gKi9cbm5ldC9yZHMvY29ubmVjdGlvbi5jOjUxMzp2b2lkIHJkc19jb25uX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxubmV0L3Jkcy9jb25uZWN0aW9uLmMtNTE0LXtcbi0tXG5uZXQvcmRzL2Nvbm5lY3Rpb24uYz05NDg9RVhQT1JUX1NZTUJPTF9HUEwocmRzX2Nvbm5fcGF0aF9kcm9wKTtcbm5ldC9yZHMvY29ubmVjdGlvbi5jLTk0OS1cbm5ldC9yZHMvY29ubmVjdGlvbi5jOjk1MDp2b2lkIHJkc19jb25uX2Ryb3Aoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxubmV0L3Jkcy9jb25uZWN0aW9uLmMtOTUxLXtcbi0tXG5uZXQvcmRzL3Jkcy5oPTgwOT12b2lkIHJkc19jb25uX3NodXRkb3duKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcGF0aCk7XG5uZXQvcmRzL3Jkcy5oOjgxMDp2b2lkIHJkc19jb25uX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTtcbm5ldC9yZHMvcmRzLmg6ODExOnZvaWQgcmRzX2Nvbm5fZHJvcChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pO1xubmV0L3Jkcy9yZHMuaC04MTItdm9pZCByZHNfY29ubl9wYXRoX2Ryb3Aoc3RydWN0IHJkc19jb25uX3BhdGggKmNwYXRoLCBib29sIGRlc3Ryb3kpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDk1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIE5ldHdvcmsgQ29ubmVjdGlvbiBEZW1pc2UqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gdGhlIGBuZXQvcmRzL2Nvbm5lY3Rpb24uY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIHNlY3Rpb25zIGFyb3VuZCBgcmRzX2Nvbm5fZGVzdHJveWAgYW5kIGByZHNfY29ubl9kcm9wYC4gVGhlc2UgYXJlIGNyaXRpY2FsIGZ1bmN0aW9ucywgdGhlIGhlYXJ0IG9mIGhvdyBSRFMgY29ubmVjdGlvbnMgYXJlIHRlcm1pbmF0ZWQsIGFuZCBob3cgd2UgaGFuZGxlIHRob3NlIHRlcm1pbmF0aW9uIGV2ZW50cy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IG1lY2hhbmljcyBvZiB3aGF0IGhhcHBlbnMgd2hlbiBhIGNvbm5lY3Rpb24gZ29lcyBkb3duIGFuZCBob3cgd2UgZW5zdXJlIGEgY2xlYW4sIHJlbGlhYmxlIHRlYXJkb3duLiBJdCYjMzk7cyBhYm91dCBlbnN1cmluZyBtaW5pbWFsIHJlc291cmNlIGxlYWthZ2UgYW5kIG1haW50YWluaW5nIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIG92ZXJhbGwgc3lzdGVtLiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgdGhhdCBtaWdodCBhcmlzZSBkdXJpbmcgdGhlc2UgY3JpdGljYWwgb3BlcmF0aW9ucywgYW5kIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGVkLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGluZ3MgYXJlIHJlYWxseSBkb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9yZHMvY29ubmVjdGlvbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MTA6XHQgKiB0aGUgY29ubiBoYXMgYmVlbiBzaHV0ZG93biB0aGF0IG5vIG9uZSBlbHNlIGlzIHJlZmVyZW5jaW5nIHRoZSBjb25uZWN0aW9uLlxuIDUxMTpcdCAqIFdlIGNhbiBvbmx5IGVuc3VyZSB0aGlzIGluIHRoZSBybW1vZCBwYXRoIGluIHRoZSBjdXJyZW50IGNvZGUuXG4gNTEyOlx0ICovXG4gNTEzOlx0dm9pZCByZHNfY29ubl9kZXN0cm95KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubilcbiA1MTQ6XHR7XG4gNTE1Olx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIDUxNjpcdFx0aW50IGk7XG4gNTE3Olx0XHRzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3A7XG4gNTE4Olx0XHRpbnQgbnBhdGhzID0gKGNvbm4tXHUwMDNlY190cmFucy1cdTAwM2V0X21wX2NhcGFibGUgPyBSRFNfTVBBVEhfV09SS0VSUyA6IDEpO1xuIDUxOTpcdFxuIDUyMDpcdFx0cmRzZGVidWcoXCYjMzQ7ZnJlZWluZyBjb25uICVwIGZvciAlcEk0IC1cdTAwM2UgXCYjMzQ7XG4gNTIxOlx0XHRcdCBcJiMzNDslcEk0XFxuXCYjMzQ7LCBjb25uLCBcdTAwMjZjb25uLVx1MDAzZWNfbGFkZHIsXG4gNTIyOlx0XHRcdCBcdTAwMjZjb25uLVx1MDAzZWNfZmFkZHIpO1xuIDUyMzpcdFxuIDUyNDpcdFx0LyogRW5zdXJlIGNvbm4gd2lsbCBub3QgYmUgc2NoZWR1bGVkIGZvciByZWNvbm5lY3QgKi9cbiA1MjU6XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2cmRzX2Nvbm5fbG9jayk7XG4gNTI2Olx0XHRobGlzdF9kZWxfaW5pdF9yY3UoXHUwMDI2Y29ubi1cdTAwM2VjX2hhc2hfbm9kZSk7XG4gNTI3Olx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2cmRzX2Nvbm5fbG9jayk7XG4gNTI4Olx0XHRzeW5jaHJvbml6ZV9yY3UoKTtcbiA1Mjk6XHRcbiA1MzA6XHRcdC8qIHNodXQgdGhlIGNvbm5lY3Rpb24gZG93biAqL1xuIDUzMTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnBhdGhzOyBpJiM0MzsmIzQzOykge1xuIDUzMjpcdFx0XHRjcCA9IFx1MDAyNmNvbm4tXHUwMDNlY19wYXRoW2ldO1xuIDUzMzpcdFx0XHRyZHNfY29ubl9wYXRoX2Rlc3Ryb3koY3ApO1xuIDUzNDpcdFx0XHRCVUdfT04oIWxpc3RfZW1wdHkoXHUwMDI2Y3AtXHUwMDNlY3BfcmV0cmFucykpO1xuIDUzNTpcdFx0fVxuIDUzNjpcdFxuIDUzNzpcdFx0LypcbiA1Mzg6XHRcdCAqIFRoZSBjb25nZXN0aW9uIG1hcHMgYXJlbiYjMzk7dCBmcmVlZCB1cCBoZXJlLiAgVGhleSYjMzk7cmVcbiA1Mzk6XHRcdCAqIGZyZWVkIGJ5IHJkc19jb25nX2V4aXQoKSBhZnRlciBhbGwgdGhlIGNvbm5lY3Rpb25zXG4gNTQwOlx0XHQgKiBoYXZlIGJlZW4gZnJlZWQuXG4gNTQxOlx0XHQgKi9cbiA1NDI6XHRcdHJkc19jb25nX3JlbW92ZV9jb25uKGNvbm4pO1xuIDU0MzpcdFxuIDU0NDpcdFx0a2ZyZWUoY29ubi1cdTAwM2VjX3BhdGgpO1xuIDU0NTpcdFx0a21lbV9jYWNoZV9mcmVlKHJkc19jb25uX3NsYWIsIGNvbm4pO1xuIDU0NjpcdFxuIDU0NzpcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cmRzX2Nvbm5fbG9jaywgZmxhZ3MpO1xuIDU0ODpcdFx0cmRzX2Nvbm5fY291bnQtLTtcbiA1NDk6XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cmRzX2Nvbm5fbG9jaywgZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTk4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQ2hlY2tpbmcgQ29kZSBmb3IgYG5ldC9yZHMvY29ubmVjdGlvbi5jYCBhbmQgTGluZSA5NTAqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgbGV0JiMzOTtzIGp1c3QgbWFrZSBhYnNvbHV0ZWx5IGNlcnRhaW4gd2UmIzM5O3JlIG5vdCBtaXNzaW5nIGFueXRoaW5nIGluIHRoZSBSRFMgY29ubmVjdGlvbiBoYW5kbGluZy4gV2UgbmVlZCB0byBnbyBiYWNrIGFuZCBjcm9zcy1yZWZlcmVuY2UgYSBzcGVjaWZpYyBsaW5lLCBsaW5lIDk1MCwgd2l0aGluIHRoZSBgbmV0L3Jkcy9jb25uZWN0aW9uLmNgIGZpbGUuIFRoaXMgcGFydGljdWxhciBzZWN0aW9uIGhhcyBwcm92ZW4gdG8gYmUgYW4gYXJlYSBvZiBpbnRlcmVzdCBpbiB0aGUgcGFzdC4gSXQmIzM5O3MgdGltZSB0byB0aG9yb3VnaGx5IHJldmlldyBpdHMgaW1wbGVtZW50YXRpb24gYW5kIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgcG90ZW50aWFsIGlzc3VlcyBvciBvdmVyc2lnaHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9yZHMvY29ubmVjdGlvbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NDU6XHRcdHF1ZXVlX3dvcmsoY3AtXHUwMDNlY3Bfd3EsIFx1MDAyNmNwLVx1MDAzZWNwX2Rvd25fdyk7XG4gOTQ2Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiA5NDc6XHR9XG4gOTQ4Olx0RVhQT1JUX1NZTUJPTF9HUEwocmRzX2Nvbm5fcGF0aF9kcm9wKTtcbiA5NDk6XHRcbiA5NTA6XHR2b2lkIHJkc19jb25uX2Ryb3Aoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxuIDk1MTpcdHtcbiA5NTI6XHRcdFdBUk5fT04oY29ubi1cdTAwM2VjX3RyYW5zLVx1MDAzZXRfbXBfY2FwYWJsZSk7XG4gOTUzOlx0XHRyZHNfY29ubl9wYXRoX2Ryb3AoXHUwMDI2Y29ubi1cdTAwM2VjX3BhdGhbMF0sIGZhbHNlKTtcbiA5NTQ6XHR9XG4gOTU1Olx0RVhQT1JUX1NZTUJPTF9HUEwocmRzX2Nvbm5fZHJvcCk7XG4gOTU2Olx0XG4gOTU3Olx0LypcbiA5NTg6XHQgKiBJZiB0aGUgY29ubmVjdGlvbiBpcyBkb3duLCB0cmlnZ2VyIGEgY29ubmVjdC4gV2UgbWF5IGhhdmUgc2NoZWR1bGVkIGFcbiA5NTk6XHQgKiBkZWxheWVkIHJlY29ubmVjdCBob3dldmVyIC0gaW4gdGhpcyBjYXNlIHdlIHNob3VsZCBub3QgaW50ZXJmZXJlLlxuIDk2MDpcdCAqL1xuIDk2MTpcdHZvaWQgcmRzX2Nvbm5fcGF0aF9jb25uZWN0X2lmX2Rvd24oc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxuIDk2MjpcdHtcbiA5NjM6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiA5NjQ6XHRcdGlmIChyZHNfZGVzdHJveV9wZW5kaW5nKGNwLVx1MDAzZWNwX2Nvbm4pKSB7XG4gOTY1Olx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDk2NjpcdFx0XHRyZXR1cm47XG4gOTY3Olx0XHR9XG4gOTY4Olx0XHRpZiAocmRzX2Nvbm5fcGF0aF9zdGF0ZShjcCkgPT0gUkRTX0NPTk5fRE9XTiBcdTAwMjZcdTAwMjZcbiA5Njk6XHRcdCAgICAhdGVzdF9hbmRfc2V0X2JpdChSRFNfUkVDT05ORUNUX1BFTkRJTkcsIFx1MDAyNmNwLVx1MDAzZWNwX2ZsYWdzKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTQ6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYwNwoJCQkJCQkJb3V0cHV0OiAyMDIKCQkJCQkJCXRob3VnaHRzOiAzMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFJEUyBDb25uZWN0aW9uIFRlYXJkb3duIEZpeCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1llcywgdGhpcyBpcyBkZWZpbml0ZWx5IGEgcG90ZW50aWFsIHByb2JsZW0gYXJlYS4mIzM0OyBgcmRzX2Nvbm5fZGVzdHJveShjb25uKWAgaXMgYSAqZGlyZWN0KiBmcmVlIG9mIHRoZSBjb25uZWN0aW9uIGFuZCBpdHMgYXNzb2NpYXRlZCBwYXRocywgd2hpY2ggaXMgYWx3YXlzIHJpc2t5IGluIGEga2VybmVsIGNvbnRleHQsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggaGFuZGxlcnMgb3Igd29ya3F1ZXVlcyB0aGF0IG1pZ2h0IHN0aWxsIGhhdmUgYWN0aXZlIHJlZmVyZW5jZXMgb3IgYmUgaW4gdGhlIHByb2Nlc3Mgb2YgZXhlY3V0aW5nLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUgKFVBRikgb3IgZXZlbiBkb3VibGUtZnJlZSBzY2VuYXJpbyBpZiBub3QgaGFuZGxlZCBjYXJlZnVsbHkuIGByZHNfY29ubl9kcm9wKGNvbm4pYCBpcyB0aGUgbW9yZSBhcHByb3ByaWF0ZSBjaG9pY2UgYXMgaXQgZGVmZXJzIHRoZSB0ZWFyZG93biwgcXVldWVpbmcgdGhlIHdvcmsgdG8gYWxsb3cgYSBncmFjZWZ1bCBkaXNjb25uZWN0aW9uLgoKTm93LCBsZXQmIzM5O3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0LgoKKiAgICoqVW5pbml0aWFsaXplZCBtZW1vcnk/KiogTm8sIHRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBrZXJuZWwgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlcnNwYWNlLiBUaGVyZSYjMzk7cyBhbHNvIG5vIHNpZ24gb2YgaXQgcmVhZGluZywgY29weWluZywgb3IgcGFzc2luZyBhcm91bmQgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoqICAgKipLTVNBTiBDb25jZXJucz8qKiBOb3BlLCBubyBLTVNBTi1zcGVjaWZpYyBidWdzIGxpa2UgdW5pbml0aWFsaXplZCBtZW1vcnksIHBhZGRpbmcgaXNzdWVzLCBvciBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhpcyBpcyBncmVhdCwgYXMgd2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVseSBvbiBLQVNBTiB0byBkZXRlY3QgVUFGL21lbW9yeSBtYW5hZ2VtZW50IGlzc3Vlcy4KKiAgICoqVGhlIGJ1ZyBpcyBpbmRlZWQgYSBsaWZldGltZSAvIHRlYXJkb3duIC8gVUFGIGlzc3VlLioqIFdlJiMzOTtyZSBmaXhpbmcgYSBzaXR1YXRpb24gd2hlcmUgYW4gZXZlbnQgaGFuZGxlciBwcmVtYXR1cmVseSBkZXN0cm95ZWQgdGhlIGNvbm5lY3Rpb24uIFRoaXMgZGlyZWN0bHkgbGVhZHMgdG8gdGhlIGRyZWFkZWQgcHJlbWF0dXJlIGZyZWUvVUFGLiBJdCYjMzk7cyBhIHRleHRib29rIGV4YW1wbGUgb2YgdGhlIGtpbmQgb2YgYnVnIEtBU0FOIGlzIGJ1aWx0IHRvIGNhdGNoLgoKTGV0JiMzOTtzIGRvdWJsZSBjaGVjayBhbGwgYXNwZWN0cyBvZiB0aGlzLgoKKiAgICoqSW4gYG5ldC9yZHMvaWJfY20uY2AqKiBUaGUgY2hhbmdlIHNwZWNpZmljYWxseSByZXBsYWNlcyBgcmRzX2Nvbm5fZGVzdHJveShjb25uKWAgd2l0aCBgcmRzX2Nvbm5fZHJvcChjb25uKWAgd2hlbiB0aGUgUkRTIHByb3RvY29sIHZlcnNpb24gaXMgdW5zdXBwb3J0ZWQuCiogICAqKlByZXZlbnRpbmcgYSBkaXJlY3QgZGVzdHJveS9mcmVlIGluIHRoZSBjb25uZWN0IGNvbXBsZXRlIGhhbmRsZXIuKiogVGhpcyBhdm9pZHMgdGhlIHBvdGVudGlhbCBmb3IgVUFGIGFuZCBtZW1vcnkgY29ycnVwdGlvbiwgZXhhY3RseSBhcyBzdXNwZWN0ZWQuCgpTaW5jZSBLTVNBTiBpc24mIzM5O3QgbmVlZGVkLCBsZXQmIzM5O3MgcHJlcGFyZSB0aGUgdG9vbCBjYWxsIGFuZCB3cmFwIHRoaXMgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE0OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGEgZGlyZWN0IGNhbGwgdG8gYHJkc19jb25uX2Rlc3Ryb3koKWAgd2l0aCBgcmRzX2Nvbm5fZHJvcCgpYCBpbiBgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGUoKWAgd2hlbiBhbiB1bnN1cHBvcnRlZCBwcm90b2NvbCB2ZXJzaW9uIGlzIGVuY291bnRlcmVkLiBgcmRzX2Nvbm5fZGVzdHJveSgpYCBpbW1lZGlhdGVseSBmcmVlcyB0aGUgY29ubmVjdGlvbiBvYmplY3QgKGBjb25uYCBhbmQgYGNvbm4tXHUwMDNlY19wYXRoYCksIHdoaWNoIGNhdXNlcyB1c2UtYWZ0ZXItZnJlZSBhbmQgcHJlbWF0dXJlIGNsZWFudXAgaXNzdWVzIGluIGNvbm5lY3Rpb24gZXZlbnQgaGFuZGxpbmcgcGF0aHMuIGByZHNfY29ubl9kcm9wKClgIGNsZWFubHkgdGVhcnMgZG93biB0aGUgY29ubmVjdGlvbiB2aWEgYXN5bmNocm9ub3VzIHdvcmsuXG5cblRoaXMgY2hhbmdlIGlzIHB1cmVseSBjb25jZXJuZWQgd2l0aCBvYmplY3QgbGlmZXRpbWVzLCByZWZlcmVuY2UgbWFuYWdlbWVudCwgYW5kIHRlYXJkb3duIHN5bmNocm9uaXphdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gbG9naWMsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcvYnVmZmVycyB0byB1c2Vyc3BhY2UuIE1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGEgZGlyZWN0IGNhbGwgdG8gYHJkc19jb25uX2Rlc3Ryb3koKWAgd2l0aCBgcmRzX2Nvbm5fZHJvcCgpYCBpbiBgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGUoKWAgd2hlbiBhbiB1bnN1cHBvcnRlZCBwcm90b2NvbCB2ZXJzaW9uIGlzIGVuY291bnRlcmVkLiBgcmRzX2Nvbm5fZGVzdHJveSgpYCBpbW1lZGlhdGVseSBmcmVlcyB0aGUgY29ubmVjdGlvbiBvYmplY3QgKGBjb25uYCBhbmQgYGNvbm4tXHUwMDNlY19wYXRoYCksIHdoaWNoIGNhdXNlcyB1c2UtYWZ0ZXItZnJlZSBhbmQgcHJlbWF0dXJlIGNsZWFudXAgaXNzdWVzIGluIGNvbm5lY3Rpb24gZXZlbnQgaGFuZGxpbmcgcGF0aHMuIGByZHNfY29ubl9kcm9wKClgIGNsZWFubHkgdGVhcnMgZG93biB0aGUgY29ubmVjdGlvbiB2aWEgYXN5bmNocm9ub3VzIHdvcmsuXG5cblRoaXMgY2hhbmdlIGlzIHB1cmVseSBjb25jZXJuZWQgd2l0aCBvYmplY3QgbGlmZXRpbWVzLCByZWZlcmVuY2UgbWFuYWdlbWVudCwgYW5kIHRlYXJkb3duIHN5bmNocm9uaXphdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gbG9naWMsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcvYnVmZmVycyB0byB1c2Vyc3BhY2UuIE1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6NTM6NDEuODk1MDI1NzA1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjIyMjAwMTQ2NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUkRTXCIsXG4gICAgXCJSRFNfUkRNQVwiLFxuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiSU5GSU5JQkFORF9BRERSX1RSQU5TXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGVcIixcbiAgICBcInJkc19yZG1hX2NtX2V2ZW50X2hhbmRsZXJfY21uXCIsXG4gICAgXCJyZHNfaWJfY21faGFuZGxlX2Nvbm5lY3RcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGEgZGlyZWN0IGNhbGwgdG8gYHJkc19jb25uX2Rlc3Ryb3koKWAgd2l0aCBgcmRzX2Nvbm5fZHJvcCgpYCBpbiBgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGUoKWAgd2hlbiBhbiB1bnN1cHBvcnRlZCBwcm90b2NvbCB2ZXJzaW9uIGlzIGVuY291bnRlcmVkLiBgcmRzX2Nvbm5fZGVzdHJveSgpYCBpbW1lZGlhdGVseSBmcmVlcyB0aGUgY29ubmVjdGlvbiBvYmplY3QgKGBjb25uYCBhbmQgYGNvbm4tXFx1MDAzZWNfcGF0aGApLCB3aGljaCBjYXVzZXMgdXNlLWFmdGVyLWZyZWUgYW5kIHByZW1hdHVyZSBjbGVhbnVwIGlzc3VlcyBpbiBjb25uZWN0aW9uIGV2ZW50IGhhbmRsaW5nIHBhdGhzLiBgcmRzX2Nvbm5fZHJvcCgpYCBjbGVhbmx5IHRlYXJzIGRvd24gdGhlIGNvbm5lY3Rpb24gdmlhIGFzeW5jaHJvbm91cyB3b3JrLlxcblxcblRoaXMgY2hhbmdlIGlzIHB1cmVseSBjb25jZXJuZWQgd2l0aCBvYmplY3QgbGlmZXRpbWVzLCByZWZlcmVuY2UgbWFuYWdlbWVudCwgYW5kIHRlYXJkb3duIHN5bmNocm9uaXphdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gbG9naWMsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcvYnVmZmVycyB0byB1c2Vyc3BhY2UuIE1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBSRFMgb3ZlciBJbmZpbmlCYW5kIGNvbm5lY3Rpb24gbGlmZWN5Y2xlIGhhbmRsaW5nIGJ5IGNoYW5naW5nIGByZHNfY29ubl9kZXN0cm95YCB0byBgcmRzX2Nvbm5fZHJvcGAgd2hlbiBlbmNvdW50ZXJpbmcgdW5zdXBwb3J0ZWQgcHJvdG9jb2wgdmVyc2lvbnMgaW4gYHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlYC4gVGhpcyBhbHRlcnMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgZXJyb3IgaGFuZGxpbmcgYW5kIGNvbm5lY3Rpb24gdGVhcmRvd24gZmxvdy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6NTM6NDEuODk1MDMxNzY1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzgxMjEzMjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjA1OTM3MWVmNzZkZTExNDAyMmI1NDNkMGYyNjE1YzMxNTFkMTQyMVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCA4IDE0OjUzOjM5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9yZHMvaWJfY20uYyBiL25ldC9yZHMvaWJfY20uY1xcbmluZGV4IGQ0NjE0Njg4N2JhNDAuLjI5MDlkYTgzNjNmMzkgMTAwNjQ0XFxuLS0tIGEvbmV0L3Jkcy9pYl9jbS5jXFxuKysrIGIvbmV0L3Jkcy9pYl9jbS5jXFxuQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHJkbWFfY21fZXZlblxcbiBcXHRcXHRcXHRcXHQgIFxcdTAwMjZjb25uLVxcdTAwM2VjX2xhZGRyLCBcXHUwMDI2Y29ubi1cXHUwMDNlY19mYWRkcixcXG4gXFx0XFx0XFx0XFx0ICBSRFNfUFJPVE9DT0xfTUFKT1IoY29ubi1cXHUwMDNlY192ZXJzaW9uKSxcXG4gXFx0XFx0XFx0XFx0ICBSRFNfUFJPVE9DT0xfTUlOT1IoY29ubi1cXHUwMDNlY192ZXJzaW9uKSk7XFxuLVxcdFxcdFxcdHJkc19jb25uX2Rlc3Ryb3koY29ubik7XFxuK1xcdFxcdFxcdHJkc19jb25uX2Ryb3AoY29ubik7XFxuIFxcdFxcdFxcdHJldHVybjtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE0OjUzOjQzLjY3NzA0NzMwN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzYwNzc1OTYyOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUkRTXCIsXG4gICAgXCJSRFNfUkRNQVwiLFxuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiSU5GSU5JQkFORF9BRERSX1RSQU5TXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGVcIixcbiAgICBcInJkc19yZG1hX2NtX2V2ZW50X2hhbmRsZXJfY21uXCIsXG4gICAgXCJyZHNfaWJfY21faGFuZGxlX2Nvbm5lY3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBSRFMgb3ZlciBJbmZpbmlCYW5kIGNvbm5lY3Rpb24gbGlmZWN5Y2xlIGhhbmRsaW5nIGJ5IGNoYW5naW5nIGByZHNfY29ubl9kZXN0cm95YCB0byBgcmRzX2Nvbm5fZHJvcGAgd2hlbiBlbmNvdW50ZXJpbmcgdW5zdXBwb3J0ZWQgcHJvdG9jb2wgdmVyc2lvbnMgaW4gYHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlYC4gVGhpcyBhbHRlcnMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgZXJyb3IgaGFuZGxpbmcgYW5kIGNvbm5lY3Rpb24gdGVhcmRvd24gZmxvdy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmMDU5MzcxZWY3NmRlMTE0MDIyYjU0M2QwZjI2MTVjMzE1MWQxNDIxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAxNDo1MzozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9yZHMvaWJfY20uYyBiL25ldC9yZHMvaWJfY20uY1xuaW5kZXggZDQ2MTQ2ODg3YmE0MC4uMjkwOWRhODM2M2YzOSAxMDA2NDRcbi0tLSBhL25ldC9yZHMvaWJfY20uY1xuKysrIGIvbmV0L3Jkcy9pYl9jbS5jXG5AQCAtMTE1LDcgKzExNSw3IEBAIHZvaWQgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBzdHJ1Y3QgcmRtYV9jbV9ldmVuXG4gXHRcdFx0XHQgIFx1MDAyNmNvbm4tXHUwMDNlY19sYWRkciwgXHUwMDI2Y29ubi1cdTAwM2VjX2ZhZGRyLFxuIFx0XHRcdFx0ICBSRFNfUFJPVE9DT0xfTUFKT1IoY29ubi1cdTAwM2VjX3ZlcnNpb24pLFxuIFx0XHRcdFx0ICBSRFNfUFJPVE9DT0xfTUlOT1IoY29ubi1cdTAwM2VjX3ZlcnNpb24pKTtcbi1cdFx0XHRyZHNfY29ubl9kZXN0cm95KGNvbm4pO1xuK1x0XHRcdHJkc19jb25uX2Ryb3AoY29ubik7XG4gXHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNDo1Mzo0My42NzcwNDkyMTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MzY1NDMxNzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgSW52ZXN0aWdhdGlvbiBpbnRvIHRoZSBSRFMvSW5maW5pQmFuZCBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIHJlYWxseSAqdW5kZXJzdGFuZCogaXQuIFRoZSBrZXkgY2hhbmdlIGlzIGluIGBuZXQvcmRzL2liX2NtLmNgLCBzcGVjaWZpY2FsbHkgaW4gYHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlYC4gVGhleSd2ZSBzd2FwcGVkIG91dCBgcmRzX2Nvbm5fZGVzdHJveShjb25uKTtgIGZvciBgcmRzX2Nvbm5fZHJvcChjb25uKTtgLiBIbW0sIHN1YnRsZSBidXQgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQuIEknbSBndWVzc2luZyB0aGlzIG1pZ2h0IGhhdmUgaW1wbGljYXRpb25zIGZvciBjb25uZWN0aW9uIHRlYXJkb3duLCByZXNvdXJjZSBjbGVhbnVwLCBvciBtYXliZSBldmVuIGVycm9yIGhhbmRsaW5nIGluIHRoZSBjb250ZXh0IG9mIEluZmluaUJhbmQuIFRoaXMgbWVhbnMgYSBjbG9zZXIgbG9vayBhdCB0aGUgKndoeSogb2YgdGhlIGNoYW5nZSBpcyBuZWVkZWQuXG5cblRpbWUgdG8gZGl2ZSBkZWVwZXIgaW50byBgbmV0L3Jkcy9pYl9jbS5jYC4gSSdsbCB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGdldCB0aGUgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IFJEUyBpbnRlcmFjdHMgd2l0aCBJbmZpbmlCYW5kIGFuZCBSRE1BIGluIHRoaXMgc3BlY2lmaWMgbW9kdWxlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLCBjb25maWd1cmF0aW9uIG9wdGlvbnMgKGFyZSB0aGVyZSBhbnkgdGhhdCBhZmZlY3QgdGhpcyBiZWhhdmlvcj8pLCBhbmQgZXJyb3IgcGF0aHMuIFRoaXMgbWVhbnMgdW5kZXJzdGFuZGluZyBob3cgY29ubmVjdGlvbnMgYXJlIGVzdGFibGlzaGVkLCBtYW5hZ2VkLCBhbmQgcmVsZWFzZWQgd2l0aGluIHRoZSBSRFMvSUIgZnJhbWV3b3JrLlxuXG5BIG1vcmUgbG9uZy10ZXJtIGNvbmNlcm4gSSdtIHRoaW5raW5nIGFib3V0IGlzIGZ1enppbmcgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIENhbiBJIHJlYXNvbmFibHkgZXhwZWN0IHRvIGZ1enogdGhpcyBzdWNjZXNzZnVsbHkgaW4gbXkgc3RhbmRhcmQgdmlydHVhbGl6ZWQgUUVNVSBlbnZpcm9ubWVudHMsIHVzaW5nIHNvbWV0aGluZyBsaWtlIHJkbWFfcnhlLCBzb2Z0LWlXQVJQLCBvciBTSVc/IEl0J3MgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhlIGZlYXNpYmlsaXR5IG9mIHRlc3RpbmcgdGhpcyBjaGFuZ2UgZWZmZWN0aXZlbHkuIFRvIGRvIHRoaXMsIEkgbmVlZCB0byBjaGVjayB0aGUgUkRTIGNvbmZpZ3VyYXRpb24gYW5kIFJETUEgc3VwcG9ydCB3aXRoaW4gc3l6a2FsbGVyIGFuZCB0aGUgbWFpbmxpbmUga2VybmVsLiBUaGUgbGV2ZWwgb2Ygc3VwcG9ydCBpbiB0aGVzZSBhcmVhcyB3aWxsIGRpY3RhdGUgaG93IGRpZmZpY3VsdCB0aGlzIGNoYW5nZSBpcyB0byB2YWxpZGF0ZSB0aG9yb3VnaGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODc3LCJPdXRwdXRUb2tlbnMiOjk3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6NTM6NDkuMDQyNDgzNTQ4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwMzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9yZHMvaWJfY20uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDA6XFx0XFx0XFx0bWFqb3IgPSBkcC1cXHUwMDNlcmljcF92NC5kcF9wcm90b2NvbF9tYWpvcjtcXG4gMTAxOlxcdFxcdFxcdG1pbm9yID0gZHAtXFx1MDAzZXJpY3BfdjQuZHBfcHJvdG9jb2xfbWlub3I7XFxuIDEwMjpcXHRcXHRcXHRjcmVkaXQgPSBkcC1cXHUwMDNlcmljcF92NC5kcF9jcmVkaXQ7XFxuIDEwMzpcXHRcXHRcXHRhY2tfc2VxID0gZ2V0X3VuYWxpZ25lZChcXHUwMDI2ZHAtXFx1MDAzZXJpY3BfdjQuZHBfYWNrX3NlcSk7XFxuIDEwNDpcXHRcXHR9XFxuIDEwNTpcXHRcXG4gMTA2OlxcdFxcdC8qIG1ha2Ugc3VyZSBpdCBpc24ndCBlbXB0eSBkYXRhICovXFxuIDEwNzpcXHRcXHRpZiAobWFqb3IpIHtcXG4gMTA4OlxcdFxcdFxcdHJkc19pYl9zZXRfcHJvdG9jb2woY29ubiwgUkRTX1BST1RPQ09MKG1ham9yLCBtaW5vcikpO1xcbiAxMDk6XFx0XFx0XFx0cmRzX2liX3NldF9mbG93X2NvbnRyb2woY29ubiwgYmUzMl90b19jcHUoY3JlZGl0KSk7XFxuIDExMDpcXHRcXHR9XFxuIDExMTpcXHRcXG4gMTEyOlxcdFxcdGlmIChjb25uLVxcdTAwM2VjX3ZlcnNpb24gXFx1MDAzYyBSRFNfUFJPVE9DT0xfVkVSU0lPTikge1xcbiAxMTM6XFx0XFx0XFx0aWYgKGNvbm4tXFx1MDAzZWNfdmVyc2lvbiAhPSBSRFNfUFJPVE9DT0xfQ09NUEFUX1ZFUlNJT04pIHtcXG4gMTE0OlxcdFxcdFxcdFxcdHByX25vdGljZShcXFwiUkRTL0lCOiBDb25uZWN0aW9uIFxcdTAwM2MlcEk2YywlcEk2Y1xcdTAwM2UgdmVyc2lvbiAldS4ldSBubyBsb25nZXIgc3VwcG9ydGVkXFxcXG5cXFwiLFxcbiAxMTU6XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2Y29ubi1cXHUwMDNlY19sYWRkciwgXFx1MDAyNmNvbm4tXFx1MDAzZWNfZmFkZHIsXFxuIDExNjpcXHRcXHRcXHRcXHRcXHQgIFJEU19QUk9UT0NPTF9NQUpPUihjb25uLVxcdTAwM2VjX3ZlcnNpb24pLFxcbiAxMTc6XFx0XFx0XFx0XFx0XFx0ICBSRFNfUFJPVE9DT0xfTUlOT1IoY29ubi1cXHUwMDNlY192ZXJzaW9uKSk7XFxuIDExODpcXHRcXHRcXHRcXHRyZHNfY29ubl9kcm9wKGNvbm4pO1xcbiAxMTk6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiAxMjA6XFx0XFx0XFx0fVxcbiAxMjE6XFx0XFx0fVxcbiAxMjI6XFx0XFxuIDEyMzpcXHRcXHRwcl9ub3RpY2UoXFxcIlJEUy9JQjogJXMgY29ubiBjb25uZWN0ZWQgXFx1MDAzYyVwSTZjLCVwSTZjLCVkXFx1MDAzZSB2ZXJzaW9uICV1LiV1JXNcXFxcblxcXCIsXFxuIDEyNDpcXHRcXHRcXHQgIGljLVxcdTAwM2VpX2FjdGl2ZV9zaWRlID8gXFxcIkFjdGl2ZVxcXCIgOiBcXFwiUGFzc2l2ZVxcXCIsXFxuIDEyNTpcXHRcXHRcXHQgIFxcdTAwMjZjb25uLVxcdTAwM2VjX2xhZGRyLCBcXHUwMDI2Y29ubi1cXHUwMDNlY19mYWRkciwgY29ubi1cXHUwMDNlY190b3MsXFxuIDEyNjpcXHRcXHRcXHQgIFJEU19QUk9UT0NPTF9NQUpPUihjb25uLVxcdTAwM2VjX3ZlcnNpb24pLFxcbiAxMjc6XFx0XFx0XFx0ICBSRFNfUFJPVE9DT0xfTUlOT1IoY29ubi1cXHUwMDNlY192ZXJzaW9uKSxcXG4gMTI4OlxcdFxcdFxcdCAgaWMtXFx1MDAzZWlfZmxvd2N0bCA/IFxcXCIsIGZsb3cgY29udHJvbFxcXCIgOiBcXFwiXFxcIik7XFxuIDEyOTpcXHRcXG4gMTMwOlxcdFxcdC8qIHJlY2VpdmUgc2wgZnJvbSB0aGUgcGVlciAqL1xcbiAxMzE6XFx0XFx0aWMtXFx1MDAzZWlfc2wgPSBpYy1cXHUwMDNlaV9jbV9pZC1cXHUwMDNlcm91dGUucGF0aF9yZWMtXFx1MDAzZXNsO1xcbiAxMzI6XFx0XFxuIDEzMzpcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZpYy1cXHUwMDNlaV9jcV9xdWllc2NlLCAwKTtcXG4gMTM0OlxcdFxcbiAxMzU6XFx0XFx0LyogSW5pdCByaW5ncyBhbmQgZmlsbCByZWN2LiB0aGlzIG5lZWRzIHRvIHdhaXQgdW50aWwgcHJvdG9jb2xcXG4gMTM2OlxcdFxcdCAqIG5lZ290aWF0aW9uIGlzIGNvbXBsZXRlLCBzaW5jZSByaW5nIGxheW91dCBpcyBkaWZmZXJlbnRcXG4gMTM3OlxcdFxcdCAqIGZyb20gMy4xIHRvIDQuMS5cXG4gMTM4OlxcdFxcdCAqL1xcbiAxMzk6XFx0XFx0cmRzX2liX3NlbmRfaW5pdF9yaW5nKGljKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6NTM6NDkuMDQyNjY2MDc4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMTU2MTk0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUkRTX1JETUFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Jkcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Jkcy9LY29uZmlnPTM9Y29uZmlnIFJEU1xcbi0tXFxubmV0L3Jkcy9LY29uZmlnLTktXFxubmV0L3Jkcy9LY29uZmlnOjEwOmNvbmZpZyBSRFNfUkRNQVxcbm5ldC9yZHMvS2NvbmZpZy0xMS1cXHR0cmlzdGF0ZSBcXFwiUkRTIG92ZXIgSW5maW5pYmFuZFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6NTM6NDkuMjU0MjMyNDU0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDA5NjA3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvYmotXFxcXCRcXFxcKENPTkZJR19SRFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Jkcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Jkcy9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5uZXQvcmRzL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX1JEUykgKz0gcmRzLm9cXG5uZXQvcmRzL01ha2VmaWxlLTMtcmRzLXkgOj1cXHRhZl9yZHMubyBiaW5kLm8gY29uZy5vIGNvbm5lY3Rpb24ubyBpbmZvLm8gbWVzc2FnZS5vICAgXFxcXFxcbi0tXFxubmV0L3Jkcy9NYWtlZmlsZS02LVxcbm5ldC9yZHMvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfUkRTX1JETUEpICs9IHJkc19yZG1hLm9cXG5uZXQvcmRzL01ha2VmaWxlLTgtcmRzX3JkbWEteSA6PVxcdHJkbWFfdHJhbnNwb3J0Lm8gXFxcXFxcbi0tXFxubmV0L3Jkcy9NYWtlZmlsZS0xMi1cXG5uZXQvcmRzL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19SRFNfVENQKSArPSByZHNfdGNwLm9cXG5uZXQvcmRzL01ha2VmaWxlLTE0LXJkc190Y3AteSA6PVxcdFxcdHRjcC5vIHRjcF9jb25uZWN0Lm8gdGNwX2xpc3Rlbi5vIHRjcF9yZWN2Lm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNDo1Mzo0OS4zNjgzMzUzOTVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTk2NjU1Mjk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgUkRNQSBDb25maWd1cmF0aW9uIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gUkRNQSB3aXRoaW4gdGhlIFJEUyAoUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cykgc3Vic3lzdGVtIG9mIHRoZSBMaW51eCBrZXJuZWwuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBsb29rIGF0IHRoZSBgS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ20gZm9jdXNpbmcgb24gdGhlIGBuZXQvcmRzL0tjb25maWdgIGZpbGUgYmVjYXVzZSB0aGF0J3MgdGhlIG9idmlvdXMgcGxhY2UgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgZm9yIHRoZSBSRFMgcHJvdG9jb2wuIEknbSB6ZXJvaW5nIGluIG9uIGBjb25maWcgUkRTX1JETUFgLiBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhlcmUncyBsaWtlbHkgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbiwgcGVyaGFwcyBhIGJvb2xlYW4sIHRoYXQgY29udHJvbHMgd2hldGhlciBvciBub3QgdGhlIFJETUEgZmVhdHVyZXMgYXJlIGVuYWJsZWQgd2l0aGluIFJEUy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBvcHRpb25zIG1pZ2h0IGRlcGVuZCBvbiBpdCwgd2hhdCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZSwgYW5kIHdoYXQgdGhlIGFzc29jaWF0ZWQgaGVscCB0ZXh0IHNheXMgYWJvdXQgaXRzIGludGVuZGVkIHVzZSBhbmQgaW1wbGljYXRpb25zLiBFc3NlbnRpYWxseSwgSSdtIHRyeWluZyB0byBtZW50YWxseSByZWNvbnN0cnVjdCB0aGUgY29uZmlndXJhdGlvbiBsb2dpYyBhbmQgdW5kZXJzdGFuZCBob3cgYFJEU19SRE1BYCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgc3BlY2lmaWMgcHJvdG9jb2wuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1MzgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSIsImdyZXBwZXIiLCJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6NTM6NTIuOTY0OTkzMTgzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExMDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9yZHMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0XFxuICAgMzpcXHRjb25maWcgUkRTXFxuICAgNDpcXHRcXHR0cmlzdGF0ZSBcXFwiVGhlIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgUHJvdG9jb2xcXFwiXFxuICAgNTpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA2OlxcdFxcdGhlbHBcXG4gICA3OlxcdFxcdCAgVGhlIFJEUyAoUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cykgcHJvdG9jb2wgcHJvdmlkZXMgcmVsaWFibGUsXFxuICAgODpcXHRcXHQgIHNlcXVlbmNlZCBkZWxpdmVyeSBvZiBkYXRhZ3JhbXMgb3ZlciBJbmZpbmliYW5kIG9yIFRDUC5cXG4gICA5OlxcdFxcbiAgMTA6XFx0Y29uZmlnIFJEU19SRE1BXFxuICAxMTpcXHRcXHR0cmlzdGF0ZSBcXFwiUkRTIG92ZXIgSW5maW5pYmFuZFxcXCJcXG4gIDEyOlxcdFxcdGRlcGVuZHMgb24gUkRTIFxcdTAwMjZcXHUwMDI2IElORklOSUJBTkQgXFx1MDAyNlxcdTAwMjYgSU5GSU5JQkFORF9BRERSX1RSQU5TXFxuICAxMzpcXHRcXHRoZWxwXFxuICAxNDpcXHRcXHQgIEFsbG93IFJEUyB0byB1c2UgSW5maW5pYmFuZCBhcyBhIHRyYW5zcG9ydC5cXG4gIDE1OlxcdFxcdCAgVGhpcyB0cmFuc3BvcnQgc3VwcG9ydHMgUkRNQSBvcGVyYXRpb25zLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRjb25maWcgUkRTX1RDUFxcbiAgMTg6XFx0XFx0dHJpc3RhdGUgXFxcIlJEUyBvdmVyIFRDUFxcXCJcXG4gIDE5OlxcdFxcdGRlcGVuZHMgb24gUkRTXFxuICAyMDpcXHRcXHRkZXBlbmRzIG9uIElQVjYgfHwgIUlQVjZcXG4gIDIxOlxcdFxcdGhlbHBcXG4gIDIyOlxcdFxcdCAgQWxsb3cgUkRTIHRvIHVzZSBUQ1AgYXMgYSB0cmFuc3BvcnQuXFxuICAyMzpcXHRcXHQgIFRoaXMgdHJhbnNwb3J0IGRvZXMgbm90IHN1cHBvcnQgUkRNQSBvcGVyYXRpb25zLlxcbiAgMjQ6XFx0XFxuICAyNTpcXHRjb25maWcgUkRTX0RFQlVHXFxuICAyNjpcXHRcXHRib29sIFxcXCJSRFMgZGVidWdnaW5nIG1lc3NhZ2VzXFxcIlxcbiAgMjc6XFx0XFx0ZGVwZW5kcyBvbiBSRFNcXG4gIDI4OlxcdFxcdGRlZmF1bHQgblxcbiAgMjk6XFx0XFxuICAzMDpcXHRjb25maWcgR0NPVl9QUk9GSUxFX1JEU1xcbiAgMzE6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEdDT1YgcHJvZmlsaW5nIG9uIFJEU1xcXCJcXG4gIDMyOlxcdFxcdGRlcGVuZHMgb24gR0NPVl9LRVJORUxcXG4gIDMzOlxcdFxcdGhlbHBcXG4gIDM0OlxcdFxcdCAgRW5hYmxlIEdDT1YgcHJvZmlsaW5nIG9uIFJEUyBmb3IgY2hlY2tpbmcgd2hpY2ggZnVuY3Rpb25zL2xpbmVzXFxuICAzNTpcXHRcXHQgIGFyZSBleGVjdXRlZC5cXG4gIDM2OlxcdFxcbiAgMzc6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNDo1Mzo1Mi45NjcxNTYwMjNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjc2NTI4OTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJETUEgRHJpdmVyIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSB0aGlua2luZyB0aHJvdWdoIHRoZSBSRE1BIGRyaXZlciBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNwZWNpZmljYWxseSBmb3IgcG90ZW50aWFsIGRlcGxveW1lbnQgc2NlbmFyaW9zLiBNeSBtaW5kIGp1bXBzIGltbWVkaWF0ZWx5IHRvIGBDT05GSUdfUkRTYCwgdGhhdCdzIHRoZSBiYXNlIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgcHJvdG9jb2wgSSdtIG1vc3QgZmFtaWxpYXIgd2l0aC4gQnV0LCBnaXZlbiBteSBmb2N1cyBvbiBSZW1vdGUgRGlyZWN0IE1lbW9yeSBBY2Nlc3MsIEkgbmVlZCB0byBjb25zaWRlciBgQ09ORklHX1JEU19SRE1BYCB3aGljaCBpcyB0aGUgb2J2aW91cyBvbmUsIGFuZCBhbHNvIGBDT05GSUdfSU5GSU5JQkFORGAuIE9mIGNvdXJzZSwgSSdtIGdvaW5nIHRvIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGFkZHJlc3MgdHJhbnNsYXRpb24gaXMgd29ya2luZyBjb3JyZWN0bHksIHNvIGBDT05GSUdfSU5GSU5JQkFORF9BRERSX1RSQU5TYCBpcyBhIG11c3QuIE5vdywgZGVwZW5kaW5nIG9uIHRoZSBlbnZpcm9ubWVudOKAlHNwZWNpZmljYWxseSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggdmlydHVhbGl6YXRpb27igJRJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gbG9vayBhdCB0aGUgc29mdC1SRE1BIGRyaXZlcnM6IGBDT05GSUdfUkRNQV9SWEVgIG9yIG1heWJlIGBDT05GSUdfUkRNQV9TSVdgLiBUaGVzZSBhcmUgY3J1Y2lhbCBmb3Igc2l0dWF0aW9ucyBsaWtlIHVzaW5nIFFFTVUgb3Igb3RoZXIgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGV5IGVuYWJsZSBSRE1BIGZ1bmN0aW9uYWxpdHkgd2l0aG91dCBkZWRpY2F0ZWQgaGFyZHdhcmUsIHRocm91Z2ggYHJkbWFfcnhlYCBvciBgc2l3YC4gVGhhdCdzIGEga2V5IGNvbnNpZGVyYXRpb24uXG5cbk15IG5leHQgaW1tZWRpYXRlIHRhc2sgaXMgdG8gdHJhY2sgZG93biB3aGVyZSBgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGVgIGlzIGNhbGxlZC4gVGhhdCdzIHRoZSBjcml0aWNhbCBjb25uZWN0aW9uIGNvbXBsZXRpb24gcGF0aCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIEkgbmVlZCB0byBsaXN0IHRoZSBjYWxsZXJzIG9mIHRoYXQgZnVuY3Rpb24sIHNvIEkgY2FuIHNlZSB3aGF0IHRoZSBjcml0aWNhbCBwYXRocyBhcmUuIEtub3dpbmcgd2hvIGlzICp1c2luZyogdGhlIGNvbm5lY3Rpb24gY29tcGxldGUgZnVuY3Rpb24gaXMgdml0YWwgdG8gbWFraW5nIGRlY2lzaW9ucyBhYm91dCB0aGlzIGFyZWEuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyNTQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNDo1Mzo1NS42NDM2ODgxMjlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzU0Nzc5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZHNfaWJfY21fY29ubmVjdF9jb21wbGV0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcmRzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcmRzL2liLmM9NTU5PXN0cnVjdCByZHNfdHJhbnNwb3J0IHJkc19pYl90cmFuc3BvcnQgPSB7XFxuLS1cXG5uZXQvcmRzL2liLmMtNTczLVxcdC5jbV9oYW5kbGVfY29ubmVjdFxcdD0gcmRzX2liX2NtX2hhbmRsZV9jb25uZWN0LFxcbm5ldC9yZHMvaWIuYzo1NzQ6XFx0LmNtX2Nvbm5lY3RfY29tcGxldGVcXHQ9IHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlLFxcbm5ldC9yZHMvaWIuYy01NzUtXFx0LnN0YXRzX2luZm9fY29weVxcdD0gcmRzX2liX3N0YXRzX2luZm9fY29weSxcXG4tLVxcbm5ldC9yZHMvaWIuaD0zNzY9aW50IHJkc19pYl9jbV9pbml0aWF0ZV9jb25uZWN0KHN0cnVjdCByZG1hX2NtX2lkICpjbV9pZCwgYm9vbCBpc3Y2KTtcXG5uZXQvcmRzL2liLmg6Mzc3OnZvaWQgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLFxcbm5ldC9yZHMvaWIuaC0zNzgtXFx0XFx0XFx0XFx0c3RydWN0IHJkbWFfY21fZXZlbnQgKmV2ZW50KTtcXG4tLVxcbm5ldC9yZHMvaWJfY20uYz01Nz1zdGF0aWMgdm9pZCByZHNfaWJfc2V0X2Zsb3dfY29udHJvbChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHUzMiBjcmVkaXRzKVxcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTczLSAqL1xcbm5ldC9yZHMvaWJfY20uYzo3NDp2b2lkIHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHJkbWFfY21fZXZlbnQgKmV2ZW50KVxcbm5ldC9yZHMvaWJfY20uYy03NS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE0OjUzOjU1LjgwMTI0NDU5NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODk4MzgzOTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYGNtX2Nvbm5lY3RfY29tcGxldGVgIGluIGBuZXQvcmRzL2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biBhbGwgdGhlIGNhbGwgc2l0ZXMgZm9yIGBjbV9jb25uZWN0X2NvbXBsZXRlYCB3aXRoaW4gdGhlIGBuZXQvcmRzL2AgZGlyZWN0b3J5LiBUaGF0J3MgdXN1YWxseSB0aGUgYmVzdCB3YXkgdG8gdW5kZXJzdGFuZCBob3cgYSBzcGVjaWZpYyBmdW5jdGlvbiBpcyB1c2VkIGFuZCwgaW4gdGhpcyBjYXNlLCBob3cgY29ubmVjdGlvbiBjb21wbGV0aW9uIGlzIGhhbmRsZWQgaW4gdGhlIFJEUyBuZXR3b3JrIHN0YWNrLiBJJ20gcHJvYmFibHkgbG9va2luZyBmb3IgcGxhY2VzIHdoZXJlIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBnZXRzIHNpZ25hbGVkLCBvciBwZXJoYXBzIHdoZXJlIGVycm9yIGhhbmRsaW5nIHJlbGF0ZWQgdG8gdGhhdCBwaGFzZSBpcyBpbXBsZW1lbnRlZC4gSSdtIGFudGljaXBhdGluZyBzb21lIGludHJpY2F0ZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgUkRNQSBzdGFjayBpZiBSRFMgaXMgaW52b2x2ZWQsIGFuZCBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBlc3BlY2lhbGx5IGFyb3VuZCBsb2NrIHVzYWdlLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgc291cmNlIGNvZGUgYW5kIHN0YXJ0IGdyZXBwaW5nISBJJ20gZXhwZWN0aW5nIHRoaXMgd2lsbCBpbnZvbHZlIGxvb2tpbmcgYXQgY29udGV4dCBzd2l0Y2hlcyBhbmQgZGF0YSB0cmFuc2Zlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA3OCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE0OjUzOjU3LjY5OTYzMjA4NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4NjIwNjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNtX2Nvbm5lY3RfY29tcGxldGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Jkcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Jkcy9pYi5jPTU1OT1zdHJ1Y3QgcmRzX3RyYW5zcG9ydCByZHNfaWJfdHJhbnNwb3J0ID0ge1xcbi0tXFxubmV0L3Jkcy9pYi5jLTU3My1cXHQuY21faGFuZGxlX2Nvbm5lY3RcXHQ9IHJkc19pYl9jbV9oYW5kbGVfY29ubmVjdCxcXG5uZXQvcmRzL2liLmM6NTc0OlxcdC5jbV9jb25uZWN0X2NvbXBsZXRlXFx0PSByZHNfaWJfY21fY29ubmVjdF9jb21wbGV0ZSxcXG5uZXQvcmRzL2liLmMtNTc1LVxcdC5zdGF0c19pbmZvX2NvcHlcXHQ9IHJkc19pYl9zdGF0c19pbmZvX2NvcHksXFxuLS1cXG5uZXQvcmRzL2liLmg9Mzc2PWludCByZHNfaWJfY21faW5pdGlhdGVfY29ubmVjdChzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQsIGJvb2wgaXN2Nik7XFxubmV0L3Jkcy9pYi5oOjM3Nzp2b2lkIHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubixcXG5uZXQvcmRzL2liLmgtMzc4LVxcdFxcdFxcdFxcdHN0cnVjdCByZG1hX2NtX2V2ZW50ICpldmVudCk7XFxuLS1cXG5uZXQvcmRzL2liX2NtLmM9NTc9c3RhdGljIHZvaWQgcmRzX2liX3NldF9mbG93X2NvbnRyb2woc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCB1MzIgY3JlZGl0cylcXG4tLVxcbm5ldC9yZHMvaWJfY20uYy03My0gKi9cXG5uZXQvcmRzL2liX2NtLmM6NzQ6dm9pZCByZHNfaWJfY21fY29ubmVjdF9jb21wbGV0ZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCByZG1hX2NtX2V2ZW50ICpldmVudClcXG5uZXQvcmRzL2liX2NtLmMtNzUte1xcbi0tXFxubmV0L3Jkcy9pYl9zeXNjdGwuYz01MD1zdGF0aWMgdW5zaWduZWQgbG9uZyByZHNfaWJfc3lzY3RsX21heF91bnNpZ193cl9tYXggPSA2NDtcXG4tLVxcbm5ldC9yZHMvaWJfc3lzY3RsLmMtNTgtICogc2V0dGluZyB0aGlzIHRvIDEgYW5kIG1vdmluZyBpbml0L3JlZmlsbCBvZiBzZW5kL3JlY3ZcXG5uZXQvcmRzL2liX3N5c2N0bC5jOjU5OiAqIHJpbmdzIGZyb20gaWJfY21fY29ubmVjdF9jb21wbGV0ZSgpIGJhY2sgaW50byBpYl9zZXR1cF9xcCgpXFxubmV0L3Jkcy9pYl9zeXNjdGwuYy02MC0gKiB3aWxsIGNhdXNlIGNyZWRpdHMgdG8gYmUgYWRkZWQgYmVmb3JlIHByb3RvY29sIG5lZ290aWF0aW9uLlxcbi0tXFxubmV0L3Jkcy9yZG1hX3RyYW5zcG9ydC5jPTQ5PXN0YXRpYyBpbnQgcmRzX3JkbWFfY21fZXZlbnRfaGFuZGxlcl9jbW4oc3RydWN0IHJkbWFfY21faWQgKmNtX2lkLFxcbi0tXFxubmV0L3Jkcy9yZG1hX3RyYW5zcG9ydC5jLTExNy1cXHRcXHRpZiAoY29ubilcXG5uZXQvcmRzL3JkbWFfdHJhbnNwb3J0LmM6MTE4OlxcdFxcdFxcdHRyYW5zLVxcdTAwM2VjbV9jb25uZWN0X2NvbXBsZXRlKGNvbm4sIGV2ZW50KTtcXG5uZXQvcmRzL3JkbWFfdHJhbnNwb3J0LmMtMTE5LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L3Jkcy9yZHMuaD01Mjk9c3RydWN0IHJkc190cmFuc3BvcnQge1xcbi0tXFxubmV0L3Jkcy9yZHMuaC01OTQtXFx0aW50ICgqY21faW5pdGlhdGVfY29ubmVjdCkoc3RydWN0IHJkbWFfY21faWQgKmNtX2lkLCBib29sIGlzdjYpO1xcbm5ldC9yZHMvcmRzLmg6NTk1OlxcdHZvaWQgKCpjbV9jb25uZWN0X2NvbXBsZXRlKShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sXFxubmV0L3Jkcy9yZHMuaC01OTYtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCByZG1hX2NtX2V2ZW50ICpldmVudCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE0OjUzOjU3LjgwODI1OTE0OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0Mzk2MTc2NDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgUkRNQSBFdmVudCBIYW5kbGVyKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhlIFJEUyBSRE1BIGNvbm5lY3Rpb24gbWFuYWdlciBldmVudCBoYW5kbGluZy4gVGhlIHBsYWNlIHRvIHN0YXJ0LCBhcyB1c3VhbCwgaXMgdGhlIGNvcmUuIEknbSBnb2luZyB0byBqdW1wIGludG8gYG5ldC9yZHMvcmRtYV90cmFuc3BvcnQuY2AgYW5kIHNwZWNpZmljYWxseSBsb29rIGF0IGByZHNfcmRtYV9jbV9ldmVudF9oYW5kbGVyX2NtbmAuIFRoaXMgaXMgdGhlIHNoYXJlZCwgY29tbW9uIGhhbmRsZXIsIHdoaWNoIGlzIGdlbmVyYWxseSB3aGVyZSB0aGUgbG93ZXItbGV2ZWwgUkRNQSBDTSBldmVudHMgd2lsbCBiZSBwcm9jZXNzZWQgYmVmb3JlIHRoZXkncmUgZGlzcGF0Y2hlZCB0byBtb3JlIHNwZWNpZmljIFJEUy1sZXZlbCBsb2dpYy4gSSBleHBlY3QgdG8gZmluZCB0aGUgaW5pdGlhbCBDTSBldmVudCBwcm9jZXNzaW5nOiBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQsIGNvbm5lY3Rpb24gZmFpbHVyZXMsIGRpc2Nvbm5lY3RzLCBhbmQgYW55IGVycm9yIGhhbmRsaW5nIGhhcHBlbmluZyBhdCB0aGUgQ00gbGV2ZWwuIEZyb20gdGhlcmUsIEknbGwgbmVlZCB0byBzZWUgaG93IHRoZSBjb2RlIGludGVyZmFjZXMgd2l0aCB0aGUgUkRTIHByb3RvY29sIHN0YXRlIG1hY2hpbmVzIOKAkyBJJ20gaW50ZXJlc3RlZCBpbiBob3cgaXQgdHJhbnNsYXRlcyB0aGUgUkRNQSB0cmFuc3BvcnQtbGV2ZWwgZXZlbnRzIGludG8gaGlnaGVyLWxldmVsIFJEUyBjb25uZWN0aW9uIHN0YXRlcyBhbmQgYWN0aW9ucy4gSSdtIGhvcGluZyBpdCdzIHdlbGwtc3RydWN0dXJlZCBhbmQgaGFuZGxlcyB0aGluZ3MgbGlrZSByZXRyaWVzLCBiYWNrb2ZmLCBhbmQgZXJyb3IgcmVwb3J0aW5nIGdyYWNlZnVsbHksIGFuZCB0aGF0IHRoZSBldmVudCB0eXBlcyBhcmUgY2xlYXJseSBzZXBhcmF0ZWQuIE15IGV4cGVjdGF0aW9uIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGEgY3JpdGljYWwgcGFydCBvZiBob3cgUkRTIGRlYWxzIHdpdGggdGhlIFJETUEgc3RhY2sgdW5kZXJuZWF0aC4gTGV0J3Mgc2VlIGlmIG15IG1lbnRhbCBtb2RlbCBsaW5lcyB1cCB3aXRoIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDQzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6NTQ6MDIuMjA0NDM5NzY3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvcmRzL3JkbWFfdHJhbnNwb3J0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAwOlxcdFxcdFxcdCAqIGNtX2lkIGlzIHZhbGlkIGJlZm9yZSBwcm9jZWVkaW5nXFxuIDEwMTpcXHRcXHRcXHQgKi9cXG4gMTAyOlxcdFxcdFxcdGlmIChjb25uKSB7XFxuIDEwMzpcXHRcXHRcXHRcXHRzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmliaWM7XFxuIDEwNDpcXHRcXG4gMTA1OlxcdFxcdFxcdFxcdGliaWMgPSBjb25uLVxcdTAwM2VjX3RyYW5zcG9ydF9kYXRhO1xcbiAxMDY6XFx0XFx0XFx0XFx0aWYgKGliaWMgXFx1MDAyNlxcdTAwMjYgaWJpYy1cXHUwMDNlaV9jbV9pZCA9PSBjbV9pZCkge1xcbiAxMDc6XFx0XFx0XFx0XFx0XFx0Y21faWQtXFx1MDAzZXJvdXRlLnBhdGhfcmVjWzBdLnNsID1cXG4gMTA4OlxcdFxcdFxcdFxcdFxcdFxcdFRPU19UT19TTChjb25uLVxcdTAwM2VjX3Rvcyk7XFxuIDEwOTpcXHRcXHRcXHRcXHRcXHRyZXQgPSB0cmFucy1cXHUwMDNlY21faW5pdGlhdGVfY29ubmVjdChjbV9pZCwgaXN2Nik7XFxuIDExMDpcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbiAxMTE6XFx0XFx0XFx0XFx0XFx0cmRzX2Nvbm5fZHJvcChjb25uKTtcXG4gMTEyOlxcdFxcdFxcdFxcdH1cXG4gMTEzOlxcdFxcdFxcdH1cXG4gMTE0OlxcdFxcdFxcdGJyZWFrO1xcbiAxMTU6XFx0XFxuIDExNjpcXHRcXHRjYXNlIFJETUFfQ01fRVZFTlRfRVNUQUJMSVNIRUQ6XFxuIDExNzpcXHRcXHRcXHRpZiAoY29ubilcXG4gMTE4OlxcdFxcdFxcdFxcdHRyYW5zLVxcdTAwM2VjbV9jb25uZWN0X2NvbXBsZXRlKGNvbm4sIGV2ZW50KTtcXG4gMTE5OlxcdFxcdFxcdGJyZWFrO1xcbiAxMjA6XFx0XFxuIDEyMTpcXHRcXHRjYXNlIFJETUFfQ01fRVZFTlRfUkVKRUNURUQ6XFxuIDEyMjpcXHRcXHRcXHRpZiAoIWNvbm4pXFxuIDEyMzpcXHRcXHRcXHRcXHRicmVhaztcXG4gMTI0OlxcdFxcdFxcdGVyciA9IChpbnQgKilyZG1hX2NvbnN1bWVyX3JlamVjdF9kYXRhKGNtX2lkLCBldmVudCwgXFx1MDAyNmxlbik7XFxuIDEyNTpcXHRcXHRcXHRpZiAoIWVyciB8fFxcbiAxMjY6XFx0XFx0XFx0ICAgIChlcnIgXFx1MDAyNlxcdTAwMjYgbGVuIFxcdTAwM2U9IHNpemVvZigqZXJyKSBcXHUwMDI2XFx1MDAyNlxcbiAxMjc6XFx0XFx0XFx0ICAgICAoKCplcnIpIFxcdTAwM2M9IFJEU19SRE1BX1JFSl9JTkNPTVBBVCkpKSB7XFxuIDEyODpcXHRcXHRcXHRcXHRwcl93YXJuKFxcXCJSRFMvUkRNQTogY29ubiBcXHUwMDNjJXBJNmMsICVwSTZjXFx1MDAzZSByZWplY3RlZCwgZHJvcHBpbmcgY29ubmVjdGlvblxcXFxuXFxcIixcXG4gMTI5OlxcdFxcdFxcdFxcdFxcdFxcdTAwMjZjb25uLVxcdTAwM2VjX2xhZGRyLCBcXHUwMDI2Y29ubi1cXHUwMDNlY19mYWRkcik7XFxuIDEzMDpcXHRcXG4gMTMxOlxcdFxcdFxcdFxcdGlmICghY29ubi1cXHUwMDNlY190b3MpXFxuIDEzMjpcXHRcXHRcXHRcXHRcXHRjb25uLVxcdTAwM2VjX3Byb3Bvc2VkX3ZlcnNpb24gPSBSRFNfUFJPVE9DT0xfQ09NUEFUX1ZFUlNJT047XFxuIDEzMzpcXHRcXG4gMTM0OlxcdFxcdFxcdFxcdHJkc19jb25uX2Ryb3AoY29ubik7XFxuIDEzNTpcXHRcXHRcXHR9XFxuIDEzNjpcXHRcXHRcXHRyZHNkZWJ1ZyhcXFwiQ29ubmVjdGlvbiByZWplY3RlZDogJXNcXFxcblxcXCIsXFxuIDEzNzpcXHRcXHRcXHRcXHQgcmRtYV9yZWplY3RfbXNnKGNtX2lkLCBldmVudC1cXHUwMDNlc3RhdHVzKSk7XFxuIDEzODpcXHRcXHRcXHRicmVhaztcXG4gMTM5OlxcdFxcdGNhc2UgUkRNQV9DTV9FVkVOVF9BRERSX0VSUk9SOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNDo1NDowMi4yMDQ1NTAyNzdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTU3MjU5ODkyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXQ6IFJEUyBvdmVyIFJETUEgQ29ubmVjdGlvbiBIYW5kbGluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYSBjaGFuZ2UgcmVsYXRlZCB0byBob3cgUkRTIChSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzKSBjb25uZWN0aW9ucyBhcmUgaGFuZGxlZCB3aGVuIHVzaW5nIFJETUEgKFJlbW90ZSBEaXJlY3QgTWVtb3J5IEFjY2VzcyksIHNwZWNpZmljYWxseSBSRFNfUkRNQSwgd2hpY2ggcmVsaWVzIG9uIHRoZSBSRE1BIENvbm5lY3Rpb24gTWFuYWdlciAoQ00pLiBUaGUgY29yZSBpc3N1ZSBzZWVtcyB0byBiZSBpbiB0aGUgYHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlYCBmdW5jdGlvbiwgd2hpY2ggZ2V0cyB0cmlnZ2VyZWQgd2hlbiBhbiBSRE1BIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBldmVudCBoYXBwZW5zLCBzcGVjaWZpY2FsbHkgYFJETUFfQ01fRVZFTlRfRVNUQUJMSVNIRURgLlxuXG5QcmV2aW91c2x5LCBpZiB0aGUgY29ubmVjdGlvbidzIHZlcnNpb24gd2Fzbid0IGNvbXBhdGlibGUgKGVpdGhlciB0b28gb2xkIG9yIGEgc3BlY2lmaWMgY29tcGF0aWJpbGl0eSB2ZXJzaW9uKSwgdGhlIGNvZGUgd291bGQganVzdCBjYWxsIGByZHNfY29ubl9kZXN0cm95YC4gQnV0IG5vdywgaXQncyBjYWxsaW5nIGByZHNfY29ubl9kcm9wYCBpbnN0ZWFkLiBUaGUga2V5IGRpZmZlcmVuY2UgaGVyZSBpcyB0aGUgdGltaW5nLiBgcmRzX2Nvbm5fZGVzdHJveWAgd2FzIGJlaW5nIGNhbGxlZCBkaXJlY3RseSB3aXRoaW4gYW4gZXZlbnQgaGFuZGxlciBvciBjb21wbGV0aW9uIGNhbGxiYWNrLCB3aGljaCBpcyBhIGJpZyByZWQgZmxhZyBmb3IgcG90ZW50aWFsIHByb2JsZW1zLiBJdCBjb3VsZCBoYXZlIGxlZCB0byB0aGluZ3MgbGlrZSBVc2UtQWZ0ZXItRnJlZSAoVUFGKSB2dWxuZXJhYmlsaXRpZXMsIGRlYWRsb2Nrcywgb3IgYXNzZXJ0aW9uIGZhaWx1cmVzLCBiZWNhdXNlIHlvdSdyZSB0ZWFyaW5nIGRvd24gYSBjb25uZWN0aW9uIGRpcmVjdGx5IGZyb20gYW4gZXZlbnQgaGFuZGxlciBjb250ZXh0LiBgcmRzX2Nvbm5fZHJvcGAsIG9uIHRoZSBvdGhlciBoYW5kLCBpbml0aWF0ZXMgYW4gKmFzeW5jaHJvbm91cyogdGVhcmRvd24sIHdoaWNoIGlzIHRoZSBzYWZlciBhcHByb2FjaC5cblxuVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIG5vdyBpcywgY2FuIEkgcmVhY2ggdGhpcyBjb2RlIGluIFFFTVU/IEFuZCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyB5ZXMhIFJEUyBzb2NrZXRzIChBRl9SRFMpIHdpdGggdGhlIFJEU19SRE1BIHBhdGgsIHBhcnRpY3VsYXJseSB1c2luZyBzb2Z0d2FyZSBSRE1BIGxpa2UgYHJkbWFfcnhlYCBvciBgc2l3YCwgYXJlIGFic29sdXRlbHkgZnV6emFibGUgbmV0d29yayBwcm90b2NvbHMgd2l0aGluIFFFTVUuIFN5emthbGxlciBzdXBwb3J0cyB0aGlzLiBUaGlzIHRvdWNoZXMgdGhlIGNvcmUgbmV0d29ya2luZyBhbmQgUkRTIHByb3RvY29sIGxvZ2ljLCBzbyBpdCdzIGludGVyZXN0aW5nLlxuXG5TbywgbGV0J3MgY2hlY2sgdGhlIGNyaXRlcmlhOlxuXG4qICAgKipSZWFjaGFiaWxpdHk6KiogV2UncmUgZGVhbGluZyB3aXRoIFJEUyBvdmVyIEluZmluaUJhbmQgdXNpbmcgc29mdHdhcmUgUkRNQSBkZXZpY2VzLiBUaGlzIG1lYW5zIGBzb2NrZXQoQUZfUkRTLCAuLi4pYCBvciB1c2luZyB0aGUgUkRNQSBDTSwgd2hpY2ggKmlzKiBhY2Nlc3NpYmxlIGFuZCBmdXp6YWJsZSBpbiB0aGUgUUVNVSBlbnZpcm9ubWVudC4gQ2hlY2suXG4qICAgKipNb2RpZmljYXRpb246KiogVGhlIGNoYW5nZSBpcyByaWdodCB0aGVyZSBpbiBgbmV0L3Jkcy9pYl9jbS5jYDogd2UndmUgc3dpdGNoZWQgZXJyb3IgaGFuZGxpbmcgYW5kIHN0YXRlIHRyYW5zaXRpb24gZnJvbSBgcmRzX2Nvbm5fZGVzdHJveWAgdG8gYHJkc19jb25uX2Ryb3BgIGluIGByZHNfaWJfY21fY29ubmVjdF9jb21wbGV0ZWAuIENoZWNrLlxuKiAgICoqSXMgV29ydGggRnV6emluZzoqKiBBYnNvbHV0ZWx5LiBXZSdyZSB0b3VjaGluZyBjb3JlIG5ldHdvcmsgY29kZSwgc3BlY2lmaWNhbGx5IGluIFJEUywgdGhhdCBoYXMgY3JpdGljYWwgZXJyb3ItaGFuZGxpbmcgbG9naWMuIENoZWNrLlxuXG5GaW5hbGx5LCBsZXQncyBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgcmlnaHQgY29uZmlndXJhdGlvbi4gV2UnbGwgbmVlZDpcblxuKiAgIFJEU1xuKiAgIFJEU19SRE1BXG4qICAgSU5GSU5JQkFORFxuKiAgIElORklOSUJBTkRfQUREUl9UUkFOU1xuXG5MZXQncyBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgYG5ldC9yZHMvS2NvbmZpZ2AgYW5kIGBkcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZ2AgZmlsZXMgdG8gdmVyaWZ5IHRoZXJlIGFyZSBubyBoaWRkZW4gZGVwZW5kZW5jaWVzLiBUaW1lIHRvIG1ha2Ugc3VyZSB0aG9zZSBrZXJuZWwgY29uZmlncyBhcmUgc2V0IGFuZCBzdGFydCBmdXp6aW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDI0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6NTQ6MDcuNzc3MTUyMjI1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTg3NzYzOTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElORklOSUJBTkRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjI6bWVudWNvbmZpZyBJTkZJTklCQU5EXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiSW5maW5pQmFuZCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc9MTY9aWYgSU5GSU5JQkFORFxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTE3LVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjE4OmNvbmZpZyBJTkZJTklCQU5EX1VTRVJfTUFEXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMTktXFx0dHJpc3RhdGUgXFxcIkluZmluaUJhbmQgdXNlcnNwYWNlIE1BRCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMjctXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6Mjg6Y29uZmlnIElORklOSUJBTkRfVVNFUl9BQ0NFU1NcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy0yOS1cXHR0cmlzdGF0ZSBcXFwiSW5maW5pQmFuZCB1c2Vyc3BhY2UgYWNjZXNzICh2ZXJicyBhbmQgQ00pXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMzktXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NDA6Y29uZmlnIElORklOSUJBTkRfVVNFUl9BQ0NFU1NfQ09SRVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTQxLVxcdGJvb2xcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTQzLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjQ0OmNvbmZpZyBJTkZJTklCQU5EX1VTRVJfTUVNXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDUtXFx0Ym9vbFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNTAtXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NTE6Y29uZmlnIElORklOSUJBTkRfT05fREVNQU5EX1BBR0lOR1xcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTUyLVxcdGJvb2wgXFxcIkluZmluaUJhbmQgb24tZGVtYW5kIHBhZ2luZyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNjMtXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NjQ6Y29uZmlnIElORklOSUJBTkRfQUREUl9UUkFOU1xcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTY1LVxcdGJvb2wgXFxcIlJETUEvQ01cXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy03MS1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo3Mjpjb25maWcgSU5GSU5JQkFORF9BRERSX1RSQU5TX0NPTkZJR0ZTXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNzMtXFx0Ym9vbFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctODAtXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6ODE6Y29uZmlnIElORklOSUJBTkRfVklSVF9ETUFcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy04Mi1cXHRkZWZfYm9vbCAhSElHSE1FTVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JuZ19yZS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JuZ19yZS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfQk5HX1JFXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JuZ19yZS9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkJyb2FkY29tIE5leHQgZ2VuZXJhdGlvbiBSb0NFIEhDQSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9CTlhUX1JFXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJCcm9hZGNvbSBOZXR4dHJlbWUgSENBIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfQ1hHQjRcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJDaGVsc2lvIFQ0L1Q1IFJETUEgRHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9LY29uZmlnLTYtXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9LY29uZmlnOjc6Y29uZmlnIElORklOSUJBTkRfRUZBXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9LY29uZmlnLTgtXFx0dHJpc3RhdGUgXFxcIkFtYXpvbiBFbGFzdGljIEZhYnJpYyBBZGFwdGVyIChFRkEpIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfRVJETUFcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJBbGliYWJhIEVsYXN0aWMgUkRNQSBBZGFwdGVyIChFUkRNQSkgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfSEZJMVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiQ29ybmVsaXMgT1BYIEdlbjEgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX0hOU19ISVAwOFxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJIaXNpbGljb24gSGlwMDggRmFtaWx5IFJvQ0Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9LY29uZmlnLTMtXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL0tjb25maWc6NDpjb25maWcgSU5GSU5JQkFORF9JT05JQ1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9LY29uZmlnLTUtXFx0dHJpc3RhdGUgXFxcIkFNRCBQZW5zYW5kbyBEU0MgUkRNQS9Sb0NFIFN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfSVJETUFcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJJbnRlbChSKSBFdGhlcm5ldCBQcm90b2NvbCBEcml2ZXIgZm9yIFJETUFcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfTVRIQ0FcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJNZWxsYW5veCBIQ0Egc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9LY29uZmlnLTktXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL0tjb25maWc6MTA6Y29uZmlnIElORklOSUJBTkRfTVRIQ0FfREVCVUdcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZy0xMS1cXHRib29sIFxcXCJWZXJib3NlIGRlYnVnZ2luZyBvdXRwdXRcXFwiIGlmIEVYUEVSVFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfT0NSRE1BXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkVtdWxleCBPbmUgQ29ubmVjdCBIQ0Egc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9xZWRyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvcWVkci9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfUUVEUlxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9xZWRyL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiUUxvZ2ljIFJvQ0UgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3VzbmljL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvdXNuaWMvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX1VTTklDXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3VzbmljL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiVmVyYnMgc3VwcG9ydCBmb3IgQ2lzY28gVklDXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3Ztd19wdnJkbWEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody92bXdfcHZyZG1hL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9WTVdBUkVfUFZSRE1BXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3Ztd19wdnJkbWEvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJWTXdhcmUgUGFyYXZpcnR1YWxpemVkIFJETUEgRHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3JkbWF2dC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3JkbWF2dC9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfUkRNQVZUXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3JkbWF2dC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlJETUEgdmVyYnMgdHJhbnNwb3J0IGxpYnJhcnlcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9JUE9JQlxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJJUC1vdmVyLUluZmluaUJhbmRcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWctMTEtXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnOjEyOmNvbmZpZyBJTkZJTklCQU5EX0lQT0lCX0NNXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnLTEzLVxcdGJvb2wgXFxcIklQLW92ZXItSW5maW5pQmFuZCBDb25uZWN0ZWQgTW9kZSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnLTI2LVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZzoyNzpjb25maWcgSU5GSU5JQkFORF9JUE9JQl9ERUJVR1xcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJJUC1vdmVyLUluZmluaUJhbmQgZGVidWdnaW5nXFxcIiBpZiBFWFBFUlRcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy00MS1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWc6NDI6Y29uZmlnIElORklOSUJBTkRfSVBPSUJfREVCVUdfREFUQVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy00My1cXHRib29sIFxcXCJJUC1vdmVyLUluZmluaUJhbmQgZGF0YSBwYXRoIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9JU0VSXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiaVNDU0kgRXh0ZW5zaW9ucyBmb3IgUkRNQSAoaVNFUilcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXJ0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXJ0L0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9JU0VSVFxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlcnQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJpU0NTSSBFeHRlbnNpb25zIGZvciBSRE1BIChpU0VSKSB0YXJnZXQgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnLTItXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWc6Mzpjb25maWcgSU5GSU5JQkFORF9SVFJTXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctNC1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctNi1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3J0cnMvS2NvbmZpZzo3OmNvbmZpZyBJTkZJTklCQU5EX1JUUlNfQ0xJRU5UXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctOC1cXHR0cmlzdGF0ZSBcXFwiUlRSUyBjbGllbnQgbW9kdWxlXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctMTctXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWc6MTg6Y29uZmlnIElORklOSUJBTkRfUlRSU19TRVJWRVJcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3J0cnMvS2NvbmZpZy0xOS1cXHR0cmlzdGF0ZSBcXFwiUlRSUyBzZXJ2ZXIgbW9kdWxlXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9TUlBcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkluZmluaUJhbmQgU0NTSSBSRE1BIFByb3RvY29sXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnB0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycHQvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX1NSUFRcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycHQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJJbmZpbmlCYW5kIFNDU0kgUkRNQSBQcm90b2NvbCB0YXJnZXQgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6NTQ6MDcuOTM1OTM1MDI5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMjAyMDM4OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIFJETUEgUlhFIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBSRE1BX1JYRWAgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIEluZmluaWJhbmQgc3RhY2suIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGUgbW9zdCBsaWtlbHkgc3BvdCB0byBmaW5kIHRoZSByZWxldmFudCBLY29uZmlnIGlzIGluIGBkcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL2AuIExldCdzIG5hdmlnYXRlIHRoZXJlIGFuZCBleGFtaW5lIHRoZSBgS2NvbmZpZ2AgZmlsZS4gSSdtIGV4cGVjdGluZyB0byBzZWUgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgYW5kIG1heWJlIHNvbWUgZGVzY3JpcHRpb25zIHRoYXQgc2hlZCBsaWdodCBvbiBob3cgdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsIGRpc2FibGVkLCBhbmQgcGVyaGFwcyBjb25maWd1cmVkIGZ1cnRoZXIuIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYXMgdG8gaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBkcml2ZXIsIGFuZCBwb3RlbnRpYWwgaW1wYWN0cyBvbiBwZXJmb3JtYW5jZSBvciBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gZGVjaXNpb25zIGFyZSB1c3VhbGx5IG1hZGUsIHNvIHRoaXMgS2NvbmZpZyBpcyBhIGNydWNpYWwgZmlyc3Qgc3RvcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxNTgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNDo1NDoxMC4wNTYxNDE0NTZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTEwMzkxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUkRNQV9SWEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL0tjb25maWc6Mjpjb25maWcgUkRNQV9SWEVcXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiU29mdHdhcmUgUkRNQSBvdmVyIEV0aGVybmV0IChSb0NFKSBkcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE0OjU0OjEwLjIwMTI1MTI3MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzU1NTUzMzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy5cblxuKipGb2N1c2luZyBvbiB0aGUgQ29ubmVjdGlvbiBNYW5hZ2VtZW50IGluIFJEUy9JQioqXG5cblJpZ2h0LCBzbyBJJ20gaG9uaW5nIGluIG9uIGNvbm5lY3Rpb24gY29tcGxldGlvbiB3aXRoaW4gdGhlIFJEUyBvdmVyIEluZmluaUJhbmQgKElCKSByZWFsbS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIHRoZSBgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGVgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBuZXQvcmRzL2liX2NtLmNgLiBUaGF0J3Mgd2hlcmUgdGhlIGFjdGlvbiBpcywgYmFzZWQgb24gdGhlIGNvbnRleHQuXG5cbk5vdywgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBiaWdnZXIgcGljdHVyZSBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucywgSSBuZWVkIHRvIHNlZSB3aGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgaGFuZ2luZyBvdXQgaW4gdGhhdCBzYW1lIGBpYl9jbS5jYCBmaWxlLiBVbmRlcnN0YW5kaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBncmFzcCBvZiBob3cgYHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlYCBmaXRzIGludG8gdGhlIG92ZXJhbGwgY29ubmVjdGlvbiBtYW5hZ2VtZW50IHdvcmtmbG93LiBXaGF0IG90aGVyIHBpZWNlcyBhcmUgaW52b2x2ZWQgaW4gc2V0dGluZyB1cCwgdGVhcmluZyBkb3duLCBhbmQgZ2VuZXJhbGx5IHNoZXBoZXJkaW5nIHRoZXNlIElCIGNvbm5lY3Rpb25zPyBMZXQncyB0YWtlIGEgbG9vay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0OTksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNDo1NDoxMi45NTY4MDgyMDZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NzQ5NTMzNCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfXS4qXFxcXCgkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yZHMvaWJfY20uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6NTQ6MTMuMzA0MzE1MDlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjExNDk4ODQ5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgSUIgQ29ubmVjdGlvbiBNYW5hZ2VyIENvZGUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSB3aXRoIHRoZSBSRE1BIGNvbm5lY3Rpb24gbWFuYWdlciBjb2RlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYG5ldC9yZHMvaWJfY20uY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgSW5maW5pQmFuZCBjb25uZWN0aW9uIG1hbmFnZXIgYmVoYXZlcyB3aXRoaW4gdGhlIFJEUyBzdGFjay4gVGhlIGJlc3QgYXBwcm9hY2ggaGVyZSBpcyBnb2luZyB0byBiZSBhIGNvbWJpbmF0aW9uIG9mIHRhcmdldGVkIHJlYWRpbmcgYW5kIHNvbWUgcXVpY2sgZ3JlcHBpbmcuIEknbGwgc3RhcnQgYnkgYnJvd3NpbmcgdGhlIGNvZGUsIGdldHRpbmcgYSBmZWVsIGZvciB0aGUgbWFqb3IgZnVuY3Rpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQuIFRoZW4sIEknbGwgdXNlIGBncmVwYCB0byBxdWlja2x5IGZpbmQgY3Jvc3MtcmVmZXJlbmNlcywgc2VlIHdoZXJlIGtleSBmdW5jdGlvbnMgYXJlIGNhbGxlZCwgYW5kIGZvbGxvdyB0aGUgY29udHJvbCBmbG93LiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb2YgdGhlIGludGVyYWN0aW9uIHBvaW50cy4gRnJvbSB0aGVyZSwgSSBjYW4gZHJpbGwgZG93biBmdXJ0aGVyIGFzIG5lZWRlZCwgYnV0IHRoaXMgaW5pdGlhbCByZWNvbm5haXNzYW5jZSB3aWxsIGdpdmUgbWUgYSBnb29kIGxheSBvZiB0aGUgbGFuZCBhbmQgcG9pbnQgb3V0IHRoZSBhcmVhcyB0aGF0IG5lZWQgdGhlIG1vc3QgYXR0ZW50aW9uLiBMZXQncyBzZWUgd2hhdCBpbnRlcmVzdGluZyB0aWRiaXRzIHdlIGNhbiBkaWcgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzk2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6NTQ6MTUuNDE5MzA2NjY3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTg5ODg2MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXFxcXGJyZHNfaWJfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yZHMvaWJfY20uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcmRzL2liX2NtLmMtNDgtICovXFxubmV0L3Jkcy9pYl9jbS5jOjQ5OnN0YXRpYyB2b2lkIHJkc19pYl9zZXRfcHJvdG9jb2woc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCB1bnNpZ25lZCBpbnQgdmVyc2lvbilcXG5uZXQvcmRzL2liX2NtLmMtNTAte1xcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTU2LSAqL1xcbm5ldC9yZHMvaWJfY20uYzo1NzpzdGF0aWMgdm9pZCByZHNfaWJfc2V0X2Zsb3dfY29udHJvbChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHUzMiBjcmVkaXRzKVxcbm5ldC9yZHMvaWJfY20uYy01OC17XFxubmV0L3Jkcy9pYl9jbS5jOjU5OlxcdHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLVxcdTAwM2VjX3RyYW5zcG9ydF9kYXRhO1xcbm5ldC9yZHMvaWJfY20uYy02MC1cXG5uZXQvcmRzL2liX2NtLmM6NjE6XFx0aWYgKHJkc19pYl9zeXNjdGxfZmxvd19jb250cm9sIFxcdTAwMjZcXHUwMDI2IGNyZWRpdHMgIT0gMCkge1xcbm5ldC9yZHMvaWJfY20uYy02Mi1cXHRcXHQvKiBXZSdyZSBkb2luZyBmbG93IGNvbnRyb2wgKi9cXG5uZXQvcmRzL2liX2NtLmMtNjMtXFx0XFx0aWMtXFx1MDAzZWlfZmxvd2N0bCA9IDE7XFxubmV0L3Jkcy9pYl9jbS5jOjY0OlxcdFxcdHJkc19pYl9zZW5kX2FkZF9jcmVkaXRzKGNvbm4sIGNyZWRpdHMpO1xcbm5ldC9yZHMvaWJfY20uYy02NS1cXHR9IGVsc2Uge1xcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTczLSAqL1xcbm5ldC9yZHMvaWJfY20uYzo3NDp2b2lkIHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHJkbWFfY21fZXZlbnQgKmV2ZW50KVxcbm5ldC9yZHMvaWJfY20uYy03NS17XFxubmV0L3Jkcy9pYl9jbS5jOjc2OlxcdHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLVxcdTAwM2VjX3RyYW5zcG9ydF9kYXRhO1xcbm5ldC9yZHMvaWJfY20uYzo3NzpcXHRjb25zdCB1bmlvbiByZHNfaWJfY29ubl9wcml2ICpkcCA9IE5VTEw7XFxubmV0L3Jkcy9pYl9jbS5jLTc4LVxcdF9fYmU2NCBhY2tfc2VxID0gMDtcXG4tLVxcbm5ldC9yZHMvaWJfY20uYy05OC1cXHR9IGVsc2UgaWYgKGV2ZW50LVxcdTAwM2VwYXJhbS5jb25uLnByaXZhdGVfZGF0YV9sZW4gXFx1MDAzZT1cXG5uZXQvcmRzL2liX2NtLmM6OTk6XFx0XFx0ICAgc2l6ZW9mKHN0cnVjdCByZHNfaWJfY29ubmVjdF9wcml2YXRlKSkge1xcbm5ldC9yZHMvaWJfY20uYy0xMDAtXFx0XFx0bWFqb3IgPSBkcC1cXHUwMDNlcmljcF92NC5kcF9wcm90b2NvbF9tYWpvcjtcXG4tLVxcbm5ldC9yZHMvaWJfY20uYy0xMDctXFx0aWYgKG1ham9yKSB7XFxubmV0L3Jkcy9pYl9jbS5jOjEwODpcXHRcXHRyZHNfaWJfc2V0X3Byb3RvY29sKGNvbm4sIFJEU19QUk9UT0NPTChtYWpvciwgbWlub3IpKTtcXG5uZXQvcmRzL2liX2NtLmM6MTA5OlxcdFxcdHJkc19pYl9zZXRfZmxvd19jb250cm9sKGNvbm4sIGJlMzJfdG9fY3B1KGNyZWRpdCkpO1xcbm5ldC9yZHMvaWJfY20uYy0xMTAtXFx0fVxcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTEzOC1cXHQgKi9cXG5uZXQvcmRzL2liX2NtLmM6MTM5OlxcdHJkc19pYl9zZW5kX2luaXRfcmluZyhpYyk7XFxubmV0L3Jkcy9pYl9jbS5jOjE0MDpcXHRyZHNfaWJfcmVjdl9pbml0X3JpbmcoaWMpO1xcbm5ldC9yZHMvaWJfY20uYy0xNDEtXFx0LyogUG9zdCByZWNlaXZlIGJ1ZmZlcnMgLSBhcyBhIHNpZGUgZWZmZWN0LCB0aGlzIHdpbGwgdXBkYXRlXFxubmV0L3Jkcy9pYl9jbS5jLTE0Mi1cXHQgKiB0aGUgcG9zdGVkIGNyZWRpdCBjb3VudC4gKi9cXG5uZXQvcmRzL2liX2NtLmM6MTQzOlxcdHJkc19pYl9yZWN2X3JlZmlsbChjb25uLCAxLCBHRlBfS0VSTkVMKTtcXG5uZXQvcmRzL2liX2NtLmMtMTQ0LVxcbm5ldC9yZHMvaWJfY20uYy0xNDUtXFx0LyogdXBkYXRlIGliX2RldmljZSB3aXRoIHRoaXMgbG9jYWwgaXBhZGRyICovXFxubmV0L3Jkcy9pYl9jbS5jOjE0NjpcXHRlcnIgPSByZHNfaWJfdXBkYXRlX2lwYWRkcihpYy1cXHUwMDNlcmRzX2liZGV2LCBcXHUwMDI2Y29ubi1cXHUwMDNlY19sYWRkcik7XFxubmV0L3Jkcy9pYl9jbS5jLTE0Ny1cXHRpZiAoZXJyKVxcbm5ldC9yZHMvaWJfY20uYzoxNDg6XFx0XFx0cHJpbnRrKEtFUk5fRVJSIFxcXCJyZHNfaWJfdXBkYXRlX2lwYWRkciBmYWlsZWQgKCVkKVxcXFxuXFxcIixcXG5uZXQvcmRzL2liX2NtLmMtMTQ5LVxcdFxcdFxcdGVycik7XFxuLS1cXG5uZXQvcmRzL2liX2NtLmMtMTYyLVxcbm5ldC9yZHMvaWJfY20uYzoxNjM6c3RhdGljIHZvaWQgcmRzX2liX2NtX2ZpbGxfY29ubl9wYXJhbShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sXFxubmV0L3Jkcy9pYl9jbS5jLTE2NC1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgcmRtYV9jb25uX3BhcmFtICpjb25uX3BhcmFtLFxcbm5ldC9yZHMvaWJfY20uYzoxNjU6XFx0XFx0XFx0XFx0ICAgICAgdW5pb24gcmRzX2liX2Nvbm5fcHJpdiAqZHAsXFxubmV0L3Jkcy9pYl9jbS5jLTE2Ni1cXHRcXHRcXHRcXHQgICAgICB1MzIgcHJvdG9jb2xfdmVyc2lvbixcXG4tLVxcbm5ldC9yZHMvaWJfY20uYy0xNzAte1xcbm5ldC9yZHMvaWJfY20uYzoxNzE6XFx0c3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tXFx1MDAzZWNfdHJhbnNwb3J0X2RhdGE7XFxubmV0L3Jkcy9pYl9jbS5jOjE3MjpcXHRzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2ID0gaWMtXFx1MDAzZXJkc19pYmRldjtcXG5uZXQvcmRzL2liX2NtLmMtMTczLVxcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTE3OS1cXHRcXHRtaW5fdCh1MzIsIHJkc19pYmRldi1cXHUwMDNlbWF4X2luaXRpYXRvcl9kZXB0aCwgbWF4X2luaXRpYXRvcl9kZXB0aCk7XFxubmV0L3Jkcy9pYl9jbS5jOjE4MDpcXHRjb25uX3BhcmFtLVxcdTAwM2VyZXRyeV9jb3VudCA9IG1pbl90KHVuc2lnbmVkIGludCwgcmRzX2liX3JldHJ5X2NvdW50LCA3KTtcXG5uZXQvcmRzL2liX2NtLmMtMTgxLVxcdGNvbm5fcGFyYW0tXFx1MDAzZXJucl9yZXRyeV9jb3VudCA9IDc7XFxuLS1cXG5uZXQvcmRzL2liX2NtLmMtMTk0LVxcdFxcdFxcdGRwLVxcdTAwM2VyaWNwX3Y2LmRwX2Fja19zZXEgPVxcbm5ldC9yZHMvaWJfY20uYzoxOTU6XFx0XFx0XFx0ICAgIGNwdV90b19iZTY0KHJkc19pYl9waWdneWJfYWNrKGljKSk7XFxubmV0L3Jkcy9pYl9jbS5jLTE5Ni1cXHRcXHRcXHRkcC1cXHUwMDNlcmljcF92Ni5kcF9jbW4ucmljcGNfZHBfdG9zcyA9IGNvbm4tXFx1MDAzZWNfdG9zO1xcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTIwOS1cXHRcXHRcXHRkcC1cXHUwMDNlcmljcF92NC5kcF9hY2tfc2VxID1cXG5uZXQvcmRzL2liX2NtLmM6MjEwOlxcdFxcdFxcdCAgICBjcHVfdG9fYmU2NChyZHNfaWJfcGlnZ3liX2FjayhpYykpO1xcbm5ldC9yZHMvaWJfY20uYy0yMTEtXFx0XFx0XFx0ZHAtXFx1MDAzZXJpY3BfdjQuZHBfY21uLnJpY3BjX2RwX3Rvc3MgPSBjb25uLVxcdTAwM2VjX3RvcztcXG4tLVxcbm5ldC9yZHMvaWJfY20uYy0yMzItXFxubmV0L3Jkcy9pYl9jbS5jOjIzMzpzdGF0aWMgdm9pZCByZHNfaWJfY3FfZXZlbnRfaGFuZGxlcihzdHJ1Y3QgaWJfZXZlbnQgKmV2ZW50LCB2b2lkICpkYXRhKVxcbm5ldC9yZHMvaWJfY20uYy0yMzQte1xcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTI0Ni0gKi9cXG5uZXQvcmRzL2liX2NtLmM6MjQ3OnN0YXRpYyB2b2lkIHJkc19pYl9jcV9jb21wX2hhbmRsZXJfcmVjdihzdHJ1Y3QgaWJfY3EgKmNxLCB2b2lkICpjb250ZXh0KVxcbm5ldC9yZHMvaWJfY20uYy0yNDgte1xcbm5ldC9yZHMvaWJfY20uYy0yNDktXFx0c3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gY29udGV4dDtcXG5uZXQvcmRzL2liX2NtLmM6MjUwOlxcdHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLVxcdTAwM2VjX3RyYW5zcG9ydF9kYXRhO1xcbm5ldC9yZHMvaWJfY20uYy0yNTEtXFxuLS1cXG5uZXQvcmRzL2liX2NtLmMtMjUzLVxcbm5ldC9yZHMvaWJfY20uYzoyNTQ6XFx0cmRzX2liX3N0YXRzX2luYyhzX2liX2V2dF9oYW5kbGVyX2NhbGwpO1xcbm5ldC9yZHMvaWJfY20uYy0yNTUtXFxuLS1cXG5uZXQvcmRzL2liX2NtLmMtMjU4LVxcbm5ldC9yZHMvaWJfY20uYzoyNTk6c3RhdGljIHZvaWQgcG9sbF9zY3Eoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywgc3RydWN0IGliX2NxICpjcSxcXG5uZXQvcmRzL2liX2NtLmMtMjYwLVxcdFxcdCAgICAgc3RydWN0IGliX3djICp3Y3MpXFxuLS1cXG5uZXQvcmRzL2liX2NtLmMtMjczLVxcdFxcdFxcdCAgICB3Yy1cXHUwMDNld3JfaWQgPT0gUkRTX0lCX0FDS19XUl9JRClcXG5uZXQvcmRzL2liX2NtLmM6Mjc0OlxcdFxcdFxcdFxcdHJkc19pYl9zZW5kX2NxZV9oYW5kbGVyKGljLCB3Yyk7XFxubmV0L3Jkcy9pYl9jbS5jLTI3NS1cXHRcXHRcXHRlbHNlXFxubmV0L3Jkcy9pYl9jbS5jOjI3NjpcXHRcXHRcXHRcXHRyZHNfaWJfbXJfY3FlX2hhbmRsZXIoaWMsIHdjKTtcXG5uZXQvcmRzL2liX2NtLmMtMjc3LVxcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTI4MS1cXG5uZXQvcmRzL2liX2NtLmM6MjgyOnN0YXRpYyB2b2lkIHJkc19pYl90YXNrbGV0X2ZuX3NlbmQodW5zaWduZWQgbG9uZyBkYXRhKVxcbm5ldC9yZHMvaWJfY20uYy0yODMte1xcbm5ldC9yZHMvaWJfY20uYzoyODQ6XFx0c3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IChzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKilkYXRhO1xcbm5ldC9yZHMvaWJfY20uYy0yODUtXFx0c3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gaWMtXFx1MDAzZWNvbm47XFxubmV0L3Jkcy9pYl9jbS5jLTI4Ni1cXG5uZXQvcmRzL2liX2NtLmM6Mjg3OlxcdHJkc19pYl9zdGF0c19pbmMoc19pYl90YXNrbGV0X2NhbGwpO1xcbm5ldC9yZHMvaWJfY20uYy0yODgtXFxuLS1cXG5uZXQvcmRzL2liX2NtLmMtMzAyLVxcbm5ldC9yZHMvaWJfY20uYzozMDM6c3RhdGljIHZvaWQgcG9sbF9yY3Eoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywgc3RydWN0IGliX2NxICpjcSxcXG5uZXQvcmRzL2liX2NtLmMtMzA0LVxcdFxcdCAgICAgc3RydWN0IGliX3djICp3Y3MsXFxubmV0L3Jkcy9pYl9jbS5jOjMwNTpcXHRcXHQgICAgIHN0cnVjdCByZHNfaWJfYWNrX3N0YXRlICphY2tfc3RhdGUpXFxubmV0L3Jkcy9pYl9jbS5jLTMwNi17XFxuLS1cXG5uZXQvcmRzL2liX2NtLmMtMzE2LVxcbm5ldC9yZHMvaWJfY20uYzozMTc6XFx0XFx0XFx0cmRzX2liX3JlY3ZfY3FlX2hhbmRsZXIoaWMsIHdjLCBhY2tfc3RhdGUpO1xcbm5ldC9yZHMvaWJfY20uYy0zMTgtXFx0XFx0fVxcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTMyMS1cXG5uZXQvcmRzL2liX2NtLmM6MzIyOnN0YXRpYyB2b2lkIHJkc19pYl90YXNrbGV0X2ZuX3JlY3YodW5zaWduZWQgbG9uZyBkYXRhKVxcbm5ldC9yZHMvaWJfY20uYy0zMjMte1xcbm5ldC9yZHMvaWJfY20uYzozMjQ6XFx0c3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IChzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKilkYXRhO1xcbm5ldC9yZHMvaWJfY20uYy0zMjUtXFx0c3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gaWMtXFx1MDAzZWNvbm47XFxubmV0L3Jkcy9pYl9jbS5jOjMyNjpcXHRzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2ID0gaWMtXFx1MDAzZXJkc19pYmRldjtcXG5uZXQvcmRzL2liX2NtLmM6MzI3OlxcdHN0cnVjdCByZHNfaWJfYWNrX3N0YXRlIHN0YXRlO1xcbm5ldC9yZHMvaWJfY20uYy0zMjgtXFxuLS1cXG5uZXQvcmRzL2liX2NtLmMtMzMxLVxcbm5ldC9yZHMvaWJfY20uYzozMzI6XFx0cmRzX2liX3N0YXRzX2luYyhzX2liX3Rhc2tsZXRfY2FsbCk7XFxubmV0L3Jkcy9pYl9jbS5jLTMzMy1cXG4tLVxcbm5ldC9yZHMvaWJfY20uYy0zNDMtXFx0aWYgKHN0YXRlLmFja19uZXh0X3ZhbGlkKVxcbm5ldC9yZHMvaWJfY20uYzozNDQ6XFx0XFx0cmRzX2liX3NldF9hY2soaWMsIHN0YXRlLmFja19uZXh0LCBzdGF0ZS5hY2tfcmVxdWlyZWQpO1xcbm5ldC9yZHMvaWJfY20uYy0zNDUtXFx0aWYgKHN0YXRlLmFja19yZWN2X3ZhbGlkIFxcdTAwMjZcXHUwMDI2IHN0YXRlLmFja19yZWN2IFxcdTAwM2UgaWMtXFx1MDAzZWlfYWNrX3JlY3YpIHtcXG4tLVxcbm5ldC9yZHMvaWJfY20uYy0zNTAtXFx0aWYgKHJkc19jb25uX3VwKGNvbm4pKVxcbm5ldC9yZHMvaWJfY20uYzozNTE6XFx0XFx0cmRzX2liX2F0dGVtcHRfYWNrKGljKTtcXG5uZXQvcmRzL2liX2NtLmMtMzUyLX1cXG5uZXQvcmRzL2liX2NtLmMtMzUzLVxcbm5ldC9yZHMvaWJfY20uYzozNTQ6c3RhdGljIHZvaWQgcmRzX2liX3FwX2V2ZW50X2hhbmRsZXIoc3RydWN0IGliX2V2ZW50ICpldmVudCwgdm9pZCAqZGF0YSlcXG5uZXQvcmRzL2liX2NtLmMtMzU1LXtcXG5uZXQvcmRzL2liX2NtLmMtMzU2LVxcdHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGRhdGE7XFxubmV0L3Jkcy9pYl9jbS5jOjM1NzpcXHRzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi1cXHUwMDNlY190cmFuc3BvcnRfZGF0YTtcXG5uZXQvcmRzL2liX2NtLmMtMzU4LVxcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTM3NC1cXG5uZXQvcmRzL2liX2NtLmM6Mzc1OnN0YXRpYyB2b2lkIHJkc19pYl9jcV9jb21wX2hhbmRsZXJfc2VuZChzdHJ1Y3QgaWJfY3EgKmNxLCB2b2lkICpjb250ZXh0KVxcbm5ldC9yZHMvaWJfY20uYy0zNzYte1xcbm5ldC9yZHMvaWJfY20uYy0zNzctXFx0c3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gY29udGV4dDtcXG5uZXQvcmRzL2liX2NtLmM6Mzc4OlxcdHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLVxcdTAwM2VjX3RyYW5zcG9ydF9kYXRhO1xcbm5ldC9yZHMvaWJfY20uYy0zNzktXFxuLS1cXG5uZXQvcmRzL2liX2NtLmMtMzgxLVxcbm5ldC9yZHMvaWJfY20uYzozODI6XFx0cmRzX2liX3N0YXRzX2luYyhzX2liX2V2dF9oYW5kbGVyX2NhbGwpO1xcbm5ldC9yZHMvaWJfY20uYy0zODMtXFxuLS1cXG5uZXQvcmRzL2liX2NtLmMtMzg2LVxcbm5ldC9yZHMvaWJfY20uYzozODc6c3RhdGljIGlubGluZSBpbnQgaWJkZXZfZ2V0X3VudXNlZF92ZWN0b3Ioc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldilcXG5uZXQvcmRzL2liX2NtLmMtMzg4LXtcXG4tLVxcbm5ldC9yZHMvaWJfY20uYy00MDMtXFxubmV0L3Jkcy9pYl9jbS5jOjQwNDpzdGF0aWMgaW5saW5lIHZvaWQgaWJkZXZfcHV0X3ZlY3RvcihzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2LCBpbnQgaW5kZXgpXFxubmV0L3Jkcy9pYl9jbS5jLTQwNS17XFxuLS1cXG5uZXQvcmRzL2liX2NtLmM9NDE2PXN0YXRpYyBzdHJ1Y3QgcmRzX2hlYWRlciAqcmRzX2RtYV9oZHJfYWxsb2Moc3RydWN0IGliX2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTQ0MS0gKi9cXG5uZXQvcmRzL2liX2NtLmM6NDQyOnN0YXRpYyB2b2lkIHJkc19kbWFfaGRyc19mcmVlKHN0cnVjdCByZHNfaWJfZGV2aWNlICpkZXYsXFxubmV0L3Jkcy9pYl9jbS5jLTQ0My1cXHRcXHRzdHJ1Y3QgcmRzX2hlYWRlciAqKmhkcnMsIGRtYV9hZGRyX3QgKmRtYV9hZGRycywgdTMyIG51bV9oZHJzLFxcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTQ2NS0gKi9cXG5uZXQvcmRzL2liX2NtLmM6NDY2OnN0YXRpYyBzdHJ1Y3QgcmRzX2hlYWRlciAqKnJkc19kbWFfaGRyc19hbGxvYyhzdHJ1Y3QgcmRzX2liX2RldmljZSAqZGV2LFxcbm5ldC9yZHMvaWJfY20uYy00NjctXFx0XFx0ZG1hX2FkZHJfdCAqKmRtYV9hZGRycywgdTMyIG51bV9oZHJzLFxcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTUwMS0gKi9cXG5uZXQvcmRzL2liX2NtLmM6NTAyOnN0YXRpYyBpbnQgcmRzX2liX3NldHVwX3FwKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubilcXG5uZXQvcmRzL2liX2NtLmMtNTAzLXtcXG5uZXQvcmRzL2liX2NtLmM6NTA0OlxcdHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLVxcdTAwM2VjX3RyYW5zcG9ydF9kYXRhO1xcbm5ldC9yZHMvaWJfY20uYy01MDUtXFx0c3RydWN0IGliX2RldmljZSAqZGV2ID0gaWMtXFx1MDAzZWlfY21faWQtXFx1MDAzZWRldmljZTtcXG4tLVxcbm5ldC9yZHMvaWJfY20uYy01MDctXFx0c3RydWN0IGliX2NxX2luaXRfYXR0ciBjcV9hdHRyID0ge307XFxubmV0L3Jkcy9pYl9jbS5jOjUwODpcXHRzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2O1xcbm5ldC9yZHMvaWJfY20uYy01MDktXFx0dW5zaWduZWQgbG9uZyBtYXhfd3JzO1xcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTUxNS1cXHQgKi9cXG5uZXQvcmRzL2liX2NtLmM6NTE2OlxcdHJkc19pYmRldiA9IHJkc19pYl9nZXRfY2xpZW50X2RhdGEoZGV2KTtcXG5uZXQvcmRzL2liX2NtLmMtNTE3LVxcdGlmICghcmRzX2liZGV2KVxcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTUyNi1cXHQvKiBhZGQgdGhlIGNvbm4gbm93IHNvIHRoYXQgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGhhcyB0aGUgZGV2ICovXFxubmV0L3Jkcy9pYl9jbS5jOjUyNzpcXHRyZHNfaWJfYWRkX2Nvbm4ocmRzX2liZGV2LCBjb25uKTtcXG5uZXQvcmRzL2liX2NtLmMtNTI4LVxcbm5ldC9yZHMvaWJfY20uYzo1Mjk6XFx0bWF4X3dycyA9IHJkc19pYmRldi1cXHUwMDNlbWF4X3dycyBcXHUwMDNjIHJkc19pYl9zeXNjdGxfbWF4X3NlbmRfd3IgKyAxID9cXG5uZXQvcmRzL2liX2NtLmM6NTMwOlxcdFxcdHJkc19pYmRldi1cXHUwMDNlbWF4X3dycyAtIDEgOiByZHNfaWJfc3lzY3RsX21heF9zZW5kX3dyO1xcbm5ldC9yZHMvaWJfY20uYy01MzEtXFx0aWYgKGljLVxcdTAwM2VpX3NlbmRfcmluZy53X25yICE9IG1heF93cnMpXFxubmV0L3Jkcy9pYl9jbS5jOjUzMjpcXHRcXHRyZHNfaWJfcmluZ19yZXNpemUoXFx1MDAyNmljLVxcdTAwM2VpX3NlbmRfcmluZywgbWF4X3dycyk7XFxubmV0L3Jkcy9pYl9jbS5jLTUzMy1cXG5uZXQvcmRzL2liX2NtLmM6NTM0OlxcdG1heF93cnMgPSByZHNfaWJkZXYtXFx1MDAzZW1heF93cnMgXFx1MDAzYyByZHNfaWJfc3lzY3RsX21heF9yZWN2X3dyICsgMSA/XFxubmV0L3Jkcy9pYl9jbS5jOjUzNTpcXHRcXHRyZHNfaWJkZXYtXFx1MDAzZW1heF93cnMgLSAxIDogcmRzX2liX3N5c2N0bF9tYXhfcmVjdl93cjtcXG5uZXQvcmRzL2liX2NtLmMtNTM2LVxcdGlmIChpYy1cXHUwMDNlaV9yZWN2X3Jpbmcud19uciAhPSBtYXhfd3JzKVxcbm5ldC9yZHMvaWJfY20uYzo1Mzc6XFx0XFx0cmRzX2liX3JpbmdfcmVzaXplKFxcdTAwMjZpYy1cXHUwMDNlaV9yZWN2X3JpbmcsIG1heF93cnMpO1xcbm5ldC9yZHMvaWJfY20uYy01MzgtXFxuLS1cXG5uZXQvcmRzL2liX2NtLmMtNTQ0LVxcdGNxX2F0dHIuY29tcF92ZWN0b3IgPSBpYy1cXHUwMDNlaV9zY3FfdmVjdG9yO1xcbm5ldC9yZHMvaWJfY20uYzo1NDU6XFx0aWMtXFx1MDAzZWlfc2VuZF9jcSA9IGliX2NyZWF0ZV9jcShkZXYsIHJkc19pYl9jcV9jb21wX2hhbmRsZXJfc2VuZCxcXG5uZXQvcmRzL2liX2NtLmM6NTQ2OlxcdFxcdFxcdFxcdCAgICAgcmRzX2liX2NxX2V2ZW50X2hhbmRsZXIsIGNvbm4sXFxubmV0L3Jkcy9pYl9jbS5jLTU0Ny1cXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZjcV9hdHRyKTtcXG4tLVxcbm5ldC9yZHMvaWJfY20uYy01NTgtXFx0Y3FfYXR0ci5jb21wX3ZlY3RvciA9IGljLVxcdTAwM2VpX3JjcV92ZWN0b3I7XFxubmV0L3Jkcy9pYl9jbS5jOjU1OTpcXHRpYy1cXHUwMDNlaV9yZWN2X2NxID0gaWJfY3JlYXRlX2NxKGRldiwgcmRzX2liX2NxX2NvbXBfaGFuZGxlcl9yZWN2LFxcbm5ldC9yZHMvaWJfY20uYzo1NjA6XFx0XFx0XFx0XFx0ICAgICByZHNfaWJfY3FfZXZlbnRfaGFuZGxlciwgY29ubixcXG5uZXQvcmRzL2liX2NtLmMtNTYxLVxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmNxX2F0dHIpO1xcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTU4My1cXHRtZW1zZXQoXFx1MDAyNmF0dHIsIDAsIHNpemVvZihhdHRyKSk7XFxubmV0L3Jkcy9pYl9jbS5jOjU4NDpcXHRhdHRyLmV2ZW50X2hhbmRsZXIgPSByZHNfaWJfcXBfZXZlbnRfaGFuZGxlcjtcXG5uZXQvcmRzL2liX2NtLmMtNTg1LVxcdGF0dHIucXBfY29udGV4dCA9IGNvbm47XFxuLS1cXG5uZXQvcmRzL2liX2NtLmMtNjMxLVxcbm5ldC9yZHMvaWJfY20uYzo2MzI6XFx0aWMtXFx1MDAzZWlfc2VuZHMgPSB2emFsbG9jX25vZGUoYXJyYXlfc2l6ZShzaXplb2Yoc3RydWN0IHJkc19pYl9zZW5kX3dvcmspLFxcbm5ldC9yZHMvaWJfY20uYy02MzMtXFx0XFx0XFx0XFx0XFx0ICAgICAgaWMtXFx1MDAzZWlfc2VuZF9yaW5nLndfbnIpLFxcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTY0MC1cXG5uZXQvcmRzL2liX2NtLmM6NjQxOlxcdGljLVxcdTAwM2VpX3JlY3ZzID0gdnphbGxvY19ub2RlKGFycmF5X3NpemUoc2l6ZW9mKHN0cnVjdCByZHNfaWJfcmVjdl93b3JrKSxcXG5uZXQvcmRzL2liX2NtLmMtNjQyLVxcdFxcdFxcdFxcdFxcdCAgICAgIGljLVxcdTAwM2VpX3JlY3ZfcmluZy53X25yKSxcXG4tLVxcbm5ldC9yZHMvaWJfY20uYy02NDktXFxubmV0L3Jkcy9pYl9jbS5jOjY1MDpcXHRyZHNfaWJfcmVjdl9pbml0X2FjayhpYyk7XFxubmV0L3Jkcy9pYl9jbS5jLTY1MS1cXG4tLVxcbm5ldC9yZHMvaWJfY20uYy02ODYtcmRzX2liZGV2X291dDpcXG5uZXQvcmRzL2liX2NtLmM6Njg3OlxcdHJkc19pYl9yZW1vdmVfY29ubihyZHNfaWJkZXYsIGNvbm4pO1xcbm5ldC9yZHMvaWJfY20uYy02ODgtb3V0Olxcbm5ldC9yZHMvaWJfY20uYzo2ODk6XFx0cmRzX2liX2Rldl9wdXQocmRzX2liZGV2KTtcXG5uZXQvcmRzL2liX2NtLmMtNjkwLVxcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTY5My1cXG5uZXQvcmRzL2liX2NtLmM6Njk0OnN0YXRpYyB1MzIgcmRzX2liX3Byb3RvY29sX2NvbXBhdGlibGUoc3RydWN0IHJkbWFfY21fZXZlbnQgKmV2ZW50LCBib29sIGlzdjYpXFxubmV0L3Jkcy9pYl9jbS5jLTY5NS17XFxubmV0L3Jkcy9pYl9jbS5jOjY5NjpcXHRjb25zdCB1bmlvbiByZHNfaWJfY29ubl9wcml2ICpkcCA9IGV2ZW50LVxcdTAwM2VwYXJhbS5jb25uLnByaXZhdGVfZGF0YTtcXG5uZXQvcmRzL2liX2NtLmMtNjk3LVxcdHU4IGRhdGFfbGVuLCBtYWpvciwgbWlub3I7XFxuLS1cXG5uZXQvcmRzL2liX2NtLmMtNzI0LVxcdH0gZWxzZSB7XFxubmV0L3Jkcy9pYl9jbS5jOjcyNTpcXHRcXHRkYXRhX2xlbiA9IHNpemVvZihzdHJ1Y3QgcmRzX2liX2Nvbm5lY3RfcHJpdmF0ZSk7XFxubmV0L3Jkcy9pYl9jbS5jLTcyNi1cXHRcXHRtYWpvciA9IGRwLVxcdTAwM2VyaWNwX3Y0LmRwX3Byb3RvY29sX21ham9yO1xcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTc1NS0vKiBHaXZlbiBhbiBJUHY2IGFkZHJlc3MsIGZpbmQgdGhlIG5ldF9kZXZpY2Ugd2hpY2ggaG9zdHMgdGhhdCBhZGRyZXNzIGFuZFxcbm5ldC9yZHMvaWJfY20uYzo3NTY6ICogcmV0dXJuIGl0cyBpbmRleC4gIFRoaXMgaXMgdXNlZCBieSB0aGUgcmRzX2liX2NtX2hhbmRsZV9jb25uZWN0KCkgY29kZSB0b1xcbm5ldC9yZHMvaWJfY20uYy03NTctICogZmluZCB0aGUgaW50ZXJmYWNlIGluZGV4IG9mIHdoZXJlIGFuIGluY29taW5nIHJlcXVlc3QgY29tZXMgZnJvbSB3aGVuXFxuLS1cXG5uZXQvcmRzL2liX2NtLmM9NzY1PXN0YXRpYyB1MzIgX19yZHNfZmluZF9pZmluZGV4KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKVxcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTc4Mi1cXG5uZXQvcmRzL2liX2NtLmM6NzgzOmludCByZHNfaWJfY21faGFuZGxlX2Nvbm5lY3Qoc3RydWN0IHJkbWFfY21faWQgKmNtX2lkLFxcbm5ldC9yZHMvaWJfY20uYy03ODQtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgcmRtYV9jbV9ldmVudCAqZXZlbnQsIGJvb2wgaXN2NilcXG4tLVxcbm5ldC9yZHMvaWJfY20uYy03ODctXFx0X19iZTY0IGZndWlkID0gY21faWQtXFx1MDAzZXJvdXRlLnBhdGhfcmVjLVxcdTAwM2VkZ2lkLmdsb2JhbC5pbnRlcmZhY2VfaWQ7XFxubmV0L3Jkcy9pYl9jbS5jOjc4ODpcXHRjb25zdCBzdHJ1Y3QgcmRzX2liX2Nvbm5fcHJpdl9jbW4gKmRwX2NtbjtcXG5uZXQvcmRzL2liX2NtLmMtNzg5LVxcdHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IE5VTEw7XFxubmV0L3Jkcy9pYl9jbS5jOjc5MDpcXHRzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gTlVMTDtcXG5uZXQvcmRzL2liX2NtLmMtNzkxLVxcdHN0cnVjdCByZG1hX2Nvbm5fcGFyYW0gY29ubl9wYXJhbTtcXG5uZXQvcmRzL2liX2NtLmM6NzkyOlxcdGNvbnN0IHVuaW9uIHJkc19pYl9jb25uX3ByaXYgKmRwO1xcbm5ldC9yZHMvaWJfY20uYzo3OTM6XFx0dW5pb24gcmRzX2liX2Nvbm5fcHJpdiBkcF9yZXA7XFxubmV0L3Jkcy9pYl9jbS5jLTc5NC1cXHRzdHJ1Y3QgaW42X2FkZHIgc19tYXBwZWRfYWRkcjtcXG4tLVxcbm5ldC9yZHMvaWJfY20uYy04MDMtXFx0LyogQ2hlY2sgd2hldGhlciB0aGUgcmVtb3RlIHByb3RvY29sIHZlcnNpb24gbWF0Y2hlcyBvdXJzLiAqL1xcbm5ldC9yZHMvaWJfY20uYzo4MDQ6XFx0dmVyc2lvbiA9IHJkc19pYl9wcm90b2NvbF9jb21wYXRpYmxlKGV2ZW50LCBpc3Y2KTtcXG5uZXQvcmRzL2liX2NtLmMtODA1LVxcdGlmICghdmVyc2lvbikge1xcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTg2MC1cXHRjb25uID0gcmRzX2Nvbm5fY3JlYXRlKFxcdTAwMjZpbml0X25ldCwgZGFkZHI2LCBzYWRkcjYsXFxubmV0L3Jkcy9pYl9jbS5jOjg2MTpcXHRcXHRcXHQgICAgICAgXFx1MDAyNnJkc19pYl90cmFuc3BvcnQsIGRwX2Ntbi1cXHUwMDNlcmljcGNfZHBfdG9zcyxcXG5uZXQvcmRzL2liX2NtLmMtODYyLVxcdFxcdFxcdCAgICAgICBHRlBfS0VSTkVMLCBpZmluZGV4KTtcXG4tLVxcbm5ldC9yZHMvaWJfY20uYy04ODAtXFx0XFx0XFx0cmRzX2Nvbm5fZHJvcChjb25uKTtcXG5uZXQvcmRzL2liX2NtLmM6ODgxOlxcdFxcdFxcdHJkc19pYl9zdGF0c19pbmMoc19pYl9saXN0ZW5fY2xvc2VkX3N0YWxlKTtcXG5uZXQvcmRzL2liX2NtLmMtODgyLVxcdFxcdH0gZWxzZVxcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTg4NC1cXHRcXHRcXHQvKiBXYWl0IGFuZCBzZWUgLSBvdXIgY29ubmVjdCBtYXkgc3RpbGwgYmUgc3VjY2VlZGluZyAqL1xcbm5ldC9yZHMvaWJfY20uYzo4ODU6XFx0XFx0XFx0cmRzX2liX3N0YXRzX2luYyhzX2liX2Nvbm5lY3RfcmFjZWQpO1xcbm5ldC9yZHMvaWJfY20uYy04ODYtXFx0XFx0fVxcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTg5MS1cXG5uZXQvcmRzL2liX2NtLmM6ODkyOlxcdHJkc19pYl9zZXRfcHJvdG9jb2woY29ubiwgdmVyc2lvbik7XFxubmV0L3Jkcy9pYl9jbS5jOjg5MzpcXHRyZHNfaWJfc2V0X2Zsb3dfY29udHJvbChjb25uLCBiZTMyX3RvX2NwdShkcF9jbW4tXFx1MDAzZXJpY3BjX2NyZWRpdCkpO1xcbm5ldC9yZHMvaWJfY20uYy04OTQtXFxuLS1cXG5uZXQvcmRzL2liX2NtLmMtOTEwLVxcbm5ldC9yZHMvaWJfY20uYzo5MTE6XFx0ZXJyID0gcmRzX2liX3NldHVwX3FwKGNvbm4pO1xcbm5ldC9yZHMvaWJfY20uYy05MTItXFx0aWYgKGVycikge1xcbm5ldC9yZHMvaWJfY20uYzo5MTM6XFx0XFx0cmRzX2liX2Nvbm5fZXJyb3IoY29ubiwgXFxcInJkc19pYl9zZXR1cF9xcCBmYWlsZWQgKCVkKVxcXFxuXFxcIiwgZXJyKTtcXG5uZXQvcmRzL2liX2NtLmMtOTE0LVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTkxNi1cXG5uZXQvcmRzL2liX2NtLmM6OTE3OlxcdHJkc19pYl9jbV9maWxsX2Nvbm5fcGFyYW0oY29ubiwgXFx1MDAyNmNvbm5fcGFyYW0sIFxcdTAwMjZkcF9yZXAsIHZlcnNpb24sXFxubmV0L3Jkcy9pYl9jbS5jLTkxOC1cXHRcXHRcXHRcXHQgIGV2ZW50LVxcdTAwM2VwYXJhbS5jb25uLnJlc3BvbmRlcl9yZXNvdXJjZXMsXFxuLS1cXG5uZXQvcmRzL2liX2NtLmMtOTIzLVxcdGlmIChyZG1hX2FjY2VwdChjbV9pZCwgXFx1MDAyNmNvbm5fcGFyYW0pKVxcbm5ldC9yZHMvaWJfY20uYzo5MjQ6XFx0XFx0cmRzX2liX2Nvbm5fZXJyb3IoY29ubiwgXFxcInJkbWFfYWNjZXB0IGZhaWxlZFxcXFxuXFxcIik7XFxubmV0L3Jkcy9pYl9jbS5jLTkyNS1cXG4tLVxcbm5ldC9yZHMvaWJfY20uYy05MzUtXFxubmV0L3Jkcy9pYl9jbS5jOjkzNjppbnQgcmRzX2liX2NtX2luaXRpYXRlX2Nvbm5lY3Qoc3RydWN0IHJkbWFfY21faWQgKmNtX2lkLCBib29sIGlzdjYpXFxubmV0L3Jkcy9pYl9jbS5jLTkzNy17XFxubmV0L3Jkcy9pYl9jbS5jLTkzOC1cXHRzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBjbV9pZC1cXHUwMDNlY29udGV4dDtcXG5uZXQvcmRzL2liX2NtLmM6OTM5OlxcdHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLVxcdTAwM2VjX3RyYW5zcG9ydF9kYXRhO1xcbm5ldC9yZHMvaWJfY20uYy05NDAtXFx0c3RydWN0IHJkbWFfY29ubl9wYXJhbSBjb25uX3BhcmFtO1xcbm5ldC9yZHMvaWJfY20uYzo5NDE6XFx0dW5pb24gcmRzX2liX2Nvbm5fcHJpdiBkcDtcXG5uZXQvcmRzL2liX2NtLmMtOTQyLVxcdGludCByZXQ7XFxuLS1cXG5uZXQvcmRzL2liX2NtLmMtOTQ1LVxcdCAqIGRlZmF1bHQgdG8gUkRTdjMuMCAqL1xcbm5ldC9yZHMvaWJfY20uYzo5NDY6XFx0cmRzX2liX3NldF9wcm90b2NvbChjb25uLCBSRFNfUFJPVE9DT0xfNF8xKTtcXG5uZXQvcmRzL2liX2NtLmM6OTQ3OlxcdGljLVxcdTAwM2VpX2Zsb3djdGwgPSByZHNfaWJfc3lzY3RsX2Zsb3dfY29udHJvbDtcXHQvKiBhZHZlcnRpc2UgZmxvdyBjb250cm9sICovXFxubmV0L3Jkcy9pYl9jbS5jLTk0OC1cXG5uZXQvcmRzL2liX2NtLmM6OTQ5OlxcdHJldCA9IHJkc19pYl9zZXR1cF9xcChjb25uKTtcXG5uZXQvcmRzL2liX2NtLmMtOTUwLVxcdGlmIChyZXQpIHtcXG5uZXQvcmRzL2liX2NtLmM6OTUxOlxcdFxcdHJkc19pYl9jb25uX2Vycm9yKGNvbm4sIFxcXCJyZHNfaWJfc2V0dXBfcXAgZmFpbGVkICglZClcXFxcblxcXCIsIHJldCk7XFxubmV0L3Jkcy9pYl9jbS5jLTk1Mi1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbm5ldC9yZHMvaWJfY20uYy05NTQtXFxubmV0L3Jkcy9pYl9jbS5jOjk1NTpcXHRyZHNfaWJfY21fZmlsbF9jb25uX3BhcmFtKGNvbm4sIFxcdTAwMjZjb25uX3BhcmFtLCBcXHUwMDI2ZHAsXFxubmV0L3Jkcy9pYl9jbS5jLTk1Ni1cXHRcXHRcXHRcXHQgIGNvbm4tXFx1MDAzZWNfcHJvcG9zZWRfdmVyc2lvbixcXG4tLVxcbm5ldC9yZHMvaWJfY20uYy05NTktXFx0aWYgKHJldClcXG5uZXQvcmRzL2liX2NtLmM6OTYwOlxcdFxcdHJkc19pYl9jb25uX2Vycm9yKGNvbm4sIFxcXCJyZG1hX2Nvbm5lY3RfbG9ja2VkIGZhaWxlZCAoJWQpXFxcXG5cXFwiLFxcbm5ldC9yZHMvaWJfY20uYy05NjEtXFx0XFx0XFx0XFx0ICByZXQpO1xcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTk3NC1cXG5uZXQvcmRzL2liX2NtLmM6OTc1OmludCByZHNfaWJfY29ubl9wYXRoX2Nvbm5lY3Qoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxcbm5ldC9yZHMvaWJfY20uYy05NzYte1xcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTk3OS1cXHRyZG1hX2NtX2V2ZW50X2hhbmRsZXIgaGFuZGxlcjtcXG5uZXQvcmRzL2liX2NtLmM6OTgwOlxcdHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWM7XFxubmV0L3Jkcy9pYl9jbS5jLTk4MS1cXHRpbnQgcmV0O1xcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTEwNDUtXFxubmV0L3Jkcy9pYl9jbS5jOjEwNDY6c3RhdGljIHVuc2lnbmVkIGxvbmcgcmRzX2liX2Nvbm5fcGF0aF9zaHV0ZG93bl9jaGVja193YWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcXG5uZXQvcmRzL2liX2NtLmMtMTA0Ny17XFxubmV0L3Jkcy9pYl9jbS5jLTEwNDgtXFx0c3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gY3AtXFx1MDAzZWNwX2Nvbm47XFxubmV0L3Jkcy9pYl9jbS5jOjEwNDk6XFx0c3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tXFx1MDAzZWNfdHJhbnNwb3J0X2RhdGE7XFxubmV0L3Jkcy9pYl9jbS5jLTEwNTAtXFxubmV0L3Jkcy9pYl9jbS5jLTEwNTEtXFx0cmV0dXJuICghaWMtXFx1MDAzZWlfY21faWQgfHxcXG5uZXQvcmRzL2liX2NtLmM6MTA1MjpcXHRcXHQocmRzX2liX3JpbmdfZW1wdHkoXFx1MDAyNmljLVxcdTAwM2VpX3JlY3ZfcmluZykgXFx1MDAyNlxcdTAwMjZcXG5uZXQvcmRzL2liX2NtLmMtMTA1My1cXHRcXHQgKGF0b21pY19yZWFkKFxcdTAwMjZpYy1cXHUwMDNlaV9zaWduYWxlZF9zZW5kcykgPT0gMCkgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC9yZHMvaWJfY20uYy0xMDYzLSAqL1xcbm5ldC9yZHMvaWJfY20uYzoxMDY0OnZvaWQgcmRzX2liX2Nvbm5fcGF0aF9zaHV0ZG93bihzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXFxubmV0L3Jkcy9pYl9jbS5jLTEwNjUte1xcbm5ldC9yZHMvaWJfY20uYy0xMDY2LVxcdHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGNwLVxcdTAwM2VjcF9jb25uO1xcbm5ldC9yZHMvaWJfY20uYzoxMDY3OlxcdHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLVxcdTAwM2VjX3RyYW5zcG9ydF9kYXRhO1xcbm5ldC9yZHMvaWJfY20uYy0xMDY4LVxcdGludCBlcnIgPSAwO1xcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTEwODctXFx0XFx0ICovXFxubmV0L3Jkcy9pYl9jbS5jOjEwODg6XFx0XFx0cmRzX2liX2ZsdXNoX21ycygpO1xcbm5ldC9yZHMvaWJfY20uYy0xMDg5LVxcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTEwOTgtXFx0XFx0ICovXFxubmV0L3Jkcy9pYl9jbS5jOjEwOTk6XFx0XFx0d2hpbGUgKCF3YWl0X2V2ZW50X3RpbWVvdXQocmRzX2liX3JpbmdfZW1wdHlfd2FpdCxcXG5uZXQvcmRzL2liX2NtLmM6MTEwMDpcXHRcXHRcXHRcXHRcXHQgICByZHNfaWJfY29ubl9wYXRoX3NodXRkb3duX2NoZWNrX3dhaXQoY3ApID09IDAsXFxubmV0L3Jkcy9pYl9jbS5jLTExMDEtXFx0XFx0XFx0XFx0XFx0ICAgbXNlY3NfdG9famlmZmllcygxMDAwKSkpIHtcXG4tLVxcbm5ldC9yZHMvaWJfY20uYy0xMTYxLVxcdFxcdGlmIChpYy1cXHUwMDNlaV9zZW5kcylcXG5uZXQvcmRzL2liX2NtLmM6MTE2MjpcXHRcXHRcXHRyZHNfaWJfc2VuZF9jbGVhcl9yaW5nKGljKTtcXG5uZXQvcmRzL2liX2NtLmMtMTE2My1cXHRcXHRpZiAoaWMtXFx1MDAzZWlfcmVjdnMpXFxubmV0L3Jkcy9pYl9jbS5jOjExNjQ6XFx0XFx0XFx0cmRzX2liX3JlY3ZfY2xlYXJfcmluZyhpYyk7XFxubmV0L3Jkcy9pYl9jbS5jLTExNjUtXFxuLS1cXG5uZXQvcmRzL2liX2NtLmMtMTE3MS1cXHRcXHRpZiAoaWMtXFx1MDAzZXJkc19pYmRldilcXG5uZXQvcmRzL2liX2NtLmM6MTE3MjpcXHRcXHRcXHRyZHNfaWJfcmVtb3ZlX2Nvbm4oaWMtXFx1MDAzZXJkc19pYmRldiwgY29ubik7XFxubmV0L3Jkcy9pYl9jbS5jLTExNzMtXFxuLS1cXG5uZXQvcmRzL2liX2NtLmMtMTIwMy1cXHQvKiBSZS1pbml0IHJpbmdzLCBidXQgcmV0YWluIHNpemVzLiAqL1xcbm5ldC9yZHMvaWJfY20uYzoxMjA0OlxcdHJkc19pYl9yaW5nX2luaXQoXFx1MDAyNmljLVxcdTAwM2VpX3NlbmRfcmluZywgaWMtXFx1MDAzZWlfc2VuZF9yaW5nLndfbnIpO1xcbm5ldC9yZHMvaWJfY20uYzoxMjA1OlxcdHJkc19pYl9yaW5nX2luaXQoXFx1MDAyNmljLVxcdTAwM2VpX3JlY3ZfcmluZywgaWMtXFx1MDAzZWlfcmVjdl9yaW5nLndfbnIpO1xcbm5ldC9yZHMvaWJfY20uYy0xMjA2LVxcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTEyMTgtXFxubmV0L3Jkcy9pYl9jbS5jOjEyMTk6aW50IHJkc19pYl9jb25uX2FsbG9jKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgZ2ZwX3QgZ2ZwKVxcbm5ldC9yZHMvaWJfY20uYy0xMjIwLXtcXG5uZXQvcmRzL2liX2NtLmM6MTIyMTpcXHRzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljO1xcbm5ldC9yZHMvaWJfY20uYy0xMjIyLVxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuLS1cXG5uZXQvcmRzL2liX2NtLmMtMTIyNS1cXHQvKiBYWFggdG9vIGxhenk/ICovXFxubmV0L3Jkcy9pYl9jbS5jOjEyMjY6XFx0aWMgPSBremFsbG9jX29iaihzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24sIGdmcCk7XFxubmV0L3Jkcy9pYl9jbS5jLTEyMjctXFx0aWYgKCFpYylcXG4tLVxcbm5ldC9yZHMvaWJfY20uYy0xMjI5LVxcbm5ldC9yZHMvaWJfY20uYzoxMjMwOlxcdHJldCA9IHJkc19pYl9yZWN2X2FsbG9jX2NhY2hlcyhpYywgZ2ZwKTtcXG5uZXQvcmRzL2liX2NtLmMtMTIzMS1cXHRpZiAocmV0KSB7XFxuLS1cXG5uZXQvcmRzL2liX2NtLmMtMTIzNi1cXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2aWMtXFx1MDAzZWliX25vZGUpO1xcbm5ldC9yZHMvaWJfY20uYzoxMjM3OlxcdHRhc2tsZXRfaW5pdChcXHUwMDI2aWMtXFx1MDAzZWlfc2VuZF90YXNrbGV0LCByZHNfaWJfdGFza2xldF9mbl9zZW5kLFxcbm5ldC9yZHMvaWJfY20uYy0xMjM4LVxcdFxcdCAgICAgKHVuc2lnbmVkIGxvbmcpaWMpO1xcbm5ldC9yZHMvaWJfY20uYzoxMjM5OlxcdHRhc2tsZXRfaW5pdChcXHUwMDI2aWMtXFx1MDAzZWlfcmVjdl90YXNrbGV0LCByZHNfaWJfdGFza2xldF9mbl9yZWN2LFxcbm5ldC9yZHMvaWJfY20uYy0xMjQwLVxcdFxcdCAgICAgKHVuc2lnbmVkIGxvbmcpaWMpO1xcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTEyNDgtXFx0LypcXG5uZXQvcmRzL2liX2NtLmM6MTI0OTpcXHQgKiByZHNfaWJfY29ubl9zaHV0ZG93bigpIHdhaXRzIGZvciB0aGVzZSB0byBiZSBlbXB0aWVkIHNvIHRoZXlcXG5uZXQvcmRzL2liX2NtLmMtMTI1MC1cXHQgKiBtdXN0IGJlIGluaXRpYWxpemVkIGJlZm9yZSBpdCBjYW4gYmUgY2FsbGVkLlxcbm5ldC9yZHMvaWJfY20uYy0xMjUxLVxcdCAqL1xcbm5ldC9yZHMvaWJfY20uYzoxMjUyOlxcdHJkc19pYl9yaW5nX2luaXQoXFx1MDAyNmljLVxcdTAwM2VpX3NlbmRfcmluZywgMCk7XFxubmV0L3Jkcy9pYl9jbS5jOjEyNTM6XFx0cmRzX2liX3JpbmdfaW5pdChcXHUwMDI2aWMtXFx1MDAzZWlfcmVjdl9yaW5nLCAwKTtcXG5uZXQvcmRzL2liX2NtLmMtMTI1NC1cXG4tLVxcbm5ldC9yZHMvaWJfY20uYy0xMjY5LSAqL1xcbm5ldC9yZHMvaWJfY20uYzoxMjcwOnZvaWQgcmRzX2liX2Nvbm5fZnJlZSh2b2lkICphcmcpXFxubmV0L3Jkcy9pYl9jbS5jLTEyNzEte1xcbm5ldC9yZHMvaWJfY20uYzoxMjcyOlxcdHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBhcmc7XFxubmV0L3Jkcy9pYl9jbS5jLTEyNzMtXFx0c3BpbmxvY2tfdFxcdCpsb2NrX3B0cjtcXG4tLVxcbm5ldC9yZHMvaWJfY20uYy0xMjg3LVxcbm5ldC9yZHMvaWJfY20uYzoxMjg4OlxcdHJkc19pYl9yZWN2X2ZyZWVfY2FjaGVzKGljKTtcXG5uZXQvcmRzL2liX2NtLmMtMTI4OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6NTQ6MTUuNjE4MzAwNzg1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5NDA0NDI5MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhpcyBDb25maWd1cmF0aW9uIGFuZCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgdGhlIGRlcGVuZGVuY2llcyBzdHJhaWdodC4gTG9va2luZyBhdCBgbmV0L3Jkcy9LY29uZmlnYCwgaXQgY29uZmlybXMgdGhhdCBSRFMgZGVwZW5kcyBvbiBJTkVULCBhbmQgUkRTX1JETUEgbmVlZHMgYm90aCBSRFMgYW5kIElORklOSUJBTkQsIGFsb25nIHdpdGggSU5GSU5JQkFORF9BRERSX1RSQU5TLiBUaGF0IG1lYW5zIEkgKm11c3QqIGhhdmUgUkRTLCBSRFNfUkRNQSwgSU5GSU5JQkFORCwgYW5kIElORklOSUJBTkRfQUREUl9UUkFOUyBlbmFibGVkIGZvciB0aGlzIGNoYW5nZSB0byBiZSByZWxldmFudC4gR29vZCwgZ29vZC5cblxuTmV4dCwgSSdtIGZvY3VzaW5nIG9uIHRoZXNlIHN5bWJvbHM6IGByZHNfaWJfY21fY29ubmVjdF9jb21wbGV0ZWAsIGByZHNfcmRtYV9jbV9ldmVudF9oYW5kbGVyX2NtbmAsIGByZHNfaWJfY21faGFuZGxlX2Nvbm5lY3RgLCBhbmQgYHJkc19pYl9jbV9pbml0aWF0ZV9jb25uZWN0YC4gVGhlc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIEknbSBleHBlY3RpbmcgdG8gYmUgaW1wYWN0ZWQgYnkgdGhlIGNoYW5nZXMuIFNwZWNpZmljYWxseSwgSSBzZWUgdGhhdCB0aGUgcHJpbWFyeSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gYHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlYCwgY29uZmlybWVkIGJ5IHRoZSBsaW5lIG51bWJlciBtZW50aW9uZWQuXG5cbk5vdyBmb3IgdGhlIGNvcmUgb2YgdGhlIG1hdHRlcjogVGhpcyBwYXRjaCBsb29rcyBzb3VuZC4gVGhlIHJlYXNvbmluZyBpcyBjbGVhciBhbmQgY29uY2lzZTogaXQncyBmaXhpbmcgYW4gUkRTIG92ZXIgSW5maW5pQmFuZCBjb25uZWN0aW9uIGhhbmRsaW5nIGlzc3VlLiBUaGUgcGF0Y2ggcmVwbGFjZXMgYHJkc19jb25uX2Rlc3Ryb3koKWAgd2l0aCBgcmRzX2Nvbm5fZHJvcCgpYCBpbiBhIGNvbm5lY3Rpb24gY29tcGxldGUgZXZlbnQgd2hlbiBhbiB1bnN1cHBvcnRlZCBwcm90b2NvbCB2ZXJzaW9uIGlzIG5lZ290aWF0ZWQuIFRoaXMgaW5kaWNhdGVzIHRoYXQgd2UgYXJlIGNoYW5naW5nIGhvdyB1bnJlYWNoYWJsZSBuZXR3b3JrIC8gUkRTIHRlYXJkb3duIGxvZ2ljIGlzIGhhbmRsZWQuIFRoaXMgaXMgYSBjcml0aWNhbCBhZGp1c3RtZW50IHRvIHByZXZlbnQgcG90ZW50aWFsIGlzc3VlcyBkdXJpbmcgY29ubmVjdGlvbiBhdHRlbXB0cy4gQWxsIHRoZSBpbXBvcnRhbnQgcGllY2VzIGFyZSBoZXJlLlxuXG5UaGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBzZXQgdG8gdHJ1ZSwgd2hpY2ggaXMgYXBwcm9wcmlhdGUuIFRoZSBmb2N1cyBzeW1ib2xzIGFsaWduIHdpdGggdGhlIGRlc2NyaWJlZCBmaXgsIGFuZCBJIGhhdmUgdGhlIHJlcXVpcmVkIGNvbmZpZ3M6IGBSRFNgLCBgUkRTX1JETUFgLCBgSU5GSU5JQkFORGAsIGFuZCBgSU5GSU5JQkFORF9BRERSX1RSQU5TYC4gSSdtIHNhdGlzZmllZC5cblxuVGltZSB0byBpbnZva2UgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIxMTAsIk91dHB1dFRva2VucyI6MTUzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE0OjU0OjE5LjU1ODc0NzQ1N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NTg5MDc3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUkRTXCIsXG4gICAgXCJSRFNfUkRNQVwiLFxuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiSU5GSU5JQkFORF9BRERSX1RSQU5TXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGVcIixcbiAgICBcInJkc19yZG1hX2NtX2V2ZW50X2hhbmRsZXJfY21uXCIsXG4gICAgXCJyZHNfaWJfY21faGFuZGxlX2Nvbm5lY3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBSRFMgb3ZlciBJbmZpbmlCYW5kIGNvbm5lY3Rpb24gbGlmZWN5Y2xlIGhhbmRsaW5nIGJ5IGNoYW5naW5nIGByZHNfY29ubl9kZXN0cm95YCB0byBgcmRzX2Nvbm5fZHJvcGAgd2hlbiBlbmNvdW50ZXJpbmcgdW5zdXBwb3J0ZWQgcHJvdG9jb2wgdmVyc2lvbnMgaW4gYHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlYC4gVGhpcyBhbHRlcnMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgZXJyb3IgaGFuZGxpbmcgYW5kIGNvbm5lY3Rpb24gdGVhcmRvd24gZmxvdy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSRFNcIixcbiAgICBcIlJEU19SRE1BXCIsXG4gICAgXCJJTkZJTklCQU5EXCIsXG4gICAgXCJJTkZJTklCQU5EX0FERFJfVFJBTlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZHNfaWJfY21fY29ubmVjdF9jb21wbGV0ZVwiLFxuICAgIFwicmRzX3JkbWFfY21fZXZlbnRfaGFuZGxlcl9jbW5cIixcbiAgICBcInJkc19pYl9jbV9oYW5kbGVfY29ubmVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIFJEUyBvdmVyIEluZmluaUJhbmQgY29ubmVjdGlvbiBsaWZlY3ljbGUgaGFuZGxpbmcgYnkgY2hhbmdpbmcgYHJkc19jb25uX2Rlc3Ryb3lgIHRvIGByZHNfY29ubl9kcm9wYCB3aGVuIGVuY291bnRlcmluZyB1bnN1cHBvcnRlZCBwcm90b2NvbCB2ZXJzaW9ucyBpbiBgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGVgLiBUaGlzIGFsdGVycyByZWFjaGFibGUgbmV0d29ya2luZyBlcnJvciBoYW5kbGluZyBhbmQgY29ubmVjdGlvbiB0ZWFyZG93biBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNDo1NDoxOS43NTQ2NDkxNjVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MzYwMzc4MTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6NTQ6MTkuNzU1NDgyODA1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjQzNTk1Mzk0MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGEgZGlyZWN0IGNhbGwgdG8gYHJkc19jb25uX2Rlc3Ryb3koKWAgd2l0aCBgcmRzX2Nvbm5fZHJvcCgpYCBpbiBgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGUoKWAgd2hlbiBhbiB1bnN1cHBvcnRlZCBwcm90b2NvbCB2ZXJzaW9uIGlzIGVuY291bnRlcmVkLiBgcmRzX2Nvbm5fZGVzdHJveSgpYCBpbW1lZGlhdGVseSBmcmVlcyB0aGUgY29ubmVjdGlvbiBvYmplY3QgKGBjb25uYCBhbmQgYGNvbm4tXFx1MDAzZWNfcGF0aGApLCB3aGljaCBjYXVzZXMgdXNlLWFmdGVyLWZyZWUgYW5kIHByZW1hdHVyZSBjbGVhbnVwIGlzc3VlcyBpbiBjb25uZWN0aW9uIGV2ZW50IGhhbmRsaW5nIHBhdGhzLiBgcmRzX2Nvbm5fZHJvcCgpYCBjbGVhbmx5IHRlYXJzIGRvd24gdGhlIGNvbm5lY3Rpb24gdmlhIGFzeW5jaHJvbm91cyB3b3JrLlxcblxcblRoaXMgY2hhbmdlIGlzIHB1cmVseSBjb25jZXJuZWQgd2l0aCBvYmplY3QgbGlmZXRpbWVzLCByZWZlcmVuY2UgbWFuYWdlbWVudCwgYW5kIHRlYXJkb3duIHN5bmNocm9uaXphdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gbG9naWMsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcvYnVmZmVycyB0byB1c2Vyc3BhY2UuIE1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmMDU5MzcxZWY3NmRlMTE0MDIyYjU0M2QwZjI2MTVjMzE1MWQxNDIxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAxNDo1MzozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9yZHMvaWJfY20uYyBiL25ldC9yZHMvaWJfY20uY1xuaW5kZXggZDQ2MTQ2ODg3YmE0MC4uMjkwOWRhODM2M2YzOSAxMDA2NDRcbi0tLSBhL25ldC9yZHMvaWJfY20uY1xuKysrIGIvbmV0L3Jkcy9pYl9jbS5jXG5AQCAtMTE1LDcgKzExNSw3IEBAIHZvaWQgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBzdHJ1Y3QgcmRtYV9jbV9ldmVuXG4gXHRcdFx0XHQgIFx1MDAyNmNvbm4tXHUwMDNlY19sYWRkciwgXHUwMDI2Y29ubi1cdTAwM2VjX2ZhZGRyLFxuIFx0XHRcdFx0ICBSRFNfUFJPVE9DT0xfTUFKT1IoY29ubi1cdTAwM2VjX3ZlcnNpb24pLFxuIFx0XHRcdFx0ICBSRFNfUFJPVE9DT0xfTUlOT1IoY29ubi1cdTAwM2VjX3ZlcnNpb24pKTtcbi1cdFx0XHRyZHNfY29ubl9kZXN0cm95KGNvbm4pO1xuK1x0XHRcdHJkc19jb25uX2Ryb3AoY29ubik7XG4gXHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNDo1NDoxOS43NTU0ODQ1MDVaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTIzNzIwMDQ2NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSRFMgSUIgQ29ubmVjdGlvbiBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBgbmV0L3Jkcy9pYl9jbS5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSByZXBsYWNpbmcgYHJkc19jb25uX2Rlc3Ryb3koY29ubilgIHdpdGggYHJkc19jb25uX2Ryb3AoY29ubilgIHdpdGhpbiB0aGUgYHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlYCBmdW5jdGlvbi4gTXkgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgc3dhcC5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0cmlnZ2VyZWQgdGhpcyBjaGFuZ2UuIFdoYXQncyB0aGUgZnVuZGFtZW50YWwgZGlmZmVyZW5jZSBiZXR3ZWVuIGBkZXN0cm95YCBhbmQgYGRyb3BgIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dD8gSXMgdGhlcmUgYSBzdWJ0bGUgc2VtYW50aWMgZGlzdGluY3Rpb24gYXQgcGxheSB0aGF0IG5lY2Vzc2l0YXRlcyB0aGlzIG1vZGlmaWNhdGlvbj9cblxuVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbGwgcmVhY2ggZm9yIGBncmVwcGVyYCAob3IgZXZlbiBhIHF1aWNrIGByZWFkLWZpbGVgIHRvIGtlZXAgdGhpbmdzIHNpbXBsZSkgYW5kIHplcm8gaW4gb24gdGhlIGFyZWEgYXJvdW5kIGxpbmUgMTE1IGluIGBuZXQvcmRzL2liX2NtLmNgLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBpbW1lZGlhdGUgc3Vycm91bmRpbmcgY29kZSBhbmQgY29udGV4dC4gVW5kZXJzdGFuZGluZyB0aGUgYWRqYWNlbnQgbG9naWMgaXMgY3J1Y2lhbCB0byBncmFzcGluZyB0aGUgaW50ZW5kZWQgYmVoYXZpb3IgaGVyZS4gSSdtIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBjb25uZWN0aW9uJ3MgbGlmZWN5Y2xlIHN0YXRlLCBlcnJvciBoYW5kbGluZywgb3IgcmVzb3VyY2UgbWFuYWdlbWVudCBpbW1lZGlhdGVseSBiZWZvcmUgYW5kIGFmdGVyIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDg5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNDo1NDozMi4xMjc0OTMzNjJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0NDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9yZHMvaWJfY20uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA5MDpcXHRcXHRcXHRcXHRjcmVkaXQgPSBkcC1cXHUwMDNlcmljcF92Ni5kcF9jcmVkaXQ7XFxuICA5MTpcXHRcXHRcXHRcXHQvKiBkcCBzdHJ1Y3R1cmUgc3RhcnQgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgOCBieXRlc1xcbiAgOTI6XFx0XFx0XFx0XFx0ICogYWxpZ25lZC4gIFNpbmNlIGRwX2Fja19zZXEgaXMgNjQtYml0IGV4dGVuZGVkIGxvYWRcXG4gIDkzOlxcdFxcdFxcdFxcdCAqIG9wZXJhdGlvbnMgY2FuIGJlIHVzZWQgc28gZ28gdGhyb3VnaCBnZXRfdW5hbGlnbmVkXFxuICA5NDpcXHRcXHRcXHRcXHQgKiB0byBhdm9pZCB1bmFsaWduZWQgZXJyb3JzLlxcbiAgOTU6XFx0XFx0XFx0XFx0ICovXFxuICA5NjpcXHRcXHRcXHRcXHRhY2tfc2VxID0gZ2V0X3VuYWxpZ25lZChcXHUwMDI2ZHAtXFx1MDAzZXJpY3BfdjYuZHBfYWNrX3NlcSk7XFxuICA5NzpcXHRcXHRcXHR9XFxuICA5ODpcXHRcXHR9IGVsc2UgaWYgKGV2ZW50LVxcdTAwM2VwYXJhbS5jb25uLnByaXZhdGVfZGF0YV9sZW4gXFx1MDAzZT1cXG4gIDk5OlxcdFxcdFxcdCAgIHNpemVvZihzdHJ1Y3QgcmRzX2liX2Nvbm5lY3RfcHJpdmF0ZSkpIHtcXG4gMTAwOlxcdFxcdFxcdG1ham9yID0gZHAtXFx1MDAzZXJpY3BfdjQuZHBfcHJvdG9jb2xfbWFqb3I7XFxuIDEwMTpcXHRcXHRcXHRtaW5vciA9IGRwLVxcdTAwM2VyaWNwX3Y0LmRwX3Byb3RvY29sX21pbm9yO1xcbiAxMDI6XFx0XFx0XFx0Y3JlZGl0ID0gZHAtXFx1MDAzZXJpY3BfdjQuZHBfY3JlZGl0O1xcbiAxMDM6XFx0XFx0XFx0YWNrX3NlcSA9IGdldF91bmFsaWduZWQoXFx1MDAyNmRwLVxcdTAwM2VyaWNwX3Y0LmRwX2Fja19zZXEpO1xcbiAxMDQ6XFx0XFx0fVxcbiAxMDU6XFx0XFxuIDEwNjpcXHRcXHQvKiBtYWtlIHN1cmUgaXQgaXNuJ3QgZW1wdHkgZGF0YSAqL1xcbiAxMDc6XFx0XFx0aWYgKG1ham9yKSB7XFxuIDEwODpcXHRcXHRcXHRyZHNfaWJfc2V0X3Byb3RvY29sKGNvbm4sIFJEU19QUk9UT0NPTChtYWpvciwgbWlub3IpKTtcXG4gMTA5OlxcdFxcdFxcdHJkc19pYl9zZXRfZmxvd19jb250cm9sKGNvbm4sIGJlMzJfdG9fY3B1KGNyZWRpdCkpO1xcbiAxMTA6XFx0XFx0fVxcbiAxMTE6XFx0XFxuIDExMjpcXHRcXHRpZiAoY29ubi1cXHUwMDNlY192ZXJzaW9uIFxcdTAwM2MgUkRTX1BST1RPQ09MX1ZFUlNJT04pIHtcXG4gMTEzOlxcdFxcdFxcdGlmIChjb25uLVxcdTAwM2VjX3ZlcnNpb24gIT0gUkRTX1BST1RPQ09MX0NPTVBBVF9WRVJTSU9OKSB7XFxuIDExNDpcXHRcXHRcXHRcXHRwcl9ub3RpY2UoXFxcIlJEUy9JQjogQ29ubmVjdGlvbiBcXHUwMDNjJXBJNmMsJXBJNmNcXHUwMDNlIHZlcnNpb24gJXUuJXUgbm8gbG9uZ2VyIHN1cHBvcnRlZFxcXFxuXFxcIixcXG4gMTE1OlxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmNvbm4tXFx1MDAzZWNfbGFkZHIsIFxcdTAwMjZjb25uLVxcdTAwM2VjX2ZhZGRyLFxcbiAxMTY6XFx0XFx0XFx0XFx0XFx0ICBSRFNfUFJPVE9DT0xfTUFKT1IoY29ubi1cXHUwMDNlY192ZXJzaW9uKSxcXG4gMTE3OlxcdFxcdFxcdFxcdFxcdCAgUkRTX1BST1RPQ09MX01JTk9SKGNvbm4tXFx1MDAzZWNfdmVyc2lvbikpO1xcbiAxMTg6XFx0XFx0XFx0XFx0cmRzX2Nvbm5fZHJvcChjb25uKTtcXG4gMTE5OlxcdFxcdFxcdFxcdHJldHVybjtcXG4gMTIwOlxcdFxcdFxcdH1cXG4gMTIxOlxcdFxcdH1cXG4gMTIyOlxcdFxcbiAxMjM6XFx0XFx0cHJfbm90aWNlKFxcXCJSRFMvSUI6ICVzIGNvbm4gY29ubmVjdGVkIFxcdTAwM2MlcEk2YywlcEk2YywlZFxcdTAwM2UgdmVyc2lvbiAldS4ldSVzXFxcXG5cXFwiLFxcbiAxMjQ6XFx0XFx0XFx0ICBpYy1cXHUwMDNlaV9hY3RpdmVfc2lkZSA/IFxcXCJBY3RpdmVcXFwiIDogXFxcIlBhc3NpdmVcXFwiLFxcbiAxMjU6XFx0XFx0XFx0ICBcXHUwMDI2Y29ubi1cXHUwMDNlY19sYWRkciwgXFx1MDAyNmNvbm4tXFx1MDAzZWNfZmFkZHIsIGNvbm4tXFx1MDAzZWNfdG9zLFxcbiAxMjY6XFx0XFx0XFx0ICBSRFNfUFJPVE9DT0xfTUFKT1IoY29ubi1cXHUwMDNlY192ZXJzaW9uKSxcXG4gMTI3OlxcdFxcdFxcdCAgUkRTX1BST1RPQ09MX01JTk9SKGNvbm4tXFx1MDAzZWNfdmVyc2lvbiksXFxuIDEyODpcXHRcXHRcXHQgIGljLVxcdTAwM2VpX2Zsb3djdGwgPyBcXFwiLCBmbG93IGNvbnRyb2xcXFwiIDogXFxcIlxcXCIpO1xcbiAxMjk6XFx0XFxuIDEzMDpcXHRcXHQvKiByZWNlaXZlIHNsIGZyb20gdGhlIHBlZXIgKi9cXG4gMTMxOlxcdFxcdGljLVxcdTAwM2VpX3NsID0gaWMtXFx1MDAzZWlfY21faWQtXFx1MDAzZXJvdXRlLnBhdGhfcmVjLVxcdTAwM2VzbDtcXG4gMTMyOlxcdFxcbiAxMzM6XFx0XFx0YXRvbWljX3NldChcXHUwMDI2aWMtXFx1MDAzZWlfY3FfcXVpZXNjZSwgMCk7XFxuIDEzNDpcXHRcXG4gMTM1OlxcdFxcdC8qIEluaXQgcmluZ3MgYW5kIGZpbGwgcmVjdi4gdGhpcyBuZWVkcyB0byB3YWl0IHVudGlsIHByb3RvY29sXFxuIDEzNjpcXHRcXHQgKiBuZWdvdGlhdGlvbiBpcyBjb21wbGV0ZSwgc2luY2UgcmluZyBsYXlvdXQgaXMgZGlmZmVyZW50XFxuIDEzNzpcXHRcXHQgKiBmcm9tIDMuMSB0byA0LjEuXFxuIDEzODpcXHRcXHQgKi9cXG4gMTM5OlxcdFxcdHJkc19pYl9zZW5kX2luaXRfcmluZyhpYyk7XFxuIDE0MDpcXHRcXHRyZHNfaWJfcmVjdl9pbml0X3JpbmcoaWMpO1xcbiAxNDE6XFx0XFx0LyogUG9zdCByZWNlaXZlIGJ1ZmZlcnMgLSBhcyBhIHNpZGUgZWZmZWN0LCB0aGlzIHdpbGwgdXBkYXRlXFxuIDE0MjpcXHRcXHQgKiB0aGUgcG9zdGVkIGNyZWRpdCBjb3VudC4gKi9cXG4gMTQzOlxcdFxcdHJkc19pYl9yZWN2X3JlZmlsbChjb25uLCAxLCBHRlBfS0VSTkVMKTtcXG4gMTQ0OlxcdFxcbiAxNDU6XFx0XFx0LyogdXBkYXRlIGliX2RldmljZSB3aXRoIHRoaXMgbG9jYWwgaXBhZGRyICovXFxuIDE0NjpcXHRcXHRlcnIgPSByZHNfaWJfdXBkYXRlX2lwYWRkcihpYy1cXHUwMDNlcmRzX2liZGV2LCBcXHUwMDI2Y29ubi1cXHUwMDNlY19sYWRkcik7XFxuIDE0NzpcXHRcXHRpZiAoZXJyKVxcbiAxNDg6XFx0XFx0XFx0cHJpbnRrKEtFUk5fRVJSIFxcXCJyZHNfaWJfdXBkYXRlX2lwYWRkciBmYWlsZWQgKCVkKVxcXFxuXFxcIixcXG4gMTQ5OlxcdFxcdFxcdFxcdGVycik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE0OjU0OjMyLjEyNzY4MDYwMloiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODYzNDgzMzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMsIGFzIGlmIEknbSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gUkRTIENvbm5lY3Rpb24gRGVzdHJ1Y3Rpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBiZXR3ZWVuIGByZHNfY29ubl9kZXN0cm95YCBhbmQgYHJkc19jb25uX2Ryb3BgLiBJdCdzIHRpbWUgdG8gZ2V0IGEgYml0IGdyYW51bGFyIGhlcmUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZWFjaCBvbmUgYWN0dWFsbHkgKmRvZXMqIGF0IHRoZSBjb25uZWN0aW9uIGxldmVsLiBJJ2xsIG5lZWQgdG8gdXNlIHNvbWUgcGF0dGVybiBtYXRjaGluZyB0byBwdWxsIHVwIGFueSBpbnN0YW5jZXMgb2YgdGhlc2UgZnVuY3Rpb25zIGluIHRoZSBjb2RlIGJhc2UsIHRvIGdldCBhIGhhbmRsZSBvbiB0aGVpciB1c2FnZSBhbmQgY29udGV4dC4gTGV0J3MgZmlyZSB1cCBgZ3JlcGAgYW5kIHNlZSB3aGF0IGNvbWVzIHVwLiBUaGlzIHNob3VsZCB0ZWxsIG1lIHF1aWNrbHkgd2hlcmUgdGhleSdyZSB1c2VkIGFuZCBob3cuIFRpbWUgdG8gZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1NjksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE0OjU0OjMzLjk5MTE2NzE1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzY0OTcyNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCByZHNfY29ubl8oZGVzdHJveXxkcm9wKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcmRzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yZHMvY29ubmVjdGlvbi5jPTQ2OD1zdGF0aWMgdm9pZCByZHNfY29ubl9wYXRoX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxcbi0tXFxubmV0L3Jkcy9jb25uZWN0aW9uLmMtNTEyLSAqL1xcbm5ldC9yZHMvY29ubmVjdGlvbi5jOjUxMzp2b2lkIHJkc19jb25uX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxcbm5ldC9yZHMvY29ubmVjdGlvbi5jLTUxNC17XFxuLS1cXG5uZXQvcmRzL2Nvbm5lY3Rpb24uYz05NDg9RVhQT1JUX1NZTUJPTF9HUEwocmRzX2Nvbm5fcGF0aF9kcm9wKTtcXG5uZXQvcmRzL2Nvbm5lY3Rpb24uYy05NDktXFxubmV0L3Jkcy9jb25uZWN0aW9uLmM6OTUwOnZvaWQgcmRzX2Nvbm5fZHJvcChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pXFxubmV0L3Jkcy9jb25uZWN0aW9uLmMtOTUxLXtcXG4tLVxcbm5ldC9yZHMvcmRzLmg9ODA5PXZvaWQgcmRzX2Nvbm5fc2h1dGRvd24oc3RydWN0IHJkc19jb25uX3BhdGggKmNwYXRoKTtcXG5uZXQvcmRzL3Jkcy5oOjgxMDp2b2lkIHJkc19jb25uX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTtcXG5uZXQvcmRzL3Jkcy5oOjgxMTp2b2lkIHJkc19jb25uX2Ryb3Aoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTtcXG5uZXQvcmRzL3Jkcy5oLTgxMi12b2lkIHJkc19jb25uX3BhdGhfZHJvcChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3BhdGgsIGJvb2wgZGVzdHJveSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE0OjU0OjM0LjEyNzY3MzIwOFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjA1MjkzNjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgTmV0d29yayBDb25uZWN0aW9uIERlbWlzZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gZGlnIGludG8gdGhlIGBuZXQvcmRzL2Nvbm5lY3Rpb24uY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIHNlY3Rpb25zIGFyb3VuZCBgcmRzX2Nvbm5fZGVzdHJveWAgYW5kIGByZHNfY29ubl9kcm9wYC4gVGhlc2UgYXJlIGNyaXRpY2FsIGZ1bmN0aW9ucywgdGhlIGhlYXJ0IG9mIGhvdyBSRFMgY29ubmVjdGlvbnMgYXJlIHRlcm1pbmF0ZWQsIGFuZCBob3cgd2UgaGFuZGxlIHRob3NlIHRlcm1pbmF0aW9uIGV2ZW50cy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IG1lY2hhbmljcyBvZiB3aGF0IGhhcHBlbnMgd2hlbiBhIGNvbm5lY3Rpb24gZ29lcyBkb3duIGFuZCBob3cgd2UgZW5zdXJlIGEgY2xlYW4sIHJlbGlhYmxlIHRlYXJkb3duLiBJdCdzIGFib3V0IGVuc3VyaW5nIG1pbmltYWwgcmVzb3VyY2UgbGVha2FnZSBhbmQgbWFpbnRhaW5pbmcgdGhlIGludGVncml0eSBvZiB0aGUgb3ZlcmFsbCBzeXN0ZW0uIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzIHRoYXQgbWlnaHQgYXJpc2UgZHVyaW5nIHRoZXNlIGNyaXRpY2FsIG9wZXJhdGlvbnMsIGFuZCBob3cgdGhleSdyZSBoYW5kbGVkLiBMZXQncyBzZWUgaG93IHRoaW5ncyBhcmUgcmVhbGx5IGRvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwOTUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNDo1NDozNi4zMzI5Njk4M1oiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTcwNzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9yZHMvY29ubmVjdGlvbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUxMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUxMDpcXHQgKiB0aGUgY29ubiBoYXMgYmVlbiBzaHV0ZG93biB0aGF0IG5vIG9uZSBlbHNlIGlzIHJlZmVyZW5jaW5nIHRoZSBjb25uZWN0aW9uLlxcbiA1MTE6XFx0ICogV2UgY2FuIG9ubHkgZW5zdXJlIHRoaXMgaW4gdGhlIHJtbW9kIHBhdGggaW4gdGhlIGN1cnJlbnQgY29kZS5cXG4gNTEyOlxcdCAqL1xcbiA1MTM6XFx0dm9pZCByZHNfY29ubl9kZXN0cm95KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubilcXG4gNTE0OlxcdHtcXG4gNTE1OlxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIDUxNjpcXHRcXHRpbnQgaTtcXG4gNTE3OlxcdFxcdHN0cnVjdCByZHNfY29ubl9wYXRoICpjcDtcXG4gNTE4OlxcdFxcdGludCBucGF0aHMgPSAoY29ubi1cXHUwMDNlY190cmFucy1cXHUwMDNldF9tcF9jYXBhYmxlID8gUkRTX01QQVRIX1dPUktFUlMgOiAxKTtcXG4gNTE5OlxcdFxcbiA1MjA6XFx0XFx0cmRzZGVidWcoXFxcImZyZWVpbmcgY29ubiAlcCBmb3IgJXBJNCAtXFx1MDAzZSBcXFwiXFxuIDUyMTpcXHRcXHRcXHQgXFxcIiVwSTRcXFxcblxcXCIsIGNvbm4sIFxcdTAwMjZjb25uLVxcdTAwM2VjX2xhZGRyLFxcbiA1MjI6XFx0XFx0XFx0IFxcdTAwMjZjb25uLVxcdTAwM2VjX2ZhZGRyKTtcXG4gNTIzOlxcdFxcbiA1MjQ6XFx0XFx0LyogRW5zdXJlIGNvbm4gd2lsbCBub3QgYmUgc2NoZWR1bGVkIGZvciByZWNvbm5lY3QgKi9cXG4gNTI1OlxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNnJkc19jb25uX2xvY2spO1xcbiA1MjY6XFx0XFx0aGxpc3RfZGVsX2luaXRfcmN1KFxcdTAwMjZjb25uLVxcdTAwM2VjX2hhc2hfbm9kZSk7XFxuIDUyNzpcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNnJkc19jb25uX2xvY2spO1xcbiA1Mjg6XFx0XFx0c3luY2hyb25pemVfcmN1KCk7XFxuIDUyOTpcXHRcXG4gNTMwOlxcdFxcdC8qIHNodXQgdGhlIGNvbm5lY3Rpb24gZG93biAqL1xcbiA1MzE6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5wYXRoczsgaSsrKSB7XFxuIDUzMjpcXHRcXHRcXHRjcCA9IFxcdTAwMjZjb25uLVxcdTAwM2VjX3BhdGhbaV07XFxuIDUzMzpcXHRcXHRcXHRyZHNfY29ubl9wYXRoX2Rlc3Ryb3koY3ApO1xcbiA1MzQ6XFx0XFx0XFx0QlVHX09OKCFsaXN0X2VtcHR5KFxcdTAwMjZjcC1cXHUwMDNlY3BfcmV0cmFucykpO1xcbiA1MzU6XFx0XFx0fVxcbiA1MzY6XFx0XFxuIDUzNzpcXHRcXHQvKlxcbiA1Mzg6XFx0XFx0ICogVGhlIGNvbmdlc3Rpb24gbWFwcyBhcmVuJ3QgZnJlZWQgdXAgaGVyZS4gIFRoZXkncmVcXG4gNTM5OlxcdFxcdCAqIGZyZWVkIGJ5IHJkc19jb25nX2V4aXQoKSBhZnRlciBhbGwgdGhlIGNvbm5lY3Rpb25zXFxuIDU0MDpcXHRcXHQgKiBoYXZlIGJlZW4gZnJlZWQuXFxuIDU0MTpcXHRcXHQgKi9cXG4gNTQyOlxcdFxcdHJkc19jb25nX3JlbW92ZV9jb25uKGNvbm4pO1xcbiA1NDM6XFx0XFxuIDU0NDpcXHRcXHRrZnJlZShjb25uLVxcdTAwM2VjX3BhdGgpO1xcbiA1NDU6XFx0XFx0a21lbV9jYWNoZV9mcmVlKHJkc19jb25uX3NsYWIsIGNvbm4pO1xcbiA1NDY6XFx0XFxuIDU0NzpcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cmRzX2Nvbm5fbG9jaywgZmxhZ3MpO1xcbiA1NDg6XFx0XFx0cmRzX2Nvbm5fY291bnQtLTtcXG4gNTQ5OlxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnJkc19jb25uX2xvY2ssIGZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6NTQ6MzYuMzM1MTQ0NTRaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYxODkwMjE4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQ2hlY2tpbmcgQ29kZSBmb3IgYG5ldC9yZHMvY29ubmVjdGlvbi5jYCBhbmQgTGluZSA5NTAqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIGxldCdzIGp1c3QgbWFrZSBhYnNvbHV0ZWx5IGNlcnRhaW4gd2UncmUgbm90IG1pc3NpbmcgYW55dGhpbmcgaW4gdGhlIFJEUyBjb25uZWN0aW9uIGhhbmRsaW5nLiBXZSBuZWVkIHRvIGdvIGJhY2sgYW5kIGNyb3NzLXJlZmVyZW5jZSBhIHNwZWNpZmljIGxpbmUsIGxpbmUgOTUwLCB3aXRoaW4gdGhlIGBuZXQvcmRzL2Nvbm5lY3Rpb24uY2AgZmlsZS4gVGhpcyBwYXJ0aWN1bGFyIHNlY3Rpb24gaGFzIHByb3ZlbiB0byBiZSBhbiBhcmVhIG9mIGludGVyZXN0IGluIHRoZSBwYXN0LiBJdCdzIHRpbWUgdG8gdGhvcm91Z2hseSByZXZpZXcgaXRzIGltcGxlbWVudGF0aW9uIGFuZCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHBvdGVudGlhbCBpc3N1ZXMgb3Igb3ZlcnNpZ2h0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk5OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6NTQ6MzguOTU0MDQ5MzU2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzM0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Jkcy9jb25uZWN0aW9uLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTQ1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTQ1OlxcdFxcdHF1ZXVlX3dvcmsoY3AtXFx1MDAzZWNwX3dxLCBcXHUwMDI2Y3AtXFx1MDAzZWNwX2Rvd25fdyk7XFxuIDk0NjpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gOTQ3OlxcdH1cXG4gOTQ4OlxcdEVYUE9SVF9TWU1CT0xfR1BMKHJkc19jb25uX3BhdGhfZHJvcCk7XFxuIDk0OTpcXHRcXG4gOTUwOlxcdHZvaWQgcmRzX2Nvbm5fZHJvcChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pXFxuIDk1MTpcXHR7XFxuIDk1MjpcXHRcXHRXQVJOX09OKGNvbm4tXFx1MDAzZWNfdHJhbnMtXFx1MDAzZXRfbXBfY2FwYWJsZSk7XFxuIDk1MzpcXHRcXHRyZHNfY29ubl9wYXRoX2Ryb3AoXFx1MDAyNmNvbm4tXFx1MDAzZWNfcGF0aFswXSwgZmFsc2UpO1xcbiA5NTQ6XFx0fVxcbiA5NTU6XFx0RVhQT1JUX1NZTUJPTF9HUEwocmRzX2Nvbm5fZHJvcCk7XFxuIDk1NjpcXHRcXG4gOTU3OlxcdC8qXFxuIDk1ODpcXHQgKiBJZiB0aGUgY29ubmVjdGlvbiBpcyBkb3duLCB0cmlnZ2VyIGEgY29ubmVjdC4gV2UgbWF5IGhhdmUgc2NoZWR1bGVkIGFcXG4gOTU5OlxcdCAqIGRlbGF5ZWQgcmVjb25uZWN0IGhvd2V2ZXIgLSBpbiB0aGlzIGNhc2Ugd2Ugc2hvdWxkIG5vdCBpbnRlcmZlcmUuXFxuIDk2MDpcXHQgKi9cXG4gOTYxOlxcdHZvaWQgcmRzX2Nvbm5fcGF0aF9jb25uZWN0X2lmX2Rvd24oc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxcbiA5NjI6XFx0e1xcbiA5NjM6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiA5NjQ6XFx0XFx0aWYgKHJkc19kZXN0cm95X3BlbmRpbmcoY3AtXFx1MDAzZWNwX2Nvbm4pKSB7XFxuIDk2NTpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gOTY2OlxcdFxcdFxcdHJldHVybjtcXG4gOTY3OlxcdFxcdH1cXG4gOTY4OlxcdFxcdGlmIChyZHNfY29ubl9wYXRoX3N0YXRlKGNwKSA9PSBSRFNfQ09OTl9ET1dOIFxcdTAwMjZcXHUwMDI2XFxuIDk2OTpcXHRcXHQgICAgIXRlc3RfYW5kX3NldF9iaXQoUkRTX1JFQ09OTkVDVF9QRU5ESU5HLCBcXHUwMDI2Y3AtXFx1MDAzZWNwX2ZsYWdzKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6NTQ6MzguOTU1MjI5NjE2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUxNTk3NjQzMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFJEUyBDb25uZWN0aW9uIFRlYXJkb3duIEZpeCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgXCJZZXMsIHRoaXMgaXMgZGVmaW5pdGVseSBhIHBvdGVudGlhbCBwcm9ibGVtIGFyZWEuXCIgYHJkc19jb25uX2Rlc3Ryb3koY29ubilgIGlzIGEgKmRpcmVjdCogZnJlZSBvZiB0aGUgY29ubmVjdGlvbiBhbmQgaXRzIGFzc29jaWF0ZWQgcGF0aHMsIHdoaWNoIGlzIGFsd2F5cyByaXNreSBpbiBhIGtlcm5lbCBjb250ZXh0LCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGhhbmRsZXJzIG9yIHdvcmtxdWV1ZXMgdGhhdCBtaWdodCBzdGlsbCBoYXZlIGFjdGl2ZSByZWZlcmVuY2VzIG9yIGJlIGluIHRoZSBwcm9jZXNzIG9mIGV4ZWN1dGluZy4gV2UncmUgdGFsa2luZyBhYm91dCBhIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUgKFVBRikgb3IgZXZlbiBkb3VibGUtZnJlZSBzY2VuYXJpbyBpZiBub3QgaGFuZGxlZCBjYXJlZnVsbHkuIGByZHNfY29ubl9kcm9wKGNvbm4pYCBpcyB0aGUgbW9yZSBhcHByb3ByaWF0ZSBjaG9pY2UgYXMgaXQgZGVmZXJzIHRoZSB0ZWFyZG93biwgcXVldWVpbmcgdGhlIHdvcmsgdG8gYWxsb3cgYSBncmFjZWZ1bCBkaXNjb25uZWN0aW9uLlxuXG5Ob3csIGxldCdzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdC5cblxuKiAgICoqVW5pbml0aWFsaXplZCBtZW1vcnk/KiogTm8sIHRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2Vyc3BhY2UuIFRoZXJlJ3MgYWxzbyBubyBzaWduIG9mIGl0IHJlYWRpbmcsIGNvcHlpbmcsIG9yIHBhc3NpbmcgYXJvdW5kIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS5cbiogICAqKktNU0FOIENvbmNlcm5zPyoqIE5vcGUsIG5vIEtNU0FOLXNwZWNpZmljIGJ1Z3MgbGlrZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZyBpc3N1ZXMsIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGlzIGlzIGdyZWF0LCBhcyB3ZSBzaG91bGQgYmUgYWJsZSB0byByZWx5IG9uIEtBU0FOIHRvIGRldGVjdCBVQUYvbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzLlxuKiAgICoqVGhlIGJ1ZyBpcyBpbmRlZWQgYSBsaWZldGltZSAvIHRlYXJkb3duIC8gVUFGIGlzc3VlLioqIFdlJ3JlIGZpeGluZyBhIHNpdHVhdGlvbiB3aGVyZSBhbiBldmVudCBoYW5kbGVyIHByZW1hdHVyZWx5IGRlc3Ryb3llZCB0aGUgY29ubmVjdGlvbi4gVGhpcyBkaXJlY3RseSBsZWFkcyB0byB0aGUgZHJlYWRlZCBwcmVtYXR1cmUgZnJlZS9VQUYuIEl0J3MgYSB0ZXh0Ym9vayBleGFtcGxlIG9mIHRoZSBraW5kIG9mIGJ1ZyBLQVNBTiBpcyBidWlsdCB0byBjYXRjaC5cblxuTGV0J3MgZG91YmxlIGNoZWNrIGFsbCBhc3BlY3RzIG9mIHRoaXMuXG5cbiogICAqKkluIGBuZXQvcmRzL2liX2NtLmNgKiogVGhlIGNoYW5nZSBzcGVjaWZpY2FsbHkgcmVwbGFjZXMgYHJkc19jb25uX2Rlc3Ryb3koY29ubilgIHdpdGggYHJkc19jb25uX2Ryb3AoY29ubilgIHdoZW4gdGhlIFJEUyBwcm90b2NvbCB2ZXJzaW9uIGlzIHVuc3VwcG9ydGVkLlxuKiAgICoqUHJldmVudGluZyBhIGRpcmVjdCBkZXN0cm95L2ZyZWUgaW4gdGhlIGNvbm5lY3QgY29tcGxldGUgaGFuZGxlci4qKiBUaGlzIGF2b2lkcyB0aGUgcG90ZW50aWFsIGZvciBVQUYgYW5kIG1lbW9yeSBjb3JydXB0aW9uLCBleGFjdGx5IGFzIHN1c3BlY3RlZC5cblxuU2luY2UgS01TQU4gaXNuJ3QgbmVlZGVkLCBsZXQncyBwcmVwYXJlIHRoZSB0b29sIGNhbGwgYW5kIHdyYXAgdGhpcyB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTYwNywiT3V0cHV0VG9rZW5zIjoyMDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNDo1NDo0NC4xMTQ5OTc2OVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgYSBkaXJlY3QgY2FsbCB0byBgcmRzX2Nvbm5fZGVzdHJveSgpYCB3aXRoIGByZHNfY29ubl9kcm9wKClgIGluIGByZHNfaWJfY21fY29ubmVjdF9jb21wbGV0ZSgpYCB3aGVuIGFuIHVuc3VwcG9ydGVkIHByb3RvY29sIHZlcnNpb24gaXMgZW5jb3VudGVyZWQuIGByZHNfY29ubl9kZXN0cm95KClgIGltbWVkaWF0ZWx5IGZyZWVzIHRoZSBjb25uZWN0aW9uIG9iamVjdCAoYGNvbm5gIGFuZCBgY29ubi1cXHUwMDNlY19wYXRoYCksIHdoaWNoIGNhdXNlcyB1c2UtYWZ0ZXItZnJlZSBhbmQgcHJlbWF0dXJlIGNsZWFudXAgaXNzdWVzIGluIGNvbm5lY3Rpb24gZXZlbnQgaGFuZGxpbmcgcGF0aHMuIGByZHNfY29ubl9kcm9wKClgIGNsZWFubHkgdGVhcnMgZG93biB0aGUgY29ubmVjdGlvbiB2aWEgYXN5bmNocm9ub3VzIHdvcmsuXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGNvbmNlcm5lZCB3aXRoIG9iamVjdCBsaWZldGltZXMsIHJlZmVyZW5jZSBtYW5hZ2VtZW50LCBhbmQgdGVhcmRvd24gc3luY2hyb25pemF0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbW9kaWZ5IG1lbW9yeSBpbml0aWFsaXphdGlvbiBsb2dpYywgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgcGFkZGluZy9idWZmZXJzIHRvIHVzZXJzcGFjZS4gTWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWZyZWUgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGEgZGlyZWN0IGNhbGwgdG8gYHJkc19jb25uX2Rlc3Ryb3koKWAgd2l0aCBgcmRzX2Nvbm5fZHJvcCgpYCBpbiBgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGUoKWAgd2hlbiBhbiB1bnN1cHBvcnRlZCBwcm90b2NvbCB2ZXJzaW9uIGlzIGVuY291bnRlcmVkLiBgcmRzX2Nvbm5fZGVzdHJveSgpYCBpbW1lZGlhdGVseSBmcmVlcyB0aGUgY29ubmVjdGlvbiBvYmplY3QgKGBjb25uYCBhbmQgYGNvbm4tXFx1MDAzZWNfcGF0aGApLCB3aGljaCBjYXVzZXMgdXNlLWFmdGVyLWZyZWUgYW5kIHByZW1hdHVyZSBjbGVhbnVwIGlzc3VlcyBpbiBjb25uZWN0aW9uIGV2ZW50IGhhbmRsaW5nIHBhdGhzLiBgcmRzX2Nvbm5fZHJvcCgpYCBjbGVhbmx5IHRlYXJzIGRvd24gdGhlIGNvbm5lY3Rpb24gdmlhIGFzeW5jaHJvbm91cyB3b3JrLlxcblxcblRoaXMgY2hhbmdlIGlzIHB1cmVseSBjb25jZXJuZWQgd2l0aCBvYmplY3QgbGlmZXRpbWVzLCByZWZlcmVuY2UgbWFuYWdlbWVudCwgYW5kIHRlYXJkb3duIHN5bmNocm9uaXphdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gbG9naWMsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcvYnVmZmVycyB0byB1c2Vyc3BhY2UuIE1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowttf6w[1] Phase: Succeeded StartedAt: 2026-09-08 14:54:56 +0000 UTC FinishedAt: 2026-09-08 14:54:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowttf6w[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-08 14:54:56 +0000 UTC FinishedAt: 2026-09-08 14:54:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowttf6w[2] Phase: Succeeded StartedAt: 2026-09-08 14:54:56 +0000 UTC FinishedAt: 2026-09-08 15:45:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowttf6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"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":["rds_ib_cm_connect_complete","rds_rdma_cm_event_handler_cmn","rds_ib_cm_handle_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"2c6cb100-29a7-4679-83ab-2ac2ea9fcaf3","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-08 14:54:56 +0000 UTC FinishedAt: 2026-09-08 15:45:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"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":["rds_ib_cm_connect_complete","rds_rdma_cm_event_handler_cmn","rds_ib_cm_handle_connect"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"2c6cb100-29a7-4679-83ab-2ac2ea9fcaf3","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-workflowttf6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"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":["rds_ib_cm_connect_complete","rds_rdma_cm_event_handler_cmn","rds_ib_cm_handle_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"2c6cb100-29a7-4679-83ab-2ac2ea9fcaf3","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-08 14:54:56 +0000 UTC FinishedAt: 2026-09-08 14:55:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowttf6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"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":["rds_ib_cm_connect_complete","rds_rdma_cm_event_handler_cmn","rds_ib_cm_handle_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"2c6cb100-29a7-4679-83ab-2ac2ea9fcaf3","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-08 14:54:56 +0000 UTC FinishedAt: 2026-09-08 14:55:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"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-workflowttf6w/series-workflowttf6w-convert-artifact-1504383645/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowttf6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"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":["rds_ib_cm_connect_complete","rds_rdma_cm_event_handler_cmn","rds_ib_cm_handle_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"2c6cb100-29a7-4679-83ab-2ac2ea9fcaf3","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-08 14:55:06 +0000 UTC FinishedAt: 2026-09-08 15:18:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowttf6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"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":["rds_ib_cm_connect_complete","rds_rdma_cm_event_handler_cmn","rds_ib_cm_handle_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"2c6cb100-29a7-4679-83ab-2ac2ea9fcaf3","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-08 14:55:06 +0000 UTC FinishedAt: 2026-09-08 15:18:35 +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:*742d5837-e4d6-4948-a677-5c7522090e3c,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-workflowttf6w/series-workflowttf6w-convert-artifact-1504383645/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": "32aea367-28e3-4245-801b-603e7c6d7a89", "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-workflowttf6w/series-workflowttf6w-build-action-1516209107/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowttf6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"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":["rds_ib_cm_connect_complete","rds_rdma_cm_event_handler_cmn","rds_ib_cm_handle_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"2c6cb100-29a7-4679-83ab-2ac2ea9fcaf3","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-08 14:55:06 +0000 UTC FinishedAt: 2026-09-08 15:17:59 +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:*742d5837-e4d6-4948-a677-5c7522090e3c,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-workflowttf6w/series-workflowttf6w-convert-artifact-1504383645/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": "32aea367-28e3-4245-801b-603e7c6d7a89", "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-workflowttf6w/series-workflowttf6w-build-action-1516209107/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowttf6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"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":["rds_ib_cm_connect_complete","rds_rdma_cm_event_handler_cmn","rds_ib_cm_handle_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"2c6cb100-29a7-4679-83ab-2ac2ea9fcaf3","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-08 15:18:35 +0000 UTC FinishedAt: 2026-09-08 15:18:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowttf6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"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":["rds_ib_cm_connect_complete","rds_rdma_cm_event_handler_cmn","rds_ib_cm_handle_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"2c6cb100-29a7-4679-83ab-2ac2ea9fcaf3","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-08 15:18:35 +0000 UTC FinishedAt: 2026-09-08 15:18:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowttf6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"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":["rds_ib_cm_connect_complete","rds_rdma_cm_event_handler_cmn","rds_ib_cm_handle_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"2c6cb100-29a7-4679-83ab-2ac2ea9fcaf3","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-08 15:18:35 +0000 UTC FinishedAt: 2026-09-08 15:18:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowttf6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"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":["rds_ib_cm_connect_complete","rds_rdma_cm_event_handler_cmn","rds_ib_cm_handle_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"2c6cb100-29a7-4679-83ab-2ac2ea9fcaf3","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-08 15:18:35 +0000 UTC FinishedAt: 2026-09-08 15:18:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"2c6cb100-29a7-4679-83ab-2ac2ea9fcaf3","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-workflowttf6w/series-workflowttf6w-convert-artifact-3956248440/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowttf6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"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":["rds_ib_cm_connect_complete","rds_rdma_cm_event_handler_cmn","rds_ib_cm_handle_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"2c6cb100-29a7-4679-83ab-2ac2ea9fcaf3","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-08 15:18:45 +0000 UTC FinishedAt: 2026-09-08 15:20:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowttf6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"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":["rds_ib_cm_connect_complete","rds_rdma_cm_event_handler_cmn","rds_ib_cm_handle_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"2c6cb100-29a7-4679-83ab-2ac2ea9fcaf3","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-08 15:18:45 +0000 UTC FinishedAt: 2026-09-08 15:20:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*32aea367-28e3-4245-801b-603e7c6d7a89,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-workflowttf6w/series-workflowttf6w-build-action-1516209107/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-workflowttf6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"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":["rds_ib_cm_connect_complete","rds_rdma_cm_event_handler_cmn","rds_ib_cm_handle_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"2c6cb100-29a7-4679-83ab-2ac2ea9fcaf3","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-08 15:20:54 +0000 UTC FinishedAt: 2026-09-08 15:20:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowttf6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"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":["rds_ib_cm_connect_complete","rds_rdma_cm_event_handler_cmn","rds_ib_cm_handle_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"2c6cb100-29a7-4679-83ab-2ac2ea9fcaf3","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-08 15:20:54 +0000 UTC FinishedAt: 2026-09-08 15:20:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowttf6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"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":["rds_ib_cm_connect_complete","rds_rdma_cm_event_handler_cmn","rds_ib_cm_handle_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"2c6cb100-29a7-4679-83ab-2ac2ea9fcaf3","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-08 15:20:54 +0000 UTC FinishedAt: 2026-09-08 15:40:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowttf6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"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":["rds_ib_cm_connect_complete","rds_rdma_cm_event_handler_cmn","rds_ib_cm_handle_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"2c6cb100-29a7-4679-83ab-2ac2ea9fcaf3","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-08 15:20:54 +0000 UTC FinishedAt: 2026-09-08 15:40:37 +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:*742d5837-e4d6-4948-a677-5c7522090e3c,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-workflowttf6w/series-workflowttf6w-convert-artifact-3956248440/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": "40d3bb57-7bdd-40e3-bdc1-a7e98c4855d8", "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-workflowttf6w/series-workflowttf6w-build-action-1970877540/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowttf6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"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":["rds_ib_cm_connect_complete","rds_rdma_cm_event_handler_cmn","rds_ib_cm_handle_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"2c6cb100-29a7-4679-83ab-2ac2ea9fcaf3","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-08 15:20:54 +0000 UTC FinishedAt: 2026-09-08 15:40:27 +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:*742d5837-e4d6-4948-a677-5c7522090e3c,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-workflowttf6w/series-workflowttf6w-convert-artifact-3956248440/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": "40d3bb57-7bdd-40e3-bdc1-a7e98c4855d8", "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-workflowttf6w/series-workflowttf6w-build-action-1970877540/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowttf6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"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":["rds_ib_cm_connect_complete","rds_rdma_cm_event_handler_cmn","rds_ib_cm_handle_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"2c6cb100-29a7-4679-83ab-2ac2ea9fcaf3","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-08 15:40:37 +0000 UTC FinishedAt: 2026-09-08 15:40:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowttf6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"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":["rds_ib_cm_connect_complete","rds_rdma_cm_event_handler_cmn","rds_ib_cm_handle_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"2c6cb100-29a7-4679-83ab-2ac2ea9fcaf3","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-08 15:40:37 +0000 UTC FinishedAt: 2026-09-08 15:40:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowttf6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"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":["rds_ib_cm_connect_complete","rds_rdma_cm_event_handler_cmn","rds_ib_cm_handle_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"2c6cb100-29a7-4679-83ab-2ac2ea9fcaf3","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-08 15:40:37 +0000 UTC FinishedAt: 2026-09-08 15:42:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowttf6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"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":["rds_ib_cm_connect_complete","rds_rdma_cm_event_handler_cmn","rds_ib_cm_handle_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"2c6cb100-29a7-4679-83ab-2ac2ea9fcaf3","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-08 15:40:37 +0000 UTC FinishedAt: 2026-09-08 15:42:30 +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:*40d3bb57-7bdd-40e3-bdc1-a7e98c4855d8,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-workflowttf6w/series-workflowttf6w-build-action-1970877540/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-workflowttf6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"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":["rds_ib_cm_connect_complete","rds_rdma_cm_event_handler_cmn","rds_ib_cm_handle_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"2c6cb100-29a7-4679-83ab-2ac2ea9fcaf3","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-08 15:42:40 +0000 UTC FinishedAt: 2026-09-08 15:45:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowttf6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"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":["rds_ib_cm_connect_complete","rds_rdma_cm_event_handler_cmn","rds_ib_cm_handle_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"2c6cb100-29a7-4679-83ab-2ac2ea9fcaf3","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-08 15:42:40 +0000 UTC FinishedAt: 2026-09-08 15:45:11 +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":["rds_ib_cm_connect_complete","rds_rdma_cm_event_handler_cmn","rds_ib_cm_handle_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:*32aea367-28e3-4245-801b-603e7c6d7a89,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*40d3bb57-7bdd-40e3-bdc1-a7e98c4855d8,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-workflowttf6w/series-workflowttf6w-build-action-1516209107/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-workflowttf6w/series-workflowttf6w-build-action-1970877540/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowttf6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"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":["rds_ib_cm_connect_complete","rds_rdma_cm_event_handler_cmn","rds_ib_cm_handle_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"2c6cb100-29a7-4679-83ab-2ac2ea9fcaf3","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-08 15:42:40 +0000 UTC FinishedAt: 2026-09-08 15:42:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowttf6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"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":["rds_ib_cm_connect_complete","rds_rdma_cm_event_handler_cmn","rds_ib_cm_handle_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"2c6cb100-29a7-4679-83ab-2ac2ea9fcaf3","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-08 15:42:40 +0000 UTC FinishedAt: 2026-09-08 15:42:44 +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":["rds_ib_cm_connect_complete","rds_rdma_cm_event_handler_cmn","rds_ib_cm_handle_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-workflowttf6w/series-workflowttf6w-convert-artifact-3524485841/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowttf6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"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":["rds_ib_cm_connect_complete","rds_rdma_cm_event_handler_cmn","rds_ib_cm_handle_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"2c6cb100-29a7-4679-83ab-2ac2ea9fcaf3","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-08 15:42:40 +0000 UTC FinishedAt: 2026-09-08 15:42:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowttf6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"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":["rds_ib_cm_connect_complete","rds_rdma_cm_event_handler_cmn","rds_ib_cm_handle_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"2c6cb100-29a7-4679-83ab-2ac2ea9fcaf3","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-08 15:42:40 +0000 UTC FinishedAt: 2026-09-08 15:42:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowttf6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"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":["rds_ib_cm_connect_complete","rds_rdma_cm_event_handler_cmn","rds_ib_cm_handle_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"2c6cb100-29a7-4679-83ab-2ac2ea9fcaf3","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-08 15:42:40 +0000 UTC FinishedAt: 2026-09-08 15:42:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowttf6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"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":["rds_ib_cm_connect_complete","rds_rdma_cm_event_handler_cmn","rds_ib_cm_handle_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"2c6cb100-29a7-4679-83ab-2ac2ea9fcaf3","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-08 15:42:50 +0000 UTC FinishedAt: 2026-09-08 15:45:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowttf6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"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":["rds_ib_cm_connect_complete","rds_rdma_cm_event_handler_cmn","rds_ib_cm_handle_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"2c6cb100-29a7-4679-83ab-2ac2ea9fcaf3","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-08 15:42:50 +0000 UTC FinishedAt: 2026-09-08 15:44:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*32aea367-28e3-4245-801b-603e7c6d7a89,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*40d3bb57-7bdd-40e3-bdc1-a7e98c4855d8,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-workflowttf6w/series-workflowttf6w-build-action-1516209107/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-workflowttf6w/series-workflowttf6w-build-action-1970877540/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-workflowttf6w/series-workflowttf6w-convert-artifact-3524485841/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,}