Name: series-workflow697kj Phase: Succeeded StartedAt: 2026-07-26 16:37:55 +0000 UTC FinishedAt: 2026-07-26 20:11:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow697kj[0] Phase: Succeeded StartedAt: 2026-07-26 16:37:55 +0000 UTC FinishedAt: 2026-07-26 17:59:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow697kj[0].run-triage Phase: Succeeded StartedAt: 2026-07-26 16:37:55 +0000 UTC FinishedAt: 2026-07-26 17:59:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "90883c513ca01e77c56b8d94be7de11420c1dacf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "CFG80211_WEXT", "MAC80211", "MAC80211_HWSIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "90883c513ca01e77c56b8d94be7de11420c1dacf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "CFG80211_WEXT", "MAC80211", "MAC80211_HWSIM" ], "series_id": "1490e25f-5ea0-413a-a26b-14d20b6db38a" }, "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+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O0NGRzgwMjExX1dFWFQmIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjZmc4MDIxMV93ZXh0X3Npd2dlbmllJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiB0byB0aGUgU0lPQ1NJV0dFTklFIGlvY3RsIGhhbmRsZXIgdG8gcHJldmVudCBpbnZhbGlkIEluZm9ybWF0aW9uIEVsZW1lbnRzIChJRSkgZnJvbSBiZWluZyBwcm9jZXNzZWQuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSB0aGUgV0VYVCBBUEkgb24gd2lyZWxlc3MgZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDdmM2U5ZmI1Yjc2MDU2ZmMyYjQ3NjYxNDBkOTJkNWM0NmYxNGIzZGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAyNiAxNzo1Nzo1MyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuYyBiL25ldC93aXJlbGVzcy93ZXh0LXNtZS5jXG5pbmRleCA1NzNiNmIxNWE0NDZlYy4uZDhhZWMzNDFiZTM5ZTYgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL3dleHQtc21lLmNcbkBAIC0zMTksNiAmIzQzOzMxOSwxOCBAQCBpbnQgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGlmIChpZV9sZW4pIHtcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBlbGVtZW50ICplbGVtO1xuJiM0MztcbiYjNDM7XHRcdCAvKiBJRSBtdXN0IGhhdmUgYXQgbGVhc3QgVHlwZSAmIzQzOyBMZW5ndGggYnl0ZXMgKi9cbiYjNDM7XHRcdGlmIChpZV9sZW4gXHUwMDNjIDIpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0Zm9yX2VhY2hfZWxlbWVudChlbGVtLCBleHRyYSwgaWVfbGVuKSB7XG4mIzQzO1x0XHRcdC8qIG5vdGhpbmcgKi9cbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWZvcl9lYWNoX2VsZW1lbnRfY29tcGxldGVkKGVsZW0sIGV4dHJhLCBpZV9sZW4pKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHRcdGllID0ga21lbWR1cChleHRyYSwgaWVfbGVuLCBHRlBfS0VSTkVMKTtcbiBcdFx0aWYgKCFpZSlcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OywKICAgICYjMzQ7Q0ZHODAyMTFfV0VYVCYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMV9IV1NJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NmZzgwMjExX3dleHRfc2l3Z2VuaWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIHRvIHRoZSBTSU9DU0lXR0VOSUUgaW9jdGwgaGFuZGxlciB0byBwcmV2ZW50IGludmFsaWQgSW5mb3JtYXRpb24gRWxlbWVudHMgKElFKSBmcm9tIGJlaW5nIHByb2Nlc3NlZC4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHRoZSBXRVhUIEFQSSBvbiB3aXJlbGVzcyBkZXZpY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2YzZTlmYjViNzYwNTZmYzJiNDc2NjE0MGQ5MmQ1YzQ2ZjE0YjNkZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gSnVsIDI2IDE3OjU3OjUzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3dleHQtc21lLmMgYi9uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuYwppbmRleCA1NzNiNmIxNWE0NDZlYy4uZDhhZWMzNDFiZTM5ZTYgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy93ZXh0LXNtZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy93ZXh0LXNtZS5jCkBAIC0zMTksNiAmIzQzOzMxOSwxOCBAQCBpbnQgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQlyZXR1cm4gMDsKIAogCWlmIChpZV9sZW4pIHsKJiM0MzsJCWNvbnN0IHN0cnVjdCBlbGVtZW50ICplbGVtOwomIzQzOwomIzQzOwkJIC8qIElFIG11c3QgaGF2ZSBhdCBsZWFzdCBUeXBlICYjNDM7IExlbmd0aCBieXRlcyAqLwomIzQzOwkJaWYgKGllX2xlbiAmbHQ7IDIpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQlmb3JfZWFjaF9lbGVtZW50KGVsZW0sIGV4dHJhLCBpZV9sZW4pIHsKJiM0MzsJCQkvKiBub3RoaW5nICovCiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoIWZvcl9lYWNoX2VsZW1lbnRfY29tcGxldGVkKGVsZW0sIGV4dHJhLCBpZV9sZW4pKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwogCQlpZSA9IGttZW1kdXAoZXh0cmEsIGllX2xlbiwgR0ZQX0tFUk5FTCk7CiAJCWlmICghaWUpCiAJCQlyZXR1cm4gLUVOT01FTTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEzNQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFdFWFQgSW5mb3JtYXRpb24gRWxlbWVudCBWYWxpZGF0aW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgdG91Y2hpbmcgYG5ldC93aXJlbGVzcy93ZXh0LXNtZS5jYC4gU291bmRzIGxpa2UgdGhleSYjMzk7cmUgZGlnZ2luZyBpbnRvIHRoZSBXRVhUIGludGVyZmFjZSwgc3BlY2lmaWNhbGx5IHRoZSBTTUUgKFN0YXRpb24gTWFuYWdlbWVudCBFbnRpdHkpIGludGVyYWN0aW9uLiBUaGUgZnVuY3Rpb24gYmVpbmcgbW9kaWZpZWQgaXMgYGNmZzgwMjExX3dleHRfc2l3Z2VuaWVgLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIG15IGludGVyZXN0LCBiZWNhdXNlIGFueXRoaW5nIGRlYWxpbmcgd2l0aCB1c2VyLXNwYWNlIGludGVyYWN0aW9uIGFuZCBJbmZvcm1hdGlvbiBFbGVtZW50cyAoSUVzKSBpcyBhIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IHBvaW50IGlmIG5vdCBoYW5kbGVkIGNhcmVmdWxseS4KCkl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGlzIGFkZGluZyBzb21lIElFIHZhbGlkYXRpb24uIEdvb2QhIFRoYXQmIzM5O3MgYSBzb2xpZCBkZWZlbnNpdmUgbWVhc3VyZS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgY29kZSYjMzk7cyBjaGVja2luZyBpZiBgaWVfbGVuICZsdDsgMmAgZmlyc3QuIFJpZ2h0LCBhIG1pbmltdW0gSUUgbGVuZ3RoIG9mIDIgaXMgY3J1Y2lhbCwgYmVjYXVzZSB0aGUgZmlyc3QgdHdvIGJ5dGVzIGFyZSB0aGUgRWxlbWVudCBJRCBhbmQgdGhlIGxlbmd0aCBmaWVsZCwgc28gYW4gSUUgaGFzIHRvIGJlIGF0IGxlYXN0IHRoYXQgYmlnLiBPa2F5LCBtYWtlcyBzZW5zZS4gVGhlbiwgdGhleSYjMzk7cmUgdXNpbmcgYGZvcl9lYWNoX2VsZW1lbnRgIGFuZCBgZm9yX2VhY2hfZWxlbWVudF9jb21wbGV0ZWRgIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgSUVzLiBTdGFuZGFyZCwgZWZmaWNpZW50IGFwcHJvYWNoIGluIHRoZSBrZXJuZWwuIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGV4YWN0IGltcGxlbWVudGF0aW9uIGFuZCBzZWUgd2hhdCBzcGVjaWZpYyBjaGVja3MgYXJlIGFkZGVkIHdpdGhpbiB0aG9zZSBsb29wcy4gU3BlY2lmaWNhbGx5LCBob3cgYXJlIHRoZXkgdmFsaWRhdGluZyB0aGUgaW5kaXZpZHVhbCBJRXMuIFRoaXMgaXMgd2hlcmUgdGhlIGRldmlsJiMzOTtzIGluIHRoZSBkZXRhaWxzLiBUaW1lIHRvIHB1bGwgdXAgYGNmZzgwMjExX3dleHRfc2l3Z2VuaWVgIGluIHRoYXQgZmlsZSBhbmQgc2VlIHdoYXQgdGhleSYjMzk7dmUgZG9uZS4gSSYjMzk7bGwgZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIGdldCB0aGF0IGZ1bmN0aW9uIHVwLiBJJiMzOTttIGtlZW4gdG8gZXhhbWluZSB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGV5IGltcGxlbWVudGVkIHRoaXMgdmFsaWRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjZmc4MDIxMV93ZXh0X3Npd2dlbmllJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL3dleHQtc21lLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL3dleHQtc21lLmM9MjczPWludCBjZmc4MDIxMV9tZ2Rfd2V4dF9naXdhcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC93aXJlbGVzcy93ZXh0LXNtZS5jLTI5Ny1cbm5ldC93aXJlbGVzcy93ZXh0LXNtZS5jOjI5ODppbnQgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L3dpcmVsZXNzL3dleHQtc21lLmMtMjk5LVx0XHRcdCAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgwOAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uIGZvciBgbmV0L3dpcmVsZXNzL3dleHQtc21lLmNgKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGFjdGl2YXRlcyBgbmV0L3dpcmVsZXNzL3dleHQtc21lLmNgLiBUaGlzIGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBpbnZlc3RpZ2F0aW9uLiBNeSBpbml0aWFsIGFwcHJvYWNoIHdpbGwgYmUgdG8gbGV2ZXJhZ2UgdGhlIGV4aXN0aW5nIGluZnJhc3RydWN0dXJlIHRoYXQgSSB1bmRlcnN0YW5kIGludGltYXRlbHksIHRvIGZpbmQgd2hhdCBhY3RpdmF0ZXMgdGhhdCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgc2VhcmNoIHRoZSBidWlsZCBzeXN0ZW0gY29uZmlndXJhdGlvbiB0byBkZXRlcm1pbmUgdGhlIGFzc29jaWF0ZWQgS2NvbmZpZyBlbnRyeS4gVHlwaWNhbGx5LCBrZXJuZWwgY29kZSBoYXMgYSBjb3JyZXNwb25kaW5nIEtjb25maWcgZmlsZSB0aGF0IGRpY3RhdGVzIGl0cyBpbmNsdXNpb24gYmFzZWQgb24gdmFyaW91cyBvcHRpb25zLiBGcm9tIG1lbW9yeSwgdGhlIHJlbGV2YW50IGRpcmVjdG9yeSBpcyBsaWtlbHkgYG5ldC93aXJlbGVzcy9gLCBJIHNob3VsZCBmaW5kIGFuIGFwcHJvcHJpYXRlIEtjb25maWcgdGhlcmUuIEl0JiMzOTtzIGEgcXVpY2sgbG9va3VwLCBhbmQgaXQmIzM5O3MgZXNzZW50aWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIHNwZWNpZmljIGNvbXBvbmVudCBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLiBJJiMzOTtsbCBuZWVkIHRoZSBleGFjdCBjb25maWcgb3B0aW9uIHRvIGFjY3VyYXRlbHkgdHJhY2UgZGVwZW5kZW5jaWVzIGFuZCB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIGtlcm5lbCB3aXJlbGVzcyBmcmFtZXdvcmsuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d2V4dC1zbWUubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL01ha2VmaWxlPTEzPWNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX0RFQlVHRlMpICYjNDM7PSBkZWJ1Z2ZzLm9cbm5ldC93aXJlbGVzcy9NYWtlZmlsZToxNDpjZmc4MDIxMS0kKENPTkZJR19DRkc4MDIxMV9XRVhUKSAmIzQzOz0gd2V4dC1jb21wYXQubyB3ZXh0LXNtZS5vXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGUtMTUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE2NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gdGhlIHdlZWRzIG9mIGtlcm5lbCBjb25maWd1cmF0aW9uOgoKKipEaXZpbmcgaW50byB0aGUgQ0ZHODAyMTFfV0VYVCBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBgQ0ZHODAyMTFfV0VYVGAuIFRoYXQmIzM5O3MgdGhlIG9uZSB0aGF0IGVuYWJsZXMgdGhlIFdpcmVsZXNzIEV4dGVuc2lvbnMgY29tcGF0aWJpbGl0eSBsYXllciB3aXRoaW4gdGhlIGNmZzgwMjExIHdpcmVsZXNzIHN0YWNrLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9mIGV4YWN0bHkgaG93IGl0JiMzOTtzIGRlZmluZWQgYW5kIHdoYXQgaXRzIGRlcGVuZGVuY2llcyBhcmUuIFRoZSBtZW50YWwganVtcCBpcyBvYnZpb3VzOiBJIG5lZWQgdG8gcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgaXRzIGRlZmluaXRpb24uIExldCBtZSBwdWxsIHVwIGBuZXQvd2lyZWxlc3MvS2NvbmZpZ2AgaW4gbXkgaGVhZC4uLiB5ZWFoLCB0aGF0JiMzOTtzIHdoZXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVzaWRlLiBJIHdhbnQgdG8gY2hlY2sgaXRzIGRlcGVuZGVuY2llcywgZW5zdXJlIEkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdCwgYW5kIGp1c3QgZ2VuZXJhbGx5IGNvbmZpcm0gdGhhdCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgb3B0aW9uIGFsaWducyB3aXRoIHRoZSBvZmZpY2lhbCBkb2N1bWVudGF0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZSBoYXMgdG8gc2F5IGFib3V0IGBDRkc4MDIxMV9XRVhUYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0ZHODAyMTFfV0VYVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9LY29uZmlnPTE3Nz1jb25maWcgQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTg2LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTg3OmNvbmZpZyBDRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODgtXHRib29sIFwmIzM0O2NmZzgwMjExIHdpcmVsZXNzIGV4dGVuc2lvbnMgY29tcGF0aWJpbGl0eVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NDgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uLCBwcmVzZW50ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgRGVwZW5kZW5jeSBTdHJ1Y3R1cmVzKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGF0IHByZWNpc2VseSBkb2VzIGBDRkc4MDIxMV9XRVhUYCByZWx5IHVwb24/JiMzNDsgVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jeSB0cmVlIGlzIGZ1bmRhbWVudGFsLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGtlcm5lbCBtb2R1bGVzLiBJIG5lZWQgdG8ga25vdyB0aGUgcHJlY29uZGl0aW9ucywgdGhlIGxvd2VyLWxldmVsIGNvbXBvbmVudHMgaXQgbGV2ZXJhZ2VzLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IGNvbXBpbGluZzsgaXQmIzM5O3MgYWJvdXQgcnVudGltZSBiZWhhdmlvciBhbmQgcG90ZW50aWFsIGNvbmZsaWN0cy4gTXkgZXhwZXJ0aXNlIGRlbWFuZHMgSSBpbW1lZGlhdGVseSBzdGFydCBtZW50YWxseSBtYXBwaW5nIHRoZSBjb25uZWN0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBjb25zaWRlciBob3cgdGhpcyByZWxhdGVzIHRvIG90aGVyIG5ldHdvcmsgc3RhY2sgY29tcG9uZW50cywgaGFyZHdhcmUgZHJpdmVycywgYW5kIG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZS4gV2hlcmUgY2FuIEkgZmluZCB0aGlzIGluZm9ybWF0aW9uIG1vc3QgZWZmaWNpZW50bHk/IExpa2VseSwgc29tZSBxdWljayBncmVwcGluZyB0aHJvdWdoIHRoZSBrZXJuZWwgc291cmNlLCBjcm9zcy1yZWZlcmVuY2luZyB3aXRoIGRvY3VtZW50YXRpb24sIGFuZCBwZXJoYXBzIGEgcmV2aWV3IG9mIHJlY2VudCBjb21taXRzIGluIHRoZSByZWxldmFudCBhcmVhcyB3aWxsIGJlIG5lZWRlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlLiBUaGUgZ29hbCBpcyB0byBmdWxseSBncmFzcCBpdHMgcm9sZSBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDRkc4MDIxMV9XRVhUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL0tjb25maWc9MTc3PWNvbmZpZyBDRkc4MDIxMV9DUkRBX1NVUFBPUlRcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODYtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxODc6Y29uZmlnIENGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4OC1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgd2lyZWxlc3MgZXh0ZW5zaW9ucyBjb21wYXRpYmlsaXR5XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MDYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIERlcGVuZGVuY3kgVHJlZSoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhpcyBjb25maWd1cmF0aW9uLCBJIG5lZWQgdG8gcGF1c2UgYW5kIHRha2UgYSBsb29rIGF0IHRoZSBgS2NvbmZpZ2AgZmlsZS4gVGhpcyBpc24mIzM5O3QganVzdCBhYm91dCB0aGUgaW1tZWRpYXRlIG9wdGlvbnM7IGl0JiMzOTtzIGFib3V0IHVuZGVyc3RhbmRpbmcgdGhlIGVudGlyZSBkZXBlbmRlbmN5IGdyYXBoLiBJIGNhbiYjMzk7dCBqdXN0IGJsaW5kbHkgdHdlYWsgc2V0dGluZ3Mgd2l0aG91dCBrbm93aW5nIHdoYXQgb3RoZXIgbW9kdWxlcyBvciBmZWF0dXJlcyByZWx5IG9uIHRoaXMgcGFydGljdWxhciBvbmUuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhpcyBwb2ludCBhbmQgdW5kZXJzdGFuZCBpdHMgY29uZGl0aW9uYWwgaW5jbHVzaW9uLCBpdHMgZGVwZW5kZW5jaWVzIG9uIG90aGVyIHN5bWJvbHMsIGFuZCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBpdCBtaWdodCBpbnRyb2R1Y2UuIEl04oCZcyB0aGUgb25seSB3YXkgdG8gYXZvaWQgaW50cm9kdWNpbmcgYSBidWlsZC10aW1lIG5pZ2h0bWFyZSBsYXRlciBvbi4gU28sIGEgcXVpY2sgcGFyc2Ugb2YgdGhlIGBLY29uZmlnYCBpcyBlc3NlbnRpYWwgdG8gZXN0YWJsaXNoIHRoZSBpbXBhY3Qgb2YgYW55IGNoYW5nZXMgSSBtYWtlLCBvdGhlcndpc2UsIEkgYW0ganVzdCBndWVzc2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTgwOlx0XHRoZWxwXG4gMTgxOlx0XHQgIFlvdSBzaG91bGQgZW5hYmxlIHRoaXMgb3B0aW9uIHVubGVzcyB5b3Uga25vdyBmb3Igc3VyZSB5b3UgaGF2ZSBub1xuIDE4MjpcdFx0ICBuZWVkIGZvciBpdCwgZm9yIGV4YW1wbGUgd2hlbiB1c2luZyB0aGUgcmVndWxhdG9yeSBkYXRhYmFzZSBsb2FkZWQgYXNcbiAxODM6XHRcdCAgYSBmaXJtd2FyZSBmaWxlLlxuIDE4NDpcdFxuIDE4NTpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuIDE4NjpcdFxuIDE4NzpcdGNvbmZpZyBDRkc4MDIxMV9XRVhUXG4gMTg4Olx0XHRib29sIFwmIzM0O2NmZzgwMjExIHdpcmVsZXNzIGV4dGVuc2lvbnMgY29tcGF0aWJpbGl0eVwmIzM0O1xuIDE4OTpcdFx0c2VsZWN0IFdFWFRfQ09SRVxuIDE5MDpcdFx0aGVscFxuIDE5MTpcdFx0ICBFbmFibGUgdGhpcyBvcHRpb24gaWYgeW91IG5lZWQgb2xkIHVzZXJzcGFjZSBmb3Igd2lyZWxlc3NcbiAxOTI6XHRcdCAgZXh0ZW5zaW9ucyB3aXRoIGNmZzgwMjExLWJhc2VkIGRyaXZlcnMuXG4gMTkzOlx0XG4gMTk0Olx0Y29uZmlnIENGRzgwMjExX0tVTklUX1RFU1RcbiAxOTU6XHRcdHRyaXN0YXRlIFwmIzM0O0tVbml0IHRlc3RzIGZvciBjZmc4MDIxMVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gMTk2Olx0XHRkZXBlbmRzIG9uIEtVTklUXG4gMTk3Olx0XHRkZXBlbmRzIG9uIENGRzgwMjExXG4gMTk4Olx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuIDE5OTpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDMxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYSBEZXBlbmRlbmN5KioKClJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGF0IGNvZGUgYmxvY2sgaXMgZ2F0ZWQgYnkgYW4gYGlmIENGRzgwMjExYCBjb25kaXRpb24uIEltbWVkaWF0ZWx5LCBteSBicmFpbiBmbGFncyB0aGF0IGFzIGEgZGVwZW5kZW5jeS4gSXQmIzM5O3MgYSBwcmV0dHkgc3Ryb25nIGNsdWUsIGdpdmVuIHRoZSBjb250ZXh0LiBTbywgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBzdXNwaWNpb24uIFRoZSBwcmVzZW5jZSBvZiBgQ0ZHODAyMTFgIGluIHRoYXQgY29uZGl0aW9uYWwgaW1wbGllcyB0aGF0IHdoYXRldmVyIGxvZ2ljIGlzICppbnNpZGUqIHRoYXQgYGlmYCBibG9jayBpcywgYXQgYSBtaW5pbXVtLCBpbmZsdWVuY2VkIGJ5LCBhbmQgbGlrZWx5IHJlbGlhbnQgb24sIHRoZSBleGlzdGVuY2Ugb3IgYmVoYXZpb3Igb2YgdGhlIGBDRkc4MDIxMWAgY29tcG9uZW50LiBJIG5lZWQgdG8gZGlnIGluIGRlZXBlciB0byB0cnVseSBkZXRlcm1pbmUgdGhlIGV4dGVudCBvZiB0aGF0IHJlbGF0aW9uc2hpcCwgb2YgY291cnNlLCBidXQgaXQmIzM5O3MgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQgZm9yIG15IGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZiBDRkc4MDIxMSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9LY29uZmlnPTE3PWNvbmZpZyBDRkc4MDIxMVxuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTI0LVx0IyAodGhpcyBpcyBoZXJlIHJhdGhlciB0aGFuIGJlbG93IHRvIGFsbG93IGl0IHRvIGJlIGEgbW9kdWxlKVxubmV0L3dpcmVsZXNzL0tjb25maWc6MjU6XHRzZWxlY3QgQ1JZUFRPX1NIQTI1NiBpZiBDRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTI2LVx0aGVscFxuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTM1LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MzY6aWYgQ0ZHODAyMTFcbm5ldC93aXJlbGVzcy9LY29uZmlnLTM3LVxuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnPTg5PWNvbmZpZyBDRkc4MDIxMV9SRVFVSVJFX1NJR05FRF9SRUdEQlxubmV0L3dpcmVsZXNzL0tjb25maWc6OTA6XHRib29sIFwmIzM0O3JlcXVpcmUgcmVnZGIgc2lnbmF0dXJlXCYjMzQ7IGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xubmV0L3dpcmVsZXNzL0tjb25maWctOTEtXHRkZWZhdWx0IHlcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZz05OT1jb25maWcgQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMDA6XHRib29sIFwmIzM0O2FsbG93IHJlZ2RiIGtleXMgc2hpcHBlZCB3aXRoIHRoZSBrZXJuZWxcJiMzNDsgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMDEtXHRkZWZhdWx0IHlcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZz0xMTE9Y29uZmlnIENGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUlxubmV0L3dpcmVsZXNzL0tjb25maWc6MTEyOlx0c3RyaW5nIFwmIzM0O2FkZGl0aW9uYWwgcmVnZGIga2V5IGRpcmVjdG9yeVwmIzM0OyBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTExMy1cdGRlcGVuZHMgb24gQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA4NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBDRkc4MDIxMWAgQ29udGV4dCoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgcmVsYXRlZCB0byBgaWYgQ0ZHODAyMTFgLiBUaGF0JiMzOTtzIHRoZSBrZXkuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0lzIHRoYXQgKmVub3VnaCo/JiMzNDsgYENGRzgwMjExYCBpcyBhIGJpZyBwaWVjZSwgYnV0IGl0JiMzOTtzIG5vdCBhbHdheXMgc2VsZi1jb250YWluZWQuIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBpZiB3ZSYjMzk7cmUgbWlzc2luZyBhbnkgdW5kZXJseWluZyBkZXBlbmRlbmNpZXMgb3IgYXV4aWxpYXJ5IGNvbXBvbmVudHMgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlIGhlcmUuIFdlIG5lZWQgdG8gZGlzc2VjdCB0aGUgc3RydWN0dXJlIGFuZCBkZXBlbmRlbmNpZXMsIG90aGVyd2lzZSB3ZSYjMzk7cmUgbWFraW5nIGFzc3VtcHRpb25zIHRoYXQgY291bGQgbGVhZCB1cyBkb3duIHRoZSB3cm9uZyBwYXRoLiBXZSBuZWVkIHRvIGRvdWJsZSBjaGVjayBhbnkgc3VwcG9ydGluZyBtb2R1bGVzIG9yIGFueSBmZWF0dXJlcyBlbmFibGVkIG9yIGRpc2FibGVkIGJ5IGNvbmZpZ3VyYXRpb24uIFRpbWUgdG8gZGlnIGluIGEgYml0IGRlZXBlciB0byBtYWtlIHN1cmUgd2UmIzM5O3ZlIGdvdCBldmVyeXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0ZHODAyMTEkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL0tjb25maWc9MTQ9Y29uZmlnIFdFWFRfUFJJVlxuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTc6Y29uZmlnIENGRzgwMjExXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOC1cdHRyaXN0YXRlIFwmIzM0O2NmZzgwMjExIC0gd2lyZWxlc3MgY29uZmlndXJhdGlvbiBBUElcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQyOQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBXaXJlbGVzcyBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgd2lyZWxlc3MgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSB2YXJpb3VzIHNldHRpbmdzLCBzbyBsZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGUgYG5ldC93aXJlbGVzcy9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG15IGF0dGVudGlvbiBhcm91bmQgbGluZSAxNyDigJMgdGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QganVtcGluZy1vZmYgcG9pbnQgdG8gc2VlIGhvdyB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUgYW5kIGtleSBkZWZpbml0aW9ucyBhcmUgbGFpZCBvdXQuIEkmIzM5O20gYXNzdW1pbmcgaXQgd2lsbCBnaXZlIG1lIGFuIG92ZXJ2aWV3IGFuZCBzdGFydCB0byBleHBvc2UgaG93IGRpZmZlcmVudCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBhbmQgZGlzYWJsZWQuIFRoaXMgS2NvbmZpZyBmaWxlIGlzIHRoZSBsaW5jaHBpbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgV2ktRmkgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgSSBuZWVkIHRvIGJlY29tZSBpbnRpbWF0ZWx5IGZhbWlsaWFyIHdpdGggaXQuIEkgZXhwZWN0IGl0JiMzOTtsbCBnaXZlIG1lIGEgc3Ryb25nIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcyB3aXRoaW4gdGhlIHdpcmVsZXNzIHN1YnN5c3RlbS4gRnJvbSB0aGVyZSBJIGNhbiBleHBsb3JlIGFueSBzcGVjaWZpYyBtb2R1bGVzIG9yIGZlYXR1cmVzIEkgbmVlZCB0byB1bmRlcnN0YW5kIGZ1cnRoZXIuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFdJUkVMRVNTX0VYVFxuICAgMzpcdFx0Ym9vbFxuICAgNDpcdFxuICAgNTpcdGNvbmZpZyBXRVhUX0NPUkVcbiAgIDY6XHRcdGRlZl9ib29sIHlcbiAgIDc6XHRcdGRlcGVuZHMgb24gQ0ZHODAyMTFfV0VYVCB8fCBXSVJFTEVTU19FWFRcbiAgIDg6XHRcbiAgIDk6XHRjb25maWcgV0VYVF9QUk9DXG4gIDEwOlx0XHRkZWZfYm9vbCB5XG4gIDExOlx0XHRkZXBlbmRzIG9uIFBST0NfRlNcbiAgMTI6XHRcdGRlcGVuZHMgb24gV0VYVF9DT1JFXG4gIDEzOlx0XG4gIDE0Olx0Y29uZmlnIFdFWFRfUFJJVlxuICAxNTpcdFx0Ym9vbFxuICAxNjpcdFxuICAxNzpcdGNvbmZpZyBDRkc4MDIxMVxuICAxODpcdFx0dHJpc3RhdGUgXCYjMzQ7Y2ZnODAyMTEgLSB3aXJlbGVzcyBjb25maWd1cmF0aW9uIEFQSVwmIzM0O1xuICAxOTpcdFx0ZGVwZW5kcyBvbiBSRktJTEwgfHwgIVJGS0lMTFxuICAyMDpcdFx0c2VsZWN0IEZXX0xPQURFUlxuICAyMTpcdFx0c2VsZWN0IENSQzMyXG4gIDIyOlx0XHQjIG1heSBuZWVkIHRvIHVwZGF0ZSB0aGlzIHdoZW4gY2VydGlmaWNhdGVzIGFyZSBjaGFuZ2VkIGFuZCBhcmVcbiAgMjM6XHRcdCMgdXNpbmcgYSBkaWZmZXJlbnQgYWxnb3JpdGhtLCB0aG91Z2ggcmlnaHQgbm93IHRoZXkgc2hvdWxkbiYjMzk7dFxuICAyNDpcdFx0IyAodGhpcyBpcyBoZXJlIHJhdGhlciB0aGFuIGJlbG93IHRvIGFsbG93IGl0IHRvIGJlIGEgbW9kdWxlKVxuICAyNTpcdFx0c2VsZWN0IENSWVBUT19TSEEyNTYgaWYgQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTXG4gIDI2Olx0XHRoZWxwXG4gIDI3Olx0XHQgIGNmZzgwMjExIGlzIHRoZSBMaW51eCB3aXJlbGVzcyBMQU4gKDgwMi4xMSkgY29uZmlndXJhdGlvbiBBUEkuXG4gIDI4Olx0XHQgIEVuYWJsZSB0aGlzIGlmIHlvdSBoYXZlIGEgd2lyZWxlc3MgZGV2aWNlLlxuICAyOTpcdFxuICAzMDpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiByZWZlciB0byBkb2N1bWVudGF0aW9uIG9uIHRoZSB3aXJlbGVzcyB3aWtpOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDgyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgV2lyZWxlc3MgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gY29kZSwgYW5kIGl0IGxvb2tzIGxpa2UgYENGRzgwMjExYCBhbmQgYENGRzgwMjExX1dFWFRgIGFyZSB0aGUgY29yZSBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gcGF5IGF0dGVudGlvbiB0by4gVGhlc2UgYXJlIHRoZSBtYWluIGJ1aWxkaW5nIGJsb2NrcywgYnV0IGl0JiMzOTtzIG5vdCB0aGUgd2hvbGUgc3RvcnksIGlzIGl0PyBJJiMzOTtsbCBwcm9iYWJseSBhbHNvIG5lZWQgYSByZWFsIGRyaXZlciB0byBhY3R1YWxseSBtYWtlIHVzZSBvZiB0aGVzZSBjb25maWdzLCBzb21ldGhpbmcgbGlrZSBgTUFDODAyMTFfSFdTSU1gIHBlcmhhcHMuCgpOb3csIGxldCYjMzk7cyBzZWUgaWYgdGhpcyBgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZWAgZnVuY3Rpb24gaXMgYWNjZXNzaWJsZSBhbmQgc2VlIHdoZXJlIGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLiBBaCwgeWVzLCBJIHJlbWVtYmVyLCB0aGF0JiMzOTtzIGFuIGlvY3RsIGhhbmRsZXIgZm9yIGBTSU9DU0lXR0VOSUVgLiBOb3csIHdoZXJlIGV4YWN0bHkgaXMgaXQgYmVpbmcgdXNlZD8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzaXRlcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgaGFuZGxlIG9uIGl0cyBwdXJwb3NlLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZSB0byBncmFzcCBpdHMgcm9sZSBpbiBoYW5kbGluZyB3aXJlbGVzcyBleHRlbnNpb24gR0VOSUUgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2ZnODAyMTFfd2V4dF9zaXdnZW5pZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmM9MTQ4Mz1zdGF0aWMgY29uc3QgaXdfaGFuZGxlciBjZmc4MDIxMV9oYW5kbGVyc1tdID0ge1xuLS1cbm5ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jLTE1MTAtXHRJV19IQU5ETEVSKFNJT0NHSVdQT1dFUixcdGNmZzgwMjExX3dleHRfZ2l3cG93ZXIpLFxubmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmM6MTUxMTpcdElXX0hBTkRMRVIoU0lPQ1NJV0dFTklFLFx0Y2ZnODAyMTFfd2V4dF9zaXdnZW5pZSksXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYy0xNTEyLVx0SVdfSEFORExFUihTSU9DU0lXQVVUSCxcdFx0Y2ZnODAyMTFfd2V4dF9zaXdhdXRoKSxcbi0tXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuaD00Nj1pbnQgY2ZnODAyMTFfd2V4dF9zaXdtbG1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmgtNDgtXHRcdFx0ICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSk7XG5uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuaDo0OTppbnQgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmgtNTAtXHRcdFx0ICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbyxcbi0tXG5uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuYz0yNzM9aW50IGNmZzgwMjExX21nZF93ZXh0X2dpd2FwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L3dpcmVsZXNzL3dleHQtc21lLmMtMjk3LVxubmV0L3dpcmVsZXNzL3dleHQtc21lLmM6Mjk4OmludCBjZmc4MDIxMV93ZXh0X3Npd2dlbmllKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuYy0yOTktXHRcdFx0ICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjkwMAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFdFWFQgU0lPQ1NJV0dFTklFIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGNvbmNlcm5pbmcgdGhlIGBTSU9DU0lXR0VOSUVgIGlvY3RsLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBrbm93IHRoaXMgaXMgaGFuZGxlZCB3aXRoaW4gYGNmZzgwMjExX2hhbmRsZXJzYCwgd2hpY2ggaXMgc3RhbmRhcmQgZm9yIFdFWFQgaW9jdGwgcHJvY2Vzc2luZy4gVGhlIGVudHJ5IHBvaW50IGlzIHRoZSBgaW9jdGxgIGNhbGwgb24gYSBzb2NrZXQsIHBhc3NpbmcgYFNJT0NTSVdHRU5JRWAuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGlzIGlzIGVhc2lseSB0ZXN0YWJsZSwgcmlnaHQ/IEkgY2FuIGhpdCBpdCB0aHJvdWdoIHZpcnR1YWwgaGFyZHdhcmUgbGlrZSBgbWFjODAyMTFfaHdzaW1gIG9yIGV2ZW4gYSBzaW1wbGUgZHVtbXkgYGNmZzgwMjExYCBkZXZpY2UuCgpBaGEsIGNvbmZpcm1hdGlvbiEgVGhlIGNydWNpYWwgZnVuY3Rpb24gaGVyZSBpcyBgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZWAsIHRoYXQmIzM5O3MgdGhlIG9uZSBjYWxsZWQgd2hlbiB1c2Vyc3BhY2UgZG9lcyB0aGUgYFNJT0NTSVdHRU5JRWAuIEFuZCBpdCBsaXZlcyBpbiBgbmV0L3dpcmVsZXNzL3dleHQtc21lLmNgLiBHb29kLCB0aGF0IG5hcnJvd3MgZG93biBteSBmb2N1cy4gTGV0IG1lIHF1aWNrbHkgY29uZmlybSDigJMgeWVzLCBgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZWAgaXMgKnRoZSogbW9kaWZpZWQgZnVuY3Rpb24uIE5vIG90aGVyIGZ1bmN0aW9ucyBhcmUgdG91Y2hlZC4gVGltZSB0byBleGFtaW5lIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgaXRzZWxmLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy93ZXh0LXNtZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyOTU6XHRcdHJldHVybiAwO1xuIDI5NjpcdH1cbiAyOTc6XHRcbiAyOTg6XHRpbnQgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIDI5OTpcdFx0XHRcdCAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sXG4gMzAwOlx0XHRcdFx0ICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpXG4gMzAxOlx0e1xuIDMwMjpcdFx0c3RydWN0IGl3X3BvaW50ICpkYXRhID0gXHUwMDI2d3JxdS1cdTAwM2VkYXRhO1xuIDMwMzpcdFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi1cdTAwM2VpZWVlODAyMTFfcHRyO1xuIDMwNDpcdFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fcmRldih3ZGV2LVx1MDAzZXdpcGh5KTtcbiAzMDU6XHRcdGludCBpZV9sZW4gPSBkYXRhLVx1MDAzZWxlbmd0aDtcbiAzMDY6XHRcdHU4ICppZSA9IGV4dHJhO1xuIDMwNzpcdFxuIDMwODpcdFx0aWYgKHdkZXYtXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pXG4gMzA5Olx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiAzMTA6XHRcbiAzMTE6XHRcdGlmICghaWVfbGVuKVxuIDMxMjpcdFx0XHRpZSA9IE5VTEw7XG4gMzEzOlx0XG4gMzE0Olx0XHRndWFyZCh3aXBoeSkod2Rldi1cdTAwM2V3aXBoeSk7XG4gMzE1Olx0XG4gMzE2Olx0XHQvKiBubyBjaGFuZ2UgKi9cbiAzMTc6XHRcdGlmICh3ZGV2LVx1MDAzZXdleHQuaWVfbGVuID09IGllX2xlbiBcdTAwMjZcdTAwMjZcbiAzMTg6XHRcdCAgICBtZW1jbXAod2Rldi1cdTAwM2V3ZXh0LmllLCBpZSwgaWVfbGVuKSA9PSAwKVxuIDMxOTpcdFx0XHRyZXR1cm4gMDtcbiAzMjA6XHRcbiAzMjE6XHRcdGlmIChpZV9sZW4pIHtcbiAzMjI6XHRcdFx0Y29uc3Qgc3RydWN0IGVsZW1lbnQgKmVsZW07XG4gMzIzOlx0XG4gMzI0Olx0XHRcdCAvKiBJRSBtdXN0IGhhdmUgYXQgbGVhc3QgVHlwZSAmIzQzOyBMZW5ndGggYnl0ZXMgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkxOAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5lY2Vzc2FyeSBDb25maWd1cmF0aW9ucyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZm9jdXMgb24gdGhpcyBgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZWAgZnVuY3Rpb24uIFRoYXQmIzM5O3MgdGhlIGtleS4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IEkmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIGBDRkc4MDIxMWAgYW5kIGBDRkc4MDIxMV9XRVhUYCBpbiB0aGUgY29uZmlndXJhdGlvbi4gVGhhdCYjMzk7cyBhIGdpdmVuLiBOb3csIGZvciB0aGUgZW52aXJvbm1lbnQgd2hlcmUgdGhpcyBpcyB0eXBpY2FsbHkgZW5jb3VudGVyZWQsIGluIHNvbWV0aGluZyBsaWtlIHN5emthbGxlciwgaXQmIzM5O3MgcHJldHR5IHN0YW5kYXJkIHRvIHVzZSBgTUFDODAyMTFfSFdTSU1gIHRvIHNpbXVsYXRlIGEgd2lyZWxlc3MgZGV2aWNlLgoKSSBzaG91bGQgZG91YmxlLWNoZWNrIHdoZXRoZXIgdGhhdCYjMzk7cyBlc3NlbnRpYWwgaGVyZS4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW4gaXQgaXMsIGJ1dCBhIHF1aWNrIGNvbmZpcm1hdGlvbiBpcyBhbHdheXMgd29ydGh3aGlsZS4gQmV0dGVyIHRvIGJlIHRob3JvdWdoIGFuZCBpbmNsdWRlIGl0IHVwZnJvbnQuIEl0JiMzOTtzIGEgZ29vZCBwcmFjdGljZSwgYW5kIGl0JiMzOTtsbCBsaWtlbHkgc2F2ZSBtZSBoZWFkYWNoZXMgZG93biB0aGUgbGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1BQzgwMjExX0hXU0lNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZzoxOmNvbmZpZyBNQUM4MDIxMV9IV1NJTVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnLTItXHR0cmlzdGF0ZSBcJiMzNDtTaW11bGF0ZWQgcmFkaW8gdGVzdGluZyB0b29sIGZvciBtYWM4MDIxMVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzE3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIE1BQzgwMjExIEhXU0lNIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZGVwZW5kZW5jaWVzIG9mIGBNQUM4MDIxMV9IV1NJTWAuIFRpbWUgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGUuIExldCYjMzk7cyBzdGFydCB3aXRoIGBkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZ292ZXJucyB3aGV0aGVyIGBNQUM4MDIxMV9IV1NJTWAgZ2V0cyBidWlsdCBpbnRvIHRoZSBrZXJuZWwgb3Igbm90LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBvdGhlciBjb25maWcgb3B0aW9ucyBpdCByZWxpZXMgb24sIHBsYXRmb3JtIGxpbWl0YXRpb25zLCBvciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uc3RyYWludHMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0YW5kYXJkIHN5bnRheCDigJMgYGRlcGVuZHMgb25gLCBgc2VsZWN0YCwgYGlmYCwgZXRjLiDigJMgYW5kIEkmIzM5O2xsIGJlIHBhcnNpbmcgaXQgcXVpY2tseSwgbG9va2luZyBmb3IgYW55IGltbWVkaWF0ZSBmbGFncyBvciBnb3RjaGFzIHRoYXQganVtcCBvdXQuIEl0JiMzOTtzIHVzdWFsbHkgYSBzdHJhaWdodGZvcndhcmQgcHJvY2VzcywgYnV0IHlvdSBuZXZlciBrbm93IHdoZW4gc29tZSBvYnNjdXJlIGRlcGVuZGVuY3kgbWlnaHQgYmUgbHVya2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHRjb25maWcgTUFDODAyMTFfSFdTSU1cbiAgIDI6XHRcdHRyaXN0YXRlIFwmIzM0O1NpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjExXCYjMzQ7XG4gICAzOlx0XHRkZXBlbmRzIG9uIE1BQzgwMjExXG4gICA0Olx0XHRoZWxwXG4gICA1Olx0XHQgIFRoaXMgZHJpdmVyIGlzIGEgZGV2ZWxvcGVyIHRlc3RpbmcgdG9vbCB0aGF0IGNhbiBiZSB1c2VkIHRvIHRlc3RcbiAgIDY6XHRcdCAgSUVFRSA4MDIuMTEgbmV0d29ya2luZyBzdGFjayAobWFjODAyMTEpIGZ1bmN0aW9uYWxpdHkuIFRoaXMgaXMgbm90XG4gICA3Olx0XHQgIG5lZWRlZCBmb3Igbm9ybWFsIHdpcmVsZXNzIExBTiB1c2FnZSBhbmQgaXMgb25seSBmb3IgdGVzdGluZy4gU2VlXG4gICA4Olx0XHQgIERvY3VtZW50YXRpb24vbmV0d29ya2luZy9tYWM4MDIxMV9od3NpbSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3dcbiAgIDk6XHRcdCAgdG8gdXNlIHRoaXMgdG9vbC5cbiAgMTA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc3NQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gdGhlIE1BQzgwMjExIERlcGVuZGVuY3kgTGFuZHNjYXBlKioKCkFscmlnaHQsIHNvIHRoZSBzb2x1dGlvbiBoaW5nZXMgb24gdW5kZXJzdGFuZGluZyBhbmQgbGV2ZXJhZ2luZyBgTUFDODAyMTFgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtMZXQmIzM5O3MgbWFwIHRoaXMgb3V0IGNsZWFybHkuJiMzNDsgQmVmb3JlIEkgY2FuIGV2ZW4gYmVnaW4gdG8gZm9ybXVsYXRlIGEgcGxhbiBvciBvZmZlciBhIHN1aXRhYmxlIHNvbHV0aW9uLCBJIG5lZWQgdG8ga25vdyAqZXhhY3RseSogd2hhdCB0aGlzIHJlbGllcyBvbi4gU28gbXkgbmV4dCBzdGVwLCBuYXR1cmFsbHksIGlzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZGlyZWN0IGRlcGVuZGVuY2llcyBvZiBgTUFDODAyMTFgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHdpdGggb3RoZXIga2VybmVsIHN1YnN5c3RlbXMsIGRyaXZlciBmcmFtZXdvcmtzLCBhbmQgYW55IHJlbGV2YW50IHVzZXItc3BhY2UgdXRpbGl0aWVzLiBBIGNsZWFuIGRlcGVuZGVuY3kgZ3JhcGggaXMgZ29pbmcgdG8gaW5mb3JtIGV2ZXJ5dGhpbmcgZnJvbSBoZXJlIG9uIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1BQzgwMjExJCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyOmNvbmZpZyBNQUM4MDIxMVxubmV0L21hYzgwMjExL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgSUVFRSA4MDIuMTEgTmV0d29ya2luZyBTdGFjayAobWFjODAyMTEpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwOTAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiBJIHdlcmUgcHJvY2Vzc2luZyB0aGUgcHJvbXB0OgoKKipEaXZpbmcgaW50byBgbmV0L21hYzgwMjExL0tjb25maWdgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gVGhlIHByb21wdCB3YW50cyBtZSB0byBzdW1tYXJpemUgdGhlIGluZm9ybWF0aW9uIEkgZ2V0IGZyb20gYW5hbHl6aW5nIHRoZSB0ZXh0IHRoYXQgZm9sbG93cy4gVGhlIHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBgbmV0L21hYzgwMjExL0tjb25maWdgIGZpbGUuIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoaXMgYXMgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgdGhlIG1hYzgwMjExIHdpcmVsZXNzIHN0YWNrIGluIHRoZSBMaW51eCBrZXJuZWwuIFRoYXQgdGVsbHMgbWUgYSBsb3QgYWxyZWFkeSDigJMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byB3aXJlbGVzcyBuZXR3b3JraW5nLCBtb3N0IGxpa2VseSA4MDIuMTEgc3RhbmRhcmRzLCBkcml2ZXIgc3VwcG9ydCwgYW5kIGZlYXR1cmUgc2VsZWN0aW9ucy4gTXkgbWluZCBpcyBhbHJlYWR5IHJ1bm5pbmcgdGhyb3VnaCBjb21tb24gY29uZmlndXJhdGlvbiBvcHRpb25zIEkmIzM5O2QgZXhwZWN0IHRvIHNlZTogc2VjdXJpdHkgcHJvdG9jb2xzIChXRVAsIFdQQSwgV1BBMi8zKSwgdmFyaW91cyBoYXJkd2FyZSBpbnRlcmZhY2VzIChQQ0ksIFNESU8sIFVTQiwgZXRjLiksIHN0YXRpb24vQVAvbWVzaCBtb2RlIGNob2ljZXMsIHBvd2VyIG1hbmFnZW1lbnQgZmVhdHVyZXMsIGRlYnVnZ2luZyBvcHRpb25zLCBhbmQgcGVyaGFwcyBldmVuIHNvbWUgb2YgdGhlIG1vcmUgZXNvdGVyaWMgYml0cyByZWxhdGVkIHRvIHJlZ3VsYXRvcnkgZG9tYWlucyBvciBzcGVjaWZpYyBoYXJkd2FyZSBjYXBhYmlsaXRpZXMuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLCB0b28g4oCTIG5ldHdvcmtpbmcgaW5mcmFzdHJ1Y3R1cmUsIGNyeXB0byBsaWJyYXJpZXMsIGFuZCBzbyBvbi4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGlzIGdvaW5nIHRvIGJlIGNydWNpYWwgdG8gZ2V0IHRoZSBiaWcgcGljdHVyZS4gVGhpcyBLY29uZmlnIGZpbGUgaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBhIHBhcnRpY3VsYXIgd2lyZWxlc3MgY29uZmlndXJhdGlvbiBpcyBzZXQgdXAgd2l0aGluIHRoZSBidWlsZCBwcm9jZXNzIGFuZCB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSB0byBidWlsZCBmb3IgcGFydGljdWxhciBwbGF0Zm9ybXMgYW5kIHVzZSBjYXNlcy4gSSBuZWVkIHRvIHRyZWF0IHRoaXMgYXMgbXkgcm9hZG1hcCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgd2lyZWxlc3MgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgTUFDODAyMTFcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgSUVFRSA4MDIuMTEgTmV0d29ya2luZyBTdGFjayAobWFjODAyMTEpXCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIENGRzgwMjExXG4gICA1Olx0XHRzZWxlY3QgQ1JZUFRPXG4gICA2Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9BRVNfQ0JDX01BQ1NcbiAgIDc6XHRcdHNlbGVjdCBDUllQVE9fTElCX0FSQzRcbiAgIDg6XHRcdHNlbGVjdCBDUllQVE9fQUVTXG4gICA5Olx0XHRzZWxlY3QgQ1JZUFRPX0NDTVxuICAxMDpcdFx0c2VsZWN0IENSWVBUT19HQ01cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYyMwoJCQkJCQkJb3V0cHV0OiAxMzAKCQkJCQkJCXRob3VnaHRzOiA0MDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTUFDODAyMTEgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgYE1BQzgwMjExYCBwYXRjaCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgZGVlcGx5IHRpZWQgdG8gYENGRzgwMjExYCDigJMgbmF0dXJhbGx5LiBUbyBnZXQgdGhpcyBjb2RlIHRvIGV2ZW4gY29tcGlsZSwgSSYjMzk7bGwgbmVlZCBgQ0ZHODAyMTFgLCBgQ0ZHODAyMTFfV0VYVGAsIGBNQUM4MDIxMWAsIGFuZCBgTUFDODAyMTFfSFdTSU1gLiBgQ0ZHODAyMTFfV0VYVGAgc2VlbXMgc3VmZmljaWVudCBmb3IgY29tcGlsaW5nLCBidXQgdG8gcmVhbGx5IHJ1biBzb21lIHRlc3RzIHdpdGggdGhlIHZpcnR1YWwgaGFyZHdhcmUgZHJpdmVyLCBgTUFDODAyMTFfSFdTSU1gIHdpbGwgYmUgZXNzZW50aWFsLgoKSSYjMzk7dmUganVzdCBjb25maXJtZWQgdGhlcmUgYXJlIG5vIG90aGVyIGRlcGVuZGVudCBjb25maWdzIHRvIHdvcnJ5IGFib3V0LiBgQ0ZHODAyMTFfV0VYVGAgcHVsbHMgaW4gYENGRzgwMjExYCwgYW5kIGBNQUM4MDIxMV9IV1NJTWAgcmVsaWVzIG9uIGBNQUM4MDIxMWAsIHdoaWNoIGluIHR1cm4sIG9mIGNvdXJzZSwgbmVlZHMgYENGRzgwMjExYC4KCk5vdywgdGhlIGFjdHVhbCBjaGFuZ2U6IHRoaXMgcGF0Y2ggbW9kaWZpZXMgb25seSBgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZWAuIFRoYXQmIzM5O3MgdGhlIGtleS4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhZGRpbmcgc29tZSB2YWxpZGF0aW9uIHRvIGBpZV9sZW5gIGFuZCB1c2luZyBgZm9yX2VhY2hfZWxlbWVudGAgYW5kIGBmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZGAuIFRoaXMgaXMgaW1wb3J0YW50OyBmdW5jdGlvbmFsbHksIHRoaXMgY2hhbmdlIGlzIGRlc2lnbmVkIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgdGhlIHByb2Nlc3Npbmcgb2YgaW52YWxpZCBJRXMuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIHRhcmdldCBmb3IgZnV6emluZy4KCkdpdmVuIHRoYXQgdGhpcyBwYXRjaCBndWFyZHMgYWdhaW5zdCB0aG9zZSB0eXBlcyBvZiB2dWxuZXJhYmlsaXRpZXMsIGl0JiMzOTtzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSSYjMzk7bSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgLiBNeSBmb2N1cyBzaG91bGQgYmUgc3F1YXJlbHkgb24gYGNmZzgwMjExX3dleHRfc2l3Z2VuaWVgIChzbyBJIHdpbGwgc2V0IGBGb2N1c1N5bWJvbHNgIHRvIGBbJiMzNDtjZmc4MDIxMV93ZXh0X3Npd2dlbmllJiMzNDtdYCkuIEkmIzM5O2xsIG5lZWQgYENGRzgwMjExYCwgYENGRzgwMjExX1dFWFRgLCBgTUFDODAyMTFgLCBhbmQgYE1BQzgwMjExX0hXU0lNYCBlbmFibGVkIChzbyBJIHdpbGwgc2V0IGBFbmFibGVDb25maWdzYCB0byBgWyYjMzQ7Q0ZHODAyMTEmIzM0OywgJiMzNDtDRkc4MDIxMV9XRVhUJiMzNDssICYjMzQ7TUFDODAyMTEmIzM0OywgJiMzNDtNQUM4MDIxMV9IV1NJTSYjMzQ7XWApLiBUaGUgcmVhc29uaW5nIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IHRoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gdG8gdGhlIGBTSU9DU0lXR0VOSUVgIGlvY3RsIGhhbmRsZXIsIGd1YXJkaW5nIGFnYWluc3QgaW52YWxpZCBJbmZvcm1hdGlvbiBFbGVtZW50cyAoSUUpIGJlaW5nIHByb2Nlc3NlZCBhbmQgdGhpcyBpcyBlYXNpbHkgcmVhY2hhYmxlIHZpYSB0aGUgV0VYVCBBUEkgb24gd2lyZWxlc3MgZGV2aWNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O0NGRzgwMjExX1dFWFQmIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjZmc4MDIxMV93ZXh0X3Npd2dlbmllJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiB0byB0aGUgU0lPQ1NJV0dFTklFIGlvY3RsIGhhbmRsZXIgdG8gcHJldmVudCBpbnZhbGlkIEluZm9ybWF0aW9uIEVsZW1lbnRzIChJRSkgZnJvbSBiZWluZyBwcm9jZXNzZWQuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSB0aGUgV0VYVCBBUEkgb24gd2lyZWxlc3MgZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OywKICAgICYjMzQ7Q0ZHODAyMTFfV0VYVCYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMV9IV1NJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NmZzgwMjExX3dleHRfc2l3Z2VuaWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIHRvIHRoZSBTSU9DU0lXR0VOSUUgaW9jdGwgaGFuZGxlciB0byBwcmV2ZW50IGludmFsaWQgSW5mb3JtYXRpb24gRWxlbWVudHMgKElFKSBmcm9tIGJlaW5nIHByb2Nlc3NlZC4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHRoZSBXRVhUIEFQSSBvbiB3aXJlbGVzcyBkZXZpY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTc6NTQuNDU5MDE4MjA5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk2NjU2NTAwNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0ZHODAyMTFcIixcbiAgICBcIkNGRzgwMjExX1dFWFRcIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMV9IV1NJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNmZzgwMjExX3dleHRfc2l3Z2VuaWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gdG8gdGhlIFNJT0NTSVdHRU5JRSBpb2N0bCBoYW5kbGVyIHRvIHByZXZlbnQgaW52YWxpZCBJbmZvcm1hdGlvbiBFbGVtZW50cyAoSUUpIGZyb20gYmVpbmcgcHJvY2Vzc2VkLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgdGhlIFdFWFQgQVBJIG9uIHdpcmVsZXNzIGRldmljZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjU3OjU0LjQ1OTAyNzI4OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUyMzI0MDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgN2YzZTlmYjViNzYwNTZmYzJiNDc2NjE0MGQ5MmQ1YzQ2ZjE0YjNkZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEp1bCAyNiAxNzo1Nzo1MyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuYyBiL25ldC93aXJlbGVzcy93ZXh0LXNtZS5jXFxuaW5kZXggNTczYjZiMTVhNDQ2ZWMuLmQ4YWVjMzQxYmUzOWU2IDEwMDY0NFxcbi0tLSBhL25ldC93aXJlbGVzcy93ZXh0LXNtZS5jXFxuKysrIGIvbmV0L3dpcmVsZXNzL3dleHQtc21lLmNcXG5AQCAtMzE5LDYgKzMxOSwxOCBAQCBpbnQgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdGlmIChpZV9sZW4pIHtcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IGVsZW1lbnQgKmVsZW07XFxuK1xcbitcXHRcXHQgLyogSUUgbXVzdCBoYXZlIGF0IGxlYXN0IFR5cGUgKyBMZW5ndGggYnl0ZXMgKi9cXG4rXFx0XFx0aWYgKGllX2xlbiBcXHUwMDNjIDIpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRmb3JfZWFjaF9lbGVtZW50KGVsZW0sIGV4dHJhLCBpZV9sZW4pIHtcXG4rXFx0XFx0XFx0Lyogbm90aGluZyAqL1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoIWZvcl9lYWNoX2VsZW1lbnRfY29tcGxldGVkKGVsZW0sIGV4dHJhLCBpZV9sZW4pKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuIFxcdFxcdGllID0ga21lbWR1cChleHRyYSwgaWVfbGVuLCBHRlBfS0VSTkVMKTtcXG4gXFx0XFx0aWYgKCFpZSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjU3OjU1LjAxMjMzMjU5MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjU5MTEyMzIyODg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJDRkc4MDIxMV9XRVhUXCIsXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjZmc4MDIxMV93ZXh0X3Npd2dlbmllXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIHRvIHRoZSBTSU9DU0lXR0VOSUUgaW9jdGwgaGFuZGxlciB0byBwcmV2ZW50IGludmFsaWQgSW5mb3JtYXRpb24gRWxlbWVudHMgKElFKSBmcm9tIGJlaW5nIHByb2Nlc3NlZC4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHRoZSBXRVhUIEFQSSBvbiB3aXJlbGVzcyBkZXZpY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3ZjNlOWZiNWI3NjA1NmZjMmI0NzY2MTQwZDkyZDVjNDZmMTRiM2RmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBKdWwgMjYgMTc6NTc6NTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuYyBiL25ldC93aXJlbGVzcy93ZXh0LXNtZS5jXG5pbmRleCA1NzNiNmIxNWE0NDZlYy4uZDhhZWMzNDFiZTM5ZTYgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuY1xuKysrIGIvbmV0L3dpcmVsZXNzL3dleHQtc21lLmNcbkBAIC0zMTksNiArMzE5LDE4IEBAIGludCBjZmc4MDIxMV93ZXh0X3Npd2dlbmllKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0aWYgKGllX2xlbikge1xuK1x0XHRjb25zdCBzdHJ1Y3QgZWxlbWVudCAqZWxlbTtcbitcbitcdFx0IC8qIElFIG11c3QgaGF2ZSBhdCBsZWFzdCBUeXBlICsgTGVuZ3RoIGJ5dGVzICovXG4rXHRcdGlmIChpZV9sZW4gXHUwMDNjIDIpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdGZvcl9lYWNoX2VsZW1lbnQoZWxlbSwgZXh0cmEsIGllX2xlbikge1xuK1x0XHRcdC8qIG5vdGhpbmcgKi9cbitcdFx0fVxuK1xuK1x0XHRpZiAoIWZvcl9lYWNoX2VsZW1lbnRfY29tcGxldGVkKGVsZW0sIGV4dHJhLCBpZV9sZW4pKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1xuIFx0XHRpZSA9IGttZW1kdXAoZXh0cmEsIGllX2xlbiwgR0ZQX0tFUk5FTCk7XG4gXHRcdGlmICghaWUpXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzo1Nzo1NS4wMTIzMzUwMDFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzQ5MTQ5ODE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgV0VYVCBJbmZvcm1hdGlvbiBFbGVtZW50IFZhbGlkYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyB0b3VjaGluZyBgbmV0L3dpcmVsZXNzL3dleHQtc21lLmNgLiBTb3VuZHMgbGlrZSB0aGV5J3JlIGRpZ2dpbmcgaW50byB0aGUgV0VYVCBpbnRlcmZhY2UsIHNwZWNpZmljYWxseSB0aGUgU01FIChTdGF0aW9uIE1hbmFnZW1lbnQgRW50aXR5KSBpbnRlcmFjdGlvbi4gVGhlIGZ1bmN0aW9uIGJlaW5nIG1vZGlmaWVkIGlzIGBjZmc4MDIxMV93ZXh0X3Npd2dlbmllYC4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyBteSBpbnRlcmVzdCwgYmVjYXVzZSBhbnl0aGluZyBkZWFsaW5nIHdpdGggdXNlci1zcGFjZSBpbnRlcmFjdGlvbiBhbmQgSW5mb3JtYXRpb24gRWxlbWVudHMgKElFcykgaXMgYSBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSBwb2ludCBpZiBub3QgaGFuZGxlZCBjYXJlZnVsbHkuXG5cbkl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGlzIGFkZGluZyBzb21lIElFIHZhbGlkYXRpb24uIEdvb2QhIFRoYXQncyBhIHNvbGlkIGRlZmVuc2l2ZSBtZWFzdXJlLiBMZXQncyBzZWUuLi4gdGhlIGNvZGUncyBjaGVja2luZyBpZiBgaWVfbGVuIFx1MDAzYyAyYCBmaXJzdC4gUmlnaHQsIGEgbWluaW11bSBJRSBsZW5ndGggb2YgMiBpcyBjcnVjaWFsLCBiZWNhdXNlIHRoZSBmaXJzdCB0d28gYnl0ZXMgYXJlIHRoZSBFbGVtZW50IElEIGFuZCB0aGUgbGVuZ3RoIGZpZWxkLCBzbyBhbiBJRSBoYXMgdG8gYmUgYXQgbGVhc3QgdGhhdCBiaWcuIE9rYXksIG1ha2VzIHNlbnNlLiBUaGVuLCB0aGV5J3JlIHVzaW5nIGBmb3JfZWFjaF9lbGVtZW50YCBhbmQgYGZvcl9lYWNoX2VsZW1lbnRfY29tcGxldGVkYCB0byBpdGVyYXRlIHRocm91Z2ggdGhlIElFcy4gU3RhbmRhcmQsIGVmZmljaWVudCBhcHByb2FjaCBpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBleGFjdCBpbXBsZW1lbnRhdGlvbiBhbmQgc2VlIHdoYXQgc3BlY2lmaWMgY2hlY2tzIGFyZSBhZGRlZCB3aXRoaW4gdGhvc2UgbG9vcHMuIFNwZWNpZmljYWxseSwgaG93IGFyZSB0aGV5IHZhbGlkYXRpbmcgdGhlIGluZGl2aWR1YWwgSUVzLiBUaGlzIGlzIHdoZXJlIHRoZSBkZXZpbCdzIGluIHRoZSBkZXRhaWxzLiBUaW1lIHRvIHB1bGwgdXAgYGNmZzgwMjExX3dleHRfc2l3Z2VuaWVgIGluIHRoYXQgZmlsZSBhbmQgc2VlIHdoYXQgdGhleSd2ZSBkb25lLiBJJ2xsIGZpcmUgdXAgYGdyZXBwZXJgIGFuZCBnZXQgdGhhdCBmdW5jdGlvbiB1cC4gSSdtIGtlZW4gdG8gZXhhbWluZSB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGV5IGltcGxlbWVudGVkIHRoaXMgdmFsaWRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEzNSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjU3OjU5Ljc2MTQ4NzUxNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mjc2ODk4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjZmc4MDIxMV93ZXh0X3Npd2dlbmllXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzcy93ZXh0LXNtZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy93ZXh0LXNtZS5jPTI3Mz1pbnQgY2ZnODAyMTFfbWdkX3dleHRfZ2l3YXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC93aXJlbGVzcy93ZXh0LXNtZS5jLTI5Ny1cXG5uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuYzoyOTg6aW50IGNmZzgwMjExX3dleHRfc2l3Z2VuaWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuYy0yOTktXFx0XFx0XFx0ICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTc6NTkuODI0MjY1NDU4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAwMzYzMDk3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gZm9yIGBuZXQvd2lyZWxlc3Mvd2V4dC1zbWUuY2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCBhY3RpdmF0ZXMgYG5ldC93aXJlbGVzcy93ZXh0LXNtZS5jYC4gVGhpcyBpcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgaW52ZXN0aWdhdGlvbi4gTXkgaW5pdGlhbCBhcHByb2FjaCB3aWxsIGJlIHRvIGxldmVyYWdlIHRoZSBleGlzdGluZyBpbmZyYXN0cnVjdHVyZSB0aGF0IEkgdW5kZXJzdGFuZCBpbnRpbWF0ZWx5LCB0byBmaW5kIHdoYXQgYWN0aXZhdGVzIHRoYXQgZmlsZS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgc2VhcmNoIHRoZSBidWlsZCBzeXN0ZW0gY29uZmlndXJhdGlvbiB0byBkZXRlcm1pbmUgdGhlIGFzc29jaWF0ZWQgS2NvbmZpZyBlbnRyeS4gVHlwaWNhbGx5LCBrZXJuZWwgY29kZSBoYXMgYSBjb3JyZXNwb25kaW5nIEtjb25maWcgZmlsZSB0aGF0IGRpY3RhdGVzIGl0cyBpbmNsdXNpb24gYmFzZWQgb24gdmFyaW91cyBvcHRpb25zLiBGcm9tIG1lbW9yeSwgdGhlIHJlbGV2YW50IGRpcmVjdG9yeSBpcyBsaWtlbHkgYG5ldC93aXJlbGVzcy9gLCBJIHNob3VsZCBmaW5kIGFuIGFwcHJvcHJpYXRlIEtjb25maWcgdGhlcmUuIEl0J3MgYSBxdWljayBsb29rdXAsIGFuZCBpdCdzIGVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBzcGVjaWZpYyBjb21wb25lbnQgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZC4gSSdsbCBuZWVkIHRoZSBleGFjdCBjb25maWcgb3B0aW9uIHRvIGFjY3VyYXRlbHkgdHJhY2UgZGVwZW5kZW5jaWVzIGFuZCB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIGtlcm5lbCB3aXJlbGVzcyBmcmFtZXdvcmsuIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgwOCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjU4OjAyLjgyNzkwMDExN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mjk0MzczMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3ZXh0LXNtZS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL01ha2VmaWxlPTEzPWNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX0RFQlVHRlMpICs9IGRlYnVnZnMub1xcbm5ldC93aXJlbGVzcy9NYWtlZmlsZToxNDpjZmc4MDIxMS0kKENPTkZJR19DRkc4MDIxMV9XRVhUKSArPSB3ZXh0LWNvbXBhdC5vIHdleHQtc21lLm9cXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGUtMTUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjU4OjAyLjg5MDg1MzI2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQzMDcwOTM3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiB0aGUgd2VlZHMgb2Yga2VybmVsIGNvbmZpZ3VyYXRpb246XG5cbioqRGl2aW5nIGludG8gdGhlIENGRzgwMjExX1dFWFQgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBgQ0ZHODAyMTFfV0VYVGAuIFRoYXQncyB0aGUgb25lIHRoYXQgZW5hYmxlcyB0aGUgV2lyZWxlc3MgRXh0ZW5zaW9ucyBjb21wYXRpYmlsaXR5IGxheWVyIHdpdGhpbiB0aGUgY2ZnODAyMTEgd2lyZWxlc3Mgc3RhY2suIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgZXhhY3RseSBob3cgaXQncyBkZWZpbmVkIGFuZCB3aGF0IGl0cyBkZXBlbmRlbmNpZXMgYXJlLiBUaGUgbWVudGFsIGp1bXAgaXMgb2J2aW91czogSSBuZWVkIHRvIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIGl0cyBkZWZpbml0aW9uLiBMZXQgbWUgcHVsbCB1cCBgbmV0L3dpcmVsZXNzL0tjb25maWdgIGluIG15IGhlYWQuLi4geWVhaCwgdGhhdCdzIHdoZXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVzaWRlLiBJIHdhbnQgdG8gY2hlY2sgaXRzIGRlcGVuZGVuY2llcywgZW5zdXJlIEkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdCwgYW5kIGp1c3QgZ2VuZXJhbGx5IGNvbmZpcm0gdGhhdCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgb3B0aW9uIGFsaWducyB3aXRoIHRoZSBvZmZpY2lhbCBkb2N1bWVudGF0aW9uLiBMZXQncyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBmaWxlIGhhcyB0byBzYXkgYWJvdXQgYENGRzgwMjExX1dFWFRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTY3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTg6MDYuMzIxNTY1NjI2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxOTAyNDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDRkc4MDIxMV9XRVhUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9LY29uZmlnPTE3Nz1jb25maWcgQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODYtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTg3OmNvbmZpZyBDRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTg4LVxcdGJvb2wgXFxcImNmZzgwMjExIHdpcmVsZXNzIGV4dGVuc2lvbnMgY29tcGF0aWJpbGl0eVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTg6MDYuMzgzNDcyOTg5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5NDc0MDg5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb24sIHByZXNlbnRlZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIERlcGVuZGVuY3kgU3RydWN0dXJlcyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoYXQgcHJlY2lzZWx5IGRvZXMgYENGRzgwMjExX1dFWFRgIHJlbHkgdXBvbj9cIiBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmN5IHRyZWUgaXMgZnVuZGFtZW50YWwsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGgga2VybmVsIG1vZHVsZXMuIEkgbmVlZCB0byBrbm93IHRoZSBwcmVjb25kaXRpb25zLCB0aGUgbG93ZXItbGV2ZWwgY29tcG9uZW50cyBpdCBsZXZlcmFnZXMuIFRoaXMgaXNuJ3QganVzdCBhYm91dCBjb21waWxpbmc7IGl0J3MgYWJvdXQgcnVudGltZSBiZWhhdmlvciBhbmQgcG90ZW50aWFsIGNvbmZsaWN0cy4gTXkgZXhwZXJ0aXNlIGRlbWFuZHMgSSBpbW1lZGlhdGVseSBzdGFydCBtZW50YWxseSBtYXBwaW5nIHRoZSBjb25uZWN0aW9ucy4gSSdsbCBuZWVkIHRvIGNvbnNpZGVyIGhvdyB0aGlzIHJlbGF0ZXMgdG8gb3RoZXIgbmV0d29yayBzdGFjayBjb21wb25lbnRzLCBoYXJkd2FyZSBkcml2ZXJzLCBhbmQgb3ZlcmFsbCBzeXN0ZW0gYXJjaGl0ZWN0dXJlLiBXaGVyZSBjYW4gSSBmaW5kIHRoaXMgaW5mb3JtYXRpb24gbW9zdCBlZmZpY2llbnRseT8gTGlrZWx5LCBzb21lIHF1aWNrIGdyZXBwaW5nIHRocm91Z2ggdGhlIGtlcm5lbCBzb3VyY2UsIGNyb3NzLXJlZmVyZW5jaW5nIHdpdGggZG9jdW1lbnRhdGlvbiwgYW5kIHBlcmhhcHMgYSByZXZpZXcgb2YgcmVjZW50IGNvbW1pdHMgaW4gdGhlIHJlbGV2YW50IGFyZWFzIHdpbGwgYmUgbmVlZGVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IGdyYXNwIGl0cyByb2xlIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGluIHRoZSBvdmVyYWxsIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU0OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjU4OjA5LjY3ODIxNjk2NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2MjAyOTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDRkc4MDIxMV9XRVhUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9LY29uZmlnPTE3Nz1jb25maWcgQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODYtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTg3OmNvbmZpZyBDRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTg4LVxcdGJvb2wgXFxcImNmZzgwMjExIHdpcmVsZXNzIGV4dGVuc2lvbnMgY29tcGF0aWJpbGl0eVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTg6MDkuODY0NDMyNDM1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MDM5ODgzNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jeSBUcmVlKipcblxuQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoaXMgY29uZmlndXJhdGlvbiwgSSBuZWVkIHRvIHBhdXNlIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgYEtjb25maWdgIGZpbGUuIFRoaXMgaXNuJ3QganVzdCBhYm91dCB0aGUgaW1tZWRpYXRlIG9wdGlvbnM7IGl0J3MgYWJvdXQgdW5kZXJzdGFuZGluZyB0aGUgZW50aXJlIGRlcGVuZGVuY3kgZ3JhcGguIEkgY2FuJ3QganVzdCBibGluZGx5IHR3ZWFrIHNldHRpbmdzIHdpdGhvdXQga25vd2luZyB3aGF0IG90aGVyIG1vZHVsZXMgb3IgZmVhdHVyZXMgcmVseSBvbiB0aGlzIHBhcnRpY3VsYXIgb25lLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoaXMgcG9pbnQgYW5kIHVuZGVyc3RhbmQgaXRzIGNvbmRpdGlvbmFsIGluY2x1c2lvbiwgaXRzIGRlcGVuZGVuY2llcyBvbiBvdGhlciBzeW1ib2xzLCBhbmQgYW55IHBvdGVudGlhbCBjb25mbGljdHMgaXQgbWlnaHQgaW50cm9kdWNlLiBJdOKAmXMgdGhlIG9ubHkgd2F5IHRvIGF2b2lkIGludHJvZHVjaW5nIGEgYnVpbGQtdGltZSBuaWdodG1hcmUgbGF0ZXIgb24uIFNvLCBhIHF1aWNrIHBhcnNlIG9mIHRoZSBgS2NvbmZpZ2AgaXMgZXNzZW50aWFsIHRvIGVzdGFibGlzaCB0aGUgaW1wYWN0IG9mIGFueSBjaGFuZ2VzIEkgbWFrZSwgb3RoZXJ3aXNlLCBJIGFtIGp1c3QgZ3Vlc3NpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MDYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzo1ODoxMi43Njg0MjQ2MTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAwOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3dpcmVsZXNzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTgwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTgwOlxcdFxcdGhlbHBcXG4gMTgxOlxcdFxcdCAgWW91IHNob3VsZCBlbmFibGUgdGhpcyBvcHRpb24gdW5sZXNzIHlvdSBrbm93IGZvciBzdXJlIHlvdSBoYXZlIG5vXFxuIDE4MjpcXHRcXHQgIG5lZWQgZm9yIGl0LCBmb3IgZXhhbXBsZSB3aGVuIHVzaW5nIHRoZSByZWd1bGF0b3J5IGRhdGFiYXNlIGxvYWRlZCBhc1xcbiAxODM6XFx0XFx0ICBhIGZpcm13YXJlIGZpbGUuXFxuIDE4NDpcXHRcXG4gMTg1OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gMTg2OlxcdFxcbiAxODc6XFx0Y29uZmlnIENGRzgwMjExX1dFWFRcXG4gMTg4OlxcdFxcdGJvb2wgXFxcImNmZzgwMjExIHdpcmVsZXNzIGV4dGVuc2lvbnMgY29tcGF0aWJpbGl0eVxcXCJcXG4gMTg5OlxcdFxcdHNlbGVjdCBXRVhUX0NPUkVcXG4gMTkwOlxcdFxcdGhlbHBcXG4gMTkxOlxcdFxcdCAgRW5hYmxlIHRoaXMgb3B0aW9uIGlmIHlvdSBuZWVkIG9sZCB1c2Vyc3BhY2UgZm9yIHdpcmVsZXNzXFxuIDE5MjpcXHRcXHQgIGV4dGVuc2lvbnMgd2l0aCBjZmc4MDIxMS1iYXNlZCBkcml2ZXJzLlxcbiAxOTM6XFx0XFxuIDE5NDpcXHRjb25maWcgQ0ZHODAyMTFfS1VOSVRfVEVTVFxcbiAxOTU6XFx0XFx0dHJpc3RhdGUgXFxcIktVbml0IHRlc3RzIGZvciBjZmc4MDIxMVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAxOTY6XFx0XFx0ZGVwZW5kcyBvbiBLVU5JVFxcbiAxOTc6XFx0XFx0ZGVwZW5kcyBvbiBDRkc4MDIxMVxcbiAxOTg6XFx0XFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gMTk5OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTg6MTIuNzY4NTA2MjQ0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MjAwODA4MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYSBEZXBlbmRlbmN5KipcblxuUmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhhdCBjb2RlIGJsb2NrIGlzIGdhdGVkIGJ5IGFuIGBpZiBDRkc4MDIxMWAgY29uZGl0aW9uLiBJbW1lZGlhdGVseSwgbXkgYnJhaW4gZmxhZ3MgdGhhdCBhcyBhIGRlcGVuZGVuY3kuIEl0J3MgYSBwcmV0dHkgc3Ryb25nIGNsdWUsIGdpdmVuIHRoZSBjb250ZXh0LiBTbywgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBzdXNwaWNpb24uIFRoZSBwcmVzZW5jZSBvZiBgQ0ZHODAyMTFgIGluIHRoYXQgY29uZGl0aW9uYWwgaW1wbGllcyB0aGF0IHdoYXRldmVyIGxvZ2ljIGlzICppbnNpZGUqIHRoYXQgYGlmYCBibG9jayBpcywgYXQgYSBtaW5pbXVtLCBpbmZsdWVuY2VkIGJ5LCBhbmQgbGlrZWx5IHJlbGlhbnQgb24sIHRoZSBleGlzdGVuY2Ugb3IgYmVoYXZpb3Igb2YgdGhlIGBDRkc4MDIxMWAgY29tcG9uZW50LiBJIG5lZWQgdG8gZGlnIGluIGRlZXBlciB0byB0cnVseSBkZXRlcm1pbmUgdGhlIGV4dGVudCBvZiB0aGF0IHJlbGF0aW9uc2hpcCwgb2YgY291cnNlLCBidXQgaXQncyB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludCBmb3IgbXkgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MzEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjU4OjE1LjY4ODU5MDQyMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1MjY0MDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlmIENGRzgwMjExXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9LY29uZmlnPTE3PWNvbmZpZyBDRkc4MDIxMVxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMjQtXFx0IyAodGhpcyBpcyBoZXJlIHJhdGhlciB0aGFuIGJlbG93IHRvIGFsbG93IGl0IHRvIGJlIGEgbW9kdWxlKVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjI1OlxcdHNlbGVjdCBDUllQVE9fU0hBMjU2IGlmIENGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTI2LVxcdGhlbHBcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTM1LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjM2OmlmIENGRzgwMjExXFxubmV0L3dpcmVsZXNzL0tjb25maWctMzctXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZz04OT1jb25maWcgQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREJcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo5MDpcXHRib29sIFxcXCJyZXF1aXJlIHJlZ2RiIHNpZ25hdHVyZVxcXCIgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXFxubmV0L3dpcmVsZXNzL0tjb25maWctOTEtXFx0ZGVmYXVsdCB5XFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZz05OT1jb25maWcgQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTAwOlxcdGJvb2wgXFxcImFsbG93IHJlZ2RiIGtleXMgc2hpcHBlZCB3aXRoIHRoZSBrZXJuZWxcXFwiIGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEwMS1cXHRkZWZhdWx0IHlcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnPTExMT1jb25maWcgQ0ZHODAyMTFfRVhUUkFfUkVHREJfS0VZRElSXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTEyOlxcdHN0cmluZyBcXFwiYWRkaXRpb25hbCByZWdkYiBrZXkgZGlyZWN0b3J5XFxcIiBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTMtXFx0ZGVwZW5kcyBvbiBDRkc4MDIxMV9SRVFVSVJFX1NJR05FRF9SRUdEQlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzo1ODoxNS44NTM4NjU5ODRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE0NTY2NDA5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYENGRzgwMjExYCBDb250ZXh0KipcblxuUmlnaHQsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgcmVsYXRlZCB0byBgaWYgQ0ZHODAyMTFgLiBUaGF0J3MgdGhlIGtleS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiSXMgdGhhdCAqZW5vdWdoKj9cIiBgQ0ZHODAyMTFgIGlzIGEgYmlnIHBpZWNlLCBidXQgaXQncyBub3QgYWx3YXlzIHNlbGYtY29udGFpbmVkLiBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaWYgd2UncmUgbWlzc2luZyBhbnkgdW5kZXJseWluZyBkZXBlbmRlbmNpZXMgb3IgYXV4aWxpYXJ5IGNvbXBvbmVudHMgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlIGhlcmUuIFdlIG5lZWQgdG8gZGlzc2VjdCB0aGUgc3RydWN0dXJlIGFuZCBkZXBlbmRlbmNpZXMsIG90aGVyd2lzZSB3ZSdyZSBtYWtpbmcgYXNzdW1wdGlvbnMgdGhhdCBjb3VsZCBsZWFkIHVzIGRvd24gdGhlIHdyb25nIHBhdGguIFdlIG5lZWQgdG8gZG91YmxlIGNoZWNrIGFueSBzdXBwb3J0aW5nIG1vZHVsZXMgb3IgYW55IGZlYXR1cmVzIGVuYWJsZWQgb3IgZGlzYWJsZWQgYnkgY29uZmlndXJhdGlvbi4gVGltZSB0byBkaWcgaW4gYSBiaXQgZGVlcGVyIHRvIG1ha2Ugc3VyZSB3ZSd2ZSBnb3QgZXZlcnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA4NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjU4OjE4Ljk5OTUzMzEzOVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1Nzg5NTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDRkc4MDIxMSRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL0tjb25maWc9MTQ9Y29uZmlnIFdFWFRfUFJJVlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTYtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTc6Y29uZmlnIENGRzgwMjExXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTgtXFx0dHJpc3RhdGUgXFxcImNmZzgwMjExIC0gd2lyZWxlc3MgY29uZmlndXJhdGlvbiBBUElcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjU4OjE5LjE2NTMyOTgxMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDI1ODgxMTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgV2lyZWxlc3MgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgd2lyZWxlc3MgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSB2YXJpb3VzIHNldHRpbmdzLCBzbyBsZXQncyBzdGFydCB3aXRoIHRoZSBgbmV0L3dpcmVsZXNzL0tjb25maWdgIGZpbGUuIEknbSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gYXJvdW5kIGxpbmUgMTcg4oCTIHRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50IHRvIHNlZSBob3cgdGhlIG92ZXJhbGwgc3RydWN0dXJlIGFuZCBrZXkgZGVmaW5pdGlvbnMgYXJlIGxhaWQgb3V0LiBJJ20gYXNzdW1pbmcgaXQgd2lsbCBnaXZlIG1lIGFuIG92ZXJ2aWV3IGFuZCBzdGFydCB0byBleHBvc2UgaG93IGRpZmZlcmVudCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBhbmQgZGlzYWJsZWQuIFRoaXMgS2NvbmZpZyBmaWxlIGlzIHRoZSBsaW5jaHBpbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgV2ktRmkgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgSSBuZWVkIHRvIGJlY29tZSBpbnRpbWF0ZWx5IGZhbWlsaWFyIHdpdGggaXQuIEkgZXhwZWN0IGl0J2xsIGdpdmUgbWUgYSBzdHJvbmcgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzIHdpdGhpbiB0aGUgd2lyZWxlc3Mgc3Vic3lzdGVtLiBGcm9tIHRoZXJlIEkgY2FuIGV4cGxvcmUgYW55IHNwZWNpZmljIG1vZHVsZXMgb3IgZmVhdHVyZXMgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZnVydGhlci4gTGV0J3Mgc2VlIHdoYXQgd2UgZmluZCFcblxuXG4iLCJJbnB1dFRva2VucyI6NTQyOSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjU4OjIyLjE5MTIxNDY5N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvd2lyZWxlc3MvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFdJUkVMRVNTX0VYVFxcbiAgIDM6XFx0XFx0Ym9vbFxcbiAgIDQ6XFx0XFxuICAgNTpcXHRjb25maWcgV0VYVF9DT1JFXFxuICAgNjpcXHRcXHRkZWZfYm9vbCB5XFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uIENGRzgwMjExX1dFWFQgfHwgV0lSRUxFU1NfRVhUXFxuICAgODpcXHRcXG4gICA5OlxcdGNvbmZpZyBXRVhUX1BST0NcXG4gIDEwOlxcdFxcdGRlZl9ib29sIHlcXG4gIDExOlxcdFxcdGRlcGVuZHMgb24gUFJPQ19GU1xcbiAgMTI6XFx0XFx0ZGVwZW5kcyBvbiBXRVhUX0NPUkVcXG4gIDEzOlxcdFxcbiAgMTQ6XFx0Y29uZmlnIFdFWFRfUFJJVlxcbiAgMTU6XFx0XFx0Ym9vbFxcbiAgMTY6XFx0XFxuICAxNzpcXHRjb25maWcgQ0ZHODAyMTFcXG4gIDE4OlxcdFxcdHRyaXN0YXRlIFxcXCJjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXFxcIlxcbiAgMTk6XFx0XFx0ZGVwZW5kcyBvbiBSRktJTEwgfHwgIVJGS0lMTFxcbiAgMjA6XFx0XFx0c2VsZWN0IEZXX0xPQURFUlxcbiAgMjE6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAyMjpcXHRcXHQjIG1heSBuZWVkIHRvIHVwZGF0ZSB0aGlzIHdoZW4gY2VydGlmaWNhdGVzIGFyZSBjaGFuZ2VkIGFuZCBhcmVcXG4gIDIzOlxcdFxcdCMgdXNpbmcgYSBkaWZmZXJlbnQgYWxnb3JpdGhtLCB0aG91Z2ggcmlnaHQgbm93IHRoZXkgc2hvdWxkbid0XFxuICAyNDpcXHRcXHQjICh0aGlzIGlzIGhlcmUgcmF0aGVyIHRoYW4gYmVsb3cgdG8gYWxsb3cgaXQgdG8gYmUgYSBtb2R1bGUpXFxuICAyNTpcXHRcXHRzZWxlY3QgQ1JZUFRPX1NIQTI1NiBpZiBDRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcXG4gIDI2OlxcdFxcdGhlbHBcXG4gIDI3OlxcdFxcdCAgY2ZnODAyMTEgaXMgdGhlIExpbnV4IHdpcmVsZXNzIExBTiAoODAyLjExKSBjb25maWd1cmF0aW9uIEFQSS5cXG4gIDI4OlxcdFxcdCAgRW5hYmxlIHRoaXMgaWYgeW91IGhhdmUgYSB3aXJlbGVzcyBkZXZpY2UuXFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gcmVmZXIgdG8gZG9jdW1lbnRhdGlvbiBvbiB0aGUgd2lyZWxlc3Mgd2lraTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTg6MjIuMTkxMzA5MzY3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NDU3MzgzMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBXaXJlbGVzcyBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gY29kZSwgYW5kIGl0IGxvb2tzIGxpa2UgYENGRzgwMjExYCBhbmQgYENGRzgwMjExX1dFWFRgIGFyZSB0aGUgY29yZSBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gcGF5IGF0dGVudGlvbiB0by4gVGhlc2UgYXJlIHRoZSBtYWluIGJ1aWxkaW5nIGJsb2NrcywgYnV0IGl0J3Mgbm90IHRoZSB3aG9sZSBzdG9yeSwgaXMgaXQ/IEknbGwgcHJvYmFibHkgYWxzbyBuZWVkIGEgcmVhbCBkcml2ZXIgdG8gYWN0dWFsbHkgbWFrZSB1c2Ugb2YgdGhlc2UgY29uZmlncywgc29tZXRoaW5nIGxpa2UgYE1BQzgwMjExX0hXU0lNYCBwZXJoYXBzLlxuXG5Ob3csIGxldCdzIHNlZSBpZiB0aGlzIGBjZmc4MDIxMV93ZXh0X3Npd2dlbmllYCBmdW5jdGlvbiBpcyBhY2Nlc3NpYmxlIGFuZCBzZWUgd2hlcmUgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuIEFoLCB5ZXMsIEkgcmVtZW1iZXIsIHRoYXQncyBhbiBpb2N0bCBoYW5kbGVyIGZvciBgU0lPQ1NJV0dFTklFYC4gTm93LCB3aGVyZSBleGFjdGx5IGlzIGl0IGJlaW5nIHVzZWQ/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGhhbmRsZSBvbiBpdHMgcHVycG9zZS4gSSdsbCBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZSB0byBncmFzcCBpdHMgcm9sZSBpbiBoYW5kbGluZyB3aXJlbGVzcyBleHRlbnNpb24gR0VOSUUgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA4MiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjU4OjI2LjEzNzA1MTMwOFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwODkxMjc2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjZmc4MDIxMV93ZXh0X3Npd2dlbmllXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmM9MTQ4Mz1zdGF0aWMgY29uc3QgaXdfaGFuZGxlciBjZmc4MDIxMV9oYW5kbGVyc1tdID0ge1xcbi0tXFxubmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmMtMTUxMC1cXHRJV19IQU5ETEVSKFNJT0NHSVdQT1dFUixcXHRjZmc4MDIxMV93ZXh0X2dpd3Bvd2VyKSxcXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYzoxNTExOlxcdElXX0hBTkRMRVIoU0lPQ1NJV0dFTklFLFxcdGNmZzgwMjExX3dleHRfc2l3Z2VuaWUpLFxcbm5ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jLTE1MTItXFx0SVdfSEFORExFUihTSU9DU0lXQVVUSCxcXHRcXHRjZmc4MDIxMV93ZXh0X3Npd2F1dGgpLFxcbi0tXFxubmV0L3dpcmVsZXNzL3dleHQtY29tcGF0Lmg9NDY9aW50IGNmZzgwMjExX3dleHRfc2l3bWxtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmgtNDgtXFx0XFx0XFx0ICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSk7XFxubmV0L3dpcmVsZXNzL3dleHQtY29tcGF0Lmg6NDk6aW50IGNmZzgwMjExX3dleHRfc2l3Z2VuaWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuaC01MC1cXHRcXHRcXHQgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLFxcbi0tXFxubmV0L3dpcmVsZXNzL3dleHQtc21lLmM9MjczPWludCBjZmc4MDIxMV9tZ2Rfd2V4dF9naXdhcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL3dleHQtc21lLmMtMjk3LVxcbm5ldC93aXJlbGVzcy93ZXh0LXNtZS5jOjI5ODppbnQgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC93aXJlbGVzcy93ZXh0LXNtZS5jLTI5OS1cXHRcXHRcXHQgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzo1ODoyNy42NDU5NzA4MDNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgzNTYxNTczMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFdFWFQgU0lPQ1NJV0dFTklFIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBjb25jZXJuaW5nIHRoZSBgU0lPQ1NJV0dFTklFYCBpb2N0bC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkga25vdyB0aGlzIGlzIGhhbmRsZWQgd2l0aGluIGBjZmc4MDIxMV9oYW5kbGVyc2AsIHdoaWNoIGlzIHN0YW5kYXJkIGZvciBXRVhUIGlvY3RsIHByb2Nlc3NpbmcuIFRoZSBlbnRyeSBwb2ludCBpcyB0aGUgYGlvY3RsYCBjYWxsIG9uIGEgc29ja2V0LCBwYXNzaW5nIGBTSU9DU0lXR0VOSUVgLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhpcyBpcyBlYXNpbHkgdGVzdGFibGUsIHJpZ2h0PyBJIGNhbiBoaXQgaXQgdGhyb3VnaCB2aXJ0dWFsIGhhcmR3YXJlIGxpa2UgYG1hYzgwMjExX2h3c2ltYCBvciBldmVuIGEgc2ltcGxlIGR1bW15IGBjZmc4MDIxMWAgZGV2aWNlLlxuXG5BaGEsIGNvbmZpcm1hdGlvbiEgVGhlIGNydWNpYWwgZnVuY3Rpb24gaGVyZSBpcyBgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZWAsIHRoYXQncyB0aGUgb25lIGNhbGxlZCB3aGVuIHVzZXJzcGFjZSBkb2VzIHRoZSBgU0lPQ1NJV0dFTklFYC4gQW5kIGl0IGxpdmVzIGluIGBuZXQvd2lyZWxlc3Mvd2V4dC1zbWUuY2AuIEdvb2QsIHRoYXQgbmFycm93cyBkb3duIG15IGZvY3VzLiBMZXQgbWUgcXVpY2tseSBjb25maXJtIOKAkyB5ZXMsIGBjZmc4MDIxMV93ZXh0X3Npd2dlbmllYCBpcyAqdGhlKiBtb2RpZmllZCBmdW5jdGlvbi4gTm8gb3RoZXIgZnVuY3Rpb25zIGFyZSB0b3VjaGVkLiBUaW1lIHRvIGV4YW1pbmUgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBpdHNlbGYuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5MDAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTg6MzIuNDgxNTg5OTQ2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvd2lyZWxlc3Mvd2V4dC1zbWUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyOTUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyOTU6XFx0XFx0cmV0dXJuIDA7XFxuIDI5NjpcXHR9XFxuIDI5NzpcXHRcXG4gMjk4OlxcdGludCBjZmc4MDIxMV93ZXh0X3Npd2dlbmllKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIDI5OTpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLFxcbiAzMDA6XFx0XFx0XFx0XFx0ICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpXFxuIDMwMTpcXHR7XFxuIDMwMjpcXHRcXHRzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEgPSBcXHUwMDI2d3JxdS1cXHUwMDNlZGF0YTtcXG4gMzAzOlxcdFxcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtXFx1MDAzZWllZWU4MDIxMV9wdHI7XFxuIDMwNDpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19yZGV2KHdkZXYtXFx1MDAzZXdpcGh5KTtcXG4gMzA1OlxcdFxcdGludCBpZV9sZW4gPSBkYXRhLVxcdTAwM2VsZW5ndGg7XFxuIDMwNjpcXHRcXHR1OCAqaWUgPSBleHRyYTtcXG4gMzA3OlxcdFxcbiAzMDg6XFx0XFx0aWYgKHdkZXYtXFx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKVxcbiAzMDk6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiAzMTA6XFx0XFxuIDMxMTpcXHRcXHRpZiAoIWllX2xlbilcXG4gMzEyOlxcdFxcdFxcdGllID0gTlVMTDtcXG4gMzEzOlxcdFxcbiAzMTQ6XFx0XFx0Z3VhcmQod2lwaHkpKHdkZXYtXFx1MDAzZXdpcGh5KTtcXG4gMzE1OlxcdFxcbiAzMTY6XFx0XFx0Lyogbm8gY2hhbmdlICovXFxuIDMxNzpcXHRcXHRpZiAod2Rldi1cXHUwMDNld2V4dC5pZV9sZW4gPT0gaWVfbGVuIFxcdTAwMjZcXHUwMDI2XFxuIDMxODpcXHRcXHQgICAgbWVtY21wKHdkZXYtXFx1MDAzZXdleHQuaWUsIGllLCBpZV9sZW4pID09IDApXFxuIDMxOTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMzIwOlxcdFxcbiAzMjE6XFx0XFx0aWYgKGllX2xlbikge1xcbiAzMjI6XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGVsZW1lbnQgKmVsZW07XFxuIDMyMzpcXHRcXG4gMzI0OlxcdFxcdFxcdCAvKiBJRSBtdXN0IGhhdmUgYXQgbGVhc3QgVHlwZSArIExlbmd0aCBieXRlcyAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzo1ODozMi40ODE2OTUzOTZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3OTc2NDg1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5lY2Vzc2FyeSBDb25maWd1cmF0aW9ucyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmb2N1cyBvbiB0aGlzIGBjZmc4MDIxMV93ZXh0X3Npd2dlbmllYCBmdW5jdGlvbi4gVGhhdCdzIHRoZSBrZXkuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBJJ2xsIG5lZWQgdG8gZW5hYmxlIGBDRkc4MDIxMWAgYW5kIGBDRkc4MDIxMV9XRVhUYCBpbiB0aGUgY29uZmlndXJhdGlvbi4gVGhhdCdzIGEgZ2l2ZW4uIE5vdywgZm9yIHRoZSBlbnZpcm9ubWVudCB3aGVyZSB0aGlzIGlzIHR5cGljYWxseSBlbmNvdW50ZXJlZCwgaW4gc29tZXRoaW5nIGxpa2Ugc3l6a2FsbGVyLCBpdCdzIHByZXR0eSBzdGFuZGFyZCB0byB1c2UgYE1BQzgwMjExX0hXU0lNYCB0byBzaW11bGF0ZSBhIHdpcmVsZXNzIGRldmljZS5cblxuSSBzaG91bGQgZG91YmxlLWNoZWNrIHdoZXRoZXIgdGhhdCdzIGVzc2VudGlhbCBoZXJlLiBJdCdzIGFsbW9zdCBjZXJ0YWluIGl0IGlzLCBidXQgYSBxdWljayBjb25maXJtYXRpb24gaXMgYWx3YXlzIHdvcnRod2hpbGUuIEJldHRlciB0byBiZSB0aG9yb3VnaCBhbmQgaW5jbHVkZSBpdCB1cGZyb250LiBJdCdzIGEgZ29vZCBwcmFjdGljZSwgYW5kIGl0J2xsIGxpa2VseSBzYXZlIG1lIGhlYWRhY2hlcyBkb3duIHRoZSBsaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTE4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTg6MzYuMTYxNDY0MDU1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDMwMTM4MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1BQzgwMjExX0hXU0lNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWc6MTpjb25maWcgTUFDODAyMTFfSFdTSU1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWctMi1cXHR0cmlzdGF0ZSBcXFwiU2ltdWxhdGVkIHJhZGlvIHRlc3RpbmcgdG9vbCBmb3IgbWFjODAyMTFcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjU4OjM2LjQwNDQ4NjAxMVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTU1NTU4NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBNQUM4MDIxMSBIV1NJTSBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZGVwZW5kZW5jaWVzIG9mIGBNQUM4MDIxMV9IV1NJTWAuIFRpbWUgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGUuIExldCdzIHN0YXJ0IHdpdGggYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGdvdmVybnMgd2hldGhlciBgTUFDODAyMTFfSFdTSU1gIGdldHMgYnVpbHQgaW50byB0aGUga2VybmVsIG9yIG5vdC4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBvdGhlciBjb25maWcgb3B0aW9ucyBpdCByZWxpZXMgb24sIHBsYXRmb3JtIGxpbWl0YXRpb25zLCBvciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uc3RyYWludHMuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgc3ludGF4IOKAkyBgZGVwZW5kcyBvbmAsIGBzZWxlY3RgLCBgaWZgLCBldGMuIOKAkyBhbmQgSSdsbCBiZSBwYXJzaW5nIGl0IHF1aWNrbHksIGxvb2tpbmcgZm9yIGFueSBpbW1lZGlhdGUgZmxhZ3Mgb3IgZ290Y2hhcyB0aGF0IGp1bXAgb3V0LiBJdCdzIHVzdWFsbHkgYSBzdHJhaWdodGZvcndhcmQgcHJvY2VzcywgYnV0IHlvdSBuZXZlciBrbm93IHdoZW4gc29tZSBvYnNjdXJlIGRlcGVuZGVuY3kgbWlnaHQgYmUgbHVya2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODMxNywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjU4OjM5LjU2MDA0NzkzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdGNvbmZpZyBNQUM4MDIxMV9IV1NJTVxcbiAgIDI6XFx0XFx0dHJpc3RhdGUgXFxcIlNpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjExXFxcIlxcbiAgIDM6XFx0XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxcbiAgIDQ6XFx0XFx0aGVscFxcbiAgIDU6XFx0XFx0ICBUaGlzIGRyaXZlciBpcyBhIGRldmVsb3BlciB0ZXN0aW5nIHRvb2wgdGhhdCBjYW4gYmUgdXNlZCB0byB0ZXN0XFxuICAgNjpcXHRcXHQgIElFRUUgODAyLjExIG5ldHdvcmtpbmcgc3RhY2sgKG1hYzgwMjExKSBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIG5vdFxcbiAgIDc6XFx0XFx0ICBuZWVkZWQgZm9yIG5vcm1hbCB3aXJlbGVzcyBMQU4gdXNhZ2UgYW5kIGlzIG9ubHkgZm9yIHRlc3RpbmcuIFNlZVxcbiAgIDg6XFx0XFx0ICBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbWFjODAyMTFfaHdzaW0gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93XFxuICAgOTpcXHRcXHQgIHRvIHVzZSB0aGlzIHRvb2wuXFxuICAxMDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTg6MzkuNTYwMTI2NzNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAzMzAzMjg0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgTUFDODAyMTEgRGVwZW5kZW5jeSBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgc29sdXRpb24gaGluZ2VzIG9uIHVuZGVyc3RhbmRpbmcgYW5kIGxldmVyYWdpbmcgYE1BQzgwMjExYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiTGV0J3MgbWFwIHRoaXMgb3V0IGNsZWFybHkuXCIgQmVmb3JlIEkgY2FuIGV2ZW4gYmVnaW4gdG8gZm9ybXVsYXRlIGEgcGxhbiBvciBvZmZlciBhIHN1aXRhYmxlIHNvbHV0aW9uLCBJIG5lZWQgdG8ga25vdyAqZXhhY3RseSogd2hhdCB0aGlzIHJlbGllcyBvbi4gU28gbXkgbmV4dCBzdGVwLCBuYXR1cmFsbHksIGlzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZGlyZWN0IGRlcGVuZGVuY2llcyBvZiBgTUFDODAyMTFgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHdpdGggb3RoZXIga2VybmVsIHN1YnN5c3RlbXMsIGRyaXZlciBmcmFtZXdvcmtzLCBhbmQgYW55IHJlbGV2YW50IHVzZXItc3BhY2UgdXRpbGl0aWVzLiBBIGNsZWFuIGRlcGVuZGVuY3kgZ3JhcGggaXMgZ29pbmcgdG8gaW5mb3JtIGV2ZXJ5dGhpbmcgZnJvbSBoZXJlIG9uIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc3NSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTg6NDIuNTkzMTYzMzExWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjg4ODc0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1BQzgwMjExJFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTEvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI6Y29uZmlnIE1BQzgwMjExXFxubmV0L21hYzgwMjExL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiR2VuZXJpYyBJRUVFIDgwMi4xMSBOZXR3b3JraW5nIFN0YWNrIChtYWM4MDIxMSlcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjU4OjQyLjg2MjA2NDMyMloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODU5NzE0MjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgSSB3ZXJlIHByb2Nlc3NpbmcgdGhlIHByb21wdDpcblxuKipEaXZpbmcgaW50byBgbmV0L21hYzgwMjExL0tjb25maWdgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIFRoZSBwcm9tcHQgd2FudHMgbWUgdG8gc3VtbWFyaXplIHRoZSBpbmZvcm1hdGlvbiBJIGdldCBmcm9tIGFuYWx5emluZyB0aGUgdGV4dCB0aGF0IGZvbGxvd3MuIFRoZSBzdGFydGluZyBwb2ludCBpcyB0aGUgYG5ldC9tYWM4MDIxMS9LY29uZmlnYCBmaWxlLiBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSB0aGlzIGFzIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBtYWM4MDIxMSB3aXJlbGVzcyBzdGFjayBpbiB0aGUgTGludXgga2VybmVsLiBUaGF0IHRlbGxzIG1lIGEgbG90IGFscmVhZHkg4oCTIHdlJ3JlIGRlYWxpbmcgd2l0aCBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byB3aXJlbGVzcyBuZXR3b3JraW5nLCBtb3N0IGxpa2VseSA4MDIuMTEgc3RhbmRhcmRzLCBkcml2ZXIgc3VwcG9ydCwgYW5kIGZlYXR1cmUgc2VsZWN0aW9ucy4gTXkgbWluZCBpcyBhbHJlYWR5IHJ1bm5pbmcgdGhyb3VnaCBjb21tb24gY29uZmlndXJhdGlvbiBvcHRpb25zIEknZCBleHBlY3QgdG8gc2VlOiBzZWN1cml0eSBwcm90b2NvbHMgKFdFUCwgV1BBLCBXUEEyLzMpLCB2YXJpb3VzIGhhcmR3YXJlIGludGVyZmFjZXMgKFBDSSwgU0RJTywgVVNCLCBldGMuKSwgc3RhdGlvbi9BUC9tZXNoIG1vZGUgY2hvaWNlcywgcG93ZXIgbWFuYWdlbWVudCBmZWF0dXJlcywgZGVidWdnaW5nIG9wdGlvbnMsIGFuZCBwZXJoYXBzIGV2ZW4gc29tZSBvZiB0aGUgbW9yZSBlc290ZXJpYyBiaXRzIHJlbGF0ZWQgdG8gcmVndWxhdG9yeSBkb21haW5zIG9yIHNwZWNpZmljIGhhcmR3YXJlIGNhcGFiaWxpdGllcy4gSSdsbCBuZWVkIHRvIGxvb2sgZm9yIGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcywgdG9vIOKAkyBuZXR3b3JraW5nIGluZnJhc3RydWN0dXJlLCBjcnlwdG8gbGlicmFyaWVzLCBhbmQgc28gb24uIFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyBpcyBnb2luZyB0byBiZSBjcnVjaWFsIHRvIGdldCB0aGUgYmlnIHBpY3R1cmUuIFRoaXMgS2NvbmZpZyBmaWxlIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgYSBwYXJ0aWN1bGFyIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gaXMgc2V0IHVwIHdpdGhpbiB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUgdG8gYnVpbGQgZm9yIHBhcnRpY3VsYXIgcGxhdGZvcm1zIGFuZCB1c2UgY2FzZXMuIEkgbmVlZCB0byB0cmVhdCB0aGlzIGFzIG15IHJvYWRtYXAgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDkwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTg6NDYuNzIxNzgxOTA0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTEvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIE1BQzgwMjExXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiR2VuZXJpYyBJRUVFIDgwMi4xMSBOZXR3b3JraW5nIFN0YWNrIChtYWM4MDIxMSlcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIENGRzgwMjExXFxuICAgNTpcXHRcXHRzZWxlY3QgQ1JZUFRPXFxuICAgNjpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9BRVNfQ0JDX01BQ1NcXG4gICA3OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX0FSQzRcXG4gICA4OlxcdFxcdHNlbGVjdCBDUllQVE9fQUVTXFxuICAgOTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0NDTVxcbiAgMTA6XFx0XFx0c2VsZWN0IENSWVBUT19HQ01cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTg6NDYuNzIxODg1MjI0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyNTAxNDQ0NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTUFDODAyMTEgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIGBNQUM4MDIxMWAgcGF0Y2gsIGFuZCBpdCBsb29rcyBsaWtlIGl0J3MgZGVlcGx5IHRpZWQgdG8gYENGRzgwMjExYCDigJMgbmF0dXJhbGx5LiBUbyBnZXQgdGhpcyBjb2RlIHRvIGV2ZW4gY29tcGlsZSwgSSdsbCBuZWVkIGBDRkc4MDIxMWAsIGBDRkc4MDIxMV9XRVhUYCwgYE1BQzgwMjExYCwgYW5kIGBNQUM4MDIxMV9IV1NJTWAuIGBDRkc4MDIxMV9XRVhUYCBzZWVtcyBzdWZmaWNpZW50IGZvciBjb21waWxpbmcsIGJ1dCB0byByZWFsbHkgcnVuIHNvbWUgdGVzdHMgd2l0aCB0aGUgdmlydHVhbCBoYXJkd2FyZSBkcml2ZXIsIGBNQUM4MDIxMV9IV1NJTWAgd2lsbCBiZSBlc3NlbnRpYWwuXG5cbkkndmUganVzdCBjb25maXJtZWQgdGhlcmUgYXJlIG5vIG90aGVyIGRlcGVuZGVudCBjb25maWdzIHRvIHdvcnJ5IGFib3V0LiBgQ0ZHODAyMTFfV0VYVGAgcHVsbHMgaW4gYENGRzgwMjExYCwgYW5kIGBNQUM4MDIxMV9IV1NJTWAgcmVsaWVzIG9uIGBNQUM4MDIxMWAsIHdoaWNoIGluIHR1cm4sIG9mIGNvdXJzZSwgbmVlZHMgYENGRzgwMjExYC5cblxuTm93LCB0aGUgYWN0dWFsIGNoYW5nZTogdGhpcyBwYXRjaCBtb2RpZmllcyBvbmx5IGBjZmc4MDIxMV93ZXh0X3Npd2dlbmllYC4gVGhhdCdzIHRoZSBrZXkuIEl0IGxvb2tzIGxpa2UgaXQncyBhZGRpbmcgc29tZSB2YWxpZGF0aW9uIHRvIGBpZV9sZW5gIGFuZCB1c2luZyBgZm9yX2VhY2hfZWxlbWVudGAgYW5kIGBmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZGAuIFRoaXMgaXMgaW1wb3J0YW50OyBmdW5jdGlvbmFsbHksIHRoaXMgY2hhbmdlIGlzIGRlc2lnbmVkIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgdGhlIHByb2Nlc3Npbmcgb2YgaW52YWxpZCBJRXMuIFRoYXQncyBhIGNsYXNzaWMgdGFyZ2V0IGZvciBmdXp6aW5nLlxuXG5HaXZlbiB0aGF0IHRoaXMgcGF0Y2ggZ3VhcmRzIGFnYWluc3QgdGhvc2UgdHlwZXMgb2YgdnVsbmVyYWJpbGl0aWVzLCBpdCdzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSSdtIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAuIE15IGZvY3VzIHNob3VsZCBiZSBzcXVhcmVseSBvbiBgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZWAgKHNvIEkgd2lsbCBzZXQgYEZvY3VzU3ltYm9sc2AgdG8gYFtcImNmZzgwMjExX3dleHRfc2l3Z2VuaWVcIl1gKS4gSSdsbCBuZWVkIGBDRkc4MDIxMWAsIGBDRkc4MDIxMV9XRVhUYCwgYE1BQzgwMjExYCwgYW5kIGBNQUM4MDIxMV9IV1NJTWAgZW5hYmxlZCAoc28gSSB3aWxsIHNldCBgRW5hYmxlQ29uZmlnc2AgdG8gYFtcIkNGRzgwMjExXCIsIFwiQ0ZHODAyMTFfV0VYVFwiLCBcIk1BQzgwMjExXCIsIFwiTUFDODAyMTFfSFdTSU1cIl1gKS4gVGhlIHJlYXNvbmluZyBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiB0aGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIHRvIHRoZSBgU0lPQ1NJV0dFTklFYCBpb2N0bCBoYW5kbGVyLCBndWFyZGluZyBhZ2FpbnN0IGludmFsaWQgSW5mb3JtYXRpb24gRWxlbWVudHMgKElFKSBiZWluZyBwcm9jZXNzZWQgYW5kIHRoaXMgaXMgZWFzaWx5IHJlYWNoYWJsZSB2aWEgdGhlIFdFWFQgQVBJIG9uIHdpcmVsZXNzIGRldmljZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2MjMsIk91dHB1dFRva2VucyI6MTMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTg6NTMuOTcyMDMzMzk1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyNjE3NjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiQ0ZHODAyMTFfV0VYVFwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIk1BQzgwMjExX0hXU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2ZnODAyMTFfd2V4dF9zaXdnZW5pZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiB0byB0aGUgU0lPQ1NJV0dFTklFIGlvY3RsIGhhbmRsZXIgdG8gcHJldmVudCBpbnZhbGlkIEluZm9ybWF0aW9uIEVsZW1lbnRzIChJRSkgZnJvbSBiZWluZyBwcm9jZXNzZWQuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSB0aGUgV0VYVCBBUEkgb24gd2lyZWxlc3MgZGV2aWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiQ0ZHODAyMTFfV0VYVFwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIk1BQzgwMjExX0hXU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2ZnODAyMTFfd2V4dF9zaXdnZW5pZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiB0byB0aGUgU0lPQ1NJV0dFTklFIGlvY3RsIGhhbmRsZXIgdG8gcHJldmVudCBpbnZhbGlkIEluZm9ybWF0aW9uIEVsZW1lbnRzIChJRSkgZnJvbSBiZWluZyBwcm9jZXNzZWQuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSB0aGUgV0VYVCBBUEkgb24gd2lyZWxlc3MgZGV2aWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow697kj[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-26 16:37:55 +0000 UTC FinishedAt: 2026-07-26 17:58:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "90883c513ca01e77c56b8d94be7de11420c1dacf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "CFG80211_WEXT", "MAC80211", "MAC80211_HWSIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "90883c513ca01e77c56b8d94be7de11420c1dacf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "CFG80211_WEXT", "MAC80211", "MAC80211_HWSIM" ], "series_id": "1490e25f-5ea0-413a-a26b-14d20b6db38a" }, "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+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O0NGRzgwMjExX1dFWFQmIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjZmc4MDIxMV93ZXh0X3Npd2dlbmllJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiB0byB0aGUgU0lPQ1NJV0dFTklFIGlvY3RsIGhhbmRsZXIgdG8gcHJldmVudCBpbnZhbGlkIEluZm9ybWF0aW9uIEVsZW1lbnRzIChJRSkgZnJvbSBiZWluZyBwcm9jZXNzZWQuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSB0aGUgV0VYVCBBUEkgb24gd2lyZWxlc3MgZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDdmM2U5ZmI1Yjc2MDU2ZmMyYjQ3NjYxNDBkOTJkNWM0NmYxNGIzZGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAyNiAxNzo1Nzo1MyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuYyBiL25ldC93aXJlbGVzcy93ZXh0LXNtZS5jXG5pbmRleCA1NzNiNmIxNWE0NDZlYy4uZDhhZWMzNDFiZTM5ZTYgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL3dleHQtc21lLmNcbkBAIC0zMTksNiAmIzQzOzMxOSwxOCBAQCBpbnQgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGlmIChpZV9sZW4pIHtcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBlbGVtZW50ICplbGVtO1xuJiM0MztcbiYjNDM7XHRcdCAvKiBJRSBtdXN0IGhhdmUgYXQgbGVhc3QgVHlwZSAmIzQzOyBMZW5ndGggYnl0ZXMgKi9cbiYjNDM7XHRcdGlmIChpZV9sZW4gXHUwMDNjIDIpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0Zm9yX2VhY2hfZWxlbWVudChlbGVtLCBleHRyYSwgaWVfbGVuKSB7XG4mIzQzO1x0XHRcdC8qIG5vdGhpbmcgKi9cbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWZvcl9lYWNoX2VsZW1lbnRfY29tcGxldGVkKGVsZW0sIGV4dHJhLCBpZV9sZW4pKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHRcdGllID0ga21lbWR1cChleHRyYSwgaWVfbGVuLCBHRlBfS0VSTkVMKTtcbiBcdFx0aWYgKCFpZSlcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OywKICAgICYjMzQ7Q0ZHODAyMTFfV0VYVCYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMV9IV1NJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NmZzgwMjExX3dleHRfc2l3Z2VuaWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIHRvIHRoZSBTSU9DU0lXR0VOSUUgaW9jdGwgaGFuZGxlciB0byBwcmV2ZW50IGludmFsaWQgSW5mb3JtYXRpb24gRWxlbWVudHMgKElFKSBmcm9tIGJlaW5nIHByb2Nlc3NlZC4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHRoZSBXRVhUIEFQSSBvbiB3aXJlbGVzcyBkZXZpY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2YzZTlmYjViNzYwNTZmYzJiNDc2NjE0MGQ5MmQ1YzQ2ZjE0YjNkZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gSnVsIDI2IDE3OjU3OjUzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3dleHQtc21lLmMgYi9uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuYwppbmRleCA1NzNiNmIxNWE0NDZlYy4uZDhhZWMzNDFiZTM5ZTYgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy93ZXh0LXNtZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy93ZXh0LXNtZS5jCkBAIC0zMTksNiAmIzQzOzMxOSwxOCBAQCBpbnQgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQlyZXR1cm4gMDsKIAogCWlmIChpZV9sZW4pIHsKJiM0MzsJCWNvbnN0IHN0cnVjdCBlbGVtZW50ICplbGVtOwomIzQzOwomIzQzOwkJIC8qIElFIG11c3QgaGF2ZSBhdCBsZWFzdCBUeXBlICYjNDM7IExlbmd0aCBieXRlcyAqLwomIzQzOwkJaWYgKGllX2xlbiAmbHQ7IDIpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQlmb3JfZWFjaF9lbGVtZW50KGVsZW0sIGV4dHJhLCBpZV9sZW4pIHsKJiM0MzsJCQkvKiBub3RoaW5nICovCiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoIWZvcl9lYWNoX2VsZW1lbnRfY29tcGxldGVkKGVsZW0sIGV4dHJhLCBpZV9sZW4pKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwogCQlpZSA9IGttZW1kdXAoZXh0cmEsIGllX2xlbiwgR0ZQX0tFUk5FTCk7CiAJCWlmICghaWUpCiAJCQlyZXR1cm4gLUVOT01FTTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEzNQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFdFWFQgSW5mb3JtYXRpb24gRWxlbWVudCBWYWxpZGF0aW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgdG91Y2hpbmcgYG5ldC93aXJlbGVzcy93ZXh0LXNtZS5jYC4gU291bmRzIGxpa2UgdGhleSYjMzk7cmUgZGlnZ2luZyBpbnRvIHRoZSBXRVhUIGludGVyZmFjZSwgc3BlY2lmaWNhbGx5IHRoZSBTTUUgKFN0YXRpb24gTWFuYWdlbWVudCBFbnRpdHkpIGludGVyYWN0aW9uLiBUaGUgZnVuY3Rpb24gYmVpbmcgbW9kaWZpZWQgaXMgYGNmZzgwMjExX3dleHRfc2l3Z2VuaWVgLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIG15IGludGVyZXN0LCBiZWNhdXNlIGFueXRoaW5nIGRlYWxpbmcgd2l0aCB1c2VyLXNwYWNlIGludGVyYWN0aW9uIGFuZCBJbmZvcm1hdGlvbiBFbGVtZW50cyAoSUVzKSBpcyBhIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IHBvaW50IGlmIG5vdCBoYW5kbGVkIGNhcmVmdWxseS4KCkl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGlzIGFkZGluZyBzb21lIElFIHZhbGlkYXRpb24uIEdvb2QhIFRoYXQmIzM5O3MgYSBzb2xpZCBkZWZlbnNpdmUgbWVhc3VyZS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgY29kZSYjMzk7cyBjaGVja2luZyBpZiBgaWVfbGVuICZsdDsgMmAgZmlyc3QuIFJpZ2h0LCBhIG1pbmltdW0gSUUgbGVuZ3RoIG9mIDIgaXMgY3J1Y2lhbCwgYmVjYXVzZSB0aGUgZmlyc3QgdHdvIGJ5dGVzIGFyZSB0aGUgRWxlbWVudCBJRCBhbmQgdGhlIGxlbmd0aCBmaWVsZCwgc28gYW4gSUUgaGFzIHRvIGJlIGF0IGxlYXN0IHRoYXQgYmlnLiBPa2F5LCBtYWtlcyBzZW5zZS4gVGhlbiwgdGhleSYjMzk7cmUgdXNpbmcgYGZvcl9lYWNoX2VsZW1lbnRgIGFuZCBgZm9yX2VhY2hfZWxlbWVudF9jb21wbGV0ZWRgIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgSUVzLiBTdGFuZGFyZCwgZWZmaWNpZW50IGFwcHJvYWNoIGluIHRoZSBrZXJuZWwuIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGV4YWN0IGltcGxlbWVudGF0aW9uIGFuZCBzZWUgd2hhdCBzcGVjaWZpYyBjaGVja3MgYXJlIGFkZGVkIHdpdGhpbiB0aG9zZSBsb29wcy4gU3BlY2lmaWNhbGx5LCBob3cgYXJlIHRoZXkgdmFsaWRhdGluZyB0aGUgaW5kaXZpZHVhbCBJRXMuIFRoaXMgaXMgd2hlcmUgdGhlIGRldmlsJiMzOTtzIGluIHRoZSBkZXRhaWxzLiBUaW1lIHRvIHB1bGwgdXAgYGNmZzgwMjExX3dleHRfc2l3Z2VuaWVgIGluIHRoYXQgZmlsZSBhbmQgc2VlIHdoYXQgdGhleSYjMzk7dmUgZG9uZS4gSSYjMzk7bGwgZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIGdldCB0aGF0IGZ1bmN0aW9uIHVwLiBJJiMzOTttIGtlZW4gdG8gZXhhbWluZSB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGV5IGltcGxlbWVudGVkIHRoaXMgdmFsaWRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjZmc4MDIxMV93ZXh0X3Npd2dlbmllJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL3dleHQtc21lLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL3dleHQtc21lLmM9MjczPWludCBjZmc4MDIxMV9tZ2Rfd2V4dF9naXdhcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC93aXJlbGVzcy93ZXh0LXNtZS5jLTI5Ny1cbm5ldC93aXJlbGVzcy93ZXh0LXNtZS5jOjI5ODppbnQgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L3dpcmVsZXNzL3dleHQtc21lLmMtMjk5LVx0XHRcdCAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgwOAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uIGZvciBgbmV0L3dpcmVsZXNzL3dleHQtc21lLmNgKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGFjdGl2YXRlcyBgbmV0L3dpcmVsZXNzL3dleHQtc21lLmNgLiBUaGlzIGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBpbnZlc3RpZ2F0aW9uLiBNeSBpbml0aWFsIGFwcHJvYWNoIHdpbGwgYmUgdG8gbGV2ZXJhZ2UgdGhlIGV4aXN0aW5nIGluZnJhc3RydWN0dXJlIHRoYXQgSSB1bmRlcnN0YW5kIGludGltYXRlbHksIHRvIGZpbmQgd2hhdCBhY3RpdmF0ZXMgdGhhdCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgc2VhcmNoIHRoZSBidWlsZCBzeXN0ZW0gY29uZmlndXJhdGlvbiB0byBkZXRlcm1pbmUgdGhlIGFzc29jaWF0ZWQgS2NvbmZpZyBlbnRyeS4gVHlwaWNhbGx5LCBrZXJuZWwgY29kZSBoYXMgYSBjb3JyZXNwb25kaW5nIEtjb25maWcgZmlsZSB0aGF0IGRpY3RhdGVzIGl0cyBpbmNsdXNpb24gYmFzZWQgb24gdmFyaW91cyBvcHRpb25zLiBGcm9tIG1lbW9yeSwgdGhlIHJlbGV2YW50IGRpcmVjdG9yeSBpcyBsaWtlbHkgYG5ldC93aXJlbGVzcy9gLCBJIHNob3VsZCBmaW5kIGFuIGFwcHJvcHJpYXRlIEtjb25maWcgdGhlcmUuIEl0JiMzOTtzIGEgcXVpY2sgbG9va3VwLCBhbmQgaXQmIzM5O3MgZXNzZW50aWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIHNwZWNpZmljIGNvbXBvbmVudCBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLiBJJiMzOTtsbCBuZWVkIHRoZSBleGFjdCBjb25maWcgb3B0aW9uIHRvIGFjY3VyYXRlbHkgdHJhY2UgZGVwZW5kZW5jaWVzIGFuZCB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIGtlcm5lbCB3aXJlbGVzcyBmcmFtZXdvcmsuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d2V4dC1zbWUubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL01ha2VmaWxlPTEzPWNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX0RFQlVHRlMpICYjNDM7PSBkZWJ1Z2ZzLm9cbm5ldC93aXJlbGVzcy9NYWtlZmlsZToxNDpjZmc4MDIxMS0kKENPTkZJR19DRkc4MDIxMV9XRVhUKSAmIzQzOz0gd2V4dC1jb21wYXQubyB3ZXh0LXNtZS5vXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGUtMTUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE2NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gdGhlIHdlZWRzIG9mIGtlcm5lbCBjb25maWd1cmF0aW9uOgoKKipEaXZpbmcgaW50byB0aGUgQ0ZHODAyMTFfV0VYVCBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBgQ0ZHODAyMTFfV0VYVGAuIFRoYXQmIzM5O3MgdGhlIG9uZSB0aGF0IGVuYWJsZXMgdGhlIFdpcmVsZXNzIEV4dGVuc2lvbnMgY29tcGF0aWJpbGl0eSBsYXllciB3aXRoaW4gdGhlIGNmZzgwMjExIHdpcmVsZXNzIHN0YWNrLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9mIGV4YWN0bHkgaG93IGl0JiMzOTtzIGRlZmluZWQgYW5kIHdoYXQgaXRzIGRlcGVuZGVuY2llcyBhcmUuIFRoZSBtZW50YWwganVtcCBpcyBvYnZpb3VzOiBJIG5lZWQgdG8gcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgaXRzIGRlZmluaXRpb24uIExldCBtZSBwdWxsIHVwIGBuZXQvd2lyZWxlc3MvS2NvbmZpZ2AgaW4gbXkgaGVhZC4uLiB5ZWFoLCB0aGF0JiMzOTtzIHdoZXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVzaWRlLiBJIHdhbnQgdG8gY2hlY2sgaXRzIGRlcGVuZGVuY2llcywgZW5zdXJlIEkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdCwgYW5kIGp1c3QgZ2VuZXJhbGx5IGNvbmZpcm0gdGhhdCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgb3B0aW9uIGFsaWducyB3aXRoIHRoZSBvZmZpY2lhbCBkb2N1bWVudGF0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZSBoYXMgdG8gc2F5IGFib3V0IGBDRkc4MDIxMV9XRVhUYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0ZHODAyMTFfV0VYVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9LY29uZmlnPTE3Nz1jb25maWcgQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTg2LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTg3OmNvbmZpZyBDRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODgtXHRib29sIFwmIzM0O2NmZzgwMjExIHdpcmVsZXNzIGV4dGVuc2lvbnMgY29tcGF0aWJpbGl0eVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NDgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uLCBwcmVzZW50ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgRGVwZW5kZW5jeSBTdHJ1Y3R1cmVzKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGF0IHByZWNpc2VseSBkb2VzIGBDRkc4MDIxMV9XRVhUYCByZWx5IHVwb24/JiMzNDsgVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jeSB0cmVlIGlzIGZ1bmRhbWVudGFsLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGtlcm5lbCBtb2R1bGVzLiBJIG5lZWQgdG8ga25vdyB0aGUgcHJlY29uZGl0aW9ucywgdGhlIGxvd2VyLWxldmVsIGNvbXBvbmVudHMgaXQgbGV2ZXJhZ2VzLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IGNvbXBpbGluZzsgaXQmIzM5O3MgYWJvdXQgcnVudGltZSBiZWhhdmlvciBhbmQgcG90ZW50aWFsIGNvbmZsaWN0cy4gTXkgZXhwZXJ0aXNlIGRlbWFuZHMgSSBpbW1lZGlhdGVseSBzdGFydCBtZW50YWxseSBtYXBwaW5nIHRoZSBjb25uZWN0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBjb25zaWRlciBob3cgdGhpcyByZWxhdGVzIHRvIG90aGVyIG5ldHdvcmsgc3RhY2sgY29tcG9uZW50cywgaGFyZHdhcmUgZHJpdmVycywgYW5kIG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZS4gV2hlcmUgY2FuIEkgZmluZCB0aGlzIGluZm9ybWF0aW9uIG1vc3QgZWZmaWNpZW50bHk/IExpa2VseSwgc29tZSBxdWljayBncmVwcGluZyB0aHJvdWdoIHRoZSBrZXJuZWwgc291cmNlLCBjcm9zcy1yZWZlcmVuY2luZyB3aXRoIGRvY3VtZW50YXRpb24sIGFuZCBwZXJoYXBzIGEgcmV2aWV3IG9mIHJlY2VudCBjb21taXRzIGluIHRoZSByZWxldmFudCBhcmVhcyB3aWxsIGJlIG5lZWRlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlLiBUaGUgZ29hbCBpcyB0byBmdWxseSBncmFzcCBpdHMgcm9sZSBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDRkc4MDIxMV9XRVhUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL0tjb25maWc9MTc3PWNvbmZpZyBDRkc4MDIxMV9DUkRBX1NVUFBPUlRcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODYtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxODc6Y29uZmlnIENGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4OC1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgd2lyZWxlc3MgZXh0ZW5zaW9ucyBjb21wYXRpYmlsaXR5XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MDYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIERlcGVuZGVuY3kgVHJlZSoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhpcyBjb25maWd1cmF0aW9uLCBJIG5lZWQgdG8gcGF1c2UgYW5kIHRha2UgYSBsb29rIGF0IHRoZSBgS2NvbmZpZ2AgZmlsZS4gVGhpcyBpc24mIzM5O3QganVzdCBhYm91dCB0aGUgaW1tZWRpYXRlIG9wdGlvbnM7IGl0JiMzOTtzIGFib3V0IHVuZGVyc3RhbmRpbmcgdGhlIGVudGlyZSBkZXBlbmRlbmN5IGdyYXBoLiBJIGNhbiYjMzk7dCBqdXN0IGJsaW5kbHkgdHdlYWsgc2V0dGluZ3Mgd2l0aG91dCBrbm93aW5nIHdoYXQgb3RoZXIgbW9kdWxlcyBvciBmZWF0dXJlcyByZWx5IG9uIHRoaXMgcGFydGljdWxhciBvbmUuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhpcyBwb2ludCBhbmQgdW5kZXJzdGFuZCBpdHMgY29uZGl0aW9uYWwgaW5jbHVzaW9uLCBpdHMgZGVwZW5kZW5jaWVzIG9uIG90aGVyIHN5bWJvbHMsIGFuZCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBpdCBtaWdodCBpbnRyb2R1Y2UuIEl04oCZcyB0aGUgb25seSB3YXkgdG8gYXZvaWQgaW50cm9kdWNpbmcgYSBidWlsZC10aW1lIG5pZ2h0bWFyZSBsYXRlciBvbi4gU28sIGEgcXVpY2sgcGFyc2Ugb2YgdGhlIGBLY29uZmlnYCBpcyBlc3NlbnRpYWwgdG8gZXN0YWJsaXNoIHRoZSBpbXBhY3Qgb2YgYW55IGNoYW5nZXMgSSBtYWtlLCBvdGhlcndpc2UsIEkgYW0ganVzdCBndWVzc2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTgwOlx0XHRoZWxwXG4gMTgxOlx0XHQgIFlvdSBzaG91bGQgZW5hYmxlIHRoaXMgb3B0aW9uIHVubGVzcyB5b3Uga25vdyBmb3Igc3VyZSB5b3UgaGF2ZSBub1xuIDE4MjpcdFx0ICBuZWVkIGZvciBpdCwgZm9yIGV4YW1wbGUgd2hlbiB1c2luZyB0aGUgcmVndWxhdG9yeSBkYXRhYmFzZSBsb2FkZWQgYXNcbiAxODM6XHRcdCAgYSBmaXJtd2FyZSBmaWxlLlxuIDE4NDpcdFxuIDE4NTpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuIDE4NjpcdFxuIDE4NzpcdGNvbmZpZyBDRkc4MDIxMV9XRVhUXG4gMTg4Olx0XHRib29sIFwmIzM0O2NmZzgwMjExIHdpcmVsZXNzIGV4dGVuc2lvbnMgY29tcGF0aWJpbGl0eVwmIzM0O1xuIDE4OTpcdFx0c2VsZWN0IFdFWFRfQ09SRVxuIDE5MDpcdFx0aGVscFxuIDE5MTpcdFx0ICBFbmFibGUgdGhpcyBvcHRpb24gaWYgeW91IG5lZWQgb2xkIHVzZXJzcGFjZSBmb3Igd2lyZWxlc3NcbiAxOTI6XHRcdCAgZXh0ZW5zaW9ucyB3aXRoIGNmZzgwMjExLWJhc2VkIGRyaXZlcnMuXG4gMTkzOlx0XG4gMTk0Olx0Y29uZmlnIENGRzgwMjExX0tVTklUX1RFU1RcbiAxOTU6XHRcdHRyaXN0YXRlIFwmIzM0O0tVbml0IHRlc3RzIGZvciBjZmc4MDIxMVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gMTk2Olx0XHRkZXBlbmRzIG9uIEtVTklUXG4gMTk3Olx0XHRkZXBlbmRzIG9uIENGRzgwMjExXG4gMTk4Olx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuIDE5OTpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDMxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYSBEZXBlbmRlbmN5KioKClJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGF0IGNvZGUgYmxvY2sgaXMgZ2F0ZWQgYnkgYW4gYGlmIENGRzgwMjExYCBjb25kaXRpb24uIEltbWVkaWF0ZWx5LCBteSBicmFpbiBmbGFncyB0aGF0IGFzIGEgZGVwZW5kZW5jeS4gSXQmIzM5O3MgYSBwcmV0dHkgc3Ryb25nIGNsdWUsIGdpdmVuIHRoZSBjb250ZXh0LiBTbywgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBzdXNwaWNpb24uIFRoZSBwcmVzZW5jZSBvZiBgQ0ZHODAyMTFgIGluIHRoYXQgY29uZGl0aW9uYWwgaW1wbGllcyB0aGF0IHdoYXRldmVyIGxvZ2ljIGlzICppbnNpZGUqIHRoYXQgYGlmYCBibG9jayBpcywgYXQgYSBtaW5pbXVtLCBpbmZsdWVuY2VkIGJ5LCBhbmQgbGlrZWx5IHJlbGlhbnQgb24sIHRoZSBleGlzdGVuY2Ugb3IgYmVoYXZpb3Igb2YgdGhlIGBDRkc4MDIxMWAgY29tcG9uZW50LiBJIG5lZWQgdG8gZGlnIGluIGRlZXBlciB0byB0cnVseSBkZXRlcm1pbmUgdGhlIGV4dGVudCBvZiB0aGF0IHJlbGF0aW9uc2hpcCwgb2YgY291cnNlLCBidXQgaXQmIzM5O3MgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQgZm9yIG15IGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZiBDRkc4MDIxMSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9LY29uZmlnPTE3PWNvbmZpZyBDRkc4MDIxMVxuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTI0LVx0IyAodGhpcyBpcyBoZXJlIHJhdGhlciB0aGFuIGJlbG93IHRvIGFsbG93IGl0IHRvIGJlIGEgbW9kdWxlKVxubmV0L3dpcmVsZXNzL0tjb25maWc6MjU6XHRzZWxlY3QgQ1JZUFRPX1NIQTI1NiBpZiBDRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTI2LVx0aGVscFxuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTM1LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MzY6aWYgQ0ZHODAyMTFcbm5ldC93aXJlbGVzcy9LY29uZmlnLTM3LVxuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnPTg5PWNvbmZpZyBDRkc4MDIxMV9SRVFVSVJFX1NJR05FRF9SRUdEQlxubmV0L3dpcmVsZXNzL0tjb25maWc6OTA6XHRib29sIFwmIzM0O3JlcXVpcmUgcmVnZGIgc2lnbmF0dXJlXCYjMzQ7IGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xubmV0L3dpcmVsZXNzL0tjb25maWctOTEtXHRkZWZhdWx0IHlcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZz05OT1jb25maWcgQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMDA6XHRib29sIFwmIzM0O2FsbG93IHJlZ2RiIGtleXMgc2hpcHBlZCB3aXRoIHRoZSBrZXJuZWxcJiMzNDsgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMDEtXHRkZWZhdWx0IHlcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZz0xMTE9Y29uZmlnIENGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUlxubmV0L3dpcmVsZXNzL0tjb25maWc6MTEyOlx0c3RyaW5nIFwmIzM0O2FkZGl0aW9uYWwgcmVnZGIga2V5IGRpcmVjdG9yeVwmIzM0OyBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTExMy1cdGRlcGVuZHMgb24gQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA4NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBDRkc4MDIxMWAgQ29udGV4dCoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgcmVsYXRlZCB0byBgaWYgQ0ZHODAyMTFgLiBUaGF0JiMzOTtzIHRoZSBrZXkuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0lzIHRoYXQgKmVub3VnaCo/JiMzNDsgYENGRzgwMjExYCBpcyBhIGJpZyBwaWVjZSwgYnV0IGl0JiMzOTtzIG5vdCBhbHdheXMgc2VsZi1jb250YWluZWQuIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBpZiB3ZSYjMzk7cmUgbWlzc2luZyBhbnkgdW5kZXJseWluZyBkZXBlbmRlbmNpZXMgb3IgYXV4aWxpYXJ5IGNvbXBvbmVudHMgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlIGhlcmUuIFdlIG5lZWQgdG8gZGlzc2VjdCB0aGUgc3RydWN0dXJlIGFuZCBkZXBlbmRlbmNpZXMsIG90aGVyd2lzZSB3ZSYjMzk7cmUgbWFraW5nIGFzc3VtcHRpb25zIHRoYXQgY291bGQgbGVhZCB1cyBkb3duIHRoZSB3cm9uZyBwYXRoLiBXZSBuZWVkIHRvIGRvdWJsZSBjaGVjayBhbnkgc3VwcG9ydGluZyBtb2R1bGVzIG9yIGFueSBmZWF0dXJlcyBlbmFibGVkIG9yIGRpc2FibGVkIGJ5IGNvbmZpZ3VyYXRpb24uIFRpbWUgdG8gZGlnIGluIGEgYml0IGRlZXBlciB0byBtYWtlIHN1cmUgd2UmIzM5O3ZlIGdvdCBldmVyeXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0ZHODAyMTEkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL0tjb25maWc9MTQ9Y29uZmlnIFdFWFRfUFJJVlxuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTc6Y29uZmlnIENGRzgwMjExXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOC1cdHRyaXN0YXRlIFwmIzM0O2NmZzgwMjExIC0gd2lyZWxlc3MgY29uZmlndXJhdGlvbiBBUElcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQyOQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBXaXJlbGVzcyBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgd2lyZWxlc3MgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSB2YXJpb3VzIHNldHRpbmdzLCBzbyBsZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGUgYG5ldC93aXJlbGVzcy9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG15IGF0dGVudGlvbiBhcm91bmQgbGluZSAxNyDigJMgdGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QganVtcGluZy1vZmYgcG9pbnQgdG8gc2VlIGhvdyB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUgYW5kIGtleSBkZWZpbml0aW9ucyBhcmUgbGFpZCBvdXQuIEkmIzM5O20gYXNzdW1pbmcgaXQgd2lsbCBnaXZlIG1lIGFuIG92ZXJ2aWV3IGFuZCBzdGFydCB0byBleHBvc2UgaG93IGRpZmZlcmVudCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBhbmQgZGlzYWJsZWQuIFRoaXMgS2NvbmZpZyBmaWxlIGlzIHRoZSBsaW5jaHBpbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgV2ktRmkgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgSSBuZWVkIHRvIGJlY29tZSBpbnRpbWF0ZWx5IGZhbWlsaWFyIHdpdGggaXQuIEkgZXhwZWN0IGl0JiMzOTtsbCBnaXZlIG1lIGEgc3Ryb25nIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcyB3aXRoaW4gdGhlIHdpcmVsZXNzIHN1YnN5c3RlbS4gRnJvbSB0aGVyZSBJIGNhbiBleHBsb3JlIGFueSBzcGVjaWZpYyBtb2R1bGVzIG9yIGZlYXR1cmVzIEkgbmVlZCB0byB1bmRlcnN0YW5kIGZ1cnRoZXIuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFdJUkVMRVNTX0VYVFxuICAgMzpcdFx0Ym9vbFxuICAgNDpcdFxuICAgNTpcdGNvbmZpZyBXRVhUX0NPUkVcbiAgIDY6XHRcdGRlZl9ib29sIHlcbiAgIDc6XHRcdGRlcGVuZHMgb24gQ0ZHODAyMTFfV0VYVCB8fCBXSVJFTEVTU19FWFRcbiAgIDg6XHRcbiAgIDk6XHRjb25maWcgV0VYVF9QUk9DXG4gIDEwOlx0XHRkZWZfYm9vbCB5XG4gIDExOlx0XHRkZXBlbmRzIG9uIFBST0NfRlNcbiAgMTI6XHRcdGRlcGVuZHMgb24gV0VYVF9DT1JFXG4gIDEzOlx0XG4gIDE0Olx0Y29uZmlnIFdFWFRfUFJJVlxuICAxNTpcdFx0Ym9vbFxuICAxNjpcdFxuICAxNzpcdGNvbmZpZyBDRkc4MDIxMVxuICAxODpcdFx0dHJpc3RhdGUgXCYjMzQ7Y2ZnODAyMTEgLSB3aXJlbGVzcyBjb25maWd1cmF0aW9uIEFQSVwmIzM0O1xuICAxOTpcdFx0ZGVwZW5kcyBvbiBSRktJTEwgfHwgIVJGS0lMTFxuICAyMDpcdFx0c2VsZWN0IEZXX0xPQURFUlxuICAyMTpcdFx0c2VsZWN0IENSQzMyXG4gIDIyOlx0XHQjIG1heSBuZWVkIHRvIHVwZGF0ZSB0aGlzIHdoZW4gY2VydGlmaWNhdGVzIGFyZSBjaGFuZ2VkIGFuZCBhcmVcbiAgMjM6XHRcdCMgdXNpbmcgYSBkaWZmZXJlbnQgYWxnb3JpdGhtLCB0aG91Z2ggcmlnaHQgbm93IHRoZXkgc2hvdWxkbiYjMzk7dFxuICAyNDpcdFx0IyAodGhpcyBpcyBoZXJlIHJhdGhlciB0aGFuIGJlbG93IHRvIGFsbG93IGl0IHRvIGJlIGEgbW9kdWxlKVxuICAyNTpcdFx0c2VsZWN0IENSWVBUT19TSEEyNTYgaWYgQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTXG4gIDI2Olx0XHRoZWxwXG4gIDI3Olx0XHQgIGNmZzgwMjExIGlzIHRoZSBMaW51eCB3aXJlbGVzcyBMQU4gKDgwMi4xMSkgY29uZmlndXJhdGlvbiBBUEkuXG4gIDI4Olx0XHQgIEVuYWJsZSB0aGlzIGlmIHlvdSBoYXZlIGEgd2lyZWxlc3MgZGV2aWNlLlxuICAyOTpcdFxuICAzMDpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiByZWZlciB0byBkb2N1bWVudGF0aW9uIG9uIHRoZSB3aXJlbGVzcyB3aWtpOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDgyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgV2lyZWxlc3MgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gY29kZSwgYW5kIGl0IGxvb2tzIGxpa2UgYENGRzgwMjExYCBhbmQgYENGRzgwMjExX1dFWFRgIGFyZSB0aGUgY29yZSBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gcGF5IGF0dGVudGlvbiB0by4gVGhlc2UgYXJlIHRoZSBtYWluIGJ1aWxkaW5nIGJsb2NrcywgYnV0IGl0JiMzOTtzIG5vdCB0aGUgd2hvbGUgc3RvcnksIGlzIGl0PyBJJiMzOTtsbCBwcm9iYWJseSBhbHNvIG5lZWQgYSByZWFsIGRyaXZlciB0byBhY3R1YWxseSBtYWtlIHVzZSBvZiB0aGVzZSBjb25maWdzLCBzb21ldGhpbmcgbGlrZSBgTUFDODAyMTFfSFdTSU1gIHBlcmhhcHMuCgpOb3csIGxldCYjMzk7cyBzZWUgaWYgdGhpcyBgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZWAgZnVuY3Rpb24gaXMgYWNjZXNzaWJsZSBhbmQgc2VlIHdoZXJlIGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLiBBaCwgeWVzLCBJIHJlbWVtYmVyLCB0aGF0JiMzOTtzIGFuIGlvY3RsIGhhbmRsZXIgZm9yIGBTSU9DU0lXR0VOSUVgLiBOb3csIHdoZXJlIGV4YWN0bHkgaXMgaXQgYmVpbmcgdXNlZD8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzaXRlcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgaGFuZGxlIG9uIGl0cyBwdXJwb3NlLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZSB0byBncmFzcCBpdHMgcm9sZSBpbiBoYW5kbGluZyB3aXJlbGVzcyBleHRlbnNpb24gR0VOSUUgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2ZnODAyMTFfd2V4dF9zaXdnZW5pZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmM9MTQ4Mz1zdGF0aWMgY29uc3QgaXdfaGFuZGxlciBjZmc4MDIxMV9oYW5kbGVyc1tdID0ge1xuLS1cbm5ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jLTE1MTAtXHRJV19IQU5ETEVSKFNJT0NHSVdQT1dFUixcdGNmZzgwMjExX3dleHRfZ2l3cG93ZXIpLFxubmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmM6MTUxMTpcdElXX0hBTkRMRVIoU0lPQ1NJV0dFTklFLFx0Y2ZnODAyMTFfd2V4dF9zaXdnZW5pZSksXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYy0xNTEyLVx0SVdfSEFORExFUihTSU9DU0lXQVVUSCxcdFx0Y2ZnODAyMTFfd2V4dF9zaXdhdXRoKSxcbi0tXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuaD00Nj1pbnQgY2ZnODAyMTFfd2V4dF9zaXdtbG1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmgtNDgtXHRcdFx0ICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSk7XG5uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuaDo0OTppbnQgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmgtNTAtXHRcdFx0ICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbyxcbi0tXG5uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuYz0yNzM9aW50IGNmZzgwMjExX21nZF93ZXh0X2dpd2FwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L3dpcmVsZXNzL3dleHQtc21lLmMtMjk3LVxubmV0L3dpcmVsZXNzL3dleHQtc21lLmM6Mjk4OmludCBjZmc4MDIxMV93ZXh0X3Npd2dlbmllKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuYy0yOTktXHRcdFx0ICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjkwMAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFdFWFQgU0lPQ1NJV0dFTklFIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGNvbmNlcm5pbmcgdGhlIGBTSU9DU0lXR0VOSUVgIGlvY3RsLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBrbm93IHRoaXMgaXMgaGFuZGxlZCB3aXRoaW4gYGNmZzgwMjExX2hhbmRsZXJzYCwgd2hpY2ggaXMgc3RhbmRhcmQgZm9yIFdFWFQgaW9jdGwgcHJvY2Vzc2luZy4gVGhlIGVudHJ5IHBvaW50IGlzIHRoZSBgaW9jdGxgIGNhbGwgb24gYSBzb2NrZXQsIHBhc3NpbmcgYFNJT0NTSVdHRU5JRWAuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGlzIGlzIGVhc2lseSB0ZXN0YWJsZSwgcmlnaHQ/IEkgY2FuIGhpdCBpdCB0aHJvdWdoIHZpcnR1YWwgaGFyZHdhcmUgbGlrZSBgbWFjODAyMTFfaHdzaW1gIG9yIGV2ZW4gYSBzaW1wbGUgZHVtbXkgYGNmZzgwMjExYCBkZXZpY2UuCgpBaGEsIGNvbmZpcm1hdGlvbiEgVGhlIGNydWNpYWwgZnVuY3Rpb24gaGVyZSBpcyBgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZWAsIHRoYXQmIzM5O3MgdGhlIG9uZSBjYWxsZWQgd2hlbiB1c2Vyc3BhY2UgZG9lcyB0aGUgYFNJT0NTSVdHRU5JRWAuIEFuZCBpdCBsaXZlcyBpbiBgbmV0L3dpcmVsZXNzL3dleHQtc21lLmNgLiBHb29kLCB0aGF0IG5hcnJvd3MgZG93biBteSBmb2N1cy4gTGV0IG1lIHF1aWNrbHkgY29uZmlybSDigJMgeWVzLCBgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZWAgaXMgKnRoZSogbW9kaWZpZWQgZnVuY3Rpb24uIE5vIG90aGVyIGZ1bmN0aW9ucyBhcmUgdG91Y2hlZC4gVGltZSB0byBleGFtaW5lIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgaXRzZWxmLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy93ZXh0LXNtZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyOTU6XHRcdHJldHVybiAwO1xuIDI5NjpcdH1cbiAyOTc6XHRcbiAyOTg6XHRpbnQgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIDI5OTpcdFx0XHRcdCAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sXG4gMzAwOlx0XHRcdFx0ICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpXG4gMzAxOlx0e1xuIDMwMjpcdFx0c3RydWN0IGl3X3BvaW50ICpkYXRhID0gXHUwMDI2d3JxdS1cdTAwM2VkYXRhO1xuIDMwMzpcdFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi1cdTAwM2VpZWVlODAyMTFfcHRyO1xuIDMwNDpcdFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fcmRldih3ZGV2LVx1MDAzZXdpcGh5KTtcbiAzMDU6XHRcdGludCBpZV9sZW4gPSBkYXRhLVx1MDAzZWxlbmd0aDtcbiAzMDY6XHRcdHU4ICppZSA9IGV4dHJhO1xuIDMwNzpcdFxuIDMwODpcdFx0aWYgKHdkZXYtXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pXG4gMzA5Olx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiAzMTA6XHRcbiAzMTE6XHRcdGlmICghaWVfbGVuKVxuIDMxMjpcdFx0XHRpZSA9IE5VTEw7XG4gMzEzOlx0XG4gMzE0Olx0XHRndWFyZCh3aXBoeSkod2Rldi1cdTAwM2V3aXBoeSk7XG4gMzE1Olx0XG4gMzE2Olx0XHQvKiBubyBjaGFuZ2UgKi9cbiAzMTc6XHRcdGlmICh3ZGV2LVx1MDAzZXdleHQuaWVfbGVuID09IGllX2xlbiBcdTAwMjZcdTAwMjZcbiAzMTg6XHRcdCAgICBtZW1jbXAod2Rldi1cdTAwM2V3ZXh0LmllLCBpZSwgaWVfbGVuKSA9PSAwKVxuIDMxOTpcdFx0XHRyZXR1cm4gMDtcbiAzMjA6XHRcbiAzMjE6XHRcdGlmIChpZV9sZW4pIHtcbiAzMjI6XHRcdFx0Y29uc3Qgc3RydWN0IGVsZW1lbnQgKmVsZW07XG4gMzIzOlx0XG4gMzI0Olx0XHRcdCAvKiBJRSBtdXN0IGhhdmUgYXQgbGVhc3QgVHlwZSAmIzQzOyBMZW5ndGggYnl0ZXMgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkxOAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5lY2Vzc2FyeSBDb25maWd1cmF0aW9ucyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZm9jdXMgb24gdGhpcyBgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZWAgZnVuY3Rpb24uIFRoYXQmIzM5O3MgdGhlIGtleS4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IEkmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIGBDRkc4MDIxMWAgYW5kIGBDRkc4MDIxMV9XRVhUYCBpbiB0aGUgY29uZmlndXJhdGlvbi4gVGhhdCYjMzk7cyBhIGdpdmVuLiBOb3csIGZvciB0aGUgZW52aXJvbm1lbnQgd2hlcmUgdGhpcyBpcyB0eXBpY2FsbHkgZW5jb3VudGVyZWQsIGluIHNvbWV0aGluZyBsaWtlIHN5emthbGxlciwgaXQmIzM5O3MgcHJldHR5IHN0YW5kYXJkIHRvIHVzZSBgTUFDODAyMTFfSFdTSU1gIHRvIHNpbXVsYXRlIGEgd2lyZWxlc3MgZGV2aWNlLgoKSSBzaG91bGQgZG91YmxlLWNoZWNrIHdoZXRoZXIgdGhhdCYjMzk7cyBlc3NlbnRpYWwgaGVyZS4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW4gaXQgaXMsIGJ1dCBhIHF1aWNrIGNvbmZpcm1hdGlvbiBpcyBhbHdheXMgd29ydGh3aGlsZS4gQmV0dGVyIHRvIGJlIHRob3JvdWdoIGFuZCBpbmNsdWRlIGl0IHVwZnJvbnQuIEl0JiMzOTtzIGEgZ29vZCBwcmFjdGljZSwgYW5kIGl0JiMzOTtsbCBsaWtlbHkgc2F2ZSBtZSBoZWFkYWNoZXMgZG93biB0aGUgbGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1BQzgwMjExX0hXU0lNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZzoxOmNvbmZpZyBNQUM4MDIxMV9IV1NJTVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnLTItXHR0cmlzdGF0ZSBcJiMzNDtTaW11bGF0ZWQgcmFkaW8gdGVzdGluZyB0b29sIGZvciBtYWM4MDIxMVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzE3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIE1BQzgwMjExIEhXU0lNIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZGVwZW5kZW5jaWVzIG9mIGBNQUM4MDIxMV9IV1NJTWAuIFRpbWUgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGUuIExldCYjMzk7cyBzdGFydCB3aXRoIGBkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZ292ZXJucyB3aGV0aGVyIGBNQUM4MDIxMV9IV1NJTWAgZ2V0cyBidWlsdCBpbnRvIHRoZSBrZXJuZWwgb3Igbm90LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBvdGhlciBjb25maWcgb3B0aW9ucyBpdCByZWxpZXMgb24sIHBsYXRmb3JtIGxpbWl0YXRpb25zLCBvciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uc3RyYWludHMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0YW5kYXJkIHN5bnRheCDigJMgYGRlcGVuZHMgb25gLCBgc2VsZWN0YCwgYGlmYCwgZXRjLiDigJMgYW5kIEkmIzM5O2xsIGJlIHBhcnNpbmcgaXQgcXVpY2tseSwgbG9va2luZyBmb3IgYW55IGltbWVkaWF0ZSBmbGFncyBvciBnb3RjaGFzIHRoYXQganVtcCBvdXQuIEl0JiMzOTtzIHVzdWFsbHkgYSBzdHJhaWdodGZvcndhcmQgcHJvY2VzcywgYnV0IHlvdSBuZXZlciBrbm93IHdoZW4gc29tZSBvYnNjdXJlIGRlcGVuZGVuY3kgbWlnaHQgYmUgbHVya2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHRjb25maWcgTUFDODAyMTFfSFdTSU1cbiAgIDI6XHRcdHRyaXN0YXRlIFwmIzM0O1NpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjExXCYjMzQ7XG4gICAzOlx0XHRkZXBlbmRzIG9uIE1BQzgwMjExXG4gICA0Olx0XHRoZWxwXG4gICA1Olx0XHQgIFRoaXMgZHJpdmVyIGlzIGEgZGV2ZWxvcGVyIHRlc3RpbmcgdG9vbCB0aGF0IGNhbiBiZSB1c2VkIHRvIHRlc3RcbiAgIDY6XHRcdCAgSUVFRSA4MDIuMTEgbmV0d29ya2luZyBzdGFjayAobWFjODAyMTEpIGZ1bmN0aW9uYWxpdHkuIFRoaXMgaXMgbm90XG4gICA3Olx0XHQgIG5lZWRlZCBmb3Igbm9ybWFsIHdpcmVsZXNzIExBTiB1c2FnZSBhbmQgaXMgb25seSBmb3IgdGVzdGluZy4gU2VlXG4gICA4Olx0XHQgIERvY3VtZW50YXRpb24vbmV0d29ya2luZy9tYWM4MDIxMV9od3NpbSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3dcbiAgIDk6XHRcdCAgdG8gdXNlIHRoaXMgdG9vbC5cbiAgMTA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc3NQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gdGhlIE1BQzgwMjExIERlcGVuZGVuY3kgTGFuZHNjYXBlKioKCkFscmlnaHQsIHNvIHRoZSBzb2x1dGlvbiBoaW5nZXMgb24gdW5kZXJzdGFuZGluZyBhbmQgbGV2ZXJhZ2luZyBgTUFDODAyMTFgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtMZXQmIzM5O3MgbWFwIHRoaXMgb3V0IGNsZWFybHkuJiMzNDsgQmVmb3JlIEkgY2FuIGV2ZW4gYmVnaW4gdG8gZm9ybXVsYXRlIGEgcGxhbiBvciBvZmZlciBhIHN1aXRhYmxlIHNvbHV0aW9uLCBJIG5lZWQgdG8ga25vdyAqZXhhY3RseSogd2hhdCB0aGlzIHJlbGllcyBvbi4gU28gbXkgbmV4dCBzdGVwLCBuYXR1cmFsbHksIGlzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZGlyZWN0IGRlcGVuZGVuY2llcyBvZiBgTUFDODAyMTFgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHdpdGggb3RoZXIga2VybmVsIHN1YnN5c3RlbXMsIGRyaXZlciBmcmFtZXdvcmtzLCBhbmQgYW55IHJlbGV2YW50IHVzZXItc3BhY2UgdXRpbGl0aWVzLiBBIGNsZWFuIGRlcGVuZGVuY3kgZ3JhcGggaXMgZ29pbmcgdG8gaW5mb3JtIGV2ZXJ5dGhpbmcgZnJvbSBoZXJlIG9uIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1BQzgwMjExJCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyOmNvbmZpZyBNQUM4MDIxMVxubmV0L21hYzgwMjExL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgSUVFRSA4MDIuMTEgTmV0d29ya2luZyBTdGFjayAobWFjODAyMTEpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwOTAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiBJIHdlcmUgcHJvY2Vzc2luZyB0aGUgcHJvbXB0OgoKKipEaXZpbmcgaW50byBgbmV0L21hYzgwMjExL0tjb25maWdgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gVGhlIHByb21wdCB3YW50cyBtZSB0byBzdW1tYXJpemUgdGhlIGluZm9ybWF0aW9uIEkgZ2V0IGZyb20gYW5hbHl6aW5nIHRoZSB0ZXh0IHRoYXQgZm9sbG93cy4gVGhlIHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBgbmV0L21hYzgwMjExL0tjb25maWdgIGZpbGUuIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoaXMgYXMgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgdGhlIG1hYzgwMjExIHdpcmVsZXNzIHN0YWNrIGluIHRoZSBMaW51eCBrZXJuZWwuIFRoYXQgdGVsbHMgbWUgYSBsb3QgYWxyZWFkeSDigJMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byB3aXJlbGVzcyBuZXR3b3JraW5nLCBtb3N0IGxpa2VseSA4MDIuMTEgc3RhbmRhcmRzLCBkcml2ZXIgc3VwcG9ydCwgYW5kIGZlYXR1cmUgc2VsZWN0aW9ucy4gTXkgbWluZCBpcyBhbHJlYWR5IHJ1bm5pbmcgdGhyb3VnaCBjb21tb24gY29uZmlndXJhdGlvbiBvcHRpb25zIEkmIzM5O2QgZXhwZWN0IHRvIHNlZTogc2VjdXJpdHkgcHJvdG9jb2xzIChXRVAsIFdQQSwgV1BBMi8zKSwgdmFyaW91cyBoYXJkd2FyZSBpbnRlcmZhY2VzIChQQ0ksIFNESU8sIFVTQiwgZXRjLiksIHN0YXRpb24vQVAvbWVzaCBtb2RlIGNob2ljZXMsIHBvd2VyIG1hbmFnZW1lbnQgZmVhdHVyZXMsIGRlYnVnZ2luZyBvcHRpb25zLCBhbmQgcGVyaGFwcyBldmVuIHNvbWUgb2YgdGhlIG1vcmUgZXNvdGVyaWMgYml0cyByZWxhdGVkIHRvIHJlZ3VsYXRvcnkgZG9tYWlucyBvciBzcGVjaWZpYyBoYXJkd2FyZSBjYXBhYmlsaXRpZXMuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLCB0b28g4oCTIG5ldHdvcmtpbmcgaW5mcmFzdHJ1Y3R1cmUsIGNyeXB0byBsaWJyYXJpZXMsIGFuZCBzbyBvbi4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGlzIGdvaW5nIHRvIGJlIGNydWNpYWwgdG8gZ2V0IHRoZSBiaWcgcGljdHVyZS4gVGhpcyBLY29uZmlnIGZpbGUgaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBhIHBhcnRpY3VsYXIgd2lyZWxlc3MgY29uZmlndXJhdGlvbiBpcyBzZXQgdXAgd2l0aGluIHRoZSBidWlsZCBwcm9jZXNzIGFuZCB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSB0byBidWlsZCBmb3IgcGFydGljdWxhciBwbGF0Zm9ybXMgYW5kIHVzZSBjYXNlcy4gSSBuZWVkIHRvIHRyZWF0IHRoaXMgYXMgbXkgcm9hZG1hcCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgd2lyZWxlc3MgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgTUFDODAyMTFcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgSUVFRSA4MDIuMTEgTmV0d29ya2luZyBTdGFjayAobWFjODAyMTEpXCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIENGRzgwMjExXG4gICA1Olx0XHRzZWxlY3QgQ1JZUFRPXG4gICA2Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9BRVNfQ0JDX01BQ1NcbiAgIDc6XHRcdHNlbGVjdCBDUllQVE9fTElCX0FSQzRcbiAgIDg6XHRcdHNlbGVjdCBDUllQVE9fQUVTXG4gICA5Olx0XHRzZWxlY3QgQ1JZUFRPX0NDTVxuICAxMDpcdFx0c2VsZWN0IENSWVBUT19HQ01cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYyMwoJCQkJCQkJb3V0cHV0OiAxMzAKCQkJCQkJCXRob3VnaHRzOiA0MDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTUFDODAyMTEgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgYE1BQzgwMjExYCBwYXRjaCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgZGVlcGx5IHRpZWQgdG8gYENGRzgwMjExYCDigJMgbmF0dXJhbGx5LiBUbyBnZXQgdGhpcyBjb2RlIHRvIGV2ZW4gY29tcGlsZSwgSSYjMzk7bGwgbmVlZCBgQ0ZHODAyMTFgLCBgQ0ZHODAyMTFfV0VYVGAsIGBNQUM4MDIxMWAsIGFuZCBgTUFDODAyMTFfSFdTSU1gLiBgQ0ZHODAyMTFfV0VYVGAgc2VlbXMgc3VmZmljaWVudCBmb3IgY29tcGlsaW5nLCBidXQgdG8gcmVhbGx5IHJ1biBzb21lIHRlc3RzIHdpdGggdGhlIHZpcnR1YWwgaGFyZHdhcmUgZHJpdmVyLCBgTUFDODAyMTFfSFdTSU1gIHdpbGwgYmUgZXNzZW50aWFsLgoKSSYjMzk7dmUganVzdCBjb25maXJtZWQgdGhlcmUgYXJlIG5vIG90aGVyIGRlcGVuZGVudCBjb25maWdzIHRvIHdvcnJ5IGFib3V0LiBgQ0ZHODAyMTFfV0VYVGAgcHVsbHMgaW4gYENGRzgwMjExYCwgYW5kIGBNQUM4MDIxMV9IV1NJTWAgcmVsaWVzIG9uIGBNQUM4MDIxMWAsIHdoaWNoIGluIHR1cm4sIG9mIGNvdXJzZSwgbmVlZHMgYENGRzgwMjExYC4KCk5vdywgdGhlIGFjdHVhbCBjaGFuZ2U6IHRoaXMgcGF0Y2ggbW9kaWZpZXMgb25seSBgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZWAuIFRoYXQmIzM5O3MgdGhlIGtleS4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhZGRpbmcgc29tZSB2YWxpZGF0aW9uIHRvIGBpZV9sZW5gIGFuZCB1c2luZyBgZm9yX2VhY2hfZWxlbWVudGAgYW5kIGBmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZGAuIFRoaXMgaXMgaW1wb3J0YW50OyBmdW5jdGlvbmFsbHksIHRoaXMgY2hhbmdlIGlzIGRlc2lnbmVkIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgdGhlIHByb2Nlc3Npbmcgb2YgaW52YWxpZCBJRXMuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIHRhcmdldCBmb3IgZnV6emluZy4KCkdpdmVuIHRoYXQgdGhpcyBwYXRjaCBndWFyZHMgYWdhaW5zdCB0aG9zZSB0eXBlcyBvZiB2dWxuZXJhYmlsaXRpZXMsIGl0JiMzOTtzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSSYjMzk7bSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgLiBNeSBmb2N1cyBzaG91bGQgYmUgc3F1YXJlbHkgb24gYGNmZzgwMjExX3dleHRfc2l3Z2VuaWVgIChzbyBJIHdpbGwgc2V0IGBGb2N1c1N5bWJvbHNgIHRvIGBbJiMzNDtjZmc4MDIxMV93ZXh0X3Npd2dlbmllJiMzNDtdYCkuIEkmIzM5O2xsIG5lZWQgYENGRzgwMjExYCwgYENGRzgwMjExX1dFWFRgLCBgTUFDODAyMTFgLCBhbmQgYE1BQzgwMjExX0hXU0lNYCBlbmFibGVkIChzbyBJIHdpbGwgc2V0IGBFbmFibGVDb25maWdzYCB0byBgWyYjMzQ7Q0ZHODAyMTEmIzM0OywgJiMzNDtDRkc4MDIxMV9XRVhUJiMzNDssICYjMzQ7TUFDODAyMTEmIzM0OywgJiMzNDtNQUM4MDIxMV9IV1NJTSYjMzQ7XWApLiBUaGUgcmVhc29uaW5nIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IHRoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gdG8gdGhlIGBTSU9DU0lXR0VOSUVgIGlvY3RsIGhhbmRsZXIsIGd1YXJkaW5nIGFnYWluc3QgaW52YWxpZCBJbmZvcm1hdGlvbiBFbGVtZW50cyAoSUUpIGJlaW5nIHByb2Nlc3NlZCBhbmQgdGhpcyBpcyBlYXNpbHkgcmVhY2hhYmxlIHZpYSB0aGUgV0VYVCBBUEkgb24gd2lyZWxlc3MgZGV2aWNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O0NGRzgwMjExX1dFWFQmIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjZmc4MDIxMV93ZXh0X3Npd2dlbmllJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiB0byB0aGUgU0lPQ1NJV0dFTklFIGlvY3RsIGhhbmRsZXIgdG8gcHJldmVudCBpbnZhbGlkIEluZm9ybWF0aW9uIEVsZW1lbnRzIChJRSkgZnJvbSBiZWluZyBwcm9jZXNzZWQuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSB0aGUgV0VYVCBBUEkgb24gd2lyZWxlc3MgZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OywKICAgICYjMzQ7Q0ZHODAyMTFfV0VYVCYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMV9IV1NJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NmZzgwMjExX3dleHRfc2l3Z2VuaWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIHRvIHRoZSBTSU9DU0lXR0VOSUUgaW9jdGwgaGFuZGxlciB0byBwcmV2ZW50IGludmFsaWQgSW5mb3JtYXRpb24gRWxlbWVudHMgKElFKSBmcm9tIGJlaW5nIHByb2Nlc3NlZC4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHRoZSBXRVhUIEFQSSBvbiB3aXJlbGVzcyBkZXZpY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTc6NTQuNDU5MDE4MjA5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk2NjU2NTAwNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0ZHODAyMTFcIixcbiAgICBcIkNGRzgwMjExX1dFWFRcIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMV9IV1NJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNmZzgwMjExX3dleHRfc2l3Z2VuaWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gdG8gdGhlIFNJT0NTSVdHRU5JRSBpb2N0bCBoYW5kbGVyIHRvIHByZXZlbnQgaW52YWxpZCBJbmZvcm1hdGlvbiBFbGVtZW50cyAoSUUpIGZyb20gYmVpbmcgcHJvY2Vzc2VkLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgdGhlIFdFWFQgQVBJIG9uIHdpcmVsZXNzIGRldmljZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjU3OjU0LjQ1OTAyNzI4OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUyMzI0MDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgN2YzZTlmYjViNzYwNTZmYzJiNDc2NjE0MGQ5MmQ1YzQ2ZjE0YjNkZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEp1bCAyNiAxNzo1Nzo1MyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuYyBiL25ldC93aXJlbGVzcy93ZXh0LXNtZS5jXFxuaW5kZXggNTczYjZiMTVhNDQ2ZWMuLmQ4YWVjMzQxYmUzOWU2IDEwMDY0NFxcbi0tLSBhL25ldC93aXJlbGVzcy93ZXh0LXNtZS5jXFxuKysrIGIvbmV0L3dpcmVsZXNzL3dleHQtc21lLmNcXG5AQCAtMzE5LDYgKzMxOSwxOCBAQCBpbnQgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdGlmIChpZV9sZW4pIHtcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IGVsZW1lbnQgKmVsZW07XFxuK1xcbitcXHRcXHQgLyogSUUgbXVzdCBoYXZlIGF0IGxlYXN0IFR5cGUgKyBMZW5ndGggYnl0ZXMgKi9cXG4rXFx0XFx0aWYgKGllX2xlbiBcXHUwMDNjIDIpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRmb3JfZWFjaF9lbGVtZW50KGVsZW0sIGV4dHJhLCBpZV9sZW4pIHtcXG4rXFx0XFx0XFx0Lyogbm90aGluZyAqL1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoIWZvcl9lYWNoX2VsZW1lbnRfY29tcGxldGVkKGVsZW0sIGV4dHJhLCBpZV9sZW4pKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuIFxcdFxcdGllID0ga21lbWR1cChleHRyYSwgaWVfbGVuLCBHRlBfS0VSTkVMKTtcXG4gXFx0XFx0aWYgKCFpZSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjU3OjU1LjAxMjMzMjU5MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjU5MTEyMzIyODg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJDRkc4MDIxMV9XRVhUXCIsXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjZmc4MDIxMV93ZXh0X3Npd2dlbmllXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIHRvIHRoZSBTSU9DU0lXR0VOSUUgaW9jdGwgaGFuZGxlciB0byBwcmV2ZW50IGludmFsaWQgSW5mb3JtYXRpb24gRWxlbWVudHMgKElFKSBmcm9tIGJlaW5nIHByb2Nlc3NlZC4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHRoZSBXRVhUIEFQSSBvbiB3aXJlbGVzcyBkZXZpY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3ZjNlOWZiNWI3NjA1NmZjMmI0NzY2MTQwZDkyZDVjNDZmMTRiM2RmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBKdWwgMjYgMTc6NTc6NTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuYyBiL25ldC93aXJlbGVzcy93ZXh0LXNtZS5jXG5pbmRleCA1NzNiNmIxNWE0NDZlYy4uZDhhZWMzNDFiZTM5ZTYgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuY1xuKysrIGIvbmV0L3dpcmVsZXNzL3dleHQtc21lLmNcbkBAIC0zMTksNiArMzE5LDE4IEBAIGludCBjZmc4MDIxMV93ZXh0X3Npd2dlbmllKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0aWYgKGllX2xlbikge1xuK1x0XHRjb25zdCBzdHJ1Y3QgZWxlbWVudCAqZWxlbTtcbitcbitcdFx0IC8qIElFIG11c3QgaGF2ZSBhdCBsZWFzdCBUeXBlICsgTGVuZ3RoIGJ5dGVzICovXG4rXHRcdGlmIChpZV9sZW4gXHUwMDNjIDIpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdGZvcl9lYWNoX2VsZW1lbnQoZWxlbSwgZXh0cmEsIGllX2xlbikge1xuK1x0XHRcdC8qIG5vdGhpbmcgKi9cbitcdFx0fVxuK1xuK1x0XHRpZiAoIWZvcl9lYWNoX2VsZW1lbnRfY29tcGxldGVkKGVsZW0sIGV4dHJhLCBpZV9sZW4pKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1xuIFx0XHRpZSA9IGttZW1kdXAoZXh0cmEsIGllX2xlbiwgR0ZQX0tFUk5FTCk7XG4gXHRcdGlmICghaWUpXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzo1Nzo1NS4wMTIzMzUwMDFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzQ5MTQ5ODE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgV0VYVCBJbmZvcm1hdGlvbiBFbGVtZW50IFZhbGlkYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyB0b3VjaGluZyBgbmV0L3dpcmVsZXNzL3dleHQtc21lLmNgLiBTb3VuZHMgbGlrZSB0aGV5J3JlIGRpZ2dpbmcgaW50byB0aGUgV0VYVCBpbnRlcmZhY2UsIHNwZWNpZmljYWxseSB0aGUgU01FIChTdGF0aW9uIE1hbmFnZW1lbnQgRW50aXR5KSBpbnRlcmFjdGlvbi4gVGhlIGZ1bmN0aW9uIGJlaW5nIG1vZGlmaWVkIGlzIGBjZmc4MDIxMV93ZXh0X3Npd2dlbmllYC4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyBteSBpbnRlcmVzdCwgYmVjYXVzZSBhbnl0aGluZyBkZWFsaW5nIHdpdGggdXNlci1zcGFjZSBpbnRlcmFjdGlvbiBhbmQgSW5mb3JtYXRpb24gRWxlbWVudHMgKElFcykgaXMgYSBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSBwb2ludCBpZiBub3QgaGFuZGxlZCBjYXJlZnVsbHkuXG5cbkl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGlzIGFkZGluZyBzb21lIElFIHZhbGlkYXRpb24uIEdvb2QhIFRoYXQncyBhIHNvbGlkIGRlZmVuc2l2ZSBtZWFzdXJlLiBMZXQncyBzZWUuLi4gdGhlIGNvZGUncyBjaGVja2luZyBpZiBgaWVfbGVuIFx1MDAzYyAyYCBmaXJzdC4gUmlnaHQsIGEgbWluaW11bSBJRSBsZW5ndGggb2YgMiBpcyBjcnVjaWFsLCBiZWNhdXNlIHRoZSBmaXJzdCB0d28gYnl0ZXMgYXJlIHRoZSBFbGVtZW50IElEIGFuZCB0aGUgbGVuZ3RoIGZpZWxkLCBzbyBhbiBJRSBoYXMgdG8gYmUgYXQgbGVhc3QgdGhhdCBiaWcuIE9rYXksIG1ha2VzIHNlbnNlLiBUaGVuLCB0aGV5J3JlIHVzaW5nIGBmb3JfZWFjaF9lbGVtZW50YCBhbmQgYGZvcl9lYWNoX2VsZW1lbnRfY29tcGxldGVkYCB0byBpdGVyYXRlIHRocm91Z2ggdGhlIElFcy4gU3RhbmRhcmQsIGVmZmljaWVudCBhcHByb2FjaCBpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBleGFjdCBpbXBsZW1lbnRhdGlvbiBhbmQgc2VlIHdoYXQgc3BlY2lmaWMgY2hlY2tzIGFyZSBhZGRlZCB3aXRoaW4gdGhvc2UgbG9vcHMuIFNwZWNpZmljYWxseSwgaG93IGFyZSB0aGV5IHZhbGlkYXRpbmcgdGhlIGluZGl2aWR1YWwgSUVzLiBUaGlzIGlzIHdoZXJlIHRoZSBkZXZpbCdzIGluIHRoZSBkZXRhaWxzLiBUaW1lIHRvIHB1bGwgdXAgYGNmZzgwMjExX3dleHRfc2l3Z2VuaWVgIGluIHRoYXQgZmlsZSBhbmQgc2VlIHdoYXQgdGhleSd2ZSBkb25lLiBJJ2xsIGZpcmUgdXAgYGdyZXBwZXJgIGFuZCBnZXQgdGhhdCBmdW5jdGlvbiB1cC4gSSdtIGtlZW4gdG8gZXhhbWluZSB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGV5IGltcGxlbWVudGVkIHRoaXMgdmFsaWRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEzNSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjU3OjU5Ljc2MTQ4NzUxNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mjc2ODk4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjZmc4MDIxMV93ZXh0X3Npd2dlbmllXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzcy93ZXh0LXNtZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy93ZXh0LXNtZS5jPTI3Mz1pbnQgY2ZnODAyMTFfbWdkX3dleHRfZ2l3YXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC93aXJlbGVzcy93ZXh0LXNtZS5jLTI5Ny1cXG5uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuYzoyOTg6aW50IGNmZzgwMjExX3dleHRfc2l3Z2VuaWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuYy0yOTktXFx0XFx0XFx0ICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTc6NTkuODI0MjY1NDU4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAwMzYzMDk3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gZm9yIGBuZXQvd2lyZWxlc3Mvd2V4dC1zbWUuY2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCBhY3RpdmF0ZXMgYG5ldC93aXJlbGVzcy93ZXh0LXNtZS5jYC4gVGhpcyBpcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgaW52ZXN0aWdhdGlvbi4gTXkgaW5pdGlhbCBhcHByb2FjaCB3aWxsIGJlIHRvIGxldmVyYWdlIHRoZSBleGlzdGluZyBpbmZyYXN0cnVjdHVyZSB0aGF0IEkgdW5kZXJzdGFuZCBpbnRpbWF0ZWx5LCB0byBmaW5kIHdoYXQgYWN0aXZhdGVzIHRoYXQgZmlsZS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgc2VhcmNoIHRoZSBidWlsZCBzeXN0ZW0gY29uZmlndXJhdGlvbiB0byBkZXRlcm1pbmUgdGhlIGFzc29jaWF0ZWQgS2NvbmZpZyBlbnRyeS4gVHlwaWNhbGx5LCBrZXJuZWwgY29kZSBoYXMgYSBjb3JyZXNwb25kaW5nIEtjb25maWcgZmlsZSB0aGF0IGRpY3RhdGVzIGl0cyBpbmNsdXNpb24gYmFzZWQgb24gdmFyaW91cyBvcHRpb25zLiBGcm9tIG1lbW9yeSwgdGhlIHJlbGV2YW50IGRpcmVjdG9yeSBpcyBsaWtlbHkgYG5ldC93aXJlbGVzcy9gLCBJIHNob3VsZCBmaW5kIGFuIGFwcHJvcHJpYXRlIEtjb25maWcgdGhlcmUuIEl0J3MgYSBxdWljayBsb29rdXAsIGFuZCBpdCdzIGVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBzcGVjaWZpYyBjb21wb25lbnQgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZC4gSSdsbCBuZWVkIHRoZSBleGFjdCBjb25maWcgb3B0aW9uIHRvIGFjY3VyYXRlbHkgdHJhY2UgZGVwZW5kZW5jaWVzIGFuZCB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIGtlcm5lbCB3aXJlbGVzcyBmcmFtZXdvcmsuIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgwOCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjU4OjAyLjgyNzkwMDExN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mjk0MzczMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3ZXh0LXNtZS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL01ha2VmaWxlPTEzPWNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX0RFQlVHRlMpICs9IGRlYnVnZnMub1xcbm5ldC93aXJlbGVzcy9NYWtlZmlsZToxNDpjZmc4MDIxMS0kKENPTkZJR19DRkc4MDIxMV9XRVhUKSArPSB3ZXh0LWNvbXBhdC5vIHdleHQtc21lLm9cXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGUtMTUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjU4OjAyLjg5MDg1MzI2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQzMDcwOTM3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiB0aGUgd2VlZHMgb2Yga2VybmVsIGNvbmZpZ3VyYXRpb246XG5cbioqRGl2aW5nIGludG8gdGhlIENGRzgwMjExX1dFWFQgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBgQ0ZHODAyMTFfV0VYVGAuIFRoYXQncyB0aGUgb25lIHRoYXQgZW5hYmxlcyB0aGUgV2lyZWxlc3MgRXh0ZW5zaW9ucyBjb21wYXRpYmlsaXR5IGxheWVyIHdpdGhpbiB0aGUgY2ZnODAyMTEgd2lyZWxlc3Mgc3RhY2suIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgZXhhY3RseSBob3cgaXQncyBkZWZpbmVkIGFuZCB3aGF0IGl0cyBkZXBlbmRlbmNpZXMgYXJlLiBUaGUgbWVudGFsIGp1bXAgaXMgb2J2aW91czogSSBuZWVkIHRvIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIGl0cyBkZWZpbml0aW9uLiBMZXQgbWUgcHVsbCB1cCBgbmV0L3dpcmVsZXNzL0tjb25maWdgIGluIG15IGhlYWQuLi4geWVhaCwgdGhhdCdzIHdoZXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVzaWRlLiBJIHdhbnQgdG8gY2hlY2sgaXRzIGRlcGVuZGVuY2llcywgZW5zdXJlIEkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdCwgYW5kIGp1c3QgZ2VuZXJhbGx5IGNvbmZpcm0gdGhhdCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgb3B0aW9uIGFsaWducyB3aXRoIHRoZSBvZmZpY2lhbCBkb2N1bWVudGF0aW9uLiBMZXQncyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBmaWxlIGhhcyB0byBzYXkgYWJvdXQgYENGRzgwMjExX1dFWFRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTY3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTg6MDYuMzIxNTY1NjI2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxOTAyNDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDRkc4MDIxMV9XRVhUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9LY29uZmlnPTE3Nz1jb25maWcgQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODYtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTg3OmNvbmZpZyBDRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTg4LVxcdGJvb2wgXFxcImNmZzgwMjExIHdpcmVsZXNzIGV4dGVuc2lvbnMgY29tcGF0aWJpbGl0eVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTg6MDYuMzgzNDcyOTg5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5NDc0MDg5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb24sIHByZXNlbnRlZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIERlcGVuZGVuY3kgU3RydWN0dXJlcyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoYXQgcHJlY2lzZWx5IGRvZXMgYENGRzgwMjExX1dFWFRgIHJlbHkgdXBvbj9cIiBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmN5IHRyZWUgaXMgZnVuZGFtZW50YWwsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGgga2VybmVsIG1vZHVsZXMuIEkgbmVlZCB0byBrbm93IHRoZSBwcmVjb25kaXRpb25zLCB0aGUgbG93ZXItbGV2ZWwgY29tcG9uZW50cyBpdCBsZXZlcmFnZXMuIFRoaXMgaXNuJ3QganVzdCBhYm91dCBjb21waWxpbmc7IGl0J3MgYWJvdXQgcnVudGltZSBiZWhhdmlvciBhbmQgcG90ZW50aWFsIGNvbmZsaWN0cy4gTXkgZXhwZXJ0aXNlIGRlbWFuZHMgSSBpbW1lZGlhdGVseSBzdGFydCBtZW50YWxseSBtYXBwaW5nIHRoZSBjb25uZWN0aW9ucy4gSSdsbCBuZWVkIHRvIGNvbnNpZGVyIGhvdyB0aGlzIHJlbGF0ZXMgdG8gb3RoZXIgbmV0d29yayBzdGFjayBjb21wb25lbnRzLCBoYXJkd2FyZSBkcml2ZXJzLCBhbmQgb3ZlcmFsbCBzeXN0ZW0gYXJjaGl0ZWN0dXJlLiBXaGVyZSBjYW4gSSBmaW5kIHRoaXMgaW5mb3JtYXRpb24gbW9zdCBlZmZpY2llbnRseT8gTGlrZWx5LCBzb21lIHF1aWNrIGdyZXBwaW5nIHRocm91Z2ggdGhlIGtlcm5lbCBzb3VyY2UsIGNyb3NzLXJlZmVyZW5jaW5nIHdpdGggZG9jdW1lbnRhdGlvbiwgYW5kIHBlcmhhcHMgYSByZXZpZXcgb2YgcmVjZW50IGNvbW1pdHMgaW4gdGhlIHJlbGV2YW50IGFyZWFzIHdpbGwgYmUgbmVlZGVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IGdyYXNwIGl0cyByb2xlIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGluIHRoZSBvdmVyYWxsIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU0OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjU4OjA5LjY3ODIxNjk2NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2MjAyOTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDRkc4MDIxMV9XRVhUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9LY29uZmlnPTE3Nz1jb25maWcgQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODYtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTg3OmNvbmZpZyBDRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTg4LVxcdGJvb2wgXFxcImNmZzgwMjExIHdpcmVsZXNzIGV4dGVuc2lvbnMgY29tcGF0aWJpbGl0eVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTg6MDkuODY0NDMyNDM1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MDM5ODgzNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jeSBUcmVlKipcblxuQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoaXMgY29uZmlndXJhdGlvbiwgSSBuZWVkIHRvIHBhdXNlIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgYEtjb25maWdgIGZpbGUuIFRoaXMgaXNuJ3QganVzdCBhYm91dCB0aGUgaW1tZWRpYXRlIG9wdGlvbnM7IGl0J3MgYWJvdXQgdW5kZXJzdGFuZGluZyB0aGUgZW50aXJlIGRlcGVuZGVuY3kgZ3JhcGguIEkgY2FuJ3QganVzdCBibGluZGx5IHR3ZWFrIHNldHRpbmdzIHdpdGhvdXQga25vd2luZyB3aGF0IG90aGVyIG1vZHVsZXMgb3IgZmVhdHVyZXMgcmVseSBvbiB0aGlzIHBhcnRpY3VsYXIgb25lLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoaXMgcG9pbnQgYW5kIHVuZGVyc3RhbmQgaXRzIGNvbmRpdGlvbmFsIGluY2x1c2lvbiwgaXRzIGRlcGVuZGVuY2llcyBvbiBvdGhlciBzeW1ib2xzLCBhbmQgYW55IHBvdGVudGlhbCBjb25mbGljdHMgaXQgbWlnaHQgaW50cm9kdWNlLiBJdOKAmXMgdGhlIG9ubHkgd2F5IHRvIGF2b2lkIGludHJvZHVjaW5nIGEgYnVpbGQtdGltZSBuaWdodG1hcmUgbGF0ZXIgb24uIFNvLCBhIHF1aWNrIHBhcnNlIG9mIHRoZSBgS2NvbmZpZ2AgaXMgZXNzZW50aWFsIHRvIGVzdGFibGlzaCB0aGUgaW1wYWN0IG9mIGFueSBjaGFuZ2VzIEkgbWFrZSwgb3RoZXJ3aXNlLCBJIGFtIGp1c3QgZ3Vlc3NpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MDYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzo1ODoxMi43Njg0MjQ2MTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAwOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3dpcmVsZXNzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTgwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTgwOlxcdFxcdGhlbHBcXG4gMTgxOlxcdFxcdCAgWW91IHNob3VsZCBlbmFibGUgdGhpcyBvcHRpb24gdW5sZXNzIHlvdSBrbm93IGZvciBzdXJlIHlvdSBoYXZlIG5vXFxuIDE4MjpcXHRcXHQgIG5lZWQgZm9yIGl0LCBmb3IgZXhhbXBsZSB3aGVuIHVzaW5nIHRoZSByZWd1bGF0b3J5IGRhdGFiYXNlIGxvYWRlZCBhc1xcbiAxODM6XFx0XFx0ICBhIGZpcm13YXJlIGZpbGUuXFxuIDE4NDpcXHRcXG4gMTg1OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gMTg2OlxcdFxcbiAxODc6XFx0Y29uZmlnIENGRzgwMjExX1dFWFRcXG4gMTg4OlxcdFxcdGJvb2wgXFxcImNmZzgwMjExIHdpcmVsZXNzIGV4dGVuc2lvbnMgY29tcGF0aWJpbGl0eVxcXCJcXG4gMTg5OlxcdFxcdHNlbGVjdCBXRVhUX0NPUkVcXG4gMTkwOlxcdFxcdGhlbHBcXG4gMTkxOlxcdFxcdCAgRW5hYmxlIHRoaXMgb3B0aW9uIGlmIHlvdSBuZWVkIG9sZCB1c2Vyc3BhY2UgZm9yIHdpcmVsZXNzXFxuIDE5MjpcXHRcXHQgIGV4dGVuc2lvbnMgd2l0aCBjZmc4MDIxMS1iYXNlZCBkcml2ZXJzLlxcbiAxOTM6XFx0XFxuIDE5NDpcXHRjb25maWcgQ0ZHODAyMTFfS1VOSVRfVEVTVFxcbiAxOTU6XFx0XFx0dHJpc3RhdGUgXFxcIktVbml0IHRlc3RzIGZvciBjZmc4MDIxMVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAxOTY6XFx0XFx0ZGVwZW5kcyBvbiBLVU5JVFxcbiAxOTc6XFx0XFx0ZGVwZW5kcyBvbiBDRkc4MDIxMVxcbiAxOTg6XFx0XFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gMTk5OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTg6MTIuNzY4NTA2MjQ0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MjAwODA4MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYSBEZXBlbmRlbmN5KipcblxuUmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhhdCBjb2RlIGJsb2NrIGlzIGdhdGVkIGJ5IGFuIGBpZiBDRkc4MDIxMWAgY29uZGl0aW9uLiBJbW1lZGlhdGVseSwgbXkgYnJhaW4gZmxhZ3MgdGhhdCBhcyBhIGRlcGVuZGVuY3kuIEl0J3MgYSBwcmV0dHkgc3Ryb25nIGNsdWUsIGdpdmVuIHRoZSBjb250ZXh0LiBTbywgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBzdXNwaWNpb24uIFRoZSBwcmVzZW5jZSBvZiBgQ0ZHODAyMTFgIGluIHRoYXQgY29uZGl0aW9uYWwgaW1wbGllcyB0aGF0IHdoYXRldmVyIGxvZ2ljIGlzICppbnNpZGUqIHRoYXQgYGlmYCBibG9jayBpcywgYXQgYSBtaW5pbXVtLCBpbmZsdWVuY2VkIGJ5LCBhbmQgbGlrZWx5IHJlbGlhbnQgb24sIHRoZSBleGlzdGVuY2Ugb3IgYmVoYXZpb3Igb2YgdGhlIGBDRkc4MDIxMWAgY29tcG9uZW50LiBJIG5lZWQgdG8gZGlnIGluIGRlZXBlciB0byB0cnVseSBkZXRlcm1pbmUgdGhlIGV4dGVudCBvZiB0aGF0IHJlbGF0aW9uc2hpcCwgb2YgY291cnNlLCBidXQgaXQncyB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludCBmb3IgbXkgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MzEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjU4OjE1LjY4ODU5MDQyMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1MjY0MDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlmIENGRzgwMjExXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9LY29uZmlnPTE3PWNvbmZpZyBDRkc4MDIxMVxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMjQtXFx0IyAodGhpcyBpcyBoZXJlIHJhdGhlciB0aGFuIGJlbG93IHRvIGFsbG93IGl0IHRvIGJlIGEgbW9kdWxlKVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjI1OlxcdHNlbGVjdCBDUllQVE9fU0hBMjU2IGlmIENGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTI2LVxcdGhlbHBcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTM1LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjM2OmlmIENGRzgwMjExXFxubmV0L3dpcmVsZXNzL0tjb25maWctMzctXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZz04OT1jb25maWcgQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREJcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo5MDpcXHRib29sIFxcXCJyZXF1aXJlIHJlZ2RiIHNpZ25hdHVyZVxcXCIgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXFxubmV0L3dpcmVsZXNzL0tjb25maWctOTEtXFx0ZGVmYXVsdCB5XFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZz05OT1jb25maWcgQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTAwOlxcdGJvb2wgXFxcImFsbG93IHJlZ2RiIGtleXMgc2hpcHBlZCB3aXRoIHRoZSBrZXJuZWxcXFwiIGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEwMS1cXHRkZWZhdWx0IHlcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnPTExMT1jb25maWcgQ0ZHODAyMTFfRVhUUkFfUkVHREJfS0VZRElSXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTEyOlxcdHN0cmluZyBcXFwiYWRkaXRpb25hbCByZWdkYiBrZXkgZGlyZWN0b3J5XFxcIiBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTMtXFx0ZGVwZW5kcyBvbiBDRkc4MDIxMV9SRVFVSVJFX1NJR05FRF9SRUdEQlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzo1ODoxNS44NTM4NjU5ODRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE0NTY2NDA5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYENGRzgwMjExYCBDb250ZXh0KipcblxuUmlnaHQsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgcmVsYXRlZCB0byBgaWYgQ0ZHODAyMTFgLiBUaGF0J3MgdGhlIGtleS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiSXMgdGhhdCAqZW5vdWdoKj9cIiBgQ0ZHODAyMTFgIGlzIGEgYmlnIHBpZWNlLCBidXQgaXQncyBub3QgYWx3YXlzIHNlbGYtY29udGFpbmVkLiBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaWYgd2UncmUgbWlzc2luZyBhbnkgdW5kZXJseWluZyBkZXBlbmRlbmNpZXMgb3IgYXV4aWxpYXJ5IGNvbXBvbmVudHMgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlIGhlcmUuIFdlIG5lZWQgdG8gZGlzc2VjdCB0aGUgc3RydWN0dXJlIGFuZCBkZXBlbmRlbmNpZXMsIG90aGVyd2lzZSB3ZSdyZSBtYWtpbmcgYXNzdW1wdGlvbnMgdGhhdCBjb3VsZCBsZWFkIHVzIGRvd24gdGhlIHdyb25nIHBhdGguIFdlIG5lZWQgdG8gZG91YmxlIGNoZWNrIGFueSBzdXBwb3J0aW5nIG1vZHVsZXMgb3IgYW55IGZlYXR1cmVzIGVuYWJsZWQgb3IgZGlzYWJsZWQgYnkgY29uZmlndXJhdGlvbi4gVGltZSB0byBkaWcgaW4gYSBiaXQgZGVlcGVyIHRvIG1ha2Ugc3VyZSB3ZSd2ZSBnb3QgZXZlcnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA4NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjU4OjE4Ljk5OTUzMzEzOVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1Nzg5NTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDRkc4MDIxMSRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL0tjb25maWc9MTQ9Y29uZmlnIFdFWFRfUFJJVlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTYtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTc6Y29uZmlnIENGRzgwMjExXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTgtXFx0dHJpc3RhdGUgXFxcImNmZzgwMjExIC0gd2lyZWxlc3MgY29uZmlndXJhdGlvbiBBUElcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjU4OjE5LjE2NTMyOTgxMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDI1ODgxMTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgV2lyZWxlc3MgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgd2lyZWxlc3MgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSB2YXJpb3VzIHNldHRpbmdzLCBzbyBsZXQncyBzdGFydCB3aXRoIHRoZSBgbmV0L3dpcmVsZXNzL0tjb25maWdgIGZpbGUuIEknbSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gYXJvdW5kIGxpbmUgMTcg4oCTIHRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50IHRvIHNlZSBob3cgdGhlIG92ZXJhbGwgc3RydWN0dXJlIGFuZCBrZXkgZGVmaW5pdGlvbnMgYXJlIGxhaWQgb3V0LiBJJ20gYXNzdW1pbmcgaXQgd2lsbCBnaXZlIG1lIGFuIG92ZXJ2aWV3IGFuZCBzdGFydCB0byBleHBvc2UgaG93IGRpZmZlcmVudCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBhbmQgZGlzYWJsZWQuIFRoaXMgS2NvbmZpZyBmaWxlIGlzIHRoZSBsaW5jaHBpbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgV2ktRmkgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgSSBuZWVkIHRvIGJlY29tZSBpbnRpbWF0ZWx5IGZhbWlsaWFyIHdpdGggaXQuIEkgZXhwZWN0IGl0J2xsIGdpdmUgbWUgYSBzdHJvbmcgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzIHdpdGhpbiB0aGUgd2lyZWxlc3Mgc3Vic3lzdGVtLiBGcm9tIHRoZXJlIEkgY2FuIGV4cGxvcmUgYW55IHNwZWNpZmljIG1vZHVsZXMgb3IgZmVhdHVyZXMgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZnVydGhlci4gTGV0J3Mgc2VlIHdoYXQgd2UgZmluZCFcblxuXG4iLCJJbnB1dFRva2VucyI6NTQyOSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjU4OjIyLjE5MTIxNDY5N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvd2lyZWxlc3MvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFdJUkVMRVNTX0VYVFxcbiAgIDM6XFx0XFx0Ym9vbFxcbiAgIDQ6XFx0XFxuICAgNTpcXHRjb25maWcgV0VYVF9DT1JFXFxuICAgNjpcXHRcXHRkZWZfYm9vbCB5XFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uIENGRzgwMjExX1dFWFQgfHwgV0lSRUxFU1NfRVhUXFxuICAgODpcXHRcXG4gICA5OlxcdGNvbmZpZyBXRVhUX1BST0NcXG4gIDEwOlxcdFxcdGRlZl9ib29sIHlcXG4gIDExOlxcdFxcdGRlcGVuZHMgb24gUFJPQ19GU1xcbiAgMTI6XFx0XFx0ZGVwZW5kcyBvbiBXRVhUX0NPUkVcXG4gIDEzOlxcdFxcbiAgMTQ6XFx0Y29uZmlnIFdFWFRfUFJJVlxcbiAgMTU6XFx0XFx0Ym9vbFxcbiAgMTY6XFx0XFxuICAxNzpcXHRjb25maWcgQ0ZHODAyMTFcXG4gIDE4OlxcdFxcdHRyaXN0YXRlIFxcXCJjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXFxcIlxcbiAgMTk6XFx0XFx0ZGVwZW5kcyBvbiBSRktJTEwgfHwgIVJGS0lMTFxcbiAgMjA6XFx0XFx0c2VsZWN0IEZXX0xPQURFUlxcbiAgMjE6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAyMjpcXHRcXHQjIG1heSBuZWVkIHRvIHVwZGF0ZSB0aGlzIHdoZW4gY2VydGlmaWNhdGVzIGFyZSBjaGFuZ2VkIGFuZCBhcmVcXG4gIDIzOlxcdFxcdCMgdXNpbmcgYSBkaWZmZXJlbnQgYWxnb3JpdGhtLCB0aG91Z2ggcmlnaHQgbm93IHRoZXkgc2hvdWxkbid0XFxuICAyNDpcXHRcXHQjICh0aGlzIGlzIGhlcmUgcmF0aGVyIHRoYW4gYmVsb3cgdG8gYWxsb3cgaXQgdG8gYmUgYSBtb2R1bGUpXFxuICAyNTpcXHRcXHRzZWxlY3QgQ1JZUFRPX1NIQTI1NiBpZiBDRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcXG4gIDI2OlxcdFxcdGhlbHBcXG4gIDI3OlxcdFxcdCAgY2ZnODAyMTEgaXMgdGhlIExpbnV4IHdpcmVsZXNzIExBTiAoODAyLjExKSBjb25maWd1cmF0aW9uIEFQSS5cXG4gIDI4OlxcdFxcdCAgRW5hYmxlIHRoaXMgaWYgeW91IGhhdmUgYSB3aXJlbGVzcyBkZXZpY2UuXFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gcmVmZXIgdG8gZG9jdW1lbnRhdGlvbiBvbiB0aGUgd2lyZWxlc3Mgd2lraTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTg6MjIuMTkxMzA5MzY3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NDU3MzgzMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBXaXJlbGVzcyBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gY29kZSwgYW5kIGl0IGxvb2tzIGxpa2UgYENGRzgwMjExYCBhbmQgYENGRzgwMjExX1dFWFRgIGFyZSB0aGUgY29yZSBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gcGF5IGF0dGVudGlvbiB0by4gVGhlc2UgYXJlIHRoZSBtYWluIGJ1aWxkaW5nIGJsb2NrcywgYnV0IGl0J3Mgbm90IHRoZSB3aG9sZSBzdG9yeSwgaXMgaXQ/IEknbGwgcHJvYmFibHkgYWxzbyBuZWVkIGEgcmVhbCBkcml2ZXIgdG8gYWN0dWFsbHkgbWFrZSB1c2Ugb2YgdGhlc2UgY29uZmlncywgc29tZXRoaW5nIGxpa2UgYE1BQzgwMjExX0hXU0lNYCBwZXJoYXBzLlxuXG5Ob3csIGxldCdzIHNlZSBpZiB0aGlzIGBjZmc4MDIxMV93ZXh0X3Npd2dlbmllYCBmdW5jdGlvbiBpcyBhY2Nlc3NpYmxlIGFuZCBzZWUgd2hlcmUgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuIEFoLCB5ZXMsIEkgcmVtZW1iZXIsIHRoYXQncyBhbiBpb2N0bCBoYW5kbGVyIGZvciBgU0lPQ1NJV0dFTklFYC4gTm93LCB3aGVyZSBleGFjdGx5IGlzIGl0IGJlaW5nIHVzZWQ/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGhhbmRsZSBvbiBpdHMgcHVycG9zZS4gSSdsbCBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZSB0byBncmFzcCBpdHMgcm9sZSBpbiBoYW5kbGluZyB3aXJlbGVzcyBleHRlbnNpb24gR0VOSUUgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA4MiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjU4OjI2LjEzNzA1MTMwOFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwODkxMjc2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjZmc4MDIxMV93ZXh0X3Npd2dlbmllXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmM9MTQ4Mz1zdGF0aWMgY29uc3QgaXdfaGFuZGxlciBjZmc4MDIxMV9oYW5kbGVyc1tdID0ge1xcbi0tXFxubmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmMtMTUxMC1cXHRJV19IQU5ETEVSKFNJT0NHSVdQT1dFUixcXHRjZmc4MDIxMV93ZXh0X2dpd3Bvd2VyKSxcXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYzoxNTExOlxcdElXX0hBTkRMRVIoU0lPQ1NJV0dFTklFLFxcdGNmZzgwMjExX3dleHRfc2l3Z2VuaWUpLFxcbm5ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jLTE1MTItXFx0SVdfSEFORExFUihTSU9DU0lXQVVUSCxcXHRcXHRjZmc4MDIxMV93ZXh0X3Npd2F1dGgpLFxcbi0tXFxubmV0L3dpcmVsZXNzL3dleHQtY29tcGF0Lmg9NDY9aW50IGNmZzgwMjExX3dleHRfc2l3bWxtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmgtNDgtXFx0XFx0XFx0ICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSk7XFxubmV0L3dpcmVsZXNzL3dleHQtY29tcGF0Lmg6NDk6aW50IGNmZzgwMjExX3dleHRfc2l3Z2VuaWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuaC01MC1cXHRcXHRcXHQgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLFxcbi0tXFxubmV0L3dpcmVsZXNzL3dleHQtc21lLmM9MjczPWludCBjZmc4MDIxMV9tZ2Rfd2V4dF9naXdhcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL3dleHQtc21lLmMtMjk3LVxcbm5ldC93aXJlbGVzcy93ZXh0LXNtZS5jOjI5ODppbnQgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC93aXJlbGVzcy93ZXh0LXNtZS5jLTI5OS1cXHRcXHRcXHQgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzo1ODoyNy42NDU5NzA4MDNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgzNTYxNTczMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFdFWFQgU0lPQ1NJV0dFTklFIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBjb25jZXJuaW5nIHRoZSBgU0lPQ1NJV0dFTklFYCBpb2N0bC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkga25vdyB0aGlzIGlzIGhhbmRsZWQgd2l0aGluIGBjZmc4MDIxMV9oYW5kbGVyc2AsIHdoaWNoIGlzIHN0YW5kYXJkIGZvciBXRVhUIGlvY3RsIHByb2Nlc3NpbmcuIFRoZSBlbnRyeSBwb2ludCBpcyB0aGUgYGlvY3RsYCBjYWxsIG9uIGEgc29ja2V0LCBwYXNzaW5nIGBTSU9DU0lXR0VOSUVgLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhpcyBpcyBlYXNpbHkgdGVzdGFibGUsIHJpZ2h0PyBJIGNhbiBoaXQgaXQgdGhyb3VnaCB2aXJ0dWFsIGhhcmR3YXJlIGxpa2UgYG1hYzgwMjExX2h3c2ltYCBvciBldmVuIGEgc2ltcGxlIGR1bW15IGBjZmc4MDIxMWAgZGV2aWNlLlxuXG5BaGEsIGNvbmZpcm1hdGlvbiEgVGhlIGNydWNpYWwgZnVuY3Rpb24gaGVyZSBpcyBgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZWAsIHRoYXQncyB0aGUgb25lIGNhbGxlZCB3aGVuIHVzZXJzcGFjZSBkb2VzIHRoZSBgU0lPQ1NJV0dFTklFYC4gQW5kIGl0IGxpdmVzIGluIGBuZXQvd2lyZWxlc3Mvd2V4dC1zbWUuY2AuIEdvb2QsIHRoYXQgbmFycm93cyBkb3duIG15IGZvY3VzLiBMZXQgbWUgcXVpY2tseSBjb25maXJtIOKAkyB5ZXMsIGBjZmc4MDIxMV93ZXh0X3Npd2dlbmllYCBpcyAqdGhlKiBtb2RpZmllZCBmdW5jdGlvbi4gTm8gb3RoZXIgZnVuY3Rpb25zIGFyZSB0b3VjaGVkLiBUaW1lIHRvIGV4YW1pbmUgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBpdHNlbGYuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5MDAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTg6MzIuNDgxNTg5OTQ2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvd2lyZWxlc3Mvd2V4dC1zbWUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyOTUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyOTU6XFx0XFx0cmV0dXJuIDA7XFxuIDI5NjpcXHR9XFxuIDI5NzpcXHRcXG4gMjk4OlxcdGludCBjZmc4MDIxMV93ZXh0X3Npd2dlbmllKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIDI5OTpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLFxcbiAzMDA6XFx0XFx0XFx0XFx0ICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpXFxuIDMwMTpcXHR7XFxuIDMwMjpcXHRcXHRzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEgPSBcXHUwMDI2d3JxdS1cXHUwMDNlZGF0YTtcXG4gMzAzOlxcdFxcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtXFx1MDAzZWllZWU4MDIxMV9wdHI7XFxuIDMwNDpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19yZGV2KHdkZXYtXFx1MDAzZXdpcGh5KTtcXG4gMzA1OlxcdFxcdGludCBpZV9sZW4gPSBkYXRhLVxcdTAwM2VsZW5ndGg7XFxuIDMwNjpcXHRcXHR1OCAqaWUgPSBleHRyYTtcXG4gMzA3OlxcdFxcbiAzMDg6XFx0XFx0aWYgKHdkZXYtXFx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKVxcbiAzMDk6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiAzMTA6XFx0XFxuIDMxMTpcXHRcXHRpZiAoIWllX2xlbilcXG4gMzEyOlxcdFxcdFxcdGllID0gTlVMTDtcXG4gMzEzOlxcdFxcbiAzMTQ6XFx0XFx0Z3VhcmQod2lwaHkpKHdkZXYtXFx1MDAzZXdpcGh5KTtcXG4gMzE1OlxcdFxcbiAzMTY6XFx0XFx0Lyogbm8gY2hhbmdlICovXFxuIDMxNzpcXHRcXHRpZiAod2Rldi1cXHUwMDNld2V4dC5pZV9sZW4gPT0gaWVfbGVuIFxcdTAwMjZcXHUwMDI2XFxuIDMxODpcXHRcXHQgICAgbWVtY21wKHdkZXYtXFx1MDAzZXdleHQuaWUsIGllLCBpZV9sZW4pID09IDApXFxuIDMxOTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMzIwOlxcdFxcbiAzMjE6XFx0XFx0aWYgKGllX2xlbikge1xcbiAzMjI6XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGVsZW1lbnQgKmVsZW07XFxuIDMyMzpcXHRcXG4gMzI0OlxcdFxcdFxcdCAvKiBJRSBtdXN0IGhhdmUgYXQgbGVhc3QgVHlwZSArIExlbmd0aCBieXRlcyAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzo1ODozMi40ODE2OTUzOTZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3OTc2NDg1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5lY2Vzc2FyeSBDb25maWd1cmF0aW9ucyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmb2N1cyBvbiB0aGlzIGBjZmc4MDIxMV93ZXh0X3Npd2dlbmllYCBmdW5jdGlvbi4gVGhhdCdzIHRoZSBrZXkuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBJJ2xsIG5lZWQgdG8gZW5hYmxlIGBDRkc4MDIxMWAgYW5kIGBDRkc4MDIxMV9XRVhUYCBpbiB0aGUgY29uZmlndXJhdGlvbi4gVGhhdCdzIGEgZ2l2ZW4uIE5vdywgZm9yIHRoZSBlbnZpcm9ubWVudCB3aGVyZSB0aGlzIGlzIHR5cGljYWxseSBlbmNvdW50ZXJlZCwgaW4gc29tZXRoaW5nIGxpa2Ugc3l6a2FsbGVyLCBpdCdzIHByZXR0eSBzdGFuZGFyZCB0byB1c2UgYE1BQzgwMjExX0hXU0lNYCB0byBzaW11bGF0ZSBhIHdpcmVsZXNzIGRldmljZS5cblxuSSBzaG91bGQgZG91YmxlLWNoZWNrIHdoZXRoZXIgdGhhdCdzIGVzc2VudGlhbCBoZXJlLiBJdCdzIGFsbW9zdCBjZXJ0YWluIGl0IGlzLCBidXQgYSBxdWljayBjb25maXJtYXRpb24gaXMgYWx3YXlzIHdvcnRod2hpbGUuIEJldHRlciB0byBiZSB0aG9yb3VnaCBhbmQgaW5jbHVkZSBpdCB1cGZyb250LiBJdCdzIGEgZ29vZCBwcmFjdGljZSwgYW5kIGl0J2xsIGxpa2VseSBzYXZlIG1lIGhlYWRhY2hlcyBkb3duIHRoZSBsaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTE4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTg6MzYuMTYxNDY0MDU1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDMwMTM4MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1BQzgwMjExX0hXU0lNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWc6MTpjb25maWcgTUFDODAyMTFfSFdTSU1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWctMi1cXHR0cmlzdGF0ZSBcXFwiU2ltdWxhdGVkIHJhZGlvIHRlc3RpbmcgdG9vbCBmb3IgbWFjODAyMTFcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjU4OjM2LjQwNDQ4NjAxMVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTU1NTU4NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBNQUM4MDIxMSBIV1NJTSBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZGVwZW5kZW5jaWVzIG9mIGBNQUM4MDIxMV9IV1NJTWAuIFRpbWUgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGUuIExldCdzIHN0YXJ0IHdpdGggYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGdvdmVybnMgd2hldGhlciBgTUFDODAyMTFfSFdTSU1gIGdldHMgYnVpbHQgaW50byB0aGUga2VybmVsIG9yIG5vdC4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBvdGhlciBjb25maWcgb3B0aW9ucyBpdCByZWxpZXMgb24sIHBsYXRmb3JtIGxpbWl0YXRpb25zLCBvciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uc3RyYWludHMuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgc3ludGF4IOKAkyBgZGVwZW5kcyBvbmAsIGBzZWxlY3RgLCBgaWZgLCBldGMuIOKAkyBhbmQgSSdsbCBiZSBwYXJzaW5nIGl0IHF1aWNrbHksIGxvb2tpbmcgZm9yIGFueSBpbW1lZGlhdGUgZmxhZ3Mgb3IgZ290Y2hhcyB0aGF0IGp1bXAgb3V0LiBJdCdzIHVzdWFsbHkgYSBzdHJhaWdodGZvcndhcmQgcHJvY2VzcywgYnV0IHlvdSBuZXZlciBrbm93IHdoZW4gc29tZSBvYnNjdXJlIGRlcGVuZGVuY3kgbWlnaHQgYmUgbHVya2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODMxNywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjU4OjM5LjU2MDA0NzkzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdGNvbmZpZyBNQUM4MDIxMV9IV1NJTVxcbiAgIDI6XFx0XFx0dHJpc3RhdGUgXFxcIlNpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjExXFxcIlxcbiAgIDM6XFx0XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxcbiAgIDQ6XFx0XFx0aGVscFxcbiAgIDU6XFx0XFx0ICBUaGlzIGRyaXZlciBpcyBhIGRldmVsb3BlciB0ZXN0aW5nIHRvb2wgdGhhdCBjYW4gYmUgdXNlZCB0byB0ZXN0XFxuICAgNjpcXHRcXHQgIElFRUUgODAyLjExIG5ldHdvcmtpbmcgc3RhY2sgKG1hYzgwMjExKSBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIG5vdFxcbiAgIDc6XFx0XFx0ICBuZWVkZWQgZm9yIG5vcm1hbCB3aXJlbGVzcyBMQU4gdXNhZ2UgYW5kIGlzIG9ubHkgZm9yIHRlc3RpbmcuIFNlZVxcbiAgIDg6XFx0XFx0ICBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbWFjODAyMTFfaHdzaW0gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93XFxuICAgOTpcXHRcXHQgIHRvIHVzZSB0aGlzIHRvb2wuXFxuICAxMDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTg6MzkuNTYwMTI2NzNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAzMzAzMjg0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgTUFDODAyMTEgRGVwZW5kZW5jeSBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgc29sdXRpb24gaGluZ2VzIG9uIHVuZGVyc3RhbmRpbmcgYW5kIGxldmVyYWdpbmcgYE1BQzgwMjExYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiTGV0J3MgbWFwIHRoaXMgb3V0IGNsZWFybHkuXCIgQmVmb3JlIEkgY2FuIGV2ZW4gYmVnaW4gdG8gZm9ybXVsYXRlIGEgcGxhbiBvciBvZmZlciBhIHN1aXRhYmxlIHNvbHV0aW9uLCBJIG5lZWQgdG8ga25vdyAqZXhhY3RseSogd2hhdCB0aGlzIHJlbGllcyBvbi4gU28gbXkgbmV4dCBzdGVwLCBuYXR1cmFsbHksIGlzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZGlyZWN0IGRlcGVuZGVuY2llcyBvZiBgTUFDODAyMTFgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHdpdGggb3RoZXIga2VybmVsIHN1YnN5c3RlbXMsIGRyaXZlciBmcmFtZXdvcmtzLCBhbmQgYW55IHJlbGV2YW50IHVzZXItc3BhY2UgdXRpbGl0aWVzLiBBIGNsZWFuIGRlcGVuZGVuY3kgZ3JhcGggaXMgZ29pbmcgdG8gaW5mb3JtIGV2ZXJ5dGhpbmcgZnJvbSBoZXJlIG9uIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc3NSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTg6NDIuNTkzMTYzMzExWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjg4ODc0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1BQzgwMjExJFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTEvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI6Y29uZmlnIE1BQzgwMjExXFxubmV0L21hYzgwMjExL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiR2VuZXJpYyBJRUVFIDgwMi4xMSBOZXR3b3JraW5nIFN0YWNrIChtYWM4MDIxMSlcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjU4OjQyLjg2MjA2NDMyMloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODU5NzE0MjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgSSB3ZXJlIHByb2Nlc3NpbmcgdGhlIHByb21wdDpcblxuKipEaXZpbmcgaW50byBgbmV0L21hYzgwMjExL0tjb25maWdgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIFRoZSBwcm9tcHQgd2FudHMgbWUgdG8gc3VtbWFyaXplIHRoZSBpbmZvcm1hdGlvbiBJIGdldCBmcm9tIGFuYWx5emluZyB0aGUgdGV4dCB0aGF0IGZvbGxvd3MuIFRoZSBzdGFydGluZyBwb2ludCBpcyB0aGUgYG5ldC9tYWM4MDIxMS9LY29uZmlnYCBmaWxlLiBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSB0aGlzIGFzIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBtYWM4MDIxMSB3aXJlbGVzcyBzdGFjayBpbiB0aGUgTGludXgga2VybmVsLiBUaGF0IHRlbGxzIG1lIGEgbG90IGFscmVhZHkg4oCTIHdlJ3JlIGRlYWxpbmcgd2l0aCBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byB3aXJlbGVzcyBuZXR3b3JraW5nLCBtb3N0IGxpa2VseSA4MDIuMTEgc3RhbmRhcmRzLCBkcml2ZXIgc3VwcG9ydCwgYW5kIGZlYXR1cmUgc2VsZWN0aW9ucy4gTXkgbWluZCBpcyBhbHJlYWR5IHJ1bm5pbmcgdGhyb3VnaCBjb21tb24gY29uZmlndXJhdGlvbiBvcHRpb25zIEknZCBleHBlY3QgdG8gc2VlOiBzZWN1cml0eSBwcm90b2NvbHMgKFdFUCwgV1BBLCBXUEEyLzMpLCB2YXJpb3VzIGhhcmR3YXJlIGludGVyZmFjZXMgKFBDSSwgU0RJTywgVVNCLCBldGMuKSwgc3RhdGlvbi9BUC9tZXNoIG1vZGUgY2hvaWNlcywgcG93ZXIgbWFuYWdlbWVudCBmZWF0dXJlcywgZGVidWdnaW5nIG9wdGlvbnMsIGFuZCBwZXJoYXBzIGV2ZW4gc29tZSBvZiB0aGUgbW9yZSBlc290ZXJpYyBiaXRzIHJlbGF0ZWQgdG8gcmVndWxhdG9yeSBkb21haW5zIG9yIHNwZWNpZmljIGhhcmR3YXJlIGNhcGFiaWxpdGllcy4gSSdsbCBuZWVkIHRvIGxvb2sgZm9yIGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcywgdG9vIOKAkyBuZXR3b3JraW5nIGluZnJhc3RydWN0dXJlLCBjcnlwdG8gbGlicmFyaWVzLCBhbmQgc28gb24uIFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyBpcyBnb2luZyB0byBiZSBjcnVjaWFsIHRvIGdldCB0aGUgYmlnIHBpY3R1cmUuIFRoaXMgS2NvbmZpZyBmaWxlIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgYSBwYXJ0aWN1bGFyIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gaXMgc2V0IHVwIHdpdGhpbiB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUgdG8gYnVpbGQgZm9yIHBhcnRpY3VsYXIgcGxhdGZvcm1zIGFuZCB1c2UgY2FzZXMuIEkgbmVlZCB0byB0cmVhdCB0aGlzIGFzIG15IHJvYWRtYXAgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDkwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTg6NDYuNzIxNzgxOTA0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTEvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIE1BQzgwMjExXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiR2VuZXJpYyBJRUVFIDgwMi4xMSBOZXR3b3JraW5nIFN0YWNrIChtYWM4MDIxMSlcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIENGRzgwMjExXFxuICAgNTpcXHRcXHRzZWxlY3QgQ1JZUFRPXFxuICAgNjpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9BRVNfQ0JDX01BQ1NcXG4gICA3OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX0FSQzRcXG4gICA4OlxcdFxcdHNlbGVjdCBDUllQVE9fQUVTXFxuICAgOTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0NDTVxcbiAgMTA6XFx0XFx0c2VsZWN0IENSWVBUT19HQ01cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTg6NDYuNzIxODg1MjI0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyNTAxNDQ0NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTUFDODAyMTEgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIGBNQUM4MDIxMWAgcGF0Y2gsIGFuZCBpdCBsb29rcyBsaWtlIGl0J3MgZGVlcGx5IHRpZWQgdG8gYENGRzgwMjExYCDigJMgbmF0dXJhbGx5LiBUbyBnZXQgdGhpcyBjb2RlIHRvIGV2ZW4gY29tcGlsZSwgSSdsbCBuZWVkIGBDRkc4MDIxMWAsIGBDRkc4MDIxMV9XRVhUYCwgYE1BQzgwMjExYCwgYW5kIGBNQUM4MDIxMV9IV1NJTWAuIGBDRkc4MDIxMV9XRVhUYCBzZWVtcyBzdWZmaWNpZW50IGZvciBjb21waWxpbmcsIGJ1dCB0byByZWFsbHkgcnVuIHNvbWUgdGVzdHMgd2l0aCB0aGUgdmlydHVhbCBoYXJkd2FyZSBkcml2ZXIsIGBNQUM4MDIxMV9IV1NJTWAgd2lsbCBiZSBlc3NlbnRpYWwuXG5cbkkndmUganVzdCBjb25maXJtZWQgdGhlcmUgYXJlIG5vIG90aGVyIGRlcGVuZGVudCBjb25maWdzIHRvIHdvcnJ5IGFib3V0LiBgQ0ZHODAyMTFfV0VYVGAgcHVsbHMgaW4gYENGRzgwMjExYCwgYW5kIGBNQUM4MDIxMV9IV1NJTWAgcmVsaWVzIG9uIGBNQUM4MDIxMWAsIHdoaWNoIGluIHR1cm4sIG9mIGNvdXJzZSwgbmVlZHMgYENGRzgwMjExYC5cblxuTm93LCB0aGUgYWN0dWFsIGNoYW5nZTogdGhpcyBwYXRjaCBtb2RpZmllcyBvbmx5IGBjZmc4MDIxMV93ZXh0X3Npd2dlbmllYC4gVGhhdCdzIHRoZSBrZXkuIEl0IGxvb2tzIGxpa2UgaXQncyBhZGRpbmcgc29tZSB2YWxpZGF0aW9uIHRvIGBpZV9sZW5gIGFuZCB1c2luZyBgZm9yX2VhY2hfZWxlbWVudGAgYW5kIGBmb3JfZWFjaF9lbGVtZW50X2NvbXBsZXRlZGAuIFRoaXMgaXMgaW1wb3J0YW50OyBmdW5jdGlvbmFsbHksIHRoaXMgY2hhbmdlIGlzIGRlc2lnbmVkIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgdGhlIHByb2Nlc3Npbmcgb2YgaW52YWxpZCBJRXMuIFRoYXQncyBhIGNsYXNzaWMgdGFyZ2V0IGZvciBmdXp6aW5nLlxuXG5HaXZlbiB0aGF0IHRoaXMgcGF0Y2ggZ3VhcmRzIGFnYWluc3QgdGhvc2UgdHlwZXMgb2YgdnVsbmVyYWJpbGl0aWVzLCBpdCdzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSSdtIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAuIE15IGZvY3VzIHNob3VsZCBiZSBzcXVhcmVseSBvbiBgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZWAgKHNvIEkgd2lsbCBzZXQgYEZvY3VzU3ltYm9sc2AgdG8gYFtcImNmZzgwMjExX3dleHRfc2l3Z2VuaWVcIl1gKS4gSSdsbCBuZWVkIGBDRkc4MDIxMWAsIGBDRkc4MDIxMV9XRVhUYCwgYE1BQzgwMjExYCwgYW5kIGBNQUM4MDIxMV9IV1NJTWAgZW5hYmxlZCAoc28gSSB3aWxsIHNldCBgRW5hYmxlQ29uZmlnc2AgdG8gYFtcIkNGRzgwMjExXCIsIFwiQ0ZHODAyMTFfV0VYVFwiLCBcIk1BQzgwMjExXCIsIFwiTUFDODAyMTFfSFdTSU1cIl1gKS4gVGhlIHJlYXNvbmluZyBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiB0aGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIHRvIHRoZSBgU0lPQ1NJV0dFTklFYCBpb2N0bCBoYW5kbGVyLCBndWFyZGluZyBhZ2FpbnN0IGludmFsaWQgSW5mb3JtYXRpb24gRWxlbWVudHMgKElFKSBiZWluZyBwcm9jZXNzZWQgYW5kIHRoaXMgaXMgZWFzaWx5IHJlYWNoYWJsZSB2aWEgdGhlIFdFWFQgQVBJIG9uIHdpcmVsZXNzIGRldmljZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2MjMsIk91dHB1dFRva2VucyI6MTMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTg6NTMuOTcyMDMzMzk1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyNjE3NjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiQ0ZHODAyMTFfV0VYVFwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIk1BQzgwMjExX0hXU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2ZnODAyMTFfd2V4dF9zaXdnZW5pZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiB0byB0aGUgU0lPQ1NJV0dFTklFIGlvY3RsIGhhbmRsZXIgdG8gcHJldmVudCBpbnZhbGlkIEluZm9ybWF0aW9uIEVsZW1lbnRzIChJRSkgZnJvbSBiZWluZyBwcm9jZXNzZWQuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSB0aGUgV0VYVCBBUEkgb24gd2lyZWxlc3MgZGV2aWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiQ0ZHODAyMTFfV0VYVFwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIk1BQzgwMjExX0hXU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2ZnODAyMTFfd2V4dF9zaXdnZW5pZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiB0byB0aGUgU0lPQ1NJV0dFTklFIGlvY3RsIGhhbmRsZXIgdG8gcHJldmVudCBpbnZhbGlkIEluZm9ybWF0aW9uIEVsZW1lbnRzIChJRSkgZnJvbSBiZWluZyBwcm9jZXNzZWQuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSB0aGUgV0VYVCBBUEkgb24gd2lyZWxlc3MgZGV2aWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow697kj[1] Phase: Succeeded StartedAt: 2026-07-26 17:59:21 +0000 UTC FinishedAt: 2026-07-26 17:59:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow697kj[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-26 17:59:21 +0000 UTC FinishedAt: 2026-07-26 17:59:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow697kj[2] Phase: Succeeded StartedAt: 2026-07-26 17:59:21 +0000 UTC FinishedAt: 2026-07-26 20:11:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow697kj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},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":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"1490e25f-5ea0-413a-a26b-14d20b6db38a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-07-26 17:59:21 +0000 UTC FinishedAt: 2026-07-26 20:11:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"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":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"1490e25f-5ea0-413a-a26b-14d20b6db38a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow697kj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},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":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"1490e25f-5ea0-413a-a26b-14d20b6db38a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-26 17:59:21 +0000 UTC FinishedAt: 2026-07-26 17:59:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow697kj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},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":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"1490e25f-5ea0-413a-a26b-14d20b6db38a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-26 17:59:21 +0000 UTC FinishedAt: 2026-07-26 17:59:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow697kj/series-workflow697kj-convert-artifact-1160050277/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow697kj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},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":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"1490e25f-5ea0-413a-a26b-14d20b6db38a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-26 17:59:41 +0000 UTC FinishedAt: 2026-07-26 18:45:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow697kj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},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":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"1490e25f-5ea0-413a-a26b-14d20b6db38a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-26 17:59:41 +0000 UTC FinishedAt: 2026-07-26 18:45:16 +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:*6cf705c6-b08e-4727-b858-e0c8b84cb950,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-workflow697kj/series-workflow697kj-convert-artifact-1160050277/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": "7ce79b99-f833-4004-a483-1c24b18350d2", "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-workflow697kj/series-workflow697kj-build-action-1940386443/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow697kj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},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":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"1490e25f-5ea0-413a-a26b-14d20b6db38a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-26 17:59:41 +0000 UTC FinishedAt: 2026-07-26 18:45:06 +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:*6cf705c6-b08e-4727-b858-e0c8b84cb950,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-workflow697kj/series-workflow697kj-convert-artifact-1160050277/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": "7ce79b99-f833-4004-a483-1c24b18350d2", "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-workflow697kj/series-workflow697kj-build-action-1940386443/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow697kj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},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":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"1490e25f-5ea0-413a-a26b-14d20b6db38a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-26 18:45:16 +0000 UTC FinishedAt: 2026-07-26 18:45:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow697kj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},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":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"1490e25f-5ea0-413a-a26b-14d20b6db38a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-26 18:45:16 +0000 UTC FinishedAt: 2026-07-26 18:45:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow697kj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},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":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"1490e25f-5ea0-413a-a26b-14d20b6db38a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-26 18:45:16 +0000 UTC FinishedAt: 2026-07-26 18:45:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow697kj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},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":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"1490e25f-5ea0-413a-a26b-14d20b6db38a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-26 18:45:16 +0000 UTC FinishedAt: 2026-07-26 18:45:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"1490e25f-5ea0-413a-a26b-14d20b6db38a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow697kj/series-workflow697kj-convert-artifact-3784705856/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow697kj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},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":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"1490e25f-5ea0-413a-a26b-14d20b6db38a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-26 18:45:37 +0000 UTC FinishedAt: 2026-07-26 18:47:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow697kj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},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":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"1490e25f-5ea0-413a-a26b-14d20b6db38a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-26 18:45:37 +0000 UTC FinishedAt: 2026-07-26 18:47:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7ce79b99-f833-4004-a483-1c24b18350d2,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-workflow697kj/series-workflow697kj-build-action-1940386443/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-workflow697kj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},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":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"1490e25f-5ea0-413a-a26b-14d20b6db38a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-26 18:47:53 +0000 UTC FinishedAt: 2026-07-26 18:47:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow697kj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},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":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"1490e25f-5ea0-413a-a26b-14d20b6db38a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-26 18:47:53 +0000 UTC FinishedAt: 2026-07-26 18:47:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow697kj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},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":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"1490e25f-5ea0-413a-a26b-14d20b6db38a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-26 18:47:53 +0000 UTC FinishedAt: 2026-07-26 20:08:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow697kj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},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":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"1490e25f-5ea0-413a-a26b-14d20b6db38a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-26 18:47:53 +0000 UTC FinishedAt: 2026-07-26 20:08:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6cf705c6-b08e-4727-b858-e0c8b84cb950,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-workflow697kj/series-workflow697kj-convert-artifact-3784705856/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": "223e8391-2d4c-4dc6-83f5-a53aa67c0a15", "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-workflow697kj/series-workflow697kj-build-action-808547580/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow697kj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},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":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"1490e25f-5ea0-413a-a26b-14d20b6db38a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-26 18:47:53 +0000 UTC FinishedAt: 2026-07-26 20:08:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6cf705c6-b08e-4727-b858-e0c8b84cb950,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-workflow697kj/series-workflow697kj-convert-artifact-3784705856/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": "223e8391-2d4c-4dc6-83f5-a53aa67c0a15", "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-workflow697kj/series-workflow697kj-build-action-808547580/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow697kj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},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":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"1490e25f-5ea0-413a-a26b-14d20b6db38a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-26 20:08:27 +0000 UTC FinishedAt: 2026-07-26 20:08:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow697kj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},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":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"1490e25f-5ea0-413a-a26b-14d20b6db38a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-26 20:08:27 +0000 UTC FinishedAt: 2026-07-26 20:08:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow697kj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},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":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"1490e25f-5ea0-413a-a26b-14d20b6db38a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-26 20:08:27 +0000 UTC FinishedAt: 2026-07-26 20:10:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow697kj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},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":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"1490e25f-5ea0-413a-a26b-14d20b6db38a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-26 20:08:27 +0000 UTC FinishedAt: 2026-07-26 20:10:16 +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:*223e8391-2d4c-4dc6-83f5-a53aa67c0a15,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-workflow697kj/series-workflow697kj-build-action-808547580/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-workflow697kj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},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":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"1490e25f-5ea0-413a-a26b-14d20b6db38a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-26 20:10:33 +0000 UTC FinishedAt: 2026-07-26 20:10:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow697kj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},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":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"1490e25f-5ea0-413a-a26b-14d20b6db38a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10] Phase: Failed StartedAt: 2026-07-26 20:10:34 +0000 UTC FinishedAt: 2026-07-26 20:11:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow697kj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},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":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"1490e25f-5ea0-413a-a26b-14d20b6db38a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Failed StartedAt: 2026-07-26 20:10:34 +0000 UTC FinishedAt: 2026-07-26 20:11: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:*7ce79b99-f833-4004-a483-1c24b18350d2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*223e8391-2d4c-4dc6-83f5-a53aa67c0a15,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-workflow697kj/series-workflow697kj-build-action-1940386443/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-workflow697kj/series-workflow697kj-build-action-808547580/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow697kj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},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":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"1490e25f-5ea0-413a-a26b-14d20b6db38a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-26 20:10:34 +0000 UTC FinishedAt: 2026-07-26 20:11:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow697kj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},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":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"1490e25f-5ea0-413a-a26b-14d20b6db38a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-26 20:10:34 +0000 UTC FinishedAt: 2026-07-26 20:10:41 +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{},Result:nil,ExitCode:*0,} --------- Name: series-workflow697kj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},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":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"1490e25f-5ea0-413a-a26b-14d20b6db38a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-26 20:10:34 +0000 UTC FinishedAt: 2026-07-26 20:10:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow697kj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},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":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"1490e25f-5ea0-413a-a26b-14d20b6db38a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-26 20:10:35 +0000 UTC FinishedAt: 2026-07-26 20:10:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow697kj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},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":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211","MAC80211_HWSIM"],"series_id":"1490e25f-5ea0-413a-a26b-14d20b6db38a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Error StartedAt: 2026-07-26 20:11:25 +0000 UTC FinishedAt: 2026-07-26 20:11:26 +0000 UTC Input: nil Output: nil