Name: series-workflowtr92m Phase: Succeeded StartedAt: 2026-08-31 14:37:42 +0000 UTC FinishedAt: 2026-08-31 19:56:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtr92m[0] Phase: Succeeded StartedAt: 2026-08-31 14:37:42 +0000 UTC FinishedAt: 2026-08-31 16:12:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtr92m[0].run-triage Phase: Succeeded StartedAt: 2026-08-31 14:37:42 +0000 UTC FinishedAt: 2026-08-31 16:12:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "dd6f4ef6f8a37412909ad787c837332fb070159c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "CFG80211_WEXT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "dd6f4ef6f8a37412909ad787c837332fb070159c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "CFG80211_WEXT" ], "series_id": "4e2a446a-795c-417b-8bc0-b3853fc649c8" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "cfg80211_wext_siwgenie" ], "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+CgkJCTx0ZD4yMDI2LzA4LzMxIDE1OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NTBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMV9XRVhUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2ZnODAyMTFfd2V4dF9zaXdnZW5pZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgaW5wdXQgdmFsaWRhdGlvbiB0byBjZmc4MDIxMV93ZXh0X3Npd2dlbmllKCkgYnkgaXRlcmF0aW5nIG92ZXIgYW5kIHZlcmlmeWluZyB0aGUgc3RydWN0dXJlIG9mIHVzZXItcHJvdmlkZWQgSUVFRSA4MDIuMTEgSW5mb3JtYXRpb24gRWxlbWVudHMgKElFcykgdXNpbmcgZm9yX2VhY2hfZWxlbWVudCgpIGFuZCBmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZCgpLiBJZiB0aGUgZWxlbWVudHMgYXJlIG1hbGZvcm1lZCwgaXQgcmV0dXJucyAtRUlOVkFMIGJlZm9yZSBhbGxvY2F0aW5nIGFuZCBzYXZpbmcgdGhlIElFIGJ1ZmZlci5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MsIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlIGxvb3AgaXRlcmF0b3IgdmFyaWFibGUgYGVsZW1gIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIGJ5IHRoZSBgZm9yX2VhY2hfZWxlbWVudGAgbWFjcm8sIGFuZCB0aGUgaW5wdXQgYnVmZmVyIGNvbnRhaW5zIGRhdGEgY29waWVkIGZyb20gdXNlciBzcGFjZS4gUG90ZW50aWFsIGJ1Z3MgYWRkcmVzc2VkIG9yIHRvdWNoZWQgYnkgdGhpcyBsb2dpYyAoc3VjaCBhcyBtYWxmb3JtZWQgVExWIHBhcnNpbmcgbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIHJlYWRzKSBmYWxsIHVuZGVyIEtBU0FOJiMzOTtzIHB1cnZpZXcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBpbnB1dCB2YWxpZGF0aW9uIGZvciB3aXJlbGVzcyBpbmZvcm1hdGlvbiBlbGVtZW50cyAoSUVzKSBwYXNzZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBTSU9DU0lXR0VOSUUgd2lyZWxlc3MgZXh0ZW5zaW9uIGlvY3RsLiBJdCBpdGVyYXRlcyB0aHJvdWdoIHRoZSBlbGVtZW50IGJ1ZmZlciB1c2luZyBmb3JfZWFjaF9lbGVtZW50KCkgYW5kIHZhbGlkYXRlcyBjb21wbGV0aW9uIHdpdGggZm9yX2VhY2hfZWxlbWVudF9jb21wbGV0ZWQoKSBiZWZvcmUgY29weWluZyB0aGUgYnVmZmVyLCByZWplY3RpbmcgbWFsZm9ybWVkIGVsZW1lbnRzIHdpdGggLUVJTlZBTC4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0d29yayB3aXJlbGVzcyBjb3JlIGNvZGUgdGhhdCBjYW4gYmUgdGVzdGVkIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzIChlLmcuIHVzaW5nIG1hYzgwMjExX2h3c2ltKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNToyMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDcyNzI0OTU2YzQxYTVmMTJhOGY2MDk3MTJmZWZlMjMzMTY5NzY3ZGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxNToyMTo1OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuYyBiL25ldC93aXJlbGVzcy93ZXh0LXNtZS5jXG5pbmRleCA1NzNiNmIxNWE0NDZlLi5iNTkxNGYzNjU4ZGI0IDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL3dleHQtc21lLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy93ZXh0LXNtZS5jXG5AQCAtMzE5LDYgJiM0MzszMTksMTUgQEAgaW50IGNmZzgwMjExX3dleHRfc2l3Z2VuaWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRpZiAoaWVfbGVuKSB7XG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgZWxlbWVudCAqZWxlbTtcbiYjNDM7XG4mIzQzO1x0XHRmb3JfZWFjaF9lbGVtZW50KGVsZW0sIGV4dHJhLCBpZV9sZW4pIHtcbiYjNDM7XHRcdFx0Lyogbm90aGluZyAqL1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmICghZm9yX2VhY2hfZWxlbWVudF9jb21wbGV0ZWQoZWxlbSwgZXh0cmEsIGllX2xlbikpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiBcdFx0aWUgPSBrbWVtZHVwKGV4dHJhLCBpZV9sZW4sIEdGUF9LRVJORUwpO1xuIFx0XHRpZiAoIWllKVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE1OjIyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjM1bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMV9XRVhUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2ZnODAyMTFfd2V4dF9zaXdnZW5pZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGlucHV0IHZhbGlkYXRpb24gZm9yIHdpcmVsZXNzIGluZm9ybWF0aW9uIGVsZW1lbnRzIChJRXMpIHBhc3NlZCBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIFNJT0NTSVdHRU5JRSB3aXJlbGVzcyBleHRlbnNpb24gaW9jdGwuIEl0IGl0ZXJhdGVzIHRocm91Z2ggdGhlIGVsZW1lbnQgYnVmZmVyIHVzaW5nIGZvcl9lYWNoX2VsZW1lbnQoKSBhbmQgdmFsaWRhdGVzIGNvbXBsZXRpb24gd2l0aCBmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZCgpIGJlZm9yZSBjb3B5aW5nIHRoZSBidWZmZXIsIHJlamVjdGluZyBtYWxmb3JtZWQgZWxlbWVudHMgd2l0aCAtRUlOVkFMLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JrIHdpcmVsZXNzIGNvcmUgY29kZSB0aGF0IGNhbiBiZSB0ZXN0ZWQgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMgKGUuZy4gdXNpbmcgbWFjODAyMTFfaHdzaW0pLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzI3MjQ5NTZjNDFhNWYxMmE4ZjYwOTcxMmZlZmUyMzMxNjk3NjdkZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDE1OjIxOjU5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3dleHQtc21lLmMgYi9uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuYwppbmRleCA1NzNiNmIxNWE0NDZlLi5iNTkxNGYzNjU4ZGI0IDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuYwpAQCAtMzE5LDYgJiM0MzszMTksMTUgQEAgaW50IGNmZzgwMjExX3dleHRfc2l3Z2VuaWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJcmV0dXJuIDA7CiAKIAlpZiAoaWVfbGVuKSB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgZWxlbWVudCAqZWxlbTsKJiM0MzsKJiM0MzsJCWZvcl9lYWNoX2VsZW1lbnQoZWxlbSwgZXh0cmEsIGllX2xlbikgewomIzQzOwkJCS8qIG5vdGhpbmcgKi8KJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmICghZm9yX2VhY2hfZWxlbWVudF9jb21wbGV0ZWQoZWxlbSwgZXh0cmEsIGllX2xlbikpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJCWllID0ga21lbWR1cChleHRyYSwgaWVfbGVuLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFpZSkKIAkJCXJldHVybiAtRU5PTUVNOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTMyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQcm9wb3NlZCBDb2RlIENoYW5nZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGRpZmYgYW5kIHRoZSBjb2RlYmFzZS4gSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlIHRvdWNoZXMgYG5ldC93aXJlbGVzcy93ZXh0LXNtZS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZWAgZnVuY3Rpb24uIEFscmlnaHQsIHRoYXQgdGVsbHMgbWUgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UsIGJ1dCBJIG5lZWQgdGhlIGNvbnRleHQuCgpMZXQmIzM5O3Mgc3RhcnQgYnkgZ2V0dGluZyBhIGNvcHkgb2YgYG5ldC93aXJlbGVzcy93ZXh0LXNtZS5jYCBhbmQgZmlndXJpbmcgb3V0IHdoYXQmIzM5O3MgY2FsbGluZyBpdCwgYW5kIGFsc28gdGhlIGNvbmZpZyBkZXBlbmRlbmNpZXMuIEkmIzM5O2xsIHByb2JhYmx5IHVzZSBgcmVhZC1maWxlYCB0byBncmFiIHRoZSBzb3VyY2UgY29kZSwgYW5kIHRoZW4gYGdyZXBwZXJgIHRvIHNlZSB3aGVyZSBlbHNlIGl0JiMzOTtzIHVzZWQgYW5kIHdoYXQgS2NvbmZpZyBvcHRpb25zIGFyZSByZWxldmFudC4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IGFuZCB3aHkgdGhpcyBzcGVjaWZpYyBzZWN0aW9uIG5lZWRlZCB0aGUgY2hhbmdlLCBhbmQgYW55IGVkZ2UgY2FzZXMgdG8gd2F0Y2ggZm9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE1OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL3dleHQtc21lLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMwMDpcdFx0XHRcdCAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKVxuIDMwMTpcdHtcbiAzMDI6XHRcdHN0cnVjdCBpd19wb2ludCAqZGF0YSA9IFx1MDAyNndycXUtXHUwMDNlZGF0YTtcbiAzMDM6XHRcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtXHUwMDNlaWVlZTgwMjExX3B0cjtcbiAzMDQ6XHRcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX3JkZXYod2Rldi1cdTAwM2V3aXBoeSk7XG4gMzA1Olx0XHRpbnQgaWVfbGVuID0gZGF0YS1cdTAwM2VsZW5ndGg7XG4gMzA2Olx0XHR1OCAqaWUgPSBleHRyYTtcbiAzMDc6XHRcbiAzMDg6XHRcdGlmICh3ZGV2LVx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKVxuIDMwOTpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gMzEwOlx0XG4gMzExOlx0XHRpZiAoIWllX2xlbilcbiAzMTI6XHRcdFx0aWUgPSBOVUxMO1xuIDMxMzpcdFxuIDMxNDpcdFx0Z3VhcmQod2lwaHkpKHdkZXYtXHUwMDNld2lwaHkpO1xuIDMxNTpcdFxuIDMxNjpcdFx0Lyogbm8gY2hhbmdlICovXG4gMzE3Olx0XHRpZiAod2Rldi1cdTAwM2V3ZXh0LmllX2xlbiA9PSBpZV9sZW4gXHUwMDI2XHUwMDI2XG4gMzE4Olx0XHQgICAgbWVtY21wKHdkZXYtXHUwMDNld2V4dC5pZSwgaWUsIGllX2xlbikgPT0gMClcbiAzMTk6XHRcdFx0cmV0dXJuIDA7XG4gMzIwOlx0XG4gMzIxOlx0XHRpZiAoaWVfbGVuKSB7XG4gMzIyOlx0XHRcdGNvbnN0IHN0cnVjdCBlbGVtZW50ICplbGVtO1xuIDMyMzpcdFxuIDMyNDpcdFx0XHRmb3JfZWFjaF9lbGVtZW50KGVsZW0sIGV4dHJhLCBpZV9sZW4pIHtcbiAzMjU6XHRcdFx0XHQvKiBub3RoaW5nICovXG4gMzI2Olx0XHRcdH1cbiAzMjc6XHRcbiAzMjg6XHRcdFx0aWYgKCFmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZChlbGVtLCBleHRyYSwgaWVfbGVuKSlcbiAzMjk6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAzMzA6XHRcbiAzMzE6XHRcdFx0aWUgPSBrbWVtZHVwKGV4dHJhLCBpZV9sZW4sIEdGUF9LRVJORUwpO1xuIDMzMjpcdFx0XHRpZiAoIWllKVxuIDMzMzpcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDMzNDpcdFx0fSBlbHNlIHtcbiAzMzU6XHRcdFx0aWUgPSBOVUxMO1xuIDMzNjpcdFx0fVxuIDMzNzpcdFxuIDMzODpcdFx0a2ZyZWUod2Rldi1cdTAwM2V3ZXh0LmllKTtcbiAzMzk6XHRcdHdkZXYtXHUwMDNld2V4dC5pZSA9IGllO1xuIDM0MDpcdFx0d2Rldi1cdTAwM2V3ZXh0LmllX2xlbiA9IGllX2xlbjtcbiAzNDE6XHRcbiAzNDI6XHRcdGlmICh3ZGV2LVx1MDAzZWNvbm4pXG4gMzQzOlx0XHRcdHJldHVybiBjZmc4MDIxMV9kaXNjb25uZWN0KHJkZXYsIGRldixcbiAzNDQ6XHRcdFx0XHRcdFx0ICAgV0xBTl9SRUFTT05fREVBVVRIX0xFQVZJTkcsIGZhbHNlKTtcbiAzNDU6XHRcbiAzNDY6XHRcdC8qIHVzZXJzcGFjZSBiZXR0ZXIgbm90IHRoaW5rIHdlJiMzOTtsbCByZWNvbm5lY3QgKi9cbiAzNDc6XHRcdHJldHVybiAwO1xuIDM0ODpcdH1cbiAzNDk6XHRcbiAzNTA6XHRpbnQgY2ZnODAyMTFfd2V4dF9zaXdtbG1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gMzUxOlx0XHRcdFx0ICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLFxuIDM1MjpcdFx0XHRcdCAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpXG4gMzUzOlx0e1xuIDM1NDpcdFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi1cdTAwM2VpZWVlODAyMTFfcHRyO1xuIDM1NTpcdFx0c3RydWN0IGl3X21sbWUgKm1sbWUgPSAoc3RydWN0IGl3X21sbWUgKilleHRyYTtcbiAzNTY6XHRcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjtcbiAzNTc6XHRcbiAzNTg6XHRcdGlmICghd2RldilcbiAzNTk6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE1OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNjQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBDb21waWxhdGlvbiBvZiBgbmV0L3dpcmVsZXNzL3dleHQtc21lLmNgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgYG5ldC93aXJlbGVzcy93ZXh0LXNtZS5jYCBpcyBiZWluZyBjb21waWxlZCBhbmQgd2hhdCBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlIGltcGFjdGluZyBpdHMgYnVpbGQgcHJvY2Vzcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBidWlsZCBzeXN0ZW0gaXRzZWxmLiBJJiMzOTtsbCBuZWVkIHRvIGxvY2F0ZSB0aGUgcmVsZXZhbnQgTWFrZWZpbGVzIOKAkyBzdGFydGluZyB3aXRoaW4gdGhlIGBuZXQvd2lyZWxlc3MvYCBkaXJlY3Rvcnkgc2VlbXMgbG9naWNhbC4gSSYjMzk7bGwgYWxzbyBuZWVkIHRvIGNoZWNrIHRoZSBhc3NvY2lhdGVkIGBLY29uZmlnYCBmaWxlczsgdGhhdCYjMzk7cyB3aGVyZSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGdvdmVybiBpdHMgY29tcGlsYXRpb24gd2lsbCByZXNpZGUuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE1OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dleHQtc21lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9NYWtlZmlsZT0xMz1jZmc4MDIxMS0kKENPTkZJR19DRkc4MDIxMV9ERUJVR0ZTKSAmIzQzOz0gZGVidWdmcy5vXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU6MTQ6Y2ZnODAyMTEtJChDT05GSUdfQ0ZHODAyMTFfV0VYVCkgJiM0Mzs9IHdleHQtY29tcGF0Lm8gd2V4dC1zbWUub1xubmV0L3dpcmVsZXNzL01ha2VmaWxlLTE1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE1OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NzkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipOYXZpZ2F0aW5nIHRoZSBXaXJlbGVzcyBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBDT05GSUdfQ0ZHODAyMTFfV0VYVGAgYW5kIGBDT05GSUdfQ0ZHODAyMTFgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgYG5ldC93aXJlbGVzcy9LY29uZmlnYC4gSXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBpbnRyaWNhY2llcyBvZiB3aXJlbGVzcyBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLiBUaGF0IGBLY29uZmlnYCBmaWxlIHNob3VsZCBob2xkIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhvc2UgZmxhZ3MgYXJlIHJlbGF0ZWQgYW5kIHdoYXQgZWxzZSB0aGV5IG1pZ2h0IGRlcGVuZCBvbi4gSG9wZWZ1bGx5LCBpdCYjMzk7cyBhbGwgc3RyYWlnaHRmb3J3YXJkLCBhbmQgSSBjYW4gcXVpY2tseSBtYXAgb3V0IHRoZSBuZWNlc3NhcnkgcmVsYXRpb25zaGlwcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDRkc4MDIxMV9XRVhUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9LY29uZmlnPTU9Y29uZmlnIFdFWFRfQ09SRVxubmV0L3dpcmVsZXNzL0tjb25maWctNi1cdGRlZl9ib29sIHlcbm5ldC93aXJlbGVzcy9LY29uZmlnOjc6XHRkZXBlbmRzIG9uIENGRzgwMjExX1dFWFQgfHwgV0lSRUxFU1NfRVhUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy04LVxuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnPTE3Nz1jb25maWcgQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTg2LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTg3OmNvbmZpZyBDRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODgtXHRib29sIFwmIzM0O2NmZzgwMjExIHdpcmVsZXNzIGV4dGVuc2lvbnMgY29tcGF0aWJpbGl0eVwmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9NYWtlZmlsZT0xMz1jZmc4MDIxMS0kKENPTkZJR19DRkc4MDIxMV9ERUJVR0ZTKSAmIzQzOz0gZGVidWdmcy5vXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU6MTQ6Y2ZnODAyMTEtJChDT05GSUdfQ0ZHODAyMTFfV0VYVCkgJiM0Mzs9IHdleHQtY29tcGF0Lm8gd2V4dC1zbWUub1xubmV0L3dpcmVsZXNzL01ha2VmaWxlLTE1LVxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmM9NTQ2PXN0cnVjdCB3aXBoeSAqd2lwaHlfbmV3X25tKGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9vcHMgKm9wcywgaW50IHNpemVvZl9wcml2LFxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtNjMzLVx0XHRcdCAgY2ZnODAyMTFfZGZzX2NoYW5uZWxzX3VwZGF0ZV93b3JrKTtcbm5ldC93aXJlbGVzcy9jb3JlLmM6NjM0OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL2NvcmUuYy02MzUtXHRyZGV2LVx1MDAzZXdpcGh5LndleHQgPSBcdTAwMjZjZmc4MDIxMV93ZXh0X2hhbmRsZXI7XG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYz0xNDA0PXN0YXRpYyB2b2lkIF9jZmc4MDIxMV91bnJlZ2lzdGVyX3dkZXYoc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE0NDMtXG5uZXQvd2lyZWxlc3MvY29yZS5jOjE0NDQ6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE0NDUtXHRrZnJlZV9zZW5zaXRpdmUod2Rldi1cdTAwM2V3ZXh0LmtleXMpO1xuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmM9MTQ5OD12b2lkIGNmZzgwMjExX2xlYXZlX2xvY2tlZChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNTIyLVxubmV0L3dpcmVsZXNzL2NvcmUuYzoxNTIzOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNTI0LVx0XHRrZnJlZSh3ZGV2LVx1MDAzZXdleHQuaWUpO1xuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmM9MTYwOT12b2lkIGNmZzgwMjExX2luaXRfd2RldihzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtMTYxNy1cbm5ldC93aXJlbGVzcy9jb3JlLmM6MTYxODojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTYxOS1cdHdkZXYtXHUwMDNld2V4dC5kZWZhdWx0X2tleSA9IC0xO1xuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmM9MTcwMj1zdGF0aWMgaW50IGNmZzgwMjExX25ldGRldl9ub3RpZmllcl9jYWxsKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNzc2LVx0XHRzd2l0Y2ggKHdkZXYtXHUwMDNlaWZ0eXBlKSB7XG5uZXQvd2lyZWxlc3MvY29yZS5jOjE3Nzc6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE3NzgtXHRcdGNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6XG4tLVxubmV0L3dpcmVsZXNzL2lic3MuYz0xOT12b2lkIF9fY2ZnODAyMTFfaWJzc19qb2luZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJzc2lkLFxuLS1cbm5ldC93aXJlbGVzcy9pYnNzLmMtMjMtXHRzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3M7XG5uZXQvd2lyZWxlc3MvaWJzcy5jOjI0OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL2lic3MuYy0yNS1cdHVuaW9uIGl3cmVxX2RhdGEgd3JxdTtcbi0tXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTUxLVx0XHRcdFx0R0ZQX0tFUk5FTCk7XG5uZXQvd2lyZWxlc3MvaWJzcy5jOjUyOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL2lic3MuYy01My1cdG1lbXNldChcdTAwMjZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpO1xuLS1cbm5ldC93aXJlbGVzcy9pYnNzLmM9ODc9aW50IF9fY2ZnODAyMTFfam9pbl9pYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTE0MC1cbm5ldC93aXJlbGVzcy9pYnNzLmM6MTQxOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL2lic3MuYy0xNDItXHR3ZGV2LVx1MDAzZXdleHQuaWJzcy5jaGFuZGVmID0gcGFyYW1zLVx1MDAzZWNoYW5kZWY7XG4tLVxubmV0L3dpcmVsZXNzL2lic3MuYz0xNTY9dm9pZCBjZmc4MDIxMV9jbGVhcl9pYnNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgbm93ZXh0KVxuLS1cbm5ldC93aXJlbGVzcy9pYnNzLmMtMTg0LVx0bWVtc2V0KFx1MDAyNndkZXYtXHUwMDNldS5pYnNzLmNoYW5kZWYsIDAsIHNpemVvZih3ZGV2LVx1MDAzZXUuaWJzcy5jaGFuZGVmKSk7XG5uZXQvd2lyZWxlc3MvaWJzcy5jOjE4NTojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9pYnNzLmMtMTg2LVx0aWYgKCFub3dleHQpXG4tLVxubmV0L3dpcmVsZXNzL2lic3MuYz0xOTI9aW50IGNmZzgwMjExX2xlYXZlX2lic3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9pYnNzLmMtMjEzLVxubmV0L3dpcmVsZXNzL2lic3MuYzoyMTQ6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTIxNS1pbnQgY2ZnODAyMTFfaWJzc193ZXh0X2pvaW4oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9tbG1lLmM9MjM0PXZvaWQgY2ZnODAyMTFfbWljaGFlbF9taWNfZmFpbHVyZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkcixcbi0tXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTIzOS1cdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX3JkZXYod2lwaHkpO1xubmV0L3dpcmVsZXNzL21sbWUuYzoyNDA6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTI0MS1cdHVuaW9uIGl3cmVxX2RhdGEgd3JxdTtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTU0NTk9c3RhdGljIGludCBubDgwMjExX3NldF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTU1MDEtXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjU1MDI6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTU1MDMtXHRcdHdkZXYtXHUwMDNld2V4dC5kZWZhdWx0X2tleSA9IGtleS5pZHg7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01NTI0LVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo1NTI1OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01NTI2LVx0XHR3ZGV2LVx1MDAzZXdleHQuZGVmYXVsdF9tZ210X2tleSA9IGtleS5pZHg7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz01NjM3PXN0YXRpYyBpbnQgbmw4MDIxMV9kZWxfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01Njg2LVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo1Njg3OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01Njg4LVx0aWYgKCFlcnIpIHtcbi0tXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jPTExMTQ9dm9pZCBfX19jZmc4MDIxMV9zY2FuX2RvbmUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9zY2FuLmMtMTExOS1cdHN0cnVjdCBza19idWZmICptc2c7XG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjExMjA6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTExMjEtXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XG4tLVxubmV0L3dpcmVsZXNzL3NjYW4uYy0xMTYyLVxubmV0L3dpcmVsZXNzL3NjYW4uYzoxMTYzOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL3NjYW4uYy0xMTY0LVx0aWYgKHdkZXYtXHUwMDNlbmV0ZGV2IFx1MDAyNlx1MDAyNiAhcmVxdWVzdC1cdTAwM2VpbmZvLmFib3J0ZWQpIHtcbi0tXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jPTM0MTQ9dm9pZCBjZmc4MDIxMV91cGRhdGVfYXNzb2NfYnNzX2VudHJ5KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tLVxubmV0L3dpcmVsZXNzL3NjYW4uYy0zNDg3LVxubmV0L3dpcmVsZXNzL3NjYW4uYzozNDg4OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL3NjYW4uYy0zNDg5LXN0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKlxuLS1cbm5ldC93aXJlbGVzcy9zbWUuYz03MzU9dm9pZCBfX2NmZzgwMjExX2Nvbm5lY3RfcmVzdWx0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L3dpcmVsZXNzL3NtZS5jLTc0My1cdHU4IGNvdW50cnlfZGF0YWxlbjtcbm5ldC93aXJlbGVzcy9zbWUuYzo3NDQ6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3Mvc21lLmMtNzQ1LVx0dW5pb24gaXdyZXFfZGF0YSB3cnF1O1xuLS1cbm5ldC93aXJlbGVzcy9zbWUuYy03NzQtXG5uZXQvd2lyZWxlc3Mvc21lLmM6Nzc1OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL3NtZS5jLTc3Ni1cdGlmICh3ZXh0ZXYgXHUwMDI2XHUwMDI2ICFjci1cdTAwM2V2YWxpZF9saW5rcykge1xuLS1cbm5ldC93aXJlbGVzcy9zbWUuYz0xMDc5PXZvaWQgX19jZmc4MDIxMV9yb2FtZWQoc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi0tXG5uZXQvd2lyZWxlc3Mvc21lLmMtMTA4MS17XG5uZXQvd2lyZWxlc3Mvc21lLmM6MTA4MjojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9zbWUuYy0xMDgzLVx0dW5pb24gaXdyZXFfZGF0YSB3cnF1O1xuLS1cbm5ldC93aXJlbGVzcy9zbWUuYy0xMTM0LVxubmV0L3dpcmVsZXNzL3NtZS5jOjExMzU6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3Mvc21lLmMtMTEzNi1cdGlmICghaW5mby1cdTAwM2V2YWxpZF9saW5rcykge1xuLS1cbm5ldC93aXJlbGVzcy9zbWUuYz0xMzQzPXZvaWQgX19jZmc4MDIxMV9kaXNjb25uZWN0ZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmllLFxuLS1cbm5ldC93aXJlbGVzcy9zbWUuYy0xMzQ4LVx0aW50IGk7XG5uZXQvd2lyZWxlc3Mvc21lLmM6MTM0OTojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9zbWUuYy0xMzUwLVx0dW5pb24gaXdyZXFfZGF0YSB3cnF1O1xuLS1cbm5ldC93aXJlbGVzcy9zbWUuYy0xMzk0LVxubmV0L3dpcmVsZXNzL3NtZS5jOjEzOTU6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3Mvc21lLmMtMTM5Ni1cdG1lbXNldChcdTAwMjZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpO1xuLS1cbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYz02Mzc9RVhQT1JUX1NZTUJPTCh3aXJlbGVzc19zZW5kX2V2ZW50KTtcbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYy02MzgtXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmM6NjM5OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL3dleHQtY29yZS5jLTY0MC1zdGF0aWMgdm9pZCB3aXJlbGVzc193YXJuX2NmZzgwMjExX3dleHQodm9pZClcbi0tXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmM9NjQ5PXN0cnVjdCBpd19zdGF0aXN0aWNzICpnZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmMtNjU2LVxubmV0L3dpcmVsZXNzL3dleHQtY29yZS5jOjY1NzojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYy02NTgtXHRpZiAoZGV2LVx1MDAzZWllZWU4MDIxMV9wdHIgXHUwMDI2XHUwMDI2XG4tLVxubmV0L3dpcmVsZXNzL3dleHQtY29yZS5jPTY5Nz1zdGF0aWMgaXdfaGFuZGxlciBnZXRfaGFuZGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY21kKVxuLS1cbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYy03MDItXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmM6NzAzOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL3dleHQtY29yZS5jLTcwNC1cdGlmIChkZXYtXHUwMDNlaWVlZTgwMjExX3B0ciBcdTAwMjZcdTAwMjYgZGV2LVx1MDAzZWllZWU4MDIxMV9wdHItXHUwMDNld2lwaHkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzAxMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBgQ0ZHODAyMTFfV0VYVGAgRGVwZW5kZW5jaWVzKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIHN1cnJvdW5kaW5nIGBDRkc4MDIxMV9XRVhUYCBpbiB0aGUga2VybmVsJiMzOTtzIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24uIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBuYXZpZ2F0ZSBvdmVyIHRvIGBuZXQvd2lyZWxlc3MvS2NvbmZpZ2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHRha2UgYSBoYXJkIGxvb2sgYXQgdGhlIGBLY29uZmlnYCBmaWxlIGFuZCBtZXRpY3Vsb3VzbHkgdHJhY2UgYWxsIGRlcGVuZGVuY2llcyBhbmQgZGVmYXVsdHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBgQ0ZHODAyMTFfV0VYVGAgc3ltYm9sLiBUaGlzIHdpbGwgcXVpY2tseSBnaXZlIG1lIGFuIG92ZXJ2aWV3IG9mIHRoZSBidWlsZCBzZXR0aW5ncyB0aGF0IGFmZmVjdCB0aGlzLCBhbmQgaWRlbnRpZnkgYW55IGtub2NrLW9uIGVmZmVjdHMgdGhhdCBuZWVkIHRvIGJlIGNvbnNpZGVyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE1OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE4MDpcdFx0aGVscFxuIDE4MTpcdFx0ICBZb3Ugc2hvdWxkIGVuYWJsZSB0aGlzIG9wdGlvbiB1bmxlc3MgeW91IGtub3cgZm9yIHN1cmUgeW91IGhhdmUgbm9cbiAxODI6XHRcdCAgbmVlZCBmb3IgaXQsIGZvciBleGFtcGxlIHdoZW4gdXNpbmcgdGhlIHJlZ3VsYXRvcnkgZGF0YWJhc2UgbG9hZGVkIGFzXG4gMTgzOlx0XHQgIGEgZmlybXdhcmUgZmlsZS5cbiAxODQ6XHRcbiAxODU6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAxODY6XHRcbiAxODc6XHRjb25maWcgQ0ZHODAyMTFfV0VYVFxuIDE4ODpcdFx0Ym9vbCBcJiMzNDtjZmc4MDIxMSB3aXJlbGVzcyBleHRlbnNpb25zIGNvbXBhdGliaWxpdHlcJiMzNDtcbiAxODk6XHRcdHNlbGVjdCBXRVhUX0NPUkVcbiAxOTA6XHRcdGhlbHBcbiAxOTE6XHRcdCAgRW5hYmxlIHRoaXMgb3B0aW9uIGlmIHlvdSBuZWVkIG9sZCB1c2Vyc3BhY2UgZm9yIHdpcmVsZXNzXG4gMTkyOlx0XHQgIGV4dGVuc2lvbnMgd2l0aCBjZmc4MDIxMS1iYXNlZCBkcml2ZXJzLlxuIDE5MzpcdFxuIDE5NDpcdGNvbmZpZyBDRkc4MDIxMV9LVU5JVF9URVNUXG4gMTk1Olx0XHR0cmlzdGF0ZSBcJiMzNDtLVW5pdCB0ZXN0cyBmb3IgY2ZnODAyMTFcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuIDE5NjpcdFx0ZGVwZW5kcyBvbiBLVU5JVFxuIDE5NzpcdFx0ZGVwZW5kcyBvbiBDRkc4MDIxMVxuIDE5ODpcdFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbiAxOTk6XHRcdGhlbHBcbiAyMDA6XHRcdCAgRW5hYmxlIHRoaXMgb3B0aW9uIHRvIHRlc3QgY2ZnODAyMTEgZnVuY3Rpb25zIHdpdGgga3VuaXQuXG4gMjAxOlx0XG4gMjAyOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjAzOlx0XG4gMjA0Olx0ZW5kaWYgIyBDRkc4MDIxMVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjIwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gZGVsdmUgaW50byBgbmV0L3dpcmVsZXNzL0tjb25maWdgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gYWltaW5nIHRvIGdldCBhIGhhbmRsZSBvbiBgQ0ZHODAyMTFgLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBzdGFydCwgYW5kIHdoZXJlIEkmIzM5O20gZ29pbmcgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaW1lIHRvIHNlZSB3aGF0JiMzOTtzIHdoYXQgaW4gdGhlcmUuIFRoaXMgaXMgYSBjb21tb24gc3RhcnRpbmcgcG9pbnQgd2hlbiBjb25maWd1cmluZyB0aGUgd2lyZWxlc3Mgc3RhY2ssIGFuZCB0aGUgb3B0aW9ucyBmb3VuZCBoZXJlIG9mdGVuIGRpY3RhdGUgYSBsb3Qgb2YgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgd2lyZWxlc3Mgc3Vic3lzdGVtcyBJJiMzOTttIHdvcmtpbmcgd2l0aC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE1OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgV0lSRUxFU1NfRVhUXG4gICAzOlx0XHRib29sXG4gICA0Olx0XG4gICA1Olx0Y29uZmlnIFdFWFRfQ09SRVxuICAgNjpcdFx0ZGVmX2Jvb2wgeVxuICAgNzpcdFx0ZGVwZW5kcyBvbiBDRkc4MDIxMV9XRVhUIHx8IFdJUkVMRVNTX0VYVFxuICAgODpcdFxuICAgOTpcdGNvbmZpZyBXRVhUX1BST0NcbiAgMTA6XHRcdGRlZl9ib29sIHlcbiAgMTE6XHRcdGRlcGVuZHMgb24gUFJPQ19GU1xuICAxMjpcdFx0ZGVwZW5kcyBvbiBXRVhUX0NPUkVcbiAgMTM6XHRcbiAgMTQ6XHRjb25maWcgV0VYVF9QUklWXG4gIDE1Olx0XHRib29sXG4gIDE2Olx0XG4gIDE3Olx0Y29uZmlnIENGRzgwMjExXG4gIDE4Olx0XHR0cmlzdGF0ZSBcJiMzNDtjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXCYjMzQ7XG4gIDE5Olx0XHRkZXBlbmRzIG9uIFJGS0lMTCB8fCAhUkZLSUxMXG4gIDIwOlx0XHRzZWxlY3QgRldfTE9BREVSXG4gIDIxOlx0XHRzZWxlY3QgQ1JDMzJcbiAgMjI6XHRcdCMgbWF5IG5lZWQgdG8gdXBkYXRlIHRoaXMgd2hlbiBjZXJ0aWZpY2F0ZXMgYXJlIGNoYW5nZWQgYW5kIGFyZVxuICAyMzpcdFx0IyB1c2luZyBhIGRpZmZlcmVudCBhbGdvcml0aG0sIHRob3VnaCByaWdodCBub3cgdGhleSBzaG91bGRuJiMzOTt0XG4gIDI0Olx0XHQjICh0aGlzIGlzIGhlcmUgcmF0aGVyIHRoYW4gYmVsb3cgdG8gYWxsb3cgaXQgdG8gYmUgYSBtb2R1bGUpXG4gIDI1Olx0XHRzZWxlY3QgQ1JZUFRPX1NIQTI1NiBpZiBDRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcbiAgMjY6XHRcdGhlbHBcbiAgMjc6XHRcdCAgY2ZnODAyMTEgaXMgdGhlIExpbnV4IHdpcmVsZXNzIExBTiAoODAyLjExKSBjb25maWd1cmF0aW9uIEFQSS5cbiAgMjg6XHRcdCAgRW5hYmxlIHRoaXMgaWYgeW91IGhhdmUgYSB3aXJlbGVzcyBkZXZpY2UuXG4gIDI5Olx0XG4gIDMwOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIHJlZmVyIHRvIGRvY3VtZW50YXRpb24gb24gdGhlIHdpcmVsZXNzIHdpa2k6XG4gIDMxOlx0XG4gIDMyOlx0XHQgIGh0dHBzOi8vd2lyZWxlc3Mud2lraS5rZXJuZWwub3JnL2VuL2RldmVsb3BlcnMvRG9jdW1lbnRhdGlvbi9jZmc4MDIxMVxuICAzMzpcdFxuICAzNDpcdFx0ICBXaGVuIGJ1aWx0IGFzIGEgbW9kdWxlIGl0IHdpbGwgYmUgY2FsbGVkIGNmZzgwMjExLlxuICAzNTpcdFxuICAzNjpcdGlmIENGRzgwMjExXG4gIDM3Olx0XG4gIDM4Olx0Y29uZmlnIE5MODAyMTFfVEVTVE1PREVcbiAgMzk6XHRcdGJvb2wgXCYjMzQ7bmw4MDIxMSB0ZXN0bW9kZSBjb21tYW5kXCYjMzQ7XG4gIDQwOlx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE1OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNDgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZWAgRnVuY3Rpb24gQ2FsbCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBjZmc4MDIxMV93ZXh0X3Npd2dlbmllYCBpcyBhY3R1YWxseSB1c2VkLiBJIGtub3cgaXRzIHB1cnBvc2UsIGJ1dCBrbm93aW5nIHRoZSBjb250ZXh0IG9mIGl0cyBjYWxscyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgb3ZlcmFsbCByb2xlIGFuZCBwb3RlbnRpYWwgaW1wYWN0LiBTbywgZmlyc3QgdGhpbmdzIGZpcnN0LCBJJiMzOTttIGdvaW5nIHRvIHJ1biBhIHF1aWNrIHNlYXJjaC4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGluIHRoZSBrZXJuZWwgY29kZSB0aGF0IHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiBpcyBnZXR0aW5nIGNhbGxlZC4gTm8gcG9pbnQgaW4gdHJ5aW5nIHRvIHRyYWNlIHRoZSBsb2dpYyBtYW51YWxseSwgbGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBiaXQgb2YgY29kZSBhcmNoYWVvbG9neS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBncmVwIGNvbW1hbmQgd2lsbCB0dXJuIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjZmc4MDIxMV93ZXh0X3Npd2dlbmllJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jPTE0ODQ9c3RhdGljIGNvbnN0IGl3X2hhbmRsZXIgY2ZnODAyMTFfaGFuZGxlcnNbXSA9IHtcbi0tXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYy0xNTExLVx0SVdfSEFORExFUihTSU9DR0lXUE9XRVIsXHRjZmc4MDIxMV93ZXh0X2dpd3Bvd2VyKSxcbm5ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jOjE1MTI6XHRJV19IQU5ETEVSKFNJT0NTSVdHRU5JRSxcdGNmZzgwMjExX3dleHRfc2l3Z2VuaWUpLFxubmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmMtMTUxMy1cdElXX0hBTkRMRVIoU0lPQ1NJV0FVVEgsXHRcdGNmZzgwMjExX3dleHRfc2l3YXV0aCksXG4tLVxubmV0L3dpcmVsZXNzL3dleHQtY29tcGF0Lmg9NDY9aW50IGNmZzgwMjExX3dleHRfc2l3bWxtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5oLTQ4LVx0XHRcdCAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpO1xubmV0L3dpcmVsZXNzL3dleHQtY29tcGF0Lmg6NDk6aW50IGNmZzgwMjExX3dleHRfc2l3Z2VuaWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5oLTUwLVx0XHRcdCAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sXG4tLVxubmV0L3dpcmVsZXNzL3dleHQtc21lLmM9MjczPWludCBjZmc4MDIxMV9tZ2Rfd2V4dF9naXdhcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC93aXJlbGVzcy93ZXh0LXNtZS5jLTI5Ny1cbm5ldC93aXJlbGVzcy93ZXh0LXNtZS5jOjI5ODppbnQgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L3dpcmVsZXNzL3dleHQtc21lLmMtMjk5LVx0XHRcdCAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE1OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwMzgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZWAgSGFuZGxlciBmb3IgYFNJT0NTSVdHRU5JRWAqKgoKT2theSwgc28gYGNmZzgwMjExX3dleHRfc2l3Z2VuaWVgIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIGhhbmRsaW5nIHRoZSBgU0lPQ1NJV0dFTklFYCBpb2N0bC4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuIEl0JiMzOTtzIHRoZSBzdGFuZGFyZCB3aXJlbGVzcyBleHRlbnNpb25zIGlvY3RsLCB0aGUgb25lIHlvdSYjMzk7ZCBzZW5kIHRocm91Z2ggYSBzb2NrZXQgZmlsZSBkZXNjcmlwdG9yIHdpdGggYGlvY3RsKHNvY2tmZCwgU0lPQ1NJV0dFTklFLCAuLi4pYC4gTmF0dXJhbGx5LCBhbnkgd2lyZWxlc3MgZGV2aWNlIGxldmVyYWdpbmcgYGNmZzgwMjExYCwgbGlrZSB0aGUgYG1hYzgwMjExX2h3c2ltYCBtb2R1bGUgb3IgYSB2aXJ0dWFsaXplZCB3aXJlbGVzcyBkZXZpY2UgaW4gc29tZXRoaW5nIGxpa2Ugc3l6a2FsbGVyIG9yIFFFTVUsIHdvdWxkIHVzZSB0aGlzIGlmIGBDT05GSUdfQ0ZHODAyMTFfV0VYVGAgaXMgZW5hYmxlZC4KCkxldCYjMzk7cyBkaXZlIGludG8gdGhlIHBhdGNoIGFuZCBzZWUgd2hhdCBpdCYjMzk7cyBhY3R1YWxseSBkb2luZyB3aXRoaW4gdGhhdCBgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZSgpYCBmdW5jdGlvbi4gQWgsIGhlcmUgaXQgaXM6IHRoZSBhZGRlZCBjb2RlIGJsb2NrLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHByaW1hcmlseSBmb2N1c2VkIG9uIHZhbGlkYXRpbmcgdGhlIElFIChJbmZvcm1hdGlvbiBFbGVtZW50KSBidWZmZXIgdGhhdCYjMzk7cyBwYXNzZWQgaW4gZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgU0lPQ1NJV0dFTklFYCBpb2N0bC4gSXQmIzM5O3MgdXNpbmcgYGZvcl9lYWNoX2VsZW1lbnQoKWAgYW5kIGBmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZCgpYCB0byBpdGVyYXRlIHRocm91Z2ggdGhlIElFIGJ1ZmZlciwgZW5zdXJpbmcgdGhhdCBpdCYjMzk7cyBhIHdlbGwtZm9ybWVkIGVsZW1lbnQgbGlzdC4gSWYgdGhlIHN0cnVjdHVyZSBpcyBpbnZhbGlkIGF0IGFueSBwb2ludCBkdXJpbmcgaXRlcmF0aW9uLCBpdCByZXR1cm5zIGAtRUlOVkFMYC4gVGhpcyBpcyBhIHByZXR0eSBzdGFuZGFyZCBhcHByb2FjaCBmb3IgcGFyc2luZyBJRSBkYXRhLgoKTm93LCBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgZm9yX2VhY2hfZWxlbWVudGAgaW4gdGhlIGtlcm5lbCBzb3VyY2UgdG8gZ2V0IGEgY29tcGxldGUgZ3Jhc3Agb24gaG93IHRoZXNlIGVsZW1lbnRzIGFyZSBpdGVyYXRlZC4gVGhhdCYjMzk7cyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgdmFsaWRhdGlvbiBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTU6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb3JfZWFjaF9lbGVtZW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODIzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGF0IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIERlZXAgaW50byB0aGUgQ29kZWJhc2U6IFRoZSBgZm9yX2VhY2hfZWxlbWVudGAgUXVlc3QqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O3ZlIGdvdCBhIGZlZWxpbmcgdGhlcmUmIzM5O3Mgc29tZXRoaW5nIGludGVyZXN0aW5nIGx1cmtpbmcgYXJvdW5kIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZm9yX2VhY2hfZWxlbWVudGAuIEl0JiMzOTtzIGEgZmFpcmx5IGNvbW1vbiBjb25zdHJ1Y3QsIGJ1dCBJIHN1c3BlY3QgaXRzIHVzZSBjYXNlcyBtaWdodCBiZSBtb3JlIGRpdmVyc2UgdGhhbiBJIGluaXRpYWxseSB0aG91Z2h0LCBvciBtYXliZSBJJiMzOTttIGxvb2tpbmcgZm9yIGEgc3BlY2lmaWMgdXNhZ2UgcGF0dGVybi4gSSBuZWVkIHRvIGdldCBhIHJlYWxseSBnb29kIG92ZXJ2aWV3IG9mIHdoZXJlIHRoaXMgaXMgdXNlZCB3aXRoaW4gdGhlIHByb2plY3QuIEEgd2lkZSBzZWFyY2ggd2lsbCBnZXQgbWUgdXAtdG8tc3BlZWQuCkxldCYjMzk7cyBjYXN0IGEgd2lkZSBuZXQgYWNyb3NzIHRoZSBlbnRpcmUgY29kZWJhc2UgYW5kIHNlZSB3aGF0IHBvcHMgdXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0cywgdGhlIGRhdGEgdHlwZXMgaXQmIzM5O3Mgb3BlcmF0aW5nIG9uLCBhbmQgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIEZpbmRpbmcgZXZlcnkgaW5zdGFuY2Ugb2YgYGZvcl9lYWNoX2VsZW1lbnRgIGlzIHRoZSBmaXJzdCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIGZvcl9lYWNoX2VsZW1lbnQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9pZWVlODAyMTEuaD0yNzE1PXN0cnVjdCBlbGVtZW50IHtcbi0tXG5pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oLTI3MjEtLyogZWxlbWVudCBpdGVyYXRpb24gaGVscGVycyAqL1xuaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaDoyNzIyOiNkZWZpbmUgZm9yX2VhY2hfZWxlbWVudChfZWxlbSwgX2RhdGEsIF9kYXRhbGVuKVx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oLTI3MjMtXHRmb3IgKF9lbGVtID0gKGNvbnN0IHN0cnVjdCBlbGVtZW50ICopKF9kYXRhKTtcdFx0XHRcXFxuLS1cbmluY2x1ZGUvbGludXgvaWVlZTgwMjExLmgtMjcyOS1cbmluY2x1ZGUvbGludXgvaWVlZTgwMjExLmg6MjczMDojZGVmaW5lIGZvcl9lYWNoX2VsZW1lbnRfaWQoZWxlbWVudCwgX2lkLCBkYXRhLCBkYXRhbGVuKVx0XHRcXFxuaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaC0yNzMxLVx0Zm9yX2VhY2hfZWxlbWVudChlbGVtZW50LCBkYXRhLCBkYXRhbGVuKVx0XHRcdFxcXG4tLVxuaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaC0yNzMzLVxuaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaDoyNzM0OiNkZWZpbmUgZm9yX2VhY2hfZWxlbWVudF9leHRpZChlbGVtZW50LCBleHRpZCwgX2RhdGEsIF9kYXRhbGVuKVx0XHRcXFxuaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaC0yNzM1LVx0Zm9yX2VhY2hfZWxlbWVudChlbGVtZW50LCBfZGF0YSwgX2RhdGFsZW4pXHRcdFx0XFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTU6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzODIKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIElFRUUgODAyLjExIEhlYWRlciBEZWZpbml0aW9ucyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgdGhlIExpbnV4IHdpcmVsZXNzIHN0YWNrLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGRhdGEgc3RydWN0dXJlcyBhc3NvY2lhdGVkIHdpdGggODAyLjExIGZyYW1lcywgc3BlY2lmaWNhbGx5IGFyb3VuZCB3aGVyZSB0aGV5IGhhbmRsZSB0aGUgdmFyaW91cyBlbGVtZW50cy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGluY2x1ZGUvbGludXgvaWVlZTgwMjExLmhgLiAgSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB3aGF0JiMzOTtzIGRlZmluZWQgYXJvdW5kIGxpbmUgMjcyMCwgdGhhdCBhcmVhIHNob3VsZCBob2xkIHNvbWUgcGVydGluZW50IGRlZmluaXRpb25zLCBsaWtlbHkgcmVsYXRlZCB0byBbaW5zZXJ0IHlvdXIgc3BlY2lmaWMgaW50ZXJlc3QgYmFzZWQgb24gZmllbGRdLiBNaWdodCBiZSB1c2VmdWwgdG8gdW5kZXJzdGFuZCBob3cgc3BlY2lmaWMgZnJhbWUgdHlwZXMgb3IgZmllbGQgY29uZmlndXJhdGlvbnMgYXJlIGJlaW5nIHN0b3JlZCBvciBwcm9jZXNzZWQgYXQgdGhhdCBzdGFnZSBvZiB0aGUgc3RhY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE1OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9pZWVlODAyMTEuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjcxNTpcdHN0cnVjdCBlbGVtZW50IHtcbjI3MTY6XHRcdHU4IGlkO1xuMjcxNzpcdFx0dTggZGF0YWxlbjtcbjI3MTg6XHRcdHU4IGRhdGFbXTtcbjI3MTk6XHR9IF9fcGFja2VkO1xuMjcyMDpcdFxuMjcyMTpcdC8qIGVsZW1lbnQgaXRlcmF0aW9uIGhlbHBlcnMgKi9cbjI3MjI6XHQjZGVmaW5lIGZvcl9lYWNoX2VsZW1lbnQoX2VsZW0sIF9kYXRhLCBfZGF0YWxlbilcdFx0XHRcXFxuMjcyMzpcdFx0Zm9yIChfZWxlbSA9IChjb25zdCBzdHJ1Y3QgZWxlbWVudCAqKShfZGF0YSk7XHRcdFx0XFxcbjI3MjQ6XHRcdCAgICAgKGNvbnN0IHU4ICopKF9kYXRhKSAmIzQzOyAoX2RhdGFsZW4pIC0gKGNvbnN0IHU4ICopX2VsZW0gXHUwMDNlPVx0XFxcbjI3MjU6XHRcdFx0KGludClzaXplb2YoKl9lbGVtKSBcdTAwMjZcdTAwMjZcdFx0XHRcdFx0XFxcbjI3MjY6XHRcdCAgICAgKGNvbnN0IHU4ICopKF9kYXRhKSAmIzQzOyAoX2RhdGFsZW4pIC0gKGNvbnN0IHU4ICopX2VsZW0gXHUwMDNlPVx0XFxcbjI3Mjc6XHRcdFx0KGludClzaXplb2YoKl9lbGVtKSAmIzQzOyBfZWxlbS1cdTAwM2VkYXRhbGVuO1x0XHRcdFxcXG4yNzI4Olx0XHQgICAgIF9lbGVtID0gKGNvbnN0IHN0cnVjdCBlbGVtZW50ICopKF9lbGVtLVx1MDAzZWRhdGEgJiM0MzsgX2VsZW0tXHUwMDNlZGF0YWxlbikpXG4yNzI5Olx0XG4yNzMwOlx0I2RlZmluZSBmb3JfZWFjaF9lbGVtZW50X2lkKGVsZW1lbnQsIF9pZCwgZGF0YSwgZGF0YWxlbilcdFx0XFxcbjI3MzE6XHRcdGZvcl9lYWNoX2VsZW1lbnQoZWxlbWVudCwgZGF0YSwgZGF0YWxlbilcdFx0XHRcXFxuMjczMjpcdFx0XHRpZiAoZWxlbWVudC1cdTAwM2VpZCA9PSAoX2lkKSlcbjI3MzM6XHRcbjI3MzQ6XHQjZGVmaW5lIGZvcl9lYWNoX2VsZW1lbnRfZXh0aWQoZWxlbWVudCwgZXh0aWQsIF9kYXRhLCBfZGF0YWxlbilcdFx0XFxcbjI3MzU6XHRcdGZvcl9lYWNoX2VsZW1lbnQoZWxlbWVudCwgX2RhdGEsIF9kYXRhbGVuKVx0XHRcdFxcXG4yNzM2Olx0XHRcdGlmIChlbGVtZW50LVx1MDAzZWlkID09IFdMQU5fRUlEX0VYVEVOU0lPTiBcdTAwMjZcdTAwMjZcdFx0XFxcbjI3Mzc6XHRcdFx0ICAgIGVsZW1lbnQtXHUwMDNlZGF0YWxlbiBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcdFx0XHRcdFxcXG4yNzM4Olx0XHRcdCAgICBlbGVtZW50LVx1MDAzZWRhdGFbMF0gPT0gKGV4dGlkKSlcbjI3Mzk6XHRcbjI3NDA6XHQjZGVmaW5lIGZvcl9lYWNoX3N1YmVsZW1lbnQoc3ViLCBlbGVtZW50KVx0XHRcdFx0XFxcbjI3NDE6XHRcdGZvcl9lYWNoX2VsZW1lbnQoc3ViLCAoZWxlbWVudCktXHUwMDNlZGF0YSwgKGVsZW1lbnQpLVx1MDAzZWRhdGFsZW4pXG4yNzQyOlx0XG4yNzQzOlx0I2RlZmluZSBmb3JfZWFjaF9zdWJlbGVtZW50X2lkKHN1YiwgaWQsIGVsZW1lbnQpXHRcdFx0XFxcbjI3NDQ6XHRcdGZvcl9lYWNoX2VsZW1lbnRfaWQoc3ViLCBpZCwgKGVsZW1lbnQpLVx1MDAzZWRhdGEsIChlbGVtZW50KS1cdTAwM2VkYXRhbGVuKVxuMjc0NTpcdFxuMjc0NjpcdCNkZWZpbmUgZm9yX2VhY2hfc3ViZWxlbWVudF9leHRpZChzdWIsIGV4dGlkLCBlbGVtZW50KVx0XHRcdFxcXG4yNzQ3Olx0XHRmb3JfZWFjaF9lbGVtZW50X2V4dGlkKHN1YiwgZXh0aWQsIChlbGVtZW50KS1cdTAwM2VkYXRhLCAoZWxlbWVudCktXHUwMDNlZGF0YWxlbilcbjI3NDg6XHRcbjI3NDk6XHQvKipcbjI3NTA6XHQgKiBmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZCAtIGRldGVybWluZSBpZiBlbGVtZW50IHBhcnNpbmcgY29uc3VtZWQgYWxsIGRhdGFcbjI3NTE6XHQgKiBAZWxlbWVudDogZWxlbWVudCBwb2ludGVyIGFmdGVyIGZvcl9lYWNoX2VsZW1lbnQoKSBvciBmcmllbmRzXG4yNzUyOlx0ICogQGRhdGE6IHNhbWUgZGF0YSBwb2ludGVyIGFzIHBhc3NlZCB0byBmb3JfZWFjaF9lbGVtZW50KCkgb3IgZnJpZW5kc1xuMjc1MzpcdCAqIEBkYXRhbGVuOiBzYW1lIGRhdGEgbGVuZ3RoIGFzIHBhc3NlZCB0byBmb3JfZWFjaF9lbGVtZW50KCkgb3IgZnJpZW5kc1xuMjc1NDpcdCAqIFJldHVybjogJXRydWUgaWYgYWxsIGVsZW1lbnRzIHdlcmUgaXRlcmF0ZWQsICVmYWxzZSBvdGhlcndpc2U7IHNlZSBub3Rlc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQwMAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDI1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYGNmZzgwMjExX3dleHRfc2l3Z2VuaWVgIGZvciBQb3RlbnRpYWwgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYGNmZzgwMjExX3dleHRfc2l3Z2VuaWVgIGFuZCBzZWUgaWYgaXQmIzM5O3MgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy4gRmlyc3QsIHRoaXMgbG9va3MgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBpdCBhZGRzIHNvbWUgdmFsaWRhdGlvbiB0byB0aGUgZnVuY3Rpb24gd2hlbiBwYXJzaW5nIElFcyBhbmQgdGhlbiBpdCB3aWxsIHJlamVjdCBtYWxmb3JtZWQgSUVzIGJlZm9yZSBzdG9yaW5nIHRoZW0uIFNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0LiBBcyBmb3IgcmVhY2hhYmlsaXR5LCBpdCYjMzk7cyB0cmlnZ2VyZWQgdmlhIHRoZSBgU0lPQ1NJV0dFTklFYCB1c2Vyc3BhY2UgaW9jdGwsIHdoaWNoIG1lYW5zIGl0IHNob3VsZCBiZSBwcmV0dHkgYWNjZXNzaWJsZSBvbiBhbnkgd2lyZWxlc3MgaW50ZXJmYWNlIG1hbmFnZWQgYnkgY2ZnODAyMTEgd2hlbiBXRVhUIGlzIGVuYWJsZWQuIFdlJiMzOTt2ZSBnb3QgZ29vZCBjb3ZlcmFnZSBoZXJlOiBJdCBzaG91bGQgd29yayBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGxpa2UgUUVNVSB3aXRoIGBtYWM4MDIxMV9od3NpbWAgb3IgYHZpcnRpby13aWZpYCwgYW5kIHN0YW5kYXJkIHNvZnRtYWMuIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBwbHVzLgoKSXMgaXQgd29ydGggdGhlIGVmZm9ydCBvZiBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBUaGlzIGlzIGEgY29yZSB3aXJlbGVzcyBleHRlbnNpb24gU01FIGhhbmRsZXIsIGFuZCBpdCYjMzk7cyBkaXJlY3RseSBleHBvc2VkIHRocm91Z2ggdXNlcnNwYWNlIGlvY3Rscy4gVGhhdCYjMzk7cyBhIHByaW1lIHRhcmdldCBmb3IgZmluZGluZyBzb21lIGludGVyZXN0aW5nIGVkZ2UgY2FzZXMuIFRoZSBmb2N1cyBpcyBkZWZpbml0ZWx5IG9uIGBjZmc4MDIxMV93ZXh0X3Npd2dlbmllYC4KCk5vdywgbGV0JiMzOTtzIGNoZWNrIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgYENGRzgwMjExYCBhbmQgYENGRzgwMjExX1dFWFRgIGFyZSBlbmFibGVkLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIGluIGBuZXQvS2NvbmZpZ2AgYW5kIGBuZXQvd2lyZWxlc3MvS2NvbmZpZ2AgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb3VyY2UuKm5ldC93aXJlbGVzcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz00MzE9aWYgV0lSRUxFU1Ncbm5ldC9LY29uZmlnLTQzMi1cbm5ldC9LY29uZmlnOjQzMzpzb3VyY2UgXCYjMzQ7bmV0L3dpcmVsZXNzL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnLTQzNC1zb3VyY2UgXCYjMzQ7bmV0L21hYzgwMjExL0tjb25maWdcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZz0xMTE9Y29uZmlnIENGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUlxuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTExNS1cdCAgSWYgc2VsZWN0ZWQsIHBvaW50IHRvIGEgZGlyZWN0b3J5IHdpdGggREVSLWVuY29kZWQgWC41MDlcbm5ldC93aXJlbGVzcy9LY29uZmlnOjExNjpcdCAgY2VydGlmaWNhdGVzIGxpa2UgaW4gdGhlIGtlcm5lbCBzb3VyY2VzIChuZXQvd2lyZWxlc3MvY2VydHMvKVxubmV0L3dpcmVsZXNzL0tjb25maWctMTE3LVx0ICB0aGF0IHNoYWxsIGJlIGFjY2VwdGVkIGZvciBhIHNpZ25lZCByZWd1bGF0b3J5IGRhdGFiYXNlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIxOAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBMYWJ5cmludGgqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzLi4uIGxldCYjMzk7cyBzZWUsIHdoYXQgd2FzIGl0IGFnYWluPyBSaWdodCwgSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBjb25maWd1cmF0aW9uIHN5c3RlbS4gV2hlcmUgdG8gc3RhcnQ/IEdpdmVuIHRoZSBjb250ZXh0IG9mIHdoYXQgSSYjMzk7bSB3b3JraW5nIG9uLCBgbmV0L0tjb25maWdgIGZlZWxzIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBwbGFjZS4gSXQmIzM5O3MgdXN1YWxseSB0aGUgaGVhcnQgb2YgbmV0d29ya2luZy1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBOb3csIEkgdmFndWVseSByZW1lbWJlciBzb21lIGNyaXRpY2FsIHN0dWZmIGJlaW5nIGluIHRoYXQgZmlsZSwgYW5kIGFyb3VuZCBsaW5lIDQzMC4gSSYjMzk7bGwgcGlucG9pbnQgd2hhdCBJIG5lZWQuIExldCBtZSBqdW1wIHRoZXJlIGFuZCBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBwYXJ0aWN1bGFyIHNlY3Rpb24gc2hvdWxkIGxpa2VseSBiZSB0aGUgZW50cnkgcG9pbnQgdG8gd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MjU6XHRcbiA0MjY6XHRtZW51Y29uZmlnIFdJUkVMRVNTXG4gNDI3Olx0XHRib29sIFwmIzM0O1dpcmVsZXNzXCYjMzQ7XG4gNDI4Olx0XHRkZXBlbmRzIG9uICFTMzkwXG4gNDI5Olx0XHRkZWZhdWx0IHlcbiA0MzA6XHRcbiA0MzE6XHRpZiBXSVJFTEVTU1xuIDQzMjpcdFxuIDQzMzpcdHNvdXJjZSBcJiMzNDtuZXQvd2lyZWxlc3MvS2NvbmZpZ1wmIzM0O1xuIDQzNDpcdHNvdXJjZSBcJiMzNDtuZXQvbWFjODAyMTEvS2NvbmZpZ1wmIzM0O1xuIDQzNTpcdFxuIDQzNjpcdGVuZGlmICMgV0lSRUxFU1NcbiA0Mzc6XHRcbiA0Mzg6XHRzb3VyY2UgXCYjMzQ7bmV0L3Jma2lsbC9LY29uZmlnXCYjMzQ7XG4gNDM5Olx0c291cmNlIFwmIzM0O25ldC85cC9LY29uZmlnXCYjMzQ7XG4gNDQwOlx0c291cmNlIFwmIzM0O25ldC9jZXBoL0tjb25maWdcJiMzNDtcbiA0NDE6XHRzb3VyY2UgXCYjMzQ7bmV0L25mYy9LY29uZmlnXCYjMzQ7XG4gNDQyOlx0c291cmNlIFwmIzM0O25ldC9wc2FtcGxlL0tjb25maWdcJiMzNDtcbiA0NDM6XHRzb3VyY2UgXCYjMzQ7bmV0L2lmZS9LY29uZmlnXCYjMzQ7XG4gNDQ0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE1OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjg1CgkJCQkJCQlvdXRwdXQ6IDE2OAoJCQkJCQkJdGhvdWdodHM6IDU1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIEFzc2Vzc21lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBlbmFibGUgYSBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5LCBhbmQgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBGaXJzdCwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZWxhdGlvbnNoaXBzIHdpdGhpbiBgbmV0L3dpcmVsZXNzL0tjb25maWdgLiBgV0lSRUxFU1NgIGlzIHRoZSBvdmVyYXJjaGluZyBtZW51Y29uZmlnIGhlcmUsIGRlcGVuZGluZyBvbiBhIGZldyBvdGhlciBjb25zaWRlcmF0aW9ucy4gV2l0aGluIGBXSVJFTEVTU2AsIGBDRkc4MDIxMWAgaXMgdGhlIEFQSSwgYW5kIGl0IGRlcGVuZHMgb24gdGhpbmdzIGxpa2UgUkZLSUxMLiBDcnVjaWFsbHksIGBDRkc4MDIxMWAgbGVhZHMgZGlyZWN0bHkgdG8gYENGRzgwMjExX1dFWFRgLCB3aGljaCBJIHdhbnQsIGFuZCBpcyBhIGJvb2xlYW4gb3B0aW9uLiBJIGFsc28gY29uc2lkZXJlZCBgTUFDODAyMTFfSFdTSU1gIGJ1dCBpdCBkb2VzbiYjMzk7dCBzZWVtIHRvIGhhdmUgZGlyZWN0IGRlcGVuZGVuY2llcyBmb3IgdGhpcy4KCk5leHQsIEkgbmVlZCB0byBlbnN1cmUgdGhlIHN1cHBvcnRpbmcgaW5mcmFzdHJ1Y3R1cmUgaXMgaW4gcGxhY2UuIGBORVRgIGlzIHVzdWFsbHkgZW5hYmxlZCBieSBkZWZhdWx0LCBzbyBJJiMzOTttIG5vdCBvdmVybHkgY29uY2VybmVkIHRoZXJlLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgTkVUPXlgLiBNeSBwcmltYXJ5IGZvY3VzIGhlcmUgaXMgY29uZmlybWluZyB0aGF0IGJvdGggYENGRzgwMjExYCBhbmQgYENGRzgwMjExX1dFWFRgIGFyZSBlbmFibGVkLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgdGFyZ2V0IHN5bWJvbCBgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZWAgaXMgYWNjZXNzaWJsZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGl0JiMzOTtzIGFjY2Vzc2libGUuIExvb2tpbmcgYXQgdGhlIGNvZGUgaW4gYG5ldC93aXJlbGVzcy93ZXh0LXNtZS5jYCwgaXQmIzM5O3MgZGVmaW5lZCBhcyBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gYGNmZzgwMjExX3dleHRfc2l3Z2VuaWVgLiBUaGlzIGlzIGV4YWN0bHkgd2hhdCBJIHdhbnQuIEl0JiMzOTtzIGFsc28gZXhwb3J0ZWQsIHNvIGl0JiMzOTtzIHZpc2libGUgaW4gYG5ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5oYC4gVGhlIGZ1bmN0aW9uIGlzIHVzZWQgaW4gYG5ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jYCB3aXRoaW4gYGNmZzgwMjExX2hhbmRsZXJzYC4KClNvLCB0byBzdW1tYXJpemUgYW5kIGNvbmZpcm0gZXZlcnl0aGluZywgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlIGZvbGxvd2luZzoKCiogICBJIGNvbnNpZGVyIHRoaXMgaW1wb3J0YW50IGZvciBmdXp6aW5nIChgV29ydGhGdXp6aW5nOiB0cnVlYCkuCiogICBUaGUgZnVuY3Rpb24gdGhhdCBJIGFtIGZvY3VzaW5nIG9uIGlzIGluZGVlZCBgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZWAgKGBGb2N1c1N5bWJvbHM6IFsmIzM0O2NmZzgwMjExX3dleHRfc2l3Z2VuaWUmIzM0O11gKS4KKiAgIFRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9uIHNldHRpbmdzIGFyZSBgQ0ZHODAyMTFgIGFuZCBgQ0ZHODAyMTFfV0VYVGAgKGBFbmFibGVDb25maWdzOiBbJiMzNDtDRkc4MDIxMSYjMzQ7LCAmIzM0O0NGRzgwMjExX1dFWFQmIzM0O11gKS4KKiAgIFRoaXMgaXMgYWxsIGFib3V0IHZhbGlkYXRpbmcgd2lyZWxlc3MgaW5mb3JtYXRpb24gZWxlbWVudHMsIHNwZWNpZmljYWxseSB1c2luZyBgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZWAgdG8gcmVqZWN0IG1hbGZvcm1lZCBJRXMgY29taW5nIGZyb20gdXNlcnNwYWNlIGlvY3RsIGBTSU9DU0lXR0VOSUVgLCB0aHJvdWdoIHRoZSB1c2Ugb2YgYGZvcl9lYWNoX2VsZW1lbnRgL2Bmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZGAuCgpBbHJpZ2h0LCBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTU6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O0NGRzgwMjExX1dFWFQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjZmc4MDIxMV93ZXh0X3Npd2dlbmllJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgaW5wdXQgdmFsaWRhdGlvbiBmb3Igd2lyZWxlc3MgaW5mb3JtYXRpb24gZWxlbWVudHMgKElFcykgcGFzc2VkIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgU0lPQ1NJV0dFTklFIHdpcmVsZXNzIGV4dGVuc2lvbiBpb2N0bC4gSXQgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgZWxlbWVudCBidWZmZXIgdXNpbmcgZm9yX2VhY2hfZWxlbWVudCgpIGFuZCB2YWxpZGF0ZXMgY29tcGxldGlvbiB3aXRoIGZvcl9lYWNoX2VsZW1lbnRfY29tcGxldGVkKCkgYmVmb3JlIGNvcHlpbmcgdGhlIGJ1ZmZlciwgcmVqZWN0aW5nIG1hbGZvcm1lZCBlbGVtZW50cyB3aXRoIC1FSU5WQUwuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmsgd2lyZWxlc3MgY29yZSBjb2RlIHRoYXQgY2FuIGJlIHRlc3RlZCBpbiB2aXJ0dWFsIGVudmlyb25tZW50cyAoZS5nLiB1c2luZyBtYWM4MDIxMV9od3NpbSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O0NGRzgwMjExX1dFWFQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjZmc4MDIxMV93ZXh0X3Npd2dlbmllJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgaW5wdXQgdmFsaWRhdGlvbiBmb3Igd2lyZWxlc3MgaW5mb3JtYXRpb24gZWxlbWVudHMgKElFcykgcGFzc2VkIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgU0lPQ1NJV0dFTklFIHdpcmVsZXNzIGV4dGVuc2lvbiBpb2N0bC4gSXQgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgZWxlbWVudCBidWZmZXIgdXNpbmcgZm9yX2VhY2hfZWxlbWVudCgpIGFuZCB2YWxpZGF0ZXMgY29tcGxldGlvbiB3aXRoIGZvcl9lYWNoX2VsZW1lbnRfY29tcGxldGVkKCkgYmVmb3JlIGNvcHlpbmcgdGhlIGJ1ZmZlciwgcmVqZWN0aW5nIG1hbGZvcm1lZCBlbGVtZW50cyB3aXRoIC1FSU5WQUwuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmsgd2lyZWxlc3MgY29yZSBjb2RlIHRoYXQgY2FuIGJlIHRlc3RlZCBpbiB2aXJ0dWFsIGVudmlyb25tZW50cyAoZS5nLiB1c2luZyBtYWM4MDIxMV9od3NpbSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE1OjU3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjE0bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE1OjU3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjE0bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgaW5wdXQgdmFsaWRhdGlvbiB0byBjZmc4MDIxMV93ZXh0X3Npd2dlbmllKCkgYnkgaXRlcmF0aW5nIG92ZXIgYW5kIHZlcmlmeWluZyB0aGUgc3RydWN0dXJlIG9mIHVzZXItcHJvdmlkZWQgSUVFRSA4MDIuMTEgSW5mb3JtYXRpb24gRWxlbWVudHMgKElFcykgdXNpbmcgZm9yX2VhY2hfZWxlbWVudCgpIGFuZCBmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZCgpLiBJZiB0aGUgZWxlbWVudHMgYXJlIG1hbGZvcm1lZCwgaXQgcmV0dXJucyAtRUlOVkFMIGJlZm9yZSBhbGxvY2F0aW5nIGFuZCBzYXZpbmcgdGhlIElFIGJ1ZmZlci5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MsIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlIGxvb3AgaXRlcmF0b3IgdmFyaWFibGUgYGVsZW1gIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIGJ5IHRoZSBgZm9yX2VhY2hfZWxlbWVudGAgbWFjcm8sIGFuZCB0aGUgaW5wdXQgYnVmZmVyIGNvbnRhaW5zIGRhdGEgY29waWVkIGZyb20gdXNlciBzcGFjZS4gUG90ZW50aWFsIGJ1Z3MgYWRkcmVzc2VkIG9yIHRvdWNoZWQgYnkgdGhpcyBsb2dpYyAoc3VjaCBhcyBtYWxmb3JtZWQgVExWIHBhcnNpbmcgbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIHJlYWRzKSBmYWxsIHVuZGVyIEtBU0FOJiMzOTtzIHB1cnZpZXcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzI3MjQ5NTZjNDFhNWYxMmE4ZjYwOTcxMmZlZmUyMzMxNjk3NjdkZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDE1OjIxOjU5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3dleHQtc21lLmMgYi9uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuYwppbmRleCA1NzNiNmIxNWE0NDZlLi5iNTkxNGYzNjU4ZGI0IDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuYwpAQCAtMzE5LDYgJiM0MzszMTksMTUgQEAgaW50IGNmZzgwMjExX3dleHRfc2l3Z2VuaWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJcmV0dXJuIDA7CiAKIAlpZiAoaWVfbGVuKSB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgZWxlbWVudCAqZWxlbTsKJiM0MzsKJiM0MzsJCWZvcl9lYWNoX2VsZW1lbnQoZWxlbSwgZXh0cmEsIGllX2xlbikgewomIzQzOwkJCS8qIG5vdGhpbmcgKi8KJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmICghZm9yX2VhY2hfZWxlbWVudF9jb21wbGV0ZWQoZWxlbSwgZXh0cmEsIGllX2xlbikpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJCWllID0ga21lbWR1cChleHRyYSwgaWVfbGVuLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFpZSkKIAkJCXJldHVybiAtRU5PTUVNOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEyOQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBSZWNlbnQgUGF0Y2ggaW4gYG5ldC93aXJlbGVzcy93ZXh0LXNtZS5jYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBjb2RlIHNob3dzIGEgcGF0Y2ggYWZmZWN0aW5nIGBuZXQvd2lyZWxlc3Mvd2V4dC1zbWUuY2AsIHNwZWNpZmljYWxseSB0aGUgYGNmZzgwMjExX3dleHRfc2l3Z2VuaWVgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiB0aGlzIGZ1bmN0aW9uIGFuZCBob3cgdGhlIHBhdGNoIG1vZGlmaWVzIGl0cyBiZWhhdmlvci4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaXMgYWRkaW5nIHNvbWUga2luZCBvZiBJbmZvcm1hdGlvbiBFbGVtZW50IChJRSkgcHJvY2Vzc2luZyB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gSSBuZWVkIHRvIGdldCB0aGUgYmlnZ2VyIHBpY3R1cmUuCgpGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZWAgZG9lcyBpbiB0aGUgZmlyc3QgcGxhY2UsIGFuZCB0aGF0IG1lYW5zIHJlYWRpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEkgbmVlZCB0byBzZWUgdGhlIGNvbnRleHQuIFNvLCBJJiMzOTtsbCB1c2UgYHJlYWQtZmlsZWAgb24gYG5ldC93aXJlbGVzcy93ZXh0LXNtZS5jYCB0byBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXJvdW5kIGxpbmUgMzE5LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIElFIGxlbmd0aCBgaWVfbGVuYCBpcyB1c2VkLCBhbmQgd2hhdCBgZXh0cmFgIHJlcHJlc2VudHMuIFRoZSBleGlzdGluZyBjb2RlIHN1Z2dlc3RzIHRoYXQgaWYgYGllX2xlbmAgaGFzIGEgbm9uLXplcm8gdmFsdWUsIHRoZW4gYSBibG9jayBvZiBtZW1vcnkgaXMgYWxsb2NhdGVkIGFuZCBjb3BpZWQgZnJvbSB0aGUgYGV4dHJhYCBhcmd1bWVudCwgYWZ0ZXIgd2hpY2ggaXQgd291bGQgYmUgcGFyc2VkLiBUaGUgcGF0Y2ggYWRkcyBhIGxvb3AgdGhhdCBsb29rcyBhdCB0aGUgYGV4dHJhYCB2YXJpYWJsZS4gSXMgdGhlcmUgc29tZSB0eXBlIG9mIHZhbGlkYXRpb24gaGFwcGVuaW5nIG5vdz8gTGV0JiMzOTtzIGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy93ZXh0LXNtZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMDA6XHRcdFx0XHQgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSlcbiAzMDE6XHR7XG4gMzAyOlx0XHRzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEgPSBcdTAwMjZ3cnF1LVx1MDAzZWRhdGE7XG4gMzAzOlx0XHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LVx1MDAzZWllZWU4MDIxMV9wdHI7XG4gMzA0Olx0XHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19yZGV2KHdkZXYtXHUwMDNld2lwaHkpO1xuIDMwNTpcdFx0aW50IGllX2xlbiA9IGRhdGEtXHUwMDNlbGVuZ3RoO1xuIDMwNjpcdFx0dTggKmllID0gZXh0cmE7XG4gMzA3Olx0XG4gMzA4Olx0XHRpZiAod2Rldi1cdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTilcbiAzMDk6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIDMxMDpcdFxuIDMxMTpcdFx0aWYgKCFpZV9sZW4pXG4gMzEyOlx0XHRcdGllID0gTlVMTDtcbiAzMTM6XHRcbiAzMTQ6XHRcdGd1YXJkKHdpcGh5KSh3ZGV2LVx1MDAzZXdpcGh5KTtcbiAzMTU6XHRcbiAzMTY6XHRcdC8qIG5vIGNoYW5nZSAqL1xuIDMxNzpcdFx0aWYgKHdkZXYtXHUwMDNld2V4dC5pZV9sZW4gPT0gaWVfbGVuIFx1MDAyNlx1MDAyNlxuIDMxODpcdFx0ICAgIG1lbWNtcCh3ZGV2LVx1MDAzZXdleHQuaWUsIGllLCBpZV9sZW4pID09IDApXG4gMzE5Olx0XHRcdHJldHVybiAwO1xuIDMyMDpcdFxuIDMyMTpcdFx0aWYgKGllX2xlbikge1xuIDMyMjpcdFx0XHRjb25zdCBzdHJ1Y3QgZWxlbWVudCAqZWxlbTtcbiAzMjM6XHRcbiAzMjQ6XHRcdFx0Zm9yX2VhY2hfZWxlbWVudChlbGVtLCBleHRyYSwgaWVfbGVuKSB7XG4gMzI1Olx0XHRcdFx0Lyogbm90aGluZyAqL1xuIDMyNjpcdFx0XHR9XG4gMzI3Olx0XG4gMzI4Olx0XHRcdGlmICghZm9yX2VhY2hfZWxlbWVudF9jb21wbGV0ZWQoZWxlbSwgZXh0cmEsIGllX2xlbikpXG4gMzI5Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMzMwOlx0XG4gMzMxOlx0XHRcdGllID0ga21lbWR1cChleHRyYSwgaWVfbGVuLCBHRlBfS0VSTkVMKTtcbiAzMzI6XHRcdFx0aWYgKCFpZSlcbiAzMzM6XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAzMzQ6XHRcdH0gZWxzZSB7XG4gMzM1Olx0XHRcdGllID0gTlVMTDtcbiAzMzY6XHRcdH1cbiAzMzc6XHRcbiAzMzg6XHRcdGtmcmVlKHdkZXYtXHUwMDNld2V4dC5pZSk7XG4gMzM5Olx0XHR3ZGV2LVx1MDAzZXdleHQuaWUgPSBpZTtcbiAzNDA6XHRcdHdkZXYtXHUwMDNld2V4dC5pZV9sZW4gPSBpZV9sZW47XG4gMzQxOlx0XG4gMzQyOlx0XHRpZiAod2Rldi1cdTAwM2Vjb25uKVxuIDM0MzpcdFx0XHRyZXR1cm4gY2ZnODAyMTFfZGlzY29ubmVjdChyZGV2LCBkZXYsXG4gMzQ0Olx0XHRcdFx0XHRcdCAgIFdMQU5fUkVBU09OX0RFQVVUSF9MRUFWSU5HLCBmYWxzZSk7XG4gMzQ1Olx0XG4gMzQ2Olx0XHQvKiB1c2Vyc3BhY2UgYmV0dGVyIG5vdCB0aGluayB3ZSYjMzk7bGwgcmVjb25uZWN0ICovXG4gMzQ3Olx0XHRyZXR1cm4gMDtcbiAzNDg6XHR9XG4gMzQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE1OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NDAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYGZvcl9lYWNoX2VsZW1lbnRgIGFuZCBgZm9yX2VhY2hfZWxlbWVudF9jb21wbGV0ZWRgKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gc29tZSBjb2RlIGFuZCBJIHNlZSB0aGVzZSBgZm9yX2VhY2hfZWxlbWVudGAgYW5kIGBmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZGAgZnVuY3Rpb25zLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZXkgYXJlLCB3aGF0IHRoZXkgZG8sIGFuZCBob3cgdGhleSBpbnRlcmFjdC4gTXkgaW5zdGluY3QgaXMgdG8gdXNlIGEgYGdyZXBgIHRvIHF1aWNrbHkgZmluZCBhbGwgaW5zdGFuY2VzIG9mIHRoZXNlIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGNvZGViYXNlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBpZGVudGlmeSB0aGVpciBkZWZpbml0aW9uLCBob3cgdGhleSYjMzk7cmUgYmVpbmcgY2FsbGVkLCBhbmQgd2hlcmUgdGhleSBhcmUgdXNlZCB0byBwcm9jZXNzIGVsZW1lbnRzLiBUaGlzIGdyZXAgc2hvdWxkIGhlbHAgbWUgZ2V0IGEgaGlnaC1sZXZlbCBzZW5zZSBvZiB0aGVpciByb2xlIHdpdGhpbiB0aGUgYmlnZ2VyIHBpY3R1cmUgYmVmb3JlIEkgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTY6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBmb3JfZWFjaF9lbGVtZW50JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmg9MjcxNT1zdHJ1Y3QgZWxlbWVudCB7XG4tLVxuaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaC0yNzIxLS8qIGVsZW1lbnQgaXRlcmF0aW9uIGhlbHBlcnMgKi9cbmluY2x1ZGUvbGludXgvaWVlZTgwMjExLmg6MjcyMjojZGVmaW5lIGZvcl9lYWNoX2VsZW1lbnQoX2VsZW0sIF9kYXRhLCBfZGF0YWxlbilcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaC0yNzIzLVx0Zm9yIChfZWxlbSA9IChjb25zdCBzdHJ1Y3QgZWxlbWVudCAqKShfZGF0YSk7XHRcdFx0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oLTI3MjktXG5pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oOjI3MzA6I2RlZmluZSBmb3JfZWFjaF9lbGVtZW50X2lkKGVsZW1lbnQsIF9pZCwgZGF0YSwgZGF0YWxlbilcdFx0XFxcbmluY2x1ZGUvbGludXgvaWVlZTgwMjExLmgtMjczMS1cdGZvcl9lYWNoX2VsZW1lbnQoZWxlbWVudCwgZGF0YSwgZGF0YWxlbilcdFx0XHRcXFxuLS1cbmluY2x1ZGUvbGludXgvaWVlZTgwMjExLmgtMjczMy1cbmluY2x1ZGUvbGludXgvaWVlZTgwMjExLmg6MjczNDojZGVmaW5lIGZvcl9lYWNoX2VsZW1lbnRfZXh0aWQoZWxlbWVudCwgZXh0aWQsIF9kYXRhLCBfZGF0YWxlbilcdFx0XFxcbmluY2x1ZGUvbGludXgvaWVlZTgwMjExLmgtMjczNS1cdGZvcl9lYWNoX2VsZW1lbnQoZWxlbWVudCwgX2RhdGEsIF9kYXRhbGVuKVx0XHRcdFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE2OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5OTQKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIElFRUUgODAyLjExIEhlYWRlcioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiB0aG9zZSBtYWNyb3MuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgYGZvcl9lYWNoX2VsZW1lbnRgIGFuZCBgZm9yX2VhY2hfZWxlbWVudF9jb21wbGV0ZWRgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGNvbnRleHQgb2YgdGhlIDgwMi4xMSBzdGFjay4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYGluY2x1ZGUvbGludXgvaWVlZTgwMjExLmhgLCBhbmQgaG9uZSBpbiBhcm91bmQgbGluZSAyNzE1LiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGludGVycGxheSBvZiB0aG9zZSBtYWNyb3MgZm9yIGl0ZXJhdGl2ZSBlbGVtZW50IHByb2Nlc3NpbmcsIGFuZCBob3cgY29tcGxldGlvbiBpcyBoYW5kbGVkLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGFueSBvcHRpbWl6YXRpb24gc3RyYXRlZ2llcyBhcmUgYXQgcGxheSB3aXRoaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiBvZiB0aG9zZSBjb250cm9sIGZsb3dzLiBJdCYjMzk7cyB0aW1lIHRvIGZpbmQgdGhhdCBjb2RlIGFuZCBnZXQgdG8gdGhlIGNvcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE2OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9pZWVlODAyMTEuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjcxNTpcdHN0cnVjdCBlbGVtZW50IHtcbjI3MTY6XHRcdHU4IGlkO1xuMjcxNzpcdFx0dTggZGF0YWxlbjtcbjI3MTg6XHRcdHU4IGRhdGFbXTtcbjI3MTk6XHR9IF9fcGFja2VkO1xuMjcyMDpcdFxuMjcyMTpcdC8qIGVsZW1lbnQgaXRlcmF0aW9uIGhlbHBlcnMgKi9cbjI3MjI6XHQjZGVmaW5lIGZvcl9lYWNoX2VsZW1lbnQoX2VsZW0sIF9kYXRhLCBfZGF0YWxlbilcdFx0XHRcXFxuMjcyMzpcdFx0Zm9yIChfZWxlbSA9IChjb25zdCBzdHJ1Y3QgZWxlbWVudCAqKShfZGF0YSk7XHRcdFx0XFxcbjI3MjQ6XHRcdCAgICAgKGNvbnN0IHU4ICopKF9kYXRhKSAmIzQzOyAoX2RhdGFsZW4pIC0gKGNvbnN0IHU4ICopX2VsZW0gXHUwMDNlPVx0XFxcbjI3MjU6XHRcdFx0KGludClzaXplb2YoKl9lbGVtKSBcdTAwMjZcdTAwMjZcdFx0XHRcdFx0XFxcbjI3MjY6XHRcdCAgICAgKGNvbnN0IHU4ICopKF9kYXRhKSAmIzQzOyAoX2RhdGFsZW4pIC0gKGNvbnN0IHU4ICopX2VsZW0gXHUwMDNlPVx0XFxcbjI3Mjc6XHRcdFx0KGludClzaXplb2YoKl9lbGVtKSAmIzQzOyBfZWxlbS1cdTAwM2VkYXRhbGVuO1x0XHRcdFxcXG4yNzI4Olx0XHQgICAgIF9lbGVtID0gKGNvbnN0IHN0cnVjdCBlbGVtZW50ICopKF9lbGVtLVx1MDAzZWRhdGEgJiM0MzsgX2VsZW0tXHUwMDNlZGF0YWxlbikpXG4yNzI5Olx0XG4yNzMwOlx0I2RlZmluZSBmb3JfZWFjaF9lbGVtZW50X2lkKGVsZW1lbnQsIF9pZCwgZGF0YSwgZGF0YWxlbilcdFx0XFxcbjI3MzE6XHRcdGZvcl9lYWNoX2VsZW1lbnQoZWxlbWVudCwgZGF0YSwgZGF0YWxlbilcdFx0XHRcXFxuMjczMjpcdFx0XHRpZiAoZWxlbWVudC1cdTAwM2VpZCA9PSAoX2lkKSlcbjI3MzM6XHRcbjI3MzQ6XHQjZGVmaW5lIGZvcl9lYWNoX2VsZW1lbnRfZXh0aWQoZWxlbWVudCwgZXh0aWQsIF9kYXRhLCBfZGF0YWxlbilcdFx0XFxcbjI3MzU6XHRcdGZvcl9lYWNoX2VsZW1lbnQoZWxlbWVudCwgX2RhdGEsIF9kYXRhbGVuKVx0XHRcdFxcXG4yNzM2Olx0XHRcdGlmIChlbGVtZW50LVx1MDAzZWlkID09IFdMQU5fRUlEX0VYVEVOU0lPTiBcdTAwMjZcdTAwMjZcdFx0XFxcbjI3Mzc6XHRcdFx0ICAgIGVsZW1lbnQtXHUwMDNlZGF0YWxlbiBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcdFx0XHRcdFxcXG4yNzM4Olx0XHRcdCAgICBlbGVtZW50LVx1MDAzZWRhdGFbMF0gPT0gKGV4dGlkKSlcbjI3Mzk6XHRcbjI3NDA6XHQjZGVmaW5lIGZvcl9lYWNoX3N1YmVsZW1lbnQoc3ViLCBlbGVtZW50KVx0XHRcdFx0XFxcbjI3NDE6XHRcdGZvcl9lYWNoX2VsZW1lbnQoc3ViLCAoZWxlbWVudCktXHUwMDNlZGF0YSwgKGVsZW1lbnQpLVx1MDAzZWRhdGFsZW4pXG4yNzQyOlx0XG4yNzQzOlx0I2RlZmluZSBmb3JfZWFjaF9zdWJlbGVtZW50X2lkKHN1YiwgaWQsIGVsZW1lbnQpXHRcdFx0XFxcbjI3NDQ6XHRcdGZvcl9lYWNoX2VsZW1lbnRfaWQoc3ViLCBpZCwgKGVsZW1lbnQpLVx1MDAzZWRhdGEsIChlbGVtZW50KS1cdTAwM2VkYXRhbGVuKVxuMjc0NTpcdFxuMjc0NjpcdCNkZWZpbmUgZm9yX2VhY2hfc3ViZWxlbWVudF9leHRpZChzdWIsIGV4dGlkLCBlbGVtZW50KVx0XHRcdFxcXG4yNzQ3Olx0XHRmb3JfZWFjaF9lbGVtZW50X2V4dGlkKHN1YiwgZXh0aWQsIChlbGVtZW50KS1cdTAwM2VkYXRhLCAoZWxlbWVudCktXHUwMDNlZGF0YWxlbilcbjI3NDg6XHRcbjI3NDk6XHQvKipcbjI3NTA6XHQgKiBmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZCAtIGRldGVybWluZSBpZiBlbGVtZW50IHBhcnNpbmcgY29uc3VtZWQgYWxsIGRhdGFcbjI3NTE6XHQgKiBAZWxlbWVudDogZWxlbWVudCBwb2ludGVyIGFmdGVyIGZvcl9lYWNoX2VsZW1lbnQoKSBvciBmcmllbmRzXG4yNzUyOlx0ICogQGRhdGE6IHNhbWUgZGF0YSBwb2ludGVyIGFzIHBhc3NlZCB0byBmb3JfZWFjaF9lbGVtZW50KCkgb3IgZnJpZW5kc1xuMjc1MzpcdCAqIEBkYXRhbGVuOiBzYW1lIGRhdGEgbGVuZ3RoIGFzIHBhc3NlZCB0byBmb3JfZWFjaF9lbGVtZW50KCkgb3IgZnJpZW5kc1xuMjc1NDpcdCAqIFJldHVybjogJXRydWUgaWYgYWxsIGVsZW1lbnRzIHdlcmUgaXRlcmF0ZWQsICVmYWxzZSBvdGhlcndpc2U7IHNlZSBub3Rlc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNjowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDQ5CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcGx5IGZhbWlsaWFyIHdpdGggY29kZSBhbmQgaXRlcmF0aW9uOgoKKipBbmFseXppbmcgdGhlIFJlbWFpbmRlciBvZiBgZm9yX2VhY2hfZWxlbWVudF9jb21wbGV0ZWRgKioKCkFscmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGFmdGVyIHRoYXQgYGZvcl9lYWNoX2VsZW1lbnRfY29tcGxldGVkYCBmdW5jdGlvbiBjYWxsLiBJIGtub3cgaXQmIzM5O3MgYSBjcml0aWNhbCBwaWVjZSwgbGlrZWx5IHJlbGF0ZWQgdG8gcHJvY2Vzc2luZyBpbmRpdmlkdWFsIGVsZW1lbnRzIG9yIHRhc2tzLiBCdXQgd2hhdCYjMzk7cyB0aGUgYnJvYWRlciBwaWN0dXJlPyBJIG5lZWQgdG8gZGVsdmUgaW50byB0aGUgY29kZSB0aGF0IGZvbGxvd3MgdGhhdCBjYWxsIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBhbGdvcml0aG0uIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCYjMzk7cyBjb29yZGluYXRpbmcgd2l0aCB0aGUgcmVzdCBvZiB0aGUgd29ya2Zsb3cuIElzIHRoaXMgdGhlIGVuZCBvZiBhIGxvb3A/IERvZXMgaXQgdHJpZ2dlciBhbm90aGVyIHN0YWdlPyBJcyB0aGVyZSBlcnJvciBoYW5kbGluZz8gV2hhdCBkZXBlbmRlbmNpZXMgZG9lcyB0aGUgY29kZSBhZnRlciBgZm9yX2VhY2hfZWxlbWVudF9jb21wbGV0ZWRgIGhhdmUgb24gdGhlIGZ1bmN0aW9uJiMzOTtzIG91dHB1dCBvciBjb21wbGV0aW9uIHN0YXR1cz8gVGhlIGRldmlsLCBhcyBhbHdheXMsIGlzIGluIHRoZSBkZXRhaWxzLCBzbyBsZXQmIzM5O3MgZ2V0IGRpZ2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE2OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9pZWVlODAyMTEuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3NTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjc1NTpcdCAqXG4yNzU2Olx0ICogVGhpcyBmdW5jdGlvbiByZXR1cm5zICV0cnVlIGlmIGFsbCB0aGUgZGF0YSB3YXMgcGFyc2VkIG9yIGNvbnNpZGVyZWRcbjI3NTc6XHQgKiB3aGlsZSB3YWxraW5nIHRoZSBlbGVtZW50cy4gT25seSB1c2UgdGhpcyBpZiB5b3VyIGZvcl9lYWNoX2VsZW1lbnQoKVxuMjc1ODpcdCAqIGxvb3AgY2Fubm90IGJlIGJyb2tlbiBvdXQgb2YsIG90aGVyd2lzZSBpdCBhbHdheXMgcmV0dXJucyAlZmFsc2UuXG4yNzU5Olx0ICpcbjI3NjA6XHQgKiBJZiBzb21lIGRhdGEgd2FzIG1hbGZvcm1lZCwgdGhpcyByZXR1cm5zICVmYWxzZSBzaW5jZSB0aGUgbGFzdCBwYXJzZWRcbjI3NjE6XHQgKiBlbGVtZW50IHdpbGwgbm90IGZpbGwgdGhlIHdob2xlIHJlbWFpbmluZyBkYXRhLlxuMjc2MjpcdCAqL1xuMjc2MzpcdHN0YXRpYyBpbmxpbmUgYm9vbCBmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZChjb25zdCBzdHJ1Y3QgZWxlbWVudCAqZWxlbWVudCxcbjI3NjQ6XHRcdFx0XHRcdFx0ICAgICAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFsZW4pXG4yNzY1Olx0e1xuMjc2NjpcdFx0cmV0dXJuIChjb25zdCB1OCAqKWVsZW1lbnQgPT0gKGNvbnN0IHU4ICopZGF0YSAmIzQzOyBkYXRhbGVuO1xuMjc2NzpcdH1cbjI3Njg6XHRcbjI3Njk6XHQvKlxuMjc3MDpcdCAqIFJTTlggQ2FwYWJpbGl0aWVzOlxuMjc3MTpcdCAqIGJpdHMgMC0zOiBGaWVsZCBsZW5ndGggKG4tMSlcbjI3NzI6XHQgKi9cbjI3NzM6XHQjZGVmaW5lIFdMQU5fUlNOWF9DQVBBX1BST1RFQ1RFRF9UV1QgQklUKDQpXG4yNzc0Olx0I2RlZmluZSBXTEFOX1JTTlhfQ0FQQV9TQUVfSDJFIEJJVCg1KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjM4CgkJCQkJCQlvdXRwdXQ6IDIxOQoJCQkJCQkJdGhvdWdodHM6IDkwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBjZmc4MDIxMV93ZXh0X3Npd2dlbmllYCBQYXRjaDogQSBLTVNBTiBQZXJzcGVjdGl2ZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGlzIHBhdGNoIGZvY3VzaW5nIG9uIEtNU0FOIGltcGxpY2F0aW9ucy4gVGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2Ugc2VlbXMgdG8gYmUgdGhlIGludHJvZHVjdGlvbiBvZiBpbnB1dCB2YWxpZGF0aW9uIGZvciB1c2VyLXByb3ZpZGVkIEluZm9ybWF0aW9uIEVsZW1lbnRzIChJRXMpIHBhc3NlZCB0aHJvdWdoIHRoZSBgU0lPQ1NJV0dFTklFYCBpb2N0bCB1c2luZyBgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZWAuIFByZXZpb3VzbHksIHRoZSBjb2RlIGp1c3QgYmxpbmRseSBjb3BpZWQgdGhlIGBleHRyYWAgYnVmZmVyIGZyb20gdXNlcnNwYWNlIHdpdGggYGttZW1kdXBgLiBOb3csIHdlJiMzOTtyZSBlbXBsb3lpbmcgYGZvcl9lYWNoX2VsZW1lbnRgIGFuZCBgZm9yX2VhY2hfZWxlbWVudF9jb21wbGV0ZWRgIHRvIHZlcmlmeSB0aGF0IHRoZSBpbmNvbWluZyBkYXRhLCBgZXh0cmFgIHdpdGggbGVuZ3RoIGBpZV9sZW5gLCBjb25mb3JtcyB0byB0aGUgZXhwZWN0ZWQgSUVFRSA4MDIuMTEgZWxlbWVudCAoVExWKSBzdHJ1Y3R1cmUuIElmIGl0JiMzOTtzIG1hbGZvcm1lZCDigJMgbWVhbmluZyB0aGUgbGVuZ3RocyBvZiB0aGUgVExWcyBkb24mIzM5O3QgbWFrZSBzZW5zZSDigJMgd2UgcmV0dXJuIGAtRUlOVkFMYC4gVGhpcyBpcyBhIGNydWNpYWwgc2VjdXJpdHkgaGFyZGVuaW5nIHN0ZXAuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyB0aGlzIGFkZHJlc3Nlcy4gQ2xlYXJseSwgdGhpcyBpcyBpbnB1dCB2YWxpZGF0aW9uIOKAkyBhIGNyaXRpY2FsIHNlY3VyaXR5IGNoZWNrLiBCZWZvcmUsIG1hbGZvcm1lZCBJRXMgY291bGQgaGF2ZSBwb3RlbnRpYWxseSBjYXVzZWQgb3V0LW9mLWJvdW5kcyByZWFkcyBkdXJpbmcgbGF0ZXIgcGFyc2luZyBvZiB0aGUgZGF0YSwgYSBjbGFzc2ljIHZ1bG5lcmFiaWxpdHkuIE5vdywgd2UmIzM5O3JlIGV4cGxpY2l0bHkgdmFsaWRhdGluZyBlbGVtZW50IGxlbmd0aHMuIFNvLCBteSBwcmltYXJ5IGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIHBhdGNoLCBpbiBpdHNlbGYsIGludHJvZHVjZXMgbmV3IHJpc2tzLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4KCkxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIERvZXMgdGhpcyBwYXRjaDoKCjEuICAqKlNlbmQgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2U/KiogTm8sIHRoaXMgaXMgYSAmIzM0O3NldCYjMzQ7IG9wZXJhdGlvbiByZWNlaXZpbmcgZGF0YSwgbm90IHRyYW5zbWl0dGluZyBpdC4gSXQmIzM5O3MgdmFsaWRhdGluZyB0aGUgaW5wdXQuCgoyLiAgKipJbnRyb2R1Y2UgY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgcmVsaWVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHM/KiogVGhlIGBlbGVtYCB2YXJpYWJsZSwgY3JpdGljYWwgdG8gdGhlIHZhbGlkYXRpb24gbG9vcCwgaXMgaW5pdGlhbGl6ZWQgd2l0aGluIHRoZSBgZm9yX2VhY2hfZWxlbWVudGAgbWFjcm8gYXMgdGhlIGl0ZXJhdG9yIHBvaW50ZXIsIGBfZWxlbSA9IChjb25zdCBzdHJ1Y3QgZWxlbWVudCAqKShfZGF0YSlgLiBUaGUgaW5wdXQgYGV4dHJhYCBpcyBmcm9tIHRoZSBpb2N0bCBhbmQgaGFzIGFscmVhZHkgYmVlbiBjb3BpZWQgZnJvbSB1c2Vyc3BhY2UuIGBpZV9sZW5gIGlzIGRlcml2ZWQgZnJvbSB0aGUgaW5wdXQgZGF0YSBzdHJ1Y3R1cmUuIEV2ZXJ5dGhpbmcgc2VlbXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQuCgozLiAgKipBbGxvY2F0ZSBvciBpbml0aWFsaXplIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXI/KiogTm8sIHRoZSBwYXRjaCBjYWxscyBga21lbWR1cGAgKmFmdGVyKiB0aGUgdmFsaWRhdGlvbiwgc28gdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGlzIHBlcmZvcm1lZCBvbiBkYXRhIHRoYXQgaGFzIHBhc3NlZCB2YWxpZGF0aW9uLgoKNC4gICoqVG91Y2ggYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzPyoqIE5vLCB0aGlzIHBhdGNoIGlzIGFib3V0ICpyZXN0cmljdGluZyogYW5kICp2YWxpZGF0aW5nKiB0aGUgaW5wdXQgZGF0YSBmb3JtYXQsIG5vdCBtYW5pcHVsYXRpbmcgZXhpc3RpbmcgYnVmZmVyIGJvdW5kYXJpZXMgaW4gYSB3YXkgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCByZWFkcy4gSXQmIzM5O3MgcHJldmVudGluZyBtYWxmb3JtZWQgVExWIGVsZW1lbnRzIGZyb20gYmVpbmcgcHJvY2Vzc2VkLgoKR2l2ZW4gdGhlc2UgY29uc2lkZXJhdGlvbnMsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgS01TQU4gaXNuJiMzOTt0IGRpcmVjdGx5IHJlbGV2YW50IGhlcmUuIEtNU0FOJiMzOTtzIHN0cmVuZ3RoIGxpZXMgaW4gZGV0ZWN0aW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdGFjaywgaGVhcCwgcGFnZSkgYW5kIHBvdGVudGlhbCBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcy4gVGhpcyBwYXRjaCwgaG93ZXZlciwgaXMgcHVyZWx5IGFib3V0IHBhcnNpbmcgdXNlciBpbnB1dCBhbmQgdmFsaWRhdGluZyBpdHMgc3RydWN0dXJlIGJlZm9yZSBpdCBpcyBjb3BpZWQuIEFueSBvdXQtb2YtYm91bmRzIG1lbW9yeSByZWFkcyBhcmlzaW5nIGZyb20gKmludmFsaWQqIFRMVnMgd291bGQgYmUgZGV0ZWN0ZWQgYnkgS0FTQU4uCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrIGV2ZXJ5dGhpbmc6IGlzIHRoZXJlICphbnkqIGluc3RhbmNlIHdoZXJlIGBlbGVtYCBvciByZWxhdGVkIHZhcmlhYmxlcyBjb3VsZCBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQ/IE5vcGUuIEV2ZW4gaWYgYGllX2xlbmAgaXMgemVybywgdGhlIGNvZGUgaXMgd2l0aGluIGEgY29uZGl0aW9uYWwsIGFuZCB0aGUgYGZvcl9lYWNoX2VsZW1lbnRfY29tcGxldGVkYCBjYWxsIGNvbXBhcmVzIHRoZSBpdGVyYXRvciBgZWxlbWAgYWdhaW5zdCB0aGUgZW5kIG9mIHRoZSBpbnB1dCBidWZmZXIsIGBleHRyYSAmIzQzOyBpZV9sZW5gLiBFdmVyeXRoaW5nIGlzIGluaXRpYWxpemVkIGNvcnJlY3RseS4gS0FTQU4gY292ZXJzIHRoZSBrZXkgY29uY2VybnMgYWJvdXQgYnVmZmVyIG92ZXJmbG93cyBhbmQgbWVtb3J5IGJvdW5kcyBoZXJlLiBLTVNBTiBpcyBub3QgbmVlZGVkIGhlcmUuCgpUaGVyZWZvcmUsIGZvciBjb21wbGV0ZW5lc3MsIGhlcmUmIzM5O3MgbXkgc3VtbWFyaXplZCByZWFzb25pbmcgZm9yIHdoeSBLTVNBTiBpcyBub3QgcmVxdWlyZWQ6IFRoaXMgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIG9mIHVzZXItcHJvdmlkZWQgSUVzIHBhc3NlZCB0aHJvdWdoIGBTSU9DU0lXR0VOSUVgIChgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZWApIHVzaW5nIGBmb3JfZWFjaF9lbGVtZW50KClgIC8gYGZvcl9lYWNoX2VsZW1lbnRfY29tcGxldGVkKClgIHRvIGVuc3VyZSB0aGUgZGF0YSBjb25mb3JtcyB0byB0aGUgODAyLjExIGVsZW1lbnQgVExWIHN0cnVjdHVyZSBiZWZvcmUgYmVpbmcgY29waWVkIHdpdGggYGttZW1kdXBgLiBLTVNBTiBpcyBub3QgcmVxdWlyZWQgYmVjYXVzZSB0aGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UuIFRoZSBpdGVyYXRvciBwb2ludGVyIGBlbGVtYCBpcyBpbml0aWFsaXplZCB3aXRoaW4gdGhlIG1hY3JvLCBhbmQgdGhlIGlucHV0IGlzIHVzZXItcHJvdmlkZWQuIEFueSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBhc3NvY2lhdGVkIHdpdGggbWFsZm9ybWVkIFRMVnMgKGUuZy4sIG91dC1vZi1ib3VuZHMgcmVhZHMpIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgS0FTQU4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE2OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgaW5wdXQgdmFsaWRhdGlvbiB0byBjZmc4MDIxMV93ZXh0X3Npd2dlbmllKCkgYnkgaXRlcmF0aW5nIG92ZXIgYW5kIHZlcmlmeWluZyB0aGUgc3RydWN0dXJlIG9mIHVzZXItcHJvdmlkZWQgSUVFRSA4MDIuMTEgSW5mb3JtYXRpb24gRWxlbWVudHMgKElFcykgdXNpbmcgZm9yX2VhY2hfZWxlbWVudCgpIGFuZCBmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZCgpLiBJZiB0aGUgZWxlbWVudHMgYXJlIG1hbGZvcm1lZCwgaXQgcmV0dXJucyAtRUlOVkFMIGJlZm9yZSBhbGxvY2F0aW5nIGFuZCBzYXZpbmcgdGhlIElFIGJ1ZmZlci5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MsIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlIGxvb3AgaXRlcmF0b3IgdmFyaWFibGUgYGVsZW1gIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIGJ5IHRoZSBgZm9yX2VhY2hfZWxlbWVudGAgbWFjcm8sIGFuZCB0aGUgaW5wdXQgYnVmZmVyIGNvbnRhaW5zIGRhdGEgY29waWVkIGZyb20gdXNlciBzcGFjZS4gUG90ZW50aWFsIGJ1Z3MgYWRkcmVzc2VkIG9yIHRvdWNoZWQgYnkgdGhpcyBsb2dpYyAoc3VjaCBhcyBtYWxmb3JtZWQgVExWIHBhcnNpbmcgbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIHJlYWRzKSBmYWxsIHVuZGVyIEtBU0FOJiMzOTtzIHB1cnZpZXcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgaW5wdXQgdmFsaWRhdGlvbiB0byBjZmc4MDIxMV93ZXh0X3Npd2dlbmllKCkgYnkgaXRlcmF0aW5nIG92ZXIgYW5kIHZlcmlmeWluZyB0aGUgc3RydWN0dXJlIG9mIHVzZXItcHJvdmlkZWQgSUVFRSA4MDIuMTEgSW5mb3JtYXRpb24gRWxlbWVudHMgKElFcykgdXNpbmcgZm9yX2VhY2hfZWxlbWVudCgpIGFuZCBmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZCgpLiBJZiB0aGUgZWxlbWVudHMgYXJlIG1hbGZvcm1lZCwgaXQgcmV0dXJucyAtRUlOVkFMIGJlZm9yZSBhbGxvY2F0aW5nIGFuZCBzYXZpbmcgdGhlIElFIGJ1ZmZlci5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MsIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlIGxvb3AgaXRlcmF0b3IgdmFyaWFibGUgYGVsZW1gIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIGJ5IHRoZSBgZm9yX2VhY2hfZWxlbWVudGAgbWFjcm8sIGFuZCB0aGUgaW5wdXQgYnVmZmVyIGNvbnRhaW5zIGRhdGEgY29waWVkIGZyb20gdXNlciBzcGFjZS4gUG90ZW50aWFsIGJ1Z3MgYWRkcmVzc2VkIG9yIHRvdWNoZWQgYnkgdGhpcyBsb2dpYyAoc3VjaCBhcyBtYWxmb3JtZWQgVExWIHBhcnNpbmcgbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIHJlYWRzKSBmYWxsIHVuZGVyIEtBU0FOJiMzOTtzIHB1cnZpZXcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTU6MjI6MDEuODY3NDY5OTI4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAyOTY2OTAwNTAwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiQ0ZHODAyMTFfV0VYVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNmZzgwMjExX3dleHRfc2l3Z2VuaWVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgaW5wdXQgdmFsaWRhdGlvbiB0byBjZmc4MDIxMV93ZXh0X3Npd2dlbmllKCkgYnkgaXRlcmF0aW5nIG92ZXIgYW5kIHZlcmlmeWluZyB0aGUgc3RydWN0dXJlIG9mIHVzZXItcHJvdmlkZWQgSUVFRSA4MDIuMTEgSW5mb3JtYXRpb24gRWxlbWVudHMgKElFcykgdXNpbmcgZm9yX2VhY2hfZWxlbWVudCgpIGFuZCBmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZCgpLiBJZiB0aGUgZWxlbWVudHMgYXJlIG1hbGZvcm1lZCwgaXQgcmV0dXJucyAtRUlOVkFMIGJlZm9yZSBhbGxvY2F0aW5nIGFuZCBzYXZpbmcgdGhlIElFIGJ1ZmZlci5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcywga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgb3IgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGUgbG9vcCBpdGVyYXRvciB2YXJpYWJsZSBgZWxlbWAgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYnkgdGhlIGBmb3JfZWFjaF9lbGVtZW50YCBtYWNybywgYW5kIHRoZSBpbnB1dCBidWZmZXIgY29udGFpbnMgZGF0YSBjb3BpZWQgZnJvbSB1c2VyIHNwYWNlLiBQb3RlbnRpYWwgYnVncyBhZGRyZXNzZWQgb3IgdG91Y2hlZCBieSB0aGlzIGxvZ2ljIChzdWNoIGFzIG1hbGZvcm1lZCBUTFYgcGFyc2luZyBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMpIGZhbGwgdW5kZXIgS0FTQU4ncyBwdXJ2aWV3LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBpbnB1dCB2YWxpZGF0aW9uIGZvciB3aXJlbGVzcyBpbmZvcm1hdGlvbiBlbGVtZW50cyAoSUVzKSBwYXNzZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBTSU9DU0lXR0VOSUUgd2lyZWxlc3MgZXh0ZW5zaW9uIGlvY3RsLiBJdCBpdGVyYXRlcyB0aHJvdWdoIHRoZSBlbGVtZW50IGJ1ZmZlciB1c2luZyBmb3JfZWFjaF9lbGVtZW50KCkgYW5kIHZhbGlkYXRlcyBjb21wbGV0aW9uIHdpdGggZm9yX2VhY2hfZWxlbWVudF9jb21wbGV0ZWQoKSBiZWZvcmUgY29weWluZyB0aGUgYnVmZmVyLCByZWplY3RpbmcgbWFsZm9ybWVkIGVsZW1lbnRzIHdpdGggLUVJTlZBTC4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0d29yayB3aXJlbGVzcyBjb3JlIGNvZGUgdGhhdCBjYW4gYmUgdGVzdGVkIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzIChlLmcuIHVzaW5nIG1hYzgwMjExX2h3c2ltKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTU6MjI6MDEuODY3NDc0NzU5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzc4MjY2MzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzI3MjQ5NTZjNDFhNWYxMmE4ZjYwOTcxMmZlZmUyMzMxNjk3NjdkZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxNToyMTo1OSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuYyBiL25ldC93aXJlbGVzcy93ZXh0LXNtZS5jXFxuaW5kZXggNTczYjZiMTVhNDQ2ZS4uYjU5MTRmMzY1OGRiNCAxMDA2NDRcXG4tLS0gYS9uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuY1xcbisrKyBiL25ldC93aXJlbGVzcy93ZXh0LXNtZS5jXFxuQEAgLTMxOSw2ICszMTksMTUgQEAgaW50IGNmZzgwMjExX3dleHRfc2l3Z2VuaWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRpZiAoaWVfbGVuKSB7XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBlbGVtZW50ICplbGVtO1xcbitcXG4rXFx0XFx0Zm9yX2VhY2hfZWxlbWVudChlbGVtLCBleHRyYSwgaWVfbGVuKSB7XFxuK1xcdFxcdFxcdC8qIG5vdGhpbmcgKi9cXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKCFmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZChlbGVtLCBleHRyYSwgaWVfbGVuKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbiBcXHRcXHRpZSA9IGttZW1kdXAoZXh0cmEsIGllX2xlbiwgR0ZQX0tFUk5FTCk7XFxuIFxcdFxcdGlmICghaWUpXFxuIFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNToyMjowMy4yNDYyOTc1MDdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIxNDk5MjQwNTQyNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0ZHODAyMTFcIixcbiAgICBcIkNGRzgwMjExX1dFWFRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjZmc4MDIxMV93ZXh0X3Npd2dlbmllXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBpbnB1dCB2YWxpZGF0aW9uIGZvciB3aXJlbGVzcyBpbmZvcm1hdGlvbiBlbGVtZW50cyAoSUVzKSBwYXNzZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBTSU9DU0lXR0VOSUUgd2lyZWxlc3MgZXh0ZW5zaW9uIGlvY3RsLiBJdCBpdGVyYXRlcyB0aHJvdWdoIHRoZSBlbGVtZW50IGJ1ZmZlciB1c2luZyBmb3JfZWFjaF9lbGVtZW50KCkgYW5kIHZhbGlkYXRlcyBjb21wbGV0aW9uIHdpdGggZm9yX2VhY2hfZWxlbWVudF9jb21wbGV0ZWQoKSBiZWZvcmUgY29weWluZyB0aGUgYnVmZmVyLCByZWplY3RpbmcgbWFsZm9ybWVkIGVsZW1lbnRzIHdpdGggLUVJTlZBTC4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0d29yayB3aXJlbGVzcyBjb3JlIGNvZGUgdGhhdCBjYW4gYmUgdGVzdGVkIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzIChlLmcuIHVzaW5nIG1hYzgwMjExX2h3c2ltKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzI3MjQ5NTZjNDFhNWYxMmE4ZjYwOTcxMmZlZmUyMzMxNjk3NjdkZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDE1OjIxOjU5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3dleHQtc21lLmMgYi9uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuY1xuaW5kZXggNTczYjZiMTVhNDQ2ZS4uYjU5MTRmMzY1OGRiNCAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy93ZXh0LXNtZS5jXG4rKysgYi9uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuY1xuQEAgLTMxOSw2ICszMTksMTUgQEAgaW50IGNmZzgwMjExX3dleHRfc2l3Z2VuaWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRpZiAoaWVfbGVuKSB7XG4rXHRcdGNvbnN0IHN0cnVjdCBlbGVtZW50ICplbGVtO1xuK1xuK1x0XHRmb3JfZWFjaF9lbGVtZW50KGVsZW0sIGV4dHJhLCBpZV9sZW4pIHtcbitcdFx0XHQvKiBub3RoaW5nICovXG4rXHRcdH1cbitcbitcdFx0aWYgKCFmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZChlbGVtLCBleHRyYSwgaWVfbGVuKSlcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdFx0aWUgPSBrbWVtZHVwKGV4dHJhLCBpZV9sZW4sIEdGUF9LRVJORUwpO1xuIFx0XHRpZiAoIWllKVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTU6MjI6MDMuMjQ2Mjk4ODQ3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTIwMTgyOTc5OTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgQ29kZSBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGRpZmYgYW5kIHRoZSBjb2RlYmFzZS4gSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlIHRvdWNoZXMgYG5ldC93aXJlbGVzcy93ZXh0LXNtZS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZWAgZnVuY3Rpb24uIEFscmlnaHQsIHRoYXQgdGVsbHMgbWUgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UsIGJ1dCBJIG5lZWQgdGhlIGNvbnRleHQuXG5cbkxldCdzIHN0YXJ0IGJ5IGdldHRpbmcgYSBjb3B5IG9mIGBuZXQvd2lyZWxlc3Mvd2V4dC1zbWUuY2AgYW5kIGZpZ3VyaW5nIG91dCB3aGF0J3MgY2FsbGluZyBpdCwgYW5kIGFsc28gdGhlIGNvbmZpZyBkZXBlbmRlbmNpZXMuIEknbGwgcHJvYmFibHkgdXNlIGByZWFkLWZpbGVgIHRvIGdyYWIgdGhlIHNvdXJjZSBjb2RlLCBhbmQgdGhlbiBgZ3JlcHBlcmAgdG8gc2VlIHdoZXJlIGVsc2UgaXQncyB1c2VkIGFuZCB3aGF0IEtjb25maWcgb3B0aW9ucyBhcmUgcmVsZXZhbnQuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBhbmQgd2h5IHRoaXMgc3BlY2lmaWMgc2VjdGlvbiBuZWVkZWQgdGhlIGNoYW5nZSwgYW5kIGFueSBlZGdlIGNhc2VzIHRvIHdhdGNoIGZvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEzMiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTU6MjQ6MDMuNDI5MjgxNjc0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3dpcmVsZXNzL3dleHQtc21lLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzAwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzAwOlxcdFxcdFxcdFxcdCAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKVxcbiAzMDE6XFx0e1xcbiAzMDI6XFx0XFx0c3RydWN0IGl3X3BvaW50ICpkYXRhID0gXFx1MDAyNndycXUtXFx1MDAzZWRhdGE7XFxuIDMwMzpcXHRcXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LVxcdTAwM2VpZWVlODAyMTFfcHRyO1xcbiAzMDQ6XFx0XFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fcmRldih3ZGV2LVxcdTAwM2V3aXBoeSk7XFxuIDMwNTpcXHRcXHRpbnQgaWVfbGVuID0gZGF0YS1cXHUwMDNlbGVuZ3RoO1xcbiAzMDY6XFx0XFx0dTggKmllID0gZXh0cmE7XFxuIDMwNzpcXHRcXG4gMzA4OlxcdFxcdGlmICh3ZGV2LVxcdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTilcXG4gMzA5OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gMzEwOlxcdFxcbiAzMTE6XFx0XFx0aWYgKCFpZV9sZW4pXFxuIDMxMjpcXHRcXHRcXHRpZSA9IE5VTEw7XFxuIDMxMzpcXHRcXG4gMzE0OlxcdFxcdGd1YXJkKHdpcGh5KSh3ZGV2LVxcdTAwM2V3aXBoeSk7XFxuIDMxNTpcXHRcXG4gMzE2OlxcdFxcdC8qIG5vIGNoYW5nZSAqL1xcbiAzMTc6XFx0XFx0aWYgKHdkZXYtXFx1MDAzZXdleHQuaWVfbGVuID09IGllX2xlbiBcXHUwMDI2XFx1MDAyNlxcbiAzMTg6XFx0XFx0ICAgIG1lbWNtcCh3ZGV2LVxcdTAwM2V3ZXh0LmllLCBpZSwgaWVfbGVuKSA9PSAwKVxcbiAzMTk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDMyMDpcXHRcXG4gMzIxOlxcdFxcdGlmIChpZV9sZW4pIHtcXG4gMzIyOlxcdFxcdFxcdGNvbnN0IHN0cnVjdCBlbGVtZW50ICplbGVtO1xcbiAzMjM6XFx0XFxuIDMyNDpcXHRcXHRcXHRmb3JfZWFjaF9lbGVtZW50KGVsZW0sIGV4dHJhLCBpZV9sZW4pIHtcXG4gMzI1OlxcdFxcdFxcdFxcdC8qIG5vdGhpbmcgKi9cXG4gMzI2OlxcdFxcdFxcdH1cXG4gMzI3OlxcdFxcbiAzMjg6XFx0XFx0XFx0aWYgKCFmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZChlbGVtLCBleHRyYSwgaWVfbGVuKSlcXG4gMzI5OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAzMzA6XFx0XFxuIDMzMTpcXHRcXHRcXHRpZSA9IGttZW1kdXAoZXh0cmEsIGllX2xlbiwgR0ZQX0tFUk5FTCk7XFxuIDMzMjpcXHRcXHRcXHRpZiAoIWllKVxcbiAzMzM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDMzNDpcXHRcXHR9IGVsc2Uge1xcbiAzMzU6XFx0XFx0XFx0aWUgPSBOVUxMO1xcbiAzMzY6XFx0XFx0fVxcbiAzMzc6XFx0XFxuIDMzODpcXHRcXHRrZnJlZSh3ZGV2LVxcdTAwM2V3ZXh0LmllKTtcXG4gMzM5OlxcdFxcdHdkZXYtXFx1MDAzZXdleHQuaWUgPSBpZTtcXG4gMzQwOlxcdFxcdHdkZXYtXFx1MDAzZXdleHQuaWVfbGVuID0gaWVfbGVuO1xcbiAzNDE6XFx0XFxuIDM0MjpcXHRcXHRpZiAod2Rldi1cXHUwMDNlY29ubilcXG4gMzQzOlxcdFxcdFxcdHJldHVybiBjZmc4MDIxMV9kaXNjb25uZWN0KHJkZXYsIGRldixcXG4gMzQ0OlxcdFxcdFxcdFxcdFxcdFxcdCAgIFdMQU5fUkVBU09OX0RFQVVUSF9MRUFWSU5HLCBmYWxzZSk7XFxuIDM0NTpcXHRcXG4gMzQ2OlxcdFxcdC8qIHVzZXJzcGFjZSBiZXR0ZXIgbm90IHRoaW5rIHdlJ2xsIHJlY29ubmVjdCAqL1xcbiAzNDc6XFx0XFx0cmV0dXJuIDA7XFxuIDM0ODpcXHR9XFxuIDM0OTpcXHRcXG4gMzUwOlxcdGludCBjZmc4MDIxMV93ZXh0X3Npd21sbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gMzUxOlxcdFxcdFxcdFxcdCAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbyxcXG4gMzUyOlxcdFxcdFxcdFxcdCAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpXFxuIDM1MzpcXHR7XFxuIDM1NDpcXHRcXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LVxcdTAwM2VpZWVlODAyMTFfcHRyO1xcbiAzNTU6XFx0XFx0c3RydWN0IGl3X21sbWUgKm1sbWUgPSAoc3RydWN0IGl3X21sbWUgKilleHRyYTtcXG4gMzU2OlxcdFxcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjtcXG4gMzU3OlxcdFxcbiAzNTg6XFx0XFx0aWYgKCF3ZGV2KVxcbiAzNTk6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNToyNDowMy40MjkzNzgwNjRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDQ0ODEyMjMxNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgQ29tcGlsYXRpb24gb2YgYG5ldC93aXJlbGVzcy93ZXh0LXNtZS5jYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBgbmV0L3dpcmVsZXNzL3dleHQtc21lLmNgIGlzIGJlaW5nIGNvbXBpbGVkIGFuZCB3aGF0IGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmUgaW1wYWN0aW5nIGl0cyBidWlsZCBwcm9jZXNzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIGJ1aWxkIHN5c3RlbSBpdHNlbGYuIEknbGwgbmVlZCB0byBsb2NhdGUgdGhlIHJlbGV2YW50IE1ha2VmaWxlcyDigJMgc3RhcnRpbmcgd2l0aGluIHRoZSBgbmV0L3dpcmVsZXNzL2AgZGlyZWN0b3J5IHNlZW1zIGxvZ2ljYWwuIEknbGwgYWxzbyBuZWVkIHRvIGNoZWNrIHRoZSBhc3NvY2lhdGVkIGBLY29uZmlnYCBmaWxlczsgdGhhdCdzIHdoZXJlIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZ292ZXJuIGl0cyBjb21waWxhdGlvbiB3aWxsIHJlc2lkZS4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNjQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE1OjI1OjQ3LjkxMDYwMzUyN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTk5MDIzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3ZXh0LXNtZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvd2lyZWxlc3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL01ha2VmaWxlPTEzPWNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX0RFQlVHRlMpICs9IGRlYnVnZnMub1xcbm5ldC93aXJlbGVzcy9NYWtlZmlsZToxNDpjZmc4MDIxMS0kKENPTkZJR19DRkc4MDIxMV9XRVhUKSArPSB3ZXh0LWNvbXBhdC5vIHdleHQtc21lLm9cXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGUtMTUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE1OjI1OjQ4LjAwNjYwMDg1NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwNzMwOTk3ODIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipOYXZpZ2F0aW5nIHRoZSBXaXJlbGVzcyBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYENPTkZJR19DRkc4MDIxMV9XRVhUYCBhbmQgYENPTkZJR19DRkc4MDIxMWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBgbmV0L3dpcmVsZXNzL0tjb25maWdgLiBJdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgaW50cmljYWNpZXMgb2Ygd2lyZWxlc3MgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gVGhhdCBgS2NvbmZpZ2AgZmlsZSBzaG91bGQgaG9sZCB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRob3NlIGZsYWdzIGFyZSByZWxhdGVkIGFuZCB3aGF0IGVsc2UgdGhleSBtaWdodCBkZXBlbmQgb24uIEhvcGVmdWxseSwgaXQncyBhbGwgc3RyYWlnaHRmb3J3YXJkLCBhbmQgSSBjYW4gcXVpY2tseSBtYXAgb3V0IHRoZSBuZWNlc3NhcnkgcmVsYXRpb25zaGlwcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY3OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE1OjI2OjM4LjczNzYwMjQ4OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mzg1ODIzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDRkc4MDIxMV9XRVhUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvd2lyZWxlc3MvS2NvbmZpZz01PWNvbmZpZyBXRVhUX0NPUkVcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy02LVxcdGRlZl9ib29sIHlcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo3OlxcdGRlcGVuZHMgb24gQ0ZHODAyMTFfV0VYVCB8fCBXSVJFTEVTU19FWFRcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy04LVxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWc9MTc3PWNvbmZpZyBDRkc4MDIxMV9DUkRBX1NVUFBPUlRcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4Ni1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxODc6Y29uZmlnIENGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODgtXFx0Ym9vbCBcXFwiY2ZnODAyMTEgd2lyZWxlc3MgZXh0ZW5zaW9ucyBjb21wYXRpYmlsaXR5XFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL01ha2VmaWxlPTEzPWNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX0RFQlVHRlMpICs9IGRlYnVnZnMub1xcbm5ldC93aXJlbGVzcy9NYWtlZmlsZToxNDpjZmc4MDIxMS0kKENPTkZJR19DRkc4MDIxMV9XRVhUKSArPSB3ZXh0LWNvbXBhdC5vIHdleHQtc21lLm9cXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGUtMTUtXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jPTU0Nj1zdHJ1Y3Qgd2lwaHkgKndpcGh5X25ld19ubShjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfb3BzICpvcHMsIGludCBzaXplb2ZfcHJpdixcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmMtNjMzLVxcdFxcdFxcdCAgY2ZnODAyMTFfZGZzX2NoYW5uZWxzX3VwZGF0ZV93b3JrKTtcXG5uZXQvd2lyZWxlc3MvY29yZS5jOjYzNDojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTYzNS1cXHRyZGV2LVxcdTAwM2V3aXBoeS53ZXh0ID0gXFx1MDAyNmNmZzgwMjExX3dleHRfaGFuZGxlcjtcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmM9MTQwND1zdGF0aWMgdm9pZCBfY2ZnODAyMTFfdW5yZWdpc3Rlcl93ZGV2KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE0NDMtXFxubmV0L3dpcmVsZXNzL2NvcmUuYzoxNDQ0OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTQ0NS1cXHRrZnJlZV9zZW5zaXRpdmUod2Rldi1cXHUwMDNld2V4dC5rZXlzKTtcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmM9MTQ5OD12b2lkIGNmZzgwMjExX2xlYXZlX2xvY2tlZChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE1MjItXFxubmV0L3dpcmVsZXNzL2NvcmUuYzoxNTIzOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTUyNC1cXHRcXHRrZnJlZSh3ZGV2LVxcdTAwM2V3ZXh0LmllKTtcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmM9MTYwOT12b2lkIGNmZzgwMjExX2luaXRfd2RldihzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNjE3LVxcbm5ldC93aXJlbGVzcy9jb3JlLmM6MTYxODojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE2MTktXFx0d2Rldi1cXHUwMDNld2V4dC5kZWZhdWx0X2tleSA9IC0xO1xcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYz0xNzAyPXN0YXRpYyBpbnQgY2ZnODAyMTFfbmV0ZGV2X25vdGlmaWVyX2NhbGwoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTc3Ni1cXHRcXHRzd2l0Y2ggKHdkZXYtXFx1MDAzZWlmdHlwZSkge1xcbm5ldC93aXJlbGVzcy9jb3JlLmM6MTc3NzojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE3NzgtXFx0XFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzpcXG4tLVxcbm5ldC93aXJlbGVzcy9pYnNzLmM9MTk9dm9pZCBfX2NmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCxcXG4tLVxcbm5ldC93aXJlbGVzcy9pYnNzLmMtMjMtXFx0c3RydWN0IGNmZzgwMjExX2JzcyAqYnNzO1xcbm5ldC93aXJlbGVzcy9pYnNzLmM6MjQ6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL2lic3MuYy0yNS1cXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XFxuLS1cXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTUxLVxcdFxcdFxcdFxcdEdGUF9LRVJORUwpO1xcbm5ldC93aXJlbGVzcy9pYnNzLmM6NTI6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL2lic3MuYy01My1cXHRtZW1zZXQoXFx1MDAyNndycXUsIDAsIHNpemVvZih3cnF1KSk7XFxuLS1cXG5uZXQvd2lyZWxlc3MvaWJzcy5jPTg3PWludCBfX2NmZzgwMjExX2pvaW5faWJzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTE0MC1cXG5uZXQvd2lyZWxlc3MvaWJzcy5jOjE0MTojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTE0Mi1cXHR3ZGV2LVxcdTAwM2V3ZXh0Lmlic3MuY2hhbmRlZiA9IHBhcmFtcy1cXHUwMDNlY2hhbmRlZjtcXG4tLVxcbm5ldC93aXJlbGVzcy9pYnNzLmM9MTU2PXZvaWQgY2ZnODAyMTFfY2xlYXJfaWJzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG5vd2V4dClcXG4tLVxcbm5ldC93aXJlbGVzcy9pYnNzLmMtMTg0LVxcdG1lbXNldChcXHUwMDI2d2Rldi1cXHUwMDNldS5pYnNzLmNoYW5kZWYsIDAsIHNpemVvZih3ZGV2LVxcdTAwM2V1Lmlic3MuY2hhbmRlZikpO1xcbm5ldC93aXJlbGVzcy9pYnNzLmM6MTg1OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9pYnNzLmMtMTg2LVxcdGlmICghbm93ZXh0KVxcbi0tXFxubmV0L3dpcmVsZXNzL2lic3MuYz0xOTI9aW50IGNmZzgwMjExX2xlYXZlX2lic3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL2lic3MuYy0yMTMtXFxubmV0L3dpcmVsZXNzL2lic3MuYzoyMTQ6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL2lic3MuYy0yMTUtaW50IGNmZzgwMjExX2lic3Nfd2V4dF9qb2luKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4tLVxcbm5ldC93aXJlbGVzcy9tbG1lLmM9MjM0PXZvaWQgY2ZnODAyMTFfbWljaGFlbF9taWNfZmFpbHVyZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkcixcXG4tLVxcbm5ldC93aXJlbGVzcy9tbG1lLmMtMjM5LVxcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX3JkZXYod2lwaHkpO1xcbm5ldC93aXJlbGVzcy9tbG1lLmM6MjQwOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9tbG1lLmMtMjQxLVxcdHVuaW9uIGl3cmVxX2RhdGEgd3JxdTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NTQ1OT1zdGF0aWMgaW50IG5sODAyMTFfc2V0X2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01NTAxLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NTUwMjojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTU1MDMtXFx0XFx0d2Rldi1cXHUwMDNld2V4dC5kZWZhdWx0X2tleSA9IGtleS5pZHg7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTU1MjQtXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo1NTI1OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTUyNi1cXHRcXHR3ZGV2LVxcdTAwM2V3ZXh0LmRlZmF1bHRfbWdtdF9rZXkgPSBrZXkuaWR4O1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz01NjM3PXN0YXRpYyBpbnQgbmw4MDIxMV9kZWxfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTU2ODYtXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo1Njg3OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTY4OC1cXHRpZiAoIWVycikge1xcbi0tXFxubmV0L3dpcmVsZXNzL3NjYW4uYz0xMTE0PXZvaWQgX19fY2ZnODAyMTFfc2Nhbl9kb25lKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4tLVxcbm5ldC93aXJlbGVzcy9zY2FuLmMtMTExOS1cXHRzdHJ1Y3Qgc2tfYnVmZiAqbXNnO1xcbm5ldC93aXJlbGVzcy9zY2FuLmM6MTEyMDojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTExMjEtXFx0dW5pb24gaXdyZXFfZGF0YSB3cnF1O1xcbi0tXFxubmV0L3dpcmVsZXNzL3NjYW4uYy0xMTYyLVxcbm5ldC93aXJlbGVzcy9zY2FuLmM6MTE2MzojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTExNjQtXFx0aWYgKHdkZXYtXFx1MDAzZW5ldGRldiBcXHUwMDI2XFx1MDAyNiAhcmVxdWVzdC1cXHUwMDNlaW5mby5hYm9ydGVkKSB7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jPTM0MTQ9dm9pZCBjZmc4MDIxMV91cGRhdGVfYXNzb2NfYnNzX2VudHJ5KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTM0ODctXFxubmV0L3dpcmVsZXNzL3NjYW4uYzozNDg4OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9zY2FuLmMtMzQ4OS1zdGF0aWMgc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpcXG4tLVxcbm5ldC93aXJlbGVzcy9zbWUuYz03MzU9dm9pZCBfX2NmZzgwMjExX2Nvbm5lY3RfcmVzdWx0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvc21lLmMtNzQzLVxcdHU4IGNvdW50cnlfZGF0YWxlbjtcXG5uZXQvd2lyZWxlc3Mvc21lLmM6NzQ0OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9zbWUuYy03NDUtXFx0dW5pb24gaXdyZXFfZGF0YSB3cnF1O1xcbi0tXFxubmV0L3dpcmVsZXNzL3NtZS5jLTc3NC1cXG5uZXQvd2lyZWxlc3Mvc21lLmM6Nzc1OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9zbWUuYy03NzYtXFx0aWYgKHdleHRldiBcXHUwMDI2XFx1MDAyNiAhY3ItXFx1MDAzZXZhbGlkX2xpbmtzKSB7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvc21lLmM9MTA3OT12b2lkIF9fY2ZnODAyMTFfcm9hbWVkKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvc21lLmMtMTA4MS17XFxubmV0L3dpcmVsZXNzL3NtZS5jOjEwODI6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL3NtZS5jLTEwODMtXFx0dW5pb24gaXdyZXFfZGF0YSB3cnF1O1xcbi0tXFxubmV0L3dpcmVsZXNzL3NtZS5jLTExMzQtXFxubmV0L3dpcmVsZXNzL3NtZS5jOjExMzU6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL3NtZS5jLTExMzYtXFx0aWYgKCFpbmZvLVxcdTAwM2V2YWxpZF9saW5rcykge1xcbi0tXFxubmV0L3dpcmVsZXNzL3NtZS5jPTEzNDM9dm9pZCBfX2NmZzgwMjExX2Rpc2Nvbm5lY3RlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqaWUsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvc21lLmMtMTM0OC1cXHRpbnQgaTtcXG5uZXQvd2lyZWxlc3Mvc21lLmM6MTM0OTojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3Mvc21lLmMtMTM1MC1cXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvc21lLmMtMTM5NC1cXG5uZXQvd2lyZWxlc3Mvc21lLmM6MTM5NTojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3Mvc21lLmMtMTM5Ni1cXHRtZW1zZXQoXFx1MDAyNndycXUsIDAsIHNpemVvZih3cnF1KSk7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmM9NjM3PUVYUE9SVF9TWU1CT0wod2lyZWxlc3Nfc2VuZF9ldmVudCk7XFxubmV0L3dpcmVsZXNzL3dleHQtY29yZS5jLTYzOC1cXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmM6NjM5OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYy02NDAtc3RhdGljIHZvaWQgd2lyZWxlc3Nfd2Fybl9jZmc4MDIxMV93ZXh0KHZvaWQpXFxuLS1cXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmM9NjQ5PXN0cnVjdCBpd19zdGF0aXN0aWNzICpnZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYy02NTYtXFxubmV0L3dpcmVsZXNzL3dleHQtY29yZS5jOjY1NzojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmMtNjU4LVxcdGlmIChkZXYtXFx1MDAzZWllZWU4MDIxMV9wdHIgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYz02OTc9c3RhdGljIGl3X2hhbmRsZXIgZ2V0X2hhbmRsZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZClcXG4tLVxcbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYy03MDItXFxubmV0L3dpcmVsZXNzL3dleHQtY29yZS5jOjcwMzojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmMtNzA0LVxcdGlmIChkZXYtXFx1MDAzZWllZWU4MDIxMV9wdHIgXFx1MDAyNlxcdTAwMjYgZGV2LVxcdTAwM2VpZWVlODAyMTFfcHRyLVxcdTAwM2V3aXBoeSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNToyNjozOC44MDE0NjUyNzZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4NzQ4MjE0Njk1ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgQ0ZHODAyMTFfV0VYVGAgRGVwZW5kZW5jaWVzKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBzdXJyb3VuZGluZyBgQ0ZHODAyMTFfV0VYVGAgaW4gdGhlIGtlcm5lbCdzIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24uIEknbSBnb2luZyB0byBxdWlja2x5IG5hdmlnYXRlIG92ZXIgdG8gYG5ldC93aXJlbGVzcy9LY29uZmlnYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdGFrZSBhIGhhcmQgbG9vayBhdCB0aGUgYEtjb25maWdgIGZpbGUgYW5kIG1ldGljdWxvdXNseSB0cmFjZSBhbGwgZGVwZW5kZW5jaWVzIGFuZCBkZWZhdWx0cyBhc3NvY2lhdGVkIHdpdGggdGhlIGBDRkc4MDIxMV9XRVhUYCBzeW1ib2wuIFRoaXMgd2lsbCBxdWlja2x5IGdpdmUgbWUgYW4gb3ZlcnZpZXcgb2YgdGhlIGJ1aWxkIHNldHRpbmdzIHRoYXQgYWZmZWN0IHRoaXMsIGFuZCBpZGVudGlmeSBhbnkga25vY2stb24gZWZmZWN0cyB0aGF0IG5lZWQgdG8gYmUgY29uc2lkZXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzAxMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE1OjQxOjEzLjYyMjkzNzMyN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjY5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvd2lyZWxlc3MvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxODA6XFx0XFx0aGVscFxcbiAxODE6XFx0XFx0ICBZb3Ugc2hvdWxkIGVuYWJsZSB0aGlzIG9wdGlvbiB1bmxlc3MgeW91IGtub3cgZm9yIHN1cmUgeW91IGhhdmUgbm9cXG4gMTgyOlxcdFxcdCAgbmVlZCBmb3IgaXQsIGZvciBleGFtcGxlIHdoZW4gdXNpbmcgdGhlIHJlZ3VsYXRvcnkgZGF0YWJhc2UgbG9hZGVkIGFzXFxuIDE4MzpcXHRcXHQgIGEgZmlybXdhcmUgZmlsZS5cXG4gMTg0OlxcdFxcbiAxODU6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAxODY6XFx0XFxuIDE4NzpcXHRjb25maWcgQ0ZHODAyMTFfV0VYVFxcbiAxODg6XFx0XFx0Ym9vbCBcXFwiY2ZnODAyMTEgd2lyZWxlc3MgZXh0ZW5zaW9ucyBjb21wYXRpYmlsaXR5XFxcIlxcbiAxODk6XFx0XFx0c2VsZWN0IFdFWFRfQ09SRVxcbiAxOTA6XFx0XFx0aGVscFxcbiAxOTE6XFx0XFx0ICBFbmFibGUgdGhpcyBvcHRpb24gaWYgeW91IG5lZWQgb2xkIHVzZXJzcGFjZSBmb3Igd2lyZWxlc3NcXG4gMTkyOlxcdFxcdCAgZXh0ZW5zaW9ucyB3aXRoIGNmZzgwMjExLWJhc2VkIGRyaXZlcnMuXFxuIDE5MzpcXHRcXG4gMTk0OlxcdGNvbmZpZyBDRkc4MDIxMV9LVU5JVF9URVNUXFxuIDE5NTpcXHRcXHR0cmlzdGF0ZSBcXFwiS1VuaXQgdGVzdHMgZm9yIGNmZzgwMjExXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuIDE5NjpcXHRcXHRkZXBlbmRzIG9uIEtVTklUXFxuIDE5NzpcXHRcXHRkZXBlbmRzIG9uIENGRzgwMjExXFxuIDE5ODpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAxOTk6XFx0XFx0aGVscFxcbiAyMDA6XFx0XFx0ICBFbmFibGUgdGhpcyBvcHRpb24gdG8gdGVzdCBjZmc4MDIxMSBmdW5jdGlvbnMgd2l0aCBrdW5pdC5cXG4gMjAxOlxcdFxcbiAyMDI6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAyMDM6XFx0XFxuIDIwNDpcXHRlbmRpZiAjIENGRzgwMjExXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE1OjQxOjEzLjYyMjk5NjIyN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTIzMjg5MTIzMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIEkgbmVlZCB0byBkZWx2ZSBpbnRvIGBuZXQvd2lyZWxlc3MvS2NvbmZpZ2AuIFNwZWNpZmljYWxseSwgSSdtIGFpbWluZyB0byBnZXQgYSBoYW5kbGUgb24gYENGRzgwMjExYC4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBzdGFydCwgYW5kIHdoZXJlIEknbSBnb2luZyB0byBmaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRpbWUgdG8gc2VlIHdoYXQncyB3aGF0IGluIHRoZXJlLiBUaGlzIGlzIGEgY29tbW9uIHN0YXJ0aW5nIHBvaW50IHdoZW4gY29uZmlndXJpbmcgdGhlIHdpcmVsZXNzIHN0YWNrLCBhbmQgdGhlIG9wdGlvbnMgZm91bmQgaGVyZSBvZnRlbiBkaWN0YXRlIGEgbG90IG9mIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIHdpcmVsZXNzIHN1YnN5c3RlbXMgSSdtIHdvcmtpbmcgd2l0aC4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjIwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNTo0NjoyNS45NTE5MTI1NDFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgV0lSRUxFU1NfRVhUXFxuICAgMzpcXHRcXHRib29sXFxuICAgNDpcXHRcXG4gICA1OlxcdGNvbmZpZyBXRVhUX0NPUkVcXG4gICA2OlxcdFxcdGRlZl9ib29sIHlcXG4gICA3OlxcdFxcdGRlcGVuZHMgb24gQ0ZHODAyMTFfV0VYVCB8fCBXSVJFTEVTU19FWFRcXG4gICA4OlxcdFxcbiAgIDk6XFx0Y29uZmlnIFdFWFRfUFJPQ1xcbiAgMTA6XFx0XFx0ZGVmX2Jvb2wgeVxcbiAgMTE6XFx0XFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXFxuICAxMjpcXHRcXHRkZXBlbmRzIG9uIFdFWFRfQ09SRVxcbiAgMTM6XFx0XFxuICAxNDpcXHRjb25maWcgV0VYVF9QUklWXFxuICAxNTpcXHRcXHRib29sXFxuICAxNjpcXHRcXG4gIDE3OlxcdGNvbmZpZyBDRkc4MDIxMVxcbiAgMTg6XFx0XFx0dHJpc3RhdGUgXFxcImNmZzgwMjExIC0gd2lyZWxlc3MgY29uZmlndXJhdGlvbiBBUElcXFwiXFxuICAxOTpcXHRcXHRkZXBlbmRzIG9uIFJGS0lMTCB8fCAhUkZLSUxMXFxuICAyMDpcXHRcXHRzZWxlY3QgRldfTE9BREVSXFxuICAyMTpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDIyOlxcdFxcdCMgbWF5IG5lZWQgdG8gdXBkYXRlIHRoaXMgd2hlbiBjZXJ0aWZpY2F0ZXMgYXJlIGNoYW5nZWQgYW5kIGFyZVxcbiAgMjM6XFx0XFx0IyB1c2luZyBhIGRpZmZlcmVudCBhbGdvcml0aG0sIHRob3VnaCByaWdodCBub3cgdGhleSBzaG91bGRuJ3RcXG4gIDI0OlxcdFxcdCMgKHRoaXMgaXMgaGVyZSByYXRoZXIgdGhhbiBiZWxvdyB0byBhbGxvdyBpdCB0byBiZSBhIG1vZHVsZSlcXG4gIDI1OlxcdFxcdHNlbGVjdCBDUllQVE9fU0hBMjU2IGlmIENGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xcbiAgMjY6XFx0XFx0aGVscFxcbiAgMjc6XFx0XFx0ICBjZmc4MDIxMSBpcyB0aGUgTGludXggd2lyZWxlc3MgTEFOICg4MDIuMTEpIGNvbmZpZ3VyYXRpb24gQVBJLlxcbiAgMjg6XFx0XFx0ICBFbmFibGUgdGhpcyBpZiB5b3UgaGF2ZSBhIHdpcmVsZXNzIGRldmljZS5cXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiByZWZlciB0byBkb2N1bWVudGF0aW9uIG9uIHRoZSB3aXJlbGVzcyB3aWtpOlxcbiAgMzE6XFx0XFxuICAzMjpcXHRcXHQgIGh0dHBzOi8vd2lyZWxlc3Mud2lraS5rZXJuZWwub3JnL2VuL2RldmVsb3BlcnMvRG9jdW1lbnRhdGlvbi9jZmc4MDIxMVxcbiAgMzM6XFx0XFxuICAzNDpcXHRcXHQgIFdoZW4gYnVpbHQgYXMgYSBtb2R1bGUgaXQgd2lsbCBiZSBjYWxsZWQgY2ZnODAyMTEuXFxuICAzNTpcXHRcXG4gIDM2OlxcdGlmIENGRzgwMjExXFxuICAzNzpcXHRcXG4gIDM4OlxcdGNvbmZpZyBOTDgwMjExX1RFU1RNT0RFXFxuICAzOTpcXHRcXHRib29sIFxcXCJubDgwMjExIHRlc3Rtb2RlIGNvbW1hbmRcXFwiXFxuICA0MDpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE1OjQ2OjI1Ljk1MjAxOTk0MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDIzMDU2MTE5ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgYGNmZzgwMjExX3dleHRfc2l3Z2VuaWVgIEZ1bmN0aW9uIENhbGwqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBjZmc4MDIxMV93ZXh0X3Npd2dlbmllYCBpcyBhY3R1YWxseSB1c2VkLiBJIGtub3cgaXRzIHB1cnBvc2UsIGJ1dCBrbm93aW5nIHRoZSBjb250ZXh0IG9mIGl0cyBjYWxscyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgb3ZlcmFsbCByb2xlIGFuZCBwb3RlbnRpYWwgaW1wYWN0LiBTbywgZmlyc3QgdGhpbmdzIGZpcnN0LCBJJ20gZ29pbmcgdG8gcnVuIGEgcXVpY2sgc2VhcmNoLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBpbiB0aGUga2VybmVsIGNvZGUgdGhhdCB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gaXMgZ2V0dGluZyBjYWxsZWQuIE5vIHBvaW50IGluIHRyeWluZyB0byB0cmFjZSB0aGUgbG9naWMgbWFudWFsbHksIGxldCdzIHN0YXJ0IHdpdGggYSBiaXQgb2YgY29kZSBhcmNoYWVvbG9neS4gTGV0J3Mgc2VlIHdoYXQgdGhlIGdyZXAgY29tbWFuZCB3aWxsIHR1cm4gdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzNDgsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE1OjQ4OjQ4LjI1NzYzNTY1NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM2MzUwNjI4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjZmc4MDIxMV93ZXh0X3Npd2dlbmllXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jPTE0ODQ9c3RhdGljIGNvbnN0IGl3X2hhbmRsZXIgY2ZnODAyMTFfaGFuZGxlcnNbXSA9IHtcXG4tLVxcbm5ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jLTE1MTEtXFx0SVdfSEFORExFUihTSU9DR0lXUE9XRVIsXFx0Y2ZnODAyMTFfd2V4dF9naXdwb3dlciksXFxubmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmM6MTUxMjpcXHRJV19IQU5ETEVSKFNJT0NTSVdHRU5JRSxcXHRjZmc4MDIxMV93ZXh0X3Npd2dlbmllKSxcXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYy0xNTEzLVxcdElXX0hBTkRMRVIoU0lPQ1NJV0FVVEgsXFx0XFx0Y2ZnODAyMTFfd2V4dF9zaXdhdXRoKSxcXG4tLVxcbm5ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5oPTQ2PWludCBjZmc4MDIxMV93ZXh0X3Npd21sbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5oLTQ4LVxcdFxcdFxcdCAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpO1xcbm5ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5oOjQ5OmludCBjZmc4MDIxMV93ZXh0X3Npd2dlbmllKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmgtNTAtXFx0XFx0XFx0ICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbyxcXG4tLVxcbm5ldC93aXJlbGVzcy93ZXh0LXNtZS5jPTI3Mz1pbnQgY2ZnODAyMTFfbWdkX3dleHRfZ2l3YXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC93aXJlbGVzcy93ZXh0LXNtZS5jLTI5Ny1cXG5uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuYzoyOTg6aW50IGNmZzgwMjExX3dleHRfc2l3Z2VuaWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuYy0yOTktXFx0XFx0XFx0ICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTU6NDg6NTEuNjIxMTQ5MzczWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2NzU0MDQ4MDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGNmZzgwMjExX3dleHRfc2l3Z2VuaWVgIEhhbmRsZXIgZm9yIGBTSU9DU0lXR0VOSUVgKipcblxuT2theSwgc28gYGNmZzgwMjExX3dleHRfc2l3Z2VuaWVgIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIGhhbmRsaW5nIHRoZSBgU0lPQ1NJV0dFTklFYCBpb2N0bC4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuIEl0J3MgdGhlIHN0YW5kYXJkIHdpcmVsZXNzIGV4dGVuc2lvbnMgaW9jdGwsIHRoZSBvbmUgeW91J2Qgc2VuZCB0aHJvdWdoIGEgc29ja2V0IGZpbGUgZGVzY3JpcHRvciB3aXRoIGBpb2N0bChzb2NrZmQsIFNJT0NTSVdHRU5JRSwgLi4uKWAuIE5hdHVyYWxseSwgYW55IHdpcmVsZXNzIGRldmljZSBsZXZlcmFnaW5nIGBjZmc4MDIxMWAsIGxpa2UgdGhlIGBtYWM4MDIxMV9od3NpbWAgbW9kdWxlIG9yIGEgdmlydHVhbGl6ZWQgd2lyZWxlc3MgZGV2aWNlIGluIHNvbWV0aGluZyBsaWtlIHN5emthbGxlciBvciBRRU1VLCB3b3VsZCB1c2UgdGhpcyBpZiBgQ09ORklHX0NGRzgwMjExX1dFWFRgIGlzIGVuYWJsZWQuXG5cbkxldCdzIGRpdmUgaW50byB0aGUgcGF0Y2ggYW5kIHNlZSB3aGF0IGl0J3MgYWN0dWFsbHkgZG9pbmcgd2l0aGluIHRoYXQgYGNmZzgwMjExX3dleHRfc2l3Z2VuaWUoKWAgZnVuY3Rpb24uIEFoLCBoZXJlIGl0IGlzOiB0aGUgYWRkZWQgY29kZSBibG9jay4gSXQgbG9va3MgbGlrZSBpdCdzIHByaW1hcmlseSBmb2N1c2VkIG9uIHZhbGlkYXRpbmcgdGhlIElFIChJbmZvcm1hdGlvbiBFbGVtZW50KSBidWZmZXIgdGhhdCdzIHBhc3NlZCBpbiBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBTSU9DU0lXR0VOSUVgIGlvY3RsLiBJdCdzIHVzaW5nIGBmb3JfZWFjaF9lbGVtZW50KClgIGFuZCBgZm9yX2VhY2hfZWxlbWVudF9jb21wbGV0ZWQoKWAgdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBJRSBidWZmZXIsIGVuc3VyaW5nIHRoYXQgaXQncyBhIHdlbGwtZm9ybWVkIGVsZW1lbnQgbGlzdC4gSWYgdGhlIHN0cnVjdHVyZSBpcyBpbnZhbGlkIGF0IGFueSBwb2ludCBkdXJpbmcgaXRlcmF0aW9uLCBpdCByZXR1cm5zIGAtRUlOVkFMYC4gVGhpcyBpcyBhIHByZXR0eSBzdGFuZGFyZCBhcHByb2FjaCBmb3IgcGFyc2luZyBJRSBkYXRhLlxuXG5Ob3csIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYGZvcl9lYWNoX2VsZW1lbnRgIGluIHRoZSBrZXJuZWwgc291cmNlIHRvIGdldCBhIGNvbXBsZXRlIGdyYXNwIG9uIGhvdyB0aGVzZSBlbGVtZW50cyBhcmUgaXRlcmF0ZWQuIFRoYXQncyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgdmFsaWRhdGlvbiBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTAzOCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNTo0OTozOC4zNzUxOTkyODRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjc2NzMwOCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9yX2VhY2hfZWxlbWVudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL25ldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTU6NDk6MzguNDgxOTc0ODkzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY1NjMyMDYwMTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGF0IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgRGVlcCBpbnRvIHRoZSBDb2RlYmFzZTogVGhlIGBmb3JfZWFjaF9lbGVtZW50YCBRdWVzdCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ3ZlIGdvdCBhIGZlZWxpbmcgdGhlcmUncyBzb21ldGhpbmcgaW50ZXJlc3RpbmcgbHVya2luZyBhcm91bmQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBmb3JfZWFjaF9lbGVtZW50YC4gSXQncyBhIGZhaXJseSBjb21tb24gY29uc3RydWN0LCBidXQgSSBzdXNwZWN0IGl0cyB1c2UgY2FzZXMgbWlnaHQgYmUgbW9yZSBkaXZlcnNlIHRoYW4gSSBpbml0aWFsbHkgdGhvdWdodCwgb3IgbWF5YmUgSSdtIGxvb2tpbmcgZm9yIGEgc3BlY2lmaWMgdXNhZ2UgcGF0dGVybi4gSSBuZWVkIHRvIGdldCBhIHJlYWxseSBnb29kIG92ZXJ2aWV3IG9mIHdoZXJlIHRoaXMgaXMgdXNlZCB3aXRoaW4gdGhlIHByb2plY3QuIEEgd2lkZSBzZWFyY2ggd2lsbCBnZXQgbWUgdXAtdG8tc3BlZWQuXG5MZXQncyBjYXN0IGEgd2lkZSBuZXQgYWNyb3NzIHRoZSBlbnRpcmUgY29kZWJhc2UgYW5kIHNlZSB3aGF0IHBvcHMgdXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0cywgdGhlIGRhdGEgdHlwZXMgaXQncyBvcGVyYXRpbmcgb24sIGFuZCBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gRmluZGluZyBldmVyeSBpbnN0YW5jZSBvZiBgZm9yX2VhY2hfZWxlbWVudGAgaXMgdGhlIGZpcnN0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4MjMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNTo1MDo0NC4xMTQwMzkyMTZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NjU3NzIyMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2RlZmluZSBmb3JfZWFjaF9lbGVtZW50XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaWVlZTgwMjExLmg9MjcxNT1zdHJ1Y3QgZWxlbWVudCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oLTI3MjEtLyogZWxlbWVudCBpdGVyYXRpb24gaGVscGVycyAqL1xcbmluY2x1ZGUvbGludXgvaWVlZTgwMjExLmg6MjcyMjojZGVmaW5lIGZvcl9lYWNoX2VsZW1lbnQoX2VsZW0sIF9kYXRhLCBfZGF0YWxlbilcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaC0yNzIzLVxcdGZvciAoX2VsZW0gPSAoY29uc3Qgc3RydWN0IGVsZW1lbnQgKikoX2RhdGEpO1xcdFxcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvaWVlZTgwMjExLmgtMjcyOS1cXG5pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oOjI3MzA6I2RlZmluZSBmb3JfZWFjaF9lbGVtZW50X2lkKGVsZW1lbnQsIF9pZCwgZGF0YSwgZGF0YWxlbilcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaC0yNzMxLVxcdGZvcl9lYWNoX2VsZW1lbnQoZWxlbWVudCwgZGF0YSwgZGF0YWxlbilcXHRcXHRcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oLTI3MzMtXFxuaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaDoyNzM0OiNkZWZpbmUgZm9yX2VhY2hfZWxlbWVudF9leHRpZChlbGVtZW50LCBleHRpZCwgX2RhdGEsIF9kYXRhbGVuKVxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oLTI3MzUtXFx0Zm9yX2VhY2hfZWxlbWVudChlbGVtZW50LCBfZGF0YSwgX2RhdGFsZW4pXFx0XFx0XFx0XFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNTo1MDo0Ny41Nzk4MTk4MzFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODU3MzE0MTY3MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gSUVFRSA4MDIuMTEgSGVhZGVyIERlZmluaXRpb25zKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIHRoZSBMaW51eCB3aXJlbGVzcyBzdGFjay4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkYXRhIHN0cnVjdHVyZXMgYXNzb2NpYXRlZCB3aXRoIDgwMi4xMSBmcmFtZXMsIHNwZWNpZmljYWxseSBhcm91bmQgd2hlcmUgdGhleSBoYW5kbGUgdGhlIHZhcmlvdXMgZWxlbWVudHMuIExldCdzIHN0YXJ0IHdpdGggYGluY2x1ZGUvbGludXgvaWVlZTgwMjExLmhgLiAgSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHdoYXQncyBkZWZpbmVkIGFyb3VuZCBsaW5lIDI3MjAsIHRoYXQgYXJlYSBzaG91bGQgaG9sZCBzb21lIHBlcnRpbmVudCBkZWZpbml0aW9ucywgbGlrZWx5IHJlbGF0ZWQgdG8gW2luc2VydCB5b3VyIHNwZWNpZmljIGludGVyZXN0IGJhc2VkIG9uIGZpZWxkXS4gTWlnaHQgYmUgdXNlZnVsIHRvIHVuZGVyc3RhbmQgaG93IHNwZWNpZmljIGZyYW1lIHR5cGVzIG9yIGZpZWxkIGNvbmZpZ3VyYXRpb25zIGFyZSBiZWluZyBzdG9yZWQgb3IgcHJvY2Vzc2VkIGF0IHRoYXQgc3RhZ2Ugb2YgdGhlIHN0YWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM4MiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE1OjUyOjEzLjMxMTI0MDA0OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODA3NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAyNzE1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNzE1OlxcdHN0cnVjdCBlbGVtZW50IHtcXG4yNzE2OlxcdFxcdHU4IGlkO1xcbjI3MTc6XFx0XFx0dTggZGF0YWxlbjtcXG4yNzE4OlxcdFxcdHU4IGRhdGFbXTtcXG4yNzE5OlxcdH0gX19wYWNrZWQ7XFxuMjcyMDpcXHRcXG4yNzIxOlxcdC8qIGVsZW1lbnQgaXRlcmF0aW9uIGhlbHBlcnMgKi9cXG4yNzIyOlxcdCNkZWZpbmUgZm9yX2VhY2hfZWxlbWVudChfZWxlbSwgX2RhdGEsIF9kYXRhbGVuKVxcdFxcdFxcdFxcXFxcXG4yNzIzOlxcdFxcdGZvciAoX2VsZW0gPSAoY29uc3Qgc3RydWN0IGVsZW1lbnQgKikoX2RhdGEpO1xcdFxcdFxcdFxcXFxcXG4yNzI0OlxcdFxcdCAgICAgKGNvbnN0IHU4ICopKF9kYXRhKSArIChfZGF0YWxlbikgLSAoY29uc3QgdTggKilfZWxlbSBcXHUwMDNlPVxcdFxcXFxcXG4yNzI1OlxcdFxcdFxcdChpbnQpc2l6ZW9mKCpfZWxlbSkgXFx1MDAyNlxcdTAwMjZcXHRcXHRcXHRcXHRcXHRcXFxcXFxuMjcyNjpcXHRcXHQgICAgIChjb25zdCB1OCAqKShfZGF0YSkgKyAoX2RhdGFsZW4pIC0gKGNvbnN0IHU4ICopX2VsZW0gXFx1MDAzZT1cXHRcXFxcXFxuMjcyNzpcXHRcXHRcXHQoaW50KXNpemVvZigqX2VsZW0pICsgX2VsZW0tXFx1MDAzZWRhdGFsZW47XFx0XFx0XFx0XFxcXFxcbjI3Mjg6XFx0XFx0ICAgICBfZWxlbSA9IChjb25zdCBzdHJ1Y3QgZWxlbWVudCAqKShfZWxlbS1cXHUwMDNlZGF0YSArIF9lbGVtLVxcdTAwM2VkYXRhbGVuKSlcXG4yNzI5OlxcdFxcbjI3MzA6XFx0I2RlZmluZSBmb3JfZWFjaF9lbGVtZW50X2lkKGVsZW1lbnQsIF9pZCwgZGF0YSwgZGF0YWxlbilcXHRcXHRcXFxcXFxuMjczMTpcXHRcXHRmb3JfZWFjaF9lbGVtZW50KGVsZW1lbnQsIGRhdGEsIGRhdGFsZW4pXFx0XFx0XFx0XFxcXFxcbjI3MzI6XFx0XFx0XFx0aWYgKGVsZW1lbnQtXFx1MDAzZWlkID09IChfaWQpKVxcbjI3MzM6XFx0XFxuMjczNDpcXHQjZGVmaW5lIGZvcl9lYWNoX2VsZW1lbnRfZXh0aWQoZWxlbWVudCwgZXh0aWQsIF9kYXRhLCBfZGF0YWxlbilcXHRcXHRcXFxcXFxuMjczNTpcXHRcXHRmb3JfZWFjaF9lbGVtZW50KGVsZW1lbnQsIF9kYXRhLCBfZGF0YWxlbilcXHRcXHRcXHRcXFxcXFxuMjczNjpcXHRcXHRcXHRpZiAoZWxlbWVudC1cXHUwMDNlaWQgPT0gV0xBTl9FSURfRVhURU5TSU9OIFxcdTAwMjZcXHUwMDI2XFx0XFx0XFxcXFxcbjI3Mzc6XFx0XFx0XFx0ICAgIGVsZW1lbnQtXFx1MDAzZWRhdGFsZW4gXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2XFx0XFx0XFx0XFx0XFxcXFxcbjI3Mzg6XFx0XFx0XFx0ICAgIGVsZW1lbnQtXFx1MDAzZWRhdGFbMF0gPT0gKGV4dGlkKSlcXG4yNzM5OlxcdFxcbjI3NDA6XFx0I2RlZmluZSBmb3JfZWFjaF9zdWJlbGVtZW50KHN1YiwgZWxlbWVudClcXHRcXHRcXHRcXHRcXFxcXFxuMjc0MTpcXHRcXHRmb3JfZWFjaF9lbGVtZW50KHN1YiwgKGVsZW1lbnQpLVxcdTAwM2VkYXRhLCAoZWxlbWVudCktXFx1MDAzZWRhdGFsZW4pXFxuMjc0MjpcXHRcXG4yNzQzOlxcdCNkZWZpbmUgZm9yX2VhY2hfc3ViZWxlbWVudF9pZChzdWIsIGlkLCBlbGVtZW50KVxcdFxcdFxcdFxcXFxcXG4yNzQ0OlxcdFxcdGZvcl9lYWNoX2VsZW1lbnRfaWQoc3ViLCBpZCwgKGVsZW1lbnQpLVxcdTAwM2VkYXRhLCAoZWxlbWVudCktXFx1MDAzZWRhdGFsZW4pXFxuMjc0NTpcXHRcXG4yNzQ2OlxcdCNkZWZpbmUgZm9yX2VhY2hfc3ViZWxlbWVudF9leHRpZChzdWIsIGV4dGlkLCBlbGVtZW50KVxcdFxcdFxcdFxcXFxcXG4yNzQ3OlxcdFxcdGZvcl9lYWNoX2VsZW1lbnRfZXh0aWQoc3ViLCBleHRpZCwgKGVsZW1lbnQpLVxcdTAwM2VkYXRhLCAoZWxlbWVudCktXFx1MDAzZWRhdGFsZW4pXFxuMjc0ODpcXHRcXG4yNzQ5OlxcdC8qKlxcbjI3NTA6XFx0ICogZm9yX2VhY2hfZWxlbWVudF9jb21wbGV0ZWQgLSBkZXRlcm1pbmUgaWYgZWxlbWVudCBwYXJzaW5nIGNvbnN1bWVkIGFsbCBkYXRhXFxuMjc1MTpcXHQgKiBAZWxlbWVudDogZWxlbWVudCBwb2ludGVyIGFmdGVyIGZvcl9lYWNoX2VsZW1lbnQoKSBvciBmcmllbmRzXFxuMjc1MjpcXHQgKiBAZGF0YTogc2FtZSBkYXRhIHBvaW50ZXIgYXMgcGFzc2VkIHRvIGZvcl9lYWNoX2VsZW1lbnQoKSBvciBmcmllbmRzXFxuMjc1MzpcXHQgKiBAZGF0YWxlbjogc2FtZSBkYXRhIGxlbmd0aCBhcyBwYXNzZWQgdG8gZm9yX2VhY2hfZWxlbWVudCgpIG9yIGZyaWVuZHNcXG4yNzU0OlxcdCAqIFJldHVybjogJXRydWUgaWYgYWxsIGVsZW1lbnRzIHdlcmUgaXRlcmF0ZWQsICVmYWxzZSBvdGhlcndpc2U7IHNlZSBub3Rlc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNTo1MjoxMy4zMTE1MjI5NDlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg0NTAxNTU0MzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZWAgZm9yIFBvdGVudGlhbCBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYGNmZzgwMjExX3dleHRfc2l3Z2VuaWVgIGFuZCBzZWUgaWYgaXQncyBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLiBGaXJzdCwgdGhpcyBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGl0IGFkZHMgc29tZSB2YWxpZGF0aW9uIHRvIHRoZSBmdW5jdGlvbiB3aGVuIHBhcnNpbmcgSUVzIGFuZCB0aGVuIGl0IHdpbGwgcmVqZWN0IG1hbGZvcm1lZCBJRXMgYmVmb3JlIHN0b3JpbmcgdGhlbS4gU2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnQuIEFzIGZvciByZWFjaGFiaWxpdHksIGl0J3MgdHJpZ2dlcmVkIHZpYSB0aGUgYFNJT0NTSVdHRU5JRWAgdXNlcnNwYWNlIGlvY3RsLCB3aGljaCBtZWFucyBpdCBzaG91bGQgYmUgcHJldHR5IGFjY2Vzc2libGUgb24gYW55IHdpcmVsZXNzIGludGVyZmFjZSBtYW5hZ2VkIGJ5IGNmZzgwMjExIHdoZW4gV0VYVCBpcyBlbmFibGVkLiBXZSd2ZSBnb3QgZ29vZCBjb3ZlcmFnZSBoZXJlOiBJdCBzaG91bGQgd29yayBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGxpa2UgUUVNVSB3aXRoIGBtYWM4MDIxMV9od3NpbWAgb3IgYHZpcnRpby13aWZpYCwgYW5kIHN0YW5kYXJkIHNvZnRtYWMuIFRoYXQncyBhIGRlZmluaXRlIHBsdXMuXG5cbklzIGl0IHdvcnRoIHRoZSBlZmZvcnQgb2YgZnV6emluZz8gQWJzb2x1dGVseS4gVGhpcyBpcyBhIGNvcmUgd2lyZWxlc3MgZXh0ZW5zaW9uIFNNRSBoYW5kbGVyLCBhbmQgaXQncyBkaXJlY3RseSBleHBvc2VkIHRocm91Z2ggdXNlcnNwYWNlIGlvY3Rscy4gVGhhdCdzIGEgcHJpbWUgdGFyZ2V0IGZvciBmaW5kaW5nIHNvbWUgaW50ZXJlc3RpbmcgZWRnZSBjYXNlcy4gVGhlIGZvY3VzIGlzIGRlZmluaXRlbHkgb24gYGNmZzgwMjExX3dleHRfc2l3Z2VuaWVgLlxuXG5Ob3csIGxldCdzIGNoZWNrIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgYENGRzgwMjExYCBhbmQgYENGRzgwMjExX1dFWFRgIGFyZSBlbmFibGVkLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgaW4gYG5ldC9LY29uZmlnYCBhbmQgYG5ldC93aXJlbGVzcy9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0MDAsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNTo1NToxNy44MTMwODE1NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2OTk0MTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvdXJjZS4qbmV0L3dpcmVsZXNzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz00MzE9aWYgV0lSRUxFU1NcXG5uZXQvS2NvbmZpZy00MzItXFxubmV0L0tjb25maWc6NDMzOnNvdXJjZSBcXFwibmV0L3dpcmVsZXNzL0tjb25maWdcXFwiXFxubmV0L0tjb25maWctNDM0LXNvdXJjZSBcXFwibmV0L21hYzgwMjExL0tjb25maWdcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZz0xMTE9Y29uZmlnIENGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTE1LVxcdCAgSWYgc2VsZWN0ZWQsIHBvaW50IHRvIGEgZGlyZWN0b3J5IHdpdGggREVSLWVuY29kZWQgWC41MDlcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMTY6XFx0ICBjZXJ0aWZpY2F0ZXMgbGlrZSBpbiB0aGUga2VybmVsIHNvdXJjZXMgKG5ldC93aXJlbGVzcy9jZXJ0cy8pXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTE3LVxcdCAgdGhhdCBzaGFsbCBiZSBhY2NlcHRlZCBmb3IgYSBzaWduZWQgcmVndWxhdG9yeSBkYXRhYmFzZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTU6NTU6MTcuOTQwMDgxNjY3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1OTE0MTc2MzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFieXJpbnRoKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMuLi4gbGV0J3Mgc2VlLCB3aGF0IHdhcyBpdCBhZ2Fpbj8gUmlnaHQsIEkgbmVlZCB0byBnZXQgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgY29uZmlndXJhdGlvbiBzeXN0ZW0uIFdoZXJlIHRvIHN0YXJ0PyBHaXZlbiB0aGUgY29udGV4dCBvZiB3aGF0IEknbSB3b3JraW5nIG9uLCBgbmV0L0tjb25maWdgIGZlZWxzIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBwbGFjZS4gSXQncyB1c3VhbGx5IHRoZSBoZWFydCBvZiBuZXR3b3JraW5nLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIE5vdywgSSB2YWd1ZWx5IHJlbWVtYmVyIHNvbWUgY3JpdGljYWwgc3R1ZmYgYmVpbmcgaW4gdGhhdCBmaWxlLCBhbmQgYXJvdW5kIGxpbmUgNDMwLiBJJ2xsIHBpbnBvaW50IHdoYXQgSSBuZWVkLiBMZXQgbWUganVtcCB0aGVyZSBhbmQgc2VlIHdoYXQncyBoYXBwZW5pbmcuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBwYXJ0aWN1bGFyIHNlY3Rpb24gc2hvdWxkIGxpa2VseSBiZSB0aGUgZW50cnkgcG9pbnQgdG8gd2hhdCBJJ20gbG9va2luZyBmb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjE4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTU6NTU6MzMuODU0Mjg2OTM1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MjUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MjU6XFx0XFxuIDQyNjpcXHRtZW51Y29uZmlnIFdJUkVMRVNTXFxuIDQyNzpcXHRcXHRib29sIFxcXCJXaXJlbGVzc1xcXCJcXG4gNDI4OlxcdFxcdGRlcGVuZHMgb24gIVMzOTBcXG4gNDI5OlxcdFxcdGRlZmF1bHQgeVxcbiA0MzA6XFx0XFxuIDQzMTpcXHRpZiBXSVJFTEVTU1xcbiA0MzI6XFx0XFxuIDQzMzpcXHRzb3VyY2UgXFxcIm5ldC93aXJlbGVzcy9LY29uZmlnXFxcIlxcbiA0MzQ6XFx0c291cmNlIFxcXCJuZXQvbWFjODAyMTEvS2NvbmZpZ1xcXCJcXG4gNDM1OlxcdFxcbiA0MzY6XFx0ZW5kaWYgIyBXSVJFTEVTU1xcbiA0Mzc6XFx0XFxuIDQzODpcXHRzb3VyY2UgXFxcIm5ldC9yZmtpbGwvS2NvbmZpZ1xcXCJcXG4gNDM5OlxcdHNvdXJjZSBcXFwibmV0LzlwL0tjb25maWdcXFwiXFxuIDQ0MDpcXHRzb3VyY2UgXFxcIm5ldC9jZXBoL0tjb25maWdcXFwiXFxuIDQ0MTpcXHRzb3VyY2UgXFxcIm5ldC9uZmMvS2NvbmZpZ1xcXCJcXG4gNDQyOlxcdHNvdXJjZSBcXFwibmV0L3BzYW1wbGUvS2NvbmZpZ1xcXCJcXG4gNDQzOlxcdHNvdXJjZSBcXFwibmV0L2lmZS9LY29uZmlnXFxcIlxcbiA0NDQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE1OjU1OjMzLjg1NDQwNzAxNVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzkyNDExMDE4NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBBc3Nlc3NtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGVuYWJsZSBhIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHksIGFuZCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGF0aW9uc2hpcHMgd2l0aGluIGBuZXQvd2lyZWxlc3MvS2NvbmZpZ2AuIGBXSVJFTEVTU2AgaXMgdGhlIG92ZXJhcmNoaW5nIG1lbnVjb25maWcgaGVyZSwgZGVwZW5kaW5nIG9uIGEgZmV3IG90aGVyIGNvbnNpZGVyYXRpb25zLiBXaXRoaW4gYFdJUkVMRVNTYCwgYENGRzgwMjExYCBpcyB0aGUgQVBJLCBhbmQgaXQgZGVwZW5kcyBvbiB0aGluZ3MgbGlrZSBSRktJTEwuIENydWNpYWxseSwgYENGRzgwMjExYCBsZWFkcyBkaXJlY3RseSB0byBgQ0ZHODAyMTFfV0VYVGAsIHdoaWNoIEkgd2FudCwgYW5kIGlzIGEgYm9vbGVhbiBvcHRpb24uIEkgYWxzbyBjb25zaWRlcmVkIGBNQUM4MDIxMV9IV1NJTWAgYnV0IGl0IGRvZXNuJ3Qgc2VlbSB0byBoYXZlIGRpcmVjdCBkZXBlbmRlbmNpZXMgZm9yIHRoaXMuXG5cbk5leHQsIEkgbmVlZCB0byBlbnN1cmUgdGhlIHN1cHBvcnRpbmcgaW5mcmFzdHJ1Y3R1cmUgaXMgaW4gcGxhY2UuIGBORVRgIGlzIHVzdWFsbHkgZW5hYmxlZCBieSBkZWZhdWx0LCBzbyBJJ20gbm90IG92ZXJseSBjb25jZXJuZWQgdGhlcmUsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIGBORVQ9eWAuIE15IHByaW1hcnkgZm9jdXMgaGVyZSBpcyBjb25maXJtaW5nIHRoYXQgYm90aCBgQ0ZHODAyMTFgIGFuZCBgQ0ZHODAyMTFfV0VYVGAgYXJlIGVuYWJsZWQuXG5cbk5vdywgbGV0J3MgY29uZmlybSB0aGUgdGFyZ2V0IHN5bWJvbCBgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZWAgaXMgYWNjZXNzaWJsZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGl0J3MgYWNjZXNzaWJsZS4gTG9va2luZyBhdCB0aGUgY29kZSBpbiBgbmV0L3dpcmVsZXNzL3dleHQtc21lLmNgLCBpdCdzIGRlZmluZWQgYXMgYSBub24tc3RhdGljIGZ1bmN0aW9uIGBjZmc4MDIxMV93ZXh0X3Npd2dlbmllYC4gVGhpcyBpcyBleGFjdGx5IHdoYXQgSSB3YW50LiBJdCdzIGFsc28gZXhwb3J0ZWQsIHNvIGl0J3MgdmlzaWJsZSBpbiBgbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmhgLiBUaGUgZnVuY3Rpb24gaXMgdXNlZCBpbiBgbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmNgIHdpdGhpbiBgY2ZnODAyMTFfaGFuZGxlcnNgLlxuXG5TbywgdG8gc3VtbWFyaXplIGFuZCBjb25maXJtIGV2ZXJ5dGhpbmcsIEknbSBjb25maWRlbnQgaW4gdGhlIGZvbGxvd2luZzpcblxuKiAgIEkgY29uc2lkZXIgdGhpcyBpbXBvcnRhbnQgZm9yIGZ1enppbmcgKGBXb3J0aEZ1enppbmc6IHRydWVgKS5cbiogICBUaGUgZnVuY3Rpb24gdGhhdCBJIGFtIGZvY3VzaW5nIG9uIGlzIGluZGVlZCBgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZWAgKGBGb2N1c1N5bWJvbHM6IFtcImNmZzgwMjExX3dleHRfc2l3Z2VuaWVcIl1gKS5cbiogICBUaGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBhcmUgYENGRzgwMjExYCBhbmQgYENGRzgwMjExX1dFWFRgIChgRW5hYmxlQ29uZmlnczogW1wiQ0ZHODAyMTFcIiwgXCJDRkc4MDIxMV9XRVhUXCJdYCkuXG4qICAgVGhpcyBpcyBhbGwgYWJvdXQgdmFsaWRhdGluZyB3aXJlbGVzcyBpbmZvcm1hdGlvbiBlbGVtZW50cywgc3BlY2lmaWNhbGx5IHVzaW5nIGBjZmc4MDIxMV93ZXh0X3Npd2dlbmllYCB0byByZWplY3QgbWFsZm9ybWVkIElFcyBjb21pbmcgZnJvbSB1c2Vyc3BhY2UgaW9jdGwgYFNJT0NTSVdHRU5JRWAsIHRocm91Z2ggdGhlIHVzZSBvZiBgZm9yX2VhY2hfZWxlbWVudGAvYGZvcl9lYWNoX2VsZW1lbnRfY29tcGxldGVkYC5cblxuQWxyaWdodCwgSSdtIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2ODUsIk91dHB1dFRva2VucyI6MTY4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTU6NTc6NTMuMDk1NTExMjU3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ4Mzc5OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJDRkc4MDIxMV9XRVhUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2ZnODAyMTFfd2V4dF9zaXdnZW5pZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgaW5wdXQgdmFsaWRhdGlvbiBmb3Igd2lyZWxlc3MgaW5mb3JtYXRpb24gZWxlbWVudHMgKElFcykgcGFzc2VkIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgU0lPQ1NJV0dFTklFIHdpcmVsZXNzIGV4dGVuc2lvbiBpb2N0bC4gSXQgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgZWxlbWVudCBidWZmZXIgdXNpbmcgZm9yX2VhY2hfZWxlbWVudCgpIGFuZCB2YWxpZGF0ZXMgY29tcGxldGlvbiB3aXRoIGZvcl9lYWNoX2VsZW1lbnRfY29tcGxldGVkKCkgYmVmb3JlIGNvcHlpbmcgdGhlIGJ1ZmZlciwgcmVqZWN0aW5nIG1hbGZvcm1lZCBlbGVtZW50cyB3aXRoIC1FSU5WQUwuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmsgd2lyZWxlc3MgY29yZSBjb2RlIHRoYXQgY2FuIGJlIHRlc3RlZCBpbiB2aXJ0dWFsIGVudmlyb25tZW50cyAoZS5nLiB1c2luZyBtYWM4MDIxMV9od3NpbSkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0ZHODAyMTFcIixcbiAgICBcIkNGRzgwMjExX1dFWFRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjZmc4MDIxMV93ZXh0X3Npd2dlbmllXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBpbnB1dCB2YWxpZGF0aW9uIGZvciB3aXJlbGVzcyBpbmZvcm1hdGlvbiBlbGVtZW50cyAoSUVzKSBwYXNzZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBTSU9DU0lXR0VOSUUgd2lyZWxlc3MgZXh0ZW5zaW9uIGlvY3RsLiBJdCBpdGVyYXRlcyB0aHJvdWdoIHRoZSBlbGVtZW50IGJ1ZmZlciB1c2luZyBmb3JfZWFjaF9lbGVtZW50KCkgYW5kIHZhbGlkYXRlcyBjb21wbGV0aW9uIHdpdGggZm9yX2VhY2hfZWxlbWVudF9jb21wbGV0ZWQoKSBiZWZvcmUgY29weWluZyB0aGUgYnVmZmVyLCByZWplY3RpbmcgbWFsZm9ybWVkIGVsZW1lbnRzIHdpdGggLUVJTlZBTC4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0d29yayB3aXJlbGVzcyBjb3JlIGNvZGUgdGhhdCBjYW4gYmUgdGVzdGVkIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzIChlLmcuIHVzaW5nIG1hYzgwMjExX2h3c2ltKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTU6NTc6NTMuMTcwMzU0OTU1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzgzNjYxMDY5ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNTo1Nzo1My4xNzA3NjY4NDVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo4NzgzNjU2ODk0OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgaW5wdXQgdmFsaWRhdGlvbiB0byBjZmc4MDIxMV93ZXh0X3Npd2dlbmllKCkgYnkgaXRlcmF0aW5nIG92ZXIgYW5kIHZlcmlmeWluZyB0aGUgc3RydWN0dXJlIG9mIHVzZXItcHJvdmlkZWQgSUVFRSA4MDIuMTEgSW5mb3JtYXRpb24gRWxlbWVudHMgKElFcykgdXNpbmcgZm9yX2VhY2hfZWxlbWVudCgpIGFuZCBmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZCgpLiBJZiB0aGUgZWxlbWVudHMgYXJlIG1hbGZvcm1lZCwgaXQgcmV0dXJucyAtRUlOVkFMIGJlZm9yZSBhbGxvY2F0aW5nIGFuZCBzYXZpbmcgdGhlIElFIGJ1ZmZlci5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcywga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgb3IgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGUgbG9vcCBpdGVyYXRvciB2YXJpYWJsZSBgZWxlbWAgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYnkgdGhlIGBmb3JfZWFjaF9lbGVtZW50YCBtYWNybywgYW5kIHRoZSBpbnB1dCBidWZmZXIgY29udGFpbnMgZGF0YSBjb3BpZWQgZnJvbSB1c2VyIHNwYWNlLiBQb3RlbnRpYWwgYnVncyBhZGRyZXNzZWQgb3IgdG91Y2hlZCBieSB0aGlzIGxvZ2ljIChzdWNoIGFzIG1hbGZvcm1lZCBUTFYgcGFyc2luZyBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMpIGZhbGwgdW5kZXIgS0FTQU4ncyBwdXJ2aWV3LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzI3MjQ5NTZjNDFhNWYxMmE4ZjYwOTcxMmZlZmUyMzMxNjk3NjdkZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDE1OjIxOjU5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3dleHQtc21lLmMgYi9uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuY1xuaW5kZXggNTczYjZiMTVhNDQ2ZS4uYjU5MTRmMzY1OGRiNCAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy93ZXh0LXNtZS5jXG4rKysgYi9uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuY1xuQEAgLTMxOSw2ICszMTksMTUgQEAgaW50IGNmZzgwMjExX3dleHRfc2l3Z2VuaWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRpZiAoaWVfbGVuKSB7XG4rXHRcdGNvbnN0IHN0cnVjdCBlbGVtZW50ICplbGVtO1xuK1xuK1x0XHRmb3JfZWFjaF9lbGVtZW50KGVsZW0sIGV4dHJhLCBpZV9sZW4pIHtcbitcdFx0XHQvKiBub3RoaW5nICovXG4rXHRcdH1cbitcbitcdFx0aWYgKCFmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZChlbGVtLCBleHRyYSwgaWVfbGVuKSlcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdFx0aWUgPSBrbWVtZHVwKGV4dHJhLCBpZV9sZW4sIEdGUF9LRVJORUwpO1xuIFx0XHRpZiAoIWllKVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTU6NTc6NTMuMTcwNzY4ODk1WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5OTg4ODU4MTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFJlY2VudCBQYXRjaCBpbiBgbmV0L3dpcmVsZXNzL3dleHQtc21lLmNgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBjb2RlIHNob3dzIGEgcGF0Y2ggYWZmZWN0aW5nIGBuZXQvd2lyZWxlc3Mvd2V4dC1zbWUuY2AsIHNwZWNpZmljYWxseSB0aGUgYGNmZzgwMjExX3dleHRfc2l3Z2VuaWVgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiB0aGlzIGZ1bmN0aW9uIGFuZCBob3cgdGhlIHBhdGNoIG1vZGlmaWVzIGl0cyBiZWhhdmlvci4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaXMgYWRkaW5nIHNvbWUga2luZCBvZiBJbmZvcm1hdGlvbiBFbGVtZW50IChJRSkgcHJvY2Vzc2luZyB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gSSBuZWVkIHRvIGdldCB0aGUgYmlnZ2VyIHBpY3R1cmUuXG5cbkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBjZmc4MDIxMV93ZXh0X3Npd2dlbmllYCBkb2VzIGluIHRoZSBmaXJzdCBwbGFjZSwgYW5kIHRoYXQgbWVhbnMgcmVhZGluZyB0aGUgc3Vycm91bmRpbmcgY29kZS4gSSBuZWVkIHRvIHNlZSB0aGUgY29udGV4dC4gU28sIEknbGwgdXNlIGByZWFkLWZpbGVgIG9uIGBuZXQvd2lyZWxlc3Mvd2V4dC1zbWUuY2AgdG8gc2VlIHdoYXQncyBoYXBwZW5pbmcgYXJvdW5kIGxpbmUgMzE5LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIElFIGxlbmd0aCBgaWVfbGVuYCBpcyB1c2VkLCBhbmQgd2hhdCBgZXh0cmFgIHJlcHJlc2VudHMuIFRoZSBleGlzdGluZyBjb2RlIHN1Z2dlc3RzIHRoYXQgaWYgYGllX2xlbmAgaGFzIGEgbm9uLXplcm8gdmFsdWUsIHRoZW4gYSBibG9jayBvZiBtZW1vcnkgaXMgYWxsb2NhdGVkIGFuZCBjb3BpZWQgZnJvbSB0aGUgYGV4dHJhYCBhcmd1bWVudCwgYWZ0ZXIgd2hpY2ggaXQgd291bGQgYmUgcGFyc2VkLiBUaGUgcGF0Y2ggYWRkcyBhIGxvb3AgdGhhdCBsb29rcyBhdCB0aGUgYGV4dHJhYCB2YXJpYWJsZS4gSXMgdGhlcmUgc29tZSB0eXBlIG9mIHZhbGlkYXRpb24gaGFwcGVuaW5nIG5vdz8gTGV0J3MgY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNTo1ODo0My4xNTk2MzAyNTFaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA3MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3dpcmVsZXNzL3dleHQtc21lLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzAwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzAwOlxcdFxcdFxcdFxcdCAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKVxcbiAzMDE6XFx0e1xcbiAzMDI6XFx0XFx0c3RydWN0IGl3X3BvaW50ICpkYXRhID0gXFx1MDAyNndycXUtXFx1MDAzZWRhdGE7XFxuIDMwMzpcXHRcXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LVxcdTAwM2VpZWVlODAyMTFfcHRyO1xcbiAzMDQ6XFx0XFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fcmRldih3ZGV2LVxcdTAwM2V3aXBoeSk7XFxuIDMwNTpcXHRcXHRpbnQgaWVfbGVuID0gZGF0YS1cXHUwMDNlbGVuZ3RoO1xcbiAzMDY6XFx0XFx0dTggKmllID0gZXh0cmE7XFxuIDMwNzpcXHRcXG4gMzA4OlxcdFxcdGlmICh3ZGV2LVxcdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTilcXG4gMzA5OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gMzEwOlxcdFxcbiAzMTE6XFx0XFx0aWYgKCFpZV9sZW4pXFxuIDMxMjpcXHRcXHRcXHRpZSA9IE5VTEw7XFxuIDMxMzpcXHRcXG4gMzE0OlxcdFxcdGd1YXJkKHdpcGh5KSh3ZGV2LVxcdTAwM2V3aXBoeSk7XFxuIDMxNTpcXHRcXG4gMzE2OlxcdFxcdC8qIG5vIGNoYW5nZSAqL1xcbiAzMTc6XFx0XFx0aWYgKHdkZXYtXFx1MDAzZXdleHQuaWVfbGVuID09IGllX2xlbiBcXHUwMDI2XFx1MDAyNlxcbiAzMTg6XFx0XFx0ICAgIG1lbWNtcCh3ZGV2LVxcdTAwM2V3ZXh0LmllLCBpZSwgaWVfbGVuKSA9PSAwKVxcbiAzMTk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDMyMDpcXHRcXG4gMzIxOlxcdFxcdGlmIChpZV9sZW4pIHtcXG4gMzIyOlxcdFxcdFxcdGNvbnN0IHN0cnVjdCBlbGVtZW50ICplbGVtO1xcbiAzMjM6XFx0XFxuIDMyNDpcXHRcXHRcXHRmb3JfZWFjaF9lbGVtZW50KGVsZW0sIGV4dHJhLCBpZV9sZW4pIHtcXG4gMzI1OlxcdFxcdFxcdFxcdC8qIG5vdGhpbmcgKi9cXG4gMzI2OlxcdFxcdFxcdH1cXG4gMzI3OlxcdFxcbiAzMjg6XFx0XFx0XFx0aWYgKCFmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZChlbGVtLCBleHRyYSwgaWVfbGVuKSlcXG4gMzI5OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAzMzA6XFx0XFxuIDMzMTpcXHRcXHRcXHRpZSA9IGttZW1kdXAoZXh0cmEsIGllX2xlbiwgR0ZQX0tFUk5FTCk7XFxuIDMzMjpcXHRcXHRcXHRpZiAoIWllKVxcbiAzMzM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDMzNDpcXHRcXHR9IGVsc2Uge1xcbiAzMzU6XFx0XFx0XFx0aWUgPSBOVUxMO1xcbiAzMzY6XFx0XFx0fVxcbiAzMzc6XFx0XFxuIDMzODpcXHRcXHRrZnJlZSh3ZGV2LVxcdTAwM2V3ZXh0LmllKTtcXG4gMzM5OlxcdFxcdHdkZXYtXFx1MDAzZXdleHQuaWUgPSBpZTtcXG4gMzQwOlxcdFxcdHdkZXYtXFx1MDAzZXdleHQuaWVfbGVuID0gaWVfbGVuO1xcbiAzNDE6XFx0XFxuIDM0MjpcXHRcXHRpZiAod2Rldi1cXHUwMDNlY29ubilcXG4gMzQzOlxcdFxcdFxcdHJldHVybiBjZmc4MDIxMV9kaXNjb25uZWN0KHJkZXYsIGRldixcXG4gMzQ0OlxcdFxcdFxcdFxcdFxcdFxcdCAgIFdMQU5fUkVBU09OX0RFQVVUSF9MRUFWSU5HLCBmYWxzZSk7XFxuIDM0NTpcXHRcXG4gMzQ2OlxcdFxcdC8qIHVzZXJzcGFjZSBiZXR0ZXIgbm90IHRoaW5rIHdlJ2xsIHJlY29ubmVjdCAqL1xcbiAzNDc6XFx0XFx0cmV0dXJuIDA7XFxuIDM0ODpcXHR9XFxuIDM0OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTU6NTg6NDMuMTU5NzEzMDIyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc5NjQ3OTQ5NDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYGZvcl9lYWNoX2VsZW1lbnRgIGFuZCBgZm9yX2VhY2hfZWxlbWVudF9jb21wbGV0ZWRgKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHNvbWUgY29kZSBhbmQgSSBzZWUgdGhlc2UgYGZvcl9lYWNoX2VsZW1lbnRgIGFuZCBgZm9yX2VhY2hfZWxlbWVudF9jb21wbGV0ZWRgIGZ1bmN0aW9ucy4gSSdtIGdvaW5nIHRvIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZXkgYXJlLCB3aGF0IHRoZXkgZG8sIGFuZCBob3cgdGhleSBpbnRlcmFjdC4gTXkgaW5zdGluY3QgaXMgdG8gdXNlIGEgYGdyZXBgIHRvIHF1aWNrbHkgZmluZCBhbGwgaW5zdGFuY2VzIG9mIHRoZXNlIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGNvZGViYXNlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBpZGVudGlmeSB0aGVpciBkZWZpbml0aW9uLCBob3cgdGhleSdyZSBiZWluZyBjYWxsZWQsIGFuZCB3aGVyZSB0aGV5IGFyZSB1c2VkIHRvIHByb2Nlc3MgZWxlbWVudHMuIFRoaXMgZ3JlcCBzaG91bGQgaGVscCBtZSBnZXQgYSBoaWdoLWxldmVsIHNlbnNlIG9mIHRoZWlyIHJvbGUgd2l0aGluIHRoZSBiaWdnZXIgcGljdHVyZSBiZWZvcmUgSSBzdGFydCBkaWdnaW5nIGludG8gdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDQwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNjowMDowMi44MDc2NjQ5NzZaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjEwMTY3ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2RlZmluZSBmb3JfZWFjaF9lbGVtZW50XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaWVlZTgwMjExLmg9MjcxNT1zdHJ1Y3QgZWxlbWVudCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oLTI3MjEtLyogZWxlbWVudCBpdGVyYXRpb24gaGVscGVycyAqL1xcbmluY2x1ZGUvbGludXgvaWVlZTgwMjExLmg6MjcyMjojZGVmaW5lIGZvcl9lYWNoX2VsZW1lbnQoX2VsZW0sIF9kYXRhLCBfZGF0YWxlbilcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaC0yNzIzLVxcdGZvciAoX2VsZW0gPSAoY29uc3Qgc3RydWN0IGVsZW1lbnQgKikoX2RhdGEpO1xcdFxcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvaWVlZTgwMjExLmgtMjcyOS1cXG5pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oOjI3MzA6I2RlZmluZSBmb3JfZWFjaF9lbGVtZW50X2lkKGVsZW1lbnQsIF9pZCwgZGF0YSwgZGF0YWxlbilcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaC0yNzMxLVxcdGZvcl9lYWNoX2VsZW1lbnQoZWxlbWVudCwgZGF0YSwgZGF0YWxlbilcXHRcXHRcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oLTI3MzMtXFxuaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaDoyNzM0OiNkZWZpbmUgZm9yX2VhY2hfZWxlbWVudF9leHRpZChlbGVtZW50LCBleHRpZCwgX2RhdGEsIF9kYXRhbGVuKVxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oLTI3MzUtXFx0Zm9yX2VhY2hfZWxlbWVudChlbGVtZW50LCBfZGF0YSwgX2RhdGFsZW4pXFx0XFx0XFx0XFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNjowMDowNC4yNjg2ODk4NDNaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIxMDgyNDE5MDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgSUVFRSA4MDIuMTEgSGVhZGVyKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhvc2UgbWFjcm9zLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IGBmb3JfZWFjaF9lbGVtZW50YCBhbmQgYGZvcl9lYWNoX2VsZW1lbnRfY29tcGxldGVkYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGluIHRoZSBjb250ZXh0IG9mIHRoZSA4MDIuMTEgc3RhY2suIEknbSBnb2luZyB0byBqdW1wIGludG8gYGluY2x1ZGUvbGludXgvaWVlZTgwMjExLmhgLCBhbmQgaG9uZSBpbiBhcm91bmQgbGluZSAyNzE1LiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW50ZXJwbGF5IG9mIHRob3NlIG1hY3JvcyBmb3IgaXRlcmF0aXZlIGVsZW1lbnQgcHJvY2Vzc2luZywgYW5kIGhvdyBjb21wbGV0aW9uIGlzIGhhbmRsZWQuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYW55IG9wdGltaXphdGlvbiBzdHJhdGVnaWVzIGFyZSBhdCBwbGF5IHdpdGhpbiB0aGlzIGltcGxlbWVudGF0aW9uIG9mIHRob3NlIGNvbnRyb2wgZmxvd3MuIEl0J3MgdGltZSB0byBmaW5kIHRoYXQgY29kZSBhbmQgZ2V0IHRvIHRoZSBjb3JlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTk0LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTY6MDM6NDUuMzUxMTEzMDIzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMDU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3MTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI3MTU6XFx0c3RydWN0IGVsZW1lbnQge1xcbjI3MTY6XFx0XFx0dTggaWQ7XFxuMjcxNzpcXHRcXHR1OCBkYXRhbGVuO1xcbjI3MTg6XFx0XFx0dTggZGF0YVtdO1xcbjI3MTk6XFx0fSBfX3BhY2tlZDtcXG4yNzIwOlxcdFxcbjI3MjE6XFx0LyogZWxlbWVudCBpdGVyYXRpb24gaGVscGVycyAqL1xcbjI3MjI6XFx0I2RlZmluZSBmb3JfZWFjaF9lbGVtZW50KF9lbGVtLCBfZGF0YSwgX2RhdGFsZW4pXFx0XFx0XFx0XFxcXFxcbjI3MjM6XFx0XFx0Zm9yIChfZWxlbSA9IChjb25zdCBzdHJ1Y3QgZWxlbWVudCAqKShfZGF0YSk7XFx0XFx0XFx0XFxcXFxcbjI3MjQ6XFx0XFx0ICAgICAoY29uc3QgdTggKikoX2RhdGEpICsgKF9kYXRhbGVuKSAtIChjb25zdCB1OCAqKV9lbGVtIFxcdTAwM2U9XFx0XFxcXFxcbjI3MjU6XFx0XFx0XFx0KGludClzaXplb2YoKl9lbGVtKSBcXHUwMDI2XFx1MDAyNlxcdFxcdFxcdFxcdFxcdFxcXFxcXG4yNzI2OlxcdFxcdCAgICAgKGNvbnN0IHU4ICopKF9kYXRhKSArIChfZGF0YWxlbikgLSAoY29uc3QgdTggKilfZWxlbSBcXHUwMDNlPVxcdFxcXFxcXG4yNzI3OlxcdFxcdFxcdChpbnQpc2l6ZW9mKCpfZWxlbSkgKyBfZWxlbS1cXHUwMDNlZGF0YWxlbjtcXHRcXHRcXHRcXFxcXFxuMjcyODpcXHRcXHQgICAgIF9lbGVtID0gKGNvbnN0IHN0cnVjdCBlbGVtZW50ICopKF9lbGVtLVxcdTAwM2VkYXRhICsgX2VsZW0tXFx1MDAzZWRhdGFsZW4pKVxcbjI3Mjk6XFx0XFxuMjczMDpcXHQjZGVmaW5lIGZvcl9lYWNoX2VsZW1lbnRfaWQoZWxlbWVudCwgX2lkLCBkYXRhLCBkYXRhbGVuKVxcdFxcdFxcXFxcXG4yNzMxOlxcdFxcdGZvcl9lYWNoX2VsZW1lbnQoZWxlbWVudCwgZGF0YSwgZGF0YWxlbilcXHRcXHRcXHRcXFxcXFxuMjczMjpcXHRcXHRcXHRpZiAoZWxlbWVudC1cXHUwMDNlaWQgPT0gKF9pZCkpXFxuMjczMzpcXHRcXG4yNzM0OlxcdCNkZWZpbmUgZm9yX2VhY2hfZWxlbWVudF9leHRpZChlbGVtZW50LCBleHRpZCwgX2RhdGEsIF9kYXRhbGVuKVxcdFxcdFxcXFxcXG4yNzM1OlxcdFxcdGZvcl9lYWNoX2VsZW1lbnQoZWxlbWVudCwgX2RhdGEsIF9kYXRhbGVuKVxcdFxcdFxcdFxcXFxcXG4yNzM2OlxcdFxcdFxcdGlmIChlbGVtZW50LVxcdTAwM2VpZCA9PSBXTEFOX0VJRF9FWFRFTlNJT04gXFx1MDAyNlxcdTAwMjZcXHRcXHRcXFxcXFxuMjczNzpcXHRcXHRcXHQgICAgZWxlbWVudC1cXHUwMDNlZGF0YWxlbiBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjZcXHRcXHRcXHRcXHRcXFxcXFxuMjczODpcXHRcXHRcXHQgICAgZWxlbWVudC1cXHUwMDNlZGF0YVswXSA9PSAoZXh0aWQpKVxcbjI3Mzk6XFx0XFxuMjc0MDpcXHQjZGVmaW5lIGZvcl9lYWNoX3N1YmVsZW1lbnQoc3ViLCBlbGVtZW50KVxcdFxcdFxcdFxcdFxcXFxcXG4yNzQxOlxcdFxcdGZvcl9lYWNoX2VsZW1lbnQoc3ViLCAoZWxlbWVudCktXFx1MDAzZWRhdGEsIChlbGVtZW50KS1cXHUwMDNlZGF0YWxlbilcXG4yNzQyOlxcdFxcbjI3NDM6XFx0I2RlZmluZSBmb3JfZWFjaF9zdWJlbGVtZW50X2lkKHN1YiwgaWQsIGVsZW1lbnQpXFx0XFx0XFx0XFxcXFxcbjI3NDQ6XFx0XFx0Zm9yX2VhY2hfZWxlbWVudF9pZChzdWIsIGlkLCAoZWxlbWVudCktXFx1MDAzZWRhdGEsIChlbGVtZW50KS1cXHUwMDNlZGF0YWxlbilcXG4yNzQ1OlxcdFxcbjI3NDY6XFx0I2RlZmluZSBmb3JfZWFjaF9zdWJlbGVtZW50X2V4dGlkKHN1YiwgZXh0aWQsIGVsZW1lbnQpXFx0XFx0XFx0XFxcXFxcbjI3NDc6XFx0XFx0Zm9yX2VhY2hfZWxlbWVudF9leHRpZChzdWIsIGV4dGlkLCAoZWxlbWVudCktXFx1MDAzZWRhdGEsIChlbGVtZW50KS1cXHUwMDNlZGF0YWxlbilcXG4yNzQ4OlxcdFxcbjI3NDk6XFx0LyoqXFxuMjc1MDpcXHQgKiBmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZCAtIGRldGVybWluZSBpZiBlbGVtZW50IHBhcnNpbmcgY29uc3VtZWQgYWxsIGRhdGFcXG4yNzUxOlxcdCAqIEBlbGVtZW50OiBlbGVtZW50IHBvaW50ZXIgYWZ0ZXIgZm9yX2VhY2hfZWxlbWVudCgpIG9yIGZyaWVuZHNcXG4yNzUyOlxcdCAqIEBkYXRhOiBzYW1lIGRhdGEgcG9pbnRlciBhcyBwYXNzZWQgdG8gZm9yX2VhY2hfZWxlbWVudCgpIG9yIGZyaWVuZHNcXG4yNzUzOlxcdCAqIEBkYXRhbGVuOiBzYW1lIGRhdGEgbGVuZ3RoIGFzIHBhc3NlZCB0byBmb3JfZWFjaF9lbGVtZW50KCkgb3IgZnJpZW5kc1xcbjI3NTQ6XFx0ICogUmV0dXJuOiAldHJ1ZSBpZiBhbGwgZWxlbWVudHMgd2VyZSBpdGVyYXRlZCwgJWZhbHNlIG90aGVyd2lzZTsgc2VlIG5vdGVzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE2OjAzOjQ1LjM1MTMzNjU5M1oiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjMxMDY4NzQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcGx5IGZhbWlsaWFyIHdpdGggY29kZSBhbmQgaXRlcmF0aW9uOlxuXG4qKkFuYWx5emluZyB0aGUgUmVtYWluZGVyIG9mIGBmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZGAqKlxuXG5BbHJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIGFmdGVyIHRoYXQgYGZvcl9lYWNoX2VsZW1lbnRfY29tcGxldGVkYCBmdW5jdGlvbiBjYWxsLiBJIGtub3cgaXQncyBhIGNyaXRpY2FsIHBpZWNlLCBsaWtlbHkgcmVsYXRlZCB0byBwcm9jZXNzaW5nIGluZGl2aWR1YWwgZWxlbWVudHMgb3IgdGFza3MuIEJ1dCB3aGF0J3MgdGhlIGJyb2FkZXIgcGljdHVyZT8gSSBuZWVkIHRvIGRlbHZlIGludG8gdGhlIGNvZGUgdGhhdCBmb2xsb3dzIHRoYXQgY2FsbCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIG92ZXJhbGwgYWxnb3JpdGhtLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaXQncyBjb29yZGluYXRpbmcgd2l0aCB0aGUgcmVzdCBvZiB0aGUgd29ya2Zsb3cuIElzIHRoaXMgdGhlIGVuZCBvZiBhIGxvb3A/IERvZXMgaXQgdHJpZ2dlciBhbm90aGVyIHN0YWdlPyBJcyB0aGVyZSBlcnJvciBoYW5kbGluZz8gV2hhdCBkZXBlbmRlbmNpZXMgZG9lcyB0aGUgY29kZSBhZnRlciBgZm9yX2VhY2hfZWxlbWVudF9jb21wbGV0ZWRgIGhhdmUgb24gdGhlIGZ1bmN0aW9uJ3Mgb3V0cHV0IG9yIGNvbXBsZXRpb24gc3RhdHVzPyBUaGUgZGV2aWwsIGFzIGFsd2F5cywgaXMgaW4gdGhlIGRldGFpbHMsIHNvIGxldCdzIGdldCBkaWdnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDQ5LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNjowNDoxNy42NjIwMjY1MzNaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2NDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvaWVlZTgwMjExLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjc1NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjc1NTpcXHQgKlxcbjI3NTY6XFx0ICogVGhpcyBmdW5jdGlvbiByZXR1cm5zICV0cnVlIGlmIGFsbCB0aGUgZGF0YSB3YXMgcGFyc2VkIG9yIGNvbnNpZGVyZWRcXG4yNzU3OlxcdCAqIHdoaWxlIHdhbGtpbmcgdGhlIGVsZW1lbnRzLiBPbmx5IHVzZSB0aGlzIGlmIHlvdXIgZm9yX2VhY2hfZWxlbWVudCgpXFxuMjc1ODpcXHQgKiBsb29wIGNhbm5vdCBiZSBicm9rZW4gb3V0IG9mLCBvdGhlcndpc2UgaXQgYWx3YXlzIHJldHVybnMgJWZhbHNlLlxcbjI3NTk6XFx0ICpcXG4yNzYwOlxcdCAqIElmIHNvbWUgZGF0YSB3YXMgbWFsZm9ybWVkLCB0aGlzIHJldHVybnMgJWZhbHNlIHNpbmNlIHRoZSBsYXN0IHBhcnNlZFxcbjI3NjE6XFx0ICogZWxlbWVudCB3aWxsIG5vdCBmaWxsIHRoZSB3aG9sZSByZW1haW5pbmcgZGF0YS5cXG4yNzYyOlxcdCAqL1xcbjI3NjM6XFx0c3RhdGljIGlubGluZSBib29sIGZvcl9lYWNoX2VsZW1lbnRfY29tcGxldGVkKGNvbnN0IHN0cnVjdCBlbGVtZW50ICplbGVtZW50LFxcbjI3NjQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFsZW4pXFxuMjc2NTpcXHR7XFxuMjc2NjpcXHRcXHRyZXR1cm4gKGNvbnN0IHU4ICopZWxlbWVudCA9PSAoY29uc3QgdTggKilkYXRhICsgZGF0YWxlbjtcXG4yNzY3OlxcdH1cXG4yNzY4OlxcdFxcbjI3Njk6XFx0LypcXG4yNzcwOlxcdCAqIFJTTlggQ2FwYWJpbGl0aWVzOlxcbjI3NzE6XFx0ICogYml0cyAwLTM6IEZpZWxkIGxlbmd0aCAobi0xKVxcbjI3NzI6XFx0ICovXFxuMjc3MzpcXHQjZGVmaW5lIFdMQU5fUlNOWF9DQVBBX1BST1RFQ1RFRF9UV1QgQklUKDQpXFxuMjc3NDpcXHQjZGVmaW5lIFdMQU5fUlNOWF9DQVBBX1NBRV9IMkUgQklUKDUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE2OjA0OjE3LjY2MjE4NjMxM1oiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0OTM4NzQyNDMyNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZWAgUGF0Y2g6IEEgS01TQU4gUGVyc3BlY3RpdmUqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXNzZWN0IHRoaXMgcGF0Y2ggZm9jdXNpbmcgb24gS01TQU4gaW1wbGljYXRpb25zLiBUaGUgY29yZSBvZiB0aGlzIGNoYW5nZSBzZWVtcyB0byBiZSB0aGUgaW50cm9kdWN0aW9uIG9mIGlucHV0IHZhbGlkYXRpb24gZm9yIHVzZXItcHJvdmlkZWQgSW5mb3JtYXRpb24gRWxlbWVudHMgKElFcykgcGFzc2VkIHRocm91Z2ggdGhlIGBTSU9DU0lXR0VOSUVgIGlvY3RsIHVzaW5nIGBjZmc4MDIxMV93ZXh0X3Npd2dlbmllYC4gUHJldmlvdXNseSwgdGhlIGNvZGUganVzdCBibGluZGx5IGNvcGllZCB0aGUgYGV4dHJhYCBidWZmZXIgZnJvbSB1c2Vyc3BhY2Ugd2l0aCBga21lbWR1cGAuIE5vdywgd2UncmUgZW1wbG95aW5nIGBmb3JfZWFjaF9lbGVtZW50YCBhbmQgYGZvcl9lYWNoX2VsZW1lbnRfY29tcGxldGVkYCB0byB2ZXJpZnkgdGhhdCB0aGUgaW5jb21pbmcgZGF0YSwgYGV4dHJhYCB3aXRoIGxlbmd0aCBgaWVfbGVuYCwgY29uZm9ybXMgdG8gdGhlIGV4cGVjdGVkIElFRUUgODAyLjExIGVsZW1lbnQgKFRMVikgc3RydWN0dXJlLiBJZiBpdCdzIG1hbGZvcm1lZCDigJMgbWVhbmluZyB0aGUgbGVuZ3RocyBvZiB0aGUgVExWcyBkb24ndCBtYWtlIHNlbnNlIOKAkyB3ZSByZXR1cm4gYC1FSU5WQUxgLiBUaGlzIGlzIGEgY3J1Y2lhbCBzZWN1cml0eSBoYXJkZW5pbmcgc3RlcC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgdGhpcyBhZGRyZXNzZXMuIENsZWFybHksIHRoaXMgaXMgaW5wdXQgdmFsaWRhdGlvbiDigJMgYSBjcml0aWNhbCBzZWN1cml0eSBjaGVjay4gQmVmb3JlLCBtYWxmb3JtZWQgSUVzIGNvdWxkIGhhdmUgcG90ZW50aWFsbHkgY2F1c2VkIG91dC1vZi1ib3VuZHMgcmVhZHMgZHVyaW5nIGxhdGVyIHBhcnNpbmcgb2YgdGhlIGRhdGEsIGEgY2xhc3NpYyB2dWxuZXJhYmlsaXR5LiBOb3csIHdlJ3JlIGV4cGxpY2l0bHkgdmFsaWRhdGluZyBlbGVtZW50IGxlbmd0aHMuIFNvLCBteSBwcmltYXJ5IGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIHBhdGNoLCBpbiBpdHNlbGYsIGludHJvZHVjZXMgbmV3IHJpc2tzLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuTGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBEb2VzIHRoaXMgcGF0Y2g6XG5cbjEuICAqKlNlbmQgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2U/KiogTm8sIHRoaXMgaXMgYSBcInNldFwiIG9wZXJhdGlvbiByZWNlaXZpbmcgZGF0YSwgbm90IHRyYW5zbWl0dGluZyBpdC4gSXQncyB2YWxpZGF0aW5nIHRoZSBpbnB1dC5cblxuMi4gICoqSW50cm9kdWNlIGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IHJlbGllcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzPyoqIFRoZSBgZWxlbWAgdmFyaWFibGUsIGNyaXRpY2FsIHRvIHRoZSB2YWxpZGF0aW9uIGxvb3AsIGlzIGluaXRpYWxpemVkIHdpdGhpbiB0aGUgYGZvcl9lYWNoX2VsZW1lbnRgIG1hY3JvIGFzIHRoZSBpdGVyYXRvciBwb2ludGVyLCBgX2VsZW0gPSAoY29uc3Qgc3RydWN0IGVsZW1lbnQgKikoX2RhdGEpYC4gVGhlIGlucHV0IGBleHRyYWAgaXMgZnJvbSB0aGUgaW9jdGwgYW5kIGhhcyBhbHJlYWR5IGJlZW4gY29waWVkIGZyb20gdXNlcnNwYWNlLiBgaWVfbGVuYCBpcyBkZXJpdmVkIGZyb20gdGhlIGlucHV0IGRhdGEgc3RydWN0dXJlLiBFdmVyeXRoaW5nIHNlZW1zIHByb3Blcmx5IGluaXRpYWxpemVkLlxuXG4zLiAgKipBbGxvY2F0ZSBvciBpbml0aWFsaXplIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXI/KiogTm8sIHRoZSBwYXRjaCBjYWxscyBga21lbWR1cGAgKmFmdGVyKiB0aGUgdmFsaWRhdGlvbiwgc28gdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGlzIHBlcmZvcm1lZCBvbiBkYXRhIHRoYXQgaGFzIHBhc3NlZCB2YWxpZGF0aW9uLlxuXG40LiAgKipUb3VjaCBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnM/KiogTm8sIHRoaXMgcGF0Y2ggaXMgYWJvdXQgKnJlc3RyaWN0aW5nKiBhbmQgKnZhbGlkYXRpbmcqIHRoZSBpbnB1dCBkYXRhIGZvcm1hdCwgbm90IG1hbmlwdWxhdGluZyBleGlzdGluZyBidWZmZXIgYm91bmRhcmllcyBpbiBhIHdheSB0aGF0IGNvdWxkIGludHJvZHVjZSB1bmluaXRpYWxpemVkIHJlYWRzLiBJdCdzIHByZXZlbnRpbmcgbWFsZm9ybWVkIFRMViBlbGVtZW50cyBmcm9tIGJlaW5nIHByb2Nlc3NlZC5cblxuR2l2ZW4gdGhlc2UgY29uc2lkZXJhdGlvbnMsIEknbSBjb25maWRlbnQgdGhhdCBLTVNBTiBpc24ndCBkaXJlY3RseSByZWxldmFudCBoZXJlLiBLTVNBTidzIHN0cmVuZ3RoIGxpZXMgaW4gZGV0ZWN0aW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdGFjaywgaGVhcCwgcGFnZSkgYW5kIHBvdGVudGlhbCBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcy4gVGhpcyBwYXRjaCwgaG93ZXZlciwgaXMgcHVyZWx5IGFib3V0IHBhcnNpbmcgdXNlciBpbnB1dCBhbmQgdmFsaWRhdGluZyBpdHMgc3RydWN0dXJlIGJlZm9yZSBpdCBpcyBjb3BpZWQuIEFueSBvdXQtb2YtYm91bmRzIG1lbW9yeSByZWFkcyBhcmlzaW5nIGZyb20gKmludmFsaWQqIFRMVnMgd291bGQgYmUgZGV0ZWN0ZWQgYnkgS0FTQU4uXG5cbkxldCdzIGRvdWJsZS1jaGVjayBldmVyeXRoaW5nOiBpcyB0aGVyZSAqYW55KiBpbnN0YW5jZSB3aGVyZSBgZWxlbWAgb3IgcmVsYXRlZCB2YXJpYWJsZXMgY291bGQgYmUgdXNlZCB1bmluaXRpYWxpemVkPyBOb3BlLiBFdmVuIGlmIGBpZV9sZW5gIGlzIHplcm8sIHRoZSBjb2RlIGlzIHdpdGhpbiBhIGNvbmRpdGlvbmFsLCBhbmQgdGhlIGBmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZGAgY2FsbCBjb21wYXJlcyB0aGUgaXRlcmF0b3IgYGVsZW1gIGFnYWluc3QgdGhlIGVuZCBvZiB0aGUgaW5wdXQgYnVmZmVyLCBgZXh0cmEgKyBpZV9sZW5gLiBFdmVyeXRoaW5nIGlzIGluaXRpYWxpemVkIGNvcnJlY3RseS4gS0FTQU4gY292ZXJzIHRoZSBrZXkgY29uY2VybnMgYWJvdXQgYnVmZmVyIG92ZXJmbG93cyBhbmQgbWVtb3J5IGJvdW5kcyBoZXJlLiBLTVNBTiBpcyBub3QgbmVlZGVkIGhlcmUuXG5cblRoZXJlZm9yZSwgZm9yIGNvbXBsZXRlbmVzcywgaGVyZSdzIG15IHN1bW1hcml6ZWQgcmVhc29uaW5nIGZvciB3aHkgS01TQU4gaXMgbm90IHJlcXVpcmVkOiBUaGlzIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBvZiB1c2VyLXByb3ZpZGVkIElFcyBwYXNzZWQgdGhyb3VnaCBgU0lPQ1NJV0dFTklFYCAoYGNmZzgwMjExX3dleHRfc2l3Z2VuaWVgKSB1c2luZyBgZm9yX2VhY2hfZWxlbWVudCgpYCAvIGBmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZCgpYCB0byBlbnN1cmUgdGhlIGRhdGEgY29uZm9ybXMgdG8gdGhlIDgwMi4xMSBlbGVtZW50IFRMViBzdHJ1Y3R1cmUgYmVmb3JlIGJlaW5nIGNvcGllZCB3aXRoIGBrbWVtZHVwYC4gS01TQU4gaXMgbm90IHJlcXVpcmVkIGJlY2F1c2UgdGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBUaGUgaXRlcmF0b3IgcG9pbnRlciBgZWxlbWAgaXMgaW5pdGlhbGl6ZWQgd2l0aGluIHRoZSBtYWNybywgYW5kIHRoZSBpbnB1dCBpcyB1c2VyLXByb3ZpZGVkLiBBbnkgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgYXNzb2NpYXRlZCB3aXRoIG1hbGZvcm1lZCBUTFZzIChlLmcuLCBvdXQtb2YtYm91bmRzIHJlYWRzKSBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IEtBU0FOLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjM4LCJPdXRwdXRUb2tlbnMiOjIxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE2OjEyOjMxLjUzNjQzMjkxWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGlucHV0IHZhbGlkYXRpb24gdG8gY2ZnODAyMTFfd2V4dF9zaXdnZW5pZSgpIGJ5IGl0ZXJhdGluZyBvdmVyIGFuZCB2ZXJpZnlpbmcgdGhlIHN0cnVjdHVyZSBvZiB1c2VyLXByb3ZpZGVkIElFRUUgODAyLjExIEluZm9ybWF0aW9uIEVsZW1lbnRzIChJRXMpIHVzaW5nIGZvcl9lYWNoX2VsZW1lbnQoKSBhbmQgZm9yX2VhY2hfZWxlbWVudF9jb21wbGV0ZWQoKS4gSWYgdGhlIGVsZW1lbnRzIGFyZSBtYWxmb3JtZWQsIGl0IHJldHVybnMgLUVJTlZBTCBiZWZvcmUgYWxsb2NhdGluZyBhbmQgc2F2aW5nIHRoZSBJRSBidWZmZXIuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MsIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlIGxvb3AgaXRlcmF0b3IgdmFyaWFibGUgYGVsZW1gIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIGJ5IHRoZSBgZm9yX2VhY2hfZWxlbWVudGAgbWFjcm8sIGFuZCB0aGUgaW5wdXQgYnVmZmVyIGNvbnRhaW5zIGRhdGEgY29waWVkIGZyb20gdXNlciBzcGFjZS4gUG90ZW50aWFsIGJ1Z3MgYWRkcmVzc2VkIG9yIHRvdWNoZWQgYnkgdGhpcyBsb2dpYyAoc3VjaCBhcyBtYWxmb3JtZWQgVExWIHBhcnNpbmcgbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIHJlYWRzKSBmYWxsIHVuZGVyIEtBU0FOJ3MgcHVydmlldy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgaW5wdXQgdmFsaWRhdGlvbiB0byBjZmc4MDIxMV93ZXh0X3Npd2dlbmllKCkgYnkgaXRlcmF0aW5nIG92ZXIgYW5kIHZlcmlmeWluZyB0aGUgc3RydWN0dXJlIG9mIHVzZXItcHJvdmlkZWQgSUVFRSA4MDIuMTEgSW5mb3JtYXRpb24gRWxlbWVudHMgKElFcykgdXNpbmcgZm9yX2VhY2hfZWxlbWVudCgpIGFuZCBmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZCgpLiBJZiB0aGUgZWxlbWVudHMgYXJlIG1hbGZvcm1lZCwgaXQgcmV0dXJucyAtRUlOVkFMIGJlZm9yZSBhbGxvY2F0aW5nIGFuZCBzYXZpbmcgdGhlIElFIGJ1ZmZlci5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcywga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgb3IgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGUgbG9vcCBpdGVyYXRvciB2YXJpYWJsZSBgZWxlbWAgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYnkgdGhlIGBmb3JfZWFjaF9lbGVtZW50YCBtYWNybywgYW5kIHRoZSBpbnB1dCBidWZmZXIgY29udGFpbnMgZGF0YSBjb3BpZWQgZnJvbSB1c2VyIHNwYWNlLiBQb3RlbnRpYWwgYnVncyBhZGRyZXNzZWQgb3IgdG91Y2hlZCBieSB0aGlzIGxvZ2ljIChzdWNoIGFzIG1hbGZvcm1lZCBUTFYgcGFyc2luZyBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMpIGZhbGwgdW5kZXIgS0FTQU4ncyBwdXJ2aWV3LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowtr92m[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-31 14:37:42 +0000 UTC FinishedAt: 2026-08-31 16:12:32 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "dd6f4ef6f8a37412909ad787c837332fb070159c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "CFG80211_WEXT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "dd6f4ef6f8a37412909ad787c837332fb070159c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "CFG80211_WEXT" ], "series_id": "4e2a446a-795c-417b-8bc0-b3853fc649c8" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "cfg80211_wext_siwgenie" ], "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+CgkJCTx0ZD4yMDI2LzA4LzMxIDE1OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NTBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMV9XRVhUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2ZnODAyMTFfd2V4dF9zaXdnZW5pZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgaW5wdXQgdmFsaWRhdGlvbiB0byBjZmc4MDIxMV93ZXh0X3Npd2dlbmllKCkgYnkgaXRlcmF0aW5nIG92ZXIgYW5kIHZlcmlmeWluZyB0aGUgc3RydWN0dXJlIG9mIHVzZXItcHJvdmlkZWQgSUVFRSA4MDIuMTEgSW5mb3JtYXRpb24gRWxlbWVudHMgKElFcykgdXNpbmcgZm9yX2VhY2hfZWxlbWVudCgpIGFuZCBmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZCgpLiBJZiB0aGUgZWxlbWVudHMgYXJlIG1hbGZvcm1lZCwgaXQgcmV0dXJucyAtRUlOVkFMIGJlZm9yZSBhbGxvY2F0aW5nIGFuZCBzYXZpbmcgdGhlIElFIGJ1ZmZlci5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MsIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlIGxvb3AgaXRlcmF0b3IgdmFyaWFibGUgYGVsZW1gIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIGJ5IHRoZSBgZm9yX2VhY2hfZWxlbWVudGAgbWFjcm8sIGFuZCB0aGUgaW5wdXQgYnVmZmVyIGNvbnRhaW5zIGRhdGEgY29waWVkIGZyb20gdXNlciBzcGFjZS4gUG90ZW50aWFsIGJ1Z3MgYWRkcmVzc2VkIG9yIHRvdWNoZWQgYnkgdGhpcyBsb2dpYyAoc3VjaCBhcyBtYWxmb3JtZWQgVExWIHBhcnNpbmcgbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIHJlYWRzKSBmYWxsIHVuZGVyIEtBU0FOJiMzOTtzIHB1cnZpZXcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBpbnB1dCB2YWxpZGF0aW9uIGZvciB3aXJlbGVzcyBpbmZvcm1hdGlvbiBlbGVtZW50cyAoSUVzKSBwYXNzZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBTSU9DU0lXR0VOSUUgd2lyZWxlc3MgZXh0ZW5zaW9uIGlvY3RsLiBJdCBpdGVyYXRlcyB0aHJvdWdoIHRoZSBlbGVtZW50IGJ1ZmZlciB1c2luZyBmb3JfZWFjaF9lbGVtZW50KCkgYW5kIHZhbGlkYXRlcyBjb21wbGV0aW9uIHdpdGggZm9yX2VhY2hfZWxlbWVudF9jb21wbGV0ZWQoKSBiZWZvcmUgY29weWluZyB0aGUgYnVmZmVyLCByZWplY3RpbmcgbWFsZm9ybWVkIGVsZW1lbnRzIHdpdGggLUVJTlZBTC4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0d29yayB3aXJlbGVzcyBjb3JlIGNvZGUgdGhhdCBjYW4gYmUgdGVzdGVkIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzIChlLmcuIHVzaW5nIG1hYzgwMjExX2h3c2ltKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNToyMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDcyNzI0OTU2YzQxYTVmMTJhOGY2MDk3MTJmZWZlMjMzMTY5NzY3ZGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxNToyMTo1OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuYyBiL25ldC93aXJlbGVzcy93ZXh0LXNtZS5jXG5pbmRleCA1NzNiNmIxNWE0NDZlLi5iNTkxNGYzNjU4ZGI0IDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL3dleHQtc21lLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy93ZXh0LXNtZS5jXG5AQCAtMzE5LDYgJiM0MzszMTksMTUgQEAgaW50IGNmZzgwMjExX3dleHRfc2l3Z2VuaWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRpZiAoaWVfbGVuKSB7XG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgZWxlbWVudCAqZWxlbTtcbiYjNDM7XG4mIzQzO1x0XHRmb3JfZWFjaF9lbGVtZW50KGVsZW0sIGV4dHJhLCBpZV9sZW4pIHtcbiYjNDM7XHRcdFx0Lyogbm90aGluZyAqL1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmICghZm9yX2VhY2hfZWxlbWVudF9jb21wbGV0ZWQoZWxlbSwgZXh0cmEsIGllX2xlbikpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiBcdFx0aWUgPSBrbWVtZHVwKGV4dHJhLCBpZV9sZW4sIEdGUF9LRVJORUwpO1xuIFx0XHRpZiAoIWllKVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE1OjIyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjM1bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMV9XRVhUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2ZnODAyMTFfd2V4dF9zaXdnZW5pZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGlucHV0IHZhbGlkYXRpb24gZm9yIHdpcmVsZXNzIGluZm9ybWF0aW9uIGVsZW1lbnRzIChJRXMpIHBhc3NlZCBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIFNJT0NTSVdHRU5JRSB3aXJlbGVzcyBleHRlbnNpb24gaW9jdGwuIEl0IGl0ZXJhdGVzIHRocm91Z2ggdGhlIGVsZW1lbnQgYnVmZmVyIHVzaW5nIGZvcl9lYWNoX2VsZW1lbnQoKSBhbmQgdmFsaWRhdGVzIGNvbXBsZXRpb24gd2l0aCBmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZCgpIGJlZm9yZSBjb3B5aW5nIHRoZSBidWZmZXIsIHJlamVjdGluZyBtYWxmb3JtZWQgZWxlbWVudHMgd2l0aCAtRUlOVkFMLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JrIHdpcmVsZXNzIGNvcmUgY29kZSB0aGF0IGNhbiBiZSB0ZXN0ZWQgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMgKGUuZy4gdXNpbmcgbWFjODAyMTFfaHdzaW0pLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzI3MjQ5NTZjNDFhNWYxMmE4ZjYwOTcxMmZlZmUyMzMxNjk3NjdkZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDE1OjIxOjU5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3dleHQtc21lLmMgYi9uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuYwppbmRleCA1NzNiNmIxNWE0NDZlLi5iNTkxNGYzNjU4ZGI0IDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuYwpAQCAtMzE5LDYgJiM0MzszMTksMTUgQEAgaW50IGNmZzgwMjExX3dleHRfc2l3Z2VuaWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJcmV0dXJuIDA7CiAKIAlpZiAoaWVfbGVuKSB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgZWxlbWVudCAqZWxlbTsKJiM0MzsKJiM0MzsJCWZvcl9lYWNoX2VsZW1lbnQoZWxlbSwgZXh0cmEsIGllX2xlbikgewomIzQzOwkJCS8qIG5vdGhpbmcgKi8KJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmICghZm9yX2VhY2hfZWxlbWVudF9jb21wbGV0ZWQoZWxlbSwgZXh0cmEsIGllX2xlbikpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJCWllID0ga21lbWR1cChleHRyYSwgaWVfbGVuLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFpZSkKIAkJCXJldHVybiAtRU5PTUVNOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTMyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQcm9wb3NlZCBDb2RlIENoYW5nZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGRpZmYgYW5kIHRoZSBjb2RlYmFzZS4gSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlIHRvdWNoZXMgYG5ldC93aXJlbGVzcy93ZXh0LXNtZS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZWAgZnVuY3Rpb24uIEFscmlnaHQsIHRoYXQgdGVsbHMgbWUgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UsIGJ1dCBJIG5lZWQgdGhlIGNvbnRleHQuCgpMZXQmIzM5O3Mgc3RhcnQgYnkgZ2V0dGluZyBhIGNvcHkgb2YgYG5ldC93aXJlbGVzcy93ZXh0LXNtZS5jYCBhbmQgZmlndXJpbmcgb3V0IHdoYXQmIzM5O3MgY2FsbGluZyBpdCwgYW5kIGFsc28gdGhlIGNvbmZpZyBkZXBlbmRlbmNpZXMuIEkmIzM5O2xsIHByb2JhYmx5IHVzZSBgcmVhZC1maWxlYCB0byBncmFiIHRoZSBzb3VyY2UgY29kZSwgYW5kIHRoZW4gYGdyZXBwZXJgIHRvIHNlZSB3aGVyZSBlbHNlIGl0JiMzOTtzIHVzZWQgYW5kIHdoYXQgS2NvbmZpZyBvcHRpb25zIGFyZSByZWxldmFudC4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IGFuZCB3aHkgdGhpcyBzcGVjaWZpYyBzZWN0aW9uIG5lZWRlZCB0aGUgY2hhbmdlLCBhbmQgYW55IGVkZ2UgY2FzZXMgdG8gd2F0Y2ggZm9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE1OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL3dleHQtc21lLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMwMDpcdFx0XHRcdCAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKVxuIDMwMTpcdHtcbiAzMDI6XHRcdHN0cnVjdCBpd19wb2ludCAqZGF0YSA9IFx1MDAyNndycXUtXHUwMDNlZGF0YTtcbiAzMDM6XHRcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtXHUwMDNlaWVlZTgwMjExX3B0cjtcbiAzMDQ6XHRcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX3JkZXYod2Rldi1cdTAwM2V3aXBoeSk7XG4gMzA1Olx0XHRpbnQgaWVfbGVuID0gZGF0YS1cdTAwM2VsZW5ndGg7XG4gMzA2Olx0XHR1OCAqaWUgPSBleHRyYTtcbiAzMDc6XHRcbiAzMDg6XHRcdGlmICh3ZGV2LVx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKVxuIDMwOTpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gMzEwOlx0XG4gMzExOlx0XHRpZiAoIWllX2xlbilcbiAzMTI6XHRcdFx0aWUgPSBOVUxMO1xuIDMxMzpcdFxuIDMxNDpcdFx0Z3VhcmQod2lwaHkpKHdkZXYtXHUwMDNld2lwaHkpO1xuIDMxNTpcdFxuIDMxNjpcdFx0Lyogbm8gY2hhbmdlICovXG4gMzE3Olx0XHRpZiAod2Rldi1cdTAwM2V3ZXh0LmllX2xlbiA9PSBpZV9sZW4gXHUwMDI2XHUwMDI2XG4gMzE4Olx0XHQgICAgbWVtY21wKHdkZXYtXHUwMDNld2V4dC5pZSwgaWUsIGllX2xlbikgPT0gMClcbiAzMTk6XHRcdFx0cmV0dXJuIDA7XG4gMzIwOlx0XG4gMzIxOlx0XHRpZiAoaWVfbGVuKSB7XG4gMzIyOlx0XHRcdGNvbnN0IHN0cnVjdCBlbGVtZW50ICplbGVtO1xuIDMyMzpcdFxuIDMyNDpcdFx0XHRmb3JfZWFjaF9lbGVtZW50KGVsZW0sIGV4dHJhLCBpZV9sZW4pIHtcbiAzMjU6XHRcdFx0XHQvKiBub3RoaW5nICovXG4gMzI2Olx0XHRcdH1cbiAzMjc6XHRcbiAzMjg6XHRcdFx0aWYgKCFmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZChlbGVtLCBleHRyYSwgaWVfbGVuKSlcbiAzMjk6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAzMzA6XHRcbiAzMzE6XHRcdFx0aWUgPSBrbWVtZHVwKGV4dHJhLCBpZV9sZW4sIEdGUF9LRVJORUwpO1xuIDMzMjpcdFx0XHRpZiAoIWllKVxuIDMzMzpcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDMzNDpcdFx0fSBlbHNlIHtcbiAzMzU6XHRcdFx0aWUgPSBOVUxMO1xuIDMzNjpcdFx0fVxuIDMzNzpcdFxuIDMzODpcdFx0a2ZyZWUod2Rldi1cdTAwM2V3ZXh0LmllKTtcbiAzMzk6XHRcdHdkZXYtXHUwMDNld2V4dC5pZSA9IGllO1xuIDM0MDpcdFx0d2Rldi1cdTAwM2V3ZXh0LmllX2xlbiA9IGllX2xlbjtcbiAzNDE6XHRcbiAzNDI6XHRcdGlmICh3ZGV2LVx1MDAzZWNvbm4pXG4gMzQzOlx0XHRcdHJldHVybiBjZmc4MDIxMV9kaXNjb25uZWN0KHJkZXYsIGRldixcbiAzNDQ6XHRcdFx0XHRcdFx0ICAgV0xBTl9SRUFTT05fREVBVVRIX0xFQVZJTkcsIGZhbHNlKTtcbiAzNDU6XHRcbiAzNDY6XHRcdC8qIHVzZXJzcGFjZSBiZXR0ZXIgbm90IHRoaW5rIHdlJiMzOTtsbCByZWNvbm5lY3QgKi9cbiAzNDc6XHRcdHJldHVybiAwO1xuIDM0ODpcdH1cbiAzNDk6XHRcbiAzNTA6XHRpbnQgY2ZnODAyMTFfd2V4dF9zaXdtbG1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gMzUxOlx0XHRcdFx0ICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLFxuIDM1MjpcdFx0XHRcdCAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpXG4gMzUzOlx0e1xuIDM1NDpcdFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi1cdTAwM2VpZWVlODAyMTFfcHRyO1xuIDM1NTpcdFx0c3RydWN0IGl3X21sbWUgKm1sbWUgPSAoc3RydWN0IGl3X21sbWUgKilleHRyYTtcbiAzNTY6XHRcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjtcbiAzNTc6XHRcbiAzNTg6XHRcdGlmICghd2RldilcbiAzNTk6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE1OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNjQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBDb21waWxhdGlvbiBvZiBgbmV0L3dpcmVsZXNzL3dleHQtc21lLmNgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgYG5ldC93aXJlbGVzcy93ZXh0LXNtZS5jYCBpcyBiZWluZyBjb21waWxlZCBhbmQgd2hhdCBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlIGltcGFjdGluZyBpdHMgYnVpbGQgcHJvY2Vzcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBidWlsZCBzeXN0ZW0gaXRzZWxmLiBJJiMzOTtsbCBuZWVkIHRvIGxvY2F0ZSB0aGUgcmVsZXZhbnQgTWFrZWZpbGVzIOKAkyBzdGFydGluZyB3aXRoaW4gdGhlIGBuZXQvd2lyZWxlc3MvYCBkaXJlY3Rvcnkgc2VlbXMgbG9naWNhbC4gSSYjMzk7bGwgYWxzbyBuZWVkIHRvIGNoZWNrIHRoZSBhc3NvY2lhdGVkIGBLY29uZmlnYCBmaWxlczsgdGhhdCYjMzk7cyB3aGVyZSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGdvdmVybiBpdHMgY29tcGlsYXRpb24gd2lsbCByZXNpZGUuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE1OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dleHQtc21lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9NYWtlZmlsZT0xMz1jZmc4MDIxMS0kKENPTkZJR19DRkc4MDIxMV9ERUJVR0ZTKSAmIzQzOz0gZGVidWdmcy5vXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU6MTQ6Y2ZnODAyMTEtJChDT05GSUdfQ0ZHODAyMTFfV0VYVCkgJiM0Mzs9IHdleHQtY29tcGF0Lm8gd2V4dC1zbWUub1xubmV0L3dpcmVsZXNzL01ha2VmaWxlLTE1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE1OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NzkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipOYXZpZ2F0aW5nIHRoZSBXaXJlbGVzcyBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBDT05GSUdfQ0ZHODAyMTFfV0VYVGAgYW5kIGBDT05GSUdfQ0ZHODAyMTFgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgYG5ldC93aXJlbGVzcy9LY29uZmlnYC4gSXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBpbnRyaWNhY2llcyBvZiB3aXJlbGVzcyBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLiBUaGF0IGBLY29uZmlnYCBmaWxlIHNob3VsZCBob2xkIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhvc2UgZmxhZ3MgYXJlIHJlbGF0ZWQgYW5kIHdoYXQgZWxzZSB0aGV5IG1pZ2h0IGRlcGVuZCBvbi4gSG9wZWZ1bGx5LCBpdCYjMzk7cyBhbGwgc3RyYWlnaHRmb3J3YXJkLCBhbmQgSSBjYW4gcXVpY2tseSBtYXAgb3V0IHRoZSBuZWNlc3NhcnkgcmVsYXRpb25zaGlwcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDRkc4MDIxMV9XRVhUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9LY29uZmlnPTU9Y29uZmlnIFdFWFRfQ09SRVxubmV0L3dpcmVsZXNzL0tjb25maWctNi1cdGRlZl9ib29sIHlcbm5ldC93aXJlbGVzcy9LY29uZmlnOjc6XHRkZXBlbmRzIG9uIENGRzgwMjExX1dFWFQgfHwgV0lSRUxFU1NfRVhUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy04LVxuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnPTE3Nz1jb25maWcgQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTg2LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTg3OmNvbmZpZyBDRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODgtXHRib29sIFwmIzM0O2NmZzgwMjExIHdpcmVsZXNzIGV4dGVuc2lvbnMgY29tcGF0aWJpbGl0eVwmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9NYWtlZmlsZT0xMz1jZmc4MDIxMS0kKENPTkZJR19DRkc4MDIxMV9ERUJVR0ZTKSAmIzQzOz0gZGVidWdmcy5vXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU6MTQ6Y2ZnODAyMTEtJChDT05GSUdfQ0ZHODAyMTFfV0VYVCkgJiM0Mzs9IHdleHQtY29tcGF0Lm8gd2V4dC1zbWUub1xubmV0L3dpcmVsZXNzL01ha2VmaWxlLTE1LVxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmM9NTQ2PXN0cnVjdCB3aXBoeSAqd2lwaHlfbmV3X25tKGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9vcHMgKm9wcywgaW50IHNpemVvZl9wcml2LFxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtNjMzLVx0XHRcdCAgY2ZnODAyMTFfZGZzX2NoYW5uZWxzX3VwZGF0ZV93b3JrKTtcbm5ldC93aXJlbGVzcy9jb3JlLmM6NjM0OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL2NvcmUuYy02MzUtXHRyZGV2LVx1MDAzZXdpcGh5LndleHQgPSBcdTAwMjZjZmc4MDIxMV93ZXh0X2hhbmRsZXI7XG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYz0xNDA0PXN0YXRpYyB2b2lkIF9jZmc4MDIxMV91bnJlZ2lzdGVyX3dkZXYoc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE0NDMtXG5uZXQvd2lyZWxlc3MvY29yZS5jOjE0NDQ6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE0NDUtXHRrZnJlZV9zZW5zaXRpdmUod2Rldi1cdTAwM2V3ZXh0LmtleXMpO1xuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmM9MTQ5OD12b2lkIGNmZzgwMjExX2xlYXZlX2xvY2tlZChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNTIyLVxubmV0L3dpcmVsZXNzL2NvcmUuYzoxNTIzOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNTI0LVx0XHRrZnJlZSh3ZGV2LVx1MDAzZXdleHQuaWUpO1xuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmM9MTYwOT12b2lkIGNmZzgwMjExX2luaXRfd2RldihzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtMTYxNy1cbm5ldC93aXJlbGVzcy9jb3JlLmM6MTYxODojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTYxOS1cdHdkZXYtXHUwMDNld2V4dC5kZWZhdWx0X2tleSA9IC0xO1xuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmM9MTcwMj1zdGF0aWMgaW50IGNmZzgwMjExX25ldGRldl9ub3RpZmllcl9jYWxsKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNzc2LVx0XHRzd2l0Y2ggKHdkZXYtXHUwMDNlaWZ0eXBlKSB7XG5uZXQvd2lyZWxlc3MvY29yZS5jOjE3Nzc6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE3NzgtXHRcdGNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6XG4tLVxubmV0L3dpcmVsZXNzL2lic3MuYz0xOT12b2lkIF9fY2ZnODAyMTFfaWJzc19qb2luZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJzc2lkLFxuLS1cbm5ldC93aXJlbGVzcy9pYnNzLmMtMjMtXHRzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3M7XG5uZXQvd2lyZWxlc3MvaWJzcy5jOjI0OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL2lic3MuYy0yNS1cdHVuaW9uIGl3cmVxX2RhdGEgd3JxdTtcbi0tXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTUxLVx0XHRcdFx0R0ZQX0tFUk5FTCk7XG5uZXQvd2lyZWxlc3MvaWJzcy5jOjUyOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL2lic3MuYy01My1cdG1lbXNldChcdTAwMjZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpO1xuLS1cbm5ldC93aXJlbGVzcy9pYnNzLmM9ODc9aW50IF9fY2ZnODAyMTFfam9pbl9pYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTE0MC1cbm5ldC93aXJlbGVzcy9pYnNzLmM6MTQxOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL2lic3MuYy0xNDItXHR3ZGV2LVx1MDAzZXdleHQuaWJzcy5jaGFuZGVmID0gcGFyYW1zLVx1MDAzZWNoYW5kZWY7XG4tLVxubmV0L3dpcmVsZXNzL2lic3MuYz0xNTY9dm9pZCBjZmc4MDIxMV9jbGVhcl9pYnNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgbm93ZXh0KVxuLS1cbm5ldC93aXJlbGVzcy9pYnNzLmMtMTg0LVx0bWVtc2V0KFx1MDAyNndkZXYtXHUwMDNldS5pYnNzLmNoYW5kZWYsIDAsIHNpemVvZih3ZGV2LVx1MDAzZXUuaWJzcy5jaGFuZGVmKSk7XG5uZXQvd2lyZWxlc3MvaWJzcy5jOjE4NTojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9pYnNzLmMtMTg2LVx0aWYgKCFub3dleHQpXG4tLVxubmV0L3dpcmVsZXNzL2lic3MuYz0xOTI9aW50IGNmZzgwMjExX2xlYXZlX2lic3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9pYnNzLmMtMjEzLVxubmV0L3dpcmVsZXNzL2lic3MuYzoyMTQ6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTIxNS1pbnQgY2ZnODAyMTFfaWJzc193ZXh0X2pvaW4oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9tbG1lLmM9MjM0PXZvaWQgY2ZnODAyMTFfbWljaGFlbF9taWNfZmFpbHVyZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkcixcbi0tXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTIzOS1cdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX3JkZXYod2lwaHkpO1xubmV0L3dpcmVsZXNzL21sbWUuYzoyNDA6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3MvbWxtZS5jLTI0MS1cdHVuaW9uIGl3cmVxX2RhdGEgd3JxdTtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTU0NTk9c3RhdGljIGludCBubDgwMjExX3NldF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTU1MDEtXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjU1MDI6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTU1MDMtXHRcdHdkZXYtXHUwMDNld2V4dC5kZWZhdWx0X2tleSA9IGtleS5pZHg7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01NTI0LVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo1NTI1OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01NTI2LVx0XHR3ZGV2LVx1MDAzZXdleHQuZGVmYXVsdF9tZ210X2tleSA9IGtleS5pZHg7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz01NjM3PXN0YXRpYyBpbnQgbmw4MDIxMV9kZWxfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01Njg2LVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo1Njg3OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01Njg4LVx0aWYgKCFlcnIpIHtcbi0tXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jPTExMTQ9dm9pZCBfX19jZmc4MDIxMV9zY2FuX2RvbmUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9zY2FuLmMtMTExOS1cdHN0cnVjdCBza19idWZmICptc2c7XG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjExMjA6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTExMjEtXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XG4tLVxubmV0L3dpcmVsZXNzL3NjYW4uYy0xMTYyLVxubmV0L3dpcmVsZXNzL3NjYW4uYzoxMTYzOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL3NjYW4uYy0xMTY0LVx0aWYgKHdkZXYtXHUwMDNlbmV0ZGV2IFx1MDAyNlx1MDAyNiAhcmVxdWVzdC1cdTAwM2VpbmZvLmFib3J0ZWQpIHtcbi0tXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jPTM0MTQ9dm9pZCBjZmc4MDIxMV91cGRhdGVfYXNzb2NfYnNzX2VudHJ5KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tLVxubmV0L3dpcmVsZXNzL3NjYW4uYy0zNDg3LVxubmV0L3dpcmVsZXNzL3NjYW4uYzozNDg4OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL3NjYW4uYy0zNDg5LXN0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKlxuLS1cbm5ldC93aXJlbGVzcy9zbWUuYz03MzU9dm9pZCBfX2NmZzgwMjExX2Nvbm5lY3RfcmVzdWx0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L3dpcmVsZXNzL3NtZS5jLTc0My1cdHU4IGNvdW50cnlfZGF0YWxlbjtcbm5ldC93aXJlbGVzcy9zbWUuYzo3NDQ6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3Mvc21lLmMtNzQ1LVx0dW5pb24gaXdyZXFfZGF0YSB3cnF1O1xuLS1cbm5ldC93aXJlbGVzcy9zbWUuYy03NzQtXG5uZXQvd2lyZWxlc3Mvc21lLmM6Nzc1OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL3NtZS5jLTc3Ni1cdGlmICh3ZXh0ZXYgXHUwMDI2XHUwMDI2ICFjci1cdTAwM2V2YWxpZF9saW5rcykge1xuLS1cbm5ldC93aXJlbGVzcy9zbWUuYz0xMDc5PXZvaWQgX19jZmc4MDIxMV9yb2FtZWQoc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi0tXG5uZXQvd2lyZWxlc3Mvc21lLmMtMTA4MS17XG5uZXQvd2lyZWxlc3Mvc21lLmM6MTA4MjojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9zbWUuYy0xMDgzLVx0dW5pb24gaXdyZXFfZGF0YSB3cnF1O1xuLS1cbm5ldC93aXJlbGVzcy9zbWUuYy0xMTM0LVxubmV0L3dpcmVsZXNzL3NtZS5jOjExMzU6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3Mvc21lLmMtMTEzNi1cdGlmICghaW5mby1cdTAwM2V2YWxpZF9saW5rcykge1xuLS1cbm5ldC93aXJlbGVzcy9zbWUuYz0xMzQzPXZvaWQgX19jZmc4MDIxMV9kaXNjb25uZWN0ZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmllLFxuLS1cbm5ldC93aXJlbGVzcy9zbWUuYy0xMzQ4LVx0aW50IGk7XG5uZXQvd2lyZWxlc3Mvc21lLmM6MTM0OTojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9zbWUuYy0xMzUwLVx0dW5pb24gaXdyZXFfZGF0YSB3cnF1O1xuLS1cbm5ldC93aXJlbGVzcy9zbWUuYy0xMzk0LVxubmV0L3dpcmVsZXNzL3NtZS5jOjEzOTU6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3Mvc21lLmMtMTM5Ni1cdG1lbXNldChcdTAwMjZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpO1xuLS1cbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYz02Mzc9RVhQT1JUX1NZTUJPTCh3aXJlbGVzc19zZW5kX2V2ZW50KTtcbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYy02MzgtXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmM6NjM5OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL3dleHQtY29yZS5jLTY0MC1zdGF0aWMgdm9pZCB3aXJlbGVzc193YXJuX2NmZzgwMjExX3dleHQodm9pZClcbi0tXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmM9NjQ5PXN0cnVjdCBpd19zdGF0aXN0aWNzICpnZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmMtNjU2LVxubmV0L3dpcmVsZXNzL3dleHQtY29yZS5jOjY1NzojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYy02NTgtXHRpZiAoZGV2LVx1MDAzZWllZWU4MDIxMV9wdHIgXHUwMDI2XHUwMDI2XG4tLVxubmV0L3dpcmVsZXNzL3dleHQtY29yZS5jPTY5Nz1zdGF0aWMgaXdfaGFuZGxlciBnZXRfaGFuZGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY21kKVxuLS1cbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYy03MDItXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmM6NzAzOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL3dleHQtY29yZS5jLTcwNC1cdGlmIChkZXYtXHUwMDNlaWVlZTgwMjExX3B0ciBcdTAwMjZcdTAwMjYgZGV2LVx1MDAzZWllZWU4MDIxMV9wdHItXHUwMDNld2lwaHkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzAxMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBgQ0ZHODAyMTFfV0VYVGAgRGVwZW5kZW5jaWVzKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIHN1cnJvdW5kaW5nIGBDRkc4MDIxMV9XRVhUYCBpbiB0aGUga2VybmVsJiMzOTtzIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24uIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBuYXZpZ2F0ZSBvdmVyIHRvIGBuZXQvd2lyZWxlc3MvS2NvbmZpZ2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHRha2UgYSBoYXJkIGxvb2sgYXQgdGhlIGBLY29uZmlnYCBmaWxlIGFuZCBtZXRpY3Vsb3VzbHkgdHJhY2UgYWxsIGRlcGVuZGVuY2llcyBhbmQgZGVmYXVsdHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBgQ0ZHODAyMTFfV0VYVGAgc3ltYm9sLiBUaGlzIHdpbGwgcXVpY2tseSBnaXZlIG1lIGFuIG92ZXJ2aWV3IG9mIHRoZSBidWlsZCBzZXR0aW5ncyB0aGF0IGFmZmVjdCB0aGlzLCBhbmQgaWRlbnRpZnkgYW55IGtub2NrLW9uIGVmZmVjdHMgdGhhdCBuZWVkIHRvIGJlIGNvbnNpZGVyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE1OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE4MDpcdFx0aGVscFxuIDE4MTpcdFx0ICBZb3Ugc2hvdWxkIGVuYWJsZSB0aGlzIG9wdGlvbiB1bmxlc3MgeW91IGtub3cgZm9yIHN1cmUgeW91IGhhdmUgbm9cbiAxODI6XHRcdCAgbmVlZCBmb3IgaXQsIGZvciBleGFtcGxlIHdoZW4gdXNpbmcgdGhlIHJlZ3VsYXRvcnkgZGF0YWJhc2UgbG9hZGVkIGFzXG4gMTgzOlx0XHQgIGEgZmlybXdhcmUgZmlsZS5cbiAxODQ6XHRcbiAxODU6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAxODY6XHRcbiAxODc6XHRjb25maWcgQ0ZHODAyMTFfV0VYVFxuIDE4ODpcdFx0Ym9vbCBcJiMzNDtjZmc4MDIxMSB3aXJlbGVzcyBleHRlbnNpb25zIGNvbXBhdGliaWxpdHlcJiMzNDtcbiAxODk6XHRcdHNlbGVjdCBXRVhUX0NPUkVcbiAxOTA6XHRcdGhlbHBcbiAxOTE6XHRcdCAgRW5hYmxlIHRoaXMgb3B0aW9uIGlmIHlvdSBuZWVkIG9sZCB1c2Vyc3BhY2UgZm9yIHdpcmVsZXNzXG4gMTkyOlx0XHQgIGV4dGVuc2lvbnMgd2l0aCBjZmc4MDIxMS1iYXNlZCBkcml2ZXJzLlxuIDE5MzpcdFxuIDE5NDpcdGNvbmZpZyBDRkc4MDIxMV9LVU5JVF9URVNUXG4gMTk1Olx0XHR0cmlzdGF0ZSBcJiMzNDtLVW5pdCB0ZXN0cyBmb3IgY2ZnODAyMTFcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuIDE5NjpcdFx0ZGVwZW5kcyBvbiBLVU5JVFxuIDE5NzpcdFx0ZGVwZW5kcyBvbiBDRkc4MDIxMVxuIDE5ODpcdFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbiAxOTk6XHRcdGhlbHBcbiAyMDA6XHRcdCAgRW5hYmxlIHRoaXMgb3B0aW9uIHRvIHRlc3QgY2ZnODAyMTEgZnVuY3Rpb25zIHdpdGgga3VuaXQuXG4gMjAxOlx0XG4gMjAyOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjAzOlx0XG4gMjA0Olx0ZW5kaWYgIyBDRkc4MDIxMVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjIwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gZGVsdmUgaW50byBgbmV0L3dpcmVsZXNzL0tjb25maWdgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gYWltaW5nIHRvIGdldCBhIGhhbmRsZSBvbiBgQ0ZHODAyMTFgLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBzdGFydCwgYW5kIHdoZXJlIEkmIzM5O20gZ29pbmcgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaW1lIHRvIHNlZSB3aGF0JiMzOTtzIHdoYXQgaW4gdGhlcmUuIFRoaXMgaXMgYSBjb21tb24gc3RhcnRpbmcgcG9pbnQgd2hlbiBjb25maWd1cmluZyB0aGUgd2lyZWxlc3Mgc3RhY2ssIGFuZCB0aGUgb3B0aW9ucyBmb3VuZCBoZXJlIG9mdGVuIGRpY3RhdGUgYSBsb3Qgb2YgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgd2lyZWxlc3Mgc3Vic3lzdGVtcyBJJiMzOTttIHdvcmtpbmcgd2l0aC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE1OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgV0lSRUxFU1NfRVhUXG4gICAzOlx0XHRib29sXG4gICA0Olx0XG4gICA1Olx0Y29uZmlnIFdFWFRfQ09SRVxuICAgNjpcdFx0ZGVmX2Jvb2wgeVxuICAgNzpcdFx0ZGVwZW5kcyBvbiBDRkc4MDIxMV9XRVhUIHx8IFdJUkVMRVNTX0VYVFxuICAgODpcdFxuICAgOTpcdGNvbmZpZyBXRVhUX1BST0NcbiAgMTA6XHRcdGRlZl9ib29sIHlcbiAgMTE6XHRcdGRlcGVuZHMgb24gUFJPQ19GU1xuICAxMjpcdFx0ZGVwZW5kcyBvbiBXRVhUX0NPUkVcbiAgMTM6XHRcbiAgMTQ6XHRjb25maWcgV0VYVF9QUklWXG4gIDE1Olx0XHRib29sXG4gIDE2Olx0XG4gIDE3Olx0Y29uZmlnIENGRzgwMjExXG4gIDE4Olx0XHR0cmlzdGF0ZSBcJiMzNDtjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXCYjMzQ7XG4gIDE5Olx0XHRkZXBlbmRzIG9uIFJGS0lMTCB8fCAhUkZLSUxMXG4gIDIwOlx0XHRzZWxlY3QgRldfTE9BREVSXG4gIDIxOlx0XHRzZWxlY3QgQ1JDMzJcbiAgMjI6XHRcdCMgbWF5IG5lZWQgdG8gdXBkYXRlIHRoaXMgd2hlbiBjZXJ0aWZpY2F0ZXMgYXJlIGNoYW5nZWQgYW5kIGFyZVxuICAyMzpcdFx0IyB1c2luZyBhIGRpZmZlcmVudCBhbGdvcml0aG0sIHRob3VnaCByaWdodCBub3cgdGhleSBzaG91bGRuJiMzOTt0XG4gIDI0Olx0XHQjICh0aGlzIGlzIGhlcmUgcmF0aGVyIHRoYW4gYmVsb3cgdG8gYWxsb3cgaXQgdG8gYmUgYSBtb2R1bGUpXG4gIDI1Olx0XHRzZWxlY3QgQ1JZUFRPX1NIQTI1NiBpZiBDRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcbiAgMjY6XHRcdGhlbHBcbiAgMjc6XHRcdCAgY2ZnODAyMTEgaXMgdGhlIExpbnV4IHdpcmVsZXNzIExBTiAoODAyLjExKSBjb25maWd1cmF0aW9uIEFQSS5cbiAgMjg6XHRcdCAgRW5hYmxlIHRoaXMgaWYgeW91IGhhdmUgYSB3aXJlbGVzcyBkZXZpY2UuXG4gIDI5Olx0XG4gIDMwOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIHJlZmVyIHRvIGRvY3VtZW50YXRpb24gb24gdGhlIHdpcmVsZXNzIHdpa2k6XG4gIDMxOlx0XG4gIDMyOlx0XHQgIGh0dHBzOi8vd2lyZWxlc3Mud2lraS5rZXJuZWwub3JnL2VuL2RldmVsb3BlcnMvRG9jdW1lbnRhdGlvbi9jZmc4MDIxMVxuICAzMzpcdFxuICAzNDpcdFx0ICBXaGVuIGJ1aWx0IGFzIGEgbW9kdWxlIGl0IHdpbGwgYmUgY2FsbGVkIGNmZzgwMjExLlxuICAzNTpcdFxuICAzNjpcdGlmIENGRzgwMjExXG4gIDM3Olx0XG4gIDM4Olx0Y29uZmlnIE5MODAyMTFfVEVTVE1PREVcbiAgMzk6XHRcdGJvb2wgXCYjMzQ7bmw4MDIxMSB0ZXN0bW9kZSBjb21tYW5kXCYjMzQ7XG4gIDQwOlx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE1OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNDgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZWAgRnVuY3Rpb24gQ2FsbCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBjZmc4MDIxMV93ZXh0X3Npd2dlbmllYCBpcyBhY3R1YWxseSB1c2VkLiBJIGtub3cgaXRzIHB1cnBvc2UsIGJ1dCBrbm93aW5nIHRoZSBjb250ZXh0IG9mIGl0cyBjYWxscyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgb3ZlcmFsbCByb2xlIGFuZCBwb3RlbnRpYWwgaW1wYWN0LiBTbywgZmlyc3QgdGhpbmdzIGZpcnN0LCBJJiMzOTttIGdvaW5nIHRvIHJ1biBhIHF1aWNrIHNlYXJjaC4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGluIHRoZSBrZXJuZWwgY29kZSB0aGF0IHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiBpcyBnZXR0aW5nIGNhbGxlZC4gTm8gcG9pbnQgaW4gdHJ5aW5nIHRvIHRyYWNlIHRoZSBsb2dpYyBtYW51YWxseSwgbGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBiaXQgb2YgY29kZSBhcmNoYWVvbG9neS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBncmVwIGNvbW1hbmQgd2lsbCB0dXJuIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjZmc4MDIxMV93ZXh0X3Npd2dlbmllJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jPTE0ODQ9c3RhdGljIGNvbnN0IGl3X2hhbmRsZXIgY2ZnODAyMTFfaGFuZGxlcnNbXSA9IHtcbi0tXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYy0xNTExLVx0SVdfSEFORExFUihTSU9DR0lXUE9XRVIsXHRjZmc4MDIxMV93ZXh0X2dpd3Bvd2VyKSxcbm5ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jOjE1MTI6XHRJV19IQU5ETEVSKFNJT0NTSVdHRU5JRSxcdGNmZzgwMjExX3dleHRfc2l3Z2VuaWUpLFxubmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmMtMTUxMy1cdElXX0hBTkRMRVIoU0lPQ1NJV0FVVEgsXHRcdGNmZzgwMjExX3dleHRfc2l3YXV0aCksXG4tLVxubmV0L3dpcmVsZXNzL3dleHQtY29tcGF0Lmg9NDY9aW50IGNmZzgwMjExX3dleHRfc2l3bWxtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5oLTQ4LVx0XHRcdCAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpO1xubmV0L3dpcmVsZXNzL3dleHQtY29tcGF0Lmg6NDk6aW50IGNmZzgwMjExX3dleHRfc2l3Z2VuaWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5oLTUwLVx0XHRcdCAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sXG4tLVxubmV0L3dpcmVsZXNzL3dleHQtc21lLmM9MjczPWludCBjZmc4MDIxMV9tZ2Rfd2V4dF9naXdhcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC93aXJlbGVzcy93ZXh0LXNtZS5jLTI5Ny1cbm5ldC93aXJlbGVzcy93ZXh0LXNtZS5jOjI5ODppbnQgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L3dpcmVsZXNzL3dleHQtc21lLmMtMjk5LVx0XHRcdCAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE1OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwMzgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZWAgSGFuZGxlciBmb3IgYFNJT0NTSVdHRU5JRWAqKgoKT2theSwgc28gYGNmZzgwMjExX3dleHRfc2l3Z2VuaWVgIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIGhhbmRsaW5nIHRoZSBgU0lPQ1NJV0dFTklFYCBpb2N0bC4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuIEl0JiMzOTtzIHRoZSBzdGFuZGFyZCB3aXJlbGVzcyBleHRlbnNpb25zIGlvY3RsLCB0aGUgb25lIHlvdSYjMzk7ZCBzZW5kIHRocm91Z2ggYSBzb2NrZXQgZmlsZSBkZXNjcmlwdG9yIHdpdGggYGlvY3RsKHNvY2tmZCwgU0lPQ1NJV0dFTklFLCAuLi4pYC4gTmF0dXJhbGx5LCBhbnkgd2lyZWxlc3MgZGV2aWNlIGxldmVyYWdpbmcgYGNmZzgwMjExYCwgbGlrZSB0aGUgYG1hYzgwMjExX2h3c2ltYCBtb2R1bGUgb3IgYSB2aXJ0dWFsaXplZCB3aXJlbGVzcyBkZXZpY2UgaW4gc29tZXRoaW5nIGxpa2Ugc3l6a2FsbGVyIG9yIFFFTVUsIHdvdWxkIHVzZSB0aGlzIGlmIGBDT05GSUdfQ0ZHODAyMTFfV0VYVGAgaXMgZW5hYmxlZC4KCkxldCYjMzk7cyBkaXZlIGludG8gdGhlIHBhdGNoIGFuZCBzZWUgd2hhdCBpdCYjMzk7cyBhY3R1YWxseSBkb2luZyB3aXRoaW4gdGhhdCBgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZSgpYCBmdW5jdGlvbi4gQWgsIGhlcmUgaXQgaXM6IHRoZSBhZGRlZCBjb2RlIGJsb2NrLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHByaW1hcmlseSBmb2N1c2VkIG9uIHZhbGlkYXRpbmcgdGhlIElFIChJbmZvcm1hdGlvbiBFbGVtZW50KSBidWZmZXIgdGhhdCYjMzk7cyBwYXNzZWQgaW4gZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgU0lPQ1NJV0dFTklFYCBpb2N0bC4gSXQmIzM5O3MgdXNpbmcgYGZvcl9lYWNoX2VsZW1lbnQoKWAgYW5kIGBmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZCgpYCB0byBpdGVyYXRlIHRocm91Z2ggdGhlIElFIGJ1ZmZlciwgZW5zdXJpbmcgdGhhdCBpdCYjMzk7cyBhIHdlbGwtZm9ybWVkIGVsZW1lbnQgbGlzdC4gSWYgdGhlIHN0cnVjdHVyZSBpcyBpbnZhbGlkIGF0IGFueSBwb2ludCBkdXJpbmcgaXRlcmF0aW9uLCBpdCByZXR1cm5zIGAtRUlOVkFMYC4gVGhpcyBpcyBhIHByZXR0eSBzdGFuZGFyZCBhcHByb2FjaCBmb3IgcGFyc2luZyBJRSBkYXRhLgoKTm93LCBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgZm9yX2VhY2hfZWxlbWVudGAgaW4gdGhlIGtlcm5lbCBzb3VyY2UgdG8gZ2V0IGEgY29tcGxldGUgZ3Jhc3Agb24gaG93IHRoZXNlIGVsZW1lbnRzIGFyZSBpdGVyYXRlZC4gVGhhdCYjMzk7cyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgdmFsaWRhdGlvbiBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTU6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb3JfZWFjaF9lbGVtZW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODIzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGF0IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIERlZXAgaW50byB0aGUgQ29kZWJhc2U6IFRoZSBgZm9yX2VhY2hfZWxlbWVudGAgUXVlc3QqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O3ZlIGdvdCBhIGZlZWxpbmcgdGhlcmUmIzM5O3Mgc29tZXRoaW5nIGludGVyZXN0aW5nIGx1cmtpbmcgYXJvdW5kIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZm9yX2VhY2hfZWxlbWVudGAuIEl0JiMzOTtzIGEgZmFpcmx5IGNvbW1vbiBjb25zdHJ1Y3QsIGJ1dCBJIHN1c3BlY3QgaXRzIHVzZSBjYXNlcyBtaWdodCBiZSBtb3JlIGRpdmVyc2UgdGhhbiBJIGluaXRpYWxseSB0aG91Z2h0LCBvciBtYXliZSBJJiMzOTttIGxvb2tpbmcgZm9yIGEgc3BlY2lmaWMgdXNhZ2UgcGF0dGVybi4gSSBuZWVkIHRvIGdldCBhIHJlYWxseSBnb29kIG92ZXJ2aWV3IG9mIHdoZXJlIHRoaXMgaXMgdXNlZCB3aXRoaW4gdGhlIHByb2plY3QuIEEgd2lkZSBzZWFyY2ggd2lsbCBnZXQgbWUgdXAtdG8tc3BlZWQuCkxldCYjMzk7cyBjYXN0IGEgd2lkZSBuZXQgYWNyb3NzIHRoZSBlbnRpcmUgY29kZWJhc2UgYW5kIHNlZSB3aGF0IHBvcHMgdXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0cywgdGhlIGRhdGEgdHlwZXMgaXQmIzM5O3Mgb3BlcmF0aW5nIG9uLCBhbmQgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIEZpbmRpbmcgZXZlcnkgaW5zdGFuY2Ugb2YgYGZvcl9lYWNoX2VsZW1lbnRgIGlzIHRoZSBmaXJzdCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIGZvcl9lYWNoX2VsZW1lbnQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9pZWVlODAyMTEuaD0yNzE1PXN0cnVjdCBlbGVtZW50IHtcbi0tXG5pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oLTI3MjEtLyogZWxlbWVudCBpdGVyYXRpb24gaGVscGVycyAqL1xuaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaDoyNzIyOiNkZWZpbmUgZm9yX2VhY2hfZWxlbWVudChfZWxlbSwgX2RhdGEsIF9kYXRhbGVuKVx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oLTI3MjMtXHRmb3IgKF9lbGVtID0gKGNvbnN0IHN0cnVjdCBlbGVtZW50ICopKF9kYXRhKTtcdFx0XHRcXFxuLS1cbmluY2x1ZGUvbGludXgvaWVlZTgwMjExLmgtMjcyOS1cbmluY2x1ZGUvbGludXgvaWVlZTgwMjExLmg6MjczMDojZGVmaW5lIGZvcl9lYWNoX2VsZW1lbnRfaWQoZWxlbWVudCwgX2lkLCBkYXRhLCBkYXRhbGVuKVx0XHRcXFxuaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaC0yNzMxLVx0Zm9yX2VhY2hfZWxlbWVudChlbGVtZW50LCBkYXRhLCBkYXRhbGVuKVx0XHRcdFxcXG4tLVxuaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaC0yNzMzLVxuaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaDoyNzM0OiNkZWZpbmUgZm9yX2VhY2hfZWxlbWVudF9leHRpZChlbGVtZW50LCBleHRpZCwgX2RhdGEsIF9kYXRhbGVuKVx0XHRcXFxuaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaC0yNzM1LVx0Zm9yX2VhY2hfZWxlbWVudChlbGVtZW50LCBfZGF0YSwgX2RhdGFsZW4pXHRcdFx0XFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTU6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzODIKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIElFRUUgODAyLjExIEhlYWRlciBEZWZpbml0aW9ucyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgdGhlIExpbnV4IHdpcmVsZXNzIHN0YWNrLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGRhdGEgc3RydWN0dXJlcyBhc3NvY2lhdGVkIHdpdGggODAyLjExIGZyYW1lcywgc3BlY2lmaWNhbGx5IGFyb3VuZCB3aGVyZSB0aGV5IGhhbmRsZSB0aGUgdmFyaW91cyBlbGVtZW50cy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGluY2x1ZGUvbGludXgvaWVlZTgwMjExLmhgLiAgSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB3aGF0JiMzOTtzIGRlZmluZWQgYXJvdW5kIGxpbmUgMjcyMCwgdGhhdCBhcmVhIHNob3VsZCBob2xkIHNvbWUgcGVydGluZW50IGRlZmluaXRpb25zLCBsaWtlbHkgcmVsYXRlZCB0byBbaW5zZXJ0IHlvdXIgc3BlY2lmaWMgaW50ZXJlc3QgYmFzZWQgb24gZmllbGRdLiBNaWdodCBiZSB1c2VmdWwgdG8gdW5kZXJzdGFuZCBob3cgc3BlY2lmaWMgZnJhbWUgdHlwZXMgb3IgZmllbGQgY29uZmlndXJhdGlvbnMgYXJlIGJlaW5nIHN0b3JlZCBvciBwcm9jZXNzZWQgYXQgdGhhdCBzdGFnZSBvZiB0aGUgc3RhY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE1OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9pZWVlODAyMTEuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjcxNTpcdHN0cnVjdCBlbGVtZW50IHtcbjI3MTY6XHRcdHU4IGlkO1xuMjcxNzpcdFx0dTggZGF0YWxlbjtcbjI3MTg6XHRcdHU4IGRhdGFbXTtcbjI3MTk6XHR9IF9fcGFja2VkO1xuMjcyMDpcdFxuMjcyMTpcdC8qIGVsZW1lbnQgaXRlcmF0aW9uIGhlbHBlcnMgKi9cbjI3MjI6XHQjZGVmaW5lIGZvcl9lYWNoX2VsZW1lbnQoX2VsZW0sIF9kYXRhLCBfZGF0YWxlbilcdFx0XHRcXFxuMjcyMzpcdFx0Zm9yIChfZWxlbSA9IChjb25zdCBzdHJ1Y3QgZWxlbWVudCAqKShfZGF0YSk7XHRcdFx0XFxcbjI3MjQ6XHRcdCAgICAgKGNvbnN0IHU4ICopKF9kYXRhKSAmIzQzOyAoX2RhdGFsZW4pIC0gKGNvbnN0IHU4ICopX2VsZW0gXHUwMDNlPVx0XFxcbjI3MjU6XHRcdFx0KGludClzaXplb2YoKl9lbGVtKSBcdTAwMjZcdTAwMjZcdFx0XHRcdFx0XFxcbjI3MjY6XHRcdCAgICAgKGNvbnN0IHU4ICopKF9kYXRhKSAmIzQzOyAoX2RhdGFsZW4pIC0gKGNvbnN0IHU4ICopX2VsZW0gXHUwMDNlPVx0XFxcbjI3Mjc6XHRcdFx0KGludClzaXplb2YoKl9lbGVtKSAmIzQzOyBfZWxlbS1cdTAwM2VkYXRhbGVuO1x0XHRcdFxcXG4yNzI4Olx0XHQgICAgIF9lbGVtID0gKGNvbnN0IHN0cnVjdCBlbGVtZW50ICopKF9lbGVtLVx1MDAzZWRhdGEgJiM0MzsgX2VsZW0tXHUwMDNlZGF0YWxlbikpXG4yNzI5Olx0XG4yNzMwOlx0I2RlZmluZSBmb3JfZWFjaF9lbGVtZW50X2lkKGVsZW1lbnQsIF9pZCwgZGF0YSwgZGF0YWxlbilcdFx0XFxcbjI3MzE6XHRcdGZvcl9lYWNoX2VsZW1lbnQoZWxlbWVudCwgZGF0YSwgZGF0YWxlbilcdFx0XHRcXFxuMjczMjpcdFx0XHRpZiAoZWxlbWVudC1cdTAwM2VpZCA9PSAoX2lkKSlcbjI3MzM6XHRcbjI3MzQ6XHQjZGVmaW5lIGZvcl9lYWNoX2VsZW1lbnRfZXh0aWQoZWxlbWVudCwgZXh0aWQsIF9kYXRhLCBfZGF0YWxlbilcdFx0XFxcbjI3MzU6XHRcdGZvcl9lYWNoX2VsZW1lbnQoZWxlbWVudCwgX2RhdGEsIF9kYXRhbGVuKVx0XHRcdFxcXG4yNzM2Olx0XHRcdGlmIChlbGVtZW50LVx1MDAzZWlkID09IFdMQU5fRUlEX0VYVEVOU0lPTiBcdTAwMjZcdTAwMjZcdFx0XFxcbjI3Mzc6XHRcdFx0ICAgIGVsZW1lbnQtXHUwMDNlZGF0YWxlbiBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcdFx0XHRcdFxcXG4yNzM4Olx0XHRcdCAgICBlbGVtZW50LVx1MDAzZWRhdGFbMF0gPT0gKGV4dGlkKSlcbjI3Mzk6XHRcbjI3NDA6XHQjZGVmaW5lIGZvcl9lYWNoX3N1YmVsZW1lbnQoc3ViLCBlbGVtZW50KVx0XHRcdFx0XFxcbjI3NDE6XHRcdGZvcl9lYWNoX2VsZW1lbnQoc3ViLCAoZWxlbWVudCktXHUwMDNlZGF0YSwgKGVsZW1lbnQpLVx1MDAzZWRhdGFsZW4pXG4yNzQyOlx0XG4yNzQzOlx0I2RlZmluZSBmb3JfZWFjaF9zdWJlbGVtZW50X2lkKHN1YiwgaWQsIGVsZW1lbnQpXHRcdFx0XFxcbjI3NDQ6XHRcdGZvcl9lYWNoX2VsZW1lbnRfaWQoc3ViLCBpZCwgKGVsZW1lbnQpLVx1MDAzZWRhdGEsIChlbGVtZW50KS1cdTAwM2VkYXRhbGVuKVxuMjc0NTpcdFxuMjc0NjpcdCNkZWZpbmUgZm9yX2VhY2hfc3ViZWxlbWVudF9leHRpZChzdWIsIGV4dGlkLCBlbGVtZW50KVx0XHRcdFxcXG4yNzQ3Olx0XHRmb3JfZWFjaF9lbGVtZW50X2V4dGlkKHN1YiwgZXh0aWQsIChlbGVtZW50KS1cdTAwM2VkYXRhLCAoZWxlbWVudCktXHUwMDNlZGF0YWxlbilcbjI3NDg6XHRcbjI3NDk6XHQvKipcbjI3NTA6XHQgKiBmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZCAtIGRldGVybWluZSBpZiBlbGVtZW50IHBhcnNpbmcgY29uc3VtZWQgYWxsIGRhdGFcbjI3NTE6XHQgKiBAZWxlbWVudDogZWxlbWVudCBwb2ludGVyIGFmdGVyIGZvcl9lYWNoX2VsZW1lbnQoKSBvciBmcmllbmRzXG4yNzUyOlx0ICogQGRhdGE6IHNhbWUgZGF0YSBwb2ludGVyIGFzIHBhc3NlZCB0byBmb3JfZWFjaF9lbGVtZW50KCkgb3IgZnJpZW5kc1xuMjc1MzpcdCAqIEBkYXRhbGVuOiBzYW1lIGRhdGEgbGVuZ3RoIGFzIHBhc3NlZCB0byBmb3JfZWFjaF9lbGVtZW50KCkgb3IgZnJpZW5kc1xuMjc1NDpcdCAqIFJldHVybjogJXRydWUgaWYgYWxsIGVsZW1lbnRzIHdlcmUgaXRlcmF0ZWQsICVmYWxzZSBvdGhlcndpc2U7IHNlZSBub3Rlc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQwMAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDI1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYGNmZzgwMjExX3dleHRfc2l3Z2VuaWVgIGZvciBQb3RlbnRpYWwgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYGNmZzgwMjExX3dleHRfc2l3Z2VuaWVgIGFuZCBzZWUgaWYgaXQmIzM5O3MgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy4gRmlyc3QsIHRoaXMgbG9va3MgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBpdCBhZGRzIHNvbWUgdmFsaWRhdGlvbiB0byB0aGUgZnVuY3Rpb24gd2hlbiBwYXJzaW5nIElFcyBhbmQgdGhlbiBpdCB3aWxsIHJlamVjdCBtYWxmb3JtZWQgSUVzIGJlZm9yZSBzdG9yaW5nIHRoZW0uIFNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0LiBBcyBmb3IgcmVhY2hhYmlsaXR5LCBpdCYjMzk7cyB0cmlnZ2VyZWQgdmlhIHRoZSBgU0lPQ1NJV0dFTklFYCB1c2Vyc3BhY2UgaW9jdGwsIHdoaWNoIG1lYW5zIGl0IHNob3VsZCBiZSBwcmV0dHkgYWNjZXNzaWJsZSBvbiBhbnkgd2lyZWxlc3MgaW50ZXJmYWNlIG1hbmFnZWQgYnkgY2ZnODAyMTEgd2hlbiBXRVhUIGlzIGVuYWJsZWQuIFdlJiMzOTt2ZSBnb3QgZ29vZCBjb3ZlcmFnZSBoZXJlOiBJdCBzaG91bGQgd29yayBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGxpa2UgUUVNVSB3aXRoIGBtYWM4MDIxMV9od3NpbWAgb3IgYHZpcnRpby13aWZpYCwgYW5kIHN0YW5kYXJkIHNvZnRtYWMuIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBwbHVzLgoKSXMgaXQgd29ydGggdGhlIGVmZm9ydCBvZiBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBUaGlzIGlzIGEgY29yZSB3aXJlbGVzcyBleHRlbnNpb24gU01FIGhhbmRsZXIsIGFuZCBpdCYjMzk7cyBkaXJlY3RseSBleHBvc2VkIHRocm91Z2ggdXNlcnNwYWNlIGlvY3Rscy4gVGhhdCYjMzk7cyBhIHByaW1lIHRhcmdldCBmb3IgZmluZGluZyBzb21lIGludGVyZXN0aW5nIGVkZ2UgY2FzZXMuIFRoZSBmb2N1cyBpcyBkZWZpbml0ZWx5IG9uIGBjZmc4MDIxMV93ZXh0X3Npd2dlbmllYC4KCk5vdywgbGV0JiMzOTtzIGNoZWNrIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgYENGRzgwMjExYCBhbmQgYENGRzgwMjExX1dFWFRgIGFyZSBlbmFibGVkLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIGluIGBuZXQvS2NvbmZpZ2AgYW5kIGBuZXQvd2lyZWxlc3MvS2NvbmZpZ2AgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb3VyY2UuKm5ldC93aXJlbGVzcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz00MzE9aWYgV0lSRUxFU1Ncbm5ldC9LY29uZmlnLTQzMi1cbm5ldC9LY29uZmlnOjQzMzpzb3VyY2UgXCYjMzQ7bmV0L3dpcmVsZXNzL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnLTQzNC1zb3VyY2UgXCYjMzQ7bmV0L21hYzgwMjExL0tjb25maWdcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZz0xMTE9Y29uZmlnIENGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUlxuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTExNS1cdCAgSWYgc2VsZWN0ZWQsIHBvaW50IHRvIGEgZGlyZWN0b3J5IHdpdGggREVSLWVuY29kZWQgWC41MDlcbm5ldC93aXJlbGVzcy9LY29uZmlnOjExNjpcdCAgY2VydGlmaWNhdGVzIGxpa2UgaW4gdGhlIGtlcm5lbCBzb3VyY2VzIChuZXQvd2lyZWxlc3MvY2VydHMvKVxubmV0L3dpcmVsZXNzL0tjb25maWctMTE3LVx0ICB0aGF0IHNoYWxsIGJlIGFjY2VwdGVkIGZvciBhIHNpZ25lZCByZWd1bGF0b3J5IGRhdGFiYXNlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIxOAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBMYWJ5cmludGgqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzLi4uIGxldCYjMzk7cyBzZWUsIHdoYXQgd2FzIGl0IGFnYWluPyBSaWdodCwgSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBjb25maWd1cmF0aW9uIHN5c3RlbS4gV2hlcmUgdG8gc3RhcnQ/IEdpdmVuIHRoZSBjb250ZXh0IG9mIHdoYXQgSSYjMzk7bSB3b3JraW5nIG9uLCBgbmV0L0tjb25maWdgIGZlZWxzIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBwbGFjZS4gSXQmIzM5O3MgdXN1YWxseSB0aGUgaGVhcnQgb2YgbmV0d29ya2luZy1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBOb3csIEkgdmFndWVseSByZW1lbWJlciBzb21lIGNyaXRpY2FsIHN0dWZmIGJlaW5nIGluIHRoYXQgZmlsZSwgYW5kIGFyb3VuZCBsaW5lIDQzMC4gSSYjMzk7bGwgcGlucG9pbnQgd2hhdCBJIG5lZWQuIExldCBtZSBqdW1wIHRoZXJlIGFuZCBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBwYXJ0aWN1bGFyIHNlY3Rpb24gc2hvdWxkIGxpa2VseSBiZSB0aGUgZW50cnkgcG9pbnQgdG8gd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MjU6XHRcbiA0MjY6XHRtZW51Y29uZmlnIFdJUkVMRVNTXG4gNDI3Olx0XHRib29sIFwmIzM0O1dpcmVsZXNzXCYjMzQ7XG4gNDI4Olx0XHRkZXBlbmRzIG9uICFTMzkwXG4gNDI5Olx0XHRkZWZhdWx0IHlcbiA0MzA6XHRcbiA0MzE6XHRpZiBXSVJFTEVTU1xuIDQzMjpcdFxuIDQzMzpcdHNvdXJjZSBcJiMzNDtuZXQvd2lyZWxlc3MvS2NvbmZpZ1wmIzM0O1xuIDQzNDpcdHNvdXJjZSBcJiMzNDtuZXQvbWFjODAyMTEvS2NvbmZpZ1wmIzM0O1xuIDQzNTpcdFxuIDQzNjpcdGVuZGlmICMgV0lSRUxFU1NcbiA0Mzc6XHRcbiA0Mzg6XHRzb3VyY2UgXCYjMzQ7bmV0L3Jma2lsbC9LY29uZmlnXCYjMzQ7XG4gNDM5Olx0c291cmNlIFwmIzM0O25ldC85cC9LY29uZmlnXCYjMzQ7XG4gNDQwOlx0c291cmNlIFwmIzM0O25ldC9jZXBoL0tjb25maWdcJiMzNDtcbiA0NDE6XHRzb3VyY2UgXCYjMzQ7bmV0L25mYy9LY29uZmlnXCYjMzQ7XG4gNDQyOlx0c291cmNlIFwmIzM0O25ldC9wc2FtcGxlL0tjb25maWdcJiMzNDtcbiA0NDM6XHRzb3VyY2UgXCYjMzQ7bmV0L2lmZS9LY29uZmlnXCYjMzQ7XG4gNDQ0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE1OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjg1CgkJCQkJCQlvdXRwdXQ6IDE2OAoJCQkJCQkJdGhvdWdodHM6IDU1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIEFzc2Vzc21lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBlbmFibGUgYSBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5LCBhbmQgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBGaXJzdCwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZWxhdGlvbnNoaXBzIHdpdGhpbiBgbmV0L3dpcmVsZXNzL0tjb25maWdgLiBgV0lSRUxFU1NgIGlzIHRoZSBvdmVyYXJjaGluZyBtZW51Y29uZmlnIGhlcmUsIGRlcGVuZGluZyBvbiBhIGZldyBvdGhlciBjb25zaWRlcmF0aW9ucy4gV2l0aGluIGBXSVJFTEVTU2AsIGBDRkc4MDIxMWAgaXMgdGhlIEFQSSwgYW5kIGl0IGRlcGVuZHMgb24gdGhpbmdzIGxpa2UgUkZLSUxMLiBDcnVjaWFsbHksIGBDRkc4MDIxMWAgbGVhZHMgZGlyZWN0bHkgdG8gYENGRzgwMjExX1dFWFRgLCB3aGljaCBJIHdhbnQsIGFuZCBpcyBhIGJvb2xlYW4gb3B0aW9uLiBJIGFsc28gY29uc2lkZXJlZCBgTUFDODAyMTFfSFdTSU1gIGJ1dCBpdCBkb2VzbiYjMzk7dCBzZWVtIHRvIGhhdmUgZGlyZWN0IGRlcGVuZGVuY2llcyBmb3IgdGhpcy4KCk5leHQsIEkgbmVlZCB0byBlbnN1cmUgdGhlIHN1cHBvcnRpbmcgaW5mcmFzdHJ1Y3R1cmUgaXMgaW4gcGxhY2UuIGBORVRgIGlzIHVzdWFsbHkgZW5hYmxlZCBieSBkZWZhdWx0LCBzbyBJJiMzOTttIG5vdCBvdmVybHkgY29uY2VybmVkIHRoZXJlLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgTkVUPXlgLiBNeSBwcmltYXJ5IGZvY3VzIGhlcmUgaXMgY29uZmlybWluZyB0aGF0IGJvdGggYENGRzgwMjExYCBhbmQgYENGRzgwMjExX1dFWFRgIGFyZSBlbmFibGVkLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgdGFyZ2V0IHN5bWJvbCBgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZWAgaXMgYWNjZXNzaWJsZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGl0JiMzOTtzIGFjY2Vzc2libGUuIExvb2tpbmcgYXQgdGhlIGNvZGUgaW4gYG5ldC93aXJlbGVzcy93ZXh0LXNtZS5jYCwgaXQmIzM5O3MgZGVmaW5lZCBhcyBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gYGNmZzgwMjExX3dleHRfc2l3Z2VuaWVgLiBUaGlzIGlzIGV4YWN0bHkgd2hhdCBJIHdhbnQuIEl0JiMzOTtzIGFsc28gZXhwb3J0ZWQsIHNvIGl0JiMzOTtzIHZpc2libGUgaW4gYG5ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5oYC4gVGhlIGZ1bmN0aW9uIGlzIHVzZWQgaW4gYG5ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jYCB3aXRoaW4gYGNmZzgwMjExX2hhbmRsZXJzYC4KClNvLCB0byBzdW1tYXJpemUgYW5kIGNvbmZpcm0gZXZlcnl0aGluZywgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlIGZvbGxvd2luZzoKCiogICBJIGNvbnNpZGVyIHRoaXMgaW1wb3J0YW50IGZvciBmdXp6aW5nIChgV29ydGhGdXp6aW5nOiB0cnVlYCkuCiogICBUaGUgZnVuY3Rpb24gdGhhdCBJIGFtIGZvY3VzaW5nIG9uIGlzIGluZGVlZCBgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZWAgKGBGb2N1c1N5bWJvbHM6IFsmIzM0O2NmZzgwMjExX3dleHRfc2l3Z2VuaWUmIzM0O11gKS4KKiAgIFRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9uIHNldHRpbmdzIGFyZSBgQ0ZHODAyMTFgIGFuZCBgQ0ZHODAyMTFfV0VYVGAgKGBFbmFibGVDb25maWdzOiBbJiMzNDtDRkc4MDIxMSYjMzQ7LCAmIzM0O0NGRzgwMjExX1dFWFQmIzM0O11gKS4KKiAgIFRoaXMgaXMgYWxsIGFib3V0IHZhbGlkYXRpbmcgd2lyZWxlc3MgaW5mb3JtYXRpb24gZWxlbWVudHMsIHNwZWNpZmljYWxseSB1c2luZyBgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZWAgdG8gcmVqZWN0IG1hbGZvcm1lZCBJRXMgY29taW5nIGZyb20gdXNlcnNwYWNlIGlvY3RsIGBTSU9DU0lXR0VOSUVgLCB0aHJvdWdoIHRoZSB1c2Ugb2YgYGZvcl9lYWNoX2VsZW1lbnRgL2Bmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZGAuCgpBbHJpZ2h0LCBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTU6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O0NGRzgwMjExX1dFWFQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjZmc4MDIxMV93ZXh0X3Npd2dlbmllJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgaW5wdXQgdmFsaWRhdGlvbiBmb3Igd2lyZWxlc3MgaW5mb3JtYXRpb24gZWxlbWVudHMgKElFcykgcGFzc2VkIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgU0lPQ1NJV0dFTklFIHdpcmVsZXNzIGV4dGVuc2lvbiBpb2N0bC4gSXQgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgZWxlbWVudCBidWZmZXIgdXNpbmcgZm9yX2VhY2hfZWxlbWVudCgpIGFuZCB2YWxpZGF0ZXMgY29tcGxldGlvbiB3aXRoIGZvcl9lYWNoX2VsZW1lbnRfY29tcGxldGVkKCkgYmVmb3JlIGNvcHlpbmcgdGhlIGJ1ZmZlciwgcmVqZWN0aW5nIG1hbGZvcm1lZCBlbGVtZW50cyB3aXRoIC1FSU5WQUwuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmsgd2lyZWxlc3MgY29yZSBjb2RlIHRoYXQgY2FuIGJlIHRlc3RlZCBpbiB2aXJ0dWFsIGVudmlyb25tZW50cyAoZS5nLiB1c2luZyBtYWM4MDIxMV9od3NpbSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O0NGRzgwMjExX1dFWFQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjZmc4MDIxMV93ZXh0X3Npd2dlbmllJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgaW5wdXQgdmFsaWRhdGlvbiBmb3Igd2lyZWxlc3MgaW5mb3JtYXRpb24gZWxlbWVudHMgKElFcykgcGFzc2VkIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgU0lPQ1NJV0dFTklFIHdpcmVsZXNzIGV4dGVuc2lvbiBpb2N0bC4gSXQgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgZWxlbWVudCBidWZmZXIgdXNpbmcgZm9yX2VhY2hfZWxlbWVudCgpIGFuZCB2YWxpZGF0ZXMgY29tcGxldGlvbiB3aXRoIGZvcl9lYWNoX2VsZW1lbnRfY29tcGxldGVkKCkgYmVmb3JlIGNvcHlpbmcgdGhlIGJ1ZmZlciwgcmVqZWN0aW5nIG1hbGZvcm1lZCBlbGVtZW50cyB3aXRoIC1FSU5WQUwuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmsgd2lyZWxlc3MgY29yZSBjb2RlIHRoYXQgY2FuIGJlIHRlc3RlZCBpbiB2aXJ0dWFsIGVudmlyb25tZW50cyAoZS5nLiB1c2luZyBtYWM4MDIxMV9od3NpbSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE1OjU3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjE0bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE1OjU3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjE0bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgaW5wdXQgdmFsaWRhdGlvbiB0byBjZmc4MDIxMV93ZXh0X3Npd2dlbmllKCkgYnkgaXRlcmF0aW5nIG92ZXIgYW5kIHZlcmlmeWluZyB0aGUgc3RydWN0dXJlIG9mIHVzZXItcHJvdmlkZWQgSUVFRSA4MDIuMTEgSW5mb3JtYXRpb24gRWxlbWVudHMgKElFcykgdXNpbmcgZm9yX2VhY2hfZWxlbWVudCgpIGFuZCBmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZCgpLiBJZiB0aGUgZWxlbWVudHMgYXJlIG1hbGZvcm1lZCwgaXQgcmV0dXJucyAtRUlOVkFMIGJlZm9yZSBhbGxvY2F0aW5nIGFuZCBzYXZpbmcgdGhlIElFIGJ1ZmZlci5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MsIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlIGxvb3AgaXRlcmF0b3IgdmFyaWFibGUgYGVsZW1gIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIGJ5IHRoZSBgZm9yX2VhY2hfZWxlbWVudGAgbWFjcm8sIGFuZCB0aGUgaW5wdXQgYnVmZmVyIGNvbnRhaW5zIGRhdGEgY29waWVkIGZyb20gdXNlciBzcGFjZS4gUG90ZW50aWFsIGJ1Z3MgYWRkcmVzc2VkIG9yIHRvdWNoZWQgYnkgdGhpcyBsb2dpYyAoc3VjaCBhcyBtYWxmb3JtZWQgVExWIHBhcnNpbmcgbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIHJlYWRzKSBmYWxsIHVuZGVyIEtBU0FOJiMzOTtzIHB1cnZpZXcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzI3MjQ5NTZjNDFhNWYxMmE4ZjYwOTcxMmZlZmUyMzMxNjk3NjdkZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDE1OjIxOjU5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3dleHQtc21lLmMgYi9uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuYwppbmRleCA1NzNiNmIxNWE0NDZlLi5iNTkxNGYzNjU4ZGI0IDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuYwpAQCAtMzE5LDYgJiM0MzszMTksMTUgQEAgaW50IGNmZzgwMjExX3dleHRfc2l3Z2VuaWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJcmV0dXJuIDA7CiAKIAlpZiAoaWVfbGVuKSB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgZWxlbWVudCAqZWxlbTsKJiM0MzsKJiM0MzsJCWZvcl9lYWNoX2VsZW1lbnQoZWxlbSwgZXh0cmEsIGllX2xlbikgewomIzQzOwkJCS8qIG5vdGhpbmcgKi8KJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmICghZm9yX2VhY2hfZWxlbWVudF9jb21wbGV0ZWQoZWxlbSwgZXh0cmEsIGllX2xlbikpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJCWllID0ga21lbWR1cChleHRyYSwgaWVfbGVuLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFpZSkKIAkJCXJldHVybiAtRU5PTUVNOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEyOQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBSZWNlbnQgUGF0Y2ggaW4gYG5ldC93aXJlbGVzcy93ZXh0LXNtZS5jYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBjb2RlIHNob3dzIGEgcGF0Y2ggYWZmZWN0aW5nIGBuZXQvd2lyZWxlc3Mvd2V4dC1zbWUuY2AsIHNwZWNpZmljYWxseSB0aGUgYGNmZzgwMjExX3dleHRfc2l3Z2VuaWVgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiB0aGlzIGZ1bmN0aW9uIGFuZCBob3cgdGhlIHBhdGNoIG1vZGlmaWVzIGl0cyBiZWhhdmlvci4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaXMgYWRkaW5nIHNvbWUga2luZCBvZiBJbmZvcm1hdGlvbiBFbGVtZW50IChJRSkgcHJvY2Vzc2luZyB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gSSBuZWVkIHRvIGdldCB0aGUgYmlnZ2VyIHBpY3R1cmUuCgpGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZWAgZG9lcyBpbiB0aGUgZmlyc3QgcGxhY2UsIGFuZCB0aGF0IG1lYW5zIHJlYWRpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEkgbmVlZCB0byBzZWUgdGhlIGNvbnRleHQuIFNvLCBJJiMzOTtsbCB1c2UgYHJlYWQtZmlsZWAgb24gYG5ldC93aXJlbGVzcy93ZXh0LXNtZS5jYCB0byBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXJvdW5kIGxpbmUgMzE5LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIElFIGxlbmd0aCBgaWVfbGVuYCBpcyB1c2VkLCBhbmQgd2hhdCBgZXh0cmFgIHJlcHJlc2VudHMuIFRoZSBleGlzdGluZyBjb2RlIHN1Z2dlc3RzIHRoYXQgaWYgYGllX2xlbmAgaGFzIGEgbm9uLXplcm8gdmFsdWUsIHRoZW4gYSBibG9jayBvZiBtZW1vcnkgaXMgYWxsb2NhdGVkIGFuZCBjb3BpZWQgZnJvbSB0aGUgYGV4dHJhYCBhcmd1bWVudCwgYWZ0ZXIgd2hpY2ggaXQgd291bGQgYmUgcGFyc2VkLiBUaGUgcGF0Y2ggYWRkcyBhIGxvb3AgdGhhdCBsb29rcyBhdCB0aGUgYGV4dHJhYCB2YXJpYWJsZS4gSXMgdGhlcmUgc29tZSB0eXBlIG9mIHZhbGlkYXRpb24gaGFwcGVuaW5nIG5vdz8gTGV0JiMzOTtzIGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy93ZXh0LXNtZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMDA6XHRcdFx0XHQgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSlcbiAzMDE6XHR7XG4gMzAyOlx0XHRzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEgPSBcdTAwMjZ3cnF1LVx1MDAzZWRhdGE7XG4gMzAzOlx0XHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LVx1MDAzZWllZWU4MDIxMV9wdHI7XG4gMzA0Olx0XHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19yZGV2KHdkZXYtXHUwMDNld2lwaHkpO1xuIDMwNTpcdFx0aW50IGllX2xlbiA9IGRhdGEtXHUwMDNlbGVuZ3RoO1xuIDMwNjpcdFx0dTggKmllID0gZXh0cmE7XG4gMzA3Olx0XG4gMzA4Olx0XHRpZiAod2Rldi1cdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTilcbiAzMDk6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIDMxMDpcdFxuIDMxMTpcdFx0aWYgKCFpZV9sZW4pXG4gMzEyOlx0XHRcdGllID0gTlVMTDtcbiAzMTM6XHRcbiAzMTQ6XHRcdGd1YXJkKHdpcGh5KSh3ZGV2LVx1MDAzZXdpcGh5KTtcbiAzMTU6XHRcbiAzMTY6XHRcdC8qIG5vIGNoYW5nZSAqL1xuIDMxNzpcdFx0aWYgKHdkZXYtXHUwMDNld2V4dC5pZV9sZW4gPT0gaWVfbGVuIFx1MDAyNlx1MDAyNlxuIDMxODpcdFx0ICAgIG1lbWNtcCh3ZGV2LVx1MDAzZXdleHQuaWUsIGllLCBpZV9sZW4pID09IDApXG4gMzE5Olx0XHRcdHJldHVybiAwO1xuIDMyMDpcdFxuIDMyMTpcdFx0aWYgKGllX2xlbikge1xuIDMyMjpcdFx0XHRjb25zdCBzdHJ1Y3QgZWxlbWVudCAqZWxlbTtcbiAzMjM6XHRcbiAzMjQ6XHRcdFx0Zm9yX2VhY2hfZWxlbWVudChlbGVtLCBleHRyYSwgaWVfbGVuKSB7XG4gMzI1Olx0XHRcdFx0Lyogbm90aGluZyAqL1xuIDMyNjpcdFx0XHR9XG4gMzI3Olx0XG4gMzI4Olx0XHRcdGlmICghZm9yX2VhY2hfZWxlbWVudF9jb21wbGV0ZWQoZWxlbSwgZXh0cmEsIGllX2xlbikpXG4gMzI5Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMzMwOlx0XG4gMzMxOlx0XHRcdGllID0ga21lbWR1cChleHRyYSwgaWVfbGVuLCBHRlBfS0VSTkVMKTtcbiAzMzI6XHRcdFx0aWYgKCFpZSlcbiAzMzM6XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAzMzQ6XHRcdH0gZWxzZSB7XG4gMzM1Olx0XHRcdGllID0gTlVMTDtcbiAzMzY6XHRcdH1cbiAzMzc6XHRcbiAzMzg6XHRcdGtmcmVlKHdkZXYtXHUwMDNld2V4dC5pZSk7XG4gMzM5Olx0XHR3ZGV2LVx1MDAzZXdleHQuaWUgPSBpZTtcbiAzNDA6XHRcdHdkZXYtXHUwMDNld2V4dC5pZV9sZW4gPSBpZV9sZW47XG4gMzQxOlx0XG4gMzQyOlx0XHRpZiAod2Rldi1cdTAwM2Vjb25uKVxuIDM0MzpcdFx0XHRyZXR1cm4gY2ZnODAyMTFfZGlzY29ubmVjdChyZGV2LCBkZXYsXG4gMzQ0Olx0XHRcdFx0XHRcdCAgIFdMQU5fUkVBU09OX0RFQVVUSF9MRUFWSU5HLCBmYWxzZSk7XG4gMzQ1Olx0XG4gMzQ2Olx0XHQvKiB1c2Vyc3BhY2UgYmV0dGVyIG5vdCB0aGluayB3ZSYjMzk7bGwgcmVjb25uZWN0ICovXG4gMzQ3Olx0XHRyZXR1cm4gMDtcbiAzNDg6XHR9XG4gMzQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE1OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NDAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYGZvcl9lYWNoX2VsZW1lbnRgIGFuZCBgZm9yX2VhY2hfZWxlbWVudF9jb21wbGV0ZWRgKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gc29tZSBjb2RlIGFuZCBJIHNlZSB0aGVzZSBgZm9yX2VhY2hfZWxlbWVudGAgYW5kIGBmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZGAgZnVuY3Rpb25zLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZXkgYXJlLCB3aGF0IHRoZXkgZG8sIGFuZCBob3cgdGhleSBpbnRlcmFjdC4gTXkgaW5zdGluY3QgaXMgdG8gdXNlIGEgYGdyZXBgIHRvIHF1aWNrbHkgZmluZCBhbGwgaW5zdGFuY2VzIG9mIHRoZXNlIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGNvZGViYXNlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBpZGVudGlmeSB0aGVpciBkZWZpbml0aW9uLCBob3cgdGhleSYjMzk7cmUgYmVpbmcgY2FsbGVkLCBhbmQgd2hlcmUgdGhleSBhcmUgdXNlZCB0byBwcm9jZXNzIGVsZW1lbnRzLiBUaGlzIGdyZXAgc2hvdWxkIGhlbHAgbWUgZ2V0IGEgaGlnaC1sZXZlbCBzZW5zZSBvZiB0aGVpciByb2xlIHdpdGhpbiB0aGUgYmlnZ2VyIHBpY3R1cmUgYmVmb3JlIEkgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTY6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBmb3JfZWFjaF9lbGVtZW50JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmg9MjcxNT1zdHJ1Y3QgZWxlbWVudCB7XG4tLVxuaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaC0yNzIxLS8qIGVsZW1lbnQgaXRlcmF0aW9uIGhlbHBlcnMgKi9cbmluY2x1ZGUvbGludXgvaWVlZTgwMjExLmg6MjcyMjojZGVmaW5lIGZvcl9lYWNoX2VsZW1lbnQoX2VsZW0sIF9kYXRhLCBfZGF0YWxlbilcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaC0yNzIzLVx0Zm9yIChfZWxlbSA9IChjb25zdCBzdHJ1Y3QgZWxlbWVudCAqKShfZGF0YSk7XHRcdFx0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oLTI3MjktXG5pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oOjI3MzA6I2RlZmluZSBmb3JfZWFjaF9lbGVtZW50X2lkKGVsZW1lbnQsIF9pZCwgZGF0YSwgZGF0YWxlbilcdFx0XFxcbmluY2x1ZGUvbGludXgvaWVlZTgwMjExLmgtMjczMS1cdGZvcl9lYWNoX2VsZW1lbnQoZWxlbWVudCwgZGF0YSwgZGF0YWxlbilcdFx0XHRcXFxuLS1cbmluY2x1ZGUvbGludXgvaWVlZTgwMjExLmgtMjczMy1cbmluY2x1ZGUvbGludXgvaWVlZTgwMjExLmg6MjczNDojZGVmaW5lIGZvcl9lYWNoX2VsZW1lbnRfZXh0aWQoZWxlbWVudCwgZXh0aWQsIF9kYXRhLCBfZGF0YWxlbilcdFx0XFxcbmluY2x1ZGUvbGludXgvaWVlZTgwMjExLmgtMjczNS1cdGZvcl9lYWNoX2VsZW1lbnQoZWxlbWVudCwgX2RhdGEsIF9kYXRhbGVuKVx0XHRcdFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE2OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5OTQKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIElFRUUgODAyLjExIEhlYWRlcioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiB0aG9zZSBtYWNyb3MuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgYGZvcl9lYWNoX2VsZW1lbnRgIGFuZCBgZm9yX2VhY2hfZWxlbWVudF9jb21wbGV0ZWRgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGNvbnRleHQgb2YgdGhlIDgwMi4xMSBzdGFjay4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYGluY2x1ZGUvbGludXgvaWVlZTgwMjExLmhgLCBhbmQgaG9uZSBpbiBhcm91bmQgbGluZSAyNzE1LiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGludGVycGxheSBvZiB0aG9zZSBtYWNyb3MgZm9yIGl0ZXJhdGl2ZSBlbGVtZW50IHByb2Nlc3NpbmcsIGFuZCBob3cgY29tcGxldGlvbiBpcyBoYW5kbGVkLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGFueSBvcHRpbWl6YXRpb24gc3RyYXRlZ2llcyBhcmUgYXQgcGxheSB3aXRoaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiBvZiB0aG9zZSBjb250cm9sIGZsb3dzLiBJdCYjMzk7cyB0aW1lIHRvIGZpbmQgdGhhdCBjb2RlIGFuZCBnZXQgdG8gdGhlIGNvcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE2OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9pZWVlODAyMTEuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjcxNTpcdHN0cnVjdCBlbGVtZW50IHtcbjI3MTY6XHRcdHU4IGlkO1xuMjcxNzpcdFx0dTggZGF0YWxlbjtcbjI3MTg6XHRcdHU4IGRhdGFbXTtcbjI3MTk6XHR9IF9fcGFja2VkO1xuMjcyMDpcdFxuMjcyMTpcdC8qIGVsZW1lbnQgaXRlcmF0aW9uIGhlbHBlcnMgKi9cbjI3MjI6XHQjZGVmaW5lIGZvcl9lYWNoX2VsZW1lbnQoX2VsZW0sIF9kYXRhLCBfZGF0YWxlbilcdFx0XHRcXFxuMjcyMzpcdFx0Zm9yIChfZWxlbSA9IChjb25zdCBzdHJ1Y3QgZWxlbWVudCAqKShfZGF0YSk7XHRcdFx0XFxcbjI3MjQ6XHRcdCAgICAgKGNvbnN0IHU4ICopKF9kYXRhKSAmIzQzOyAoX2RhdGFsZW4pIC0gKGNvbnN0IHU4ICopX2VsZW0gXHUwMDNlPVx0XFxcbjI3MjU6XHRcdFx0KGludClzaXplb2YoKl9lbGVtKSBcdTAwMjZcdTAwMjZcdFx0XHRcdFx0XFxcbjI3MjY6XHRcdCAgICAgKGNvbnN0IHU4ICopKF9kYXRhKSAmIzQzOyAoX2RhdGFsZW4pIC0gKGNvbnN0IHU4ICopX2VsZW0gXHUwMDNlPVx0XFxcbjI3Mjc6XHRcdFx0KGludClzaXplb2YoKl9lbGVtKSAmIzQzOyBfZWxlbS1cdTAwM2VkYXRhbGVuO1x0XHRcdFxcXG4yNzI4Olx0XHQgICAgIF9lbGVtID0gKGNvbnN0IHN0cnVjdCBlbGVtZW50ICopKF9lbGVtLVx1MDAzZWRhdGEgJiM0MzsgX2VsZW0tXHUwMDNlZGF0YWxlbikpXG4yNzI5Olx0XG4yNzMwOlx0I2RlZmluZSBmb3JfZWFjaF9lbGVtZW50X2lkKGVsZW1lbnQsIF9pZCwgZGF0YSwgZGF0YWxlbilcdFx0XFxcbjI3MzE6XHRcdGZvcl9lYWNoX2VsZW1lbnQoZWxlbWVudCwgZGF0YSwgZGF0YWxlbilcdFx0XHRcXFxuMjczMjpcdFx0XHRpZiAoZWxlbWVudC1cdTAwM2VpZCA9PSAoX2lkKSlcbjI3MzM6XHRcbjI3MzQ6XHQjZGVmaW5lIGZvcl9lYWNoX2VsZW1lbnRfZXh0aWQoZWxlbWVudCwgZXh0aWQsIF9kYXRhLCBfZGF0YWxlbilcdFx0XFxcbjI3MzU6XHRcdGZvcl9lYWNoX2VsZW1lbnQoZWxlbWVudCwgX2RhdGEsIF9kYXRhbGVuKVx0XHRcdFxcXG4yNzM2Olx0XHRcdGlmIChlbGVtZW50LVx1MDAzZWlkID09IFdMQU5fRUlEX0VYVEVOU0lPTiBcdTAwMjZcdTAwMjZcdFx0XFxcbjI3Mzc6XHRcdFx0ICAgIGVsZW1lbnQtXHUwMDNlZGF0YWxlbiBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcdFx0XHRcdFxcXG4yNzM4Olx0XHRcdCAgICBlbGVtZW50LVx1MDAzZWRhdGFbMF0gPT0gKGV4dGlkKSlcbjI3Mzk6XHRcbjI3NDA6XHQjZGVmaW5lIGZvcl9lYWNoX3N1YmVsZW1lbnQoc3ViLCBlbGVtZW50KVx0XHRcdFx0XFxcbjI3NDE6XHRcdGZvcl9lYWNoX2VsZW1lbnQoc3ViLCAoZWxlbWVudCktXHUwMDNlZGF0YSwgKGVsZW1lbnQpLVx1MDAzZWRhdGFsZW4pXG4yNzQyOlx0XG4yNzQzOlx0I2RlZmluZSBmb3JfZWFjaF9zdWJlbGVtZW50X2lkKHN1YiwgaWQsIGVsZW1lbnQpXHRcdFx0XFxcbjI3NDQ6XHRcdGZvcl9lYWNoX2VsZW1lbnRfaWQoc3ViLCBpZCwgKGVsZW1lbnQpLVx1MDAzZWRhdGEsIChlbGVtZW50KS1cdTAwM2VkYXRhbGVuKVxuMjc0NTpcdFxuMjc0NjpcdCNkZWZpbmUgZm9yX2VhY2hfc3ViZWxlbWVudF9leHRpZChzdWIsIGV4dGlkLCBlbGVtZW50KVx0XHRcdFxcXG4yNzQ3Olx0XHRmb3JfZWFjaF9lbGVtZW50X2V4dGlkKHN1YiwgZXh0aWQsIChlbGVtZW50KS1cdTAwM2VkYXRhLCAoZWxlbWVudCktXHUwMDNlZGF0YWxlbilcbjI3NDg6XHRcbjI3NDk6XHQvKipcbjI3NTA6XHQgKiBmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZCAtIGRldGVybWluZSBpZiBlbGVtZW50IHBhcnNpbmcgY29uc3VtZWQgYWxsIGRhdGFcbjI3NTE6XHQgKiBAZWxlbWVudDogZWxlbWVudCBwb2ludGVyIGFmdGVyIGZvcl9lYWNoX2VsZW1lbnQoKSBvciBmcmllbmRzXG4yNzUyOlx0ICogQGRhdGE6IHNhbWUgZGF0YSBwb2ludGVyIGFzIHBhc3NlZCB0byBmb3JfZWFjaF9lbGVtZW50KCkgb3IgZnJpZW5kc1xuMjc1MzpcdCAqIEBkYXRhbGVuOiBzYW1lIGRhdGEgbGVuZ3RoIGFzIHBhc3NlZCB0byBmb3JfZWFjaF9lbGVtZW50KCkgb3IgZnJpZW5kc1xuMjc1NDpcdCAqIFJldHVybjogJXRydWUgaWYgYWxsIGVsZW1lbnRzIHdlcmUgaXRlcmF0ZWQsICVmYWxzZSBvdGhlcndpc2U7IHNlZSBub3Rlc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNjowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDQ5CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcGx5IGZhbWlsaWFyIHdpdGggY29kZSBhbmQgaXRlcmF0aW9uOgoKKipBbmFseXppbmcgdGhlIFJlbWFpbmRlciBvZiBgZm9yX2VhY2hfZWxlbWVudF9jb21wbGV0ZWRgKioKCkFscmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGFmdGVyIHRoYXQgYGZvcl9lYWNoX2VsZW1lbnRfY29tcGxldGVkYCBmdW5jdGlvbiBjYWxsLiBJIGtub3cgaXQmIzM5O3MgYSBjcml0aWNhbCBwaWVjZSwgbGlrZWx5IHJlbGF0ZWQgdG8gcHJvY2Vzc2luZyBpbmRpdmlkdWFsIGVsZW1lbnRzIG9yIHRhc2tzLiBCdXQgd2hhdCYjMzk7cyB0aGUgYnJvYWRlciBwaWN0dXJlPyBJIG5lZWQgdG8gZGVsdmUgaW50byB0aGUgY29kZSB0aGF0IGZvbGxvd3MgdGhhdCBjYWxsIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBhbGdvcml0aG0uIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCYjMzk7cyBjb29yZGluYXRpbmcgd2l0aCB0aGUgcmVzdCBvZiB0aGUgd29ya2Zsb3cuIElzIHRoaXMgdGhlIGVuZCBvZiBhIGxvb3A/IERvZXMgaXQgdHJpZ2dlciBhbm90aGVyIHN0YWdlPyBJcyB0aGVyZSBlcnJvciBoYW5kbGluZz8gV2hhdCBkZXBlbmRlbmNpZXMgZG9lcyB0aGUgY29kZSBhZnRlciBgZm9yX2VhY2hfZWxlbWVudF9jb21wbGV0ZWRgIGhhdmUgb24gdGhlIGZ1bmN0aW9uJiMzOTtzIG91dHB1dCBvciBjb21wbGV0aW9uIHN0YXR1cz8gVGhlIGRldmlsLCBhcyBhbHdheXMsIGlzIGluIHRoZSBkZXRhaWxzLCBzbyBsZXQmIzM5O3MgZ2V0IGRpZ2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE2OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9pZWVlODAyMTEuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3NTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjc1NTpcdCAqXG4yNzU2Olx0ICogVGhpcyBmdW5jdGlvbiByZXR1cm5zICV0cnVlIGlmIGFsbCB0aGUgZGF0YSB3YXMgcGFyc2VkIG9yIGNvbnNpZGVyZWRcbjI3NTc6XHQgKiB3aGlsZSB3YWxraW5nIHRoZSBlbGVtZW50cy4gT25seSB1c2UgdGhpcyBpZiB5b3VyIGZvcl9lYWNoX2VsZW1lbnQoKVxuMjc1ODpcdCAqIGxvb3AgY2Fubm90IGJlIGJyb2tlbiBvdXQgb2YsIG90aGVyd2lzZSBpdCBhbHdheXMgcmV0dXJucyAlZmFsc2UuXG4yNzU5Olx0ICpcbjI3NjA6XHQgKiBJZiBzb21lIGRhdGEgd2FzIG1hbGZvcm1lZCwgdGhpcyByZXR1cm5zICVmYWxzZSBzaW5jZSB0aGUgbGFzdCBwYXJzZWRcbjI3NjE6XHQgKiBlbGVtZW50IHdpbGwgbm90IGZpbGwgdGhlIHdob2xlIHJlbWFpbmluZyBkYXRhLlxuMjc2MjpcdCAqL1xuMjc2MzpcdHN0YXRpYyBpbmxpbmUgYm9vbCBmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZChjb25zdCBzdHJ1Y3QgZWxlbWVudCAqZWxlbWVudCxcbjI3NjQ6XHRcdFx0XHRcdFx0ICAgICAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFsZW4pXG4yNzY1Olx0e1xuMjc2NjpcdFx0cmV0dXJuIChjb25zdCB1OCAqKWVsZW1lbnQgPT0gKGNvbnN0IHU4ICopZGF0YSAmIzQzOyBkYXRhbGVuO1xuMjc2NzpcdH1cbjI3Njg6XHRcbjI3Njk6XHQvKlxuMjc3MDpcdCAqIFJTTlggQ2FwYWJpbGl0aWVzOlxuMjc3MTpcdCAqIGJpdHMgMC0zOiBGaWVsZCBsZW5ndGggKG4tMSlcbjI3NzI6XHQgKi9cbjI3NzM6XHQjZGVmaW5lIFdMQU5fUlNOWF9DQVBBX1BST1RFQ1RFRF9UV1QgQklUKDQpXG4yNzc0Olx0I2RlZmluZSBXTEFOX1JTTlhfQ0FQQV9TQUVfSDJFIEJJVCg1KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjM4CgkJCQkJCQlvdXRwdXQ6IDIxOQoJCQkJCQkJdGhvdWdodHM6IDkwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBjZmc4MDIxMV93ZXh0X3Npd2dlbmllYCBQYXRjaDogQSBLTVNBTiBQZXJzcGVjdGl2ZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGlzIHBhdGNoIGZvY3VzaW5nIG9uIEtNU0FOIGltcGxpY2F0aW9ucy4gVGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2Ugc2VlbXMgdG8gYmUgdGhlIGludHJvZHVjdGlvbiBvZiBpbnB1dCB2YWxpZGF0aW9uIGZvciB1c2VyLXByb3ZpZGVkIEluZm9ybWF0aW9uIEVsZW1lbnRzIChJRXMpIHBhc3NlZCB0aHJvdWdoIHRoZSBgU0lPQ1NJV0dFTklFYCBpb2N0bCB1c2luZyBgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZWAuIFByZXZpb3VzbHksIHRoZSBjb2RlIGp1c3QgYmxpbmRseSBjb3BpZWQgdGhlIGBleHRyYWAgYnVmZmVyIGZyb20gdXNlcnNwYWNlIHdpdGggYGttZW1kdXBgLiBOb3csIHdlJiMzOTtyZSBlbXBsb3lpbmcgYGZvcl9lYWNoX2VsZW1lbnRgIGFuZCBgZm9yX2VhY2hfZWxlbWVudF9jb21wbGV0ZWRgIHRvIHZlcmlmeSB0aGF0IHRoZSBpbmNvbWluZyBkYXRhLCBgZXh0cmFgIHdpdGggbGVuZ3RoIGBpZV9sZW5gLCBjb25mb3JtcyB0byB0aGUgZXhwZWN0ZWQgSUVFRSA4MDIuMTEgZWxlbWVudCAoVExWKSBzdHJ1Y3R1cmUuIElmIGl0JiMzOTtzIG1hbGZvcm1lZCDigJMgbWVhbmluZyB0aGUgbGVuZ3RocyBvZiB0aGUgVExWcyBkb24mIzM5O3QgbWFrZSBzZW5zZSDigJMgd2UgcmV0dXJuIGAtRUlOVkFMYC4gVGhpcyBpcyBhIGNydWNpYWwgc2VjdXJpdHkgaGFyZGVuaW5nIHN0ZXAuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyB0aGlzIGFkZHJlc3Nlcy4gQ2xlYXJseSwgdGhpcyBpcyBpbnB1dCB2YWxpZGF0aW9uIOKAkyBhIGNyaXRpY2FsIHNlY3VyaXR5IGNoZWNrLiBCZWZvcmUsIG1hbGZvcm1lZCBJRXMgY291bGQgaGF2ZSBwb3RlbnRpYWxseSBjYXVzZWQgb3V0LW9mLWJvdW5kcyByZWFkcyBkdXJpbmcgbGF0ZXIgcGFyc2luZyBvZiB0aGUgZGF0YSwgYSBjbGFzc2ljIHZ1bG5lcmFiaWxpdHkuIE5vdywgd2UmIzM5O3JlIGV4cGxpY2l0bHkgdmFsaWRhdGluZyBlbGVtZW50IGxlbmd0aHMuIFNvLCBteSBwcmltYXJ5IGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIHBhdGNoLCBpbiBpdHNlbGYsIGludHJvZHVjZXMgbmV3IHJpc2tzLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4KCkxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIERvZXMgdGhpcyBwYXRjaDoKCjEuICAqKlNlbmQgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2U/KiogTm8sIHRoaXMgaXMgYSAmIzM0O3NldCYjMzQ7IG9wZXJhdGlvbiByZWNlaXZpbmcgZGF0YSwgbm90IHRyYW5zbWl0dGluZyBpdC4gSXQmIzM5O3MgdmFsaWRhdGluZyB0aGUgaW5wdXQuCgoyLiAgKipJbnRyb2R1Y2UgY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgcmVsaWVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHM/KiogVGhlIGBlbGVtYCB2YXJpYWJsZSwgY3JpdGljYWwgdG8gdGhlIHZhbGlkYXRpb24gbG9vcCwgaXMgaW5pdGlhbGl6ZWQgd2l0aGluIHRoZSBgZm9yX2VhY2hfZWxlbWVudGAgbWFjcm8gYXMgdGhlIGl0ZXJhdG9yIHBvaW50ZXIsIGBfZWxlbSA9IChjb25zdCBzdHJ1Y3QgZWxlbWVudCAqKShfZGF0YSlgLiBUaGUgaW5wdXQgYGV4dHJhYCBpcyBmcm9tIHRoZSBpb2N0bCBhbmQgaGFzIGFscmVhZHkgYmVlbiBjb3BpZWQgZnJvbSB1c2Vyc3BhY2UuIGBpZV9sZW5gIGlzIGRlcml2ZWQgZnJvbSB0aGUgaW5wdXQgZGF0YSBzdHJ1Y3R1cmUuIEV2ZXJ5dGhpbmcgc2VlbXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQuCgozLiAgKipBbGxvY2F0ZSBvciBpbml0aWFsaXplIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXI/KiogTm8sIHRoZSBwYXRjaCBjYWxscyBga21lbWR1cGAgKmFmdGVyKiB0aGUgdmFsaWRhdGlvbiwgc28gdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGlzIHBlcmZvcm1lZCBvbiBkYXRhIHRoYXQgaGFzIHBhc3NlZCB2YWxpZGF0aW9uLgoKNC4gICoqVG91Y2ggYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzPyoqIE5vLCB0aGlzIHBhdGNoIGlzIGFib3V0ICpyZXN0cmljdGluZyogYW5kICp2YWxpZGF0aW5nKiB0aGUgaW5wdXQgZGF0YSBmb3JtYXQsIG5vdCBtYW5pcHVsYXRpbmcgZXhpc3RpbmcgYnVmZmVyIGJvdW5kYXJpZXMgaW4gYSB3YXkgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCByZWFkcy4gSXQmIzM5O3MgcHJldmVudGluZyBtYWxmb3JtZWQgVExWIGVsZW1lbnRzIGZyb20gYmVpbmcgcHJvY2Vzc2VkLgoKR2l2ZW4gdGhlc2UgY29uc2lkZXJhdGlvbnMsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgS01TQU4gaXNuJiMzOTt0IGRpcmVjdGx5IHJlbGV2YW50IGhlcmUuIEtNU0FOJiMzOTtzIHN0cmVuZ3RoIGxpZXMgaW4gZGV0ZWN0aW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdGFjaywgaGVhcCwgcGFnZSkgYW5kIHBvdGVudGlhbCBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcy4gVGhpcyBwYXRjaCwgaG93ZXZlciwgaXMgcHVyZWx5IGFib3V0IHBhcnNpbmcgdXNlciBpbnB1dCBhbmQgdmFsaWRhdGluZyBpdHMgc3RydWN0dXJlIGJlZm9yZSBpdCBpcyBjb3BpZWQuIEFueSBvdXQtb2YtYm91bmRzIG1lbW9yeSByZWFkcyBhcmlzaW5nIGZyb20gKmludmFsaWQqIFRMVnMgd291bGQgYmUgZGV0ZWN0ZWQgYnkgS0FTQU4uCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrIGV2ZXJ5dGhpbmc6IGlzIHRoZXJlICphbnkqIGluc3RhbmNlIHdoZXJlIGBlbGVtYCBvciByZWxhdGVkIHZhcmlhYmxlcyBjb3VsZCBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQ/IE5vcGUuIEV2ZW4gaWYgYGllX2xlbmAgaXMgemVybywgdGhlIGNvZGUgaXMgd2l0aGluIGEgY29uZGl0aW9uYWwsIGFuZCB0aGUgYGZvcl9lYWNoX2VsZW1lbnRfY29tcGxldGVkYCBjYWxsIGNvbXBhcmVzIHRoZSBpdGVyYXRvciBgZWxlbWAgYWdhaW5zdCB0aGUgZW5kIG9mIHRoZSBpbnB1dCBidWZmZXIsIGBleHRyYSAmIzQzOyBpZV9sZW5gLiBFdmVyeXRoaW5nIGlzIGluaXRpYWxpemVkIGNvcnJlY3RseS4gS0FTQU4gY292ZXJzIHRoZSBrZXkgY29uY2VybnMgYWJvdXQgYnVmZmVyIG92ZXJmbG93cyBhbmQgbWVtb3J5IGJvdW5kcyBoZXJlLiBLTVNBTiBpcyBub3QgbmVlZGVkIGhlcmUuCgpUaGVyZWZvcmUsIGZvciBjb21wbGV0ZW5lc3MsIGhlcmUmIzM5O3MgbXkgc3VtbWFyaXplZCByZWFzb25pbmcgZm9yIHdoeSBLTVNBTiBpcyBub3QgcmVxdWlyZWQ6IFRoaXMgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIG9mIHVzZXItcHJvdmlkZWQgSUVzIHBhc3NlZCB0aHJvdWdoIGBTSU9DU0lXR0VOSUVgIChgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZWApIHVzaW5nIGBmb3JfZWFjaF9lbGVtZW50KClgIC8gYGZvcl9lYWNoX2VsZW1lbnRfY29tcGxldGVkKClgIHRvIGVuc3VyZSB0aGUgZGF0YSBjb25mb3JtcyB0byB0aGUgODAyLjExIGVsZW1lbnQgVExWIHN0cnVjdHVyZSBiZWZvcmUgYmVpbmcgY29waWVkIHdpdGggYGttZW1kdXBgLiBLTVNBTiBpcyBub3QgcmVxdWlyZWQgYmVjYXVzZSB0aGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UuIFRoZSBpdGVyYXRvciBwb2ludGVyIGBlbGVtYCBpcyBpbml0aWFsaXplZCB3aXRoaW4gdGhlIG1hY3JvLCBhbmQgdGhlIGlucHV0IGlzIHVzZXItcHJvdmlkZWQuIEFueSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBhc3NvY2lhdGVkIHdpdGggbWFsZm9ybWVkIFRMVnMgKGUuZy4sIG91dC1vZi1ib3VuZHMgcmVhZHMpIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgS0FTQU4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE2OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgaW5wdXQgdmFsaWRhdGlvbiB0byBjZmc4MDIxMV93ZXh0X3Npd2dlbmllKCkgYnkgaXRlcmF0aW5nIG92ZXIgYW5kIHZlcmlmeWluZyB0aGUgc3RydWN0dXJlIG9mIHVzZXItcHJvdmlkZWQgSUVFRSA4MDIuMTEgSW5mb3JtYXRpb24gRWxlbWVudHMgKElFcykgdXNpbmcgZm9yX2VhY2hfZWxlbWVudCgpIGFuZCBmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZCgpLiBJZiB0aGUgZWxlbWVudHMgYXJlIG1hbGZvcm1lZCwgaXQgcmV0dXJucyAtRUlOVkFMIGJlZm9yZSBhbGxvY2F0aW5nIGFuZCBzYXZpbmcgdGhlIElFIGJ1ZmZlci5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MsIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlIGxvb3AgaXRlcmF0b3IgdmFyaWFibGUgYGVsZW1gIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIGJ5IHRoZSBgZm9yX2VhY2hfZWxlbWVudGAgbWFjcm8sIGFuZCB0aGUgaW5wdXQgYnVmZmVyIGNvbnRhaW5zIGRhdGEgY29waWVkIGZyb20gdXNlciBzcGFjZS4gUG90ZW50aWFsIGJ1Z3MgYWRkcmVzc2VkIG9yIHRvdWNoZWQgYnkgdGhpcyBsb2dpYyAoc3VjaCBhcyBtYWxmb3JtZWQgVExWIHBhcnNpbmcgbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIHJlYWRzKSBmYWxsIHVuZGVyIEtBU0FOJiMzOTtzIHB1cnZpZXcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgaW5wdXQgdmFsaWRhdGlvbiB0byBjZmc4MDIxMV93ZXh0X3Npd2dlbmllKCkgYnkgaXRlcmF0aW5nIG92ZXIgYW5kIHZlcmlmeWluZyB0aGUgc3RydWN0dXJlIG9mIHVzZXItcHJvdmlkZWQgSUVFRSA4MDIuMTEgSW5mb3JtYXRpb24gRWxlbWVudHMgKElFcykgdXNpbmcgZm9yX2VhY2hfZWxlbWVudCgpIGFuZCBmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZCgpLiBJZiB0aGUgZWxlbWVudHMgYXJlIG1hbGZvcm1lZCwgaXQgcmV0dXJucyAtRUlOVkFMIGJlZm9yZSBhbGxvY2F0aW5nIGFuZCBzYXZpbmcgdGhlIElFIGJ1ZmZlci5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MsIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlIGxvb3AgaXRlcmF0b3IgdmFyaWFibGUgYGVsZW1gIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIGJ5IHRoZSBgZm9yX2VhY2hfZWxlbWVudGAgbWFjcm8sIGFuZCB0aGUgaW5wdXQgYnVmZmVyIGNvbnRhaW5zIGRhdGEgY29waWVkIGZyb20gdXNlciBzcGFjZS4gUG90ZW50aWFsIGJ1Z3MgYWRkcmVzc2VkIG9yIHRvdWNoZWQgYnkgdGhpcyBsb2dpYyAoc3VjaCBhcyBtYWxmb3JtZWQgVExWIHBhcnNpbmcgbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIHJlYWRzKSBmYWxsIHVuZGVyIEtBU0FOJiMzOTtzIHB1cnZpZXcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTU6MjI6MDEuODY3NDY5OTI4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAyOTY2OTAwNTAwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiQ0ZHODAyMTFfV0VYVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNmZzgwMjExX3dleHRfc2l3Z2VuaWVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgaW5wdXQgdmFsaWRhdGlvbiB0byBjZmc4MDIxMV93ZXh0X3Npd2dlbmllKCkgYnkgaXRlcmF0aW5nIG92ZXIgYW5kIHZlcmlmeWluZyB0aGUgc3RydWN0dXJlIG9mIHVzZXItcHJvdmlkZWQgSUVFRSA4MDIuMTEgSW5mb3JtYXRpb24gRWxlbWVudHMgKElFcykgdXNpbmcgZm9yX2VhY2hfZWxlbWVudCgpIGFuZCBmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZCgpLiBJZiB0aGUgZWxlbWVudHMgYXJlIG1hbGZvcm1lZCwgaXQgcmV0dXJucyAtRUlOVkFMIGJlZm9yZSBhbGxvY2F0aW5nIGFuZCBzYXZpbmcgdGhlIElFIGJ1ZmZlci5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcywga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgb3IgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGUgbG9vcCBpdGVyYXRvciB2YXJpYWJsZSBgZWxlbWAgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYnkgdGhlIGBmb3JfZWFjaF9lbGVtZW50YCBtYWNybywgYW5kIHRoZSBpbnB1dCBidWZmZXIgY29udGFpbnMgZGF0YSBjb3BpZWQgZnJvbSB1c2VyIHNwYWNlLiBQb3RlbnRpYWwgYnVncyBhZGRyZXNzZWQgb3IgdG91Y2hlZCBieSB0aGlzIGxvZ2ljIChzdWNoIGFzIG1hbGZvcm1lZCBUTFYgcGFyc2luZyBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMpIGZhbGwgdW5kZXIgS0FTQU4ncyBwdXJ2aWV3LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBpbnB1dCB2YWxpZGF0aW9uIGZvciB3aXJlbGVzcyBpbmZvcm1hdGlvbiBlbGVtZW50cyAoSUVzKSBwYXNzZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBTSU9DU0lXR0VOSUUgd2lyZWxlc3MgZXh0ZW5zaW9uIGlvY3RsLiBJdCBpdGVyYXRlcyB0aHJvdWdoIHRoZSBlbGVtZW50IGJ1ZmZlciB1c2luZyBmb3JfZWFjaF9lbGVtZW50KCkgYW5kIHZhbGlkYXRlcyBjb21wbGV0aW9uIHdpdGggZm9yX2VhY2hfZWxlbWVudF9jb21wbGV0ZWQoKSBiZWZvcmUgY29weWluZyB0aGUgYnVmZmVyLCByZWplY3RpbmcgbWFsZm9ybWVkIGVsZW1lbnRzIHdpdGggLUVJTlZBTC4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0d29yayB3aXJlbGVzcyBjb3JlIGNvZGUgdGhhdCBjYW4gYmUgdGVzdGVkIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzIChlLmcuIHVzaW5nIG1hYzgwMjExX2h3c2ltKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTU6MjI6MDEuODY3NDc0NzU5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzc4MjY2MzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzI3MjQ5NTZjNDFhNWYxMmE4ZjYwOTcxMmZlZmUyMzMxNjk3NjdkZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxNToyMTo1OSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuYyBiL25ldC93aXJlbGVzcy93ZXh0LXNtZS5jXFxuaW5kZXggNTczYjZiMTVhNDQ2ZS4uYjU5MTRmMzY1OGRiNCAxMDA2NDRcXG4tLS0gYS9uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuY1xcbisrKyBiL25ldC93aXJlbGVzcy93ZXh0LXNtZS5jXFxuQEAgLTMxOSw2ICszMTksMTUgQEAgaW50IGNmZzgwMjExX3dleHRfc2l3Z2VuaWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRpZiAoaWVfbGVuKSB7XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBlbGVtZW50ICplbGVtO1xcbitcXG4rXFx0XFx0Zm9yX2VhY2hfZWxlbWVudChlbGVtLCBleHRyYSwgaWVfbGVuKSB7XFxuK1xcdFxcdFxcdC8qIG5vdGhpbmcgKi9cXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKCFmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZChlbGVtLCBleHRyYSwgaWVfbGVuKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbiBcXHRcXHRpZSA9IGttZW1kdXAoZXh0cmEsIGllX2xlbiwgR0ZQX0tFUk5FTCk7XFxuIFxcdFxcdGlmICghaWUpXFxuIFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNToyMjowMy4yNDYyOTc1MDdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIxNDk5MjQwNTQyNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0ZHODAyMTFcIixcbiAgICBcIkNGRzgwMjExX1dFWFRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjZmc4MDIxMV93ZXh0X3Npd2dlbmllXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBpbnB1dCB2YWxpZGF0aW9uIGZvciB3aXJlbGVzcyBpbmZvcm1hdGlvbiBlbGVtZW50cyAoSUVzKSBwYXNzZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBTSU9DU0lXR0VOSUUgd2lyZWxlc3MgZXh0ZW5zaW9uIGlvY3RsLiBJdCBpdGVyYXRlcyB0aHJvdWdoIHRoZSBlbGVtZW50IGJ1ZmZlciB1c2luZyBmb3JfZWFjaF9lbGVtZW50KCkgYW5kIHZhbGlkYXRlcyBjb21wbGV0aW9uIHdpdGggZm9yX2VhY2hfZWxlbWVudF9jb21wbGV0ZWQoKSBiZWZvcmUgY29weWluZyB0aGUgYnVmZmVyLCByZWplY3RpbmcgbWFsZm9ybWVkIGVsZW1lbnRzIHdpdGggLUVJTlZBTC4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0d29yayB3aXJlbGVzcyBjb3JlIGNvZGUgdGhhdCBjYW4gYmUgdGVzdGVkIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzIChlLmcuIHVzaW5nIG1hYzgwMjExX2h3c2ltKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzI3MjQ5NTZjNDFhNWYxMmE4ZjYwOTcxMmZlZmUyMzMxNjk3NjdkZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDE1OjIxOjU5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3dleHQtc21lLmMgYi9uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuY1xuaW5kZXggNTczYjZiMTVhNDQ2ZS4uYjU5MTRmMzY1OGRiNCAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy93ZXh0LXNtZS5jXG4rKysgYi9uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuY1xuQEAgLTMxOSw2ICszMTksMTUgQEAgaW50IGNmZzgwMjExX3dleHRfc2l3Z2VuaWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRpZiAoaWVfbGVuKSB7XG4rXHRcdGNvbnN0IHN0cnVjdCBlbGVtZW50ICplbGVtO1xuK1xuK1x0XHRmb3JfZWFjaF9lbGVtZW50KGVsZW0sIGV4dHJhLCBpZV9sZW4pIHtcbitcdFx0XHQvKiBub3RoaW5nICovXG4rXHRcdH1cbitcbitcdFx0aWYgKCFmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZChlbGVtLCBleHRyYSwgaWVfbGVuKSlcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdFx0aWUgPSBrbWVtZHVwKGV4dHJhLCBpZV9sZW4sIEdGUF9LRVJORUwpO1xuIFx0XHRpZiAoIWllKVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTU6MjI6MDMuMjQ2Mjk4ODQ3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTIwMTgyOTc5OTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgQ29kZSBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGRpZmYgYW5kIHRoZSBjb2RlYmFzZS4gSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlIHRvdWNoZXMgYG5ldC93aXJlbGVzcy93ZXh0LXNtZS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZWAgZnVuY3Rpb24uIEFscmlnaHQsIHRoYXQgdGVsbHMgbWUgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UsIGJ1dCBJIG5lZWQgdGhlIGNvbnRleHQuXG5cbkxldCdzIHN0YXJ0IGJ5IGdldHRpbmcgYSBjb3B5IG9mIGBuZXQvd2lyZWxlc3Mvd2V4dC1zbWUuY2AgYW5kIGZpZ3VyaW5nIG91dCB3aGF0J3MgY2FsbGluZyBpdCwgYW5kIGFsc28gdGhlIGNvbmZpZyBkZXBlbmRlbmNpZXMuIEknbGwgcHJvYmFibHkgdXNlIGByZWFkLWZpbGVgIHRvIGdyYWIgdGhlIHNvdXJjZSBjb2RlLCBhbmQgdGhlbiBgZ3JlcHBlcmAgdG8gc2VlIHdoZXJlIGVsc2UgaXQncyB1c2VkIGFuZCB3aGF0IEtjb25maWcgb3B0aW9ucyBhcmUgcmVsZXZhbnQuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBhbmQgd2h5IHRoaXMgc3BlY2lmaWMgc2VjdGlvbiBuZWVkZWQgdGhlIGNoYW5nZSwgYW5kIGFueSBlZGdlIGNhc2VzIHRvIHdhdGNoIGZvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEzMiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTU6MjQ6MDMuNDI5MjgxNjc0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3dpcmVsZXNzL3dleHQtc21lLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzAwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzAwOlxcdFxcdFxcdFxcdCAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKVxcbiAzMDE6XFx0e1xcbiAzMDI6XFx0XFx0c3RydWN0IGl3X3BvaW50ICpkYXRhID0gXFx1MDAyNndycXUtXFx1MDAzZWRhdGE7XFxuIDMwMzpcXHRcXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LVxcdTAwM2VpZWVlODAyMTFfcHRyO1xcbiAzMDQ6XFx0XFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fcmRldih3ZGV2LVxcdTAwM2V3aXBoeSk7XFxuIDMwNTpcXHRcXHRpbnQgaWVfbGVuID0gZGF0YS1cXHUwMDNlbGVuZ3RoO1xcbiAzMDY6XFx0XFx0dTggKmllID0gZXh0cmE7XFxuIDMwNzpcXHRcXG4gMzA4OlxcdFxcdGlmICh3ZGV2LVxcdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTilcXG4gMzA5OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gMzEwOlxcdFxcbiAzMTE6XFx0XFx0aWYgKCFpZV9sZW4pXFxuIDMxMjpcXHRcXHRcXHRpZSA9IE5VTEw7XFxuIDMxMzpcXHRcXG4gMzE0OlxcdFxcdGd1YXJkKHdpcGh5KSh3ZGV2LVxcdTAwM2V3aXBoeSk7XFxuIDMxNTpcXHRcXG4gMzE2OlxcdFxcdC8qIG5vIGNoYW5nZSAqL1xcbiAzMTc6XFx0XFx0aWYgKHdkZXYtXFx1MDAzZXdleHQuaWVfbGVuID09IGllX2xlbiBcXHUwMDI2XFx1MDAyNlxcbiAzMTg6XFx0XFx0ICAgIG1lbWNtcCh3ZGV2LVxcdTAwM2V3ZXh0LmllLCBpZSwgaWVfbGVuKSA9PSAwKVxcbiAzMTk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDMyMDpcXHRcXG4gMzIxOlxcdFxcdGlmIChpZV9sZW4pIHtcXG4gMzIyOlxcdFxcdFxcdGNvbnN0IHN0cnVjdCBlbGVtZW50ICplbGVtO1xcbiAzMjM6XFx0XFxuIDMyNDpcXHRcXHRcXHRmb3JfZWFjaF9lbGVtZW50KGVsZW0sIGV4dHJhLCBpZV9sZW4pIHtcXG4gMzI1OlxcdFxcdFxcdFxcdC8qIG5vdGhpbmcgKi9cXG4gMzI2OlxcdFxcdFxcdH1cXG4gMzI3OlxcdFxcbiAzMjg6XFx0XFx0XFx0aWYgKCFmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZChlbGVtLCBleHRyYSwgaWVfbGVuKSlcXG4gMzI5OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAzMzA6XFx0XFxuIDMzMTpcXHRcXHRcXHRpZSA9IGttZW1kdXAoZXh0cmEsIGllX2xlbiwgR0ZQX0tFUk5FTCk7XFxuIDMzMjpcXHRcXHRcXHRpZiAoIWllKVxcbiAzMzM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDMzNDpcXHRcXHR9IGVsc2Uge1xcbiAzMzU6XFx0XFx0XFx0aWUgPSBOVUxMO1xcbiAzMzY6XFx0XFx0fVxcbiAzMzc6XFx0XFxuIDMzODpcXHRcXHRrZnJlZSh3ZGV2LVxcdTAwM2V3ZXh0LmllKTtcXG4gMzM5OlxcdFxcdHdkZXYtXFx1MDAzZXdleHQuaWUgPSBpZTtcXG4gMzQwOlxcdFxcdHdkZXYtXFx1MDAzZXdleHQuaWVfbGVuID0gaWVfbGVuO1xcbiAzNDE6XFx0XFxuIDM0MjpcXHRcXHRpZiAod2Rldi1cXHUwMDNlY29ubilcXG4gMzQzOlxcdFxcdFxcdHJldHVybiBjZmc4MDIxMV9kaXNjb25uZWN0KHJkZXYsIGRldixcXG4gMzQ0OlxcdFxcdFxcdFxcdFxcdFxcdCAgIFdMQU5fUkVBU09OX0RFQVVUSF9MRUFWSU5HLCBmYWxzZSk7XFxuIDM0NTpcXHRcXG4gMzQ2OlxcdFxcdC8qIHVzZXJzcGFjZSBiZXR0ZXIgbm90IHRoaW5rIHdlJ2xsIHJlY29ubmVjdCAqL1xcbiAzNDc6XFx0XFx0cmV0dXJuIDA7XFxuIDM0ODpcXHR9XFxuIDM0OTpcXHRcXG4gMzUwOlxcdGludCBjZmc4MDIxMV93ZXh0X3Npd21sbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gMzUxOlxcdFxcdFxcdFxcdCAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbyxcXG4gMzUyOlxcdFxcdFxcdFxcdCAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpXFxuIDM1MzpcXHR7XFxuIDM1NDpcXHRcXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LVxcdTAwM2VpZWVlODAyMTFfcHRyO1xcbiAzNTU6XFx0XFx0c3RydWN0IGl3X21sbWUgKm1sbWUgPSAoc3RydWN0IGl3X21sbWUgKilleHRyYTtcXG4gMzU2OlxcdFxcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjtcXG4gMzU3OlxcdFxcbiAzNTg6XFx0XFx0aWYgKCF3ZGV2KVxcbiAzNTk6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNToyNDowMy40MjkzNzgwNjRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDQ0ODEyMjMxNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgQ29tcGlsYXRpb24gb2YgYG5ldC93aXJlbGVzcy93ZXh0LXNtZS5jYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBgbmV0L3dpcmVsZXNzL3dleHQtc21lLmNgIGlzIGJlaW5nIGNvbXBpbGVkIGFuZCB3aGF0IGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmUgaW1wYWN0aW5nIGl0cyBidWlsZCBwcm9jZXNzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIGJ1aWxkIHN5c3RlbSBpdHNlbGYuIEknbGwgbmVlZCB0byBsb2NhdGUgdGhlIHJlbGV2YW50IE1ha2VmaWxlcyDigJMgc3RhcnRpbmcgd2l0aGluIHRoZSBgbmV0L3dpcmVsZXNzL2AgZGlyZWN0b3J5IHNlZW1zIGxvZ2ljYWwuIEknbGwgYWxzbyBuZWVkIHRvIGNoZWNrIHRoZSBhc3NvY2lhdGVkIGBLY29uZmlnYCBmaWxlczsgdGhhdCdzIHdoZXJlIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZ292ZXJuIGl0cyBjb21waWxhdGlvbiB3aWxsIHJlc2lkZS4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNjQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE1OjI1OjQ3LjkxMDYwMzUyN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTk5MDIzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3ZXh0LXNtZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvd2lyZWxlc3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL01ha2VmaWxlPTEzPWNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX0RFQlVHRlMpICs9IGRlYnVnZnMub1xcbm5ldC93aXJlbGVzcy9NYWtlZmlsZToxNDpjZmc4MDIxMS0kKENPTkZJR19DRkc4MDIxMV9XRVhUKSArPSB3ZXh0LWNvbXBhdC5vIHdleHQtc21lLm9cXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGUtMTUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE1OjI1OjQ4LjAwNjYwMDg1NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwNzMwOTk3ODIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipOYXZpZ2F0aW5nIHRoZSBXaXJlbGVzcyBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYENPTkZJR19DRkc4MDIxMV9XRVhUYCBhbmQgYENPTkZJR19DRkc4MDIxMWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBgbmV0L3dpcmVsZXNzL0tjb25maWdgLiBJdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgaW50cmljYWNpZXMgb2Ygd2lyZWxlc3MgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gVGhhdCBgS2NvbmZpZ2AgZmlsZSBzaG91bGQgaG9sZCB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRob3NlIGZsYWdzIGFyZSByZWxhdGVkIGFuZCB3aGF0IGVsc2UgdGhleSBtaWdodCBkZXBlbmQgb24uIEhvcGVmdWxseSwgaXQncyBhbGwgc3RyYWlnaHRmb3J3YXJkLCBhbmQgSSBjYW4gcXVpY2tseSBtYXAgb3V0IHRoZSBuZWNlc3NhcnkgcmVsYXRpb25zaGlwcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY3OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE1OjI2OjM4LjczNzYwMjQ4OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mzg1ODIzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDRkc4MDIxMV9XRVhUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvd2lyZWxlc3MvS2NvbmZpZz01PWNvbmZpZyBXRVhUX0NPUkVcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy02LVxcdGRlZl9ib29sIHlcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo3OlxcdGRlcGVuZHMgb24gQ0ZHODAyMTFfV0VYVCB8fCBXSVJFTEVTU19FWFRcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy04LVxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWc9MTc3PWNvbmZpZyBDRkc4MDIxMV9DUkRBX1NVUFBPUlRcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4Ni1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxODc6Y29uZmlnIENGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODgtXFx0Ym9vbCBcXFwiY2ZnODAyMTEgd2lyZWxlc3MgZXh0ZW5zaW9ucyBjb21wYXRpYmlsaXR5XFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL01ha2VmaWxlPTEzPWNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX0RFQlVHRlMpICs9IGRlYnVnZnMub1xcbm5ldC93aXJlbGVzcy9NYWtlZmlsZToxNDpjZmc4MDIxMS0kKENPTkZJR19DRkc4MDIxMV9XRVhUKSArPSB3ZXh0LWNvbXBhdC5vIHdleHQtc21lLm9cXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGUtMTUtXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jPTU0Nj1zdHJ1Y3Qgd2lwaHkgKndpcGh5X25ld19ubShjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfb3BzICpvcHMsIGludCBzaXplb2ZfcHJpdixcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmMtNjMzLVxcdFxcdFxcdCAgY2ZnODAyMTFfZGZzX2NoYW5uZWxzX3VwZGF0ZV93b3JrKTtcXG5uZXQvd2lyZWxlc3MvY29yZS5jOjYzNDojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTYzNS1cXHRyZGV2LVxcdTAwM2V3aXBoeS53ZXh0ID0gXFx1MDAyNmNmZzgwMjExX3dleHRfaGFuZGxlcjtcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmM9MTQwND1zdGF0aWMgdm9pZCBfY2ZnODAyMTFfdW5yZWdpc3Rlcl93ZGV2KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE0NDMtXFxubmV0L3dpcmVsZXNzL2NvcmUuYzoxNDQ0OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTQ0NS1cXHRrZnJlZV9zZW5zaXRpdmUod2Rldi1cXHUwMDNld2V4dC5rZXlzKTtcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmM9MTQ5OD12b2lkIGNmZzgwMjExX2xlYXZlX2xvY2tlZChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE1MjItXFxubmV0L3dpcmVsZXNzL2NvcmUuYzoxNTIzOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTUyNC1cXHRcXHRrZnJlZSh3ZGV2LVxcdTAwM2V3ZXh0LmllKTtcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmM9MTYwOT12b2lkIGNmZzgwMjExX2luaXRfd2RldihzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNjE3LVxcbm5ldC93aXJlbGVzcy9jb3JlLmM6MTYxODojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE2MTktXFx0d2Rldi1cXHUwMDNld2V4dC5kZWZhdWx0X2tleSA9IC0xO1xcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYz0xNzAyPXN0YXRpYyBpbnQgY2ZnODAyMTFfbmV0ZGV2X25vdGlmaWVyX2NhbGwoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTc3Ni1cXHRcXHRzd2l0Y2ggKHdkZXYtXFx1MDAzZWlmdHlwZSkge1xcbm5ldC93aXJlbGVzcy9jb3JlLmM6MTc3NzojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE3NzgtXFx0XFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzpcXG4tLVxcbm5ldC93aXJlbGVzcy9pYnNzLmM9MTk9dm9pZCBfX2NmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCxcXG4tLVxcbm5ldC93aXJlbGVzcy9pYnNzLmMtMjMtXFx0c3RydWN0IGNmZzgwMjExX2JzcyAqYnNzO1xcbm5ldC93aXJlbGVzcy9pYnNzLmM6MjQ6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL2lic3MuYy0yNS1cXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XFxuLS1cXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTUxLVxcdFxcdFxcdFxcdEdGUF9LRVJORUwpO1xcbm5ldC93aXJlbGVzcy9pYnNzLmM6NTI6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL2lic3MuYy01My1cXHRtZW1zZXQoXFx1MDAyNndycXUsIDAsIHNpemVvZih3cnF1KSk7XFxuLS1cXG5uZXQvd2lyZWxlc3MvaWJzcy5jPTg3PWludCBfX2NmZzgwMjExX2pvaW5faWJzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTE0MC1cXG5uZXQvd2lyZWxlc3MvaWJzcy5jOjE0MTojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTE0Mi1cXHR3ZGV2LVxcdTAwM2V3ZXh0Lmlic3MuY2hhbmRlZiA9IHBhcmFtcy1cXHUwMDNlY2hhbmRlZjtcXG4tLVxcbm5ldC93aXJlbGVzcy9pYnNzLmM9MTU2PXZvaWQgY2ZnODAyMTFfY2xlYXJfaWJzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG5vd2V4dClcXG4tLVxcbm5ldC93aXJlbGVzcy9pYnNzLmMtMTg0LVxcdG1lbXNldChcXHUwMDI2d2Rldi1cXHUwMDNldS5pYnNzLmNoYW5kZWYsIDAsIHNpemVvZih3ZGV2LVxcdTAwM2V1Lmlic3MuY2hhbmRlZikpO1xcbm5ldC93aXJlbGVzcy9pYnNzLmM6MTg1OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9pYnNzLmMtMTg2LVxcdGlmICghbm93ZXh0KVxcbi0tXFxubmV0L3dpcmVsZXNzL2lic3MuYz0xOTI9aW50IGNmZzgwMjExX2xlYXZlX2lic3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL2lic3MuYy0yMTMtXFxubmV0L3dpcmVsZXNzL2lic3MuYzoyMTQ6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL2lic3MuYy0yMTUtaW50IGNmZzgwMjExX2lic3Nfd2V4dF9qb2luKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4tLVxcbm5ldC93aXJlbGVzcy9tbG1lLmM9MjM0PXZvaWQgY2ZnODAyMTFfbWljaGFlbF9taWNfZmFpbHVyZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkcixcXG4tLVxcbm5ldC93aXJlbGVzcy9tbG1lLmMtMjM5LVxcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX3JkZXYod2lwaHkpO1xcbm5ldC93aXJlbGVzcy9tbG1lLmM6MjQwOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9tbG1lLmMtMjQxLVxcdHVuaW9uIGl3cmVxX2RhdGEgd3JxdTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NTQ1OT1zdGF0aWMgaW50IG5sODAyMTFfc2V0X2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01NTAxLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NTUwMjojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTU1MDMtXFx0XFx0d2Rldi1cXHUwMDNld2V4dC5kZWZhdWx0X2tleSA9IGtleS5pZHg7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTU1MjQtXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo1NTI1OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTUyNi1cXHRcXHR3ZGV2LVxcdTAwM2V3ZXh0LmRlZmF1bHRfbWdtdF9rZXkgPSBrZXkuaWR4O1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz01NjM3PXN0YXRpYyBpbnQgbmw4MDIxMV9kZWxfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTU2ODYtXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo1Njg3OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTY4OC1cXHRpZiAoIWVycikge1xcbi0tXFxubmV0L3dpcmVsZXNzL3NjYW4uYz0xMTE0PXZvaWQgX19fY2ZnODAyMTFfc2Nhbl9kb25lKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4tLVxcbm5ldC93aXJlbGVzcy9zY2FuLmMtMTExOS1cXHRzdHJ1Y3Qgc2tfYnVmZiAqbXNnO1xcbm5ldC93aXJlbGVzcy9zY2FuLmM6MTEyMDojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTExMjEtXFx0dW5pb24gaXdyZXFfZGF0YSB3cnF1O1xcbi0tXFxubmV0L3dpcmVsZXNzL3NjYW4uYy0xMTYyLVxcbm5ldC93aXJlbGVzcy9zY2FuLmM6MTE2MzojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTExNjQtXFx0aWYgKHdkZXYtXFx1MDAzZW5ldGRldiBcXHUwMDI2XFx1MDAyNiAhcmVxdWVzdC1cXHUwMDNlaW5mby5hYm9ydGVkKSB7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jPTM0MTQ9dm9pZCBjZmc4MDIxMV91cGRhdGVfYXNzb2NfYnNzX2VudHJ5KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTM0ODctXFxubmV0L3dpcmVsZXNzL3NjYW4uYzozNDg4OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9zY2FuLmMtMzQ4OS1zdGF0aWMgc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpcXG4tLVxcbm5ldC93aXJlbGVzcy9zbWUuYz03MzU9dm9pZCBfX2NmZzgwMjExX2Nvbm5lY3RfcmVzdWx0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvc21lLmMtNzQzLVxcdHU4IGNvdW50cnlfZGF0YWxlbjtcXG5uZXQvd2lyZWxlc3Mvc21lLmM6NzQ0OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9zbWUuYy03NDUtXFx0dW5pb24gaXdyZXFfZGF0YSB3cnF1O1xcbi0tXFxubmV0L3dpcmVsZXNzL3NtZS5jLTc3NC1cXG5uZXQvd2lyZWxlc3Mvc21lLmM6Nzc1OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9zbWUuYy03NzYtXFx0aWYgKHdleHRldiBcXHUwMDI2XFx1MDAyNiAhY3ItXFx1MDAzZXZhbGlkX2xpbmtzKSB7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvc21lLmM9MTA3OT12b2lkIF9fY2ZnODAyMTFfcm9hbWVkKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvc21lLmMtMTA4MS17XFxubmV0L3dpcmVsZXNzL3NtZS5jOjEwODI6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL3NtZS5jLTEwODMtXFx0dW5pb24gaXdyZXFfZGF0YSB3cnF1O1xcbi0tXFxubmV0L3dpcmVsZXNzL3NtZS5jLTExMzQtXFxubmV0L3dpcmVsZXNzL3NtZS5jOjExMzU6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL3NtZS5jLTExMzYtXFx0aWYgKCFpbmZvLVxcdTAwM2V2YWxpZF9saW5rcykge1xcbi0tXFxubmV0L3dpcmVsZXNzL3NtZS5jPTEzNDM9dm9pZCBfX2NmZzgwMjExX2Rpc2Nvbm5lY3RlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqaWUsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvc21lLmMtMTM0OC1cXHRpbnQgaTtcXG5uZXQvd2lyZWxlc3Mvc21lLmM6MTM0OTojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3Mvc21lLmMtMTM1MC1cXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvc21lLmMtMTM5NC1cXG5uZXQvd2lyZWxlc3Mvc21lLmM6MTM5NTojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3Mvc21lLmMtMTM5Ni1cXHRtZW1zZXQoXFx1MDAyNndycXUsIDAsIHNpemVvZih3cnF1KSk7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmM9NjM3PUVYUE9SVF9TWU1CT0wod2lyZWxlc3Nfc2VuZF9ldmVudCk7XFxubmV0L3dpcmVsZXNzL3dleHQtY29yZS5jLTYzOC1cXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmM6NjM5OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYy02NDAtc3RhdGljIHZvaWQgd2lyZWxlc3Nfd2Fybl9jZmc4MDIxMV93ZXh0KHZvaWQpXFxuLS1cXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmM9NjQ5PXN0cnVjdCBpd19zdGF0aXN0aWNzICpnZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYy02NTYtXFxubmV0L3dpcmVsZXNzL3dleHQtY29yZS5jOjY1NzojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmMtNjU4LVxcdGlmIChkZXYtXFx1MDAzZWllZWU4MDIxMV9wdHIgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYz02OTc9c3RhdGljIGl3X2hhbmRsZXIgZ2V0X2hhbmRsZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZClcXG4tLVxcbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYy03MDItXFxubmV0L3dpcmVsZXNzL3dleHQtY29yZS5jOjcwMzojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmMtNzA0LVxcdGlmIChkZXYtXFx1MDAzZWllZWU4MDIxMV9wdHIgXFx1MDAyNlxcdTAwMjYgZGV2LVxcdTAwM2VpZWVlODAyMTFfcHRyLVxcdTAwM2V3aXBoeSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNToyNjozOC44MDE0NjUyNzZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4NzQ4MjE0Njk1ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgQ0ZHODAyMTFfV0VYVGAgRGVwZW5kZW5jaWVzKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBzdXJyb3VuZGluZyBgQ0ZHODAyMTFfV0VYVGAgaW4gdGhlIGtlcm5lbCdzIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24uIEknbSBnb2luZyB0byBxdWlja2x5IG5hdmlnYXRlIG92ZXIgdG8gYG5ldC93aXJlbGVzcy9LY29uZmlnYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdGFrZSBhIGhhcmQgbG9vayBhdCB0aGUgYEtjb25maWdgIGZpbGUgYW5kIG1ldGljdWxvdXNseSB0cmFjZSBhbGwgZGVwZW5kZW5jaWVzIGFuZCBkZWZhdWx0cyBhc3NvY2lhdGVkIHdpdGggdGhlIGBDRkc4MDIxMV9XRVhUYCBzeW1ib2wuIFRoaXMgd2lsbCBxdWlja2x5IGdpdmUgbWUgYW4gb3ZlcnZpZXcgb2YgdGhlIGJ1aWxkIHNldHRpbmdzIHRoYXQgYWZmZWN0IHRoaXMsIGFuZCBpZGVudGlmeSBhbnkga25vY2stb24gZWZmZWN0cyB0aGF0IG5lZWQgdG8gYmUgY29uc2lkZXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzAxMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE1OjQxOjEzLjYyMjkzNzMyN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjY5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvd2lyZWxlc3MvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxODA6XFx0XFx0aGVscFxcbiAxODE6XFx0XFx0ICBZb3Ugc2hvdWxkIGVuYWJsZSB0aGlzIG9wdGlvbiB1bmxlc3MgeW91IGtub3cgZm9yIHN1cmUgeW91IGhhdmUgbm9cXG4gMTgyOlxcdFxcdCAgbmVlZCBmb3IgaXQsIGZvciBleGFtcGxlIHdoZW4gdXNpbmcgdGhlIHJlZ3VsYXRvcnkgZGF0YWJhc2UgbG9hZGVkIGFzXFxuIDE4MzpcXHRcXHQgIGEgZmlybXdhcmUgZmlsZS5cXG4gMTg0OlxcdFxcbiAxODU6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAxODY6XFx0XFxuIDE4NzpcXHRjb25maWcgQ0ZHODAyMTFfV0VYVFxcbiAxODg6XFx0XFx0Ym9vbCBcXFwiY2ZnODAyMTEgd2lyZWxlc3MgZXh0ZW5zaW9ucyBjb21wYXRpYmlsaXR5XFxcIlxcbiAxODk6XFx0XFx0c2VsZWN0IFdFWFRfQ09SRVxcbiAxOTA6XFx0XFx0aGVscFxcbiAxOTE6XFx0XFx0ICBFbmFibGUgdGhpcyBvcHRpb24gaWYgeW91IG5lZWQgb2xkIHVzZXJzcGFjZSBmb3Igd2lyZWxlc3NcXG4gMTkyOlxcdFxcdCAgZXh0ZW5zaW9ucyB3aXRoIGNmZzgwMjExLWJhc2VkIGRyaXZlcnMuXFxuIDE5MzpcXHRcXG4gMTk0OlxcdGNvbmZpZyBDRkc4MDIxMV9LVU5JVF9URVNUXFxuIDE5NTpcXHRcXHR0cmlzdGF0ZSBcXFwiS1VuaXQgdGVzdHMgZm9yIGNmZzgwMjExXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuIDE5NjpcXHRcXHRkZXBlbmRzIG9uIEtVTklUXFxuIDE5NzpcXHRcXHRkZXBlbmRzIG9uIENGRzgwMjExXFxuIDE5ODpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAxOTk6XFx0XFx0aGVscFxcbiAyMDA6XFx0XFx0ICBFbmFibGUgdGhpcyBvcHRpb24gdG8gdGVzdCBjZmc4MDIxMSBmdW5jdGlvbnMgd2l0aCBrdW5pdC5cXG4gMjAxOlxcdFxcbiAyMDI6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAyMDM6XFx0XFxuIDIwNDpcXHRlbmRpZiAjIENGRzgwMjExXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE1OjQxOjEzLjYyMjk5NjIyN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTIzMjg5MTIzMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIEkgbmVlZCB0byBkZWx2ZSBpbnRvIGBuZXQvd2lyZWxlc3MvS2NvbmZpZ2AuIFNwZWNpZmljYWxseSwgSSdtIGFpbWluZyB0byBnZXQgYSBoYW5kbGUgb24gYENGRzgwMjExYC4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBzdGFydCwgYW5kIHdoZXJlIEknbSBnb2luZyB0byBmaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRpbWUgdG8gc2VlIHdoYXQncyB3aGF0IGluIHRoZXJlLiBUaGlzIGlzIGEgY29tbW9uIHN0YXJ0aW5nIHBvaW50IHdoZW4gY29uZmlndXJpbmcgdGhlIHdpcmVsZXNzIHN0YWNrLCBhbmQgdGhlIG9wdGlvbnMgZm91bmQgaGVyZSBvZnRlbiBkaWN0YXRlIGEgbG90IG9mIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIHdpcmVsZXNzIHN1YnN5c3RlbXMgSSdtIHdvcmtpbmcgd2l0aC4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjIwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNTo0NjoyNS45NTE5MTI1NDFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgV0lSRUxFU1NfRVhUXFxuICAgMzpcXHRcXHRib29sXFxuICAgNDpcXHRcXG4gICA1OlxcdGNvbmZpZyBXRVhUX0NPUkVcXG4gICA2OlxcdFxcdGRlZl9ib29sIHlcXG4gICA3OlxcdFxcdGRlcGVuZHMgb24gQ0ZHODAyMTFfV0VYVCB8fCBXSVJFTEVTU19FWFRcXG4gICA4OlxcdFxcbiAgIDk6XFx0Y29uZmlnIFdFWFRfUFJPQ1xcbiAgMTA6XFx0XFx0ZGVmX2Jvb2wgeVxcbiAgMTE6XFx0XFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXFxuICAxMjpcXHRcXHRkZXBlbmRzIG9uIFdFWFRfQ09SRVxcbiAgMTM6XFx0XFxuICAxNDpcXHRjb25maWcgV0VYVF9QUklWXFxuICAxNTpcXHRcXHRib29sXFxuICAxNjpcXHRcXG4gIDE3OlxcdGNvbmZpZyBDRkc4MDIxMVxcbiAgMTg6XFx0XFx0dHJpc3RhdGUgXFxcImNmZzgwMjExIC0gd2lyZWxlc3MgY29uZmlndXJhdGlvbiBBUElcXFwiXFxuICAxOTpcXHRcXHRkZXBlbmRzIG9uIFJGS0lMTCB8fCAhUkZLSUxMXFxuICAyMDpcXHRcXHRzZWxlY3QgRldfTE9BREVSXFxuICAyMTpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDIyOlxcdFxcdCMgbWF5IG5lZWQgdG8gdXBkYXRlIHRoaXMgd2hlbiBjZXJ0aWZpY2F0ZXMgYXJlIGNoYW5nZWQgYW5kIGFyZVxcbiAgMjM6XFx0XFx0IyB1c2luZyBhIGRpZmZlcmVudCBhbGdvcml0aG0sIHRob3VnaCByaWdodCBub3cgdGhleSBzaG91bGRuJ3RcXG4gIDI0OlxcdFxcdCMgKHRoaXMgaXMgaGVyZSByYXRoZXIgdGhhbiBiZWxvdyB0byBhbGxvdyBpdCB0byBiZSBhIG1vZHVsZSlcXG4gIDI1OlxcdFxcdHNlbGVjdCBDUllQVE9fU0hBMjU2IGlmIENGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xcbiAgMjY6XFx0XFx0aGVscFxcbiAgMjc6XFx0XFx0ICBjZmc4MDIxMSBpcyB0aGUgTGludXggd2lyZWxlc3MgTEFOICg4MDIuMTEpIGNvbmZpZ3VyYXRpb24gQVBJLlxcbiAgMjg6XFx0XFx0ICBFbmFibGUgdGhpcyBpZiB5b3UgaGF2ZSBhIHdpcmVsZXNzIGRldmljZS5cXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiByZWZlciB0byBkb2N1bWVudGF0aW9uIG9uIHRoZSB3aXJlbGVzcyB3aWtpOlxcbiAgMzE6XFx0XFxuICAzMjpcXHRcXHQgIGh0dHBzOi8vd2lyZWxlc3Mud2lraS5rZXJuZWwub3JnL2VuL2RldmVsb3BlcnMvRG9jdW1lbnRhdGlvbi9jZmc4MDIxMVxcbiAgMzM6XFx0XFxuICAzNDpcXHRcXHQgIFdoZW4gYnVpbHQgYXMgYSBtb2R1bGUgaXQgd2lsbCBiZSBjYWxsZWQgY2ZnODAyMTEuXFxuICAzNTpcXHRcXG4gIDM2OlxcdGlmIENGRzgwMjExXFxuICAzNzpcXHRcXG4gIDM4OlxcdGNvbmZpZyBOTDgwMjExX1RFU1RNT0RFXFxuICAzOTpcXHRcXHRib29sIFxcXCJubDgwMjExIHRlc3Rtb2RlIGNvbW1hbmRcXFwiXFxuICA0MDpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE1OjQ2OjI1Ljk1MjAxOTk0MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDIzMDU2MTE5ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgYGNmZzgwMjExX3dleHRfc2l3Z2VuaWVgIEZ1bmN0aW9uIENhbGwqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBjZmc4MDIxMV93ZXh0X3Npd2dlbmllYCBpcyBhY3R1YWxseSB1c2VkLiBJIGtub3cgaXRzIHB1cnBvc2UsIGJ1dCBrbm93aW5nIHRoZSBjb250ZXh0IG9mIGl0cyBjYWxscyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgb3ZlcmFsbCByb2xlIGFuZCBwb3RlbnRpYWwgaW1wYWN0LiBTbywgZmlyc3QgdGhpbmdzIGZpcnN0LCBJJ20gZ29pbmcgdG8gcnVuIGEgcXVpY2sgc2VhcmNoLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBpbiB0aGUga2VybmVsIGNvZGUgdGhhdCB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gaXMgZ2V0dGluZyBjYWxsZWQuIE5vIHBvaW50IGluIHRyeWluZyB0byB0cmFjZSB0aGUgbG9naWMgbWFudWFsbHksIGxldCdzIHN0YXJ0IHdpdGggYSBiaXQgb2YgY29kZSBhcmNoYWVvbG9neS4gTGV0J3Mgc2VlIHdoYXQgdGhlIGdyZXAgY29tbWFuZCB3aWxsIHR1cm4gdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzNDgsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE1OjQ4OjQ4LjI1NzYzNTY1NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM2MzUwNjI4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjZmc4MDIxMV93ZXh0X3Npd2dlbmllXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jPTE0ODQ9c3RhdGljIGNvbnN0IGl3X2hhbmRsZXIgY2ZnODAyMTFfaGFuZGxlcnNbXSA9IHtcXG4tLVxcbm5ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jLTE1MTEtXFx0SVdfSEFORExFUihTSU9DR0lXUE9XRVIsXFx0Y2ZnODAyMTFfd2V4dF9naXdwb3dlciksXFxubmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmM6MTUxMjpcXHRJV19IQU5ETEVSKFNJT0NTSVdHRU5JRSxcXHRjZmc4MDIxMV93ZXh0X3Npd2dlbmllKSxcXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYy0xNTEzLVxcdElXX0hBTkRMRVIoU0lPQ1NJV0FVVEgsXFx0XFx0Y2ZnODAyMTFfd2V4dF9zaXdhdXRoKSxcXG4tLVxcbm5ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5oPTQ2PWludCBjZmc4MDIxMV93ZXh0X3Npd21sbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5oLTQ4LVxcdFxcdFxcdCAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpO1xcbm5ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5oOjQ5OmludCBjZmc4MDIxMV93ZXh0X3Npd2dlbmllKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmgtNTAtXFx0XFx0XFx0ICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbyxcXG4tLVxcbm5ldC93aXJlbGVzcy93ZXh0LXNtZS5jPTI3Mz1pbnQgY2ZnODAyMTFfbWdkX3dleHRfZ2l3YXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC93aXJlbGVzcy93ZXh0LXNtZS5jLTI5Ny1cXG5uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuYzoyOTg6aW50IGNmZzgwMjExX3dleHRfc2l3Z2VuaWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuYy0yOTktXFx0XFx0XFx0ICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTU6NDg6NTEuNjIxMTQ5MzczWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2NzU0MDQ4MDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGNmZzgwMjExX3dleHRfc2l3Z2VuaWVgIEhhbmRsZXIgZm9yIGBTSU9DU0lXR0VOSUVgKipcblxuT2theSwgc28gYGNmZzgwMjExX3dleHRfc2l3Z2VuaWVgIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIGhhbmRsaW5nIHRoZSBgU0lPQ1NJV0dFTklFYCBpb2N0bC4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuIEl0J3MgdGhlIHN0YW5kYXJkIHdpcmVsZXNzIGV4dGVuc2lvbnMgaW9jdGwsIHRoZSBvbmUgeW91J2Qgc2VuZCB0aHJvdWdoIGEgc29ja2V0IGZpbGUgZGVzY3JpcHRvciB3aXRoIGBpb2N0bChzb2NrZmQsIFNJT0NTSVdHRU5JRSwgLi4uKWAuIE5hdHVyYWxseSwgYW55IHdpcmVsZXNzIGRldmljZSBsZXZlcmFnaW5nIGBjZmc4MDIxMWAsIGxpa2UgdGhlIGBtYWM4MDIxMV9od3NpbWAgbW9kdWxlIG9yIGEgdmlydHVhbGl6ZWQgd2lyZWxlc3MgZGV2aWNlIGluIHNvbWV0aGluZyBsaWtlIHN5emthbGxlciBvciBRRU1VLCB3b3VsZCB1c2UgdGhpcyBpZiBgQ09ORklHX0NGRzgwMjExX1dFWFRgIGlzIGVuYWJsZWQuXG5cbkxldCdzIGRpdmUgaW50byB0aGUgcGF0Y2ggYW5kIHNlZSB3aGF0IGl0J3MgYWN0dWFsbHkgZG9pbmcgd2l0aGluIHRoYXQgYGNmZzgwMjExX3dleHRfc2l3Z2VuaWUoKWAgZnVuY3Rpb24uIEFoLCBoZXJlIGl0IGlzOiB0aGUgYWRkZWQgY29kZSBibG9jay4gSXQgbG9va3MgbGlrZSBpdCdzIHByaW1hcmlseSBmb2N1c2VkIG9uIHZhbGlkYXRpbmcgdGhlIElFIChJbmZvcm1hdGlvbiBFbGVtZW50KSBidWZmZXIgdGhhdCdzIHBhc3NlZCBpbiBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBTSU9DU0lXR0VOSUVgIGlvY3RsLiBJdCdzIHVzaW5nIGBmb3JfZWFjaF9lbGVtZW50KClgIGFuZCBgZm9yX2VhY2hfZWxlbWVudF9jb21wbGV0ZWQoKWAgdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBJRSBidWZmZXIsIGVuc3VyaW5nIHRoYXQgaXQncyBhIHdlbGwtZm9ybWVkIGVsZW1lbnQgbGlzdC4gSWYgdGhlIHN0cnVjdHVyZSBpcyBpbnZhbGlkIGF0IGFueSBwb2ludCBkdXJpbmcgaXRlcmF0aW9uLCBpdCByZXR1cm5zIGAtRUlOVkFMYC4gVGhpcyBpcyBhIHByZXR0eSBzdGFuZGFyZCBhcHByb2FjaCBmb3IgcGFyc2luZyBJRSBkYXRhLlxuXG5Ob3csIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYGZvcl9lYWNoX2VsZW1lbnRgIGluIHRoZSBrZXJuZWwgc291cmNlIHRvIGdldCBhIGNvbXBsZXRlIGdyYXNwIG9uIGhvdyB0aGVzZSBlbGVtZW50cyBhcmUgaXRlcmF0ZWQuIFRoYXQncyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgdmFsaWRhdGlvbiBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTAzOCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNTo0OTozOC4zNzUxOTkyODRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjc2NzMwOCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9yX2VhY2hfZWxlbWVudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL25ldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTU6NDk6MzguNDgxOTc0ODkzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY1NjMyMDYwMTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGF0IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgRGVlcCBpbnRvIHRoZSBDb2RlYmFzZTogVGhlIGBmb3JfZWFjaF9lbGVtZW50YCBRdWVzdCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ3ZlIGdvdCBhIGZlZWxpbmcgdGhlcmUncyBzb21ldGhpbmcgaW50ZXJlc3RpbmcgbHVya2luZyBhcm91bmQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBmb3JfZWFjaF9lbGVtZW50YC4gSXQncyBhIGZhaXJseSBjb21tb24gY29uc3RydWN0LCBidXQgSSBzdXNwZWN0IGl0cyB1c2UgY2FzZXMgbWlnaHQgYmUgbW9yZSBkaXZlcnNlIHRoYW4gSSBpbml0aWFsbHkgdGhvdWdodCwgb3IgbWF5YmUgSSdtIGxvb2tpbmcgZm9yIGEgc3BlY2lmaWMgdXNhZ2UgcGF0dGVybi4gSSBuZWVkIHRvIGdldCBhIHJlYWxseSBnb29kIG92ZXJ2aWV3IG9mIHdoZXJlIHRoaXMgaXMgdXNlZCB3aXRoaW4gdGhlIHByb2plY3QuIEEgd2lkZSBzZWFyY2ggd2lsbCBnZXQgbWUgdXAtdG8tc3BlZWQuXG5MZXQncyBjYXN0IGEgd2lkZSBuZXQgYWNyb3NzIHRoZSBlbnRpcmUgY29kZWJhc2UgYW5kIHNlZSB3aGF0IHBvcHMgdXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0cywgdGhlIGRhdGEgdHlwZXMgaXQncyBvcGVyYXRpbmcgb24sIGFuZCBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gRmluZGluZyBldmVyeSBpbnN0YW5jZSBvZiBgZm9yX2VhY2hfZWxlbWVudGAgaXMgdGhlIGZpcnN0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4MjMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNTo1MDo0NC4xMTQwMzkyMTZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NjU3NzIyMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2RlZmluZSBmb3JfZWFjaF9lbGVtZW50XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaWVlZTgwMjExLmg9MjcxNT1zdHJ1Y3QgZWxlbWVudCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oLTI3MjEtLyogZWxlbWVudCBpdGVyYXRpb24gaGVscGVycyAqL1xcbmluY2x1ZGUvbGludXgvaWVlZTgwMjExLmg6MjcyMjojZGVmaW5lIGZvcl9lYWNoX2VsZW1lbnQoX2VsZW0sIF9kYXRhLCBfZGF0YWxlbilcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaC0yNzIzLVxcdGZvciAoX2VsZW0gPSAoY29uc3Qgc3RydWN0IGVsZW1lbnQgKikoX2RhdGEpO1xcdFxcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvaWVlZTgwMjExLmgtMjcyOS1cXG5pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oOjI3MzA6I2RlZmluZSBmb3JfZWFjaF9lbGVtZW50X2lkKGVsZW1lbnQsIF9pZCwgZGF0YSwgZGF0YWxlbilcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaC0yNzMxLVxcdGZvcl9lYWNoX2VsZW1lbnQoZWxlbWVudCwgZGF0YSwgZGF0YWxlbilcXHRcXHRcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oLTI3MzMtXFxuaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaDoyNzM0OiNkZWZpbmUgZm9yX2VhY2hfZWxlbWVudF9leHRpZChlbGVtZW50LCBleHRpZCwgX2RhdGEsIF9kYXRhbGVuKVxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oLTI3MzUtXFx0Zm9yX2VhY2hfZWxlbWVudChlbGVtZW50LCBfZGF0YSwgX2RhdGFsZW4pXFx0XFx0XFx0XFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNTo1MDo0Ny41Nzk4MTk4MzFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODU3MzE0MTY3MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gSUVFRSA4MDIuMTEgSGVhZGVyIERlZmluaXRpb25zKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIHRoZSBMaW51eCB3aXJlbGVzcyBzdGFjay4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkYXRhIHN0cnVjdHVyZXMgYXNzb2NpYXRlZCB3aXRoIDgwMi4xMSBmcmFtZXMsIHNwZWNpZmljYWxseSBhcm91bmQgd2hlcmUgdGhleSBoYW5kbGUgdGhlIHZhcmlvdXMgZWxlbWVudHMuIExldCdzIHN0YXJ0IHdpdGggYGluY2x1ZGUvbGludXgvaWVlZTgwMjExLmhgLiAgSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHdoYXQncyBkZWZpbmVkIGFyb3VuZCBsaW5lIDI3MjAsIHRoYXQgYXJlYSBzaG91bGQgaG9sZCBzb21lIHBlcnRpbmVudCBkZWZpbml0aW9ucywgbGlrZWx5IHJlbGF0ZWQgdG8gW2luc2VydCB5b3VyIHNwZWNpZmljIGludGVyZXN0IGJhc2VkIG9uIGZpZWxkXS4gTWlnaHQgYmUgdXNlZnVsIHRvIHVuZGVyc3RhbmQgaG93IHNwZWNpZmljIGZyYW1lIHR5cGVzIG9yIGZpZWxkIGNvbmZpZ3VyYXRpb25zIGFyZSBiZWluZyBzdG9yZWQgb3IgcHJvY2Vzc2VkIGF0IHRoYXQgc3RhZ2Ugb2YgdGhlIHN0YWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM4MiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE1OjUyOjEzLjMxMTI0MDA0OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODA3NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAyNzE1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNzE1OlxcdHN0cnVjdCBlbGVtZW50IHtcXG4yNzE2OlxcdFxcdHU4IGlkO1xcbjI3MTc6XFx0XFx0dTggZGF0YWxlbjtcXG4yNzE4OlxcdFxcdHU4IGRhdGFbXTtcXG4yNzE5OlxcdH0gX19wYWNrZWQ7XFxuMjcyMDpcXHRcXG4yNzIxOlxcdC8qIGVsZW1lbnQgaXRlcmF0aW9uIGhlbHBlcnMgKi9cXG4yNzIyOlxcdCNkZWZpbmUgZm9yX2VhY2hfZWxlbWVudChfZWxlbSwgX2RhdGEsIF9kYXRhbGVuKVxcdFxcdFxcdFxcXFxcXG4yNzIzOlxcdFxcdGZvciAoX2VsZW0gPSAoY29uc3Qgc3RydWN0IGVsZW1lbnQgKikoX2RhdGEpO1xcdFxcdFxcdFxcXFxcXG4yNzI0OlxcdFxcdCAgICAgKGNvbnN0IHU4ICopKF9kYXRhKSArIChfZGF0YWxlbikgLSAoY29uc3QgdTggKilfZWxlbSBcXHUwMDNlPVxcdFxcXFxcXG4yNzI1OlxcdFxcdFxcdChpbnQpc2l6ZW9mKCpfZWxlbSkgXFx1MDAyNlxcdTAwMjZcXHRcXHRcXHRcXHRcXHRcXFxcXFxuMjcyNjpcXHRcXHQgICAgIChjb25zdCB1OCAqKShfZGF0YSkgKyAoX2RhdGFsZW4pIC0gKGNvbnN0IHU4ICopX2VsZW0gXFx1MDAzZT1cXHRcXFxcXFxuMjcyNzpcXHRcXHRcXHQoaW50KXNpemVvZigqX2VsZW0pICsgX2VsZW0tXFx1MDAzZWRhdGFsZW47XFx0XFx0XFx0XFxcXFxcbjI3Mjg6XFx0XFx0ICAgICBfZWxlbSA9IChjb25zdCBzdHJ1Y3QgZWxlbWVudCAqKShfZWxlbS1cXHUwMDNlZGF0YSArIF9lbGVtLVxcdTAwM2VkYXRhbGVuKSlcXG4yNzI5OlxcdFxcbjI3MzA6XFx0I2RlZmluZSBmb3JfZWFjaF9lbGVtZW50X2lkKGVsZW1lbnQsIF9pZCwgZGF0YSwgZGF0YWxlbilcXHRcXHRcXFxcXFxuMjczMTpcXHRcXHRmb3JfZWFjaF9lbGVtZW50KGVsZW1lbnQsIGRhdGEsIGRhdGFsZW4pXFx0XFx0XFx0XFxcXFxcbjI3MzI6XFx0XFx0XFx0aWYgKGVsZW1lbnQtXFx1MDAzZWlkID09IChfaWQpKVxcbjI3MzM6XFx0XFxuMjczNDpcXHQjZGVmaW5lIGZvcl9lYWNoX2VsZW1lbnRfZXh0aWQoZWxlbWVudCwgZXh0aWQsIF9kYXRhLCBfZGF0YWxlbilcXHRcXHRcXFxcXFxuMjczNTpcXHRcXHRmb3JfZWFjaF9lbGVtZW50KGVsZW1lbnQsIF9kYXRhLCBfZGF0YWxlbilcXHRcXHRcXHRcXFxcXFxuMjczNjpcXHRcXHRcXHRpZiAoZWxlbWVudC1cXHUwMDNlaWQgPT0gV0xBTl9FSURfRVhURU5TSU9OIFxcdTAwMjZcXHUwMDI2XFx0XFx0XFxcXFxcbjI3Mzc6XFx0XFx0XFx0ICAgIGVsZW1lbnQtXFx1MDAzZWRhdGFsZW4gXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2XFx0XFx0XFx0XFx0XFxcXFxcbjI3Mzg6XFx0XFx0XFx0ICAgIGVsZW1lbnQtXFx1MDAzZWRhdGFbMF0gPT0gKGV4dGlkKSlcXG4yNzM5OlxcdFxcbjI3NDA6XFx0I2RlZmluZSBmb3JfZWFjaF9zdWJlbGVtZW50KHN1YiwgZWxlbWVudClcXHRcXHRcXHRcXHRcXFxcXFxuMjc0MTpcXHRcXHRmb3JfZWFjaF9lbGVtZW50KHN1YiwgKGVsZW1lbnQpLVxcdTAwM2VkYXRhLCAoZWxlbWVudCktXFx1MDAzZWRhdGFsZW4pXFxuMjc0MjpcXHRcXG4yNzQzOlxcdCNkZWZpbmUgZm9yX2VhY2hfc3ViZWxlbWVudF9pZChzdWIsIGlkLCBlbGVtZW50KVxcdFxcdFxcdFxcXFxcXG4yNzQ0OlxcdFxcdGZvcl9lYWNoX2VsZW1lbnRfaWQoc3ViLCBpZCwgKGVsZW1lbnQpLVxcdTAwM2VkYXRhLCAoZWxlbWVudCktXFx1MDAzZWRhdGFsZW4pXFxuMjc0NTpcXHRcXG4yNzQ2OlxcdCNkZWZpbmUgZm9yX2VhY2hfc3ViZWxlbWVudF9leHRpZChzdWIsIGV4dGlkLCBlbGVtZW50KVxcdFxcdFxcdFxcXFxcXG4yNzQ3OlxcdFxcdGZvcl9lYWNoX2VsZW1lbnRfZXh0aWQoc3ViLCBleHRpZCwgKGVsZW1lbnQpLVxcdTAwM2VkYXRhLCAoZWxlbWVudCktXFx1MDAzZWRhdGFsZW4pXFxuMjc0ODpcXHRcXG4yNzQ5OlxcdC8qKlxcbjI3NTA6XFx0ICogZm9yX2VhY2hfZWxlbWVudF9jb21wbGV0ZWQgLSBkZXRlcm1pbmUgaWYgZWxlbWVudCBwYXJzaW5nIGNvbnN1bWVkIGFsbCBkYXRhXFxuMjc1MTpcXHQgKiBAZWxlbWVudDogZWxlbWVudCBwb2ludGVyIGFmdGVyIGZvcl9lYWNoX2VsZW1lbnQoKSBvciBmcmllbmRzXFxuMjc1MjpcXHQgKiBAZGF0YTogc2FtZSBkYXRhIHBvaW50ZXIgYXMgcGFzc2VkIHRvIGZvcl9lYWNoX2VsZW1lbnQoKSBvciBmcmllbmRzXFxuMjc1MzpcXHQgKiBAZGF0YWxlbjogc2FtZSBkYXRhIGxlbmd0aCBhcyBwYXNzZWQgdG8gZm9yX2VhY2hfZWxlbWVudCgpIG9yIGZyaWVuZHNcXG4yNzU0OlxcdCAqIFJldHVybjogJXRydWUgaWYgYWxsIGVsZW1lbnRzIHdlcmUgaXRlcmF0ZWQsICVmYWxzZSBvdGhlcndpc2U7IHNlZSBub3Rlc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNTo1MjoxMy4zMTE1MjI5NDlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg0NTAxNTU0MzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZWAgZm9yIFBvdGVudGlhbCBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYGNmZzgwMjExX3dleHRfc2l3Z2VuaWVgIGFuZCBzZWUgaWYgaXQncyBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLiBGaXJzdCwgdGhpcyBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGl0IGFkZHMgc29tZSB2YWxpZGF0aW9uIHRvIHRoZSBmdW5jdGlvbiB3aGVuIHBhcnNpbmcgSUVzIGFuZCB0aGVuIGl0IHdpbGwgcmVqZWN0IG1hbGZvcm1lZCBJRXMgYmVmb3JlIHN0b3JpbmcgdGhlbS4gU2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnQuIEFzIGZvciByZWFjaGFiaWxpdHksIGl0J3MgdHJpZ2dlcmVkIHZpYSB0aGUgYFNJT0NTSVdHRU5JRWAgdXNlcnNwYWNlIGlvY3RsLCB3aGljaCBtZWFucyBpdCBzaG91bGQgYmUgcHJldHR5IGFjY2Vzc2libGUgb24gYW55IHdpcmVsZXNzIGludGVyZmFjZSBtYW5hZ2VkIGJ5IGNmZzgwMjExIHdoZW4gV0VYVCBpcyBlbmFibGVkLiBXZSd2ZSBnb3QgZ29vZCBjb3ZlcmFnZSBoZXJlOiBJdCBzaG91bGQgd29yayBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGxpa2UgUUVNVSB3aXRoIGBtYWM4MDIxMV9od3NpbWAgb3IgYHZpcnRpby13aWZpYCwgYW5kIHN0YW5kYXJkIHNvZnRtYWMuIFRoYXQncyBhIGRlZmluaXRlIHBsdXMuXG5cbklzIGl0IHdvcnRoIHRoZSBlZmZvcnQgb2YgZnV6emluZz8gQWJzb2x1dGVseS4gVGhpcyBpcyBhIGNvcmUgd2lyZWxlc3MgZXh0ZW5zaW9uIFNNRSBoYW5kbGVyLCBhbmQgaXQncyBkaXJlY3RseSBleHBvc2VkIHRocm91Z2ggdXNlcnNwYWNlIGlvY3Rscy4gVGhhdCdzIGEgcHJpbWUgdGFyZ2V0IGZvciBmaW5kaW5nIHNvbWUgaW50ZXJlc3RpbmcgZWRnZSBjYXNlcy4gVGhlIGZvY3VzIGlzIGRlZmluaXRlbHkgb24gYGNmZzgwMjExX3dleHRfc2l3Z2VuaWVgLlxuXG5Ob3csIGxldCdzIGNoZWNrIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgYENGRzgwMjExYCBhbmQgYENGRzgwMjExX1dFWFRgIGFyZSBlbmFibGVkLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgaW4gYG5ldC9LY29uZmlnYCBhbmQgYG5ldC93aXJlbGVzcy9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0MDAsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNTo1NToxNy44MTMwODE1NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2OTk0MTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvdXJjZS4qbmV0L3dpcmVsZXNzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz00MzE9aWYgV0lSRUxFU1NcXG5uZXQvS2NvbmZpZy00MzItXFxubmV0L0tjb25maWc6NDMzOnNvdXJjZSBcXFwibmV0L3dpcmVsZXNzL0tjb25maWdcXFwiXFxubmV0L0tjb25maWctNDM0LXNvdXJjZSBcXFwibmV0L21hYzgwMjExL0tjb25maWdcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZz0xMTE9Y29uZmlnIENGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTE1LVxcdCAgSWYgc2VsZWN0ZWQsIHBvaW50IHRvIGEgZGlyZWN0b3J5IHdpdGggREVSLWVuY29kZWQgWC41MDlcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMTY6XFx0ICBjZXJ0aWZpY2F0ZXMgbGlrZSBpbiB0aGUga2VybmVsIHNvdXJjZXMgKG5ldC93aXJlbGVzcy9jZXJ0cy8pXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTE3LVxcdCAgdGhhdCBzaGFsbCBiZSBhY2NlcHRlZCBmb3IgYSBzaWduZWQgcmVndWxhdG9yeSBkYXRhYmFzZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTU6NTU6MTcuOTQwMDgxNjY3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1OTE0MTc2MzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFieXJpbnRoKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMuLi4gbGV0J3Mgc2VlLCB3aGF0IHdhcyBpdCBhZ2Fpbj8gUmlnaHQsIEkgbmVlZCB0byBnZXQgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgY29uZmlndXJhdGlvbiBzeXN0ZW0uIFdoZXJlIHRvIHN0YXJ0PyBHaXZlbiB0aGUgY29udGV4dCBvZiB3aGF0IEknbSB3b3JraW5nIG9uLCBgbmV0L0tjb25maWdgIGZlZWxzIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBwbGFjZS4gSXQncyB1c3VhbGx5IHRoZSBoZWFydCBvZiBuZXR3b3JraW5nLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIE5vdywgSSB2YWd1ZWx5IHJlbWVtYmVyIHNvbWUgY3JpdGljYWwgc3R1ZmYgYmVpbmcgaW4gdGhhdCBmaWxlLCBhbmQgYXJvdW5kIGxpbmUgNDMwLiBJJ2xsIHBpbnBvaW50IHdoYXQgSSBuZWVkLiBMZXQgbWUganVtcCB0aGVyZSBhbmQgc2VlIHdoYXQncyBoYXBwZW5pbmcuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBwYXJ0aWN1bGFyIHNlY3Rpb24gc2hvdWxkIGxpa2VseSBiZSB0aGUgZW50cnkgcG9pbnQgdG8gd2hhdCBJJ20gbG9va2luZyBmb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjE4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTU6NTU6MzMuODU0Mjg2OTM1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MjUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MjU6XFx0XFxuIDQyNjpcXHRtZW51Y29uZmlnIFdJUkVMRVNTXFxuIDQyNzpcXHRcXHRib29sIFxcXCJXaXJlbGVzc1xcXCJcXG4gNDI4OlxcdFxcdGRlcGVuZHMgb24gIVMzOTBcXG4gNDI5OlxcdFxcdGRlZmF1bHQgeVxcbiA0MzA6XFx0XFxuIDQzMTpcXHRpZiBXSVJFTEVTU1xcbiA0MzI6XFx0XFxuIDQzMzpcXHRzb3VyY2UgXFxcIm5ldC93aXJlbGVzcy9LY29uZmlnXFxcIlxcbiA0MzQ6XFx0c291cmNlIFxcXCJuZXQvbWFjODAyMTEvS2NvbmZpZ1xcXCJcXG4gNDM1OlxcdFxcbiA0MzY6XFx0ZW5kaWYgIyBXSVJFTEVTU1xcbiA0Mzc6XFx0XFxuIDQzODpcXHRzb3VyY2UgXFxcIm5ldC9yZmtpbGwvS2NvbmZpZ1xcXCJcXG4gNDM5OlxcdHNvdXJjZSBcXFwibmV0LzlwL0tjb25maWdcXFwiXFxuIDQ0MDpcXHRzb3VyY2UgXFxcIm5ldC9jZXBoL0tjb25maWdcXFwiXFxuIDQ0MTpcXHRzb3VyY2UgXFxcIm5ldC9uZmMvS2NvbmZpZ1xcXCJcXG4gNDQyOlxcdHNvdXJjZSBcXFwibmV0L3BzYW1wbGUvS2NvbmZpZ1xcXCJcXG4gNDQzOlxcdHNvdXJjZSBcXFwibmV0L2lmZS9LY29uZmlnXFxcIlxcbiA0NDQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE1OjU1OjMzLjg1NDQwNzAxNVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzkyNDExMDE4NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBBc3Nlc3NtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGVuYWJsZSBhIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHksIGFuZCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGF0aW9uc2hpcHMgd2l0aGluIGBuZXQvd2lyZWxlc3MvS2NvbmZpZ2AuIGBXSVJFTEVTU2AgaXMgdGhlIG92ZXJhcmNoaW5nIG1lbnVjb25maWcgaGVyZSwgZGVwZW5kaW5nIG9uIGEgZmV3IG90aGVyIGNvbnNpZGVyYXRpb25zLiBXaXRoaW4gYFdJUkVMRVNTYCwgYENGRzgwMjExYCBpcyB0aGUgQVBJLCBhbmQgaXQgZGVwZW5kcyBvbiB0aGluZ3MgbGlrZSBSRktJTEwuIENydWNpYWxseSwgYENGRzgwMjExYCBsZWFkcyBkaXJlY3RseSB0byBgQ0ZHODAyMTFfV0VYVGAsIHdoaWNoIEkgd2FudCwgYW5kIGlzIGEgYm9vbGVhbiBvcHRpb24uIEkgYWxzbyBjb25zaWRlcmVkIGBNQUM4MDIxMV9IV1NJTWAgYnV0IGl0IGRvZXNuJ3Qgc2VlbSB0byBoYXZlIGRpcmVjdCBkZXBlbmRlbmNpZXMgZm9yIHRoaXMuXG5cbk5leHQsIEkgbmVlZCB0byBlbnN1cmUgdGhlIHN1cHBvcnRpbmcgaW5mcmFzdHJ1Y3R1cmUgaXMgaW4gcGxhY2UuIGBORVRgIGlzIHVzdWFsbHkgZW5hYmxlZCBieSBkZWZhdWx0LCBzbyBJJ20gbm90IG92ZXJseSBjb25jZXJuZWQgdGhlcmUsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIGBORVQ9eWAuIE15IHByaW1hcnkgZm9jdXMgaGVyZSBpcyBjb25maXJtaW5nIHRoYXQgYm90aCBgQ0ZHODAyMTFgIGFuZCBgQ0ZHODAyMTFfV0VYVGAgYXJlIGVuYWJsZWQuXG5cbk5vdywgbGV0J3MgY29uZmlybSB0aGUgdGFyZ2V0IHN5bWJvbCBgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZWAgaXMgYWNjZXNzaWJsZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGl0J3MgYWNjZXNzaWJsZS4gTG9va2luZyBhdCB0aGUgY29kZSBpbiBgbmV0L3dpcmVsZXNzL3dleHQtc21lLmNgLCBpdCdzIGRlZmluZWQgYXMgYSBub24tc3RhdGljIGZ1bmN0aW9uIGBjZmc4MDIxMV93ZXh0X3Npd2dlbmllYC4gVGhpcyBpcyBleGFjdGx5IHdoYXQgSSB3YW50LiBJdCdzIGFsc28gZXhwb3J0ZWQsIHNvIGl0J3MgdmlzaWJsZSBpbiBgbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmhgLiBUaGUgZnVuY3Rpb24gaXMgdXNlZCBpbiBgbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmNgIHdpdGhpbiBgY2ZnODAyMTFfaGFuZGxlcnNgLlxuXG5TbywgdG8gc3VtbWFyaXplIGFuZCBjb25maXJtIGV2ZXJ5dGhpbmcsIEknbSBjb25maWRlbnQgaW4gdGhlIGZvbGxvd2luZzpcblxuKiAgIEkgY29uc2lkZXIgdGhpcyBpbXBvcnRhbnQgZm9yIGZ1enppbmcgKGBXb3J0aEZ1enppbmc6IHRydWVgKS5cbiogICBUaGUgZnVuY3Rpb24gdGhhdCBJIGFtIGZvY3VzaW5nIG9uIGlzIGluZGVlZCBgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZWAgKGBGb2N1c1N5bWJvbHM6IFtcImNmZzgwMjExX3dleHRfc2l3Z2VuaWVcIl1gKS5cbiogICBUaGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBhcmUgYENGRzgwMjExYCBhbmQgYENGRzgwMjExX1dFWFRgIChgRW5hYmxlQ29uZmlnczogW1wiQ0ZHODAyMTFcIiwgXCJDRkc4MDIxMV9XRVhUXCJdYCkuXG4qICAgVGhpcyBpcyBhbGwgYWJvdXQgdmFsaWRhdGluZyB3aXJlbGVzcyBpbmZvcm1hdGlvbiBlbGVtZW50cywgc3BlY2lmaWNhbGx5IHVzaW5nIGBjZmc4MDIxMV93ZXh0X3Npd2dlbmllYCB0byByZWplY3QgbWFsZm9ybWVkIElFcyBjb21pbmcgZnJvbSB1c2Vyc3BhY2UgaW9jdGwgYFNJT0NTSVdHRU5JRWAsIHRocm91Z2ggdGhlIHVzZSBvZiBgZm9yX2VhY2hfZWxlbWVudGAvYGZvcl9lYWNoX2VsZW1lbnRfY29tcGxldGVkYC5cblxuQWxyaWdodCwgSSdtIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2ODUsIk91dHB1dFRva2VucyI6MTY4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTU6NTc6NTMuMDk1NTExMjU3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ4Mzc5OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJDRkc4MDIxMV9XRVhUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2ZnODAyMTFfd2V4dF9zaXdnZW5pZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgaW5wdXQgdmFsaWRhdGlvbiBmb3Igd2lyZWxlc3MgaW5mb3JtYXRpb24gZWxlbWVudHMgKElFcykgcGFzc2VkIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgU0lPQ1NJV0dFTklFIHdpcmVsZXNzIGV4dGVuc2lvbiBpb2N0bC4gSXQgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgZWxlbWVudCBidWZmZXIgdXNpbmcgZm9yX2VhY2hfZWxlbWVudCgpIGFuZCB2YWxpZGF0ZXMgY29tcGxldGlvbiB3aXRoIGZvcl9lYWNoX2VsZW1lbnRfY29tcGxldGVkKCkgYmVmb3JlIGNvcHlpbmcgdGhlIGJ1ZmZlciwgcmVqZWN0aW5nIG1hbGZvcm1lZCBlbGVtZW50cyB3aXRoIC1FSU5WQUwuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmsgd2lyZWxlc3MgY29yZSBjb2RlIHRoYXQgY2FuIGJlIHRlc3RlZCBpbiB2aXJ0dWFsIGVudmlyb25tZW50cyAoZS5nLiB1c2luZyBtYWM4MDIxMV9od3NpbSkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0ZHODAyMTFcIixcbiAgICBcIkNGRzgwMjExX1dFWFRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjZmc4MDIxMV93ZXh0X3Npd2dlbmllXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBpbnB1dCB2YWxpZGF0aW9uIGZvciB3aXJlbGVzcyBpbmZvcm1hdGlvbiBlbGVtZW50cyAoSUVzKSBwYXNzZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBTSU9DU0lXR0VOSUUgd2lyZWxlc3MgZXh0ZW5zaW9uIGlvY3RsLiBJdCBpdGVyYXRlcyB0aHJvdWdoIHRoZSBlbGVtZW50IGJ1ZmZlciB1c2luZyBmb3JfZWFjaF9lbGVtZW50KCkgYW5kIHZhbGlkYXRlcyBjb21wbGV0aW9uIHdpdGggZm9yX2VhY2hfZWxlbWVudF9jb21wbGV0ZWQoKSBiZWZvcmUgY29weWluZyB0aGUgYnVmZmVyLCByZWplY3RpbmcgbWFsZm9ybWVkIGVsZW1lbnRzIHdpdGggLUVJTlZBTC4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0d29yayB3aXJlbGVzcyBjb3JlIGNvZGUgdGhhdCBjYW4gYmUgdGVzdGVkIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzIChlLmcuIHVzaW5nIG1hYzgwMjExX2h3c2ltKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTU6NTc6NTMuMTcwMzU0OTU1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzgzNjYxMDY5ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNTo1Nzo1My4xNzA3NjY4NDVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo4NzgzNjU2ODk0OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgaW5wdXQgdmFsaWRhdGlvbiB0byBjZmc4MDIxMV93ZXh0X3Npd2dlbmllKCkgYnkgaXRlcmF0aW5nIG92ZXIgYW5kIHZlcmlmeWluZyB0aGUgc3RydWN0dXJlIG9mIHVzZXItcHJvdmlkZWQgSUVFRSA4MDIuMTEgSW5mb3JtYXRpb24gRWxlbWVudHMgKElFcykgdXNpbmcgZm9yX2VhY2hfZWxlbWVudCgpIGFuZCBmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZCgpLiBJZiB0aGUgZWxlbWVudHMgYXJlIG1hbGZvcm1lZCwgaXQgcmV0dXJucyAtRUlOVkFMIGJlZm9yZSBhbGxvY2F0aW5nIGFuZCBzYXZpbmcgdGhlIElFIGJ1ZmZlci5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcywga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgb3IgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGUgbG9vcCBpdGVyYXRvciB2YXJpYWJsZSBgZWxlbWAgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYnkgdGhlIGBmb3JfZWFjaF9lbGVtZW50YCBtYWNybywgYW5kIHRoZSBpbnB1dCBidWZmZXIgY29udGFpbnMgZGF0YSBjb3BpZWQgZnJvbSB1c2VyIHNwYWNlLiBQb3RlbnRpYWwgYnVncyBhZGRyZXNzZWQgb3IgdG91Y2hlZCBieSB0aGlzIGxvZ2ljIChzdWNoIGFzIG1hbGZvcm1lZCBUTFYgcGFyc2luZyBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMpIGZhbGwgdW5kZXIgS0FTQU4ncyBwdXJ2aWV3LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzI3MjQ5NTZjNDFhNWYxMmE4ZjYwOTcxMmZlZmUyMzMxNjk3NjdkZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDE1OjIxOjU5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3dleHQtc21lLmMgYi9uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuY1xuaW5kZXggNTczYjZiMTVhNDQ2ZS4uYjU5MTRmMzY1OGRiNCAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy93ZXh0LXNtZS5jXG4rKysgYi9uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuY1xuQEAgLTMxOSw2ICszMTksMTUgQEAgaW50IGNmZzgwMjExX3dleHRfc2l3Z2VuaWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRpZiAoaWVfbGVuKSB7XG4rXHRcdGNvbnN0IHN0cnVjdCBlbGVtZW50ICplbGVtO1xuK1xuK1x0XHRmb3JfZWFjaF9lbGVtZW50KGVsZW0sIGV4dHJhLCBpZV9sZW4pIHtcbitcdFx0XHQvKiBub3RoaW5nICovXG4rXHRcdH1cbitcbitcdFx0aWYgKCFmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZChlbGVtLCBleHRyYSwgaWVfbGVuKSlcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdFx0aWUgPSBrbWVtZHVwKGV4dHJhLCBpZV9sZW4sIEdGUF9LRVJORUwpO1xuIFx0XHRpZiAoIWllKVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTU6NTc6NTMuMTcwNzY4ODk1WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5OTg4ODU4MTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFJlY2VudCBQYXRjaCBpbiBgbmV0L3dpcmVsZXNzL3dleHQtc21lLmNgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBjb2RlIHNob3dzIGEgcGF0Y2ggYWZmZWN0aW5nIGBuZXQvd2lyZWxlc3Mvd2V4dC1zbWUuY2AsIHNwZWNpZmljYWxseSB0aGUgYGNmZzgwMjExX3dleHRfc2l3Z2VuaWVgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiB0aGlzIGZ1bmN0aW9uIGFuZCBob3cgdGhlIHBhdGNoIG1vZGlmaWVzIGl0cyBiZWhhdmlvci4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaXMgYWRkaW5nIHNvbWUga2luZCBvZiBJbmZvcm1hdGlvbiBFbGVtZW50IChJRSkgcHJvY2Vzc2luZyB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gSSBuZWVkIHRvIGdldCB0aGUgYmlnZ2VyIHBpY3R1cmUuXG5cbkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBjZmc4MDIxMV93ZXh0X3Npd2dlbmllYCBkb2VzIGluIHRoZSBmaXJzdCBwbGFjZSwgYW5kIHRoYXQgbWVhbnMgcmVhZGluZyB0aGUgc3Vycm91bmRpbmcgY29kZS4gSSBuZWVkIHRvIHNlZSB0aGUgY29udGV4dC4gU28sIEknbGwgdXNlIGByZWFkLWZpbGVgIG9uIGBuZXQvd2lyZWxlc3Mvd2V4dC1zbWUuY2AgdG8gc2VlIHdoYXQncyBoYXBwZW5pbmcgYXJvdW5kIGxpbmUgMzE5LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIElFIGxlbmd0aCBgaWVfbGVuYCBpcyB1c2VkLCBhbmQgd2hhdCBgZXh0cmFgIHJlcHJlc2VudHMuIFRoZSBleGlzdGluZyBjb2RlIHN1Z2dlc3RzIHRoYXQgaWYgYGllX2xlbmAgaGFzIGEgbm9uLXplcm8gdmFsdWUsIHRoZW4gYSBibG9jayBvZiBtZW1vcnkgaXMgYWxsb2NhdGVkIGFuZCBjb3BpZWQgZnJvbSB0aGUgYGV4dHJhYCBhcmd1bWVudCwgYWZ0ZXIgd2hpY2ggaXQgd291bGQgYmUgcGFyc2VkLiBUaGUgcGF0Y2ggYWRkcyBhIGxvb3AgdGhhdCBsb29rcyBhdCB0aGUgYGV4dHJhYCB2YXJpYWJsZS4gSXMgdGhlcmUgc29tZSB0eXBlIG9mIHZhbGlkYXRpb24gaGFwcGVuaW5nIG5vdz8gTGV0J3MgY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNTo1ODo0My4xNTk2MzAyNTFaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA3MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3dpcmVsZXNzL3dleHQtc21lLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzAwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzAwOlxcdFxcdFxcdFxcdCAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKVxcbiAzMDE6XFx0e1xcbiAzMDI6XFx0XFx0c3RydWN0IGl3X3BvaW50ICpkYXRhID0gXFx1MDAyNndycXUtXFx1MDAzZWRhdGE7XFxuIDMwMzpcXHRcXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LVxcdTAwM2VpZWVlODAyMTFfcHRyO1xcbiAzMDQ6XFx0XFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fcmRldih3ZGV2LVxcdTAwM2V3aXBoeSk7XFxuIDMwNTpcXHRcXHRpbnQgaWVfbGVuID0gZGF0YS1cXHUwMDNlbGVuZ3RoO1xcbiAzMDY6XFx0XFx0dTggKmllID0gZXh0cmE7XFxuIDMwNzpcXHRcXG4gMzA4OlxcdFxcdGlmICh3ZGV2LVxcdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTilcXG4gMzA5OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gMzEwOlxcdFxcbiAzMTE6XFx0XFx0aWYgKCFpZV9sZW4pXFxuIDMxMjpcXHRcXHRcXHRpZSA9IE5VTEw7XFxuIDMxMzpcXHRcXG4gMzE0OlxcdFxcdGd1YXJkKHdpcGh5KSh3ZGV2LVxcdTAwM2V3aXBoeSk7XFxuIDMxNTpcXHRcXG4gMzE2OlxcdFxcdC8qIG5vIGNoYW5nZSAqL1xcbiAzMTc6XFx0XFx0aWYgKHdkZXYtXFx1MDAzZXdleHQuaWVfbGVuID09IGllX2xlbiBcXHUwMDI2XFx1MDAyNlxcbiAzMTg6XFx0XFx0ICAgIG1lbWNtcCh3ZGV2LVxcdTAwM2V3ZXh0LmllLCBpZSwgaWVfbGVuKSA9PSAwKVxcbiAzMTk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDMyMDpcXHRcXG4gMzIxOlxcdFxcdGlmIChpZV9sZW4pIHtcXG4gMzIyOlxcdFxcdFxcdGNvbnN0IHN0cnVjdCBlbGVtZW50ICplbGVtO1xcbiAzMjM6XFx0XFxuIDMyNDpcXHRcXHRcXHRmb3JfZWFjaF9lbGVtZW50KGVsZW0sIGV4dHJhLCBpZV9sZW4pIHtcXG4gMzI1OlxcdFxcdFxcdFxcdC8qIG5vdGhpbmcgKi9cXG4gMzI2OlxcdFxcdFxcdH1cXG4gMzI3OlxcdFxcbiAzMjg6XFx0XFx0XFx0aWYgKCFmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZChlbGVtLCBleHRyYSwgaWVfbGVuKSlcXG4gMzI5OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAzMzA6XFx0XFxuIDMzMTpcXHRcXHRcXHRpZSA9IGttZW1kdXAoZXh0cmEsIGllX2xlbiwgR0ZQX0tFUk5FTCk7XFxuIDMzMjpcXHRcXHRcXHRpZiAoIWllKVxcbiAzMzM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDMzNDpcXHRcXHR9IGVsc2Uge1xcbiAzMzU6XFx0XFx0XFx0aWUgPSBOVUxMO1xcbiAzMzY6XFx0XFx0fVxcbiAzMzc6XFx0XFxuIDMzODpcXHRcXHRrZnJlZSh3ZGV2LVxcdTAwM2V3ZXh0LmllKTtcXG4gMzM5OlxcdFxcdHdkZXYtXFx1MDAzZXdleHQuaWUgPSBpZTtcXG4gMzQwOlxcdFxcdHdkZXYtXFx1MDAzZXdleHQuaWVfbGVuID0gaWVfbGVuO1xcbiAzNDE6XFx0XFxuIDM0MjpcXHRcXHRpZiAod2Rldi1cXHUwMDNlY29ubilcXG4gMzQzOlxcdFxcdFxcdHJldHVybiBjZmc4MDIxMV9kaXNjb25uZWN0KHJkZXYsIGRldixcXG4gMzQ0OlxcdFxcdFxcdFxcdFxcdFxcdCAgIFdMQU5fUkVBU09OX0RFQVVUSF9MRUFWSU5HLCBmYWxzZSk7XFxuIDM0NTpcXHRcXG4gMzQ2OlxcdFxcdC8qIHVzZXJzcGFjZSBiZXR0ZXIgbm90IHRoaW5rIHdlJ2xsIHJlY29ubmVjdCAqL1xcbiAzNDc6XFx0XFx0cmV0dXJuIDA7XFxuIDM0ODpcXHR9XFxuIDM0OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTU6NTg6NDMuMTU5NzEzMDIyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc5NjQ3OTQ5NDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYGZvcl9lYWNoX2VsZW1lbnRgIGFuZCBgZm9yX2VhY2hfZWxlbWVudF9jb21wbGV0ZWRgKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHNvbWUgY29kZSBhbmQgSSBzZWUgdGhlc2UgYGZvcl9lYWNoX2VsZW1lbnRgIGFuZCBgZm9yX2VhY2hfZWxlbWVudF9jb21wbGV0ZWRgIGZ1bmN0aW9ucy4gSSdtIGdvaW5nIHRvIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZXkgYXJlLCB3aGF0IHRoZXkgZG8sIGFuZCBob3cgdGhleSBpbnRlcmFjdC4gTXkgaW5zdGluY3QgaXMgdG8gdXNlIGEgYGdyZXBgIHRvIHF1aWNrbHkgZmluZCBhbGwgaW5zdGFuY2VzIG9mIHRoZXNlIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGNvZGViYXNlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBpZGVudGlmeSB0aGVpciBkZWZpbml0aW9uLCBob3cgdGhleSdyZSBiZWluZyBjYWxsZWQsIGFuZCB3aGVyZSB0aGV5IGFyZSB1c2VkIHRvIHByb2Nlc3MgZWxlbWVudHMuIFRoaXMgZ3JlcCBzaG91bGQgaGVscCBtZSBnZXQgYSBoaWdoLWxldmVsIHNlbnNlIG9mIHRoZWlyIHJvbGUgd2l0aGluIHRoZSBiaWdnZXIgcGljdHVyZSBiZWZvcmUgSSBzdGFydCBkaWdnaW5nIGludG8gdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDQwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNjowMDowMi44MDc2NjQ5NzZaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjEwMTY3ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2RlZmluZSBmb3JfZWFjaF9lbGVtZW50XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaWVlZTgwMjExLmg9MjcxNT1zdHJ1Y3QgZWxlbWVudCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oLTI3MjEtLyogZWxlbWVudCBpdGVyYXRpb24gaGVscGVycyAqL1xcbmluY2x1ZGUvbGludXgvaWVlZTgwMjExLmg6MjcyMjojZGVmaW5lIGZvcl9lYWNoX2VsZW1lbnQoX2VsZW0sIF9kYXRhLCBfZGF0YWxlbilcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaC0yNzIzLVxcdGZvciAoX2VsZW0gPSAoY29uc3Qgc3RydWN0IGVsZW1lbnQgKikoX2RhdGEpO1xcdFxcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvaWVlZTgwMjExLmgtMjcyOS1cXG5pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oOjI3MzA6I2RlZmluZSBmb3JfZWFjaF9lbGVtZW50X2lkKGVsZW1lbnQsIF9pZCwgZGF0YSwgZGF0YWxlbilcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaC0yNzMxLVxcdGZvcl9lYWNoX2VsZW1lbnQoZWxlbWVudCwgZGF0YSwgZGF0YWxlbilcXHRcXHRcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oLTI3MzMtXFxuaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaDoyNzM0OiNkZWZpbmUgZm9yX2VhY2hfZWxlbWVudF9leHRpZChlbGVtZW50LCBleHRpZCwgX2RhdGEsIF9kYXRhbGVuKVxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oLTI3MzUtXFx0Zm9yX2VhY2hfZWxlbWVudChlbGVtZW50LCBfZGF0YSwgX2RhdGFsZW4pXFx0XFx0XFx0XFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNjowMDowNC4yNjg2ODk4NDNaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIxMDgyNDE5MDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgSUVFRSA4MDIuMTEgSGVhZGVyKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhvc2UgbWFjcm9zLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IGBmb3JfZWFjaF9lbGVtZW50YCBhbmQgYGZvcl9lYWNoX2VsZW1lbnRfY29tcGxldGVkYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGluIHRoZSBjb250ZXh0IG9mIHRoZSA4MDIuMTEgc3RhY2suIEknbSBnb2luZyB0byBqdW1wIGludG8gYGluY2x1ZGUvbGludXgvaWVlZTgwMjExLmhgLCBhbmQgaG9uZSBpbiBhcm91bmQgbGluZSAyNzE1LiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW50ZXJwbGF5IG9mIHRob3NlIG1hY3JvcyBmb3IgaXRlcmF0aXZlIGVsZW1lbnQgcHJvY2Vzc2luZywgYW5kIGhvdyBjb21wbGV0aW9uIGlzIGhhbmRsZWQuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYW55IG9wdGltaXphdGlvbiBzdHJhdGVnaWVzIGFyZSBhdCBwbGF5IHdpdGhpbiB0aGlzIGltcGxlbWVudGF0aW9uIG9mIHRob3NlIGNvbnRyb2wgZmxvd3MuIEl0J3MgdGltZSB0byBmaW5kIHRoYXQgY29kZSBhbmQgZ2V0IHRvIHRoZSBjb3JlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTk0LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTY6MDM6NDUuMzUxMTEzMDIzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMDU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3MTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI3MTU6XFx0c3RydWN0IGVsZW1lbnQge1xcbjI3MTY6XFx0XFx0dTggaWQ7XFxuMjcxNzpcXHRcXHR1OCBkYXRhbGVuO1xcbjI3MTg6XFx0XFx0dTggZGF0YVtdO1xcbjI3MTk6XFx0fSBfX3BhY2tlZDtcXG4yNzIwOlxcdFxcbjI3MjE6XFx0LyogZWxlbWVudCBpdGVyYXRpb24gaGVscGVycyAqL1xcbjI3MjI6XFx0I2RlZmluZSBmb3JfZWFjaF9lbGVtZW50KF9lbGVtLCBfZGF0YSwgX2RhdGFsZW4pXFx0XFx0XFx0XFxcXFxcbjI3MjM6XFx0XFx0Zm9yIChfZWxlbSA9IChjb25zdCBzdHJ1Y3QgZWxlbWVudCAqKShfZGF0YSk7XFx0XFx0XFx0XFxcXFxcbjI3MjQ6XFx0XFx0ICAgICAoY29uc3QgdTggKikoX2RhdGEpICsgKF9kYXRhbGVuKSAtIChjb25zdCB1OCAqKV9lbGVtIFxcdTAwM2U9XFx0XFxcXFxcbjI3MjU6XFx0XFx0XFx0KGludClzaXplb2YoKl9lbGVtKSBcXHUwMDI2XFx1MDAyNlxcdFxcdFxcdFxcdFxcdFxcXFxcXG4yNzI2OlxcdFxcdCAgICAgKGNvbnN0IHU4ICopKF9kYXRhKSArIChfZGF0YWxlbikgLSAoY29uc3QgdTggKilfZWxlbSBcXHUwMDNlPVxcdFxcXFxcXG4yNzI3OlxcdFxcdFxcdChpbnQpc2l6ZW9mKCpfZWxlbSkgKyBfZWxlbS1cXHUwMDNlZGF0YWxlbjtcXHRcXHRcXHRcXFxcXFxuMjcyODpcXHRcXHQgICAgIF9lbGVtID0gKGNvbnN0IHN0cnVjdCBlbGVtZW50ICopKF9lbGVtLVxcdTAwM2VkYXRhICsgX2VsZW0tXFx1MDAzZWRhdGFsZW4pKVxcbjI3Mjk6XFx0XFxuMjczMDpcXHQjZGVmaW5lIGZvcl9lYWNoX2VsZW1lbnRfaWQoZWxlbWVudCwgX2lkLCBkYXRhLCBkYXRhbGVuKVxcdFxcdFxcXFxcXG4yNzMxOlxcdFxcdGZvcl9lYWNoX2VsZW1lbnQoZWxlbWVudCwgZGF0YSwgZGF0YWxlbilcXHRcXHRcXHRcXFxcXFxuMjczMjpcXHRcXHRcXHRpZiAoZWxlbWVudC1cXHUwMDNlaWQgPT0gKF9pZCkpXFxuMjczMzpcXHRcXG4yNzM0OlxcdCNkZWZpbmUgZm9yX2VhY2hfZWxlbWVudF9leHRpZChlbGVtZW50LCBleHRpZCwgX2RhdGEsIF9kYXRhbGVuKVxcdFxcdFxcXFxcXG4yNzM1OlxcdFxcdGZvcl9lYWNoX2VsZW1lbnQoZWxlbWVudCwgX2RhdGEsIF9kYXRhbGVuKVxcdFxcdFxcdFxcXFxcXG4yNzM2OlxcdFxcdFxcdGlmIChlbGVtZW50LVxcdTAwM2VpZCA9PSBXTEFOX0VJRF9FWFRFTlNJT04gXFx1MDAyNlxcdTAwMjZcXHRcXHRcXFxcXFxuMjczNzpcXHRcXHRcXHQgICAgZWxlbWVudC1cXHUwMDNlZGF0YWxlbiBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjZcXHRcXHRcXHRcXHRcXFxcXFxuMjczODpcXHRcXHRcXHQgICAgZWxlbWVudC1cXHUwMDNlZGF0YVswXSA9PSAoZXh0aWQpKVxcbjI3Mzk6XFx0XFxuMjc0MDpcXHQjZGVmaW5lIGZvcl9lYWNoX3N1YmVsZW1lbnQoc3ViLCBlbGVtZW50KVxcdFxcdFxcdFxcdFxcXFxcXG4yNzQxOlxcdFxcdGZvcl9lYWNoX2VsZW1lbnQoc3ViLCAoZWxlbWVudCktXFx1MDAzZWRhdGEsIChlbGVtZW50KS1cXHUwMDNlZGF0YWxlbilcXG4yNzQyOlxcdFxcbjI3NDM6XFx0I2RlZmluZSBmb3JfZWFjaF9zdWJlbGVtZW50X2lkKHN1YiwgaWQsIGVsZW1lbnQpXFx0XFx0XFx0XFxcXFxcbjI3NDQ6XFx0XFx0Zm9yX2VhY2hfZWxlbWVudF9pZChzdWIsIGlkLCAoZWxlbWVudCktXFx1MDAzZWRhdGEsIChlbGVtZW50KS1cXHUwMDNlZGF0YWxlbilcXG4yNzQ1OlxcdFxcbjI3NDY6XFx0I2RlZmluZSBmb3JfZWFjaF9zdWJlbGVtZW50X2V4dGlkKHN1YiwgZXh0aWQsIGVsZW1lbnQpXFx0XFx0XFx0XFxcXFxcbjI3NDc6XFx0XFx0Zm9yX2VhY2hfZWxlbWVudF9leHRpZChzdWIsIGV4dGlkLCAoZWxlbWVudCktXFx1MDAzZWRhdGEsIChlbGVtZW50KS1cXHUwMDNlZGF0YWxlbilcXG4yNzQ4OlxcdFxcbjI3NDk6XFx0LyoqXFxuMjc1MDpcXHQgKiBmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZCAtIGRldGVybWluZSBpZiBlbGVtZW50IHBhcnNpbmcgY29uc3VtZWQgYWxsIGRhdGFcXG4yNzUxOlxcdCAqIEBlbGVtZW50OiBlbGVtZW50IHBvaW50ZXIgYWZ0ZXIgZm9yX2VhY2hfZWxlbWVudCgpIG9yIGZyaWVuZHNcXG4yNzUyOlxcdCAqIEBkYXRhOiBzYW1lIGRhdGEgcG9pbnRlciBhcyBwYXNzZWQgdG8gZm9yX2VhY2hfZWxlbWVudCgpIG9yIGZyaWVuZHNcXG4yNzUzOlxcdCAqIEBkYXRhbGVuOiBzYW1lIGRhdGEgbGVuZ3RoIGFzIHBhc3NlZCB0byBmb3JfZWFjaF9lbGVtZW50KCkgb3IgZnJpZW5kc1xcbjI3NTQ6XFx0ICogUmV0dXJuOiAldHJ1ZSBpZiBhbGwgZWxlbWVudHMgd2VyZSBpdGVyYXRlZCwgJWZhbHNlIG90aGVyd2lzZTsgc2VlIG5vdGVzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE2OjAzOjQ1LjM1MTMzNjU5M1oiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjMxMDY4NzQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcGx5IGZhbWlsaWFyIHdpdGggY29kZSBhbmQgaXRlcmF0aW9uOlxuXG4qKkFuYWx5emluZyB0aGUgUmVtYWluZGVyIG9mIGBmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZGAqKlxuXG5BbHJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIGFmdGVyIHRoYXQgYGZvcl9lYWNoX2VsZW1lbnRfY29tcGxldGVkYCBmdW5jdGlvbiBjYWxsLiBJIGtub3cgaXQncyBhIGNyaXRpY2FsIHBpZWNlLCBsaWtlbHkgcmVsYXRlZCB0byBwcm9jZXNzaW5nIGluZGl2aWR1YWwgZWxlbWVudHMgb3IgdGFza3MuIEJ1dCB3aGF0J3MgdGhlIGJyb2FkZXIgcGljdHVyZT8gSSBuZWVkIHRvIGRlbHZlIGludG8gdGhlIGNvZGUgdGhhdCBmb2xsb3dzIHRoYXQgY2FsbCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIG92ZXJhbGwgYWxnb3JpdGhtLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaXQncyBjb29yZGluYXRpbmcgd2l0aCB0aGUgcmVzdCBvZiB0aGUgd29ya2Zsb3cuIElzIHRoaXMgdGhlIGVuZCBvZiBhIGxvb3A/IERvZXMgaXQgdHJpZ2dlciBhbm90aGVyIHN0YWdlPyBJcyB0aGVyZSBlcnJvciBoYW5kbGluZz8gV2hhdCBkZXBlbmRlbmNpZXMgZG9lcyB0aGUgY29kZSBhZnRlciBgZm9yX2VhY2hfZWxlbWVudF9jb21wbGV0ZWRgIGhhdmUgb24gdGhlIGZ1bmN0aW9uJ3Mgb3V0cHV0IG9yIGNvbXBsZXRpb24gc3RhdHVzPyBUaGUgZGV2aWwsIGFzIGFsd2F5cywgaXMgaW4gdGhlIGRldGFpbHMsIHNvIGxldCdzIGdldCBkaWdnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDQ5LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNjowNDoxNy42NjIwMjY1MzNaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2NDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvaWVlZTgwMjExLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjc1NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjc1NTpcXHQgKlxcbjI3NTY6XFx0ICogVGhpcyBmdW5jdGlvbiByZXR1cm5zICV0cnVlIGlmIGFsbCB0aGUgZGF0YSB3YXMgcGFyc2VkIG9yIGNvbnNpZGVyZWRcXG4yNzU3OlxcdCAqIHdoaWxlIHdhbGtpbmcgdGhlIGVsZW1lbnRzLiBPbmx5IHVzZSB0aGlzIGlmIHlvdXIgZm9yX2VhY2hfZWxlbWVudCgpXFxuMjc1ODpcXHQgKiBsb29wIGNhbm5vdCBiZSBicm9rZW4gb3V0IG9mLCBvdGhlcndpc2UgaXQgYWx3YXlzIHJldHVybnMgJWZhbHNlLlxcbjI3NTk6XFx0ICpcXG4yNzYwOlxcdCAqIElmIHNvbWUgZGF0YSB3YXMgbWFsZm9ybWVkLCB0aGlzIHJldHVybnMgJWZhbHNlIHNpbmNlIHRoZSBsYXN0IHBhcnNlZFxcbjI3NjE6XFx0ICogZWxlbWVudCB3aWxsIG5vdCBmaWxsIHRoZSB3aG9sZSByZW1haW5pbmcgZGF0YS5cXG4yNzYyOlxcdCAqL1xcbjI3NjM6XFx0c3RhdGljIGlubGluZSBib29sIGZvcl9lYWNoX2VsZW1lbnRfY29tcGxldGVkKGNvbnN0IHN0cnVjdCBlbGVtZW50ICplbGVtZW50LFxcbjI3NjQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFsZW4pXFxuMjc2NTpcXHR7XFxuMjc2NjpcXHRcXHRyZXR1cm4gKGNvbnN0IHU4ICopZWxlbWVudCA9PSAoY29uc3QgdTggKilkYXRhICsgZGF0YWxlbjtcXG4yNzY3OlxcdH1cXG4yNzY4OlxcdFxcbjI3Njk6XFx0LypcXG4yNzcwOlxcdCAqIFJTTlggQ2FwYWJpbGl0aWVzOlxcbjI3NzE6XFx0ICogYml0cyAwLTM6IEZpZWxkIGxlbmd0aCAobi0xKVxcbjI3NzI6XFx0ICovXFxuMjc3MzpcXHQjZGVmaW5lIFdMQU5fUlNOWF9DQVBBX1BST1RFQ1RFRF9UV1QgQklUKDQpXFxuMjc3NDpcXHQjZGVmaW5lIFdMQU5fUlNOWF9DQVBBX1NBRV9IMkUgQklUKDUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE2OjA0OjE3LjY2MjE4NjMxM1oiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0OTM4NzQyNDMyNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZWAgUGF0Y2g6IEEgS01TQU4gUGVyc3BlY3RpdmUqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXNzZWN0IHRoaXMgcGF0Y2ggZm9jdXNpbmcgb24gS01TQU4gaW1wbGljYXRpb25zLiBUaGUgY29yZSBvZiB0aGlzIGNoYW5nZSBzZWVtcyB0byBiZSB0aGUgaW50cm9kdWN0aW9uIG9mIGlucHV0IHZhbGlkYXRpb24gZm9yIHVzZXItcHJvdmlkZWQgSW5mb3JtYXRpb24gRWxlbWVudHMgKElFcykgcGFzc2VkIHRocm91Z2ggdGhlIGBTSU9DU0lXR0VOSUVgIGlvY3RsIHVzaW5nIGBjZmc4MDIxMV93ZXh0X3Npd2dlbmllYC4gUHJldmlvdXNseSwgdGhlIGNvZGUganVzdCBibGluZGx5IGNvcGllZCB0aGUgYGV4dHJhYCBidWZmZXIgZnJvbSB1c2Vyc3BhY2Ugd2l0aCBga21lbWR1cGAuIE5vdywgd2UncmUgZW1wbG95aW5nIGBmb3JfZWFjaF9lbGVtZW50YCBhbmQgYGZvcl9lYWNoX2VsZW1lbnRfY29tcGxldGVkYCB0byB2ZXJpZnkgdGhhdCB0aGUgaW5jb21pbmcgZGF0YSwgYGV4dHJhYCB3aXRoIGxlbmd0aCBgaWVfbGVuYCwgY29uZm9ybXMgdG8gdGhlIGV4cGVjdGVkIElFRUUgODAyLjExIGVsZW1lbnQgKFRMVikgc3RydWN0dXJlLiBJZiBpdCdzIG1hbGZvcm1lZCDigJMgbWVhbmluZyB0aGUgbGVuZ3RocyBvZiB0aGUgVExWcyBkb24ndCBtYWtlIHNlbnNlIOKAkyB3ZSByZXR1cm4gYC1FSU5WQUxgLiBUaGlzIGlzIGEgY3J1Y2lhbCBzZWN1cml0eSBoYXJkZW5pbmcgc3RlcC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgdGhpcyBhZGRyZXNzZXMuIENsZWFybHksIHRoaXMgaXMgaW5wdXQgdmFsaWRhdGlvbiDigJMgYSBjcml0aWNhbCBzZWN1cml0eSBjaGVjay4gQmVmb3JlLCBtYWxmb3JtZWQgSUVzIGNvdWxkIGhhdmUgcG90ZW50aWFsbHkgY2F1c2VkIG91dC1vZi1ib3VuZHMgcmVhZHMgZHVyaW5nIGxhdGVyIHBhcnNpbmcgb2YgdGhlIGRhdGEsIGEgY2xhc3NpYyB2dWxuZXJhYmlsaXR5LiBOb3csIHdlJ3JlIGV4cGxpY2l0bHkgdmFsaWRhdGluZyBlbGVtZW50IGxlbmd0aHMuIFNvLCBteSBwcmltYXJ5IGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIHBhdGNoLCBpbiBpdHNlbGYsIGludHJvZHVjZXMgbmV3IHJpc2tzLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuTGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBEb2VzIHRoaXMgcGF0Y2g6XG5cbjEuICAqKlNlbmQgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2U/KiogTm8sIHRoaXMgaXMgYSBcInNldFwiIG9wZXJhdGlvbiByZWNlaXZpbmcgZGF0YSwgbm90IHRyYW5zbWl0dGluZyBpdC4gSXQncyB2YWxpZGF0aW5nIHRoZSBpbnB1dC5cblxuMi4gICoqSW50cm9kdWNlIGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IHJlbGllcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzPyoqIFRoZSBgZWxlbWAgdmFyaWFibGUsIGNyaXRpY2FsIHRvIHRoZSB2YWxpZGF0aW9uIGxvb3AsIGlzIGluaXRpYWxpemVkIHdpdGhpbiB0aGUgYGZvcl9lYWNoX2VsZW1lbnRgIG1hY3JvIGFzIHRoZSBpdGVyYXRvciBwb2ludGVyLCBgX2VsZW0gPSAoY29uc3Qgc3RydWN0IGVsZW1lbnQgKikoX2RhdGEpYC4gVGhlIGlucHV0IGBleHRyYWAgaXMgZnJvbSB0aGUgaW9jdGwgYW5kIGhhcyBhbHJlYWR5IGJlZW4gY29waWVkIGZyb20gdXNlcnNwYWNlLiBgaWVfbGVuYCBpcyBkZXJpdmVkIGZyb20gdGhlIGlucHV0IGRhdGEgc3RydWN0dXJlLiBFdmVyeXRoaW5nIHNlZW1zIHByb3Blcmx5IGluaXRpYWxpemVkLlxuXG4zLiAgKipBbGxvY2F0ZSBvciBpbml0aWFsaXplIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXI/KiogTm8sIHRoZSBwYXRjaCBjYWxscyBga21lbWR1cGAgKmFmdGVyKiB0aGUgdmFsaWRhdGlvbiwgc28gdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGlzIHBlcmZvcm1lZCBvbiBkYXRhIHRoYXQgaGFzIHBhc3NlZCB2YWxpZGF0aW9uLlxuXG40LiAgKipUb3VjaCBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnM/KiogTm8sIHRoaXMgcGF0Y2ggaXMgYWJvdXQgKnJlc3RyaWN0aW5nKiBhbmQgKnZhbGlkYXRpbmcqIHRoZSBpbnB1dCBkYXRhIGZvcm1hdCwgbm90IG1hbmlwdWxhdGluZyBleGlzdGluZyBidWZmZXIgYm91bmRhcmllcyBpbiBhIHdheSB0aGF0IGNvdWxkIGludHJvZHVjZSB1bmluaXRpYWxpemVkIHJlYWRzLiBJdCdzIHByZXZlbnRpbmcgbWFsZm9ybWVkIFRMViBlbGVtZW50cyBmcm9tIGJlaW5nIHByb2Nlc3NlZC5cblxuR2l2ZW4gdGhlc2UgY29uc2lkZXJhdGlvbnMsIEknbSBjb25maWRlbnQgdGhhdCBLTVNBTiBpc24ndCBkaXJlY3RseSByZWxldmFudCBoZXJlLiBLTVNBTidzIHN0cmVuZ3RoIGxpZXMgaW4gZGV0ZWN0aW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdGFjaywgaGVhcCwgcGFnZSkgYW5kIHBvdGVudGlhbCBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcy4gVGhpcyBwYXRjaCwgaG93ZXZlciwgaXMgcHVyZWx5IGFib3V0IHBhcnNpbmcgdXNlciBpbnB1dCBhbmQgdmFsaWRhdGluZyBpdHMgc3RydWN0dXJlIGJlZm9yZSBpdCBpcyBjb3BpZWQuIEFueSBvdXQtb2YtYm91bmRzIG1lbW9yeSByZWFkcyBhcmlzaW5nIGZyb20gKmludmFsaWQqIFRMVnMgd291bGQgYmUgZGV0ZWN0ZWQgYnkgS0FTQU4uXG5cbkxldCdzIGRvdWJsZS1jaGVjayBldmVyeXRoaW5nOiBpcyB0aGVyZSAqYW55KiBpbnN0YW5jZSB3aGVyZSBgZWxlbWAgb3IgcmVsYXRlZCB2YXJpYWJsZXMgY291bGQgYmUgdXNlZCB1bmluaXRpYWxpemVkPyBOb3BlLiBFdmVuIGlmIGBpZV9sZW5gIGlzIHplcm8sIHRoZSBjb2RlIGlzIHdpdGhpbiBhIGNvbmRpdGlvbmFsLCBhbmQgdGhlIGBmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZGAgY2FsbCBjb21wYXJlcyB0aGUgaXRlcmF0b3IgYGVsZW1gIGFnYWluc3QgdGhlIGVuZCBvZiB0aGUgaW5wdXQgYnVmZmVyLCBgZXh0cmEgKyBpZV9sZW5gLiBFdmVyeXRoaW5nIGlzIGluaXRpYWxpemVkIGNvcnJlY3RseS4gS0FTQU4gY292ZXJzIHRoZSBrZXkgY29uY2VybnMgYWJvdXQgYnVmZmVyIG92ZXJmbG93cyBhbmQgbWVtb3J5IGJvdW5kcyBoZXJlLiBLTVNBTiBpcyBub3QgbmVlZGVkIGhlcmUuXG5cblRoZXJlZm9yZSwgZm9yIGNvbXBsZXRlbmVzcywgaGVyZSdzIG15IHN1bW1hcml6ZWQgcmVhc29uaW5nIGZvciB3aHkgS01TQU4gaXMgbm90IHJlcXVpcmVkOiBUaGlzIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBvZiB1c2VyLXByb3ZpZGVkIElFcyBwYXNzZWQgdGhyb3VnaCBgU0lPQ1NJV0dFTklFYCAoYGNmZzgwMjExX3dleHRfc2l3Z2VuaWVgKSB1c2luZyBgZm9yX2VhY2hfZWxlbWVudCgpYCAvIGBmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZCgpYCB0byBlbnN1cmUgdGhlIGRhdGEgY29uZm9ybXMgdG8gdGhlIDgwMi4xMSBlbGVtZW50IFRMViBzdHJ1Y3R1cmUgYmVmb3JlIGJlaW5nIGNvcGllZCB3aXRoIGBrbWVtZHVwYC4gS01TQU4gaXMgbm90IHJlcXVpcmVkIGJlY2F1c2UgdGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBUaGUgaXRlcmF0b3IgcG9pbnRlciBgZWxlbWAgaXMgaW5pdGlhbGl6ZWQgd2l0aGluIHRoZSBtYWNybywgYW5kIHRoZSBpbnB1dCBpcyB1c2VyLXByb3ZpZGVkLiBBbnkgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgYXNzb2NpYXRlZCB3aXRoIG1hbGZvcm1lZCBUTFZzIChlLmcuLCBvdXQtb2YtYm91bmRzIHJlYWRzKSBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IEtBU0FOLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjM4LCJPdXRwdXRUb2tlbnMiOjIxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE2OjEyOjMxLjUzNjQzMjkxWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGlucHV0IHZhbGlkYXRpb24gdG8gY2ZnODAyMTFfd2V4dF9zaXdnZW5pZSgpIGJ5IGl0ZXJhdGluZyBvdmVyIGFuZCB2ZXJpZnlpbmcgdGhlIHN0cnVjdHVyZSBvZiB1c2VyLXByb3ZpZGVkIElFRUUgODAyLjExIEluZm9ybWF0aW9uIEVsZW1lbnRzIChJRXMpIHVzaW5nIGZvcl9lYWNoX2VsZW1lbnQoKSBhbmQgZm9yX2VhY2hfZWxlbWVudF9jb21wbGV0ZWQoKS4gSWYgdGhlIGVsZW1lbnRzIGFyZSBtYWxmb3JtZWQsIGl0IHJldHVybnMgLUVJTlZBTCBiZWZvcmUgYWxsb2NhdGluZyBhbmQgc2F2aW5nIHRoZSBJRSBidWZmZXIuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MsIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlIGxvb3AgaXRlcmF0b3IgdmFyaWFibGUgYGVsZW1gIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIGJ5IHRoZSBgZm9yX2VhY2hfZWxlbWVudGAgbWFjcm8sIGFuZCB0aGUgaW5wdXQgYnVmZmVyIGNvbnRhaW5zIGRhdGEgY29waWVkIGZyb20gdXNlciBzcGFjZS4gUG90ZW50aWFsIGJ1Z3MgYWRkcmVzc2VkIG9yIHRvdWNoZWQgYnkgdGhpcyBsb2dpYyAoc3VjaCBhcyBtYWxmb3JtZWQgVExWIHBhcnNpbmcgbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIHJlYWRzKSBmYWxsIHVuZGVyIEtBU0FOJ3MgcHVydmlldy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgaW5wdXQgdmFsaWRhdGlvbiB0byBjZmc4MDIxMV93ZXh0X3Npd2dlbmllKCkgYnkgaXRlcmF0aW5nIG92ZXIgYW5kIHZlcmlmeWluZyB0aGUgc3RydWN0dXJlIG9mIHVzZXItcHJvdmlkZWQgSUVFRSA4MDIuMTEgSW5mb3JtYXRpb24gRWxlbWVudHMgKElFcykgdXNpbmcgZm9yX2VhY2hfZWxlbWVudCgpIGFuZCBmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZCgpLiBJZiB0aGUgZWxlbWVudHMgYXJlIG1hbGZvcm1lZCwgaXQgcmV0dXJucyAtRUlOVkFMIGJlZm9yZSBhbGxvY2F0aW5nIGFuZCBzYXZpbmcgdGhlIElFIGJ1ZmZlci5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcywga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgb3IgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGUgbG9vcCBpdGVyYXRvciB2YXJpYWJsZSBgZWxlbWAgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYnkgdGhlIGBmb3JfZWFjaF9lbGVtZW50YCBtYWNybywgYW5kIHRoZSBpbnB1dCBidWZmZXIgY29udGFpbnMgZGF0YSBjb3BpZWQgZnJvbSB1c2VyIHNwYWNlLiBQb3RlbnRpYWwgYnVncyBhZGRyZXNzZWQgb3IgdG91Y2hlZCBieSB0aGlzIGxvZ2ljIChzdWNoIGFzIG1hbGZvcm1lZCBUTFYgcGFyc2luZyBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMpIGZhbGwgdW5kZXIgS0FTQU4ncyBwdXJ2aWV3LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowtr92m[1] Phase: Succeeded StartedAt: 2026-08-31 16:12:42 +0000 UTC FinishedAt: 2026-08-31 16:12:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtr92m[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-31 16:12:42 +0000 UTC FinishedAt: 2026-08-31 16:12:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtr92m[2] Phase: Succeeded StartedAt: 2026-08-31 16:12:42 +0000 UTC FinishedAt: 2026-08-31 19:56:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtr92m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cfg80211_wext_siwgenie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"4e2a446a-795c-417b-8bc0-b3853fc649c8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-31 16:12:42 +0000 UTC FinishedAt: 2026-08-31 19:56:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cfg80211_wext_siwgenie"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"4e2a446a-795c-417b-8bc0-b3853fc649c8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowtr92m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cfg80211_wext_siwgenie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"4e2a446a-795c-417b-8bc0-b3853fc649c8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-31 16:12:42 +0000 UTC FinishedAt: 2026-08-31 16:12:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtr92m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cfg80211_wext_siwgenie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"4e2a446a-795c-417b-8bc0-b3853fc649c8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-31 16:12:42 +0000 UTC FinishedAt: 2026-08-31 16:12:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowtr92m/series-workflowtr92m-convert-artifact-4183400562/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtr92m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cfg80211_wext_siwgenie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"4e2a446a-795c-417b-8bc0-b3853fc649c8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-31 16:12:52 +0000 UTC FinishedAt: 2026-08-31 16:33:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtr92m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cfg80211_wext_siwgenie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"4e2a446a-795c-417b-8bc0-b3853fc649c8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-31 16:12:52 +0000 UTC FinishedAt: 2026-08-31 16:33:24 +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:*9d73fc1b-5e4e-470b-9ee8-82c981b68d8a,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-workflowtr92m/series-workflowtr92m-convert-artifact-4183400562/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": "3ed43014-cb79-486b-b0b0-b5ecd8da35a7", "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-workflowtr92m/series-workflowtr92m-build-action-2286626800/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtr92m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cfg80211_wext_siwgenie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"4e2a446a-795c-417b-8bc0-b3853fc649c8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-31 16:12:52 +0000 UTC FinishedAt: 2026-08-31 16:33:01 +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:*9d73fc1b-5e4e-470b-9ee8-82c981b68d8a,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-workflowtr92m/series-workflowtr92m-convert-artifact-4183400562/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": "3ed43014-cb79-486b-b0b0-b5ecd8da35a7", "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-workflowtr92m/series-workflowtr92m-build-action-2286626800/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtr92m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cfg80211_wext_siwgenie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"4e2a446a-795c-417b-8bc0-b3853fc649c8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-31 16:33:24 +0000 UTC FinishedAt: 2026-08-31 16:33:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtr92m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cfg80211_wext_siwgenie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"4e2a446a-795c-417b-8bc0-b3853fc649c8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-31 16:33:24 +0000 UTC FinishedAt: 2026-08-31 16:33:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtr92m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cfg80211_wext_siwgenie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"4e2a446a-795c-417b-8bc0-b3853fc649c8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-31 16:33:24 +0000 UTC FinishedAt: 2026-08-31 16:33:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtr92m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cfg80211_wext_siwgenie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"4e2a446a-795c-417b-8bc0-b3853fc649c8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-31 16:33:24 +0000 UTC FinishedAt: 2026-08-31 16:33:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"4e2a446a-795c-417b-8bc0-b3853fc649c8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowtr92m/series-workflowtr92m-convert-artifact-63931277/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtr92m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cfg80211_wext_siwgenie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"4e2a446a-795c-417b-8bc0-b3853fc649c8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-31 16:33:34 +0000 UTC FinishedAt: 2026-08-31 16:36:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtr92m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cfg80211_wext_siwgenie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"4e2a446a-795c-417b-8bc0-b3853fc649c8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-31 16:33:34 +0000 UTC FinishedAt: 2026-08-31 16:35:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3ed43014-cb79-486b-b0b0-b5ecd8da35a7,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-workflowtr92m/series-workflowtr92m-build-action-2286626800/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-workflowtr92m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cfg80211_wext_siwgenie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"4e2a446a-795c-417b-8bc0-b3853fc649c8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-31 16:36:05 +0000 UTC FinishedAt: 2026-08-31 16:36:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtr92m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cfg80211_wext_siwgenie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"4e2a446a-795c-417b-8bc0-b3853fc649c8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-31 16:36:05 +0000 UTC FinishedAt: 2026-08-31 16:36:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtr92m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cfg80211_wext_siwgenie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"4e2a446a-795c-417b-8bc0-b3853fc649c8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-31 16:36:05 +0000 UTC FinishedAt: 2026-08-31 16:51:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtr92m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cfg80211_wext_siwgenie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"4e2a446a-795c-417b-8bc0-b3853fc649c8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-31 16:36:05 +0000 UTC FinishedAt: 2026-08-31 16:51:40 +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:*9d73fc1b-5e4e-470b-9ee8-82c981b68d8a,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-workflowtr92m/series-workflowtr92m-convert-artifact-63931277/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": "a673de37-82c4-4b5b-9931-4fb4546db225", "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-workflowtr92m/series-workflowtr92m-build-action-2516586857/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtr92m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cfg80211_wext_siwgenie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"4e2a446a-795c-417b-8bc0-b3853fc649c8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-31 16:36:05 +0000 UTC FinishedAt: 2026-08-31 16:51:35 +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:*9d73fc1b-5e4e-470b-9ee8-82c981b68d8a,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-workflowtr92m/series-workflowtr92m-convert-artifact-63931277/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": "a673de37-82c4-4b5b-9931-4fb4546db225", "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-workflowtr92m/series-workflowtr92m-build-action-2516586857/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtr92m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cfg80211_wext_siwgenie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"4e2a446a-795c-417b-8bc0-b3853fc649c8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-31 16:51:40 +0000 UTC FinishedAt: 2026-08-31 16:51:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtr92m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cfg80211_wext_siwgenie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"4e2a446a-795c-417b-8bc0-b3853fc649c8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-31 16:51:40 +0000 UTC FinishedAt: 2026-08-31 16:51:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtr92m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cfg80211_wext_siwgenie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"4e2a446a-795c-417b-8bc0-b3853fc649c8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-31 16:51:40 +0000 UTC FinishedAt: 2026-08-31 16:53:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtr92m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cfg80211_wext_siwgenie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"4e2a446a-795c-417b-8bc0-b3853fc649c8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-31 16:51:40 +0000 UTC FinishedAt: 2026-08-31 16:53:37 +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:*a673de37-82c4-4b5b-9931-4fb4546db225,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-workflowtr92m/series-workflowtr92m-build-action-2516586857/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-workflowtr92m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cfg80211_wext_siwgenie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"4e2a446a-795c-417b-8bc0-b3853fc649c8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-31 16:53:47 +0000 UTC FinishedAt: 2026-08-31 19:56:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtr92m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cfg80211_wext_siwgenie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"4e2a446a-795c-417b-8bc0-b3853fc649c8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-31 16:53:47 +0000 UTC FinishedAt: 2026-08-31 19:56:26 +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":["cfg80211_wext_siwgenie"],"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:*3ed43014-cb79-486b-b0b0-b5ecd8da35a7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a673de37-82c4-4b5b-9931-4fb4546db225,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-workflowtr92m/series-workflowtr92m-build-action-2286626800/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-workflowtr92m/series-workflowtr92m-build-action-2516586857/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowtr92m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cfg80211_wext_siwgenie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"4e2a446a-795c-417b-8bc0-b3853fc649c8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-31 16:53:47 +0000 UTC FinishedAt: 2026-08-31 16:53:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtr92m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cfg80211_wext_siwgenie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"4e2a446a-795c-417b-8bc0-b3853fc649c8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-31 16:53:47 +0000 UTC FinishedAt: 2026-08-31 16:53:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cfg80211_wext_siwgenie"],"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-workflowtr92m/series-workflowtr92m-convert-artifact-843375218/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtr92m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cfg80211_wext_siwgenie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"4e2a446a-795c-417b-8bc0-b3853fc649c8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-31 16:53:47 +0000 UTC FinishedAt: 2026-08-31 16:53:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtr92m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cfg80211_wext_siwgenie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"4e2a446a-795c-417b-8bc0-b3853fc649c8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-31 16:53:47 +0000 UTC FinishedAt: 2026-08-31 16:53:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtr92m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cfg80211_wext_siwgenie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"4e2a446a-795c-417b-8bc0-b3853fc649c8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-31 16:53:47 +0000 UTC FinishedAt: 2026-08-31 16:53:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtr92m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cfg80211_wext_siwgenie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"4e2a446a-795c-417b-8bc0-b3853fc649c8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-31 16:53:57 +0000 UTC FinishedAt: 2026-08-31 19:56:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtr92m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cfg80211_wext_siwgenie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd6f4ef6f8a37412909ad787c837332fb070159c","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT"],"series_id":"4e2a446a-795c-417b-8bc0-b3853fc649c8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-31 16:53:57 +0000 UTC FinishedAt: 2026-08-31 19:56:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3ed43014-cb79-486b-b0b0-b5ecd8da35a7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a673de37-82c4-4b5b-9931-4fb4546db225,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-workflowtr92m/series-workflowtr92m-build-action-2286626800/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-workflowtr92m/series-workflowtr92m-build-action-2516586857/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-workflowtr92m/series-workflowtr92m-convert-artifact-843375218/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,}