Name: series-workflowpjt7d Phase: Succeeded StartedAt: 2026-08-18 06:46:50 +0000 UTC FinishedAt: 2026-08-18 10:32:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpjt7d[0] Phase: Succeeded StartedAt: 2026-08-18 06:46:50 +0000 UTC FinishedAt: 2026-08-18 06:51:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpjt7d[0].run-triage Phase: Succeeded StartedAt: 2026-08-18 06:46:50 +0000 UTC FinishedAt: 2026-08-18 06:51:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_CXACRU", "USB_ATM", "ATM", "USB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_CXACRU", "USB_ATM", "ATM", "USB" ], "series_id": "9792d684-e4c9-4baf-aac3-efd15773ba58" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "adsl_state_store", "adsl_config_store" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9DWEFDUlUmIzM0OywKICAgICYjMzQ7VVNCX0FUTSYjMzQ7LAogICAgJiMzNDtBVE0mIzM0OywKICAgICYjMzQ7VVNCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWRzbF9zdGF0ZV9zdG9yZSYjMzQ7LAogICAgJiMzNDthZHNsX2NvbmZpZ19zdG9yZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBOVUxMIHBvaW50ZXIgY2hlY2sgKGBpbnN0YW5jZS1cdTAwM2V1c2JhdG0tXHUwMDNlYXRtX2RldiA9PSBOVUxMYCkgaW4gYGFkc2xfc3RhdGVfc3RvcmVgIGFuZCBgYWRzbF9jb25maWdfc3RvcmVgIHRvIHByZXZlbnQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgbWVjaGFuaXNtcyBzdWNoIGFzIHBhZ2UgZmF1bHRzIGFuZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciB1c2VyLXNwYWNlIGNvcGllcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgTlVMTCBwb2ludGVyIGNoZWNrIGluIHRoZSBgYWRzbF9zdGF0ZV9zdG9yZWAgYW5kIGBhZHNsX2NvbmZpZ19zdG9yZWAgc3lzZnMgaGFuZGxlcnMgZm9yIHRoZSBjeGFjcnUgVVNCIEFUTSBkcml2ZXIuIFRoZXNlIGhhbmRsZXJzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIGNhbiBiZSBmdXp6ZWQgdmlhIHN5c2ZzIGFuZCBVU0IgZHVtbXlfaGNkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTE5MTE1YzExMTRlYWRjYmZjYTc5MmEzOWVlMTZhZTMzY2U1MjllNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDA2OjQ5OjI3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYyBiL2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1xuaW5kZXggNDI5YWMyMGE4OTk5Zi4uZGVlMTVmN2I3MGJmNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy91c2IvYXRtL2N4YWNydS5jXG5AQCAtMzQ3LDcgJiM0MzszNDcsNyBAQCBzdGF0aWMgc3NpemVfdCBhZHNsX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRyZXQgPSAwO1xuIFxuLVx0aWYgKGluc3RhbmNlID09IE5VTEwpXG4mIzQzO1x0aWYgKGluc3RhbmNlID09IE5VTEwgfHwgaW5zdGFuY2UtXHUwMDNldXNiYXRtLVx1MDAzZWF0bV9kZXYgPT0gTlVMTClcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXG4gXHRpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKFx1MDAyNmluc3RhbmNlLVx1MDAzZWFkc2xfc3RhdGVfc2VyaWFsaXplKSlcbkBAIC00NDQsNyAmIzQzOzQ0NCw3IEBAIHN0YXRpYyBzc2l6ZV90IGFkc2xfY29uZmlnX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbiBcdGlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSlcbiBcdFx0cmV0dXJuIC1FQUNDRVM7XG4gXG4tXHRpZiAoaW5zdGFuY2UgPT0gTlVMTClcbiYjNDM7XHRpZiAoaW5zdGFuY2UgPT0gTlVMTCB8fCBpbnN0YW5jZS1cdTAwM2V1c2JhdG0tXHUwMDNlYXRtX2RldiA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbiBcdHBvcyA9IDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9DWEFDUlUmIzM0OywKICAgICYjMzQ7VVNCX0FUTSYjMzQ7LAogICAgJiMzNDtBVE0mIzM0OywKICAgICYjMzQ7VVNCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWRzbF9zdGF0ZV9zdG9yZSYjMzQ7LAogICAgJiMzNDthZHNsX2NvbmZpZ19zdG9yZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgTlVMTCBwb2ludGVyIGNoZWNrIGluIHRoZSBgYWRzbF9zdGF0ZV9zdG9yZWAgYW5kIGBhZHNsX2NvbmZpZ19zdG9yZWAgc3lzZnMgaGFuZGxlcnMgZm9yIHRoZSBjeGFjcnUgVVNCIEFUTSBkcml2ZXIuIFRoZXNlIGhhbmRsZXJzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIGNhbiBiZSBmdXp6ZWQgdmlhIHN5c2ZzIGFuZCBVU0IgZHVtbXlfaGNkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTE5MTE1YzExMTRlYWRjYmZjYTc5MmEzOWVlMTZhZTMzY2U1MjllNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDE4IDA2OjQ5OjI3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvYXRtL2N4YWNydS5jIGIvZHJpdmVycy91c2IvYXRtL2N4YWNydS5jCmluZGV4IDQyOWFjMjBhODk5OWYuLmRlZTE1ZjdiNzBiZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMKQEAgLTM0Nyw3ICYjNDM7MzQ3LDcgQEAgc3RhdGljIHNzaXplX3QgYWRzbF9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCXJldHVybiAtRUlOVkFMOwogCXJldCA9IDA7CiAKLQlpZiAoaW5zdGFuY2UgPT0gTlVMTCkKJiM0MzsJaWYgKGluc3RhbmNlID09IE5VTEwgfHwgaW5zdGFuY2UtJmd0O3VzYmF0bS0mZ3Q7YXRtX2RldiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmFtcDtpbnN0YW5jZS0mZ3Q7YWRzbF9zdGF0ZV9zZXJpYWxpemUpKQpAQCAtNDQ0LDcgJiM0Mzs0NDQsNyBAQCBzdGF0aWMgc3NpemVfdCBhZHNsX2NvbmZpZ19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQogCQlyZXR1cm4gLUVBQ0NFUzsKIAotCWlmIChpbnN0YW5jZSA9PSBOVUxMKQomIzQzOwlpZiAoaW5zdGFuY2UgPT0gTlVMTCB8fCBpbnN0YW5jZS0mZ3Q7dXNiYXRtLSZndDthdG1fZGV2ID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwogCiAJcG9zID0gMDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA4NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDExOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBVU0IgQVRNIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHRvdWNoZXMgYGRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY2AuIFNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyBhIGNoZWNrOiBgfHwgaW5zdGFuY2UtJmd0O3VzYmF0bS0mZ3Q7YXRtX2RldiA9PSBOVUxMYCBpbiB0aGUgYGFkc2xfc3RhdGVfc3RvcmVgIGFuZCBgYWRzbF9jb25maWdfc3RvcmVgIGZ1bmN0aW9ucy4gSG1tLCB0aGVzZSBhcmUgc3lzZnMgc3RvcmUgZnVuY3Rpb25zIGZvciBhIFVTQiBBVE0gZHJpdmVyLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gTXkgaW5zdGluY3QgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgbmV3IGNvbmRpdGlvbmFsIGlzIHJlYWNoYWJsZSBhbmQsIGNydWNpYWxseSwgaWYgaXQgb3BlbnMgdXAgYSBmdXp6aW5nIG9wcG9ydHVuaXR5LiBVU0IgQVRNIGRyaXZlcnMgYXJlIGNlcnRhaW5seSB3aXRoaW4gbXkgYXJlYSBvZiBleHBlcnRpc2UuCgpUaGUgZmFjdCB0aGF0IHRoaXMgaW52b2x2ZXMgYSBVU0IgQVRNIGRyaXZlciBtYWtlcyBtZSB0aGluayBhYm91dCBmdXp6aW5nIHVzaW5nIGEgVVNCIGdhZGdldC9kdW1teV9oY2Qgc2V0dXAuIFRoaXMgaXMgYSBjb21tb24gYW5kIGVmZmVjdGl2ZSBhcHByb2FjaC4gU28sIHRoZSBuZXh0IHN0ZXAgaXMgdG8gcmVhbGx5IGRpZyBpbnRvIGBkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmNgIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlc2UgYGFkc2xfc3RhdGVfc3RvcmVgIGFuZCBgYWRzbF9jb25maWdfc3RvcmVgIGZ1bmN0aW9ucywgc2VlIGhvdyB0aGUgYGluc3RhbmNlYCBzdHJ1Y3QgaXMgcG9wdWxhdGVkLCBhbmQgZmlndXJlIG91dCB1bmRlciB3aGF0IGNvbmRpdGlvbnMgYGluc3RhbmNlLSZndDt1c2JhdG0tJmd0O2F0bV9kZXZgIG1pZ2h0IGJlIE5VTEwuIFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSwgYW5kIG1vcmUgaW1wb3J0YW50bHksIGhvdyB0byB0cmlnZ2VyIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fkc2xfc3RhdGVfc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTMxNT1zdGF0aWMgc3NpemVfdCBhZHNsX3N0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zMzEtXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MzMyOnN0YXRpYyBzc2l6ZV90IGFkc2xfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTMzMy1cdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjQ0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uIGZvciBjeGFjcnUuYyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgdGhlIGNvbXBpbGF0aW9uIG9yIGxpbmtpbmcgb2YgYGN4YWNydS5jYC4gVGhpcyBpc24mIzM5O3QganVzdCBhIGNhc3VhbCBjdXJpb3NpdHk7IGtub3dpbmcgdGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBidWlsZCBzeXN0ZW0mIzM5O3MgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWxseSBtb2RpZnlpbmcgaXRzIGJlaGF2aW9yLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhlIG1ha2VmaWxlcywgaWYgdGhleSYjMzk7cmUgc3RhbmRhcmQgZm9yIHRoaXMgcHJvamVjdC4gVGhleSB1c3VhbGx5IGNvbnRhaW4gdGhlIGJ1aWxkIGxvZ2ljLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIHdoYXQgdmFyaWFibGVzIG9yIGZsYWdzIGFyZSBzZXQgdGhhdCBjb250cm9sIHRoZSBpbmNsdXNpb24gb2YgdGhpcyBzb3VyY2UgZmlsZS4KCklmIGl0JiMzOTtzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzIGluIHRoZSBtYWtlZmlsZXMsIEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoZSBidWlsZCBzeXN0ZW0gaXMgc3RydWN0dXJlZC4gQXJlIHRoZXJlIGFueSBjb25maWd1cmF0aW9uIHNjcmlwdHMgdGhhdCBnZW5lcmF0ZSB0aGUgbWFrZWZpbGVzPyBJZiBzbywgdGhvc2UgYXJlIHRoZSByZWFsIGtleS4gSSBuZWVkIHRvIHRyYWNlIHRoZSB2YXJpYWJsZXMgYmFjayB0byB0aGVpciBkZWZpbml0aW9ucy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZmxhZ3MgKGAjaWZkZWZgLCBgLURgKSwgaW5jbHVzaW9uIG9mIHNvdXJjZSBmaWxlcyBiYXNlZCBvbiBmZWF0dXJlIGZsYWdzLCBvciBzcGVjaWZpYyB0YXJnZXRzIHRoYXQgaW5jbHVkZSBgY3hhY3J1LmNgIGFzIGEgZGVwZW5kZW5jeS4KClRoaXMgY291bGQgcmFuZ2UgZnJvbSBhIHNpbXBsZSBgaWZlcWAgc3RhdGVtZW50IHRvIGEgbW9yZSBpbnRyaWNhdGUgY2FzY2FkZSBvZiBpbmNsdWRlcyBhbmQgdmFyaWFibGUgYXNzaWdubWVudHMuIEkmIzM5O2xsIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIGNvbXBsZXhpdHkgb2YgdGhlIGJ1aWxkIHN5c3RlbSBhbmQgY2hvb3NlIHRoZSBtb3N0IGVmZmVjdGl2ZSBzZWFyY2ggc3RyYXRlZ3kuIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgb3IgdGFyZ2V0cy4gVGltZSB0byBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y3hhY3J1Lm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL01ha2VmaWxlLTQtI1xuZHJpdmVycy91c2IvYXRtL01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX1VTQl9DWEFDUlUpXHQmIzQzOz0gY3hhY3J1Lm9cbmRyaXZlcnMvdXNiL2F0bS9NYWtlZmlsZS02LW9iai0kKENPTkZJR19VU0JfU1BFRURUT1VDSClcdCYjNDM7PSBzcGVlZHRjaC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA3NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipDaGVja2luZyB0aGUgVVNCIENYQUNSVSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgc3RhdHVzIG9mIGBDT05GSUdfVVNCX0NYQUNSVWAuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZ29pbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSDigJMgdGhlIGBLY29uZmlnYCBmaWxlIHdpdGhpbiB0aGUgVVNCIEFUTSBkcml2ZXIgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIGBkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZ2AuIFRoaXMgc2hvdWxkIGJlIGEgc3RyYWlnaHRmb3J3YXJkIGNoZWNrLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBpZiBpdCYjMzk7cyBkZWZpbmVkLCBpZiBpdCYjMzk7cyB0cmlzdGF0ZWQsIGFuZCBhbnkgZGVwZW5kZW5jaWVzIG9yIGRlZmF1bHQgdmFsdWVzLiBLbm93aW5nIHRoZSBjb250ZXh0IHdpdGhpbiB0aGUgYEtjb25maWdgIGlzIGNydWNpYWwsIGVzcGVjaWFsbHkgcmVnYXJkaW5nIGl0cyBsb2NhdGlvbiB3aXRoaW4gdGhlIHNvdXJjZSB0cmVlLiBUaGlzIHVzdWFsbHkgaGVscHMgbWUgdW5kZXJzdGFuZCB3aGljaCBvdGhlciByZWxhdGVkIG9wdGlvbnMgb3IgZHJpdmVycyBtaWdodCBiZSByZWxldmFudC4gRXNzZW50aWFsbHksIEkmIzM5O20gdHJ5aW5nIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHdoZXJlIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gc3RhbmRzIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFVTQl9DWEFDUlUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZz0yMD1jb25maWcgVVNCX1NQRUVEVE9VQ0hcbi0tXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy0zMS1cbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnOjMyOmNvbmZpZyBVU0JfQ1hBQ1JVXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy0zMy1cdHRyaXN0YXRlIFwmIzM0O0NvbmV4YW50IEFjY2Vzc1J1bm5lciBVU0Igc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzOTQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIERlcGVuZGVuY2llcyoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhdCBwbGF5IGhlcmUuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYWJvdXQgaWRlbnRpZnlpbmcgdGhlIGRpcmVjdCByZWxhdGlvbnNoaXBzOyBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgY2hhbmdlcyBvciBmYWlsdXJlcyB3aXRoaW4gdGhvc2UgZGVwZW5kZW50IGNvbXBvbmVudHMuIEkmIzM5O20gYWxyZWFkeSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgYm90dGxlbmVja3MsIHNpbmdsZSBwb2ludHMgb2YgZmFpbHVyZSwgYW5kIHRoZSBjYXNjYWRpbmcgZWZmZWN0cyBhIHByb2JsZW0gaW4gb25lIGFyZWEgY291bGQgdHJpZ2dlciBhY3Jvc3MgdGhlIHN5c3RlbS4gSXQmIzM5O3MgYWJvdXQgYnVpbGRpbmcgYSBtZW50YWwgbWFwIG9mIHRoZSBzeXN0ZW0mIzM5O3MgYXJjaGl0ZWN0dXJlIGFuZCBwaW5wb2ludGluZyB0aGUgY3JpdGljYWwgcGF0aHdheXMuIEkmIzM5O20gbWVudGFsbHkgcGFyc2luZyB0aGUgY29kZSwgbGlicmFyeSB2ZXJzaW9ucywgYW5kIGV4dGVybmFsIHNlcnZpY2VzIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0aGlzIHRoaW5nIGxlYW5zIG9uIGFuZCBob3cgcm9idXN0IChvciBmcmFnaWxlKSB0aG9zZSBsaW5rcyBhcmUuIEVzc2VudGlhbGx5LCBJJiMzOTttIHRyeWluZyB0byBpZGVudGlmeSB0aGUgd2VhayBsaW5rcyBhbmQgYW50aWNpcGF0ZSB3aGVyZSBwcm9ibGVtcyBtaWdodCBhcmlzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9LY29uZmlnPTY9bWVudWNvbmZpZyBVU0JfQVRNXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7VVNCIERTTCBtb2RlbSBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZzo4Olx0ZGVwZW5kcyBvbiBBVE1cbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTktXHRzZWxlY3QgQ1JDMzJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcwMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIFVTQi1BVE0gRGVwZW5kZW5jaWVzIGluIHRoZSBLZXJuZWwgQ29uZmlnKioKClJpZ2h0LCBsZXQgbWUgc2VlLi4uIEkmIzM5O20gbG9va2luZyBhdCBgVVNCX0NYQUNSVWAuIFRoZSBidWlsZCBzeXN0ZW0gaXMgZmxhZ2dpbmcgaXQsIGFuZCB0aGUgZGVwZW5kZW5jeSBjaGFpbiBpcyBtYWtpbmcgbWUgdGhpbmsuIE9rYXksIHNvIGBVU0JfQ1hBQ1JVYCBsZWFucyBvbiBgVVNCX0FUTWAsIHdoaWNoLCB1bnN1cnByaXNpbmdseSwgZGVwZW5kcyBvbiBgQVRNYCBpdHNlbGYuIFRoYXQmIzM5O3MgYWxsIGxvZ2ljYWwgc28gZmFyLiBOb3cgdGhlIGNyaXRpY2FsIGJpdDogSSYjMzk7bSBwcmV0dHkgc3VyZSBgVVNCX0NYQUNSVWAgaXMgbmVzdGVkICppbnNpZGUqIHRoZSBgbWVudWNvbmZpZ2Agb3B0aW9uIGZvciBgVVNCX0FUTWAuIEJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGF0LiBMZXQmIzM5O3Mgbm90IG1ha2UgYXNzdW1wdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgdGhlIFVTQiBBVE0gZHJpdmVycy4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYGRyaXZlcnMvdXNiL2F0bS9LY29uZmlnYCB0byB2ZXJpZnkgdGhlIGV4YWN0IGNvbmZpZyBzdHJ1Y3R1cmUgYW5kIGl0cyBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoaXMgY2xlYXJseSBiZWZvcmUgSSBtYWtlIGFueSBtb2RpZmljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIFVTQi9BVE0gRFNMIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0bWVudWNvbmZpZyBVU0JfQVRNXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtVU0IgRFNMIG1vZGVtIHN1cHBvcnRcJiMzNDtcbiAgIDg6XHRcdGRlcGVuZHMgb24gQVRNXG4gICA5Olx0XHRzZWxlY3QgQ1JDMzJcbiAgMTA6XHRcdGhlbHBcbiAgMTE6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IGEgVVNCIERpZ2l0YWwgU3Vic2NyaWJlciBMaW5lIChEU0wpXG4gIDEyOlx0XHQgIG1vZGVtIHRvIHlvdXIgY29tcHV0ZXImIzM5O3MgVVNCIHBvcnQuICBZb3Ugd2lsbCB0aGVuIG5lZWQgdG8gY2hvb3NlIHlvdXJcbiAgMTM6XHRcdCAgbW9kZW0gZnJvbSB0aGUgbGlzdCBiZWxvdy5cbiAgMTQ6XHRcbiAgMTU6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gIDE2Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1c2JhdG0uXG4gIDE3Olx0XG4gIDE4Olx0aWYgVVNCX0FUTVxuICAxOTpcdFxuICAyMDpcdGNvbmZpZyBVU0JfU1BFRURUT1VDSFxuICAyMTpcdFx0dHJpc3RhdGUgXCYjMzQ7U3BlZWR0b3VjaCBVU0Igc3VwcG9ydFwmIzM0O1xuICAyMjpcdFx0c2VsZWN0IEZXX0xPQURFUlxuICAyMzpcdFx0aGVscFxuICAyNDpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGFuIFNwZWVkVG91Y2ggVVNCIG9yIFNwZWVkVG91Y2ggMzMwXG4gIDI1Olx0XHQgIG1vZGVtLiAgSW4gb3JkZXIgdG8gdXNlIHlvdXIgbW9kZW0geW91IHdpbGwgbmVlZCB0byBpbnN0YWxsIHRoZSBcbiAgMjY6XHRcdCAgdHdvIHBhcnRzIG9mIHRoZSBmaXJtd2FyZSwgZXh0cmFjdGVkIGJ5IHRoZSB1c2VyIHNwYWNlIHRvb2xzOyBzZWVcbiAgMjc6XHRcdCAgXHUwMDNjaHR0cDovL3d3dy5saW51eC11c2Iub3JnL1NwZWVkVG91Y2gvXHUwMDNlIGZvciBkZXRhaWxzLlxuICAyODpcdFxuICAyOTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAgMzA6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNwZWVkdGNoLlxuICAzMTpcdFxuICAzMjpcdGNvbmZpZyBVU0JfQ1hBQ1JVXG4gIDMzOlx0XHR0cmlzdGF0ZSBcJiMzNDtDb25leGFudCBBY2Nlc3NSdW5uZXIgVVNCIHN1cHBvcnRcJiMzNDtcbiAgMzQ6XHRcdHNlbGVjdCBGV19MT0FERVJcbiAgMzU6XHRcdGhlbHBcbiAgMzY6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhbiBBRFNMIFVTQiBtb2RlbSBiYXNlZCBvbiB0aGUgQ29uZXhhbnRcbiAgMzc6XHRcdCAgQWNjZXNzUnVubmVyIGNoaXBzZXQuICBJbiBvcmRlciB0byB1c2UgeW91ciBtb2RlbSB5b3Ugd2lsbCBuZWVkIHRvXG4gIDM4Olx0XHQgIGluc3RhbGwgdGhlIGZpcm13YXJlLCBleHRyYWN0ZWQgYnkgdGhlIHVzZXIgc3BhY2UgdG9vbHM7IHNlZVxuICAzOTpcdFx0ICBcdTAwM2NodHRwOi8vYWNjZXNzcnVubmVyLnNvdXJjZWZvcmdlLm5ldC9cdTAwM2UgZm9yIGRldGFpbHMuXG4gIDQwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NTcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBVU0IgRHJpdmVycyBhbmQgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGRyaXZlciBzaXR1YXRpb24sIGFuZCBpdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGF0IGZpcnN0IGdsYW5jZS4gV2UgZGVmaW5pdGVseSBuZWVkIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgYm90aCBgVVNCX0FUTWAgYW5kIGBVU0JfQ1hBQ1JVYCBkcml2ZXJzLiBObyBzdXJwcmlzZXMgdGhlcmUuIE5vdywgdGhlIGtleSBpcyB0aGUgZGVwZW5kZW5jeS4gSSByZW1lbWJlciBgVVNCX0FUTWAgcmVsaWVzIG9uIGBBVE1gLCBzbyB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0JiMzOTtzIGhhbmRsZWQgY29ycmVjdGx5IGluIHRoZSBjb25maWd1cmF0aW9uLiBUaGF0IG1ha2VzIHNlbnNlLCBjb21tb24gYXJjaGl0ZWN0dXJlLiBOb3csIGJlZm9yZSBJIHByb2NlZWQgSSByZWFsbHkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYEFUTWAgaXRzZWxmIGhhcyBhbnkgZnVydGhlciB1cHN0cmVhbSBkZXBlbmRlbmNpZXMuIEkgYmV0dGVyIGdvIGFuZCBjaGVjayBpdCYjMzk7cyBkZXBlbmRlbmNpZXMgc28gSSBkb24mIzM5O3QgbWlzcyBzb21ldGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBVE0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYXRtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2F0bS9LY29uZmlnLTUtXG5uZXQvYXRtL0tjb25maWc6Njpjb25maWcgQVRNXG5uZXQvYXRtL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O0FzeW5jaHJvbm91cyBUcmFuc2ZlciBNb2RlIChBVE0pXCYjMzQ7XG4tLVxubmV0L2F0bS9LY29uZmlnLTIxLVxubmV0L2F0bS9LY29uZmlnOjIyOmNvbmZpZyBBVE1fQlIyNjg0XG5uZXQvYXRtL0tjb25maWctMjMtXHR0cmlzdGF0ZSBcJiMzNDtSRkMxNDgzLzI2ODQgQnJpZGdlZCBwcm90b2NvbHNcJiMzNDtcbi0tXG5uZXQvYXRtL0tjb25maWctMzAtXG5uZXQvYXRtL0tjb25maWc6MzE6Y29uZmlnIEFUTV9CUjI2ODRfSVBGSUxURVJcbm5ldC9hdG0vS2NvbmZpZy0zMi1cdGJvb2wgXCYjMzQ7UGVyLVZDIElQIGZpbHRlciBrbHVkZ2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkzNwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQVRNIENvbmZpZ3VyYXRpb246IEEgUXVpY2sgU2NhbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7V2hlcmUgd291bGQgdGhlIEFUTSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYmU/JiMzNDsgR2l2ZW4gdGhlIHN0cnVjdHVyZSBJJiMzOTttIGZhbWlsaWFyIHdpdGgsIGBuZXQvYCBmZWVscyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIFNwZWNpZmljYWxseSwgYG5ldC9hdG0vYCBqdW1wcyBvdXQgYXMgdGhlIG1vc3QgbGlrZWx5IHN1YmRpcmVjdG9yeS4gU28sIG15IG1lbnRhbCBwcm9jZXNzIGlzIGxlYWRpbmcgbWUgZGlyZWN0bHkgdG8gYG5ldC9hdG0vS2NvbmZpZ2AuIFRoYXQgZmlsZSBpcyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBBVE0tcmVsYXRlZCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJdCYjMzk7cyB0aGUgc3RhbmRhcmQgbG9jYXRpb24gZm9yIG1hbmFnaW5nIGRlcGVuZGVuY2llcyBhbmQgc2VsZWN0aW5nIGJ1aWxkIG9wdGlvbnMgd2l0aGluIHRoYXQgcGFydCBvZiB0aGUga2VybmVsIHRyZWUuIEEgcXVpY2sgY2hlY2sgb2YgdGhhdCBmaWxlIHNob3VsZCBnaXZlIG1lIGEgcHJldHR5IGNsZWFyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2F0bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgQXN5bmNocm9ub3VzIFRyYW5zZmVyIE1vZGUgKEFUTSlcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIEFUTVxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7QXN5bmNocm9ub3VzIFRyYW5zZmVyIE1vZGUgKEFUTSlcJiMzNDtcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgQVRNIGlzIGEgaGlnaC1zcGVlZCBuZXR3b3JraW5nIHRlY2hub2xvZ3kgZm9yIExvY2FsIEFyZWEgTmV0d29ya3NcbiAgMTA6XHRcdCAgYW5kIFdpZGUgQXJlYSBOZXR3b3Jrcy4gIEl0IHVzZXMgYSBmaXhlZCBwYWNrZXQgc2l6ZSBhbmQgaXNcbiAgMTE6XHRcdCAgY29ubmVjdGlvbiBvcmllbnRlZCwgYWxsb3dpbmcgZm9yIHRoZSBuZWdvdGlhdGlvbiBvZiBtaW5pbXVtXG4gIDEyOlx0XHQgIGJhbmR3aWR0aCByZXF1aXJlbWVudHMuXG4gIDEzOlx0XG4gIDE0Olx0XHQgIEluIG9yZGVyIHRvIHBhcnRpY2lwYXRlIGluIGFuIEFUTSBuZXR3b3JrLCB5b3VyIExpbnV4IGJveCBuZWVkcyBhblxuICAxNTpcdFx0ICBBVE0gbmV0d29ya2luZyBjYXJkLiBJZiB5b3UgaGF2ZSB0aGF0LCBzYXkgWSBoZXJlIGFuZCB0byB0aGUgZHJpdmVyXG4gIDE2Olx0XHQgIG9mIHlvdXIgQVRNIGNhcmQgYmVsb3cuXG4gIDE3Olx0XG4gIDE4Olx0XHQgIE5vdGUgdGhhdCB5b3UgbmVlZCBhIHNldCBvZiB1c2VyLXNwYWNlIHByb2dyYW1zIHRvIGFjdHVhbGx5IG1ha2UgdXNlXG4gIDE5Olx0XHQgIG9mIEFUTS4gIFNlZSB0aGUgZmlsZSBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hdG0ucnN0XHUwMDNlIGZvclxuICAyMDpcdFx0ICBmdXJ0aGVyIGRldGFpbHMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MzAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOgoKKipBbmFseXppbmcgdGhlIEFUTSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgZmlyc3QgdGhpbmcsIGBBVE1gIGhhcyBubyBsaXN0ZWQgZGVwZW5kZW5jaWVzLCB3aGljaCBpcyBnb29kLiBUaGF0IG1ha2VzIGl0IGVhc2llciB0byBldmFsdWF0ZSBpbiBpc29sYXRpb24uIE5vdywgdGhlIG1lYXQgb2YgdGhlIGZpeCBpcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYWRzbF9zdGF0ZV9zdG9yZWAgYW5kIGBhZHNsX2NvbmZpZ19zdG9yZWAuIFRob3NlIGFyZSBzeXNmcyBzdG9yZSBmdW5jdGlvbnMsIHdoaWNoIHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc29tZSBraW5kIG9mIGNvbmZpZ3VyYXRpb24gb3Igc3RhdGUgcGVyc2lzdGVuY2UgbWVjaGFuaXNtLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHdoZXJlIHRob3NlIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQsIHNvIGxldCYjMzk7cyBjaGVjayBgZHJpdmVycy91c2IvYXRtL2N4YWNydS5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSB2dWxuZXJhYmxlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL2N4YWNydS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMzA6XHR9XG4gMzMxOlx0XG4gMzMyOlx0c3RhdGljIHNzaXplX3QgYWRzbF9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gMzMzOlx0XHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4gMzM0Olx0e1xuIDMzNTpcdFx0c3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSA9IHRvX3VzYmF0bV9kcml2ZXJfZGF0YShcbiAzMzY6XHRcdFx0XHR0b191c2JfaW50ZXJmYWNlKGRldikpO1xuIDMzNzpcdFx0aW50IHJldDtcbiAzMzg6XHRcdGludCBwb2xsID0gLTE7XG4gMzM5Olx0XHRjaGFyIHN0cl9jbWRbOF07XG4gMzQwOlx0XHRpbnQgbGVuID0gc3RybGVuKGJ1Zik7XG4gMzQxOlx0XG4gMzQyOlx0XHRpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpXG4gMzQzOlx0XHRcdHJldHVybiAtRUFDQ0VTO1xuIDM0NDpcdFxuIDM0NTpcdFx0cmV0ID0gc3NjYW5mKGJ1ZiwgXCYjMzQ7JTdzXCYjMzQ7LCBzdHJfY21kKTtcbiAzNDY6XHRcdGlmIChyZXQgIT0gMSlcbiAzNDc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMzQ4Olx0XHRyZXQgPSAwO1xuIDM0OTpcdFxuIDM1MDpcdFx0aWYgKGluc3RhbmNlID09IE5VTEwgfHwgaW5zdGFuY2UtXHUwMDNldXNiYXRtLVx1MDAzZWF0bV9kZXYgPT0gTlVMTClcbiAzNTE6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4gMzUyOlx0XG4gMzUzOlx0XHRpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKFx1MDAyNmluc3RhbmNlLVx1MDAzZWFkc2xfc3RhdGVfc2VyaWFsaXplKSlcbiAzNTQ6XHRcdFx0cmV0dXJuIC1FUkVTVEFSVFNZUztcbiAzNTU6XHRcbiAzNTY6XHRcdGlmICghc3RyY21wKHN0cl9jbWQsIFwmIzM0O3N0b3BcJiMzNDspIHx8ICFzdHJjbXAoc3RyX2NtZCwgXCYjMzQ7cmVzdGFydFwmIzM0OykpIHtcbiAzNTc6XHRcdFx0cmV0ID0gY3hhY3J1X2NtKGluc3RhbmNlLCBDTV9SRVFVRVNUX0NISVBfQURTTF9MSU5FX1NUT1AsIE5VTEwsIDAsIE5VTEwsIDApO1xuIDM1ODpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gMzU5Olx0XHRcdFx0YXRtX2VycihpbnN0YW5jZS1cdTAwM2V1c2JhdG0sIFwmIzM0O2NoYW5nZSBhZHNsIHN0YXRlOlwmIzM0O1xuIDM2MDpcdFx0XHRcdFx0XCYjMzQ7IENISVBfQURTTF9MSU5FX1NUT1AgcmV0dXJuZWQgJWRcXG5cJiMzNDssIHJldCk7XG4gMzYxOlx0XG4gMzYyOlx0XHRcdFx0cmV0ID0gLUVJTztcbiAzNjM6XHRcdFx0fSBlbHNlIHtcbiAzNjQ6XHRcdFx0XHRyZXQgPSBsZW47XG4gMzY1Olx0XHRcdFx0cG9sbCA9IENYUE9MTF9TVE9QUEVEO1xuIDM2NjpcdFx0XHR9XG4gMzY3Olx0XHR9XG4gMzY4Olx0XG4gMzY5Olx0XHQvKiBMaW5lIHN0YXR1cyBpcyBvbmx5IHVwZGF0ZWQgZXZlcnkgc2Vjb25kXG4gMzcwOlx0XHQgKiBhbmQgdGhlIGRldmljZSBhcHBlYXJzIHRvIG9ubHkgcmVhY3QgdG9cbiAzNzE6XHRcdCAqIFNUQVJUL1NUT1AgZXZlcnkgc2Vjb25kIHRvby4gV2FpdCAxLjVzIHRvXG4gMzcyOlx0XHQgKiBiZSBzdXJlIHRoYXQgcmVzdGFydCB3aWxsIGhhdmUgYW4gZWZmZWN0LiAqL1xuIDM3MzpcdFx0aWYgKCFzdHJjbXAoc3RyX2NtZCwgXCYjMzQ7cmVzdGFydFwmIzM0OykpXG4gMzc0Olx0XHRcdG1zbGVlcCgxNTAwKTtcbiAzNzU6XHRcbiAzNzY6XHRcdGlmICghc3RyY21wKHN0cl9jbWQsIFwmIzM0O3N0YXJ0XCYjMzQ7KSB8fCAhc3RyY21wKHN0cl9jbWQsIFwmIzM0O3Jlc3RhcnRcJiMzNDspKSB7XG4gMzc3Olx0XHRcdHJldCA9IGN4YWNydV9jbShpbnN0YW5jZSwgQ01fUkVRVUVTVF9DSElQX0FEU0xfTElORV9TVEFSVCwgTlVMTCwgMCwgTlVMTCwgMCk7XG4gMzc4Olx0XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiAzNzk6XHRcdFx0XHRhdG1fZXJyKGluc3RhbmNlLVx1MDAzZXVzYmF0bSwgXCYjMzQ7Y2hhbmdlIGFkc2wgc3RhdGU6XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1MjEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU3lzZnMgU3RvcmUgRnVuY3Rpb24gZm9yIFZ1bG5lcmFiaWxpdGllcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBpdCYjMzk7cyBhIHN5c2ZzIHN0b3JlIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGEgcmVkIGZsYWcg4oCTIHN5c2ZzIGVudHJpZXMgYXJlIHVzZXItYWNjZXNzaWJsZSwgd2hpY2ggbWVhbnMgdGhleSYjMzk7cmUgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cy4gQW5kLCB5ZXMsIEkgcmVjYWxsIHN5emthbGxlciBhY3RpdmVseSB0YXJnZXRzIHN5c2ZzIGVudHJpZXMuIFRoaXMgcGFydGljdWxhciBkZXZpY2UgaXMgVVNCLCB3aGljaCBpcyBnb29kLiBUaGF0IG1lYW5zIEkgY2FuIHBvdGVudGlhbGx5IGVtdWxhdGUgaXQgdXNpbmcgVVNCIGR1bW15X2hjZCBmb3IgdGVzdGluZy4KClRoZSBwYXRjaCBpdHNlbGYgaW50cm9kdWNlcyBhIGNoZWNrIGZvciBgaW5zdGFuY2UtJmd0O3VzYmF0bS0mZ3Q7YXRtX2RldiA9PSBOVUxMYC4gSW50ZXJlc3RpbmcuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCBvZiB0aGF0IGNoZWNrLiBUaGUgbWVhdCBvZiB0aGUgcGF0Y2ggc2VlbXMgdG8gY2VudGVyIGFyb3VuZCBgYWRzbF9zdGF0ZV9zdG9yZWAgYW5kIGBhZHNsX2NvbmZpZ19zdG9yZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aG9zZSBhcmUgdGhlIGZ1bmN0aW9ucyB0byBmb2N1cyBvbi4gV2FpdCBhIG1pbnV0ZS4uLiAqc3RhdGljKj8gT2theSwgdGhhdCBjaGFuZ2VzIHRoaW5ncy4gU3RhdGljIGZ1bmN0aW9ucyBjYW4gc3RpbGwgYmUgY2FsbGVkIGZyb20gb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIGJ1dCBhcmUgbGlrZWx5IG5vdCBjYWxsZWQgZGlyZWN0bHkgdGhyb3VnaCB0aGUgc3lzZnMgZW50cnkuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGJhY2suIExldCYjMzk7cyBzZWUgaWYgdGhleSBhcmUgdXNlZCB3aXRoaW4gc29tZSBtYWNyby4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBpbmRpY2F0b3Igb2YgaG93IGFuZCB3aGVyZSB0aGV5IGFyZSBjYWxsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fkc2xfc3RhdGVfc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTMxNT1zdGF0aWMgc3NpemVfdCBhZHNsX3N0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zMzEtXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MzMyOnN0YXRpYyBzc2l6ZV90IGFkc2xfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTMzMy1cdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA3NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlLCB0YWlsb3JlZCBmb3IgYW5vdGhlciBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgQURTTCBTdGF0ZSBNYW5hZ2VtZW50KioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdlJiMzOTtyZSBoYW5kbGluZyBBRFNMIHN0YXRlIOKAkyBib3RoIGRpc3BsYXlpbmcgaXQgYW5kIHBlcnNpc3RpbmcgaXQuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gcGlucG9pbnRpbmcgdGhlIGNvZGUgcmVzcG9uc2libGUgZm9yIHRoZXNlIG9wZXJhdGlvbnMuIFNvLCBJJiMzOTttIHRoaW5raW5nLCBsZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIHRhcmdldGVkIHNlYXJjaC4gSSYjMzk7bGwgYmVnaW4gYnkgbG9va2luZyBmb3IgdXNhZ2VzIG9mIGZ1bmN0aW9ucyBvciBtZXRob2RzIHRoYXQgbGlrZWx5IGRlYWwgd2l0aCBzaG93aW5nIHRoZSBBRFNMIHN0YXRlLCBwZXJoYXBzIHNvbWV0aGluZyBuYW1lZCBgYWRzbF9zdGF0ZV9zaG93YC4gVGhlbiwgSSYjMzk7bGwgbW92ZSBvbiB0byB0aG9zZSBpbnZvbHZlZCBpbiBzdG9yaW5nIHRoYXQgc3RhdGUsIGxpa2UgYGFkc2xfc3RhdGVfc3RvcmVgLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBqdW1waW5nLW9mZiBwb2ludCB0byBleHBsb3JlIHRoZSByZWxldmFudCBtb2R1bGVzIGFuZCB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGZsb3cuIEtub3dpbmcgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgKnVzZWQqIGlzIGtleSwgbm90IGp1c3Qgd2hlcmUgdGhleSYjMzk7cmUgZGVmaW5lZC4gVGhhdOKAmXMgd2hlcmUgdGhlIHJlYWwgaW5zaWdodHMgYXJlLiBUaGlzIGFwcHJvYWNoIHR5cGljYWxseSBnZXRzIG1lIHRvIHdoZXJlIEkgbmVlZCB0byBiZSBwcmV0dHkgcXVpY2tseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWRzbF9zdGF0ZV8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTE3MD1zdHJ1Y3QgY3hhY3J1X2RhdGEge1xuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xNzUtXHRpbnQgbGluZV9zdGF0dXM7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTc2Olx0c3RydWN0IG11dGV4IGFkc2xfc3RhdGVfc2VyaWFsaXplO1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTE3Ny1cdGludCBhZHNsX3N0YXR1cztcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9MzAzPXN0YXRpYyBzc2l6ZV90IG1hY19hZGRyZXNzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zMTQtXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MzE1OnN0YXRpYyBzc2l6ZV90IGFkc2xfc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzE2LVx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zilcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzMxLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjMzMjpzdGF0aWMgc3NpemVfdCBhZHNsX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zMzMtXHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTM1Mi1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzozNTM6XHRpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKFx1MDAyNmluc3RhbmNlLVx1MDAzZWFkc2xfc3RhdGVfc2VyaWFsaXplKSlcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zNTQtXHRcdHJldHVybiAtRVJFU1RBUlRTWVM7XG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTQyNC1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo0MjU6XHRtdXRleF91bmxvY2soXHUwMDI2aW5zdGFuY2UtXHUwMDNlYWRzbF9zdGF0ZV9zZXJpYWxpemUpO1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTQyNi1cbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9NzcxPXN0YXRpYyBpbnQgY3hhY3J1X2F0bV9zdGFydChzdHJ1Y3QgdXNiYXRtX2RhdGEgKnVzYmF0bV9pbnN0YW5jZSxcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzg5LVx0Lyogc3RhcnQgQURTTCAqL1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjc5MDpcdG11dGV4X2xvY2soXHUwMDI2aW5zdGFuY2UtXHUwMDNlYWRzbF9zdGF0ZV9zZXJpYWxpemUpO1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc5MS1cdHJldCA9IGN4YWNydV9jbShpbnN0YW5jZSwgQ01fUkVRVUVTVF9DSElQX0FEU0xfTElORV9TVEFSVCwgTlVMTCwgMCwgTlVMTCwgMCk7XG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTgxMi1cdG11dGV4X3VubG9jayhcdTAwMjZpbnN0YW5jZS1cdTAwM2Vwb2xsX3N0YXRlX3NlcmlhbGl6ZSk7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6ODEzOlx0bXV0ZXhfdW5sb2NrKFx1MDAyNmluc3RhbmNlLVx1MDAzZWFkc2xfc3RhdGVfc2VyaWFsaXplKTtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy04MTQtXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTExMjI9c3RhdGljIGludCBjeGFjcnVfYmluZChzdHJ1Y3QgdXNiYXRtX2RhdGEgKnVzYmF0bV9pbnN0YW5jZSxcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTE0Ni1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoxMTQ3Olx0bXV0ZXhfaW5pdChcdTAwMjZpbnN0YW5jZS1cdTAwM2VhZHNsX3N0YXRlX3NlcmlhbGl6ZSk7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTE0OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE1MAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHBlcnNwZWN0aXZlOgoKKipGaW5kaW5nIHRoZSBVc2FnZSBvZiBgYWRzbF9zdGF0ZV9zaG93YCBhbmQgYGFkc2xfc3RhdGVfc3RvcmVgKioKCkhtbSwgSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGVyZSBgYWRzbF9zdGF0ZV9zaG93YCBhbmQgYGFkc2xfc3RhdGVfc3RvcmVgIGFyZSBhY3R1YWxseSBiZWluZyAqdXNlZCouIEl0JiMzOTtzIGEgYml0IHVuY2xlYXIgZnJvbSBhIHF1aWNrIGdsYW5jZS4gSSBuZWVkIHRvIHRyYWNlIHRoZWlyIHVzYWdlLiBBcmUgdGhleSBqdXN0IGZsb2F0aW5nIGFyb3VuZCBpbiB0aGUgY29kZWJhc2UsIG9yIGFyZSB0aGV5IHBhcnQgb2Ygc29tZXRoaW5nIGJpZ2dlcj8gQWgsIHdhaXQgYSBtaW51dGUsIHRoZSB3YXkgdGhpcyBjb2RlIGlzIHN0cnVjdHVyZWQsIGl0JiMzOTtzIG9mdGVuIHRoZSBjYXNlIHRoYXQgdGhlc2Uga2luZHMgb2YgZnVuY3Rpb25zIGFyZSBwbHVnZ2VkIGludG8gYSBtYWNybywgbGlrZSBgREVWSUNFX0FUVFJgLiBUaGF0IHdvdWxkIG1ha2UgYSBsb3Qgb2Ygc2Vuc2UuIEkgc2hvdWxkIGxvb2sgZm9yIGEgbWFjcm8gZGVmaW5pdGlvbiBhbmQgdGhlbiBzZWUgaWYgdGhvc2UgZnVuY3Rpb25zIGFyZSBwYXNzZWQgYXMgYXJndW1lbnRzIHRvIGl0LiBUaGF0JiMzOTtzIHByb2JhYmx5IHRoZSBtb3N0IGxpa2VseSBwbGFjZSB0byBmaW5kIHRoZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7REVWSUNFX0FUVFIuKmFkc2xfc3RhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDMzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQgYW5kIGhhdmUgdGhhdCBzZWFyY2ggcXVlcnkgaW4gbWluZDoKCioqSW5pdGlhbCBTZWFyY2ggU3RyYXRlZ3kgZm9yIEFEU0wgU3RhdGUgSW5mb3JtYXRpb24qKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoZSBgYWRzbF9zdGF0ZWAgdmFyaWFibGUuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIGJ1dCBJIHdhbnQgdG8gYmUgZWZmaWNpZW50IGFuZCB6ZXJvIGluIG9uIHRoZSBjb3JlIGRlZmluaXRpb24gb3IgdXNhZ2UsIG5vdCBqdXN0IGV2ZXJ5IHNpbmdsZSBwbGFjZSBpdCYjMzk7cyBtZW50aW9uZWQuIFNvLCBJJiMzOTttIHRoaW5raW5nLCBsZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIGZvY3VzZWQgc2VhcmNoLiBJIGRvbiYjMzk7dCB3YW50IHRvIGdldCBib2dnZWQgZG93biBpbiBmdW5jdGlvbnMgdGhhdCBqdXN0ICpzaG93KiB0aGUgc3RhdGUgdG8gdGhlIHVzZXIgb3IgKnN0b3JlKiBpdCBzb21ld2hlcmUuIFRob3NlIGFyZSBkb3duc3RyZWFtIGVmZmVjdHMuIEkgd2FudCB0aGUgbWVhdCBvZiB3aGVyZSBgYWRzbF9zdGF0ZWAgaXMgYWN0dWFsbHkgKmRlZmluZWQqLCAqbW9kaWZpZWQqLCBvciAqZGlyZWN0bHkgdXNlZCogd2l0aGluIHRoZSBzeXN0ZW0uIFRoZXJlZm9yZSwgSSYjMzk7bGwgZmlsdGVyIG91dCBhbnkgc2VhcmNoIHJlc3VsdHMgdGhhdCBpbmNsdWRlIGBfc2hvd2Agb3IgYF9zdG9yZWAuIFRoYXQgc2hvdWxkIGhlbHAgbWUgY3V0IHRocm91Z2ggdGhlIG5vaXNlIGFuZCBnZXQgdG8gdGhlIGNyaXRpY2FsIGxvY2F0aW9ucyBtb3JlIHF1aWNrbHkuIFRoaXMgaXMgYWJvdXQgZWZmaWNpZW50IGRlYnVnZ2luZyBhbmQgcHJvYmxlbSBzb2x2aW5nLCBub3QgYSBjYXN1YWwgZXhwbG9yYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fkc2xfc3RhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTE3MD1zdHJ1Y3QgY3hhY3J1X2RhdGEge1xuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xNzUtXHRpbnQgbGluZV9zdGF0dXM7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTc2Olx0c3RydWN0IG11dGV4IGFkc2xfc3RhdGVfc2VyaWFsaXplO1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTE3Ny1cdGludCBhZHNsX3N0YXR1cztcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9MzAzPXN0YXRpYyBzc2l6ZV90IG1hY19hZGRyZXNzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zMTQtXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MzE1OnN0YXRpYyBzc2l6ZV90IGFkc2xfc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzE2LVx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zilcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzMxLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjMzMjpzdGF0aWMgc3NpemVfdCBhZHNsX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zMzMtXHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTM1Mi1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzozNTM6XHRpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKFx1MDAyNmluc3RhbmNlLVx1MDAzZWFkc2xfc3RhdGVfc2VyaWFsaXplKSlcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zNTQtXHRcdHJldHVybiAtRVJFU1RBUlRTWVM7XG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTQyNC1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo0MjU6XHRtdXRleF91bmxvY2soXHUwMDI2aW5zdGFuY2UtXHUwMDNlYWRzbF9zdGF0ZV9zZXJpYWxpemUpO1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTQyNi1cbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9NTM1PUNYQUNSVV9BVFRSXyMjX2FjdGlvbihDWElORl9DT05UUk9MTEVSX1ZFUlNJT04sICAgICAgICB1MzIsICBhZHNsX2NvbnRyb2xsZXJfdmVyc2lvbik7IFxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NTM2OkNYQUNSVV9DTURfIyNfYWN0aW9uKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZHNsX3N0YXRlKTsgXFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy01MzctQ1hBQ1JVX1NFVF8jI19hY3Rpb24oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkc2xfY29uZmlnKTtcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9NTQxPXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpjeGFjcnVfYXR0cnNbXSA9IHtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy01NDItXHRcdTAwMjZkZXZfYXR0cl9hZHNsX2NvbmZpZy5hdHRyLFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjU0MzpcdFx1MDAyNmRldl9hdHRyX2Fkc2xfc3RhdGUuYXR0cixcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy01NDQtXHRcdTAwMjZkZXZfYXR0cl9hZHNsX2NvbnRyb2xsZXJfdmVyc2lvbi5hdHRyLFxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz03NzE9c3RhdGljIGludCBjeGFjcnVfYXRtX3N0YXJ0KHN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtX2luc3RhbmNlLFxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03ODktXHQvKiBzdGFydCBBRFNMICovXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NzkwOlx0bXV0ZXhfbG9jayhcdTAwMjZpbnN0YW5jZS1cdTAwM2VhZHNsX3N0YXRlX3NlcmlhbGl6ZSk7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzkxLVx0cmV0ID0gY3hhY3J1X2NtKGluc3RhbmNlLCBDTV9SRVFVRVNUX0NISVBfQURTTF9MSU5FX1NUQVJULCBOVUxMLCAwLCBOVUxMLCAwKTtcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtODEyLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmluc3RhbmNlLVx1MDAzZXBvbGxfc3RhdGVfc2VyaWFsaXplKTtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo4MTM6XHRtdXRleF91bmxvY2soXHUwMDI2aW5zdGFuY2UtXHUwMDNlYWRzbF9zdGF0ZV9zZXJpYWxpemUpO1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTgxNC1cbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9ODIwPXN0YXRpYyB2b2lkIGN4YWNydV9wb2xsX3N0YXR1cyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTgzOS1cdFx0XHRpZiAocmV0ICE9IC1FU0hVVERPV04pXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6ODQwOlx0XHRcdFx0YXRtX3dhcm4odXNiYXRtLCBcJiMzNDtwb2xsaW5nIGRpc2FibGVkLCBzZXQgYWRzbF9zdGF0ZVwmIzM0O1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTg0MS1cdFx0XHRcdFx0XHRcJiMzNDsgdG8gJiMzOTtzdGFydCYjMzk7IG9yICYjMzk7cG9sbCYjMzk7IHRvIHJlc3VtZVxcblwmIzM0Oyk7XG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTExMjI9c3RhdGljIGludCBjeGFjcnVfYmluZChzdHJ1Y3QgdXNiYXRtX2RhdGEgKnVzYmF0bV9pbnN0YW5jZSxcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTE0Ni1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoxMTQ3Olx0bXV0ZXhfaW5pdChcdTAwMjZpbnN0YW5jZS1cdTAwM2VhZHNsX3N0YXRlX3NlcmlhbGl6ZSk7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTE0OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg4OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIGEgQ29tbWFuZCBDYWxsKioKClJpZ2h0LCBzbyBJIHNlZSBgQ1hBQ1JVX0NNRF8jI19hY3Rpb24oIGFkc2xfc3RhdGUpO2AgYmVpbmcgaW52b2tlZCBoZXJlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCBgQ1hBQ1JVX0NNRF9gIGlzIGludm9sdmVkLiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdCBtYWNybywgdGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBhY3Rpb24gaXMuJiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgQ1hBQ1JVX0NNRF9gIGFjdHVhbGx5IGV4cGFuZHMgdG8uIFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlbnQgb2YgdGhpcyBlbnRpcmUgY2FsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVmaW5lIENYQUNSVV9DTURfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL2N4YWNydS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz0xOTk9c3RhdGljIERFVklDRV9BVFRSX1JPKF9uYW1lKVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTIwMC1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoyMDE6I2RlZmluZSBDWEFDUlVfQ01EX0lOSVQoX25hbWUpIFxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjAyLXN0YXRpYyBERVZJQ0VfQVRUUl9SVyhfbmFtZSlcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9MjE5PUNYQUNSVV9fQVRUUl9JTklUKF9uYW1lKVxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yMjEtI2RlZmluZSBDWEFDUlVfQVRUUl9DUkVBVEUoX3YsIF90LCBfbmFtZSkgQ1hBQ1JVX0RFVklDRV9DUkVBVEVfRklMRShfbmFtZSlcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoyMjI6I2RlZmluZSBDWEFDUlVfQ01EX0NSRUFURShfbmFtZSkgICAgICAgICAgQ1hBQ1JVX0RFVklDRV9DUkVBVEVfRklMRShfbmFtZSlcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yMjMtI2RlZmluZSBDWEFDUlVfU0VUX0NSRUFURShfbmFtZSkgICAgICAgICAgQ1hBQ1JVX0RFVklDRV9DUkVBVEVfRklMRShfbmFtZSlcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjI2LSNkZWZpbmUgQ1hBQ1JVX0FUVFJfUkVNT1ZFKF92LCBfdCwgX25hbWUpIENYQUNSVV9ERVZJQ0VfUkVNT1ZFX0ZJTEUoX25hbWUpXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MjI3OiNkZWZpbmUgQ1hBQ1JVX0NNRF9SRU1PVkUoX25hbWUpICAgICAgICAgIENYQUNSVV9ERVZJQ0VfUkVNT1ZFX0ZJTEUoX25hbWUpXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjI4LSNkZWZpbmUgQ1hBQ1JVX1NFVF9SRU1PVkUoX25hbWUpICAgICAgICAgIENYQUNSVV9ERVZJQ0VfUkVNT1ZFX0ZJTEUoX25hbWUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDgzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgcXVpY2sgcnVuZG93biBvZiB0aGVzZSBjb25zaWRlcmF0aW9ucywga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgYGFkc2xfc3RhdGVfc3RvcmVgIGFuZCBgYWRzbF9jb25maWdfc3RvcmVgIGZvciBWdWxuZXJhYmlsaXRpZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4gSSYjMzk7bSBsb29raW5nIGF0IGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoZXkmIzM5O3JlIHN5c2ZzIHN0b3JlIGZ1bmN0aW9ucyDigJMgZ29vZCwgc3RyYWlnaHRmb3J3YXJkLiBBcmUgdGhleSBhY2Nlc3NpYmxlIHRocm91Z2ggc3lzZnM/IFllcywgdGhhdCYjMzk7cyB0aGUgcG9pbnQgb2YgdGhlbSBiZWluZyB0aGVyZSwgc28gdGhhdCYjMzk7cyBhIGNoZWNrIG1hcmsuIENhbiBzeXprYWxsZXIgZ2V0IGF0IHRoZW0gZm9yIGZ1enppbmc/IEFic29sdXRlbHksIHN5emthbGxlciBsb3ZlcyB0byBwbGF5IHdpdGggc3lzZnMsIGl0JiMzOTtzIGEga25vd24gYXR0YWNrIHZlY3Rvciwgc28gdGhhdCYjMzk7cyBhbm90aGVyIGNoZWNrLiBIb2xkIG9uLi4uIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgYGFkc2xfc3RhdGVfc3RvcmVgLiBJdCByZXF1aXJlcyBgQ0FQX05FVF9BRE1JTmA/IEFoLCB0aGF0JiMzOTtzIGNydWNpYWwuIFRoaXMgaXMgc29tZXRoaW5nIHRoYXQgc3l6a2FsbGVyIGxpa2VseSBoYXMgdG8gY29uc2lkZXIgd2hlbiBhdHRlbXB0aW5nIHRoZSBmdXp6LCBhbmQgSSB3b3VsZCBjZXJ0YWlubHkgaGF2ZSB0byBjb25zaWRlciBpdCB3aGVuIGNoZWNraW5nIGlmIHRoZSBzeXN0ZW0gaGFzIGJlZW4gbWlzY29uZmlndXJlZC4gTm93LCBsZXQmIzM5O3MgZGlnIGludG8gdGhhdCBgYWRzbF9zdGF0ZV9zdG9yZWAgZnVuY3Rpb24gc3BlY2lmaWNhbGx5IGFuZCBzZWUgaG93IGl0IGhhbmRsZXMgdGhlIHBlcm1pc3Npb24gY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL2N4YWNydS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMzI6XHRzdGF0aWMgc3NpemVfdCBhZHNsX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbiAzMzM6XHRcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbiAzMzQ6XHR7XG4gMzM1Olx0XHRzdHJ1Y3QgY3hhY3J1X2RhdGEgKmluc3RhbmNlID0gdG9fdXNiYXRtX2RyaXZlcl9kYXRhKFxuIDMzNjpcdFx0XHRcdHRvX3VzYl9pbnRlcmZhY2UoZGV2KSk7XG4gMzM3Olx0XHRpbnQgcmV0O1xuIDMzODpcdFx0aW50IHBvbGwgPSAtMTtcbiAzMzk6XHRcdGNoYXIgc3RyX2NtZFs4XTtcbiAzNDA6XHRcdGludCBsZW4gPSBzdHJsZW4oYnVmKTtcbiAzNDE6XHRcbiAzNDI6XHRcdGlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSlcbiAzNDM6XHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4gMzQ0Olx0XG4gMzQ1Olx0XHRyZXQgPSBzc2NhbmYoYnVmLCBcJiMzNDslN3NcJiMzNDssIHN0cl9jbWQpO1xuIDM0NjpcdFx0aWYgKHJldCAhPSAxKVxuIDM0NzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAzNDg6XHRcdHJldCA9IDA7XG4gMzQ5Olx0XG4gMzUwOlx0XHRpZiAoaW5zdGFuY2UgPT0gTlVMTCB8fCBpbnN0YW5jZS1cdTAwM2V1c2JhdG0tXHUwMDNlYXRtX2RldiA9PSBOVUxMKVxuIDM1MTpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExNjcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIENhcGFiaWxpdHkgQ2hlY2tzIGluIFN5emthbGxlciBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgU3l6a2FsbGVyIGludGVyYWN0cyB3aXRoIHN5c2ZzIGFuZCBjYXBhYmlsaXRpZXMuIFRoZSBrZXkgaXNzdWUgaGVyZSBpcyB0aGF0IFN5emthbGxlciB1c3VhbGx5IHJ1bnMgd2l0aCBgQ0FQX05FVF9BRE1JTmAgd2l0aGluIGl0cyBvd24gbmFtZXNwYWNlLiBIb3dldmVyLCB0aGUgc3lzZnMgZmlsZXMgYXJlIGdlbmVyYWxseSBpbiB0aGUgZ2xvYmFsIG5hbWVzcGFjZSwgcHJlc2VudGluZyBhIHBvdGVudGlhbCBjb25mbGljdC4gQnV0IHdhaXQsIHNpbmNlIFN5emthbGxlciBydW5zIGluIGEgdXNlciBuYW1lc3BhY2Ugd2hlcmUgaXQgaGFzIGBDQVBfTkVUX0FETUlOYCwgSSBuZWVkIHRvIHJlYWxseSBjb25zaWRlciB3aGF0IGBjYXBhYmxlKENBUF9ORVRfQURNSU4pYCBpcyBhY3R1YWxseSBjaGVja2luZy4gQWgsIHJpZ2h0LCB0aGF0IGNhbGwgY2hlY2tzIHRoZSAqaW5pdCogdXNlciBuYW1lc3BhY2UuIFRoYXQmIzM5O3MgY3J1Y2lhbC4gQW5kIGlmIFN5emthbGxlciBpcyBpbmRlZWQgcnVubmluZyBpbiBhIHVzZXIgbmFtZXNwYWNlLCB0aGVuIHRoYXQgY2hlY2sgd291bGQgZmFpbCBiZWNhdXNlIGBjYXBhYmxlKClgIHVzZXMgdGhlIGluaXQgdXNlciBuYW1lc3BhY2UuCgpTbywgSSBuZWVkIHRvIGNoZWNrIGV4YWN0bHkgd2hldGhlciBgY2FwYWJsZSgpYCBvciBgbnNfY2FwYWJsZSgpYCBhcmUgdXNlZC4gSXQgbG9va3MgbGlrZSBgY2FwYWJsZShDQVBfTkVUX0FETUlOKWAgaXMsIGluIGZhY3QsIHRoZSByZWxldmFudCBmdW5jdGlvbiwgd2hpY2gsIGFzIEkgc2FpZCwgY2hlY2tzIHRoZSAqaW5pdCogdXNlciBuYW1lc3BhY2UuIE5vdywgZ2l2ZW4gdGhhdCBTeXprYWxsZXImIzM5O3Mgc2FuZGJveGluZyByZWxpZXMgb24gdXNlciBuYW1lc3BhY2VzLCBpdCYjMzk7cyB2ZXJ5IHBvc3NpYmxlIHRoYXQgaXQgKndvbiYjMzk7dCogaGF2ZSBgQ0FQX05FVF9BRE1JTmAgaW4gdGhlIGluaXQgdXNlciBuYW1lc3BhY2UsIHdoaWNoIGlzIHByb2JsZW1hdGljLiBCdXQgd2FpdCEgSSBhbHNvIHJlY2FsbCB0aGF0IFN5emthbGxlciBoYXMgYSBgc2FuZGJveD1ub25lYCBtb2RlLCB3aGVyZSBpdCBydW5zIGFzIHJvb3QgaW4gdGhlIGluaXQgbmFtZXNwYWNlLiBUaGF0JiMzOTtzIGEgY3JpdGljYWwgZGlmZmVyZW5jZS4gVGhhdCBtZWFucyBTeXprYWxsZXIgKmNhbiogcmVhY2ggdGhlIGNvZGUgcGF0aCBhbmQgcG90ZW50aWFsbHkgYnlwYXNzIHRoZSBpbnRlbmRlZCBzZWN1cml0eSByZXN0cmljdGlvbnMuIEZ1cnRoZXJtb3JlLCBJIHNlZSB0aGF0IGBhZHNsX2NvbmZpZ19zdG9yZWAgaGFzIHRoZSBzYW1lIGNhcGFiaWxpdHkgY2hlY2ssIG1ha2luZyBpdCBlcXVhbGx5IHZ1bG5lcmFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL2N4YWNydS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MzA6XHRcdHJldHVybiByZXQ7XG4gNDMxOlx0fVxuIDQzMjpcdFxuIDQzMzpcdC8qIENNX1JFUVVFU1RfQ0FSRF9EQVRBX0dFVCB0aW1lcyBvdXQsIHNvIG5vIHNob3cgYXR0cmlidXRlICovXG4gNDM0Olx0XG4gNDM1Olx0c3RhdGljIHNzaXplX3QgYWRzbF9jb25maWdfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuIDQzNjpcdFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuIDQzNzpcdHtcbiA0Mzg6XHRcdHN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UgPSB0b191c2JhdG1fZHJpdmVyX2RhdGEoXG4gNDM5Olx0XHRcdFx0dG9fdXNiX2ludGVyZmFjZShkZXYpKTtcbiA0NDA6XHRcdGludCBsZW4gPSBzdHJsZW4oYnVmKTtcbiA0NDE6XHRcdGludCByZXQsIHBvcywgbnVtO1xuIDQ0MjpcdFx0X19sZTMyIGRhdGFbQ01EX1BBQ0tFVF9TSVpFIC8gNF07XG4gNDQzOlx0XG4gNDQ0Olx0XHRpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpXG4gNDQ1Olx0XHRcdHJldHVybiAtRUFDQ0VTO1xuIDQ0NjpcdFxuIDQ0NzpcdFx0aWYgKGluc3RhbmNlID09IE5VTEwgfHwgaW5zdGFuY2UtXHUwMDNldXNiYXRtLVx1MDAzZWF0bV9kZXYgPT0gTlVMTClcbiA0NDg6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4gNDQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDY3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3RyYXRlZ3kgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBib3RoIGZ1bmN0aW9ucyBpbiBxdWVzdGlvbiBoYXZlIGBjYXBhYmxlKENBUF9ORVRfQURNSU4pYC4gV29ydGggdGhpbmtpbmcgYWJvdXQgZnV6emluZyB0aGlzLCBJIHRoaW5rLiBUaGlzIHBhdGNoIGlzIHRhcmdldGluZyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgd2hpY2ggaXMgYWx3YXlzIGludGVyZXN0aW5nLiBUaGUgZnVuY3Rpb25zIGludm9sdmVkIGFyZSBgYWRzbF9zdGF0ZV9zdG9yZWAgYW5kIGBhZHNsX2NvbmZpZ19zdG9yZWAuCgpIb2xkIG9uLCB0aGUgcHJvbXB0IGlzIGd1aWRpbmcgbWUgaGVyZTogJiMzNDtQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zLiYjMzQ7IE5vdywgdGhlc2UgdHdvIGFyZSBzdGF0aWMsIHdoaWNoICpjb3VsZCogbWVhbiB0aGV5JiMzOTtyZSBpbmxpbmVkIGFuZCB0aGVpciBhZGRyZXNzZXMgYXJlbiYjMzk7dCBkaXN0aW5jdCBzeW1ib2xzLiBCdXQgdGhleSAqYXJlKiBwYXNzZWQgdG8gYERFVklDRV9BVFRSX1JXYCwgbWVhbmluZyB0aGUga2VybmVsIGlzIHRha2luZyB0aGVpciBhZGRyZXNzZXMuIFRoZXJlZm9yZSwgdGhleSAqd29uJiMzOTt0KiBiZSBpbmxpbmVkLiBTbyBwcm92aWRpbmcgYGFkc2xfc3RhdGVfc3RvcmVgIGFuZCBgYWRzbF9jb25maWdfc3RvcmVgIGFzIGZvY3VzIHN5bWJvbHMgc2hvdWxkIGJlIGZpbmUsIGFuZCBpbiBsaW5lIHdpdGggdGhlIGd1aWRhbmNlLiBJIGNhbiBwcm92aWRlIHRob3NlLgoKV2FpdCwgYmFjayB0byB0aGUgcHJvbXB0OiBJdCAqcHJlZmVycyogbm9uLXN0YXRpYyBmdW5jdGlvbnMuIElzIHRoZXJlIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiB0aGF0IGNhbGxzIHRoZXNlPyBObywgdGhleSYjMzk7cmUgY2FsbGVkIGRpcmVjdGx5IGJ5IHRoZSBzeXNmcyBjb3JlLiBTbywgc3RpY2tpbmcgd2l0aCBgYWRzbF9zdGF0ZV9zdG9yZWAgYW5kIGBhZHNsX2NvbmZpZ19zdG9yZWAgaXMgdGhlIHdheSB0byBnby4KCkFscmlnaHQsIGxldCYjMzk7cyBzZWUgaWYgdGhpcyBwYXRjaCBhZmZlY3RzIGFueXRoaW5nIGVsc2UuIEl0IG1vZGlmaWVzIGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYCBkaXJlY3RseS4gV2Ugc2hvdWxkIHByb2JhYmx5IGluY2x1ZGUgYFVTQl9DWEFDUlVgIGFuZCBgVVNCX0FUTWAgaW4gYEVuYWJsZUNvbmZpZ3NgLiBIYW5nIG9uLi4uIGBVU0JfQVRNYCBpcyBsaXN0ZWQgYXMgYm90aCBhIG1lbnVjb25maWcgKmFuZCogYSBjb25maWcsIHNvIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgYGRyaXZlcnMvdXNiL2F0bS9LY29uZmlnYCBmaWxlIGFnYWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVVNCX0FUTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTUtXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZzo2Om1lbnVjb25maWcgVVNCX0FUTVxuZHJpdmVycy91c2IvYXRtL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O1VTQiBEU0wgbW9kZW0gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg2OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIENoZWNrKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24sIGFuZCBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgVVNCX0FUTWAgaXMgaW5kZWVkIGEgY29uZmlndXJhdGlvbiBvcHRpb24uIE5vdywgdGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIGBBVE1gIGl0c2VsZiBpcyByZXF1aXJlZC4gWWVzLCBpdCBsb29rcyBsaWtlIGBVU0JfQVRNYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBBVE1gLiBUaGF0IG1lYW5zIGBFbmFibGVDb25maWdzYCBzaG91bGQgaW5jbHVkZSBgWyYjMzQ7VVNCX0NYQUNSVSYjMzQ7LCAmIzM0O1VTQl9BVE0mIzM0OywgJiMzNDtBVE0mIzM0O11gLiBNYWtlcyBzZW5zZS4KCk5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIHVzaW5nIHRoZSByaWdodCBzeW1ib2xzIGFzIGZvY3VzIHBvaW50cy4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGF0IGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYCBhcmUsIGluIGZhY3QsIHRoZSBiZXN0IGNob2ljZXMuIFllcywgdGhvc2UgYXJlIHRoZSBleGFjdCBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQuIEFuZCBzaW5jZSB3ZSYjMzk7cmUgdGFraW5nIHRoZWlyIGFkZHJlc3NlcyBmb3IgYERFVklDRV9BVFRSX1JXYCwgSSBrbm93IHRoZXkgYXJlbiYjMzk7dCBpbmxpbmVkLCBzbyB0aGV5JiMzOTtyZSBwZXJmZWN0bHkgc3VpdGFibGUgZm9jdXMgcG9pbnRzLiBFeGNlbGxlbnQuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSYjMzk7bGwgcnVuIHRocm91Z2ggdGhlIGRlcGVuZGVuY2llcyBmb3IgYFVTQl9DWEFDUlVgIGFnYWluLiBJdCBkZXBlbmRzIG9uIGBVU0JfQVRNYCwgd2hpY2ggaW4gdHVybiBkZXBlbmRzIG9uIGBBVE1gLiBBbmQgYEFUTWAgbG9va3MgbGlrZSBhIHN0YW5kYWxvbmUgY29uZmlndXJhdGlvbi4gV2FpdCwgaGFuZyBvbi4uLiBgVVNCX0NYQUNSVWAgKmFsc28qIHNlbGVjdHMgYEZXX0xPQURFUmAuIEFuZCBgRldfTE9BREVSYCBpcyB1c3VhbGx5IGVuYWJsZWQgaW4gdGhlIGJyb2FkZXIgY29udGV4dC4gVGltZSB0byB0YWtlIGFub3RoZXIgbG9vayBhdCBgZHJpdmVycy91c2IvYXRtL0tjb25maWdgIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDMwOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzcGVlZHRjaC5cbiAgMzE6XHRcbiAgMzI6XHRjb25maWcgVVNCX0NYQUNSVVxuICAzMzpcdFx0dHJpc3RhdGUgXCYjMzQ7Q29uZXhhbnQgQWNjZXNzUnVubmVyIFVTQiBzdXBwb3J0XCYjMzQ7XG4gIDM0Olx0XHRzZWxlY3QgRldfTE9BREVSXG4gIDM1Olx0XHRoZWxwXG4gIDM2Olx0XHQgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYW4gQURTTCBVU0IgbW9kZW0gYmFzZWQgb24gdGhlIENvbmV4YW50XG4gIDM3Olx0XHQgIEFjY2Vzc1J1bm5lciBjaGlwc2V0LiAgSW4gb3JkZXIgdG8gdXNlIHlvdXIgbW9kZW0geW91IHdpbGwgbmVlZCB0b1xuICAzODpcdFx0ICBpbnN0YWxsIHRoZSBmaXJtd2FyZSwgZXh0cmFjdGVkIGJ5IHRoZSB1c2VyIHNwYWNlIHRvb2xzOyBzZWVcbiAgMzk6XHRcdCAgXHUwMDNjaHR0cDovL2FjY2Vzc3J1bm5lci5zb3VyY2Vmb3JnZS5uZXQvXHUwMDNlIGZvciBkZXRhaWxzLlxuICA0MDpcdFxuICA0MTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAgNDI6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGN4YWNydS5cbiAgNDM6XHRcbiAgNDQ6XHRjb25maWcgVVNCX1VFQUdMRUFUTVxuICA0NTpcdFx0dHJpc3RhdGUgXCYjMzQ7QURJIDkzMCBhbmQgZWFnbGUgVVNCIERTTCBtb2RlbVwmIzM0O1xuICA0NjpcdFx0c2VsZWN0IEZXX0xPQURFUlxuICA0NzpcdFx0aGVscFxuICA0ODpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGFuIEFEU0wgVVNCIG1vZGVtIGJhc2VkIG9uIHRoZSBBREkgOTMwXG4gIDQ5Olx0XHQgIG9yIGVhZ2xlIGNoaXBzZXQuIEluIG9yZGVyIHRvIHVzZSB5b3VyIG1vZGVtIHlvdSB3aWxsIG5lZWQgdG9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3NDIKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIFVTQiBBVE0gTW9kdWxlJiMzOTtzIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBVU0JfQVRNYCBtb2R1bGUsIHRyeWluZyB0byB1bmRlcnN0YW5kIGl0cyBidWlsZCBjb25maWd1cmF0aW9uLiBUaGUgZmlyc3QgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpczogYXJlIHRoZXJlIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIGJleW9uZCB0aGUgbW9kdWxlIGl0c2VsZj8gSSBrbm93IGBVU0JfQVRNYCBpcyBkZWZpbmVkIHdpdGhpbiBgZHJpdmVycy91c2IvYXRtL0tjb25maWdgLCBzbyB0aGF0JiMzOTtzIG15IHN0YXJ0aW5nIHBvaW50LiBOb3csIHRvIGdldCBhIGJyb2FkZXIgcGljdHVyZSBvZiBob3cgdGhpcyBtb2R1bGUgZml0cyBpbnRvIHRoZSBVU0Igc3Vic3lzdGVtLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGBkcml2ZXJzL3VzYi9NYWtlZmlsZWAuIEkmIzM5O2xsIHNjYW4gdGhhdCB0byBzZWUgaG93IGl0JiMzOTtzIGxpbmtlZCwgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBwcmUtcmVxdWlzaXRlcywgb3IgaWYgdGhlcmUgaXMgYW55dGhpbmcgdGhhdCBtYXkgaGF2ZSBiZWVuIG1pc3NlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvTWFrZWZpbGU9NTM9b2JqLSQoQ09ORklHX0VBUkxZX1BSSU5US19VU0IpXHQmIzQzOz0gZWFybHkvXG5kcml2ZXJzL3VzYi9NYWtlZmlsZS01NC1cbmRyaXZlcnMvdXNiL01ha2VmaWxlOjU1Om9iai0kKENPTkZJR19VU0JfQVRNKVx0XHQmIzQzOz0gYXRtL1xuZHJpdmVycy91c2IvTWFrZWZpbGU6NTY6b2JqLSQoQ09ORklHX1VTQl9TUEVFRFRPVUNIKVx0JiM0Mzs9IGF0bS9cbmRyaXZlcnMvdXNiL01ha2VmaWxlLTU3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDA2MwoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nLCBhcyBpZiBJIHdlcmUgd29ya2luZyB0aHJvdWdoIHRoaXMgY29kZToKCioqTWFrZWZpbGUgRGVwZW5kZW5jeSBDb251bmRydW0qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4gTXkgbWVudGFsIG1vZGVsIGlzIHRlbGxpbmcgbWUgdGhhdCBgZHJpdmVycy91c2IvTWFrZWZpbGVgIGhhcyBhIGNvbmRpdGlvbmFsIGRlcGVuZGVuY3kgaGVyZS4gSXQmIzM5O3Mgc2F5aW5nIHRoYXQsIHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcywgc3BlY2lmaWNhbGx5IHdoZW4gYENPTkZJR19VU0JfQVRNYCBpcyBkZWZpbmVkLCB0aGUgYGF0bS9gIGRpcmVjdG9yeSB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBidWlsZCBwcm9jZXNzICp0aHJvdWdoKiB0aGUgYGRyaXZlcnMvdXNiL01ha2VmaWxlYC4gIFRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gSXQgbWFrZXMgc2Vuc2UsIHlvdSYjMzk7dmUgZ290IHlvdXIgQVRNIG92ZXIgVVNCIGZ1bmN0aW9uYWxpdHksIGFuZCB0aGlzIGlzIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGFjY291bnRzIGZvciBpdC4KCkhvd2V2ZXIsIHRoZXJlJiMzOTtzIGFub3RoZXIgbGV2ZWwgaGVyZS4gIFRoZSBgZHJpdmVycy91c2IvTWFrZWZpbGVgIGZpbGUgaXRzZWxmIGlzIG9ubHkgcHVsbGVkIGluIHdoZW4gYENPTkZJR19VU0JfU1VQUE9SVGAgaXMgZW5hYmxlZC4gIFNvIGl0JiMzOTtzIG5vdCBhIGRpcmVjdCBpbmNsdXNpb24gYWx3YXlzIC0gaXQgaXMgbmVzdGVkLgoKU28sIHRvIHN1bW1hcml6ZSwgdGhlIGRlcGVuZGVuY3kgY2hhaW4gaXM6IGlmIGBDT05GSUdfVVNCX1NVUFBPUlRgIGlzIHNldCwgKnRoZW4qIGBkcml2ZXJzL3VzYi9NYWtlZmlsZWAgaXMgaW5jbHVkZWQuIElmIEFORCBPTkxZIElGIGBDT05GSUdfVVNCX0FUTWAgaXMgKmFsc28qIHNldCwgKnRoZW4qIHRoZSBgYXRtL2AgZGlyZWN0b3J5IGlzIGFsc28gaW5jbHVkZWQgKnRocm91Z2gqIHRoZSBpbmNsdWRlZCBgZHJpdmVycy91c2IvTWFrZWZpbGVgLiBJdCYjMzk7cyBhIG5lc3RlZCBjb25kaXRpb25hbCBpbmNsdXNpb24uIEkgbmVlZCB0byBiZSBhd2FyZSBvZiB0aGlzIHdoZW4gZGVidWdnaW5nIG9yIG1vZGlmeWluZyBhbnl0aGluZyByZWxhdGVkIHRvIFVTQiBvciBBVE0gc3VwcG9ydCB3aXRoaW4gdGhpcyBidWlsZCBzeXN0ZW0uIFRoaXMgY291bGQgYWZmZWN0IHRoZSBvcmRlciBvZiBjb21waWxhdGlvbiBhbmQgdGhlcmVmb3JlIHJlcXVpcmUgY2FyZWZ1bCBwbGFubmluZyBpZiBhbnkgY2hhbmdlcyBhcmUgbmVlZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvTWFrZWZpbGU9MTA1PW9iai0kKENPTkZJR19UQylcdFx0JiM0Mzs9IHRjL1xuZHJpdmVycy9NYWtlZmlsZToxMDY6b2JqLSQoQ09ORklHX1VTQl9QSFkpXHRcdCYjNDM7PSB1c2IvXG5kcml2ZXJzL01ha2VmaWxlOjEwNzpvYmotJChDT05GSUdfVVNCKVx0XHQmIzQzOz0gdXNiL1xuZHJpdmVycy9NYWtlZmlsZToxMDg6b2JqLSQoQ09ORklHX1VTQl9TVVBQT1JUKVx0JiM0Mzs9IHVzYi9cbmRyaXZlcnMvTWFrZWZpbGU6MTA5Om9iai0kKENPTkZJR19QQ0kpXHRcdCYjNDM7PSB1c2IvXG5kcml2ZXJzL01ha2VmaWxlOjExMDpvYmotJChDT05GSUdfVVNCX0dBREdFVClcdCYjNDM7PSB1c2IvXG5kcml2ZXJzL01ha2VmaWxlOjExMTpvYmotJChDT05GSUdfT0YpXHRcdCYjNDM7PSB1c2IvXG5kcml2ZXJzL01ha2VmaWxlLTExMi1vYmotJChDT05GSUdfU0VSSU8pXHRcdCYjNDM7PSBpbnB1dC9zZXJpby9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2MzYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVU0IgQ29uZmlndXJhdGlvbiBDaGVjayoqCgpPa2F5LCBzbyBJJiMzOTttIHByZXR0eSBzdXJlIGBVU0JfU1VQUE9SVGAgbmVlZHMgdG8gYmUgZW5hYmxlZC4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBkZWZhdWx0LCBidXQgSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlLiBOb3csIEkgaGF2ZSB0byB0aGluayBhYm91dCBgVVNCYCBpdHNlbGYsIGFuZCBpZiBgVVNCX0FUTWAgaXMgYSBkZXBlbmRlbnQgbW9kdWxlLiBJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZ2AgZmlsZSBhZ2FpbjsgaXQmIzM5O3MgYWx3YXlzIHdvcnRoIGEgcXVpY2sgY29uZmlybWF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL0tjb25maWc9Nj1tZW51Y29uZmlnIFVTQl9BVE1cbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtVU0IgRFNMIG1vZGVtIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnOjg6XHRkZXBlbmRzIG9uIEFUTVxuZHJpdmVycy91c2IvYXRtL0tjb25maWctOS1cdHNlbGVjdCBDUkMzMlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDg5MwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgdW5mb2xkczoKCioqVVNCIERlcGVuZGVuY3kgQ2hlY2sqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCB0aGUgYFVTQl9BVE1gIGRyaXZlciwgbGlrZSBtb3N0IFVTQi1yZWxhdGVkIG1vZHVsZXMsIHdvdWxkIGltcGxpY2l0bHkgZGVwZW5kIG9uIHRoZSBjb3JlIGBVU0JgIHN1YnN5c3RlbSBiZWluZyBlbmFibGVkLiBCdXQgbm93IEkmIzM5O20gaGF2aW5nIGEgc2Vjb25kIHRob3VnaHQgYW5kIEkmIzM5O20gbm90IHNvIHN1cmUuIEl0IG1pZ2h0IGJlIHBvc3NpYmxlIHRoYXQgaXQgZG9lc24mIzM5O3QuCgpCZXN0IHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGZpbGUsIGBkcml2ZXJzL3VzYi9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBVU0IgZHJpdmVycyBhcmUgZGVmaW5lZC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uLiBMZXQmIzM5O3MgZGlnIGluIHRoZXJlIGFuZCBzZWUgd2hhdCBgVVNCX0FUTWAmIzM5O3MgY29uZmlnIGRlZmluaXRpb24gcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c291cmNlIFwmIzM0O2RyaXZlcnMvdXNiL2F0bS9LY29uZmlnXCYjMzQ7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9LY29uZmlnPTE0OD1zb3VyY2UgXCYjMzQ7ZHJpdmVycy91c2IvbWlzYy9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL3VzYi9LY29uZmlnLTE0OS1cbmRyaXZlcnMvdXNiL0tjb25maWc6MTUwOnNvdXJjZSBcJiMzNDtkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy91c2IvS2NvbmZpZy0xNTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTg5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgVVNCIERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBzZWUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IHZlcmlmeSB0aGUgS2NvbmZpZyBzdHJ1Y3R1cmUgZm9yIHRoZSBVU0IgQVRNIGRyaXZlci4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyBpZiB0aGUgYHNvdXJjZSAmIzM0O2RyaXZlcnMvdXNiL2F0bS9LY29uZmlnJiMzNDtgIGxpbmUgaXMgbmVzdGVkIHdpdGhpbiBhbiBgaWYgVVNCYCBjb25kaXRpb25hbCBibG9jay4gVGhhdCYjMzk7cyBhIGNydWNpYWwgcG9pbnQuIElmIGl0ICppcyogaW5zaWRlIHRoZSBgaWYgVVNCYCBibG9jaywgaXQgbWVhbnMgdGhlIEFUTSBVU0IgZHJpdmVyIGlzLCBjb3JyZWN0bHksIG9ubHkgY29uc2lkZXJlZCBpZiB0aGUgY29yZSBVU0IgZnVuY3Rpb25hbGl0eSBpcyBlbmFibGVkLiBJZiBpdCAqaXNuJiMzOTt0Kiwgd2VsbCwgdGhhdCByYWlzZXMgc29tZSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFib3V0IGhvdyB0aGUgZGVwZW5kZW5jeSBpcyBtYW5hZ2VkIGFuZCBjb3VsZCBwb3RlbnRpYWxseSBjcmVhdGUgYnVpbGQgaXNzdWVzIG9yIHJ1bnRpbWUgYmVoYXZpb3IgSSBuZWVkIHRvIGludmVzdGlnYXRlLiBTbywgeWVhaCwgdGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcyAqd2hlcmUqIGlzIHRoYXQgYHNvdXJjZWAgc3RhdGVtZW50IGFuZCB3aGF0JiMzOTtzIHN1cnJvdW5kaW5nIGl0IGluIHRoZSBLY29uZmlnIGhpZXJhcmNoeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDA6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy91c2IvaXNwMTc2MC9LY29uZmlnXCYjMzQ7XG4gMTQxOlx0XG4gMTQyOlx0Y29tbWVudCBcJiMzNDtVU0IgcG9ydCBkcml2ZXJzXCYjMzQ7XG4gMTQzOlx0XG4gMTQ0Olx0aWYgVVNCXG4gMTQ1Olx0XG4gMTQ2Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnXCYjMzQ7XG4gMTQ3Olx0XG4gMTQ4Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvdXNiL21pc2MvS2NvbmZpZ1wmIzM0O1xuIDE0OTpcdFxuIDE1MDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZ1wmIzM0O1xuIDE1MTpcdFxuIDE1MjpcdGVuZGlmICMgVVNCXG4gMTUzOlx0XG4gMTU0Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvdXNiL3BoeS9LY29uZmlnXCYjMzQ7XG4gMTU1Olx0XG4gMTU2Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnXCYjMzQ7XG4gMTU3Olx0XG4gMTU4Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvdXNiL3R5cGVjL0tjb25maWdcJiMzNDtcbiAxNTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2NTgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1MjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgUG90ZW50aWFsIFNlY3VyaXR5IEltcGxpY2F0aW9ucyoqCgpPa2F5LCBzbyBJIHNlZSB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBtb2RpZnlpbmcgdGhlIGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYCBmdW5jdGlvbnMuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgYWRkaW5nIGEgY2hlY2sgZm9yIGBpbnN0YW5jZS0mZ3Q7dXNiYXRtLSZndDthdG1fZGV2ID09IE5VTExgIGJlZm9yZSBhY2Nlc3NpbmcgdGhlIGBhdG1fZGV2YCBtZW1iZXIuIFJpZ2h0LCB0aGF0JiMzOTtzIGEgc3RyYWlnaHRmb3J3YXJkIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBwcmV2ZW50aW9uLiBHb29kLCBwcmV2ZW50aW5nIGNyYXNoZXMgaXMgYWx3YXlzIGEgcHJpb3JpdHkuIEl0IGxvb2tzIGxpa2UgdGhpcyBpcyByZWFjaGFibGUgdmlhIHN5c2ZzLCBzbyBhIHVzZXItc3BhY2UgcHJvY2VzcyBjYW4gdHJpZ2dlciB0aGlzIGNvZGUgcGF0aC4KClNpbmNlIHRoaXMgdG91Y2hlcyBzeXNmcywgaXQmIzM5O3MgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBzaG91bGQgYmUgZnV6emVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgY29uc2lkZXIgdGhhdCB3aGVuIGV2YWx1YXRpbmcgdGhpcy4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbnMuIFRoZSBkZXBlbmRlbmN5IHRyZWUgdGVsbHMgbWUgdGhhdCBgVVNCYCBpcyByZXF1aXJlZCBiZWNhdXNlIGl0JiMzOTtzIGluc2lkZSBgaWYgVVNCYC4gQ29uc2VxdWVudGx5LCB0aGUgbmVjZXNzYXJ5IGBFbmFibGVDb25maWdzYCBzaG91bGQgYmUgYFsmIzM0O1VTQl9DWEFDUlUmIzM0OywgJiMzNDtVU0JfQVRNJiMzNDssICYjMzQ7QVRNJiMzNDssICYjMzQ7VVNCJiMzNDtdYC4gSSBhbHNvIHNlZSB0aGF0IGBVU0JfQ1hBQ1JVYCBzZWxlY3RzIGBGV19MT0FERVJgLiBgRldfTE9BREVSYCBpcyBwcmV0dHkgY29tbW9uLCBzbyBJJiMzOTttIG5vdCBvdmVybHkgY29uY2VybmVkIGFib3V0IHRoYXQgYmVpbmcgYW4gb2JzdGFjbGUuCgpJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoZSBtb2RpZmllZCBmdW5jdGlvbnMsIGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYCwgYXJlIHRoZSBvbmx5IG9uZXMgaW1wYWN0ZWQuIFRoZXkgYXJlIGFsc28gc3RhdGljIGFuZCBjYW4gYmUgcHJvdmlkZWQgYXMgZm9jdXMgc3ltYm9scywgc2luY2UgdGhleSYjMzk7cmUgcGFzc2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzIHRocm91Z2ggYERFVklDRV9BVFRSX1JXYC4gSSYjMzk7bGwgZG91YmxlLWNoZWNrIGBDWEFDUlVfQ01EX0lOSVRgIGFuZCBgQ1hBQ1JVX1NFVF9JTklUYCBqdXN0IHRvIGJlIHN1cmUsIGJ1dCBJIGZlZWwgZmFpcmx5IGNvbmZpZGVudCBJJiMzOTt2ZSBnb3QgYSBnb29kIGdyYXNwIG9uIHRoZSBzY29wZSBvZiB0aGlzIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q1hBQ1JVX0NNRF9JTklUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL2N4YWNydS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz0xOTk9c3RhdGljIERFVklDRV9BVFRSX1JPKF9uYW1lKVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTIwMC1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoyMDE6I2RlZmluZSBDWEFDUlVfQ01EX0lOSVQoX25hbWUpIFxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjAyLXN0YXRpYyBERVZJQ0VfQVRUUl9SVyhfbmFtZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2OTMKCQkJCQkJCW91dHB1dDogMTMwCgkJCQkJCQl0aG91Z2h0czogMTg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBDWEFDUlUgVVNCIEFUTSBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUganVzdCBiZWVuIGxvb2tpbmcgb3ZlciB0aGlzIHBhdGNoIGFuZCBpdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBnaXZlbiBteSBleHBlcnRpc2UuIFRoZSBjb3JlIG9mIGl0IGlzIHRoZSBhZGRpdGlvbiBvZiBhIE5VTEwgcG9pbnRlciBjaGVjayB3aXRoaW4gdGhlIGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYCBzeXNmcyBoYW5kbGVycy4gSSByZWNvZ25pemUgaW1tZWRpYXRlbHkgdGhhdCB0aGVzZSBmdW5jdGlvbnMsIGFzIGluZGljYXRlZCBieSB0aGUgYERFVklDRV9BVFRSX1JXYCBtYWNybywgYXJlIGVzc2VudGlhbGx5IGZ1bmN0aW9uIHBvaW50ZXJzIOKAkyB0aGV5JiMzOTtyZSB0aGUgYF9zaG93YCBhbmQgYF9zdG9yZWAgZnVuY3Rpb25zIGFzc29jaWF0ZWQgd2l0aCBhIHN5c2ZzIGF0dHJpYnV0ZS4gQmVjYXVzZSBvZiB0aGlzLCB0aGV5ICp3b24mIzM5O3QqIGJlIGlubGluZWQuIFRoYXQmIzM5O3MgYW4gaW1wb3J0YW50IGRldGFpbCBmb3IgZnV6emluZy4KCk15IGNvbmNsdXNpb24/IFRoaXMgaXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLiBJIGNhbiBzZWUgdGhhdCB0aGUgcGF0Y2ggc3BlY2lmaWNhbGx5IG1lbnRpb25zIGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYCwgYW5kIHRoZSByZWFzb25pbmcgaXMgc291bmQ6IHRoZXNlIGhhbmRsZXJzICphcmUqIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSwgbWFraW5nIHRoZW0gcG90ZW50aWFsIHRhcmdldHMuIFRoZSBwYXRoIHRvIGV4cGxvaXQgdGhlbT8gVmlhIHN5c2ZzLCBjb3VwbGVkIHdpdGggdGhlIFVTQiBkdW1teV9oY2QuIFRoaXMgaXMgYSB2ZXJ5IHR5cGljYWwgYW5kIGVmZmVjdGl2ZSBmdXp6aW5nIHN0cmF0ZWd5IGluIHRoaXMgZG9tYWluLgoKVGhlcmVmb3JlLCB0aGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBzZXQgdG8gYHRydWVgLiBXZSBzaG91bGQgZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0cyBvbiBgYWRzbF9zdGF0ZV9zdG9yZWAgYW5kIGBhZHNsX2NvbmZpZ19zdG9yZWAsIGFzIHRob3NlIGFyZSB0aGUgJiMzNDtGb2N1c1N5bWJvbHMmIzM0Oy4gVGhlIHRhcmdldCBjb25maWd1cmF0aW9ucyB0aGF0IG5lZWQgdG8gYmUgZW5hYmxlZCBhcmUgYFVTQl9DWEFDUlVgLCBgVVNCX0FUTWAsIGBBVE1gLCBhbmQgYFVTQmAgdG8gbWFrZSBzdXJlIHdlIGhhdmUgdGhlIG5lY2Vzc2FyeSBwYXJ0cyBvZiB0aGUga2VybmVsLgoKUmlnaHQsIEkmIzM5O20gcmVhZHkgdG8gY2FsbCB0aGUgc2V0LXJlc3VsdHMgZnVuY3Rpb24gYW5kIGRvY3VtZW50IG15IGZpbmRpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCX0NYQUNSVSYjMzQ7LAogICAgJiMzNDtVU0JfQVRNJiMzNDssCiAgICAmIzM0O0FUTSYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthZHNsX3N0YXRlX3N0b3JlJiMzNDssCiAgICAmIzM0O2Fkc2xfY29uZmlnX3N0b3JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBOVUxMIHBvaW50ZXIgY2hlY2sgaW4gdGhlIGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYCBzeXNmcyBoYW5kbGVycyBmb3IgdGhlIGN4YWNydSBVU0IgQVRNIGRyaXZlci4gVGhlc2UgaGFuZGxlcnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgY2FuIGJlIGZ1enplZCB2aWEgc3lzZnMgYW5kIFVTQiBkdW1teV9oY2QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9DWEFDUlUmIzM0OywKICAgICYjMzQ7VVNCX0FUTSYjMzQ7LAogICAgJiMzNDtBVE0mIzM0OywKICAgICYjMzQ7VVNCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWRzbF9zdGF0ZV9zdG9yZSYjMzQ7LAogICAgJiMzNDthZHNsX2NvbmZpZ19zdG9yZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgTlVMTCBwb2ludGVyIGNoZWNrIGluIHRoZSBgYWRzbF9zdGF0ZV9zdG9yZWAgYW5kIGBhZHNsX2NvbmZpZ19zdG9yZWAgc3lzZnMgaGFuZGxlcnMgZm9yIHRoZSBjeGFjcnUgVVNCIEFUTSBkcml2ZXIuIFRoZXNlIGhhbmRsZXJzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIGNhbiBiZSBmdXp6ZWQgdmlhIHN5c2ZzIGFuZCBVU0IgZHVtbXlfaGNkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjo1MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjUxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBOVUxMIHBvaW50ZXIgY2hlY2sgKGBpbnN0YW5jZS1cdTAwM2V1c2JhdG0tXHUwMDNlYXRtX2RldiA9PSBOVUxMYCkgaW4gYGFkc2xfc3RhdGVfc3RvcmVgIGFuZCBgYWRzbF9jb25maWdfc3RvcmVgIHRvIHByZXZlbnQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgbWVjaGFuaXNtcyBzdWNoIGFzIHBhZ2UgZmF1bHRzIGFuZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciB1c2VyLXNwYWNlIGNvcGllcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxMTkxMTVjMTExNGVhZGNiZmNhNzkyYTM5ZWUxNmFlMzNjZTUyOWU0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTggMDY6NDk6MjcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMgYi9kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMKaW5kZXggNDI5YWMyMGE4OTk5Zi4uZGVlMTVmN2I3MGJmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvYXRtL2N4YWNydS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYwpAQCAtMzQ3LDcgJiM0MzszNDcsNyBAQCBzdGF0aWMgc3NpemVfdCBhZHNsX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJcmV0dXJuIC1FSU5WQUw7CiAJcmV0ID0gMDsKIAotCWlmIChpbnN0YW5jZSA9PSBOVUxMKQomIzQzOwlpZiAoaW5zdGFuY2UgPT0gTlVMTCB8fCBpbnN0YW5jZS0mZ3Q7dXNiYXRtLSZndDthdG1fZGV2ID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwogCiAJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmYW1wO2luc3RhbmNlLSZndDthZHNsX3N0YXRlX3NlcmlhbGl6ZSkpCkBAIC00NDQsNyAmIzQzOzQ0NCw3IEBAIHN0YXRpYyBzc2l6ZV90IGFkc2xfY29uZmlnX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKIAlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCiAJCXJldHVybiAtRUFDQ0VTOwogCi0JaWYgKGluc3RhbmNlID09IE5VTEwpCiYjNDM7CWlmIChpbnN0YW5jZSA9PSBOVUxMIHx8IGluc3RhbmNlLSZndDt1c2JhdG0tJmd0O2F0bV9kZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlwb3MgPSAwOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA4MgoJCQkJCQkJb3V0cHV0OiAxMjYKCQkJCQkJCXRob3VnaHRzOiAyMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgY3hhY3J1LmMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBhZGRpbmcgYSBjaGVjaywgYHx8IGluc3RhbmNlLSZndDt1c2JhdG0tJmd0O2F0bV9kZXYgPT0gTlVMTGAsIGluIGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzOiB0aGlzIGlzIGEgY2xhc3NpYyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgcHJldmVudGlvbi4gSSBrbm93IHRoZSBrZXJuZWwgaGFzIG1lY2hhbmlzbXMgbGlrZSBwYWdlIGZhdWx0cyBhbmQgS0FTQU4gdG8gY2F0Y2ggdGhlc2UsIGJ1dCB0aGlzIHByb2FjdGl2ZSBhcHByb2FjaCBpcyBjbGVhbmVyLgoKSSYjMzk7bSBxdWlja2x5IHZlcmlmeWluZyB0aGUgY29udGV4dC4gYGluc3RhbmNlYCBwb2ludHMgdG8gYHN0cnVjdCBjeGFjcnVfZGF0YWAsIGFuZCBkaWdnaW5nIGRvd24sIGBpbnN0YW5jZS0mZ3Q7dXNiYXRtYCBwb2ludHMgdG8gYSBgc3RydWN0IHVzYmF0bV9kYXRhYCwgd2hpY2ggaW4gdHVybiwgaGFzIGEgcG9pbnRlciBgYXRtX2RldmAgb2YgdHlwZSBgc3RydWN0IGF0bV9kZXZgLiBUaGUgcGF0Y2ggZ3VhcmRzIGFnYWluc3QgYWNjZXNzaW5nIGBhdG1fZGV2YCB3aGVuIGl0JiMzOTtzIE5VTEwsIGFzIHRoZSBjaGVjayBpbmRpY2F0ZXMuCgpHaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBmaXgsIEkgc2VlIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgYW55IGluZm9ybWF0aW9uIGxlYWsgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZS4gSXQmIzM5O3MgYSB0YXJnZXRlZCBkZWZlbnNlIGFnYWluc3QgYSBzcGVjaWZpYywgd2VsbC11bmRlcnN0b29kIGNsYXNzIG9mIGVycm9ycy4gVGhlIGtlcm5lbCYjMzk7cyBleGlzdGluZyBwcm90ZWN0aW9ucyBhcmUgdGhlcmUsIGJ1dCB0aGlzIHBhdGNoIGlzIGEgZ29vZCBiZWx0LWFuZC1zdXNwZW5kZXJzIGFwcHJvYWNoLgoKVGhlcmVmb3JlLCBhZnRlciBjb25zaWRlcmluZyB0aGlzIGNhcmVmdWxseSwgSSYjMzk7bSBjb25maWRlbnQgdGhhdCAqKk5lZWRzS01TQU4gc2hvdWxkIGJlIGZhbHNlKiogaW4gdGhpcyBjYXNlLiBNeSByZWFzb25pbmcgaXMgc29saWQsIGFuZCBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gZG9jdW1lbnQgaXQgYXMgc3VjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayAoYGluc3RhbmNlLVx1MDAzZXVzYmF0bS1cdTAwM2VhdG1fZGV2ID09IE5VTExgKSBpbiBgYWRzbF9zdGF0ZV9zdG9yZWAgYW5kIGBhZHNsX2NvbmZpZ19zdG9yZWAgdG8gcHJldmVudCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBtZWNoYW5pc21zIHN1Y2ggYXMgcGFnZSBmYXVsdHMgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29waWVzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgTlVMTCBwb2ludGVyIGNoZWNrIChgaW5zdGFuY2UtXHUwMDNldXNiYXRtLVx1MDAzZWF0bV9kZXYgPT0gTlVMTGApIGluIGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYCB0byBwcmV2ZW50IGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIG1lY2hhbmlzbXMgc3VjaCBhcyBwYWdlIGZhdWx0cyBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgdXNlci1zcGFjZSBjb3BpZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6NDk6MjguOTgzNTQ5NzcyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1ODAzMDE3NTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9DWEFDUlVcIixcbiAgICBcIlVTQl9BVE1cIixcbiAgICBcIkFUTVwiLFxuICAgIFwiVVNCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWRzbF9zdGF0ZV9zdG9yZVwiLFxuICAgIFwiYWRzbF9jb25maWdfc3RvcmVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBOVUxMIHBvaW50ZXIgY2hlY2sgKGBpbnN0YW5jZS1cXHUwMDNldXNiYXRtLVxcdTAwM2VhdG1fZGV2ID09IE5VTExgKSBpbiBgYWRzbF9zdGF0ZV9zdG9yZWAgYW5kIGBhZHNsX2NvbmZpZ19zdG9yZWAgdG8gcHJldmVudCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBtZWNoYW5pc21zIHN1Y2ggYXMgcGFnZSBmYXVsdHMgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29waWVzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayBpbiB0aGUgYGFkc2xfc3RhdGVfc3RvcmVgIGFuZCBgYWRzbF9jb25maWdfc3RvcmVgIHN5c2ZzIGhhbmRsZXJzIGZvciB0aGUgY3hhY3J1IFVTQiBBVE0gZHJpdmVyLiBUaGVzZSBoYW5kbGVycyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBjYW4gYmUgZnV6emVkIHZpYSBzeXNmcyBhbmQgVVNCIGR1bW15X2hjZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6NDk6MjguOTgzNTU0NjAyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzMwNTg4ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMTE5MTE1YzExMTRlYWRjYmZjYTc5MmEzOWVlMTZhZTMzY2U1MjllNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxOCAwNjo0OToyNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMgYi9kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmNcXG5pbmRleCA0MjlhYzIwYTg5OTlmLi5kZWUxNWY3YjcwYmY2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1xcbisrKyBiL2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1xcbkBAIC0zNDcsNyArMzQ3LDcgQEAgc3RhdGljIHNzaXplX3QgYWRzbF9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRyZXQgPSAwO1xcbiBcXG4tXFx0aWYgKGluc3RhbmNlID09IE5VTEwpXFxuK1xcdGlmIChpbnN0YW5jZSA9PSBOVUxMIHx8IGluc3RhbmNlLVxcdTAwM2V1c2JhdG0tXFx1MDAzZWF0bV9kZXYgPT0gTlVMTClcXG4gXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIFxcbiBcXHRpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKFxcdTAwMjZpbnN0YW5jZS1cXHUwMDNlYWRzbF9zdGF0ZV9zZXJpYWxpemUpKVxcbkBAIC00NDQsNyArNDQ0LDcgQEAgc3RhdGljIHNzaXplX3QgYWRzbF9jb25maWdfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbiBcXHRpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpXFxuIFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbiBcXG4tXFx0aWYgKGluc3RhbmNlID09IE5VTEwpXFxuK1xcdGlmIChpbnN0YW5jZSA9PSBOVUxMIHx8IGluc3RhbmNlLVxcdTAwM2V1c2JhdG0tXFx1MDAzZWF0bV9kZXYgPT0gTlVMTClcXG4gXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIFxcbiBcXHRwb3MgPSAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo0OTozMC4zMTQ3NDU5ODJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMjc5NDk4MzcyNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX0NYQUNSVVwiLFxuICAgIFwiVVNCX0FUTVwiLFxuICAgIFwiQVRNXCIsXG4gICAgXCJVU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhZHNsX3N0YXRlX3N0b3JlXCIsXG4gICAgXCJhZHNsX2NvbmZpZ19zdG9yZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBOVUxMIHBvaW50ZXIgY2hlY2sgaW4gdGhlIGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYCBzeXNmcyBoYW5kbGVycyBmb3IgdGhlIGN4YWNydSBVU0IgQVRNIGRyaXZlci4gVGhlc2UgaGFuZGxlcnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgY2FuIGJlIGZ1enplZCB2aWEgc3lzZnMgYW5kIFVTQiBkdW1teV9oY2QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDExOTExNWMxMTE0ZWFkY2JmY2E3OTJhMzllZTE2YWUzM2NlNTI5ZTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAwNjo0OToyNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYyBiL2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1xuaW5kZXggNDI5YWMyMGE4OTk5Zi4uZGVlMTVmN2I3MGJmNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1xuKysrIGIvZHJpdmVycy91c2IvYXRtL2N4YWNydS5jXG5AQCAtMzQ3LDcgKzM0Nyw3IEBAIHN0YXRpYyBzc2l6ZV90IGFkc2xfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdHJldCA9IDA7XG4gXG4tXHRpZiAoaW5zdGFuY2UgPT0gTlVMTClcbitcdGlmIChpbnN0YW5jZSA9PSBOVUxMIHx8IGluc3RhbmNlLVx1MDAzZXVzYmF0bS1cdTAwM2VhdG1fZGV2ID09IE5VTEwpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuIFx0aWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZShcdTAwMjZpbnN0YW5jZS1cdTAwM2VhZHNsX3N0YXRlX3NlcmlhbGl6ZSkpXG5AQCAtNDQ0LDcgKzQ0NCw3IEBAIHN0YXRpYyBzc2l6ZV90IGFkc2xfY29uZmlnX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbiBcdGlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSlcbiBcdFx0cmV0dXJuIC1FQUNDRVM7XG4gXG4tXHRpZiAoaW5zdGFuY2UgPT0gTlVMTClcbitcdGlmIChpbnN0YW5jZSA9PSBOVUxMIHx8IGluc3RhbmNlLVx1MDAzZXVzYmF0bS1cdTAwM2VhdG1fZGV2ID09IE5VTEwpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuIFx0cG9zID0gMDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjQ5OjMwLjMxNDc0ODc3MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MDU2MzEzMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVVNCIEFUTSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdG91Y2hlcyBgZHJpdmVycy91c2IvYXRtL2N4YWNydS5jYC4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIGEgY2hlY2s6IGB8fCBpbnN0YW5jZS1cdTAwM2V1c2JhdG0tXHUwMDNlYXRtX2RldiA9PSBOVUxMYCBpbiB0aGUgYGFkc2xfc3RhdGVfc3RvcmVgIGFuZCBgYWRzbF9jb25maWdfc3RvcmVgIGZ1bmN0aW9ucy4gSG1tLCB0aGVzZSBhcmUgc3lzZnMgc3RvcmUgZnVuY3Rpb25zIGZvciBhIFVTQiBBVE0gZHJpdmVyLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gTXkgaW5zdGluY3QgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgbmV3IGNvbmRpdGlvbmFsIGlzIHJlYWNoYWJsZSBhbmQsIGNydWNpYWxseSwgaWYgaXQgb3BlbnMgdXAgYSBmdXp6aW5nIG9wcG9ydHVuaXR5LiBVU0IgQVRNIGRyaXZlcnMgYXJlIGNlcnRhaW5seSB3aXRoaW4gbXkgYXJlYSBvZiBleHBlcnRpc2UuXG5cblRoZSBmYWN0IHRoYXQgdGhpcyBpbnZvbHZlcyBhIFVTQiBBVE0gZHJpdmVyIG1ha2VzIG1lIHRoaW5rIGFib3V0IGZ1enppbmcgdXNpbmcgYSBVU0IgZ2FkZ2V0L2R1bW15X2hjZCBzZXR1cC4gVGhpcyBpcyBhIGNvbW1vbiBhbmQgZWZmZWN0aXZlIGFwcHJvYWNoLiBTbywgdGhlIG5leHQgc3RlcCBpcyB0byByZWFsbHkgZGlnIGludG8gYGRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY2AgaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGVzZSBgYWRzbF9zdGF0ZV9zdG9yZWAgYW5kIGBhZHNsX2NvbmZpZ19zdG9yZWAgZnVuY3Rpb25zLCBzZWUgaG93IHRoZSBgaW5zdGFuY2VgIHN0cnVjdCBpcyBwb3B1bGF0ZWQsIGFuZCBmaWd1cmUgb3V0IHVuZGVyIHdoYXQgY29uZGl0aW9ucyBgaW5zdGFuY2UtXHUwMDNldXNiYXRtLVx1MDAzZWF0bV9kZXZgIG1pZ2h0IGJlIE5VTEwuIFRoYXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5LCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgaG93IHRvIHRyaWdnZXIgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo0OTozNC45MjAzODIzOTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyMjM2OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWRzbF9zdGF0ZV9zdG9yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTMxNT1zdGF0aWMgc3NpemVfdCBhZHNsX3N0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTMzMS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MzMyOnN0YXRpYyBzc2l6ZV90IGFkc2xfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zMzMtXFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo0OTozNC45NjQ2MDk2NDJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTQ5MDA3NjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gZm9yIGN4YWNydS5jKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgdGhlIGNvbXBpbGF0aW9uIG9yIGxpbmtpbmcgb2YgYGN4YWNydS5jYC4gVGhpcyBpc24ndCBqdXN0IGEgY2FzdWFsIGN1cmlvc2l0eTsga25vd2luZyB0aGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIHN5c3RlbSdzIGRlcGVuZGVuY2llcyBhbmQgcG90ZW50aWFsbHkgbW9kaWZ5aW5nIGl0cyBiZWhhdmlvci4gSSdtIHRoaW5raW5nIEknbGwgc3RhcnQgYnkgbG9va2luZyBhdCB0aGUgbWFrZWZpbGVzLCBpZiB0aGV5J3JlIHN0YW5kYXJkIGZvciB0aGlzIHByb2plY3QuIFRoZXkgdXN1YWxseSBjb250YWluIHRoZSBidWlsZCBsb2dpYy4gSSBuZWVkIHRvIGRldGVybWluZSB3aGF0IHZhcmlhYmxlcyBvciBmbGFncyBhcmUgc2V0IHRoYXQgY29udHJvbCB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgc291cmNlIGZpbGUuXG5cbklmIGl0J3Mgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMgaW4gdGhlIG1ha2VmaWxlcywgSSdsbCBuZWVkIHRvIGNvbnNpZGVyIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGlzIHN0cnVjdHVyZWQuIEFyZSB0aGVyZSBhbnkgY29uZmlndXJhdGlvbiBzY3JpcHRzIHRoYXQgZ2VuZXJhdGUgdGhlIG1ha2VmaWxlcz8gSWYgc28sIHRob3NlIGFyZSB0aGUgcmVhbCBrZXkuIEkgbmVlZCB0byB0cmFjZSB0aGUgdmFyaWFibGVzIGJhY2sgdG8gdGhlaXIgZGVmaW5pdGlvbnMuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZmxhZ3MgKGAjaWZkZWZgLCBgLURgKSwgaW5jbHVzaW9uIG9mIHNvdXJjZSBmaWxlcyBiYXNlZCBvbiBmZWF0dXJlIGZsYWdzLCBvciBzcGVjaWZpYyB0YXJnZXRzIHRoYXQgaW5jbHVkZSBgY3hhY3J1LmNgIGFzIGEgZGVwZW5kZW5jeS5cblxuVGhpcyBjb3VsZCByYW5nZSBmcm9tIGEgc2ltcGxlIGBpZmVxYCBzdGF0ZW1lbnQgdG8gYSBtb3JlIGludHJpY2F0ZSBjYXNjYWRlIG9mIGluY2x1ZGVzIGFuZCB2YXJpYWJsZSBhc3NpZ25tZW50cy4gSSdsbCBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBidWlsZCBzeXN0ZW0gYW5kIGNob29zZSB0aGUgbW9zdCBlZmZlY3RpdmUgc2VhcmNoIHN0cmF0ZWd5LiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IEknbGwgYmUgbG9va2luZyBmb3IgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgb3IgdGFyZ2V0cy4gVGltZSB0byBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NDQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo0OTo0MC4xMTM2MTkyMTNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ0MzQ2NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3hhY3J1Lm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvYXRtL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2F0bS9NYWtlZmlsZS00LSNcXG5kcml2ZXJzL3VzYi9hdG0vTWFrZWZpbGU6NTpvYmotJChDT05GSUdfVVNCX0NYQUNSVSlcXHQrPSBjeGFjcnUub1xcbmRyaXZlcnMvdXNiL2F0bS9NYWtlZmlsZS02LW9iai0kKENPTkZJR19VU0JfU1BFRURUT1VDSClcXHQrPSBzcGVlZHRjaC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjQ5OjQwLjE1ODA1NzI5OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNTQ0OTgxMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipDaGVja2luZyB0aGUgVVNCIENYQUNSVSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBzdGF0dXMgb2YgYENPTkZJR19VU0JfQ1hBQ1JVYC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGdvaW5nIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2Ug4oCTIHRoZSBgS2NvbmZpZ2AgZmlsZSB3aXRoaW4gdGhlIFVTQiBBVE0gZHJpdmVyIGRpcmVjdG9yeS4gVGhhdCdzIGBkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZ2AuIFRoaXMgc2hvdWxkIGJlIGEgc3RyYWlnaHRmb3J3YXJkIGNoZWNrLiBJJ2xsIG5lZWQgdG8gc2VlIGlmIGl0J3MgZGVmaW5lZCwgaWYgaXQncyB0cmlzdGF0ZWQsIGFuZCBhbnkgZGVwZW5kZW5jaWVzIG9yIGRlZmF1bHQgdmFsdWVzLiBLbm93aW5nIHRoZSBjb250ZXh0IHdpdGhpbiB0aGUgYEtjb25maWdgIGlzIGNydWNpYWwsIGVzcGVjaWFsbHkgcmVnYXJkaW5nIGl0cyBsb2NhdGlvbiB3aXRoaW4gdGhlIHNvdXJjZSB0cmVlLiBUaGlzIHVzdWFsbHkgaGVscHMgbWUgdW5kZXJzdGFuZCB3aGljaCBvdGhlciByZWxhdGVkIG9wdGlvbnMgb3IgZHJpdmVycyBtaWdodCBiZSByZWxldmFudC4gRXNzZW50aWFsbHksIEknbSB0cnlpbmcgdG8gcXVpY2tseSBlc3RhYmxpc2ggd2hlcmUgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBzdGFuZHMgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA3NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjQ5OjQzLjIxMjU1Nzc1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NTIxMzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBVU0JfQ1hBQ1JVXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2F0bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2F0bS9LY29uZmlnPTIwPWNvbmZpZyBVU0JfU1BFRURUT1VDSFxcbi0tXFxuZHJpdmVycy91c2IvYXRtL0tjb25maWctMzEtXFxuZHJpdmVycy91c2IvYXRtL0tjb25maWc6MzI6Y29uZmlnIFVTQl9DWEFDUlVcXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy0zMy1cXHR0cmlzdGF0ZSBcXFwiQ29uZXhhbnQgQWNjZXNzUnVubmVyIFVTQiBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo0OTo0My4yNTcwODI3MTRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODc1NjMwNjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyBEZXBlbmRlbmNpZXMqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGF0IHBsYXkgaGVyZS4gVGhpcyBpc24ndCBqdXN0IGFib3V0IGlkZW50aWZ5aW5nIHRoZSBkaXJlY3QgcmVsYXRpb25zaGlwczsgSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIGNoYW5nZXMgb3IgZmFpbHVyZXMgd2l0aGluIHRob3NlIGRlcGVuZGVudCBjb21wb25lbnRzLiBJJ20gYWxyZWFkeSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgYm90dGxlbmVja3MsIHNpbmdsZSBwb2ludHMgb2YgZmFpbHVyZSwgYW5kIHRoZSBjYXNjYWRpbmcgZWZmZWN0cyBhIHByb2JsZW0gaW4gb25lIGFyZWEgY291bGQgdHJpZ2dlciBhY3Jvc3MgdGhlIHN5c3RlbS4gSXQncyBhYm91dCBidWlsZGluZyBhIG1lbnRhbCBtYXAgb2YgdGhlIHN5c3RlbSdzIGFyY2hpdGVjdHVyZSBhbmQgcGlucG9pbnRpbmcgdGhlIGNyaXRpY2FsIHBhdGh3YXlzLiBJJ20gbWVudGFsbHkgcGFyc2luZyB0aGUgY29kZSwgbGlicmFyeSB2ZXJzaW9ucywgYW5kIGV4dGVybmFsIHNlcnZpY2VzIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0aGlzIHRoaW5nIGxlYW5zIG9uIGFuZCBob3cgcm9idXN0IChvciBmcmFnaWxlKSB0aG9zZSBsaW5rcyBhcmUuIEVzc2VudGlhbGx5LCBJJ20gdHJ5aW5nIHRvIGlkZW50aWZ5IHRoZSB3ZWFrIGxpbmtzIGFuZCBhbnRpY2lwYXRlIHdoZXJlIHByb2JsZW1zIG1pZ2h0IGFyaXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzk0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo0OTo0Ni4xMzI3MTU3NzdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MzE2NTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvYXRtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvYXRtL0tjb25maWc9Nj1tZW51Y29uZmlnIFVTQl9BVE1cXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJVU0IgRFNMIG1vZGVtIHN1cHBvcnRcXFwiXFxuZHJpdmVycy91c2IvYXRtL0tjb25maWc6ODpcXHRkZXBlbmRzIG9uIEFUTVxcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTktXFx0c2VsZWN0IENSQzMyXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjQ5OjQ2LjE3ODAzNTMzMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzQxMDM1NzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBVU0ItQVRNIERlcGVuZGVuY2llcyBpbiB0aGUgS2VybmVsIENvbmZpZyoqXG5cblJpZ2h0LCBsZXQgbWUgc2VlLi4uIEknbSBsb29raW5nIGF0IGBVU0JfQ1hBQ1JVYC4gVGhlIGJ1aWxkIHN5c3RlbSBpcyBmbGFnZ2luZyBpdCwgYW5kIHRoZSBkZXBlbmRlbmN5IGNoYWluIGlzIG1ha2luZyBtZSB0aGluay4gT2theSwgc28gYFVTQl9DWEFDUlVgIGxlYW5zIG9uIGBVU0JfQVRNYCwgd2hpY2gsIHVuc3VycHJpc2luZ2x5LCBkZXBlbmRzIG9uIGBBVE1gIGl0c2VsZi4gVGhhdCdzIGFsbCBsb2dpY2FsIHNvIGZhci4gTm93IHRoZSBjcml0aWNhbCBiaXQ6IEknbSBwcmV0dHkgc3VyZSBgVVNCX0NYQUNSVWAgaXMgbmVzdGVkICppbnNpZGUqIHRoZSBgbWVudWNvbmZpZ2Agb3B0aW9uIGZvciBgVVNCX0FUTWAuIEJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGF0LiBMZXQncyBub3QgbWFrZSBhc3N1bXB0aW9ucy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoZSBVU0IgQVRNIGRyaXZlcnMuIEknbSBnb2luZyB0byBqdW1wIGludG8gYGRyaXZlcnMvdXNiL2F0bS9LY29uZmlnYCB0byB2ZXJpZnkgdGhlIGV4YWN0IGNvbmZpZyBzdHJ1Y3R1cmUgYW5kIGl0cyBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoaXMgY2xlYXJseSBiZWZvcmUgSSBtYWtlIGFueSBtb2RpZmljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzAwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6NDk6NDkuOTE5MDczNTE1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2F0bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBVU0IvQVRNIERTTCBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgVVNCX0FUTVxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIlVTQiBEU0wgbW9kZW0gc3VwcG9ydFxcXCJcXG4gICA4OlxcdFxcdGRlcGVuZHMgb24gQVRNXFxuICAgOTpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IGEgVVNCIERpZ2l0YWwgU3Vic2NyaWJlciBMaW5lIChEU0wpXFxuICAxMjpcXHRcXHQgIG1vZGVtIHRvIHlvdXIgY29tcHV0ZXIncyBVU0IgcG9ydC4gIFlvdSB3aWxsIHRoZW4gbmVlZCB0byBjaG9vc2UgeW91clxcbiAgMTM6XFx0XFx0ICBtb2RlbSBmcm9tIHRoZSBsaXN0IGJlbG93LlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAgMTY6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdXNiYXRtLlxcbiAgMTc6XFx0XFxuICAxODpcXHRpZiBVU0JfQVRNXFxuICAxOTpcXHRcXG4gIDIwOlxcdGNvbmZpZyBVU0JfU1BFRURUT1VDSFxcbiAgMjE6XFx0XFx0dHJpc3RhdGUgXFxcIlNwZWVkdG91Y2ggVVNCIHN1cHBvcnRcXFwiXFxuICAyMjpcXHRcXHRzZWxlY3QgRldfTE9BREVSXFxuICAyMzpcXHRcXHRoZWxwXFxuICAyNDpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYW4gU3BlZWRUb3VjaCBVU0Igb3IgU3BlZWRUb3VjaCAzMzBcXG4gIDI1OlxcdFxcdCAgbW9kZW0uICBJbiBvcmRlciB0byB1c2UgeW91ciBtb2RlbSB5b3Ugd2lsbCBuZWVkIHRvIGluc3RhbGwgdGhlIFxcbiAgMjY6XFx0XFx0ICB0d28gcGFydHMgb2YgdGhlIGZpcm13YXJlLCBleHRyYWN0ZWQgYnkgdGhlIHVzZXIgc3BhY2UgdG9vbHM7IHNlZVxcbiAgMjc6XFx0XFx0ICBcXHUwMDNjaHR0cDovL3d3dy5saW51eC11c2Iub3JnL1NwZWVkVG91Y2gvXFx1MDAzZSBmb3IgZGV0YWlscy5cXG4gIDI4OlxcdFxcbiAgMjk6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gIDMwOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNwZWVkdGNoLlxcbiAgMzE6XFx0XFxuICAzMjpcXHRjb25maWcgVVNCX0NYQUNSVVxcbiAgMzM6XFx0XFx0dHJpc3RhdGUgXFxcIkNvbmV4YW50IEFjY2Vzc1J1bm5lciBVU0Igc3VwcG9ydFxcXCJcXG4gIDM0OlxcdFxcdHNlbGVjdCBGV19MT0FERVJcXG4gIDM1OlxcdFxcdGhlbHBcXG4gIDM2OlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhbiBBRFNMIFVTQiBtb2RlbSBiYXNlZCBvbiB0aGUgQ29uZXhhbnRcXG4gIDM3OlxcdFxcdCAgQWNjZXNzUnVubmVyIGNoaXBzZXQuICBJbiBvcmRlciB0byB1c2UgeW91ciBtb2RlbSB5b3Ugd2lsbCBuZWVkIHRvXFxuICAzODpcXHRcXHQgIGluc3RhbGwgdGhlIGZpcm13YXJlLCBleHRyYWN0ZWQgYnkgdGhlIHVzZXIgc3BhY2UgdG9vbHM7IHNlZVxcbiAgMzk6XFx0XFx0ICBcXHUwMDNjaHR0cDovL2FjY2Vzc3J1bm5lci5zb3VyY2Vmb3JnZS5uZXQvXFx1MDAzZSBmb3IgZGV0YWlscy5cXG4gIDQwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo0OTo0OS45MTkxMzY4NzVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5NTU0NDE2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBVU0IgRHJpdmVycyBhbmQgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBkcml2ZXIgc2l0dWF0aW9uLCBhbmQgaXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBhdCBmaXJzdCBnbGFuY2UuIFdlIGRlZmluaXRlbHkgbmVlZCB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIGJvdGggYFVTQl9BVE1gIGFuZCBgVVNCX0NYQUNSVWAgZHJpdmVycy4gTm8gc3VycHJpc2VzIHRoZXJlLiBOb3csIHRoZSBrZXkgaXMgdGhlIGRlcGVuZGVuY3kuIEkgcmVtZW1iZXIgYFVTQl9BVE1gIHJlbGllcyBvbiBgQVRNYCwgc28gd2UgbmVlZCB0byBlbnN1cmUgdGhhdCdzIGhhbmRsZWQgY29ycmVjdGx5IGluIHRoZSBjb25maWd1cmF0aW9uLiBUaGF0IG1ha2VzIHNlbnNlLCBjb21tb24gYXJjaGl0ZWN0dXJlLiBOb3csIGJlZm9yZSBJIHByb2NlZWQgSSByZWFsbHkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYEFUTWAgaXRzZWxmIGhhcyBhbnkgZnVydGhlciB1cHN0cmVhbSBkZXBlbmRlbmNpZXMuIEkgYmV0dGVyIGdvIGFuZCBjaGVjayBpdCdzIGRlcGVuZGVuY2llcyBzbyBJIGRvbid0IG1pc3Mgc29tZXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTU3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo0OTo1My4yMTQ2ODM5NDJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDMyMTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBVE1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2F0bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9hdG0vS2NvbmZpZy01LVxcbm5ldC9hdG0vS2NvbmZpZzo2OmNvbmZpZyBBVE1cXG5uZXQvYXRtL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiQXN5bmNocm9ub3VzIFRyYW5zZmVyIE1vZGUgKEFUTSlcXFwiXFxuLS1cXG5uZXQvYXRtL0tjb25maWctMjEtXFxubmV0L2F0bS9LY29uZmlnOjIyOmNvbmZpZyBBVE1fQlIyNjg0XFxubmV0L2F0bS9LY29uZmlnLTIzLVxcdHRyaXN0YXRlIFxcXCJSRkMxNDgzLzI2ODQgQnJpZGdlZCBwcm90b2NvbHNcXFwiXFxuLS1cXG5uZXQvYXRtL0tjb25maWctMzAtXFxubmV0L2F0bS9LY29uZmlnOjMxOmNvbmZpZyBBVE1fQlIyNjg0X0lQRklMVEVSXFxubmV0L2F0bS9LY29uZmlnLTMyLVxcdGJvb2wgXFxcIlBlci1WQyBJUCBmaWx0ZXIga2x1ZGdlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo0OTo1My4yNTkxMjEzMDdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg0ODUxMTgxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBVE0gQ29uZmlndXJhdGlvbjogQSBRdWljayBTY2FuKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSB0aGlua2luZywgXCJXaGVyZSB3b3VsZCB0aGUgQVRNIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBiZT9cIiBHaXZlbiB0aGUgc3RydWN0dXJlIEknbSBmYW1pbGlhciB3aXRoLCBgbmV0L2AgZmVlbHMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBTcGVjaWZpY2FsbHksIGBuZXQvYXRtL2AganVtcHMgb3V0IGFzIHRoZSBtb3N0IGxpa2VseSBzdWJkaXJlY3RvcnkuIFNvLCBteSBtZW50YWwgcHJvY2VzcyBpcyBsZWFkaW5nIG1lIGRpcmVjdGx5IHRvIGBuZXQvYXRtL0tjb25maWdgLiBUaGF0IGZpbGUgaXMgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBBVE0tcmVsYXRlZCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJdCdzIHRoZSBzdGFuZGFyZCBsb2NhdGlvbiBmb3IgbWFuYWdpbmcgZGVwZW5kZW5jaWVzIGFuZCBzZWxlY3RpbmcgYnVpbGQgb3B0aW9ucyB3aXRoaW4gdGhhdCBwYXJ0IG9mIHRoZSBrZXJuZWwgdHJlZS4gQSBxdWljayBjaGVjayBvZiB0aGF0IGZpbGUgc2hvdWxkIGdpdmUgbWUgYSBwcmV0dHkgY2xlYXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDkzNywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjQ5OjU2LjEwNzYzNTcwN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYXRtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgQXN5bmNocm9ub3VzIFRyYW5zZmVyIE1vZGUgKEFUTSlcXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIEFUTVxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIkFzeW5jaHJvbm91cyBUcmFuc2ZlciBNb2RlIChBVE0pXFxcIlxcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBBVE0gaXMgYSBoaWdoLXNwZWVkIG5ldHdvcmtpbmcgdGVjaG5vbG9neSBmb3IgTG9jYWwgQXJlYSBOZXR3b3Jrc1xcbiAgMTA6XFx0XFx0ICBhbmQgV2lkZSBBcmVhIE5ldHdvcmtzLiAgSXQgdXNlcyBhIGZpeGVkIHBhY2tldCBzaXplIGFuZCBpc1xcbiAgMTE6XFx0XFx0ICBjb25uZWN0aW9uIG9yaWVudGVkLCBhbGxvd2luZyBmb3IgdGhlIG5lZ290aWF0aW9uIG9mIG1pbmltdW1cXG4gIDEyOlxcdFxcdCAgYmFuZHdpZHRoIHJlcXVpcmVtZW50cy5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0XFx0ICBJbiBvcmRlciB0byBwYXJ0aWNpcGF0ZSBpbiBhbiBBVE0gbmV0d29yaywgeW91ciBMaW51eCBib3ggbmVlZHMgYW5cXG4gIDE1OlxcdFxcdCAgQVRNIG5ldHdvcmtpbmcgY2FyZC4gSWYgeW91IGhhdmUgdGhhdCwgc2F5IFkgaGVyZSBhbmQgdG8gdGhlIGRyaXZlclxcbiAgMTY6XFx0XFx0ICBvZiB5b3VyIEFUTSBjYXJkIGJlbG93LlxcbiAgMTc6XFx0XFxuICAxODpcXHRcXHQgIE5vdGUgdGhhdCB5b3UgbmVlZCBhIHNldCBvZiB1c2VyLXNwYWNlIHByb2dyYW1zIHRvIGFjdHVhbGx5IG1ha2UgdXNlXFxuICAxOTpcXHRcXHQgIG9mIEFUTS4gIFNlZSB0aGUgZmlsZSBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYXRtLnJzdFxcdTAwM2UgZm9yXFxuICAyMDpcXHRcXHQgIGZ1cnRoZXIgZGV0YWlscy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6NDk6NTYuMTA3NzA0NDM2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTkzMjkwOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6XG5cbioqQW5hbHl6aW5nIHRoZSBBVE0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBmaXJzdCB0aGluZywgYEFUTWAgaGFzIG5vIGxpc3RlZCBkZXBlbmRlbmNpZXMsIHdoaWNoIGlzIGdvb2QuIFRoYXQgbWFrZXMgaXQgZWFzaWVyIHRvIGV2YWx1YXRlIGluIGlzb2xhdGlvbi4gTm93LCB0aGUgbWVhdCBvZiB0aGUgZml4IGlzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYC4gVGhvc2UgYXJlIHN5c2ZzIHN0b3JlIGZ1bmN0aW9ucywgd2hpY2ggc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIHNvbWUga2luZCBvZiBjb25maWd1cmF0aW9uIG9yIHN0YXRlIHBlcnNpc3RlbmNlIG1lY2hhbmlzbS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB3aGVyZSB0aG9zZSBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkLCBzbyBsZXQncyBjaGVjayBgZHJpdmVycy91c2IvYXRtL2N4YWNydS5jYC4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgdnVsbmVyYWJsZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDMwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo0OTo1OS4zMjcwMzYxOTVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMzA6XFx0fVxcbiAzMzE6XFx0XFxuIDMzMjpcXHRzdGF0aWMgc3NpemVfdCBhZHNsX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4gMzMzOlxcdFxcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4gMzM0OlxcdHtcXG4gMzM1OlxcdFxcdHN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UgPSB0b191c2JhdG1fZHJpdmVyX2RhdGEoXFxuIDMzNjpcXHRcXHRcXHRcXHR0b191c2JfaW50ZXJmYWNlKGRldikpO1xcbiAzMzc6XFx0XFx0aW50IHJldDtcXG4gMzM4OlxcdFxcdGludCBwb2xsID0gLTE7XFxuIDMzOTpcXHRcXHRjaGFyIHN0cl9jbWRbOF07XFxuIDM0MDpcXHRcXHRpbnQgbGVuID0gc3RybGVuKGJ1Zik7XFxuIDM0MTpcXHRcXG4gMzQyOlxcdFxcdGlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSlcXG4gMzQzOlxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbiAzNDQ6XFx0XFxuIDM0NTpcXHRcXHRyZXQgPSBzc2NhbmYoYnVmLCBcXFwiJTdzXFxcIiwgc3RyX2NtZCk7XFxuIDM0NjpcXHRcXHRpZiAocmV0ICE9IDEpXFxuIDM0NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMzQ4OlxcdFxcdHJldCA9IDA7XFxuIDM0OTpcXHRcXG4gMzUwOlxcdFxcdGlmIChpbnN0YW5jZSA9PSBOVUxMIHx8IGluc3RhbmNlLVxcdTAwM2V1c2JhdG0tXFx1MDAzZWF0bV9kZXYgPT0gTlVMTClcXG4gMzUxOlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiAzNTI6XFx0XFxuIDM1MzpcXHRcXHRpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKFxcdTAwMjZpbnN0YW5jZS1cXHUwMDNlYWRzbF9zdGF0ZV9zZXJpYWxpemUpKVxcbiAzNTQ6XFx0XFx0XFx0cmV0dXJuIC1FUkVTVEFSVFNZUztcXG4gMzU1OlxcdFxcbiAzNTY6XFx0XFx0aWYgKCFzdHJjbXAoc3RyX2NtZCwgXFxcInN0b3BcXFwiKSB8fCAhc3RyY21wKHN0cl9jbWQsIFxcXCJyZXN0YXJ0XFxcIikpIHtcXG4gMzU3OlxcdFxcdFxcdHJldCA9IGN4YWNydV9jbShpbnN0YW5jZSwgQ01fUkVRVUVTVF9DSElQX0FEU0xfTElORV9TVE9QLCBOVUxMLCAwLCBOVUxMLCAwKTtcXG4gMzU4OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIDM1OTpcXHRcXHRcXHRcXHRhdG1fZXJyKGluc3RhbmNlLVxcdTAwM2V1c2JhdG0sIFxcXCJjaGFuZ2UgYWRzbCBzdGF0ZTpcXFwiXFxuIDM2MDpcXHRcXHRcXHRcXHRcXHRcXFwiIENISVBfQURTTF9MSU5FX1NUT1AgcmV0dXJuZWQgJWRcXFxcblxcXCIsIHJldCk7XFxuIDM2MTpcXHRcXG4gMzYyOlxcdFxcdFxcdFxcdHJldCA9IC1FSU87XFxuIDM2MzpcXHRcXHRcXHR9IGVsc2Uge1xcbiAzNjQ6XFx0XFx0XFx0XFx0cmV0ID0gbGVuO1xcbiAzNjU6XFx0XFx0XFx0XFx0cG9sbCA9IENYUE9MTF9TVE9QUEVEO1xcbiAzNjY6XFx0XFx0XFx0fVxcbiAzNjc6XFx0XFx0fVxcbiAzNjg6XFx0XFxuIDM2OTpcXHRcXHQvKiBMaW5lIHN0YXR1cyBpcyBvbmx5IHVwZGF0ZWQgZXZlcnkgc2Vjb25kXFxuIDM3MDpcXHRcXHQgKiBhbmQgdGhlIGRldmljZSBhcHBlYXJzIHRvIG9ubHkgcmVhY3QgdG9cXG4gMzcxOlxcdFxcdCAqIFNUQVJUL1NUT1AgZXZlcnkgc2Vjb25kIHRvby4gV2FpdCAxLjVzIHRvXFxuIDM3MjpcXHRcXHQgKiBiZSBzdXJlIHRoYXQgcmVzdGFydCB3aWxsIGhhdmUgYW4gZWZmZWN0LiAqL1xcbiAzNzM6XFx0XFx0aWYgKCFzdHJjbXAoc3RyX2NtZCwgXFxcInJlc3RhcnRcXFwiKSlcXG4gMzc0OlxcdFxcdFxcdG1zbGVlcCgxNTAwKTtcXG4gMzc1OlxcdFxcbiAzNzY6XFx0XFx0aWYgKCFzdHJjbXAoc3RyX2NtZCwgXFxcInN0YXJ0XFxcIikgfHwgIXN0cmNtcChzdHJfY21kLCBcXFwicmVzdGFydFxcXCIpKSB7XFxuIDM3NzpcXHRcXHRcXHRyZXQgPSBjeGFjcnVfY20oaW5zdGFuY2UsIENNX1JFUVVFU1RfQ0hJUF9BRFNMX0xJTkVfU1RBUlQsIE5VTEwsIDAsIE5VTEwsIDApO1xcbiAzNzg6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4gMzc5OlxcdFxcdFxcdFxcdGF0bV9lcnIoaW5zdGFuY2UtXFx1MDAzZXVzYmF0bSwgXFxcImNoYW5nZSBhZHNsIHN0YXRlOlxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6NDk6NTkuMzI3MTQ0MTc1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIyNjMxMjc5NzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFN5c2ZzIFN0b3JlIEZ1bmN0aW9uIGZvciBWdWxuZXJhYmlsaXRpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGl0J3MgYSBzeXNmcyBzdG9yZSBmdW5jdGlvbi4gVGhhdCdzIGEgcmVkIGZsYWcg4oCTIHN5c2ZzIGVudHJpZXMgYXJlIHVzZXItYWNjZXNzaWJsZSwgd2hpY2ggbWVhbnMgdGhleSdyZSBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLiBBbmQsIHllcywgSSByZWNhbGwgc3l6a2FsbGVyIGFjdGl2ZWx5IHRhcmdldHMgc3lzZnMgZW50cmllcy4gVGhpcyBwYXJ0aWN1bGFyIGRldmljZSBpcyBVU0IsIHdoaWNoIGlzIGdvb2QuIFRoYXQgbWVhbnMgSSBjYW4gcG90ZW50aWFsbHkgZW11bGF0ZSBpdCB1c2luZyBVU0IgZHVtbXlfaGNkIGZvciB0ZXN0aW5nLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGludHJvZHVjZXMgYSBjaGVjayBmb3IgYGluc3RhbmNlLVx1MDAzZXVzYmF0bS1cdTAwM2VhdG1fZGV2ID09IE5VTExgLiBJbnRlcmVzdGluZy4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgb2YgdGhhdCBjaGVjay4gVGhlIG1lYXQgb2YgdGhlIHBhdGNoIHNlZW1zIHRvIGNlbnRlciBhcm91bmQgYGFkc2xfc3RhdGVfc3RvcmVgIGFuZCBgYWRzbF9jb25maWdfc3RvcmVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhvc2UgYXJlIHRoZSBmdW5jdGlvbnMgdG8gZm9jdXMgb24uIFdhaXQgYSBtaW51dGUuLi4gKnN0YXRpYyo/IE9rYXksIHRoYXQgY2hhbmdlcyB0aGluZ3MuIFN0YXRpYyBmdW5jdGlvbnMgY2FuIHN0aWxsIGJlIGNhbGxlZCBmcm9tIG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBidXQgYXJlIGxpa2VseSBub3QgY2FsbGVkIGRpcmVjdGx5IHRocm91Z2ggdGhlIHN5c2ZzIGVudHJ5LiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrLiBMZXQncyBzZWUgaWYgdGhleSBhcmUgdXNlZCB3aXRoaW4gc29tZSBtYWNyby4gVGhhdCdzIHVzdWFsbHkgdGhlIGluZGljYXRvciBvZiBob3cgYW5kIHdoZXJlIHRoZXkgYXJlIGNhbGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjUyMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjUwOjIxLjk1ODQyNjAxN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1OTQwODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWRzbF9zdGF0ZV9zdG9yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTMxNT1zdGF0aWMgc3NpemVfdCBhZHNsX3N0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTMzMS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MzMyOnN0YXRpYyBzc2l6ZV90IGFkc2xfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zMzMtXFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo1MDoyMi4wMDYwMjIwNjJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI4MjM5OTE3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlLCB0YWlsb3JlZCBmb3IgYW5vdGhlciBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBBRFNMIFN0YXRlIE1hbmFnZW1lbnQqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB3ZSdyZSBoYW5kbGluZyBBRFNMIHN0YXRlIOKAkyBib3RoIGRpc3BsYXlpbmcgaXQgYW5kIHBlcnNpc3RpbmcgaXQuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gcGlucG9pbnRpbmcgdGhlIGNvZGUgcmVzcG9uc2libGUgZm9yIHRoZXNlIG9wZXJhdGlvbnMuIFNvLCBJJ20gdGhpbmtpbmcsIGxldCdzIHN0YXJ0IHdpdGggYSB0YXJnZXRlZCBzZWFyY2guIEknbGwgYmVnaW4gYnkgbG9va2luZyBmb3IgdXNhZ2VzIG9mIGZ1bmN0aW9ucyBvciBtZXRob2RzIHRoYXQgbGlrZWx5IGRlYWwgd2l0aCBzaG93aW5nIHRoZSBBRFNMIHN0YXRlLCBwZXJoYXBzIHNvbWV0aGluZyBuYW1lZCBgYWRzbF9zdGF0ZV9zaG93YC4gVGhlbiwgSSdsbCBtb3ZlIG9uIHRvIHRob3NlIGludm9sdmVkIGluIHN0b3JpbmcgdGhhdCBzdGF0ZSwgbGlrZSBgYWRzbF9zdGF0ZV9zdG9yZWAuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50IHRvIGV4cGxvcmUgdGhlIHJlbGV2YW50IG1vZHVsZXMgYW5kIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgZmxvdy4gS25vd2luZyBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSAqdXNlZCogaXMga2V5LCBub3QganVzdCB3aGVyZSB0aGV5J3JlIGRlZmluZWQuIFRoYXTigJlzIHdoZXJlIHRoZSByZWFsIGluc2lnaHRzIGFyZS4gVGhpcyBhcHByb2FjaCB0eXBpY2FsbHkgZ2V0cyBtZSB0byB3aGVyZSBJIG5lZWQgdG8gYmUgcHJldHR5IHF1aWNrbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwNzQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo1MDoyNS4yODg0MjQ0MzdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NTE1NjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFkc2xfc3RhdGVfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9MTcwPXN0cnVjdCBjeGFjcnVfZGF0YSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTc1LVxcdGludCBsaW5lX3N0YXR1cztcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTc2OlxcdHN0cnVjdCBtdXRleCBhZHNsX3N0YXRlX3NlcmlhbGl6ZTtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTc3LVxcdGludCBhZHNsX3N0YXR1cztcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz0zMDM9c3RhdGljIHNzaXplX3QgbWFjX2FkZHJlc3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzE0LVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzozMTU6c3RhdGljIHNzaXplX3QgYWRzbF9zdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzE2LVxcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzMxLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzozMzI6c3RhdGljIHNzaXplX3QgYWRzbF9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTMzMy1cXHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzUyLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzozNTM6XFx0aWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZShcXHUwMDI2aW5zdGFuY2UtXFx1MDAzZWFkc2xfc3RhdGVfc2VyaWFsaXplKSlcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzU0LVxcdFxcdHJldHVybiAtRVJFU1RBUlRTWVM7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNDI0LVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo0MjU6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZpbnN0YW5jZS1cXHUwMDNlYWRzbF9zdGF0ZV9zZXJpYWxpemUpO1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy00MjYtXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9NzcxPXN0YXRpYyBpbnQgY3hhY3J1X2F0bV9zdGFydChzdHJ1Y3QgdXNiYXRtX2RhdGEgKnVzYmF0bV9pbnN0YW5jZSxcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03ODktXFx0Lyogc3RhcnQgQURTTCAqL1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo3OTA6XFx0bXV0ZXhfbG9jayhcXHUwMDI2aW5zdGFuY2UtXFx1MDAzZWFkc2xfc3RhdGVfc2VyaWFsaXplKTtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzkxLVxcdHJldCA9IGN4YWNydV9jbShpbnN0YW5jZSwgQ01fUkVRVUVTVF9DSElQX0FEU0xfTElORV9TVEFSVCwgTlVMTCwgMCwgTlVMTCwgMCk7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtODEyLVxcdG11dGV4X3VubG9jayhcXHUwMDI2aW5zdGFuY2UtXFx1MDAzZXBvbGxfc3RhdGVfc2VyaWFsaXplKTtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6ODEzOlxcdG11dGV4X3VubG9jayhcXHUwMDI2aW5zdGFuY2UtXFx1MDAzZWFkc2xfc3RhdGVfc2VyaWFsaXplKTtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtODE0LVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTExMjI9c3RhdGljIGludCBjeGFjcnVfYmluZChzdHJ1Y3QgdXNiYXRtX2RhdGEgKnVzYmF0bV9pbnN0YW5jZSxcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xMTQ2LVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoxMTQ3OlxcdG11dGV4X2luaXQoXFx1MDAyNmluc3RhbmNlLVxcdTAwM2VhZHNsX3N0YXRlX3NlcmlhbGl6ZSk7XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTExNDgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjUwOjI1LjMzMjk0MjU2MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjE1MjEzMzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBhIGZpcnN0LXBlcnNvbiBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqRmluZGluZyB0aGUgVXNhZ2Ugb2YgYGFkc2xfc3RhdGVfc2hvd2AgYW5kIGBhZHNsX3N0YXRlX3N0b3JlYCoqXG5cbkhtbSwgSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoZXJlIGBhZHNsX3N0YXRlX3Nob3dgIGFuZCBgYWRzbF9zdGF0ZV9zdG9yZWAgYXJlIGFjdHVhbGx5IGJlaW5nICp1c2VkKi4gSXQncyBhIGJpdCB1bmNsZWFyIGZyb20gYSBxdWljayBnbGFuY2UuIEkgbmVlZCB0byB0cmFjZSB0aGVpciB1c2FnZS4gQXJlIHRoZXkganVzdCBmbG9hdGluZyBhcm91bmQgaW4gdGhlIGNvZGViYXNlLCBvciBhcmUgdGhleSBwYXJ0IG9mIHNvbWV0aGluZyBiaWdnZXI/IEFoLCB3YWl0IGEgbWludXRlLCB0aGUgd2F5IHRoaXMgY29kZSBpcyBzdHJ1Y3R1cmVkLCBpdCdzIG9mdGVuIHRoZSBjYXNlIHRoYXQgdGhlc2Uga2luZHMgb2YgZnVuY3Rpb25zIGFyZSBwbHVnZ2VkIGludG8gYSBtYWNybywgbGlrZSBgREVWSUNFX0FUVFJgLiBUaGF0IHdvdWxkIG1ha2UgYSBsb3Qgb2Ygc2Vuc2UuIEkgc2hvdWxkIGxvb2sgZm9yIGEgbWFjcm8gZGVmaW5pdGlvbiBhbmQgdGhlbiBzZWUgaWYgdGhvc2UgZnVuY3Rpb25zIGFyZSBwYXNzZWQgYXMgYXJndW1lbnRzIHRvIGl0LiBUaGF0J3MgcHJvYmFibHkgdGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIGZpbmQgdGhlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE1MCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjUwOjI4Ljk0ODE1ODUwM1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxODIyOTQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkRFVklDRV9BVFRSLiphZHNsX3N0YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6NTA6MjguOTkzMzQ2NDU3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNzk5NjI2OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkIGFuZCBoYXZlIHRoYXQgc2VhcmNoIHF1ZXJ5IGluIG1pbmQ6XG5cbioqSW5pdGlhbCBTZWFyY2ggU3RyYXRlZ3kgZm9yIEFEU0wgU3RhdGUgSW5mb3JtYXRpb24qKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhlIGBhZHNsX3N0YXRlYCB2YXJpYWJsZS4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCwgYnV0IEkgd2FudCB0byBiZSBlZmZpY2llbnQgYW5kIHplcm8gaW4gb24gdGhlIGNvcmUgZGVmaW5pdGlvbiBvciB1c2FnZSwgbm90IGp1c3QgZXZlcnkgc2luZ2xlIHBsYWNlIGl0J3MgbWVudGlvbmVkLiBTbywgSSdtIHRoaW5raW5nLCBsZXQncyBzdGFydCB3aXRoIGEgZm9jdXNlZCBzZWFyY2guIEkgZG9uJ3Qgd2FudCB0byBnZXQgYm9nZ2VkIGRvd24gaW4gZnVuY3Rpb25zIHRoYXQganVzdCAqc2hvdyogdGhlIHN0YXRlIHRvIHRoZSB1c2VyIG9yICpzdG9yZSogaXQgc29tZXdoZXJlLiBUaG9zZSBhcmUgZG93bnN0cmVhbSBlZmZlY3RzLiBJIHdhbnQgdGhlIG1lYXQgb2Ygd2hlcmUgYGFkc2xfc3RhdGVgIGlzIGFjdHVhbGx5ICpkZWZpbmVkKiwgKm1vZGlmaWVkKiwgb3IgKmRpcmVjdGx5IHVzZWQqIHdpdGhpbiB0aGUgc3lzdGVtLiBUaGVyZWZvcmUsIEknbGwgZmlsdGVyIG91dCBhbnkgc2VhcmNoIHJlc3VsdHMgdGhhdCBpbmNsdWRlIGBfc2hvd2Agb3IgYF9zdG9yZWAuIFRoYXQgc2hvdWxkIGhlbHAgbWUgY3V0IHRocm91Z2ggdGhlIG5vaXNlIGFuZCBnZXQgdG8gdGhlIGNyaXRpY2FsIGxvY2F0aW9ucyBtb3JlIHF1aWNrbHkuIFRoaXMgaXMgYWJvdXQgZWZmaWNpZW50IGRlYnVnZ2luZyBhbmQgcHJvYmxlbSBzb2x2aW5nLCBub3QgYSBjYXN1YWwgZXhwbG9yYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0MzMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo1MDozMi4zNzMzMTIxNjNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNjg4MTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFkc2xfc3RhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvYXRtL2N4YWNydS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz0xNzA9c3RydWN0IGN4YWNydV9kYXRhIHtcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xNzUtXFx0aW50IGxpbmVfc3RhdHVzO1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoxNzY6XFx0c3RydWN0IG11dGV4IGFkc2xfc3RhdGVfc2VyaWFsaXplO1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xNzctXFx0aW50IGFkc2xfc3RhdHVzO1xcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTMwMz1zdGF0aWMgc3NpemVfdCBtYWNfYWRkcmVzc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zMTQtXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjMxNTpzdGF0aWMgc3NpemVfdCBhZHNsX3N0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zMTYtXFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zMzEtXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjMzMjpzdGF0aWMgc3NpemVfdCBhZHNsX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzMzLVxcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zNTItXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjM1MzpcXHRpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKFxcdTAwMjZpbnN0YW5jZS1cXHUwMDNlYWRzbF9zdGF0ZV9zZXJpYWxpemUpKVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zNTQtXFx0XFx0cmV0dXJuIC1FUkVTVEFSVFNZUztcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy00MjQtXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjQyNTpcXHRtdXRleF91bmxvY2soXFx1MDAyNmluc3RhbmNlLVxcdTAwM2VhZHNsX3N0YXRlX3NlcmlhbGl6ZSk7XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTQyNi1cXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz01MzU9Q1hBQ1JVX0FUVFJfIyNfYWN0aW9uKENYSU5GX0NPTlRST0xMRVJfVkVSU0lPTiwgICAgICAgIHUzMiwgIGFkc2xfY29udHJvbGxlcl92ZXJzaW9uKTsgXFxcXFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo1MzY6Q1hBQ1JVX0NNRF8jI19hY3Rpb24oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkc2xfc3RhdGUpOyBcXFxcXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTUzNy1DWEFDUlVfU0VUXyMjX2FjdGlvbiggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRzbF9jb25maWcpO1xcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTU0MT1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqY3hhY3J1X2F0dHJzW10gPSB7XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTU0Mi1cXHRcXHUwMDI2ZGV2X2F0dHJfYWRzbF9jb25maWcuYXR0cixcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NTQzOlxcdFxcdTAwMjZkZXZfYXR0cl9hZHNsX3N0YXRlLmF0dHIsXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTU0NC1cXHRcXHUwMDI2ZGV2X2F0dHJfYWRzbF9jb250cm9sbGVyX3ZlcnNpb24uYXR0cixcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz03NzE9c3RhdGljIGludCBjeGFjcnVfYXRtX3N0YXJ0KHN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtX2luc3RhbmNlLFxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc4OS1cXHQvKiBzdGFydCBBRFNMICovXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjc5MDpcXHRtdXRleF9sb2NrKFxcdTAwMjZpbnN0YW5jZS1cXHUwMDNlYWRzbF9zdGF0ZV9zZXJpYWxpemUpO1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03OTEtXFx0cmV0ID0gY3hhY3J1X2NtKGluc3RhbmNlLCBDTV9SRVFVRVNUX0NISVBfQURTTF9MSU5FX1NUQVJULCBOVUxMLCAwLCBOVUxMLCAwKTtcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy04MTItXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZpbnN0YW5jZS1cXHUwMDNlcG9sbF9zdGF0ZV9zZXJpYWxpemUpO1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo4MTM6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZpbnN0YW5jZS1cXHUwMDNlYWRzbF9zdGF0ZV9zZXJpYWxpemUpO1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy04MTQtXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9ODIwPXN0YXRpYyB2b2lkIGN4YWNydV9wb2xsX3N0YXR1cyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtODM5LVxcdFxcdFxcdGlmIChyZXQgIT0gLUVTSFVURE9XTilcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6ODQwOlxcdFxcdFxcdFxcdGF0bV93YXJuKHVzYmF0bSwgXFxcInBvbGxpbmcgZGlzYWJsZWQsIHNldCBhZHNsX3N0YXRlXFxcIlxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy04NDEtXFx0XFx0XFx0XFx0XFx0XFx0XFxcIiB0byAnc3RhcnQnIG9yICdwb2xsJyB0byByZXN1bWVcXFxcblxcXCIpO1xcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTExMjI9c3RhdGljIGludCBjeGFjcnVfYmluZChzdHJ1Y3QgdXNiYXRtX2RhdGEgKnVzYmF0bV9pbnN0YW5jZSxcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xMTQ2LVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoxMTQ3OlxcdG11dGV4X2luaXQoXFx1MDAyNmluc3RhbmNlLVxcdTAwM2VhZHNsX3N0YXRlX3NlcmlhbGl6ZSk7XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTExNDgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjUwOjMyLjQxNzAwNTMxN1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjQzODYwNjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyBhIENvbW1hbmQgQ2FsbCoqXG5cblJpZ2h0LCBzbyBJIHNlZSBgQ1hBQ1JVX0NNRF8jI19hY3Rpb24oIGFkc2xfc3RhdGUpO2AgYmVpbmcgaW52b2tlZCBoZXJlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCBgQ1hBQ1JVX0NNRF9gIGlzIGludm9sdmVkLiBMZXQncyBkaWcgaW50byB0aGF0IG1hY3JvLCB0aGF0J3Mgd2hlcmUgdGhlIHJlYWwgYWN0aW9uIGlzLlwiIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYENYQUNSVV9DTURfYCBhY3R1YWxseSBleHBhbmRzIHRvLiBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlbnQgb2YgdGhpcyBlbnRpcmUgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg4OCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjUwOjM4LjA2MDg2ODM5MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzMjYzNTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmaW5lIENYQUNSVV9DTURfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9MTk5PXN0YXRpYyBERVZJQ0VfQVRUUl9STyhfbmFtZSlcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjAwLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoyMDE6I2RlZmluZSBDWEFDUlVfQ01EX0lOSVQoX25hbWUpIFxcXFxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjAyLXN0YXRpYyBERVZJQ0VfQVRUUl9SVyhfbmFtZSlcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz0yMTk9Q1hBQ1JVX19BVFRSX0lOSVQoX25hbWUpXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjIxLSNkZWZpbmUgQ1hBQ1JVX0FUVFJfQ1JFQVRFKF92LCBfdCwgX25hbWUpIENYQUNSVV9ERVZJQ0VfQ1JFQVRFX0ZJTEUoX25hbWUpXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjIyMjojZGVmaW5lIENYQUNSVV9DTURfQ1JFQVRFKF9uYW1lKSAgICAgICAgICBDWEFDUlVfREVWSUNFX0NSRUFURV9GSUxFKF9uYW1lKVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yMjMtI2RlZmluZSBDWEFDUlVfU0VUX0NSRUFURShfbmFtZSkgICAgICAgICAgQ1hBQ1JVX0RFVklDRV9DUkVBVEVfRklMRShfbmFtZSlcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yMjYtI2RlZmluZSBDWEFDUlVfQVRUUl9SRU1PVkUoX3YsIF90LCBfbmFtZSkgQ1hBQ1JVX0RFVklDRV9SRU1PVkVfRklMRShfbmFtZSlcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MjI3OiNkZWZpbmUgQ1hBQ1JVX0NNRF9SRU1PVkUoX25hbWUpICAgICAgICAgIENYQUNSVV9ERVZJQ0VfUkVNT1ZFX0ZJTEUoX25hbWUpXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTIyOC0jZGVmaW5lIENYQUNSVV9TRVRfUkVNT1ZFKF9uYW1lKSAgICAgICAgICBDWEFDUlVfREVWSUNFX1JFTU9WRV9GSUxFKF9uYW1lKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo1MDozOC4xMDcyMDAxODZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAxNzAxMTQzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHF1aWNrIHJ1bmRvd24gb2YgdGhlc2UgY29uc2lkZXJhdGlvbnMsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgYGFkc2xfc3RhdGVfc3RvcmVgIGFuZCBgYWRzbF9jb25maWdfc3RvcmVgIGZvciBWdWxuZXJhYmlsaXRpZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuIEknbSBsb29raW5nIGF0IGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoZXkncmUgc3lzZnMgc3RvcmUgZnVuY3Rpb25zIOKAkyBnb29kLCBzdHJhaWdodGZvcndhcmQuIEFyZSB0aGV5IGFjY2Vzc2libGUgdGhyb3VnaCBzeXNmcz8gWWVzLCB0aGF0J3MgdGhlIHBvaW50IG9mIHRoZW0gYmVpbmcgdGhlcmUsIHNvIHRoYXQncyBhIGNoZWNrIG1hcmsuIENhbiBzeXprYWxsZXIgZ2V0IGF0IHRoZW0gZm9yIGZ1enppbmc/IEFic29sdXRlbHksIHN5emthbGxlciBsb3ZlcyB0byBwbGF5IHdpdGggc3lzZnMsIGl0J3MgYSBrbm93biBhdHRhY2sgdmVjdG9yLCBzbyB0aGF0J3MgYW5vdGhlciBjaGVjay4gSG9sZCBvbi4uLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBhZHNsX3N0YXRlX3N0b3JlYC4gSXQgcmVxdWlyZXMgYENBUF9ORVRfQURNSU5gPyBBaCwgdGhhdCdzIGNydWNpYWwuIFRoaXMgaXMgc29tZXRoaW5nIHRoYXQgc3l6a2FsbGVyIGxpa2VseSBoYXMgdG8gY29uc2lkZXIgd2hlbiBhdHRlbXB0aW5nIHRoZSBmdXp6LCBhbmQgSSB3b3VsZCBjZXJ0YWlubHkgaGF2ZSB0byBjb25zaWRlciBpdCB3aGVuIGNoZWNraW5nIGlmIHRoZSBzeXN0ZW0gaGFzIGJlZW4gbWlzY29uZmlndXJlZC4gTm93LCBsZXQncyBkaWcgaW50byB0aGF0IGBhZHNsX3N0YXRlX3N0b3JlYCBmdW5jdGlvbiBzcGVjaWZpY2FsbHkgYW5kIHNlZSBob3cgaXQgaGFuZGxlcyB0aGUgcGVybWlzc2lvbiBjaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0ODMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo1MDo0My4xMjQyMTM1MzRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExNjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzIsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMzI6XFx0c3RhdGljIHNzaXplX3QgYWRzbF9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuIDMzMzpcXHRcXHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuIDMzNDpcXHR7XFxuIDMzNTpcXHRcXHRzdHJ1Y3QgY3hhY3J1X2RhdGEgKmluc3RhbmNlID0gdG9fdXNiYXRtX2RyaXZlcl9kYXRhKFxcbiAzMzY6XFx0XFx0XFx0XFx0dG9fdXNiX2ludGVyZmFjZShkZXYpKTtcXG4gMzM3OlxcdFxcdGludCByZXQ7XFxuIDMzODpcXHRcXHRpbnQgcG9sbCA9IC0xO1xcbiAzMzk6XFx0XFx0Y2hhciBzdHJfY21kWzhdO1xcbiAzNDA6XFx0XFx0aW50IGxlbiA9IHN0cmxlbihidWYpO1xcbiAzNDE6XFx0XFxuIDM0MjpcXHRcXHRpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpXFxuIDM0MzpcXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4gMzQ0OlxcdFxcbiAzNDU6XFx0XFx0cmV0ID0gc3NjYW5mKGJ1ZiwgXFxcIiU3c1xcXCIsIHN0cl9jbWQpO1xcbiAzNDY6XFx0XFx0aWYgKHJldCAhPSAxKVxcbiAzNDc6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDM0ODpcXHRcXHRyZXQgPSAwO1xcbiAzNDk6XFx0XFxuIDM1MDpcXHRcXHRpZiAoaW5zdGFuY2UgPT0gTlVMTCB8fCBpbnN0YW5jZS1cXHUwMDNldXNiYXRtLVxcdTAwM2VhdG1fZGV2ID09IE5VTEwpXFxuIDM1MTpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6NTA6NDMuMTI0MzI2NTA0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NjQxODg1NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIENhcGFiaWxpdHkgQ2hlY2tzIGluIFN5emthbGxlciBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IFN5emthbGxlciBpbnRlcmFjdHMgd2l0aCBzeXNmcyBhbmQgY2FwYWJpbGl0aWVzLiBUaGUga2V5IGlzc3VlIGhlcmUgaXMgdGhhdCBTeXprYWxsZXIgdXN1YWxseSBydW5zIHdpdGggYENBUF9ORVRfQURNSU5gIHdpdGhpbiBpdHMgb3duIG5hbWVzcGFjZS4gSG93ZXZlciwgdGhlIHN5c2ZzIGZpbGVzIGFyZSBnZW5lcmFsbHkgaW4gdGhlIGdsb2JhbCBuYW1lc3BhY2UsIHByZXNlbnRpbmcgYSBwb3RlbnRpYWwgY29uZmxpY3QuIEJ1dCB3YWl0LCBzaW5jZSBTeXprYWxsZXIgcnVucyBpbiBhIHVzZXIgbmFtZXNwYWNlIHdoZXJlIGl0IGhhcyBgQ0FQX05FVF9BRE1JTmAsIEkgbmVlZCB0byByZWFsbHkgY29uc2lkZXIgd2hhdCBgY2FwYWJsZShDQVBfTkVUX0FETUlOKWAgaXMgYWN0dWFsbHkgY2hlY2tpbmcuIEFoLCByaWdodCwgdGhhdCBjYWxsIGNoZWNrcyB0aGUgKmluaXQqIHVzZXIgbmFtZXNwYWNlLiBUaGF0J3MgY3J1Y2lhbC4gQW5kIGlmIFN5emthbGxlciBpcyBpbmRlZWQgcnVubmluZyBpbiBhIHVzZXIgbmFtZXNwYWNlLCB0aGVuIHRoYXQgY2hlY2sgd291bGQgZmFpbCBiZWNhdXNlIGBjYXBhYmxlKClgIHVzZXMgdGhlIGluaXQgdXNlciBuYW1lc3BhY2UuXG5cblNvLCBJIG5lZWQgdG8gY2hlY2sgZXhhY3RseSB3aGV0aGVyIGBjYXBhYmxlKClgIG9yIGBuc19jYXBhYmxlKClgIGFyZSB1c2VkLiBJdCBsb29rcyBsaWtlIGBjYXBhYmxlKENBUF9ORVRfQURNSU4pYCBpcywgaW4gZmFjdCwgdGhlIHJlbGV2YW50IGZ1bmN0aW9uLCB3aGljaCwgYXMgSSBzYWlkLCBjaGVja3MgdGhlICppbml0KiB1c2VyIG5hbWVzcGFjZS4gTm93LCBnaXZlbiB0aGF0IFN5emthbGxlcidzIHNhbmRib3hpbmcgcmVsaWVzIG9uIHVzZXIgbmFtZXNwYWNlcywgaXQncyB2ZXJ5IHBvc3NpYmxlIHRoYXQgaXQgKndvbid0KiBoYXZlIGBDQVBfTkVUX0FETUlOYCBpbiB0aGUgaW5pdCB1c2VyIG5hbWVzcGFjZSwgd2hpY2ggaXMgcHJvYmxlbWF0aWMuIEJ1dCB3YWl0ISBJIGFsc28gcmVjYWxsIHRoYXQgU3l6a2FsbGVyIGhhcyBhIGBzYW5kYm94PW5vbmVgIG1vZGUsIHdoZXJlIGl0IHJ1bnMgYXMgcm9vdCBpbiB0aGUgaW5pdCBuYW1lc3BhY2UuIFRoYXQncyBhIGNyaXRpY2FsIGRpZmZlcmVuY2UuIFRoYXQgbWVhbnMgU3l6a2FsbGVyICpjYW4qIHJlYWNoIHRoZSBjb2RlIHBhdGggYW5kIHBvdGVudGlhbGx5IGJ5cGFzcyB0aGUgaW50ZW5kZWQgc2VjdXJpdHkgcmVzdHJpY3Rpb25zLiBGdXJ0aGVybW9yZSwgSSBzZWUgdGhhdCBgYWRzbF9jb25maWdfc3RvcmVgIGhhcyB0aGUgc2FtZSBjYXBhYmlsaXR5IGNoZWNrLCBtYWtpbmcgaXQgZXF1YWxseSB2dWxuZXJhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE2NywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjUwOjQ4LjU4ODUxNzY3OVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDMwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDMwOlxcdFxcdHJldHVybiByZXQ7XFxuIDQzMTpcXHR9XFxuIDQzMjpcXHRcXG4gNDMzOlxcdC8qIENNX1JFUVVFU1RfQ0FSRF9EQVRBX0dFVCB0aW1lcyBvdXQsIHNvIG5vIHNob3cgYXR0cmlidXRlICovXFxuIDQzNDpcXHRcXG4gNDM1OlxcdHN0YXRpYyBzc2l6ZV90IGFkc2xfY29uZmlnX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4gNDM2OlxcdFxcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4gNDM3OlxcdHtcXG4gNDM4OlxcdFxcdHN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UgPSB0b191c2JhdG1fZHJpdmVyX2RhdGEoXFxuIDQzOTpcXHRcXHRcXHRcXHR0b191c2JfaW50ZXJmYWNlKGRldikpO1xcbiA0NDA6XFx0XFx0aW50IGxlbiA9IHN0cmxlbihidWYpO1xcbiA0NDE6XFx0XFx0aW50IHJldCwgcG9zLCBudW07XFxuIDQ0MjpcXHRcXHRfX2xlMzIgZGF0YVtDTURfUEFDS0VUX1NJWkUgLyA0XTtcXG4gNDQzOlxcdFxcbiA0NDQ6XFx0XFx0aWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKVxcbiA0NDU6XFx0XFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuIDQ0NjpcXHRcXG4gNDQ3OlxcdFxcdGlmIChpbnN0YW5jZSA9PSBOVUxMIHx8IGluc3RhbmNlLVxcdTAwM2V1c2JhdG0tXFx1MDAzZWF0bV9kZXYgPT0gTlVMTClcXG4gNDQ4OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiA0NDk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjUwOjQ4LjU4ODYxNzI1OVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDkwMTEyNzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3RyYXRlZ3kgQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIGJvdGggZnVuY3Rpb25zIGluIHF1ZXN0aW9uIGhhdmUgYGNhcGFibGUoQ0FQX05FVF9BRE1JTilgLiBXb3J0aCB0aGlua2luZyBhYm91dCBmdXp6aW5nIHRoaXMsIEkgdGhpbmsuIFRoaXMgcGF0Y2ggaXMgdGFyZ2V0aW5nIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBpcyBhbHdheXMgaW50ZXJlc3RpbmcuIFRoZSBmdW5jdGlvbnMgaW52b2x2ZWQgYXJlIGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYC5cblxuSG9sZCBvbiwgdGhlIHByb21wdCBpcyBndWlkaW5nIG1lIGhlcmU6IFwiUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucy5cIiBOb3csIHRoZXNlIHR3byBhcmUgc3RhdGljLCB3aGljaCAqY291bGQqIG1lYW4gdGhleSdyZSBpbmxpbmVkIGFuZCB0aGVpciBhZGRyZXNzZXMgYXJlbid0IGRpc3RpbmN0IHN5bWJvbHMuIEJ1dCB0aGV5ICphcmUqIHBhc3NlZCB0byBgREVWSUNFX0FUVFJfUldgLCBtZWFuaW5nIHRoZSBrZXJuZWwgaXMgdGFraW5nIHRoZWlyIGFkZHJlc3Nlcy4gVGhlcmVmb3JlLCB0aGV5ICp3b24ndCogYmUgaW5saW5lZC4gU28gcHJvdmlkaW5nIGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYCBhcyBmb2N1cyBzeW1ib2xzIHNob3VsZCBiZSBmaW5lLCBhbmQgaW4gbGluZSB3aXRoIHRoZSBndWlkYW5jZS4gSSBjYW4gcHJvdmlkZSB0aG9zZS5cblxuV2FpdCwgYmFjayB0byB0aGUgcHJvbXB0OiBJdCAqcHJlZmVycyogbm9uLXN0YXRpYyBmdW5jdGlvbnMuIElzIHRoZXJlIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiB0aGF0IGNhbGxzIHRoZXNlPyBObywgdGhleSdyZSBjYWxsZWQgZGlyZWN0bHkgYnkgdGhlIHN5c2ZzIGNvcmUuIFNvLCBzdGlja2luZyB3aXRoIGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYCBpcyB0aGUgd2F5IHRvIGdvLlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUgaWYgdGhpcyBwYXRjaCBhZmZlY3RzIGFueXRoaW5nIGVsc2UuIEl0IG1vZGlmaWVzIGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYCBkaXJlY3RseS4gV2Ugc2hvdWxkIHByb2JhYmx5IGluY2x1ZGUgYFVTQl9DWEFDUlVgIGFuZCBgVVNCX0FUTWAgaW4gYEVuYWJsZUNvbmZpZ3NgLiBIYW5nIG9uLi4uIGBVU0JfQVRNYCBpcyBsaXN0ZWQgYXMgYm90aCBhIG1lbnVjb25maWcgKmFuZCogYSBjb25maWcsIHNvIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgYGRyaXZlcnMvdXNiL2F0bS9LY29uZmlnYCBmaWxlIGFnYWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA2NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjUwOjU0LjY3ODczMTgzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTI0MzA5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVVNCX0FUTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy01LVxcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnOjY6bWVudWNvbmZpZyBVU0JfQVRNXFxuZHJpdmVycy91c2IvYXRtL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiVVNCIERTTCBtb2RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo1MDo1NC43MjM5NzkxNzVaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDczMTUxMjE1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIENoZWNrKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uLCBhbmQgSSd2ZSBjb25maXJtZWQgdGhhdCBgVVNCX0FUTWAgaXMgaW5kZWVkIGEgY29uZmlndXJhdGlvbiBvcHRpb24uIE5vdywgdGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIGBBVE1gIGl0c2VsZiBpcyByZXF1aXJlZC4gWWVzLCBpdCBsb29rcyBsaWtlIGBVU0JfQVRNYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBBVE1gLiBUaGF0IG1lYW5zIGBFbmFibGVDb25maWdzYCBzaG91bGQgaW5jbHVkZSBgW1wiVVNCX0NYQUNSVVwiLCBcIlVTQl9BVE1cIiwgXCJBVE1cIl1gLiBNYWtlcyBzZW5zZS5cblxuTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSB1c2luZyB0aGUgcmlnaHQgc3ltYm9scyBhcyBmb2N1cyBwb2ludHMuIExldCBtZSBkb3VibGUtY2hlY2sgdGhhdCBgYWRzbF9zdGF0ZV9zdG9yZWAgYW5kIGBhZHNsX2NvbmZpZ19zdG9yZWAgYXJlLCBpbiBmYWN0LCB0aGUgYmVzdCBjaG9pY2VzLiBZZXMsIHRob3NlIGFyZSB0aGUgZXhhY3QgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkLiBBbmQgc2luY2Ugd2UncmUgdGFraW5nIHRoZWlyIGFkZHJlc3NlcyBmb3IgYERFVklDRV9BVFRSX1JXYCwgSSBrbm93IHRoZXkgYXJlbid0IGlubGluZWQsIHNvIHRoZXkncmUgcGVyZmVjdGx5IHN1aXRhYmxlIGZvY3VzIHBvaW50cy4gRXhjZWxsZW50LlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSdsbCBydW4gdGhyb3VnaCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgVVNCX0NYQUNSVWAgYWdhaW4uIEl0IGRlcGVuZHMgb24gYFVTQl9BVE1gLCB3aGljaCBpbiB0dXJuIGRlcGVuZHMgb24gYEFUTWAuIEFuZCBgQVRNYCBsb29rcyBsaWtlIGEgc3RhbmRhbG9uZSBjb25maWd1cmF0aW9uLiBXYWl0LCBoYW5nIG9uLi4uIGBVU0JfQ1hBQ1JVYCAqYWxzbyogc2VsZWN0cyBgRldfTE9BREVSYC4gQW5kIGBGV19MT0FERVJgIGlzIHVzdWFsbHkgZW5hYmxlZCBpbiB0aGUgYnJvYWRlciBjb250ZXh0LiBUaW1lIHRvIHRha2UgYW5vdGhlciBsb29rIGF0IGBkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZ2AgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4NjksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6NTA6NTkuNDU1NDk0MjczWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2F0bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDMwOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNwZWVkdGNoLlxcbiAgMzE6XFx0XFxuICAzMjpcXHRjb25maWcgVVNCX0NYQUNSVVxcbiAgMzM6XFx0XFx0dHJpc3RhdGUgXFxcIkNvbmV4YW50IEFjY2Vzc1J1bm5lciBVU0Igc3VwcG9ydFxcXCJcXG4gIDM0OlxcdFxcdHNlbGVjdCBGV19MT0FERVJcXG4gIDM1OlxcdFxcdGhlbHBcXG4gIDM2OlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhbiBBRFNMIFVTQiBtb2RlbSBiYXNlZCBvbiB0aGUgQ29uZXhhbnRcXG4gIDM3OlxcdFxcdCAgQWNjZXNzUnVubmVyIGNoaXBzZXQuICBJbiBvcmRlciB0byB1c2UgeW91ciBtb2RlbSB5b3Ugd2lsbCBuZWVkIHRvXFxuICAzODpcXHRcXHQgIGluc3RhbGwgdGhlIGZpcm13YXJlLCBleHRyYWN0ZWQgYnkgdGhlIHVzZXIgc3BhY2UgdG9vbHM7IHNlZVxcbiAgMzk6XFx0XFx0ICBcXHUwMDNjaHR0cDovL2FjY2Vzc3J1bm5lci5zb3VyY2Vmb3JnZS5uZXQvXFx1MDAzZSBmb3IgZGV0YWlscy5cXG4gIDQwOlxcdFxcbiAgNDE6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gIDQyOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGN4YWNydS5cXG4gIDQzOlxcdFxcbiAgNDQ6XFx0Y29uZmlnIFVTQl9VRUFHTEVBVE1cXG4gIDQ1OlxcdFxcdHRyaXN0YXRlIFxcXCJBREkgOTMwIGFuZCBlYWdsZSBVU0IgRFNMIG1vZGVtXFxcIlxcbiAgNDY6XFx0XFx0c2VsZWN0IEZXX0xPQURFUlxcbiAgNDc6XFx0XFx0aGVscFxcbiAgNDg6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGFuIEFEU0wgVVNCIG1vZGVtIGJhc2VkIG9uIHRoZSBBREkgOTMwXFxuICA0OTpcXHRcXHQgIG9yIGVhZ2xlIGNoaXBzZXQuIEluIG9yZGVyIHRvIHVzZSB5b3VyIG1vZGVtIHlvdSB3aWxsIG5lZWQgdG9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6NTA6NTkuNDU1NTU2MTAzWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MTE1MTUzOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBVU0IgQVRNIE1vZHVsZSdzIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgVVNCX0FUTWAgbW9kdWxlLCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBpdHMgYnVpbGQgY29uZmlndXJhdGlvbi4gVGhlIGZpcnN0IHF1ZXN0aW9uIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXM6IGFyZSB0aGVyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZiBiZXlvbmQgdGhlIG1vZHVsZSBpdHNlbGY/IEkga25vdyBgVVNCX0FUTWAgaXMgZGVmaW5lZCB3aXRoaW4gYGRyaXZlcnMvdXNiL2F0bS9LY29uZmlnYCwgc28gdGhhdCdzIG15IHN0YXJ0aW5nIHBvaW50LiBOb3csIHRvIGdldCBhIGJyb2FkZXIgcGljdHVyZSBvZiBob3cgdGhpcyBtb2R1bGUgZml0cyBpbnRvIHRoZSBVU0Igc3Vic3lzdGVtLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGBkcml2ZXJzL3VzYi9NYWtlZmlsZWAuIEknbGwgc2NhbiB0aGF0IHRvIHNlZSBob3cgaXQncyBsaW5rZWQsIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcHJlLXJlcXVpc2l0ZXMsIG9yIGlmIHRoZXJlIGlzIGFueXRoaW5nIHRoYXQgbWF5IGhhdmUgYmVlbiBtaXNzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzQyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo1MTowNC4yNjcwNzQ1NFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI5ODk0MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL01ha2VmaWxlPTUzPW9iai0kKENPTkZJR19FQVJMWV9QUklOVEtfVVNCKVxcdCs9IGVhcmx5L1xcbmRyaXZlcnMvdXNiL01ha2VmaWxlLTU0LVxcbmRyaXZlcnMvdXNiL01ha2VmaWxlOjU1Om9iai0kKENPTkZJR19VU0JfQVRNKVxcdFxcdCs9IGF0bS9cXG5kcml2ZXJzL3VzYi9NYWtlZmlsZTo1NjpvYmotJChDT05GSUdfVVNCX1NQRUVEVE9VQ0gpXFx0Kz0gYXRtL1xcbmRyaXZlcnMvdXNiL01ha2VmaWxlLTU3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo1MTowNC4zMTAwNjkyMDRaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA4NjE5NTMyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nLCBhcyBpZiBJIHdlcmUgd29ya2luZyB0aHJvdWdoIHRoaXMgY29kZTpcblxuKipNYWtlZmlsZSBEZXBlbmRlbmN5IENvbnVuZHJ1bSoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4gTXkgbWVudGFsIG1vZGVsIGlzIHRlbGxpbmcgbWUgdGhhdCBgZHJpdmVycy91c2IvTWFrZWZpbGVgIGhhcyBhIGNvbmRpdGlvbmFsIGRlcGVuZGVuY3kgaGVyZS4gSXQncyBzYXlpbmcgdGhhdCwgdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzLCBzcGVjaWZpY2FsbHkgd2hlbiBgQ09ORklHX1VTQl9BVE1gIGlzIGRlZmluZWQsIHRoZSBgYXRtL2AgZGlyZWN0b3J5IHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkIHByb2Nlc3MgKnRocm91Z2gqIHRoZSBgZHJpdmVycy91c2IvTWFrZWZpbGVgLiAgVGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEl0IG1ha2VzIHNlbnNlLCB5b3UndmUgZ290IHlvdXIgQVRNIG92ZXIgVVNCIGZ1bmN0aW9uYWxpdHksIGFuZCB0aGlzIGlzIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGFjY291bnRzIGZvciBpdC5cblxuSG93ZXZlciwgdGhlcmUncyBhbm90aGVyIGxldmVsIGhlcmUuICBUaGUgYGRyaXZlcnMvdXNiL01ha2VmaWxlYCBmaWxlIGl0c2VsZiBpcyBvbmx5IHB1bGxlZCBpbiB3aGVuIGBDT05GSUdfVVNCX1NVUFBPUlRgIGlzIGVuYWJsZWQuICBTbyBpdCdzIG5vdCBhIGRpcmVjdCBpbmNsdXNpb24gYWx3YXlzIC0gaXQgaXMgbmVzdGVkLlxuXG5TbywgdG8gc3VtbWFyaXplLCB0aGUgZGVwZW5kZW5jeSBjaGFpbiBpczogaWYgYENPTkZJR19VU0JfU1VQUE9SVGAgaXMgc2V0LCAqdGhlbiogYGRyaXZlcnMvdXNiL01ha2VmaWxlYCBpcyBpbmNsdWRlZC4gSWYgQU5EIE9OTFkgSUYgYENPTkZJR19VU0JfQVRNYCBpcyAqYWxzbyogc2V0LCAqdGhlbiogdGhlIGBhdG0vYCBkaXJlY3RvcnkgaXMgYWxzbyBpbmNsdWRlZCAqdGhyb3VnaCogdGhlIGluY2x1ZGVkIGBkcml2ZXJzL3VzYi9NYWtlZmlsZWAuIEl0J3MgYSBuZXN0ZWQgY29uZGl0aW9uYWwgaW5jbHVzaW9uLiBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgdGhpcyB3aGVuIGRlYnVnZ2luZyBvciBtb2RpZnlpbmcgYW55dGhpbmcgcmVsYXRlZCB0byBVU0Igb3IgQVRNIHN1cHBvcnQgd2l0aGluIHRoaXMgYnVpbGQgc3lzdGVtLiBUaGlzIGNvdWxkIGFmZmVjdCB0aGUgb3JkZXIgb2YgY29tcGlsYXRpb24gYW5kIHRoZXJlZm9yZSByZXF1aXJlIGNhcmVmdWwgcGxhbm5pbmcgaWYgYW55IGNoYW5nZXMgYXJlIG5lZWRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQwNjMsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo1MTowOC4zOTYyNjY4MDRaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNjgxOTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvTWFrZWZpbGU9MTA1PW9iai0kKENPTkZJR19UQylcXHRcXHQrPSB0Yy9cXG5kcml2ZXJzL01ha2VmaWxlOjEwNjpvYmotJChDT05GSUdfVVNCX1BIWSlcXHRcXHQrPSB1c2IvXFxuZHJpdmVycy9NYWtlZmlsZToxMDc6b2JqLSQoQ09ORklHX1VTQilcXHRcXHQrPSB1c2IvXFxuZHJpdmVycy9NYWtlZmlsZToxMDg6b2JqLSQoQ09ORklHX1VTQl9TVVBQT1JUKVxcdCs9IHVzYi9cXG5kcml2ZXJzL01ha2VmaWxlOjEwOTpvYmotJChDT05GSUdfUENJKVxcdFxcdCs9IHVzYi9cXG5kcml2ZXJzL01ha2VmaWxlOjExMDpvYmotJChDT05GSUdfVVNCX0dBREdFVClcXHQrPSB1c2IvXFxuZHJpdmVycy9NYWtlZmlsZToxMTE6b2JqLSQoQ09ORklHX09GKVxcdFxcdCs9IHVzYi9cXG5kcml2ZXJzL01ha2VmaWxlLTExMi1vYmotJChDT05GSUdfU0VSSU8pXFx0XFx0Kz0gaW5wdXQvc2VyaW8vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjUxOjA4LjQzODk1NTI5OFoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzUzMzQ3NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVTQiBDb25maWd1cmF0aW9uIENoZWNrKipcblxuT2theSwgc28gSSdtIHByZXR0eSBzdXJlIGBVU0JfU1VQUE9SVGAgbmVlZHMgdG8gYmUgZW5hYmxlZC4gVGhhdCdzIHVzdWFsbHkgdGhlIGRlZmF1bHQsIGJ1dCBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUuIE5vdywgSSBoYXZlIHRvIHRoaW5rIGFib3V0IGBVU0JgIGl0c2VsZiwgYW5kIGlmIGBVU0JfQVRNYCBpcyBhIGRlcGVuZGVudCBtb2R1bGUuIEknbGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgZHJpdmVycy91c2IvYXRtL0tjb25maWdgIGZpbGUgYWdhaW47IGl0J3MgYWx3YXlzIHdvcnRoIGEgcXVpY2sgY29uZmlybWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDYzNiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjUxOjE2Ljc5MjMwNTUzOFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMzMDMwMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZz02PW1lbnVjb25maWcgVVNCX0FUTVxcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIlVTQiBEU0wgbW9kZW0gc3VwcG9ydFxcXCJcXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZzo4OlxcdGRlcGVuZHMgb24gQVRNXFxuZHJpdmVycy91c2IvYXRtL0tjb25maWctOS1cXHRzZWxlY3QgQ1JDMzJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6NTE6MTYuODM1NjEwNTEyWiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNTkwMDkxMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6XG5cbioqVVNCIERlcGVuZGVuY3kgQ2hlY2sqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IHRoZSBgVVNCX0FUTWAgZHJpdmVyLCBsaWtlIG1vc3QgVVNCLXJlbGF0ZWQgbW9kdWxlcywgd291bGQgaW1wbGljaXRseSBkZXBlbmQgb24gdGhlIGNvcmUgYFVTQmAgc3Vic3lzdGVtIGJlaW5nIGVuYWJsZWQuIEJ1dCBub3cgSSdtIGhhdmluZyBhIHNlY29uZCB0aG91Z2h0IGFuZCBJJ20gbm90IHNvIHN1cmUuIEl0IG1pZ2h0IGJlIHBvc3NpYmxlIHRoYXQgaXQgZG9lc24ndC5cblxuQmVzdCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBmaWxlLCBgZHJpdmVycy91c2IvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBVU0IgZHJpdmVycyBhcmUgZGVmaW5lZC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uLiBMZXQncyBkaWcgaW4gdGhlcmUgYW5kIHNlZSB3aGF0IGBVU0JfQVRNYCdzIGNvbmZpZyBkZWZpbml0aW9uIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODkzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6NTE6MjAuMTk0NjIyNTU2WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTM1NDI4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb3VyY2UgXFxcImRyaXZlcnMvdXNiL2F0bS9LY29uZmlnXFxcIlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL0tjb25maWc9MTQ4PXNvdXJjZSBcXFwiZHJpdmVycy91c2IvbWlzYy9LY29uZmlnXFxcIlxcbmRyaXZlcnMvdXNiL0tjb25maWctMTQ5LVxcbmRyaXZlcnMvdXNiL0tjb25maWc6MTUwOnNvdXJjZSBcXFwiZHJpdmVycy91c2IvYXRtL0tjb25maWdcXFwiXFxuZHJpdmVycy91c2IvS2NvbmZpZy0xNTEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjUxOjIwLjI0Mzk3OTM1MVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Njk1ODI5NzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIFVTQiBEcml2ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIHNlZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgdmVyaWZ5IHRoZSBLY29uZmlnIHN0cnVjdHVyZSBmb3IgdGhlIFVTQiBBVE0gZHJpdmVyLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IGlmIHRoZSBgc291cmNlIFwiZHJpdmVycy91c2IvYXRtL0tjb25maWdcImAgbGluZSBpcyBuZXN0ZWQgd2l0aGluIGFuIGBpZiBVU0JgIGNvbmRpdGlvbmFsIGJsb2NrLiBUaGF0J3MgYSBjcnVjaWFsIHBvaW50LiBJZiBpdCAqaXMqIGluc2lkZSB0aGUgYGlmIFVTQmAgYmxvY2ssIGl0IG1lYW5zIHRoZSBBVE0gVVNCIGRyaXZlciBpcywgY29ycmVjdGx5LCBvbmx5IGNvbnNpZGVyZWQgaWYgdGhlIGNvcmUgVVNCIGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZC4gSWYgaXQgKmlzbid0Kiwgd2VsbCwgdGhhdCByYWlzZXMgc29tZSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFib3V0IGhvdyB0aGUgZGVwZW5kZW5jeSBpcyBtYW5hZ2VkIGFuZCBjb3VsZCBwb3RlbnRpYWxseSBjcmVhdGUgYnVpbGQgaXNzdWVzIG9yIHJ1bnRpbWUgYmVoYXZpb3IgSSBuZWVkIHRvIGludmVzdGlnYXRlLiBTbywgeWVhaCwgdGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcyAqd2hlcmUqIGlzIHRoYXQgYHNvdXJjZWAgc3RhdGVtZW50IGFuZCB3aGF0J3Mgc3Vycm91bmRpbmcgaXQgaW4gdGhlIEtjb25maWcgaGllcmFyY2h5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTE4OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjUxOjI1LjkzOTgxMTY0WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTQwOlxcdHNvdXJjZSBcXFwiZHJpdmVycy91c2IvaXNwMTc2MC9LY29uZmlnXFxcIlxcbiAxNDE6XFx0XFxuIDE0MjpcXHRjb21tZW50IFxcXCJVU0IgcG9ydCBkcml2ZXJzXFxcIlxcbiAxNDM6XFx0XFxuIDE0NDpcXHRpZiBVU0JcXG4gMTQ1OlxcdFxcbiAxNDY6XFx0c291cmNlIFxcXCJkcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZ1xcXCJcXG4gMTQ3OlxcdFxcbiAxNDg6XFx0c291cmNlIFxcXCJkcml2ZXJzL3VzYi9taXNjL0tjb25maWdcXFwiXFxuIDE0OTpcXHRcXG4gMTUwOlxcdHNvdXJjZSBcXFwiZHJpdmVycy91c2IvYXRtL0tjb25maWdcXFwiXFxuIDE1MTpcXHRcXG4gMTUyOlxcdGVuZGlmICMgVVNCXFxuIDE1MzpcXHRcXG4gMTU0OlxcdHNvdXJjZSBcXFwiZHJpdmVycy91c2IvcGh5L0tjb25maWdcXFwiXFxuIDE1NTpcXHRcXG4gMTU2OlxcdHNvdXJjZSBcXFwiZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWdcXFwiXFxuIDE1NzpcXHRcXG4gMTU4OlxcdHNvdXJjZSBcXFwiZHJpdmVycy91c2IvdHlwZWMvS2NvbmZpZ1xcXCJcXG4gMTU5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo1MToyNS45Mzk5MDM4M1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDg4Mzg4MTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIFBvdGVudGlhbCBTZWN1cml0eSBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGlzIHBhdGNoIGFuZCBpdCdzIG1vZGlmeWluZyB0aGUgYGFkc2xfc3RhdGVfc3RvcmVgIGFuZCBgYWRzbF9jb25maWdfc3RvcmVgIGZ1bmN0aW9ucy4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBhZGRpbmcgYSBjaGVjayBmb3IgYGluc3RhbmNlLVx1MDAzZXVzYmF0bS1cdTAwM2VhdG1fZGV2ID09IE5VTExgIGJlZm9yZSBhY2Nlc3NpbmcgdGhlIGBhdG1fZGV2YCBtZW1iZXIuIFJpZ2h0LCB0aGF0J3MgYSBzdHJhaWdodGZvcndhcmQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHByZXZlbnRpb24uIEdvb2QsIHByZXZlbnRpbmcgY3Jhc2hlcyBpcyBhbHdheXMgYSBwcmlvcml0eS4gSXQgbG9va3MgbGlrZSB0aGlzIGlzIHJlYWNoYWJsZSB2aWEgc3lzZnMsIHNvIGEgdXNlci1zcGFjZSBwcm9jZXNzIGNhbiB0cmlnZ2VyIHRoaXMgY29kZSBwYXRoLlxuXG5TaW5jZSB0aGlzIHRvdWNoZXMgc3lzZnMsIGl0J3MgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBzaG91bGQgYmUgZnV6emVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgY29uc2lkZXIgdGhhdCB3aGVuIGV2YWx1YXRpbmcgdGhpcy5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb25zLiBUaGUgZGVwZW5kZW5jeSB0cmVlIHRlbGxzIG1lIHRoYXQgYFVTQmAgaXMgcmVxdWlyZWQgYmVjYXVzZSBpdCdzIGluc2lkZSBgaWYgVVNCYC4gQ29uc2VxdWVudGx5LCB0aGUgbmVjZXNzYXJ5IGBFbmFibGVDb25maWdzYCBzaG91bGQgYmUgYFtcIlVTQl9DWEFDUlVcIiwgXCJVU0JfQVRNXCIsIFwiQVRNXCIsIFwiVVNCXCJdYC4gSSBhbHNvIHNlZSB0aGF0IGBVU0JfQ1hBQ1JVYCBzZWxlY3RzIGBGV19MT0FERVJgLiBgRldfTE9BREVSYCBpcyBwcmV0dHkgY29tbW9uLCBzbyBJJ20gbm90IG92ZXJseSBjb25jZXJuZWQgYWJvdXQgdGhhdCBiZWluZyBhbiBvYnN0YWNsZS5cblxuSSdtIGNvbmZpZGVudCB0aGF0IHRoZSBtb2RpZmllZCBmdW5jdGlvbnMsIGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYCwgYXJlIHRoZSBvbmx5IG9uZXMgaW1wYWN0ZWQuIFRoZXkgYXJlIGFsc28gc3RhdGljIGFuZCBjYW4gYmUgcHJvdmlkZWQgYXMgZm9jdXMgc3ltYm9scywgc2luY2UgdGhleSdyZSBwYXNzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMgdGhyb3VnaCBgREVWSUNFX0FUVFJfUldgLiBJJ2xsIGRvdWJsZS1jaGVjayBgQ1hBQ1JVX0NNRF9JTklUYCBhbmQgYENYQUNSVV9TRVRfSU5JVGAganVzdCB0byBiZSBzdXJlLCBidXQgSSBmZWVsIGZhaXJseSBjb25maWRlbnQgSSd2ZSBnb3QgYSBnb29kIGdyYXNwIG9uIHRoZSBzY29wZSBvZiB0aGlzIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2NTgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo1MTozMy4wMjgyOTQ0MDZaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDI2NTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNYQUNSVV9DTURfSU5JVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTE5OT1zdGF0aWMgREVWSUNFX0FUVFJfUk8oX25hbWUpXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTIwMC1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MjAxOiNkZWZpbmUgQ1hBQ1JVX0NNRF9JTklUKF9uYW1lKSBcXFxcXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTIwMi1zdGF0aWMgREVWSUNFX0FUVFJfUlcoX25hbWUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjUxOjMzLjA3MjMyNjY5MVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTA4MDY0Njc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBDWEFDUlUgVVNCIEFUTSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGp1c3QgYmVlbiBsb29raW5nIG92ZXIgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgZ2l2ZW4gbXkgZXhwZXJ0aXNlLiBUaGUgY29yZSBvZiBpdCBpcyB0aGUgYWRkaXRpb24gb2YgYSBOVUxMIHBvaW50ZXIgY2hlY2sgd2l0aGluIHRoZSBgYWRzbF9zdGF0ZV9zdG9yZWAgYW5kIGBhZHNsX2NvbmZpZ19zdG9yZWAgc3lzZnMgaGFuZGxlcnMuIEkgcmVjb2duaXplIGltbWVkaWF0ZWx5IHRoYXQgdGhlc2UgZnVuY3Rpb25zLCBhcyBpbmRpY2F0ZWQgYnkgdGhlIGBERVZJQ0VfQVRUUl9SV2AgbWFjcm8sIGFyZSBlc3NlbnRpYWxseSBmdW5jdGlvbiBwb2ludGVycyDigJMgdGhleSdyZSB0aGUgYF9zaG93YCBhbmQgYF9zdG9yZWAgZnVuY3Rpb25zIGFzc29jaWF0ZWQgd2l0aCBhIHN5c2ZzIGF0dHJpYnV0ZS4gQmVjYXVzZSBvZiB0aGlzLCB0aGV5ICp3b24ndCogYmUgaW5saW5lZC4gVGhhdCdzIGFuIGltcG9ydGFudCBkZXRhaWwgZm9yIGZ1enppbmcuXG5cbk15IGNvbmNsdXNpb24/IFRoaXMgaXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLiBJIGNhbiBzZWUgdGhhdCB0aGUgcGF0Y2ggc3BlY2lmaWNhbGx5IG1lbnRpb25zIGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYCwgYW5kIHRoZSByZWFzb25pbmcgaXMgc291bmQ6IHRoZXNlIGhhbmRsZXJzICphcmUqIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSwgbWFraW5nIHRoZW0gcG90ZW50aWFsIHRhcmdldHMuIFRoZSBwYXRoIHRvIGV4cGxvaXQgdGhlbT8gVmlhIHN5c2ZzLCBjb3VwbGVkIHdpdGggdGhlIFVTQiBkdW1teV9oY2QuIFRoaXMgaXMgYSB2ZXJ5IHR5cGljYWwgYW5kIGVmZmVjdGl2ZSBmdXp6aW5nIHN0cmF0ZWd5IGluIHRoaXMgZG9tYWluLlxuXG5UaGVyZWZvcmUsIHRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIGlzIHNldCB0byBgdHJ1ZWAuIFdlIHNob3VsZCBmb2N1cyBvdXIgZnV6emluZyBlZmZvcnRzIG9uIGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYCwgYXMgdGhvc2UgYXJlIHRoZSBcIkZvY3VzU3ltYm9sc1wiLiBUaGUgdGFyZ2V0IGNvbmZpZ3VyYXRpb25zIHRoYXQgbmVlZCB0byBiZSBlbmFibGVkIGFyZSBgVVNCX0NYQUNSVWAsIGBVU0JfQVRNYCwgYEFUTWAsIGFuZCBgVVNCYCB0byBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgbmVjZXNzYXJ5IHBhcnRzIG9mIHRoZSBrZXJuZWwuXG5cblJpZ2h0LCBJJ20gcmVhZHkgdG8gY2FsbCB0aGUgc2V0LXJlc3VsdHMgZnVuY3Rpb24gYW5kIGRvY3VtZW50IG15IGZpbmRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjY5MywiT3V0cHV0VG9rZW5zIjoxMzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6NTE6MzguMTgwMzkzNzI4WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQxODYyNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9DWEFDUlVcIixcbiAgICBcIlVTQl9BVE1cIixcbiAgICBcIkFUTVwiLFxuICAgIFwiVVNCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWRzbF9zdGF0ZV9zdG9yZVwiLFxuICAgIFwiYWRzbF9jb25maWdfc3RvcmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgTlVMTCBwb2ludGVyIGNoZWNrIGluIHRoZSBgYWRzbF9zdGF0ZV9zdG9yZWAgYW5kIGBhZHNsX2NvbmZpZ19zdG9yZWAgc3lzZnMgaGFuZGxlcnMgZm9yIHRoZSBjeGFjcnUgVVNCIEFUTSBkcml2ZXIuIFRoZXNlIGhhbmRsZXJzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIGNhbiBiZSBmdXp6ZWQgdmlhIHN5c2ZzIGFuZCBVU0IgZHVtbXlfaGNkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9DWEFDUlVcIixcbiAgICBcIlVTQl9BVE1cIixcbiAgICBcIkFUTVwiLFxuICAgIFwiVVNCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWRzbF9zdGF0ZV9zdG9yZVwiLFxuICAgIFwiYWRzbF9jb25maWdfc3RvcmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgTlVMTCBwb2ludGVyIGNoZWNrIGluIHRoZSBgYWRzbF9zdGF0ZV9zdG9yZWAgYW5kIGBhZHNsX2NvbmZpZ19zdG9yZWAgc3lzZnMgaGFuZGxlcnMgZm9yIHRoZSBjeGFjcnUgVVNCIEFUTSBkcml2ZXIuIFRoZXNlIGhhbmRsZXJzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIGNhbiBiZSBmdXp6ZWQgdmlhIHN5c2ZzIGFuZCBVU0IgZHVtbXlfaGNkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo1MTozOC4yNjQ1ODczMDdaIiwiU2VxIjo1MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MjE5NzA1OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo1MTozOC4yNjUxMTA4NzdaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjUyMTQ0Mzc3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayAoYGluc3RhbmNlLVxcdTAwM2V1c2JhdG0tXFx1MDAzZWF0bV9kZXYgPT0gTlVMTGApIGluIGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYCB0byBwcmV2ZW50IGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIG1lY2hhbmlzbXMgc3VjaCBhcyBwYWdlIGZhdWx0cyBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgdXNlci1zcGFjZSBjb3BpZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxMTkxMTVjMTExNGVhZGNiZmNhNzkyYTM5ZWUxNmFlMzNjZTUyOWU0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMDY6NDk6MjcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMgYi9kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmNcbmluZGV4IDQyOWFjMjBhODk5OWYuLmRlZTE1ZjdiNzBiZjYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmNcbisrKyBiL2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1xuQEAgLTM0Nyw3ICszNDcsNyBAQCBzdGF0aWMgc3NpemVfdCBhZHNsX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRyZXQgPSAwO1xuIFxuLVx0aWYgKGluc3RhbmNlID09IE5VTEwpXG4rXHRpZiAoaW5zdGFuY2UgPT0gTlVMTCB8fCBpbnN0YW5jZS1cdTAwM2V1c2JhdG0tXHUwMDNlYXRtX2RldiA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbiBcdGlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoXHUwMDI2aW5zdGFuY2UtXHUwMDNlYWRzbF9zdGF0ZV9zZXJpYWxpemUpKVxuQEAgLTQ0NCw3ICs0NDQsNyBAQCBzdGF0aWMgc3NpemVfdCBhZHNsX2NvbmZpZ19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gXHRpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpXG4gXHRcdHJldHVybiAtRUFDQ0VTO1xuIFxuLVx0aWYgKGluc3RhbmNlID09IE5VTEwpXG4rXHRpZiAoaW5zdGFuY2UgPT0gTlVMTCB8fCBpbnN0YW5jZS1cdTAwM2V1c2JhdG0tXHUwMDNlYXRtX2RldiA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbiBcdHBvcyA9IDA7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo1MTozOC4yNjUxMTE4ODdaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUyMTQyNDE4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBjeGFjcnUuYyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBhZGRpbmcgYSBjaGVjaywgYHx8IGluc3RhbmNlLVx1MDAzZXVzYmF0bS1cdTAwM2VhdG1fZGV2ID09IE5VTExgLCBpbiBgYWRzbF9zdGF0ZV9zdG9yZWAgYW5kIGBhZHNsX2NvbmZpZ19zdG9yZWAuIE15IGluaXRpYWwgdGhvdWdodCBpczogdGhpcyBpcyBhIGNsYXNzaWMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHByZXZlbnRpb24uIEkga25vdyB0aGUga2VybmVsIGhhcyBtZWNoYW5pc21zIGxpa2UgcGFnZSBmYXVsdHMgYW5kIEtBU0FOIHRvIGNhdGNoIHRoZXNlLCBidXQgdGhpcyBwcm9hY3RpdmUgYXBwcm9hY2ggaXMgY2xlYW5lci5cblxuSSdtIHF1aWNrbHkgdmVyaWZ5aW5nIHRoZSBjb250ZXh0LiBgaW5zdGFuY2VgIHBvaW50cyB0byBgc3RydWN0IGN4YWNydV9kYXRhYCwgYW5kIGRpZ2dpbmcgZG93biwgYGluc3RhbmNlLVx1MDAzZXVzYmF0bWAgcG9pbnRzIHRvIGEgYHN0cnVjdCB1c2JhdG1fZGF0YWAsIHdoaWNoIGluIHR1cm4sIGhhcyBhIHBvaW50ZXIgYGF0bV9kZXZgIG9mIHR5cGUgYHN0cnVjdCBhdG1fZGV2YC4gVGhlIHBhdGNoIGd1YXJkcyBhZ2FpbnN0IGFjY2Vzc2luZyBgYXRtX2RldmAgd2hlbiBpdCdzIE5VTEwsIGFzIHRoZSBjaGVjayBpbmRpY2F0ZXMuXG5cbkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGZpeCwgSSBzZWUgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBhbnkgaW5mb3JtYXRpb24gbGVhayBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlLiBJdCdzIGEgdGFyZ2V0ZWQgZGVmZW5zZSBhZ2FpbnN0IGEgc3BlY2lmaWMsIHdlbGwtdW5kZXJzdG9vZCBjbGFzcyBvZiBlcnJvcnMuIFRoZSBrZXJuZWwncyBleGlzdGluZyBwcm90ZWN0aW9ucyBhcmUgdGhlcmUsIGJ1dCB0aGlzIHBhdGNoIGlzIGEgZ29vZCBiZWx0LWFuZC1zdXNwZW5kZXJzIGFwcHJvYWNoLlxuXG5UaGVyZWZvcmUsIGFmdGVyIGNvbnNpZGVyaW5nIHRoaXMgY2FyZWZ1bGx5LCBJJ20gY29uZmlkZW50IHRoYXQgKipOZWVkc0tNU0FOIHNob3VsZCBiZSBmYWxzZSoqIGluIHRoaXMgY2FzZS4gTXkgcmVhc29uaW5nIGlzIHNvbGlkLCBhbmQgSSdsbCBtYWtlIHN1cmUgdG8gZG9jdW1lbnQgaXQgYXMgc3VjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4MiwiT3V0cHV0VG9rZW5zIjoxMjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo1MTo0NC43ODY1Mzg2MDRaIiwiU2VxIjo1NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBOVUxMIHBvaW50ZXIgY2hlY2sgKGBpbnN0YW5jZS1cXHUwMDNldXNiYXRtLVxcdTAwM2VhdG1fZGV2ID09IE5VTExgKSBpbiBgYWRzbF9zdGF0ZV9zdG9yZWAgYW5kIGBhZHNsX2NvbmZpZ19zdG9yZWAgdG8gcHJldmVudCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBtZWNoYW5pc21zIHN1Y2ggYXMgcGFnZSBmYXVsdHMgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29waWVzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayAoYGluc3RhbmNlLVxcdTAwM2V1c2JhdG0tXFx1MDAzZWF0bV9kZXYgPT0gTlVMTGApIGluIGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYCB0byBwcmV2ZW50IGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIG1lY2hhbmlzbXMgc3VjaCBhcyBwYWdlIGZhdWx0cyBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgdXNlci1zcGFjZSBjb3BpZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowpjt7d[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-18 06:46:50 +0000 UTC FinishedAt: 2026-08-18 06:51:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_CXACRU", "USB_ATM", "ATM", "USB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_CXACRU", "USB_ATM", "ATM", "USB" ], "series_id": "9792d684-e4c9-4baf-aac3-efd15773ba58" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "adsl_state_store", "adsl_config_store" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9DWEFDUlUmIzM0OywKICAgICYjMzQ7VVNCX0FUTSYjMzQ7LAogICAgJiMzNDtBVE0mIzM0OywKICAgICYjMzQ7VVNCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWRzbF9zdGF0ZV9zdG9yZSYjMzQ7LAogICAgJiMzNDthZHNsX2NvbmZpZ19zdG9yZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBOVUxMIHBvaW50ZXIgY2hlY2sgKGBpbnN0YW5jZS1cdTAwM2V1c2JhdG0tXHUwMDNlYXRtX2RldiA9PSBOVUxMYCkgaW4gYGFkc2xfc3RhdGVfc3RvcmVgIGFuZCBgYWRzbF9jb25maWdfc3RvcmVgIHRvIHByZXZlbnQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgbWVjaGFuaXNtcyBzdWNoIGFzIHBhZ2UgZmF1bHRzIGFuZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciB1c2VyLXNwYWNlIGNvcGllcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgTlVMTCBwb2ludGVyIGNoZWNrIGluIHRoZSBgYWRzbF9zdGF0ZV9zdG9yZWAgYW5kIGBhZHNsX2NvbmZpZ19zdG9yZWAgc3lzZnMgaGFuZGxlcnMgZm9yIHRoZSBjeGFjcnUgVVNCIEFUTSBkcml2ZXIuIFRoZXNlIGhhbmRsZXJzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIGNhbiBiZSBmdXp6ZWQgdmlhIHN5c2ZzIGFuZCBVU0IgZHVtbXlfaGNkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTE5MTE1YzExMTRlYWRjYmZjYTc5MmEzOWVlMTZhZTMzY2U1MjllNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDA2OjQ5OjI3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYyBiL2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1xuaW5kZXggNDI5YWMyMGE4OTk5Zi4uZGVlMTVmN2I3MGJmNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy91c2IvYXRtL2N4YWNydS5jXG5AQCAtMzQ3LDcgJiM0MzszNDcsNyBAQCBzdGF0aWMgc3NpemVfdCBhZHNsX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRyZXQgPSAwO1xuIFxuLVx0aWYgKGluc3RhbmNlID09IE5VTEwpXG4mIzQzO1x0aWYgKGluc3RhbmNlID09IE5VTEwgfHwgaW5zdGFuY2UtXHUwMDNldXNiYXRtLVx1MDAzZWF0bV9kZXYgPT0gTlVMTClcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXG4gXHRpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKFx1MDAyNmluc3RhbmNlLVx1MDAzZWFkc2xfc3RhdGVfc2VyaWFsaXplKSlcbkBAIC00NDQsNyAmIzQzOzQ0NCw3IEBAIHN0YXRpYyBzc2l6ZV90IGFkc2xfY29uZmlnX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbiBcdGlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSlcbiBcdFx0cmV0dXJuIC1FQUNDRVM7XG4gXG4tXHRpZiAoaW5zdGFuY2UgPT0gTlVMTClcbiYjNDM7XHRpZiAoaW5zdGFuY2UgPT0gTlVMTCB8fCBpbnN0YW5jZS1cdTAwM2V1c2JhdG0tXHUwMDNlYXRtX2RldiA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbiBcdHBvcyA9IDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9DWEFDUlUmIzM0OywKICAgICYjMzQ7VVNCX0FUTSYjMzQ7LAogICAgJiMzNDtBVE0mIzM0OywKICAgICYjMzQ7VVNCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWRzbF9zdGF0ZV9zdG9yZSYjMzQ7LAogICAgJiMzNDthZHNsX2NvbmZpZ19zdG9yZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgTlVMTCBwb2ludGVyIGNoZWNrIGluIHRoZSBgYWRzbF9zdGF0ZV9zdG9yZWAgYW5kIGBhZHNsX2NvbmZpZ19zdG9yZWAgc3lzZnMgaGFuZGxlcnMgZm9yIHRoZSBjeGFjcnUgVVNCIEFUTSBkcml2ZXIuIFRoZXNlIGhhbmRsZXJzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIGNhbiBiZSBmdXp6ZWQgdmlhIHN5c2ZzIGFuZCBVU0IgZHVtbXlfaGNkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTE5MTE1YzExMTRlYWRjYmZjYTc5MmEzOWVlMTZhZTMzY2U1MjllNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDE4IDA2OjQ5OjI3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvYXRtL2N4YWNydS5jIGIvZHJpdmVycy91c2IvYXRtL2N4YWNydS5jCmluZGV4IDQyOWFjMjBhODk5OWYuLmRlZTE1ZjdiNzBiZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMKQEAgLTM0Nyw3ICYjNDM7MzQ3LDcgQEAgc3RhdGljIHNzaXplX3QgYWRzbF9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCXJldHVybiAtRUlOVkFMOwogCXJldCA9IDA7CiAKLQlpZiAoaW5zdGFuY2UgPT0gTlVMTCkKJiM0MzsJaWYgKGluc3RhbmNlID09IE5VTEwgfHwgaW5zdGFuY2UtJmd0O3VzYmF0bS0mZ3Q7YXRtX2RldiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmFtcDtpbnN0YW5jZS0mZ3Q7YWRzbF9zdGF0ZV9zZXJpYWxpemUpKQpAQCAtNDQ0LDcgJiM0Mzs0NDQsNyBAQCBzdGF0aWMgc3NpemVfdCBhZHNsX2NvbmZpZ19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQogCQlyZXR1cm4gLUVBQ0NFUzsKIAotCWlmIChpbnN0YW5jZSA9PSBOVUxMKQomIzQzOwlpZiAoaW5zdGFuY2UgPT0gTlVMTCB8fCBpbnN0YW5jZS0mZ3Q7dXNiYXRtLSZndDthdG1fZGV2ID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwogCiAJcG9zID0gMDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA4NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDExOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBVU0IgQVRNIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHRvdWNoZXMgYGRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY2AuIFNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyBhIGNoZWNrOiBgfHwgaW5zdGFuY2UtJmd0O3VzYmF0bS0mZ3Q7YXRtX2RldiA9PSBOVUxMYCBpbiB0aGUgYGFkc2xfc3RhdGVfc3RvcmVgIGFuZCBgYWRzbF9jb25maWdfc3RvcmVgIGZ1bmN0aW9ucy4gSG1tLCB0aGVzZSBhcmUgc3lzZnMgc3RvcmUgZnVuY3Rpb25zIGZvciBhIFVTQiBBVE0gZHJpdmVyLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gTXkgaW5zdGluY3QgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgbmV3IGNvbmRpdGlvbmFsIGlzIHJlYWNoYWJsZSBhbmQsIGNydWNpYWxseSwgaWYgaXQgb3BlbnMgdXAgYSBmdXp6aW5nIG9wcG9ydHVuaXR5LiBVU0IgQVRNIGRyaXZlcnMgYXJlIGNlcnRhaW5seSB3aXRoaW4gbXkgYXJlYSBvZiBleHBlcnRpc2UuCgpUaGUgZmFjdCB0aGF0IHRoaXMgaW52b2x2ZXMgYSBVU0IgQVRNIGRyaXZlciBtYWtlcyBtZSB0aGluayBhYm91dCBmdXp6aW5nIHVzaW5nIGEgVVNCIGdhZGdldC9kdW1teV9oY2Qgc2V0dXAuIFRoaXMgaXMgYSBjb21tb24gYW5kIGVmZmVjdGl2ZSBhcHByb2FjaC4gU28sIHRoZSBuZXh0IHN0ZXAgaXMgdG8gcmVhbGx5IGRpZyBpbnRvIGBkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmNgIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlc2UgYGFkc2xfc3RhdGVfc3RvcmVgIGFuZCBgYWRzbF9jb25maWdfc3RvcmVgIGZ1bmN0aW9ucywgc2VlIGhvdyB0aGUgYGluc3RhbmNlYCBzdHJ1Y3QgaXMgcG9wdWxhdGVkLCBhbmQgZmlndXJlIG91dCB1bmRlciB3aGF0IGNvbmRpdGlvbnMgYGluc3RhbmNlLSZndDt1c2JhdG0tJmd0O2F0bV9kZXZgIG1pZ2h0IGJlIE5VTEwuIFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSwgYW5kIG1vcmUgaW1wb3J0YW50bHksIGhvdyB0byB0cmlnZ2VyIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fkc2xfc3RhdGVfc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTMxNT1zdGF0aWMgc3NpemVfdCBhZHNsX3N0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zMzEtXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MzMyOnN0YXRpYyBzc2l6ZV90IGFkc2xfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTMzMy1cdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjQ0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uIGZvciBjeGFjcnUuYyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgdGhlIGNvbXBpbGF0aW9uIG9yIGxpbmtpbmcgb2YgYGN4YWNydS5jYC4gVGhpcyBpc24mIzM5O3QganVzdCBhIGNhc3VhbCBjdXJpb3NpdHk7IGtub3dpbmcgdGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBidWlsZCBzeXN0ZW0mIzM5O3MgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWxseSBtb2RpZnlpbmcgaXRzIGJlaGF2aW9yLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhlIG1ha2VmaWxlcywgaWYgdGhleSYjMzk7cmUgc3RhbmRhcmQgZm9yIHRoaXMgcHJvamVjdC4gVGhleSB1c3VhbGx5IGNvbnRhaW4gdGhlIGJ1aWxkIGxvZ2ljLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIHdoYXQgdmFyaWFibGVzIG9yIGZsYWdzIGFyZSBzZXQgdGhhdCBjb250cm9sIHRoZSBpbmNsdXNpb24gb2YgdGhpcyBzb3VyY2UgZmlsZS4KCklmIGl0JiMzOTtzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzIGluIHRoZSBtYWtlZmlsZXMsIEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoZSBidWlsZCBzeXN0ZW0gaXMgc3RydWN0dXJlZC4gQXJlIHRoZXJlIGFueSBjb25maWd1cmF0aW9uIHNjcmlwdHMgdGhhdCBnZW5lcmF0ZSB0aGUgbWFrZWZpbGVzPyBJZiBzbywgdGhvc2UgYXJlIHRoZSByZWFsIGtleS4gSSBuZWVkIHRvIHRyYWNlIHRoZSB2YXJpYWJsZXMgYmFjayB0byB0aGVpciBkZWZpbml0aW9ucy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZmxhZ3MgKGAjaWZkZWZgLCBgLURgKSwgaW5jbHVzaW9uIG9mIHNvdXJjZSBmaWxlcyBiYXNlZCBvbiBmZWF0dXJlIGZsYWdzLCBvciBzcGVjaWZpYyB0YXJnZXRzIHRoYXQgaW5jbHVkZSBgY3hhY3J1LmNgIGFzIGEgZGVwZW5kZW5jeS4KClRoaXMgY291bGQgcmFuZ2UgZnJvbSBhIHNpbXBsZSBgaWZlcWAgc3RhdGVtZW50IHRvIGEgbW9yZSBpbnRyaWNhdGUgY2FzY2FkZSBvZiBpbmNsdWRlcyBhbmQgdmFyaWFibGUgYXNzaWdubWVudHMuIEkmIzM5O2xsIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIGNvbXBsZXhpdHkgb2YgdGhlIGJ1aWxkIHN5c3RlbSBhbmQgY2hvb3NlIHRoZSBtb3N0IGVmZmVjdGl2ZSBzZWFyY2ggc3RyYXRlZ3kuIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgb3IgdGFyZ2V0cy4gVGltZSB0byBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y3hhY3J1Lm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL01ha2VmaWxlLTQtI1xuZHJpdmVycy91c2IvYXRtL01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX1VTQl9DWEFDUlUpXHQmIzQzOz0gY3hhY3J1Lm9cbmRyaXZlcnMvdXNiL2F0bS9NYWtlZmlsZS02LW9iai0kKENPTkZJR19VU0JfU1BFRURUT1VDSClcdCYjNDM7PSBzcGVlZHRjaC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA3NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipDaGVja2luZyB0aGUgVVNCIENYQUNSVSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgc3RhdHVzIG9mIGBDT05GSUdfVVNCX0NYQUNSVWAuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZ29pbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSDigJMgdGhlIGBLY29uZmlnYCBmaWxlIHdpdGhpbiB0aGUgVVNCIEFUTSBkcml2ZXIgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIGBkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZ2AuIFRoaXMgc2hvdWxkIGJlIGEgc3RyYWlnaHRmb3J3YXJkIGNoZWNrLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBpZiBpdCYjMzk7cyBkZWZpbmVkLCBpZiBpdCYjMzk7cyB0cmlzdGF0ZWQsIGFuZCBhbnkgZGVwZW5kZW5jaWVzIG9yIGRlZmF1bHQgdmFsdWVzLiBLbm93aW5nIHRoZSBjb250ZXh0IHdpdGhpbiB0aGUgYEtjb25maWdgIGlzIGNydWNpYWwsIGVzcGVjaWFsbHkgcmVnYXJkaW5nIGl0cyBsb2NhdGlvbiB3aXRoaW4gdGhlIHNvdXJjZSB0cmVlLiBUaGlzIHVzdWFsbHkgaGVscHMgbWUgdW5kZXJzdGFuZCB3aGljaCBvdGhlciByZWxhdGVkIG9wdGlvbnMgb3IgZHJpdmVycyBtaWdodCBiZSByZWxldmFudC4gRXNzZW50aWFsbHksIEkmIzM5O20gdHJ5aW5nIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHdoZXJlIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gc3RhbmRzIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFVTQl9DWEFDUlUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZz0yMD1jb25maWcgVVNCX1NQRUVEVE9VQ0hcbi0tXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy0zMS1cbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnOjMyOmNvbmZpZyBVU0JfQ1hBQ1JVXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy0zMy1cdHRyaXN0YXRlIFwmIzM0O0NvbmV4YW50IEFjY2Vzc1J1bm5lciBVU0Igc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzOTQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIERlcGVuZGVuY2llcyoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhdCBwbGF5IGhlcmUuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYWJvdXQgaWRlbnRpZnlpbmcgdGhlIGRpcmVjdCByZWxhdGlvbnNoaXBzOyBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgY2hhbmdlcyBvciBmYWlsdXJlcyB3aXRoaW4gdGhvc2UgZGVwZW5kZW50IGNvbXBvbmVudHMuIEkmIzM5O20gYWxyZWFkeSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgYm90dGxlbmVja3MsIHNpbmdsZSBwb2ludHMgb2YgZmFpbHVyZSwgYW5kIHRoZSBjYXNjYWRpbmcgZWZmZWN0cyBhIHByb2JsZW0gaW4gb25lIGFyZWEgY291bGQgdHJpZ2dlciBhY3Jvc3MgdGhlIHN5c3RlbS4gSXQmIzM5O3MgYWJvdXQgYnVpbGRpbmcgYSBtZW50YWwgbWFwIG9mIHRoZSBzeXN0ZW0mIzM5O3MgYXJjaGl0ZWN0dXJlIGFuZCBwaW5wb2ludGluZyB0aGUgY3JpdGljYWwgcGF0aHdheXMuIEkmIzM5O20gbWVudGFsbHkgcGFyc2luZyB0aGUgY29kZSwgbGlicmFyeSB2ZXJzaW9ucywgYW5kIGV4dGVybmFsIHNlcnZpY2VzIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0aGlzIHRoaW5nIGxlYW5zIG9uIGFuZCBob3cgcm9idXN0IChvciBmcmFnaWxlKSB0aG9zZSBsaW5rcyBhcmUuIEVzc2VudGlhbGx5LCBJJiMzOTttIHRyeWluZyB0byBpZGVudGlmeSB0aGUgd2VhayBsaW5rcyBhbmQgYW50aWNpcGF0ZSB3aGVyZSBwcm9ibGVtcyBtaWdodCBhcmlzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9LY29uZmlnPTY9bWVudWNvbmZpZyBVU0JfQVRNXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7VVNCIERTTCBtb2RlbSBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZzo4Olx0ZGVwZW5kcyBvbiBBVE1cbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTktXHRzZWxlY3QgQ1JDMzJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcwMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIFVTQi1BVE0gRGVwZW5kZW5jaWVzIGluIHRoZSBLZXJuZWwgQ29uZmlnKioKClJpZ2h0LCBsZXQgbWUgc2VlLi4uIEkmIzM5O20gbG9va2luZyBhdCBgVVNCX0NYQUNSVWAuIFRoZSBidWlsZCBzeXN0ZW0gaXMgZmxhZ2dpbmcgaXQsIGFuZCB0aGUgZGVwZW5kZW5jeSBjaGFpbiBpcyBtYWtpbmcgbWUgdGhpbmsuIE9rYXksIHNvIGBVU0JfQ1hBQ1JVYCBsZWFucyBvbiBgVVNCX0FUTWAsIHdoaWNoLCB1bnN1cnByaXNpbmdseSwgZGVwZW5kcyBvbiBgQVRNYCBpdHNlbGYuIFRoYXQmIzM5O3MgYWxsIGxvZ2ljYWwgc28gZmFyLiBOb3cgdGhlIGNyaXRpY2FsIGJpdDogSSYjMzk7bSBwcmV0dHkgc3VyZSBgVVNCX0NYQUNSVWAgaXMgbmVzdGVkICppbnNpZGUqIHRoZSBgbWVudWNvbmZpZ2Agb3B0aW9uIGZvciBgVVNCX0FUTWAuIEJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGF0LiBMZXQmIzM5O3Mgbm90IG1ha2UgYXNzdW1wdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgdGhlIFVTQiBBVE0gZHJpdmVycy4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYGRyaXZlcnMvdXNiL2F0bS9LY29uZmlnYCB0byB2ZXJpZnkgdGhlIGV4YWN0IGNvbmZpZyBzdHJ1Y3R1cmUgYW5kIGl0cyBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoaXMgY2xlYXJseSBiZWZvcmUgSSBtYWtlIGFueSBtb2RpZmljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIFVTQi9BVE0gRFNMIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0bWVudWNvbmZpZyBVU0JfQVRNXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtVU0IgRFNMIG1vZGVtIHN1cHBvcnRcJiMzNDtcbiAgIDg6XHRcdGRlcGVuZHMgb24gQVRNXG4gICA5Olx0XHRzZWxlY3QgQ1JDMzJcbiAgMTA6XHRcdGhlbHBcbiAgMTE6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IGEgVVNCIERpZ2l0YWwgU3Vic2NyaWJlciBMaW5lIChEU0wpXG4gIDEyOlx0XHQgIG1vZGVtIHRvIHlvdXIgY29tcHV0ZXImIzM5O3MgVVNCIHBvcnQuICBZb3Ugd2lsbCB0aGVuIG5lZWQgdG8gY2hvb3NlIHlvdXJcbiAgMTM6XHRcdCAgbW9kZW0gZnJvbSB0aGUgbGlzdCBiZWxvdy5cbiAgMTQ6XHRcbiAgMTU6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gIDE2Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1c2JhdG0uXG4gIDE3Olx0XG4gIDE4Olx0aWYgVVNCX0FUTVxuICAxOTpcdFxuICAyMDpcdGNvbmZpZyBVU0JfU1BFRURUT1VDSFxuICAyMTpcdFx0dHJpc3RhdGUgXCYjMzQ7U3BlZWR0b3VjaCBVU0Igc3VwcG9ydFwmIzM0O1xuICAyMjpcdFx0c2VsZWN0IEZXX0xPQURFUlxuICAyMzpcdFx0aGVscFxuICAyNDpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGFuIFNwZWVkVG91Y2ggVVNCIG9yIFNwZWVkVG91Y2ggMzMwXG4gIDI1Olx0XHQgIG1vZGVtLiAgSW4gb3JkZXIgdG8gdXNlIHlvdXIgbW9kZW0geW91IHdpbGwgbmVlZCB0byBpbnN0YWxsIHRoZSBcbiAgMjY6XHRcdCAgdHdvIHBhcnRzIG9mIHRoZSBmaXJtd2FyZSwgZXh0cmFjdGVkIGJ5IHRoZSB1c2VyIHNwYWNlIHRvb2xzOyBzZWVcbiAgMjc6XHRcdCAgXHUwMDNjaHR0cDovL3d3dy5saW51eC11c2Iub3JnL1NwZWVkVG91Y2gvXHUwMDNlIGZvciBkZXRhaWxzLlxuICAyODpcdFxuICAyOTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAgMzA6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNwZWVkdGNoLlxuICAzMTpcdFxuICAzMjpcdGNvbmZpZyBVU0JfQ1hBQ1JVXG4gIDMzOlx0XHR0cmlzdGF0ZSBcJiMzNDtDb25leGFudCBBY2Nlc3NSdW5uZXIgVVNCIHN1cHBvcnRcJiMzNDtcbiAgMzQ6XHRcdHNlbGVjdCBGV19MT0FERVJcbiAgMzU6XHRcdGhlbHBcbiAgMzY6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhbiBBRFNMIFVTQiBtb2RlbSBiYXNlZCBvbiB0aGUgQ29uZXhhbnRcbiAgMzc6XHRcdCAgQWNjZXNzUnVubmVyIGNoaXBzZXQuICBJbiBvcmRlciB0byB1c2UgeW91ciBtb2RlbSB5b3Ugd2lsbCBuZWVkIHRvXG4gIDM4Olx0XHQgIGluc3RhbGwgdGhlIGZpcm13YXJlLCBleHRyYWN0ZWQgYnkgdGhlIHVzZXIgc3BhY2UgdG9vbHM7IHNlZVxuICAzOTpcdFx0ICBcdTAwM2NodHRwOi8vYWNjZXNzcnVubmVyLnNvdXJjZWZvcmdlLm5ldC9cdTAwM2UgZm9yIGRldGFpbHMuXG4gIDQwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NTcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBVU0IgRHJpdmVycyBhbmQgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGRyaXZlciBzaXR1YXRpb24sIGFuZCBpdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGF0IGZpcnN0IGdsYW5jZS4gV2UgZGVmaW5pdGVseSBuZWVkIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgYm90aCBgVVNCX0FUTWAgYW5kIGBVU0JfQ1hBQ1JVYCBkcml2ZXJzLiBObyBzdXJwcmlzZXMgdGhlcmUuIE5vdywgdGhlIGtleSBpcyB0aGUgZGVwZW5kZW5jeS4gSSByZW1lbWJlciBgVVNCX0FUTWAgcmVsaWVzIG9uIGBBVE1gLCBzbyB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0JiMzOTtzIGhhbmRsZWQgY29ycmVjdGx5IGluIHRoZSBjb25maWd1cmF0aW9uLiBUaGF0IG1ha2VzIHNlbnNlLCBjb21tb24gYXJjaGl0ZWN0dXJlLiBOb3csIGJlZm9yZSBJIHByb2NlZWQgSSByZWFsbHkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYEFUTWAgaXRzZWxmIGhhcyBhbnkgZnVydGhlciB1cHN0cmVhbSBkZXBlbmRlbmNpZXMuIEkgYmV0dGVyIGdvIGFuZCBjaGVjayBpdCYjMzk7cyBkZXBlbmRlbmNpZXMgc28gSSBkb24mIzM5O3QgbWlzcyBzb21ldGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBVE0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYXRtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2F0bS9LY29uZmlnLTUtXG5uZXQvYXRtL0tjb25maWc6Njpjb25maWcgQVRNXG5uZXQvYXRtL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O0FzeW5jaHJvbm91cyBUcmFuc2ZlciBNb2RlIChBVE0pXCYjMzQ7XG4tLVxubmV0L2F0bS9LY29uZmlnLTIxLVxubmV0L2F0bS9LY29uZmlnOjIyOmNvbmZpZyBBVE1fQlIyNjg0XG5uZXQvYXRtL0tjb25maWctMjMtXHR0cmlzdGF0ZSBcJiMzNDtSRkMxNDgzLzI2ODQgQnJpZGdlZCBwcm90b2NvbHNcJiMzNDtcbi0tXG5uZXQvYXRtL0tjb25maWctMzAtXG5uZXQvYXRtL0tjb25maWc6MzE6Y29uZmlnIEFUTV9CUjI2ODRfSVBGSUxURVJcbm5ldC9hdG0vS2NvbmZpZy0zMi1cdGJvb2wgXCYjMzQ7UGVyLVZDIElQIGZpbHRlciBrbHVkZ2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkzNwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQVRNIENvbmZpZ3VyYXRpb246IEEgUXVpY2sgU2NhbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7V2hlcmUgd291bGQgdGhlIEFUTSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYmU/JiMzNDsgR2l2ZW4gdGhlIHN0cnVjdHVyZSBJJiMzOTttIGZhbWlsaWFyIHdpdGgsIGBuZXQvYCBmZWVscyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIFNwZWNpZmljYWxseSwgYG5ldC9hdG0vYCBqdW1wcyBvdXQgYXMgdGhlIG1vc3QgbGlrZWx5IHN1YmRpcmVjdG9yeS4gU28sIG15IG1lbnRhbCBwcm9jZXNzIGlzIGxlYWRpbmcgbWUgZGlyZWN0bHkgdG8gYG5ldC9hdG0vS2NvbmZpZ2AuIFRoYXQgZmlsZSBpcyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBBVE0tcmVsYXRlZCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJdCYjMzk7cyB0aGUgc3RhbmRhcmQgbG9jYXRpb24gZm9yIG1hbmFnaW5nIGRlcGVuZGVuY2llcyBhbmQgc2VsZWN0aW5nIGJ1aWxkIG9wdGlvbnMgd2l0aGluIHRoYXQgcGFydCBvZiB0aGUga2VybmVsIHRyZWUuIEEgcXVpY2sgY2hlY2sgb2YgdGhhdCBmaWxlIHNob3VsZCBnaXZlIG1lIGEgcHJldHR5IGNsZWFyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2F0bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgQXN5bmNocm9ub3VzIFRyYW5zZmVyIE1vZGUgKEFUTSlcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIEFUTVxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7QXN5bmNocm9ub3VzIFRyYW5zZmVyIE1vZGUgKEFUTSlcJiMzNDtcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgQVRNIGlzIGEgaGlnaC1zcGVlZCBuZXR3b3JraW5nIHRlY2hub2xvZ3kgZm9yIExvY2FsIEFyZWEgTmV0d29ya3NcbiAgMTA6XHRcdCAgYW5kIFdpZGUgQXJlYSBOZXR3b3Jrcy4gIEl0IHVzZXMgYSBmaXhlZCBwYWNrZXQgc2l6ZSBhbmQgaXNcbiAgMTE6XHRcdCAgY29ubmVjdGlvbiBvcmllbnRlZCwgYWxsb3dpbmcgZm9yIHRoZSBuZWdvdGlhdGlvbiBvZiBtaW5pbXVtXG4gIDEyOlx0XHQgIGJhbmR3aWR0aCByZXF1aXJlbWVudHMuXG4gIDEzOlx0XG4gIDE0Olx0XHQgIEluIG9yZGVyIHRvIHBhcnRpY2lwYXRlIGluIGFuIEFUTSBuZXR3b3JrLCB5b3VyIExpbnV4IGJveCBuZWVkcyBhblxuICAxNTpcdFx0ICBBVE0gbmV0d29ya2luZyBjYXJkLiBJZiB5b3UgaGF2ZSB0aGF0LCBzYXkgWSBoZXJlIGFuZCB0byB0aGUgZHJpdmVyXG4gIDE2Olx0XHQgIG9mIHlvdXIgQVRNIGNhcmQgYmVsb3cuXG4gIDE3Olx0XG4gIDE4Olx0XHQgIE5vdGUgdGhhdCB5b3UgbmVlZCBhIHNldCBvZiB1c2VyLXNwYWNlIHByb2dyYW1zIHRvIGFjdHVhbGx5IG1ha2UgdXNlXG4gIDE5Olx0XHQgIG9mIEFUTS4gIFNlZSB0aGUgZmlsZSBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hdG0ucnN0XHUwMDNlIGZvclxuICAyMDpcdFx0ICBmdXJ0aGVyIGRldGFpbHMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MzAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOgoKKipBbmFseXppbmcgdGhlIEFUTSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgZmlyc3QgdGhpbmcsIGBBVE1gIGhhcyBubyBsaXN0ZWQgZGVwZW5kZW5jaWVzLCB3aGljaCBpcyBnb29kLiBUaGF0IG1ha2VzIGl0IGVhc2llciB0byBldmFsdWF0ZSBpbiBpc29sYXRpb24uIE5vdywgdGhlIG1lYXQgb2YgdGhlIGZpeCBpcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYWRzbF9zdGF0ZV9zdG9yZWAgYW5kIGBhZHNsX2NvbmZpZ19zdG9yZWAuIFRob3NlIGFyZSBzeXNmcyBzdG9yZSBmdW5jdGlvbnMsIHdoaWNoIHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc29tZSBraW5kIG9mIGNvbmZpZ3VyYXRpb24gb3Igc3RhdGUgcGVyc2lzdGVuY2UgbWVjaGFuaXNtLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHdoZXJlIHRob3NlIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQsIHNvIGxldCYjMzk7cyBjaGVjayBgZHJpdmVycy91c2IvYXRtL2N4YWNydS5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSB2dWxuZXJhYmxlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL2N4YWNydS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMzA6XHR9XG4gMzMxOlx0XG4gMzMyOlx0c3RhdGljIHNzaXplX3QgYWRzbF9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gMzMzOlx0XHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4gMzM0Olx0e1xuIDMzNTpcdFx0c3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSA9IHRvX3VzYmF0bV9kcml2ZXJfZGF0YShcbiAzMzY6XHRcdFx0XHR0b191c2JfaW50ZXJmYWNlKGRldikpO1xuIDMzNzpcdFx0aW50IHJldDtcbiAzMzg6XHRcdGludCBwb2xsID0gLTE7XG4gMzM5Olx0XHRjaGFyIHN0cl9jbWRbOF07XG4gMzQwOlx0XHRpbnQgbGVuID0gc3RybGVuKGJ1Zik7XG4gMzQxOlx0XG4gMzQyOlx0XHRpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpXG4gMzQzOlx0XHRcdHJldHVybiAtRUFDQ0VTO1xuIDM0NDpcdFxuIDM0NTpcdFx0cmV0ID0gc3NjYW5mKGJ1ZiwgXCYjMzQ7JTdzXCYjMzQ7LCBzdHJfY21kKTtcbiAzNDY6XHRcdGlmIChyZXQgIT0gMSlcbiAzNDc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMzQ4Olx0XHRyZXQgPSAwO1xuIDM0OTpcdFxuIDM1MDpcdFx0aWYgKGluc3RhbmNlID09IE5VTEwgfHwgaW5zdGFuY2UtXHUwMDNldXNiYXRtLVx1MDAzZWF0bV9kZXYgPT0gTlVMTClcbiAzNTE6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4gMzUyOlx0XG4gMzUzOlx0XHRpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKFx1MDAyNmluc3RhbmNlLVx1MDAzZWFkc2xfc3RhdGVfc2VyaWFsaXplKSlcbiAzNTQ6XHRcdFx0cmV0dXJuIC1FUkVTVEFSVFNZUztcbiAzNTU6XHRcbiAzNTY6XHRcdGlmICghc3RyY21wKHN0cl9jbWQsIFwmIzM0O3N0b3BcJiMzNDspIHx8ICFzdHJjbXAoc3RyX2NtZCwgXCYjMzQ7cmVzdGFydFwmIzM0OykpIHtcbiAzNTc6XHRcdFx0cmV0ID0gY3hhY3J1X2NtKGluc3RhbmNlLCBDTV9SRVFVRVNUX0NISVBfQURTTF9MSU5FX1NUT1AsIE5VTEwsIDAsIE5VTEwsIDApO1xuIDM1ODpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gMzU5Olx0XHRcdFx0YXRtX2VycihpbnN0YW5jZS1cdTAwM2V1c2JhdG0sIFwmIzM0O2NoYW5nZSBhZHNsIHN0YXRlOlwmIzM0O1xuIDM2MDpcdFx0XHRcdFx0XCYjMzQ7IENISVBfQURTTF9MSU5FX1NUT1AgcmV0dXJuZWQgJWRcXG5cJiMzNDssIHJldCk7XG4gMzYxOlx0XG4gMzYyOlx0XHRcdFx0cmV0ID0gLUVJTztcbiAzNjM6XHRcdFx0fSBlbHNlIHtcbiAzNjQ6XHRcdFx0XHRyZXQgPSBsZW47XG4gMzY1Olx0XHRcdFx0cG9sbCA9IENYUE9MTF9TVE9QUEVEO1xuIDM2NjpcdFx0XHR9XG4gMzY3Olx0XHR9XG4gMzY4Olx0XG4gMzY5Olx0XHQvKiBMaW5lIHN0YXR1cyBpcyBvbmx5IHVwZGF0ZWQgZXZlcnkgc2Vjb25kXG4gMzcwOlx0XHQgKiBhbmQgdGhlIGRldmljZSBhcHBlYXJzIHRvIG9ubHkgcmVhY3QgdG9cbiAzNzE6XHRcdCAqIFNUQVJUL1NUT1AgZXZlcnkgc2Vjb25kIHRvby4gV2FpdCAxLjVzIHRvXG4gMzcyOlx0XHQgKiBiZSBzdXJlIHRoYXQgcmVzdGFydCB3aWxsIGhhdmUgYW4gZWZmZWN0LiAqL1xuIDM3MzpcdFx0aWYgKCFzdHJjbXAoc3RyX2NtZCwgXCYjMzQ7cmVzdGFydFwmIzM0OykpXG4gMzc0Olx0XHRcdG1zbGVlcCgxNTAwKTtcbiAzNzU6XHRcbiAzNzY6XHRcdGlmICghc3RyY21wKHN0cl9jbWQsIFwmIzM0O3N0YXJ0XCYjMzQ7KSB8fCAhc3RyY21wKHN0cl9jbWQsIFwmIzM0O3Jlc3RhcnRcJiMzNDspKSB7XG4gMzc3Olx0XHRcdHJldCA9IGN4YWNydV9jbShpbnN0YW5jZSwgQ01fUkVRVUVTVF9DSElQX0FEU0xfTElORV9TVEFSVCwgTlVMTCwgMCwgTlVMTCwgMCk7XG4gMzc4Olx0XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiAzNzk6XHRcdFx0XHRhdG1fZXJyKGluc3RhbmNlLVx1MDAzZXVzYmF0bSwgXCYjMzQ7Y2hhbmdlIGFkc2wgc3RhdGU6XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1MjEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU3lzZnMgU3RvcmUgRnVuY3Rpb24gZm9yIFZ1bG5lcmFiaWxpdGllcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBpdCYjMzk7cyBhIHN5c2ZzIHN0b3JlIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGEgcmVkIGZsYWcg4oCTIHN5c2ZzIGVudHJpZXMgYXJlIHVzZXItYWNjZXNzaWJsZSwgd2hpY2ggbWVhbnMgdGhleSYjMzk7cmUgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cy4gQW5kLCB5ZXMsIEkgcmVjYWxsIHN5emthbGxlciBhY3RpdmVseSB0YXJnZXRzIHN5c2ZzIGVudHJpZXMuIFRoaXMgcGFydGljdWxhciBkZXZpY2UgaXMgVVNCLCB3aGljaCBpcyBnb29kLiBUaGF0IG1lYW5zIEkgY2FuIHBvdGVudGlhbGx5IGVtdWxhdGUgaXQgdXNpbmcgVVNCIGR1bW15X2hjZCBmb3IgdGVzdGluZy4KClRoZSBwYXRjaCBpdHNlbGYgaW50cm9kdWNlcyBhIGNoZWNrIGZvciBgaW5zdGFuY2UtJmd0O3VzYmF0bS0mZ3Q7YXRtX2RldiA9PSBOVUxMYC4gSW50ZXJlc3RpbmcuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCBvZiB0aGF0IGNoZWNrLiBUaGUgbWVhdCBvZiB0aGUgcGF0Y2ggc2VlbXMgdG8gY2VudGVyIGFyb3VuZCBgYWRzbF9zdGF0ZV9zdG9yZWAgYW5kIGBhZHNsX2NvbmZpZ19zdG9yZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aG9zZSBhcmUgdGhlIGZ1bmN0aW9ucyB0byBmb2N1cyBvbi4gV2FpdCBhIG1pbnV0ZS4uLiAqc3RhdGljKj8gT2theSwgdGhhdCBjaGFuZ2VzIHRoaW5ncy4gU3RhdGljIGZ1bmN0aW9ucyBjYW4gc3RpbGwgYmUgY2FsbGVkIGZyb20gb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIGJ1dCBhcmUgbGlrZWx5IG5vdCBjYWxsZWQgZGlyZWN0bHkgdGhyb3VnaCB0aGUgc3lzZnMgZW50cnkuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGJhY2suIExldCYjMzk7cyBzZWUgaWYgdGhleSBhcmUgdXNlZCB3aXRoaW4gc29tZSBtYWNyby4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBpbmRpY2F0b3Igb2YgaG93IGFuZCB3aGVyZSB0aGV5IGFyZSBjYWxsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fkc2xfc3RhdGVfc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTMxNT1zdGF0aWMgc3NpemVfdCBhZHNsX3N0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zMzEtXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MzMyOnN0YXRpYyBzc2l6ZV90IGFkc2xfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTMzMy1cdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA3NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlLCB0YWlsb3JlZCBmb3IgYW5vdGhlciBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgQURTTCBTdGF0ZSBNYW5hZ2VtZW50KioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdlJiMzOTtyZSBoYW5kbGluZyBBRFNMIHN0YXRlIOKAkyBib3RoIGRpc3BsYXlpbmcgaXQgYW5kIHBlcnNpc3RpbmcgaXQuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gcGlucG9pbnRpbmcgdGhlIGNvZGUgcmVzcG9uc2libGUgZm9yIHRoZXNlIG9wZXJhdGlvbnMuIFNvLCBJJiMzOTttIHRoaW5raW5nLCBsZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIHRhcmdldGVkIHNlYXJjaC4gSSYjMzk7bGwgYmVnaW4gYnkgbG9va2luZyBmb3IgdXNhZ2VzIG9mIGZ1bmN0aW9ucyBvciBtZXRob2RzIHRoYXQgbGlrZWx5IGRlYWwgd2l0aCBzaG93aW5nIHRoZSBBRFNMIHN0YXRlLCBwZXJoYXBzIHNvbWV0aGluZyBuYW1lZCBgYWRzbF9zdGF0ZV9zaG93YC4gVGhlbiwgSSYjMzk7bGwgbW92ZSBvbiB0byB0aG9zZSBpbnZvbHZlZCBpbiBzdG9yaW5nIHRoYXQgc3RhdGUsIGxpa2UgYGFkc2xfc3RhdGVfc3RvcmVgLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBqdW1waW5nLW9mZiBwb2ludCB0byBleHBsb3JlIHRoZSByZWxldmFudCBtb2R1bGVzIGFuZCB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGZsb3cuIEtub3dpbmcgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgKnVzZWQqIGlzIGtleSwgbm90IGp1c3Qgd2hlcmUgdGhleSYjMzk7cmUgZGVmaW5lZC4gVGhhdOKAmXMgd2hlcmUgdGhlIHJlYWwgaW5zaWdodHMgYXJlLiBUaGlzIGFwcHJvYWNoIHR5cGljYWxseSBnZXRzIG1lIHRvIHdoZXJlIEkgbmVlZCB0byBiZSBwcmV0dHkgcXVpY2tseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWRzbF9zdGF0ZV8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTE3MD1zdHJ1Y3QgY3hhY3J1X2RhdGEge1xuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xNzUtXHRpbnQgbGluZV9zdGF0dXM7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTc2Olx0c3RydWN0IG11dGV4IGFkc2xfc3RhdGVfc2VyaWFsaXplO1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTE3Ny1cdGludCBhZHNsX3N0YXR1cztcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9MzAzPXN0YXRpYyBzc2l6ZV90IG1hY19hZGRyZXNzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zMTQtXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MzE1OnN0YXRpYyBzc2l6ZV90IGFkc2xfc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzE2LVx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zilcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzMxLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjMzMjpzdGF0aWMgc3NpemVfdCBhZHNsX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zMzMtXHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTM1Mi1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzozNTM6XHRpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKFx1MDAyNmluc3RhbmNlLVx1MDAzZWFkc2xfc3RhdGVfc2VyaWFsaXplKSlcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zNTQtXHRcdHJldHVybiAtRVJFU1RBUlRTWVM7XG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTQyNC1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo0MjU6XHRtdXRleF91bmxvY2soXHUwMDI2aW5zdGFuY2UtXHUwMDNlYWRzbF9zdGF0ZV9zZXJpYWxpemUpO1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTQyNi1cbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9NzcxPXN0YXRpYyBpbnQgY3hhY3J1X2F0bV9zdGFydChzdHJ1Y3QgdXNiYXRtX2RhdGEgKnVzYmF0bV9pbnN0YW5jZSxcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzg5LVx0Lyogc3RhcnQgQURTTCAqL1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjc5MDpcdG11dGV4X2xvY2soXHUwMDI2aW5zdGFuY2UtXHUwMDNlYWRzbF9zdGF0ZV9zZXJpYWxpemUpO1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc5MS1cdHJldCA9IGN4YWNydV9jbShpbnN0YW5jZSwgQ01fUkVRVUVTVF9DSElQX0FEU0xfTElORV9TVEFSVCwgTlVMTCwgMCwgTlVMTCwgMCk7XG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTgxMi1cdG11dGV4X3VubG9jayhcdTAwMjZpbnN0YW5jZS1cdTAwM2Vwb2xsX3N0YXRlX3NlcmlhbGl6ZSk7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6ODEzOlx0bXV0ZXhfdW5sb2NrKFx1MDAyNmluc3RhbmNlLVx1MDAzZWFkc2xfc3RhdGVfc2VyaWFsaXplKTtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy04MTQtXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTExMjI9c3RhdGljIGludCBjeGFjcnVfYmluZChzdHJ1Y3QgdXNiYXRtX2RhdGEgKnVzYmF0bV9pbnN0YW5jZSxcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTE0Ni1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoxMTQ3Olx0bXV0ZXhfaW5pdChcdTAwMjZpbnN0YW5jZS1cdTAwM2VhZHNsX3N0YXRlX3NlcmlhbGl6ZSk7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTE0OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE1MAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHBlcnNwZWN0aXZlOgoKKipGaW5kaW5nIHRoZSBVc2FnZSBvZiBgYWRzbF9zdGF0ZV9zaG93YCBhbmQgYGFkc2xfc3RhdGVfc3RvcmVgKioKCkhtbSwgSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGVyZSBgYWRzbF9zdGF0ZV9zaG93YCBhbmQgYGFkc2xfc3RhdGVfc3RvcmVgIGFyZSBhY3R1YWxseSBiZWluZyAqdXNlZCouIEl0JiMzOTtzIGEgYml0IHVuY2xlYXIgZnJvbSBhIHF1aWNrIGdsYW5jZS4gSSBuZWVkIHRvIHRyYWNlIHRoZWlyIHVzYWdlLiBBcmUgdGhleSBqdXN0IGZsb2F0aW5nIGFyb3VuZCBpbiB0aGUgY29kZWJhc2UsIG9yIGFyZSB0aGV5IHBhcnQgb2Ygc29tZXRoaW5nIGJpZ2dlcj8gQWgsIHdhaXQgYSBtaW51dGUsIHRoZSB3YXkgdGhpcyBjb2RlIGlzIHN0cnVjdHVyZWQsIGl0JiMzOTtzIG9mdGVuIHRoZSBjYXNlIHRoYXQgdGhlc2Uga2luZHMgb2YgZnVuY3Rpb25zIGFyZSBwbHVnZ2VkIGludG8gYSBtYWNybywgbGlrZSBgREVWSUNFX0FUVFJgLiBUaGF0IHdvdWxkIG1ha2UgYSBsb3Qgb2Ygc2Vuc2UuIEkgc2hvdWxkIGxvb2sgZm9yIGEgbWFjcm8gZGVmaW5pdGlvbiBhbmQgdGhlbiBzZWUgaWYgdGhvc2UgZnVuY3Rpb25zIGFyZSBwYXNzZWQgYXMgYXJndW1lbnRzIHRvIGl0LiBUaGF0JiMzOTtzIHByb2JhYmx5IHRoZSBtb3N0IGxpa2VseSBwbGFjZSB0byBmaW5kIHRoZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7REVWSUNFX0FUVFIuKmFkc2xfc3RhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDMzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQgYW5kIGhhdmUgdGhhdCBzZWFyY2ggcXVlcnkgaW4gbWluZDoKCioqSW5pdGlhbCBTZWFyY2ggU3RyYXRlZ3kgZm9yIEFEU0wgU3RhdGUgSW5mb3JtYXRpb24qKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoZSBgYWRzbF9zdGF0ZWAgdmFyaWFibGUuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIGJ1dCBJIHdhbnQgdG8gYmUgZWZmaWNpZW50IGFuZCB6ZXJvIGluIG9uIHRoZSBjb3JlIGRlZmluaXRpb24gb3IgdXNhZ2UsIG5vdCBqdXN0IGV2ZXJ5IHNpbmdsZSBwbGFjZSBpdCYjMzk7cyBtZW50aW9uZWQuIFNvLCBJJiMzOTttIHRoaW5raW5nLCBsZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIGZvY3VzZWQgc2VhcmNoLiBJIGRvbiYjMzk7dCB3YW50IHRvIGdldCBib2dnZWQgZG93biBpbiBmdW5jdGlvbnMgdGhhdCBqdXN0ICpzaG93KiB0aGUgc3RhdGUgdG8gdGhlIHVzZXIgb3IgKnN0b3JlKiBpdCBzb21ld2hlcmUuIFRob3NlIGFyZSBkb3duc3RyZWFtIGVmZmVjdHMuIEkgd2FudCB0aGUgbWVhdCBvZiB3aGVyZSBgYWRzbF9zdGF0ZWAgaXMgYWN0dWFsbHkgKmRlZmluZWQqLCAqbW9kaWZpZWQqLCBvciAqZGlyZWN0bHkgdXNlZCogd2l0aGluIHRoZSBzeXN0ZW0uIFRoZXJlZm9yZSwgSSYjMzk7bGwgZmlsdGVyIG91dCBhbnkgc2VhcmNoIHJlc3VsdHMgdGhhdCBpbmNsdWRlIGBfc2hvd2Agb3IgYF9zdG9yZWAuIFRoYXQgc2hvdWxkIGhlbHAgbWUgY3V0IHRocm91Z2ggdGhlIG5vaXNlIGFuZCBnZXQgdG8gdGhlIGNyaXRpY2FsIGxvY2F0aW9ucyBtb3JlIHF1aWNrbHkuIFRoaXMgaXMgYWJvdXQgZWZmaWNpZW50IGRlYnVnZ2luZyBhbmQgcHJvYmxlbSBzb2x2aW5nLCBub3QgYSBjYXN1YWwgZXhwbG9yYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fkc2xfc3RhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTE3MD1zdHJ1Y3QgY3hhY3J1X2RhdGEge1xuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xNzUtXHRpbnQgbGluZV9zdGF0dXM7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTc2Olx0c3RydWN0IG11dGV4IGFkc2xfc3RhdGVfc2VyaWFsaXplO1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTE3Ny1cdGludCBhZHNsX3N0YXR1cztcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9MzAzPXN0YXRpYyBzc2l6ZV90IG1hY19hZGRyZXNzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zMTQtXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MzE1OnN0YXRpYyBzc2l6ZV90IGFkc2xfc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzE2LVx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zilcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzMxLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjMzMjpzdGF0aWMgc3NpemVfdCBhZHNsX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zMzMtXHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTM1Mi1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzozNTM6XHRpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKFx1MDAyNmluc3RhbmNlLVx1MDAzZWFkc2xfc3RhdGVfc2VyaWFsaXplKSlcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zNTQtXHRcdHJldHVybiAtRVJFU1RBUlRTWVM7XG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTQyNC1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo0MjU6XHRtdXRleF91bmxvY2soXHUwMDI2aW5zdGFuY2UtXHUwMDNlYWRzbF9zdGF0ZV9zZXJpYWxpemUpO1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTQyNi1cbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9NTM1PUNYQUNSVV9BVFRSXyMjX2FjdGlvbihDWElORl9DT05UUk9MTEVSX1ZFUlNJT04sICAgICAgICB1MzIsICBhZHNsX2NvbnRyb2xsZXJfdmVyc2lvbik7IFxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NTM2OkNYQUNSVV9DTURfIyNfYWN0aW9uKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZHNsX3N0YXRlKTsgXFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy01MzctQ1hBQ1JVX1NFVF8jI19hY3Rpb24oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkc2xfY29uZmlnKTtcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9NTQxPXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpjeGFjcnVfYXR0cnNbXSA9IHtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy01NDItXHRcdTAwMjZkZXZfYXR0cl9hZHNsX2NvbmZpZy5hdHRyLFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjU0MzpcdFx1MDAyNmRldl9hdHRyX2Fkc2xfc3RhdGUuYXR0cixcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy01NDQtXHRcdTAwMjZkZXZfYXR0cl9hZHNsX2NvbnRyb2xsZXJfdmVyc2lvbi5hdHRyLFxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz03NzE9c3RhdGljIGludCBjeGFjcnVfYXRtX3N0YXJ0KHN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtX2luc3RhbmNlLFxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03ODktXHQvKiBzdGFydCBBRFNMICovXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NzkwOlx0bXV0ZXhfbG9jayhcdTAwMjZpbnN0YW5jZS1cdTAwM2VhZHNsX3N0YXRlX3NlcmlhbGl6ZSk7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzkxLVx0cmV0ID0gY3hhY3J1X2NtKGluc3RhbmNlLCBDTV9SRVFVRVNUX0NISVBfQURTTF9MSU5FX1NUQVJULCBOVUxMLCAwLCBOVUxMLCAwKTtcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtODEyLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmluc3RhbmNlLVx1MDAzZXBvbGxfc3RhdGVfc2VyaWFsaXplKTtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo4MTM6XHRtdXRleF91bmxvY2soXHUwMDI2aW5zdGFuY2UtXHUwMDNlYWRzbF9zdGF0ZV9zZXJpYWxpemUpO1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTgxNC1cbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9ODIwPXN0YXRpYyB2b2lkIGN4YWNydV9wb2xsX3N0YXR1cyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTgzOS1cdFx0XHRpZiAocmV0ICE9IC1FU0hVVERPV04pXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6ODQwOlx0XHRcdFx0YXRtX3dhcm4odXNiYXRtLCBcJiMzNDtwb2xsaW5nIGRpc2FibGVkLCBzZXQgYWRzbF9zdGF0ZVwmIzM0O1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTg0MS1cdFx0XHRcdFx0XHRcJiMzNDsgdG8gJiMzOTtzdGFydCYjMzk7IG9yICYjMzk7cG9sbCYjMzk7IHRvIHJlc3VtZVxcblwmIzM0Oyk7XG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTExMjI9c3RhdGljIGludCBjeGFjcnVfYmluZChzdHJ1Y3QgdXNiYXRtX2RhdGEgKnVzYmF0bV9pbnN0YW5jZSxcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTE0Ni1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoxMTQ3Olx0bXV0ZXhfaW5pdChcdTAwMjZpbnN0YW5jZS1cdTAwM2VhZHNsX3N0YXRlX3NlcmlhbGl6ZSk7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTE0OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg4OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIGEgQ29tbWFuZCBDYWxsKioKClJpZ2h0LCBzbyBJIHNlZSBgQ1hBQ1JVX0NNRF8jI19hY3Rpb24oIGFkc2xfc3RhdGUpO2AgYmVpbmcgaW52b2tlZCBoZXJlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCBgQ1hBQ1JVX0NNRF9gIGlzIGludm9sdmVkLiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdCBtYWNybywgdGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBhY3Rpb24gaXMuJiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgQ1hBQ1JVX0NNRF9gIGFjdHVhbGx5IGV4cGFuZHMgdG8uIFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlbnQgb2YgdGhpcyBlbnRpcmUgY2FsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVmaW5lIENYQUNSVV9DTURfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL2N4YWNydS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz0xOTk9c3RhdGljIERFVklDRV9BVFRSX1JPKF9uYW1lKVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTIwMC1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoyMDE6I2RlZmluZSBDWEFDUlVfQ01EX0lOSVQoX25hbWUpIFxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjAyLXN0YXRpYyBERVZJQ0VfQVRUUl9SVyhfbmFtZSlcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9MjE5PUNYQUNSVV9fQVRUUl9JTklUKF9uYW1lKVxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yMjEtI2RlZmluZSBDWEFDUlVfQVRUUl9DUkVBVEUoX3YsIF90LCBfbmFtZSkgQ1hBQ1JVX0RFVklDRV9DUkVBVEVfRklMRShfbmFtZSlcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoyMjI6I2RlZmluZSBDWEFDUlVfQ01EX0NSRUFURShfbmFtZSkgICAgICAgICAgQ1hBQ1JVX0RFVklDRV9DUkVBVEVfRklMRShfbmFtZSlcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yMjMtI2RlZmluZSBDWEFDUlVfU0VUX0NSRUFURShfbmFtZSkgICAgICAgICAgQ1hBQ1JVX0RFVklDRV9DUkVBVEVfRklMRShfbmFtZSlcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjI2LSNkZWZpbmUgQ1hBQ1JVX0FUVFJfUkVNT1ZFKF92LCBfdCwgX25hbWUpIENYQUNSVV9ERVZJQ0VfUkVNT1ZFX0ZJTEUoX25hbWUpXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MjI3OiNkZWZpbmUgQ1hBQ1JVX0NNRF9SRU1PVkUoX25hbWUpICAgICAgICAgIENYQUNSVV9ERVZJQ0VfUkVNT1ZFX0ZJTEUoX25hbWUpXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjI4LSNkZWZpbmUgQ1hBQ1JVX1NFVF9SRU1PVkUoX25hbWUpICAgICAgICAgIENYQUNSVV9ERVZJQ0VfUkVNT1ZFX0ZJTEUoX25hbWUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDgzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgcXVpY2sgcnVuZG93biBvZiB0aGVzZSBjb25zaWRlcmF0aW9ucywga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgYGFkc2xfc3RhdGVfc3RvcmVgIGFuZCBgYWRzbF9jb25maWdfc3RvcmVgIGZvciBWdWxuZXJhYmlsaXRpZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4gSSYjMzk7bSBsb29raW5nIGF0IGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoZXkmIzM5O3JlIHN5c2ZzIHN0b3JlIGZ1bmN0aW9ucyDigJMgZ29vZCwgc3RyYWlnaHRmb3J3YXJkLiBBcmUgdGhleSBhY2Nlc3NpYmxlIHRocm91Z2ggc3lzZnM/IFllcywgdGhhdCYjMzk7cyB0aGUgcG9pbnQgb2YgdGhlbSBiZWluZyB0aGVyZSwgc28gdGhhdCYjMzk7cyBhIGNoZWNrIG1hcmsuIENhbiBzeXprYWxsZXIgZ2V0IGF0IHRoZW0gZm9yIGZ1enppbmc/IEFic29sdXRlbHksIHN5emthbGxlciBsb3ZlcyB0byBwbGF5IHdpdGggc3lzZnMsIGl0JiMzOTtzIGEga25vd24gYXR0YWNrIHZlY3Rvciwgc28gdGhhdCYjMzk7cyBhbm90aGVyIGNoZWNrLiBIb2xkIG9uLi4uIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgYGFkc2xfc3RhdGVfc3RvcmVgLiBJdCByZXF1aXJlcyBgQ0FQX05FVF9BRE1JTmA/IEFoLCB0aGF0JiMzOTtzIGNydWNpYWwuIFRoaXMgaXMgc29tZXRoaW5nIHRoYXQgc3l6a2FsbGVyIGxpa2VseSBoYXMgdG8gY29uc2lkZXIgd2hlbiBhdHRlbXB0aW5nIHRoZSBmdXp6LCBhbmQgSSB3b3VsZCBjZXJ0YWlubHkgaGF2ZSB0byBjb25zaWRlciBpdCB3aGVuIGNoZWNraW5nIGlmIHRoZSBzeXN0ZW0gaGFzIGJlZW4gbWlzY29uZmlndXJlZC4gTm93LCBsZXQmIzM5O3MgZGlnIGludG8gdGhhdCBgYWRzbF9zdGF0ZV9zdG9yZWAgZnVuY3Rpb24gc3BlY2lmaWNhbGx5IGFuZCBzZWUgaG93IGl0IGhhbmRsZXMgdGhlIHBlcm1pc3Npb24gY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL2N4YWNydS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMzI6XHRzdGF0aWMgc3NpemVfdCBhZHNsX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbiAzMzM6XHRcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbiAzMzQ6XHR7XG4gMzM1Olx0XHRzdHJ1Y3QgY3hhY3J1X2RhdGEgKmluc3RhbmNlID0gdG9fdXNiYXRtX2RyaXZlcl9kYXRhKFxuIDMzNjpcdFx0XHRcdHRvX3VzYl9pbnRlcmZhY2UoZGV2KSk7XG4gMzM3Olx0XHRpbnQgcmV0O1xuIDMzODpcdFx0aW50IHBvbGwgPSAtMTtcbiAzMzk6XHRcdGNoYXIgc3RyX2NtZFs4XTtcbiAzNDA6XHRcdGludCBsZW4gPSBzdHJsZW4oYnVmKTtcbiAzNDE6XHRcbiAzNDI6XHRcdGlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSlcbiAzNDM6XHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4gMzQ0Olx0XG4gMzQ1Olx0XHRyZXQgPSBzc2NhbmYoYnVmLCBcJiMzNDslN3NcJiMzNDssIHN0cl9jbWQpO1xuIDM0NjpcdFx0aWYgKHJldCAhPSAxKVxuIDM0NzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAzNDg6XHRcdHJldCA9IDA7XG4gMzQ5Olx0XG4gMzUwOlx0XHRpZiAoaW5zdGFuY2UgPT0gTlVMTCB8fCBpbnN0YW5jZS1cdTAwM2V1c2JhdG0tXHUwMDNlYXRtX2RldiA9PSBOVUxMKVxuIDM1MTpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExNjcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIENhcGFiaWxpdHkgQ2hlY2tzIGluIFN5emthbGxlciBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgU3l6a2FsbGVyIGludGVyYWN0cyB3aXRoIHN5c2ZzIGFuZCBjYXBhYmlsaXRpZXMuIFRoZSBrZXkgaXNzdWUgaGVyZSBpcyB0aGF0IFN5emthbGxlciB1c3VhbGx5IHJ1bnMgd2l0aCBgQ0FQX05FVF9BRE1JTmAgd2l0aGluIGl0cyBvd24gbmFtZXNwYWNlLiBIb3dldmVyLCB0aGUgc3lzZnMgZmlsZXMgYXJlIGdlbmVyYWxseSBpbiB0aGUgZ2xvYmFsIG5hbWVzcGFjZSwgcHJlc2VudGluZyBhIHBvdGVudGlhbCBjb25mbGljdC4gQnV0IHdhaXQsIHNpbmNlIFN5emthbGxlciBydW5zIGluIGEgdXNlciBuYW1lc3BhY2Ugd2hlcmUgaXQgaGFzIGBDQVBfTkVUX0FETUlOYCwgSSBuZWVkIHRvIHJlYWxseSBjb25zaWRlciB3aGF0IGBjYXBhYmxlKENBUF9ORVRfQURNSU4pYCBpcyBhY3R1YWxseSBjaGVja2luZy4gQWgsIHJpZ2h0LCB0aGF0IGNhbGwgY2hlY2tzIHRoZSAqaW5pdCogdXNlciBuYW1lc3BhY2UuIFRoYXQmIzM5O3MgY3J1Y2lhbC4gQW5kIGlmIFN5emthbGxlciBpcyBpbmRlZWQgcnVubmluZyBpbiBhIHVzZXIgbmFtZXNwYWNlLCB0aGVuIHRoYXQgY2hlY2sgd291bGQgZmFpbCBiZWNhdXNlIGBjYXBhYmxlKClgIHVzZXMgdGhlIGluaXQgdXNlciBuYW1lc3BhY2UuCgpTbywgSSBuZWVkIHRvIGNoZWNrIGV4YWN0bHkgd2hldGhlciBgY2FwYWJsZSgpYCBvciBgbnNfY2FwYWJsZSgpYCBhcmUgdXNlZC4gSXQgbG9va3MgbGlrZSBgY2FwYWJsZShDQVBfTkVUX0FETUlOKWAgaXMsIGluIGZhY3QsIHRoZSByZWxldmFudCBmdW5jdGlvbiwgd2hpY2gsIGFzIEkgc2FpZCwgY2hlY2tzIHRoZSAqaW5pdCogdXNlciBuYW1lc3BhY2UuIE5vdywgZ2l2ZW4gdGhhdCBTeXprYWxsZXImIzM5O3Mgc2FuZGJveGluZyByZWxpZXMgb24gdXNlciBuYW1lc3BhY2VzLCBpdCYjMzk7cyB2ZXJ5IHBvc3NpYmxlIHRoYXQgaXQgKndvbiYjMzk7dCogaGF2ZSBgQ0FQX05FVF9BRE1JTmAgaW4gdGhlIGluaXQgdXNlciBuYW1lc3BhY2UsIHdoaWNoIGlzIHByb2JsZW1hdGljLiBCdXQgd2FpdCEgSSBhbHNvIHJlY2FsbCB0aGF0IFN5emthbGxlciBoYXMgYSBgc2FuZGJveD1ub25lYCBtb2RlLCB3aGVyZSBpdCBydW5zIGFzIHJvb3QgaW4gdGhlIGluaXQgbmFtZXNwYWNlLiBUaGF0JiMzOTtzIGEgY3JpdGljYWwgZGlmZmVyZW5jZS4gVGhhdCBtZWFucyBTeXprYWxsZXIgKmNhbiogcmVhY2ggdGhlIGNvZGUgcGF0aCBhbmQgcG90ZW50aWFsbHkgYnlwYXNzIHRoZSBpbnRlbmRlZCBzZWN1cml0eSByZXN0cmljdGlvbnMuIEZ1cnRoZXJtb3JlLCBJIHNlZSB0aGF0IGBhZHNsX2NvbmZpZ19zdG9yZWAgaGFzIHRoZSBzYW1lIGNhcGFiaWxpdHkgY2hlY2ssIG1ha2luZyBpdCBlcXVhbGx5IHZ1bG5lcmFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL2N4YWNydS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MzA6XHRcdHJldHVybiByZXQ7XG4gNDMxOlx0fVxuIDQzMjpcdFxuIDQzMzpcdC8qIENNX1JFUVVFU1RfQ0FSRF9EQVRBX0dFVCB0aW1lcyBvdXQsIHNvIG5vIHNob3cgYXR0cmlidXRlICovXG4gNDM0Olx0XG4gNDM1Olx0c3RhdGljIHNzaXplX3QgYWRzbF9jb25maWdfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuIDQzNjpcdFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuIDQzNzpcdHtcbiA0Mzg6XHRcdHN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UgPSB0b191c2JhdG1fZHJpdmVyX2RhdGEoXG4gNDM5Olx0XHRcdFx0dG9fdXNiX2ludGVyZmFjZShkZXYpKTtcbiA0NDA6XHRcdGludCBsZW4gPSBzdHJsZW4oYnVmKTtcbiA0NDE6XHRcdGludCByZXQsIHBvcywgbnVtO1xuIDQ0MjpcdFx0X19sZTMyIGRhdGFbQ01EX1BBQ0tFVF9TSVpFIC8gNF07XG4gNDQzOlx0XG4gNDQ0Olx0XHRpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpXG4gNDQ1Olx0XHRcdHJldHVybiAtRUFDQ0VTO1xuIDQ0NjpcdFxuIDQ0NzpcdFx0aWYgKGluc3RhbmNlID09IE5VTEwgfHwgaW5zdGFuY2UtXHUwMDNldXNiYXRtLVx1MDAzZWF0bV9kZXYgPT0gTlVMTClcbiA0NDg6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4gNDQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDY3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3RyYXRlZ3kgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBib3RoIGZ1bmN0aW9ucyBpbiBxdWVzdGlvbiBoYXZlIGBjYXBhYmxlKENBUF9ORVRfQURNSU4pYC4gV29ydGggdGhpbmtpbmcgYWJvdXQgZnV6emluZyB0aGlzLCBJIHRoaW5rLiBUaGlzIHBhdGNoIGlzIHRhcmdldGluZyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgd2hpY2ggaXMgYWx3YXlzIGludGVyZXN0aW5nLiBUaGUgZnVuY3Rpb25zIGludm9sdmVkIGFyZSBgYWRzbF9zdGF0ZV9zdG9yZWAgYW5kIGBhZHNsX2NvbmZpZ19zdG9yZWAuCgpIb2xkIG9uLCB0aGUgcHJvbXB0IGlzIGd1aWRpbmcgbWUgaGVyZTogJiMzNDtQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zLiYjMzQ7IE5vdywgdGhlc2UgdHdvIGFyZSBzdGF0aWMsIHdoaWNoICpjb3VsZCogbWVhbiB0aGV5JiMzOTtyZSBpbmxpbmVkIGFuZCB0aGVpciBhZGRyZXNzZXMgYXJlbiYjMzk7dCBkaXN0aW5jdCBzeW1ib2xzLiBCdXQgdGhleSAqYXJlKiBwYXNzZWQgdG8gYERFVklDRV9BVFRSX1JXYCwgbWVhbmluZyB0aGUga2VybmVsIGlzIHRha2luZyB0aGVpciBhZGRyZXNzZXMuIFRoZXJlZm9yZSwgdGhleSAqd29uJiMzOTt0KiBiZSBpbmxpbmVkLiBTbyBwcm92aWRpbmcgYGFkc2xfc3RhdGVfc3RvcmVgIGFuZCBgYWRzbF9jb25maWdfc3RvcmVgIGFzIGZvY3VzIHN5bWJvbHMgc2hvdWxkIGJlIGZpbmUsIGFuZCBpbiBsaW5lIHdpdGggdGhlIGd1aWRhbmNlLiBJIGNhbiBwcm92aWRlIHRob3NlLgoKV2FpdCwgYmFjayB0byB0aGUgcHJvbXB0OiBJdCAqcHJlZmVycyogbm9uLXN0YXRpYyBmdW5jdGlvbnMuIElzIHRoZXJlIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiB0aGF0IGNhbGxzIHRoZXNlPyBObywgdGhleSYjMzk7cmUgY2FsbGVkIGRpcmVjdGx5IGJ5IHRoZSBzeXNmcyBjb3JlLiBTbywgc3RpY2tpbmcgd2l0aCBgYWRzbF9zdGF0ZV9zdG9yZWAgYW5kIGBhZHNsX2NvbmZpZ19zdG9yZWAgaXMgdGhlIHdheSB0byBnby4KCkFscmlnaHQsIGxldCYjMzk7cyBzZWUgaWYgdGhpcyBwYXRjaCBhZmZlY3RzIGFueXRoaW5nIGVsc2UuIEl0IG1vZGlmaWVzIGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYCBkaXJlY3RseS4gV2Ugc2hvdWxkIHByb2JhYmx5IGluY2x1ZGUgYFVTQl9DWEFDUlVgIGFuZCBgVVNCX0FUTWAgaW4gYEVuYWJsZUNvbmZpZ3NgLiBIYW5nIG9uLi4uIGBVU0JfQVRNYCBpcyBsaXN0ZWQgYXMgYm90aCBhIG1lbnVjb25maWcgKmFuZCogYSBjb25maWcsIHNvIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgYGRyaXZlcnMvdXNiL2F0bS9LY29uZmlnYCBmaWxlIGFnYWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVVNCX0FUTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTUtXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZzo2Om1lbnVjb25maWcgVVNCX0FUTVxuZHJpdmVycy91c2IvYXRtL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O1VTQiBEU0wgbW9kZW0gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg2OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIENoZWNrKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24sIGFuZCBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgVVNCX0FUTWAgaXMgaW5kZWVkIGEgY29uZmlndXJhdGlvbiBvcHRpb24uIE5vdywgdGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIGBBVE1gIGl0c2VsZiBpcyByZXF1aXJlZC4gWWVzLCBpdCBsb29rcyBsaWtlIGBVU0JfQVRNYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBBVE1gLiBUaGF0IG1lYW5zIGBFbmFibGVDb25maWdzYCBzaG91bGQgaW5jbHVkZSBgWyYjMzQ7VVNCX0NYQUNSVSYjMzQ7LCAmIzM0O1VTQl9BVE0mIzM0OywgJiMzNDtBVE0mIzM0O11gLiBNYWtlcyBzZW5zZS4KCk5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIHVzaW5nIHRoZSByaWdodCBzeW1ib2xzIGFzIGZvY3VzIHBvaW50cy4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGF0IGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYCBhcmUsIGluIGZhY3QsIHRoZSBiZXN0IGNob2ljZXMuIFllcywgdGhvc2UgYXJlIHRoZSBleGFjdCBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQuIEFuZCBzaW5jZSB3ZSYjMzk7cmUgdGFraW5nIHRoZWlyIGFkZHJlc3NlcyBmb3IgYERFVklDRV9BVFRSX1JXYCwgSSBrbm93IHRoZXkgYXJlbiYjMzk7dCBpbmxpbmVkLCBzbyB0aGV5JiMzOTtyZSBwZXJmZWN0bHkgc3VpdGFibGUgZm9jdXMgcG9pbnRzLiBFeGNlbGxlbnQuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSYjMzk7bGwgcnVuIHRocm91Z2ggdGhlIGRlcGVuZGVuY2llcyBmb3IgYFVTQl9DWEFDUlVgIGFnYWluLiBJdCBkZXBlbmRzIG9uIGBVU0JfQVRNYCwgd2hpY2ggaW4gdHVybiBkZXBlbmRzIG9uIGBBVE1gLiBBbmQgYEFUTWAgbG9va3MgbGlrZSBhIHN0YW5kYWxvbmUgY29uZmlndXJhdGlvbi4gV2FpdCwgaGFuZyBvbi4uLiBgVVNCX0NYQUNSVWAgKmFsc28qIHNlbGVjdHMgYEZXX0xPQURFUmAuIEFuZCBgRldfTE9BREVSYCBpcyB1c3VhbGx5IGVuYWJsZWQgaW4gdGhlIGJyb2FkZXIgY29udGV4dC4gVGltZSB0byB0YWtlIGFub3RoZXIgbG9vayBhdCBgZHJpdmVycy91c2IvYXRtL0tjb25maWdgIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDMwOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzcGVlZHRjaC5cbiAgMzE6XHRcbiAgMzI6XHRjb25maWcgVVNCX0NYQUNSVVxuICAzMzpcdFx0dHJpc3RhdGUgXCYjMzQ7Q29uZXhhbnQgQWNjZXNzUnVubmVyIFVTQiBzdXBwb3J0XCYjMzQ7XG4gIDM0Olx0XHRzZWxlY3QgRldfTE9BREVSXG4gIDM1Olx0XHRoZWxwXG4gIDM2Olx0XHQgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYW4gQURTTCBVU0IgbW9kZW0gYmFzZWQgb24gdGhlIENvbmV4YW50XG4gIDM3Olx0XHQgIEFjY2Vzc1J1bm5lciBjaGlwc2V0LiAgSW4gb3JkZXIgdG8gdXNlIHlvdXIgbW9kZW0geW91IHdpbGwgbmVlZCB0b1xuICAzODpcdFx0ICBpbnN0YWxsIHRoZSBmaXJtd2FyZSwgZXh0cmFjdGVkIGJ5IHRoZSB1c2VyIHNwYWNlIHRvb2xzOyBzZWVcbiAgMzk6XHRcdCAgXHUwMDNjaHR0cDovL2FjY2Vzc3J1bm5lci5zb3VyY2Vmb3JnZS5uZXQvXHUwMDNlIGZvciBkZXRhaWxzLlxuICA0MDpcdFxuICA0MTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAgNDI6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGN4YWNydS5cbiAgNDM6XHRcbiAgNDQ6XHRjb25maWcgVVNCX1VFQUdMRUFUTVxuICA0NTpcdFx0dHJpc3RhdGUgXCYjMzQ7QURJIDkzMCBhbmQgZWFnbGUgVVNCIERTTCBtb2RlbVwmIzM0O1xuICA0NjpcdFx0c2VsZWN0IEZXX0xPQURFUlxuICA0NzpcdFx0aGVscFxuICA0ODpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGFuIEFEU0wgVVNCIG1vZGVtIGJhc2VkIG9uIHRoZSBBREkgOTMwXG4gIDQ5Olx0XHQgIG9yIGVhZ2xlIGNoaXBzZXQuIEluIG9yZGVyIHRvIHVzZSB5b3VyIG1vZGVtIHlvdSB3aWxsIG5lZWQgdG9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3NDIKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIFVTQiBBVE0gTW9kdWxlJiMzOTtzIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBVU0JfQVRNYCBtb2R1bGUsIHRyeWluZyB0byB1bmRlcnN0YW5kIGl0cyBidWlsZCBjb25maWd1cmF0aW9uLiBUaGUgZmlyc3QgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpczogYXJlIHRoZXJlIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIGJleW9uZCB0aGUgbW9kdWxlIGl0c2VsZj8gSSBrbm93IGBVU0JfQVRNYCBpcyBkZWZpbmVkIHdpdGhpbiBgZHJpdmVycy91c2IvYXRtL0tjb25maWdgLCBzbyB0aGF0JiMzOTtzIG15IHN0YXJ0aW5nIHBvaW50LiBOb3csIHRvIGdldCBhIGJyb2FkZXIgcGljdHVyZSBvZiBob3cgdGhpcyBtb2R1bGUgZml0cyBpbnRvIHRoZSBVU0Igc3Vic3lzdGVtLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGBkcml2ZXJzL3VzYi9NYWtlZmlsZWAuIEkmIzM5O2xsIHNjYW4gdGhhdCB0byBzZWUgaG93IGl0JiMzOTtzIGxpbmtlZCwgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBwcmUtcmVxdWlzaXRlcywgb3IgaWYgdGhlcmUgaXMgYW55dGhpbmcgdGhhdCBtYXkgaGF2ZSBiZWVuIG1pc3NlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvTWFrZWZpbGU9NTM9b2JqLSQoQ09ORklHX0VBUkxZX1BSSU5US19VU0IpXHQmIzQzOz0gZWFybHkvXG5kcml2ZXJzL3VzYi9NYWtlZmlsZS01NC1cbmRyaXZlcnMvdXNiL01ha2VmaWxlOjU1Om9iai0kKENPTkZJR19VU0JfQVRNKVx0XHQmIzQzOz0gYXRtL1xuZHJpdmVycy91c2IvTWFrZWZpbGU6NTY6b2JqLSQoQ09ORklHX1VTQl9TUEVFRFRPVUNIKVx0JiM0Mzs9IGF0bS9cbmRyaXZlcnMvdXNiL01ha2VmaWxlLTU3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDA2MwoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nLCBhcyBpZiBJIHdlcmUgd29ya2luZyB0aHJvdWdoIHRoaXMgY29kZToKCioqTWFrZWZpbGUgRGVwZW5kZW5jeSBDb251bmRydW0qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4gTXkgbWVudGFsIG1vZGVsIGlzIHRlbGxpbmcgbWUgdGhhdCBgZHJpdmVycy91c2IvTWFrZWZpbGVgIGhhcyBhIGNvbmRpdGlvbmFsIGRlcGVuZGVuY3kgaGVyZS4gSXQmIzM5O3Mgc2F5aW5nIHRoYXQsIHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcywgc3BlY2lmaWNhbGx5IHdoZW4gYENPTkZJR19VU0JfQVRNYCBpcyBkZWZpbmVkLCB0aGUgYGF0bS9gIGRpcmVjdG9yeSB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBidWlsZCBwcm9jZXNzICp0aHJvdWdoKiB0aGUgYGRyaXZlcnMvdXNiL01ha2VmaWxlYC4gIFRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gSXQgbWFrZXMgc2Vuc2UsIHlvdSYjMzk7dmUgZ290IHlvdXIgQVRNIG92ZXIgVVNCIGZ1bmN0aW9uYWxpdHksIGFuZCB0aGlzIGlzIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGFjY291bnRzIGZvciBpdC4KCkhvd2V2ZXIsIHRoZXJlJiMzOTtzIGFub3RoZXIgbGV2ZWwgaGVyZS4gIFRoZSBgZHJpdmVycy91c2IvTWFrZWZpbGVgIGZpbGUgaXRzZWxmIGlzIG9ubHkgcHVsbGVkIGluIHdoZW4gYENPTkZJR19VU0JfU1VQUE9SVGAgaXMgZW5hYmxlZC4gIFNvIGl0JiMzOTtzIG5vdCBhIGRpcmVjdCBpbmNsdXNpb24gYWx3YXlzIC0gaXQgaXMgbmVzdGVkLgoKU28sIHRvIHN1bW1hcml6ZSwgdGhlIGRlcGVuZGVuY3kgY2hhaW4gaXM6IGlmIGBDT05GSUdfVVNCX1NVUFBPUlRgIGlzIHNldCwgKnRoZW4qIGBkcml2ZXJzL3VzYi9NYWtlZmlsZWAgaXMgaW5jbHVkZWQuIElmIEFORCBPTkxZIElGIGBDT05GSUdfVVNCX0FUTWAgaXMgKmFsc28qIHNldCwgKnRoZW4qIHRoZSBgYXRtL2AgZGlyZWN0b3J5IGlzIGFsc28gaW5jbHVkZWQgKnRocm91Z2gqIHRoZSBpbmNsdWRlZCBgZHJpdmVycy91c2IvTWFrZWZpbGVgLiBJdCYjMzk7cyBhIG5lc3RlZCBjb25kaXRpb25hbCBpbmNsdXNpb24uIEkgbmVlZCB0byBiZSBhd2FyZSBvZiB0aGlzIHdoZW4gZGVidWdnaW5nIG9yIG1vZGlmeWluZyBhbnl0aGluZyByZWxhdGVkIHRvIFVTQiBvciBBVE0gc3VwcG9ydCB3aXRoaW4gdGhpcyBidWlsZCBzeXN0ZW0uIFRoaXMgY291bGQgYWZmZWN0IHRoZSBvcmRlciBvZiBjb21waWxhdGlvbiBhbmQgdGhlcmVmb3JlIHJlcXVpcmUgY2FyZWZ1bCBwbGFubmluZyBpZiBhbnkgY2hhbmdlcyBhcmUgbmVlZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvTWFrZWZpbGU9MTA1PW9iai0kKENPTkZJR19UQylcdFx0JiM0Mzs9IHRjL1xuZHJpdmVycy9NYWtlZmlsZToxMDY6b2JqLSQoQ09ORklHX1VTQl9QSFkpXHRcdCYjNDM7PSB1c2IvXG5kcml2ZXJzL01ha2VmaWxlOjEwNzpvYmotJChDT05GSUdfVVNCKVx0XHQmIzQzOz0gdXNiL1xuZHJpdmVycy9NYWtlZmlsZToxMDg6b2JqLSQoQ09ORklHX1VTQl9TVVBQT1JUKVx0JiM0Mzs9IHVzYi9cbmRyaXZlcnMvTWFrZWZpbGU6MTA5Om9iai0kKENPTkZJR19QQ0kpXHRcdCYjNDM7PSB1c2IvXG5kcml2ZXJzL01ha2VmaWxlOjExMDpvYmotJChDT05GSUdfVVNCX0dBREdFVClcdCYjNDM7PSB1c2IvXG5kcml2ZXJzL01ha2VmaWxlOjExMTpvYmotJChDT05GSUdfT0YpXHRcdCYjNDM7PSB1c2IvXG5kcml2ZXJzL01ha2VmaWxlLTExMi1vYmotJChDT05GSUdfU0VSSU8pXHRcdCYjNDM7PSBpbnB1dC9zZXJpby9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2MzYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVU0IgQ29uZmlndXJhdGlvbiBDaGVjayoqCgpPa2F5LCBzbyBJJiMzOTttIHByZXR0eSBzdXJlIGBVU0JfU1VQUE9SVGAgbmVlZHMgdG8gYmUgZW5hYmxlZC4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBkZWZhdWx0LCBidXQgSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlLiBOb3csIEkgaGF2ZSB0byB0aGluayBhYm91dCBgVVNCYCBpdHNlbGYsIGFuZCBpZiBgVVNCX0FUTWAgaXMgYSBkZXBlbmRlbnQgbW9kdWxlLiBJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZ2AgZmlsZSBhZ2FpbjsgaXQmIzM5O3MgYWx3YXlzIHdvcnRoIGEgcXVpY2sgY29uZmlybWF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL0tjb25maWc9Nj1tZW51Y29uZmlnIFVTQl9BVE1cbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtVU0IgRFNMIG1vZGVtIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnOjg6XHRkZXBlbmRzIG9uIEFUTVxuZHJpdmVycy91c2IvYXRtL0tjb25maWctOS1cdHNlbGVjdCBDUkMzMlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDg5MwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgdW5mb2xkczoKCioqVVNCIERlcGVuZGVuY3kgQ2hlY2sqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCB0aGUgYFVTQl9BVE1gIGRyaXZlciwgbGlrZSBtb3N0IFVTQi1yZWxhdGVkIG1vZHVsZXMsIHdvdWxkIGltcGxpY2l0bHkgZGVwZW5kIG9uIHRoZSBjb3JlIGBVU0JgIHN1YnN5c3RlbSBiZWluZyBlbmFibGVkLiBCdXQgbm93IEkmIzM5O20gaGF2aW5nIGEgc2Vjb25kIHRob3VnaHQgYW5kIEkmIzM5O20gbm90IHNvIHN1cmUuIEl0IG1pZ2h0IGJlIHBvc3NpYmxlIHRoYXQgaXQgZG9lc24mIzM5O3QuCgpCZXN0IHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGZpbGUsIGBkcml2ZXJzL3VzYi9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBVU0IgZHJpdmVycyBhcmUgZGVmaW5lZC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uLiBMZXQmIzM5O3MgZGlnIGluIHRoZXJlIGFuZCBzZWUgd2hhdCBgVVNCX0FUTWAmIzM5O3MgY29uZmlnIGRlZmluaXRpb24gcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c291cmNlIFwmIzM0O2RyaXZlcnMvdXNiL2F0bS9LY29uZmlnXCYjMzQ7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9LY29uZmlnPTE0OD1zb3VyY2UgXCYjMzQ7ZHJpdmVycy91c2IvbWlzYy9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL3VzYi9LY29uZmlnLTE0OS1cbmRyaXZlcnMvdXNiL0tjb25maWc6MTUwOnNvdXJjZSBcJiMzNDtkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy91c2IvS2NvbmZpZy0xNTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTg5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgVVNCIERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBzZWUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IHZlcmlmeSB0aGUgS2NvbmZpZyBzdHJ1Y3R1cmUgZm9yIHRoZSBVU0IgQVRNIGRyaXZlci4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyBpZiB0aGUgYHNvdXJjZSAmIzM0O2RyaXZlcnMvdXNiL2F0bS9LY29uZmlnJiMzNDtgIGxpbmUgaXMgbmVzdGVkIHdpdGhpbiBhbiBgaWYgVVNCYCBjb25kaXRpb25hbCBibG9jay4gVGhhdCYjMzk7cyBhIGNydWNpYWwgcG9pbnQuIElmIGl0ICppcyogaW5zaWRlIHRoZSBgaWYgVVNCYCBibG9jaywgaXQgbWVhbnMgdGhlIEFUTSBVU0IgZHJpdmVyIGlzLCBjb3JyZWN0bHksIG9ubHkgY29uc2lkZXJlZCBpZiB0aGUgY29yZSBVU0IgZnVuY3Rpb25hbGl0eSBpcyBlbmFibGVkLiBJZiBpdCAqaXNuJiMzOTt0Kiwgd2VsbCwgdGhhdCByYWlzZXMgc29tZSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFib3V0IGhvdyB0aGUgZGVwZW5kZW5jeSBpcyBtYW5hZ2VkIGFuZCBjb3VsZCBwb3RlbnRpYWxseSBjcmVhdGUgYnVpbGQgaXNzdWVzIG9yIHJ1bnRpbWUgYmVoYXZpb3IgSSBuZWVkIHRvIGludmVzdGlnYXRlLiBTbywgeWVhaCwgdGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcyAqd2hlcmUqIGlzIHRoYXQgYHNvdXJjZWAgc3RhdGVtZW50IGFuZCB3aGF0JiMzOTtzIHN1cnJvdW5kaW5nIGl0IGluIHRoZSBLY29uZmlnIGhpZXJhcmNoeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDA6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy91c2IvaXNwMTc2MC9LY29uZmlnXCYjMzQ7XG4gMTQxOlx0XG4gMTQyOlx0Y29tbWVudCBcJiMzNDtVU0IgcG9ydCBkcml2ZXJzXCYjMzQ7XG4gMTQzOlx0XG4gMTQ0Olx0aWYgVVNCXG4gMTQ1Olx0XG4gMTQ2Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnXCYjMzQ7XG4gMTQ3Olx0XG4gMTQ4Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvdXNiL21pc2MvS2NvbmZpZ1wmIzM0O1xuIDE0OTpcdFxuIDE1MDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZ1wmIzM0O1xuIDE1MTpcdFxuIDE1MjpcdGVuZGlmICMgVVNCXG4gMTUzOlx0XG4gMTU0Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvdXNiL3BoeS9LY29uZmlnXCYjMzQ7XG4gMTU1Olx0XG4gMTU2Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnXCYjMzQ7XG4gMTU3Olx0XG4gMTU4Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvdXNiL3R5cGVjL0tjb25maWdcJiMzNDtcbiAxNTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2NTgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1MjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgUG90ZW50aWFsIFNlY3VyaXR5IEltcGxpY2F0aW9ucyoqCgpPa2F5LCBzbyBJIHNlZSB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBtb2RpZnlpbmcgdGhlIGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYCBmdW5jdGlvbnMuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgYWRkaW5nIGEgY2hlY2sgZm9yIGBpbnN0YW5jZS0mZ3Q7dXNiYXRtLSZndDthdG1fZGV2ID09IE5VTExgIGJlZm9yZSBhY2Nlc3NpbmcgdGhlIGBhdG1fZGV2YCBtZW1iZXIuIFJpZ2h0LCB0aGF0JiMzOTtzIGEgc3RyYWlnaHRmb3J3YXJkIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBwcmV2ZW50aW9uLiBHb29kLCBwcmV2ZW50aW5nIGNyYXNoZXMgaXMgYWx3YXlzIGEgcHJpb3JpdHkuIEl0IGxvb2tzIGxpa2UgdGhpcyBpcyByZWFjaGFibGUgdmlhIHN5c2ZzLCBzbyBhIHVzZXItc3BhY2UgcHJvY2VzcyBjYW4gdHJpZ2dlciB0aGlzIGNvZGUgcGF0aC4KClNpbmNlIHRoaXMgdG91Y2hlcyBzeXNmcywgaXQmIzM5O3MgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBzaG91bGQgYmUgZnV6emVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgY29uc2lkZXIgdGhhdCB3aGVuIGV2YWx1YXRpbmcgdGhpcy4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbnMuIFRoZSBkZXBlbmRlbmN5IHRyZWUgdGVsbHMgbWUgdGhhdCBgVVNCYCBpcyByZXF1aXJlZCBiZWNhdXNlIGl0JiMzOTtzIGluc2lkZSBgaWYgVVNCYC4gQ29uc2VxdWVudGx5LCB0aGUgbmVjZXNzYXJ5IGBFbmFibGVDb25maWdzYCBzaG91bGQgYmUgYFsmIzM0O1VTQl9DWEFDUlUmIzM0OywgJiMzNDtVU0JfQVRNJiMzNDssICYjMzQ7QVRNJiMzNDssICYjMzQ7VVNCJiMzNDtdYC4gSSBhbHNvIHNlZSB0aGF0IGBVU0JfQ1hBQ1JVYCBzZWxlY3RzIGBGV19MT0FERVJgLiBgRldfTE9BREVSYCBpcyBwcmV0dHkgY29tbW9uLCBzbyBJJiMzOTttIG5vdCBvdmVybHkgY29uY2VybmVkIGFib3V0IHRoYXQgYmVpbmcgYW4gb2JzdGFjbGUuCgpJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoZSBtb2RpZmllZCBmdW5jdGlvbnMsIGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYCwgYXJlIHRoZSBvbmx5IG9uZXMgaW1wYWN0ZWQuIFRoZXkgYXJlIGFsc28gc3RhdGljIGFuZCBjYW4gYmUgcHJvdmlkZWQgYXMgZm9jdXMgc3ltYm9scywgc2luY2UgdGhleSYjMzk7cmUgcGFzc2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzIHRocm91Z2ggYERFVklDRV9BVFRSX1JXYC4gSSYjMzk7bGwgZG91YmxlLWNoZWNrIGBDWEFDUlVfQ01EX0lOSVRgIGFuZCBgQ1hBQ1JVX1NFVF9JTklUYCBqdXN0IHRvIGJlIHN1cmUsIGJ1dCBJIGZlZWwgZmFpcmx5IGNvbmZpZGVudCBJJiMzOTt2ZSBnb3QgYSBnb29kIGdyYXNwIG9uIHRoZSBzY29wZSBvZiB0aGlzIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q1hBQ1JVX0NNRF9JTklUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL2N4YWNydS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz0xOTk9c3RhdGljIERFVklDRV9BVFRSX1JPKF9uYW1lKVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTIwMC1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoyMDE6I2RlZmluZSBDWEFDUlVfQ01EX0lOSVQoX25hbWUpIFxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjAyLXN0YXRpYyBERVZJQ0VfQVRUUl9SVyhfbmFtZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2OTMKCQkJCQkJCW91dHB1dDogMTMwCgkJCQkJCQl0aG91Z2h0czogMTg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBDWEFDUlUgVVNCIEFUTSBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUganVzdCBiZWVuIGxvb2tpbmcgb3ZlciB0aGlzIHBhdGNoIGFuZCBpdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBnaXZlbiBteSBleHBlcnRpc2UuIFRoZSBjb3JlIG9mIGl0IGlzIHRoZSBhZGRpdGlvbiBvZiBhIE5VTEwgcG9pbnRlciBjaGVjayB3aXRoaW4gdGhlIGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYCBzeXNmcyBoYW5kbGVycy4gSSByZWNvZ25pemUgaW1tZWRpYXRlbHkgdGhhdCB0aGVzZSBmdW5jdGlvbnMsIGFzIGluZGljYXRlZCBieSB0aGUgYERFVklDRV9BVFRSX1JXYCBtYWNybywgYXJlIGVzc2VudGlhbGx5IGZ1bmN0aW9uIHBvaW50ZXJzIOKAkyB0aGV5JiMzOTtyZSB0aGUgYF9zaG93YCBhbmQgYF9zdG9yZWAgZnVuY3Rpb25zIGFzc29jaWF0ZWQgd2l0aCBhIHN5c2ZzIGF0dHJpYnV0ZS4gQmVjYXVzZSBvZiB0aGlzLCB0aGV5ICp3b24mIzM5O3QqIGJlIGlubGluZWQuIFRoYXQmIzM5O3MgYW4gaW1wb3J0YW50IGRldGFpbCBmb3IgZnV6emluZy4KCk15IGNvbmNsdXNpb24/IFRoaXMgaXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLiBJIGNhbiBzZWUgdGhhdCB0aGUgcGF0Y2ggc3BlY2lmaWNhbGx5IG1lbnRpb25zIGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYCwgYW5kIHRoZSByZWFzb25pbmcgaXMgc291bmQ6IHRoZXNlIGhhbmRsZXJzICphcmUqIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSwgbWFraW5nIHRoZW0gcG90ZW50aWFsIHRhcmdldHMuIFRoZSBwYXRoIHRvIGV4cGxvaXQgdGhlbT8gVmlhIHN5c2ZzLCBjb3VwbGVkIHdpdGggdGhlIFVTQiBkdW1teV9oY2QuIFRoaXMgaXMgYSB2ZXJ5IHR5cGljYWwgYW5kIGVmZmVjdGl2ZSBmdXp6aW5nIHN0cmF0ZWd5IGluIHRoaXMgZG9tYWluLgoKVGhlcmVmb3JlLCB0aGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBzZXQgdG8gYHRydWVgLiBXZSBzaG91bGQgZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0cyBvbiBgYWRzbF9zdGF0ZV9zdG9yZWAgYW5kIGBhZHNsX2NvbmZpZ19zdG9yZWAsIGFzIHRob3NlIGFyZSB0aGUgJiMzNDtGb2N1c1N5bWJvbHMmIzM0Oy4gVGhlIHRhcmdldCBjb25maWd1cmF0aW9ucyB0aGF0IG5lZWQgdG8gYmUgZW5hYmxlZCBhcmUgYFVTQl9DWEFDUlVgLCBgVVNCX0FUTWAsIGBBVE1gLCBhbmQgYFVTQmAgdG8gbWFrZSBzdXJlIHdlIGhhdmUgdGhlIG5lY2Vzc2FyeSBwYXJ0cyBvZiB0aGUga2VybmVsLgoKUmlnaHQsIEkmIzM5O20gcmVhZHkgdG8gY2FsbCB0aGUgc2V0LXJlc3VsdHMgZnVuY3Rpb24gYW5kIGRvY3VtZW50IG15IGZpbmRpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCX0NYQUNSVSYjMzQ7LAogICAgJiMzNDtVU0JfQVRNJiMzNDssCiAgICAmIzM0O0FUTSYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthZHNsX3N0YXRlX3N0b3JlJiMzNDssCiAgICAmIzM0O2Fkc2xfY29uZmlnX3N0b3JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBOVUxMIHBvaW50ZXIgY2hlY2sgaW4gdGhlIGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYCBzeXNmcyBoYW5kbGVycyBmb3IgdGhlIGN4YWNydSBVU0IgQVRNIGRyaXZlci4gVGhlc2UgaGFuZGxlcnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgY2FuIGJlIGZ1enplZCB2aWEgc3lzZnMgYW5kIFVTQiBkdW1teV9oY2QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9DWEFDUlUmIzM0OywKICAgICYjMzQ7VVNCX0FUTSYjMzQ7LAogICAgJiMzNDtBVE0mIzM0OywKICAgICYjMzQ7VVNCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWRzbF9zdGF0ZV9zdG9yZSYjMzQ7LAogICAgJiMzNDthZHNsX2NvbmZpZ19zdG9yZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgTlVMTCBwb2ludGVyIGNoZWNrIGluIHRoZSBgYWRzbF9zdGF0ZV9zdG9yZWAgYW5kIGBhZHNsX2NvbmZpZ19zdG9yZWAgc3lzZnMgaGFuZGxlcnMgZm9yIHRoZSBjeGFjcnUgVVNCIEFUTSBkcml2ZXIuIFRoZXNlIGhhbmRsZXJzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIGNhbiBiZSBmdXp6ZWQgdmlhIHN5c2ZzIGFuZCBVU0IgZHVtbXlfaGNkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjo1MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjUxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBOVUxMIHBvaW50ZXIgY2hlY2sgKGBpbnN0YW5jZS1cdTAwM2V1c2JhdG0tXHUwMDNlYXRtX2RldiA9PSBOVUxMYCkgaW4gYGFkc2xfc3RhdGVfc3RvcmVgIGFuZCBgYWRzbF9jb25maWdfc3RvcmVgIHRvIHByZXZlbnQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgbWVjaGFuaXNtcyBzdWNoIGFzIHBhZ2UgZmF1bHRzIGFuZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciB1c2VyLXNwYWNlIGNvcGllcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxMTkxMTVjMTExNGVhZGNiZmNhNzkyYTM5ZWUxNmFlMzNjZTUyOWU0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTggMDY6NDk6MjcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMgYi9kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMKaW5kZXggNDI5YWMyMGE4OTk5Zi4uZGVlMTVmN2I3MGJmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvYXRtL2N4YWNydS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYwpAQCAtMzQ3LDcgJiM0MzszNDcsNyBAQCBzdGF0aWMgc3NpemVfdCBhZHNsX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJcmV0dXJuIC1FSU5WQUw7CiAJcmV0ID0gMDsKIAotCWlmIChpbnN0YW5jZSA9PSBOVUxMKQomIzQzOwlpZiAoaW5zdGFuY2UgPT0gTlVMTCB8fCBpbnN0YW5jZS0mZ3Q7dXNiYXRtLSZndDthdG1fZGV2ID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwogCiAJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmYW1wO2luc3RhbmNlLSZndDthZHNsX3N0YXRlX3NlcmlhbGl6ZSkpCkBAIC00NDQsNyAmIzQzOzQ0NCw3IEBAIHN0YXRpYyBzc2l6ZV90IGFkc2xfY29uZmlnX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKIAlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCiAJCXJldHVybiAtRUFDQ0VTOwogCi0JaWYgKGluc3RhbmNlID09IE5VTEwpCiYjNDM7CWlmIChpbnN0YW5jZSA9PSBOVUxMIHx8IGluc3RhbmNlLSZndDt1c2JhdG0tJmd0O2F0bV9kZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlwb3MgPSAwOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA4MgoJCQkJCQkJb3V0cHV0OiAxMjYKCQkJCQkJCXRob3VnaHRzOiAyMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgY3hhY3J1LmMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBhZGRpbmcgYSBjaGVjaywgYHx8IGluc3RhbmNlLSZndDt1c2JhdG0tJmd0O2F0bV9kZXYgPT0gTlVMTGAsIGluIGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzOiB0aGlzIGlzIGEgY2xhc3NpYyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgcHJldmVudGlvbi4gSSBrbm93IHRoZSBrZXJuZWwgaGFzIG1lY2hhbmlzbXMgbGlrZSBwYWdlIGZhdWx0cyBhbmQgS0FTQU4gdG8gY2F0Y2ggdGhlc2UsIGJ1dCB0aGlzIHByb2FjdGl2ZSBhcHByb2FjaCBpcyBjbGVhbmVyLgoKSSYjMzk7bSBxdWlja2x5IHZlcmlmeWluZyB0aGUgY29udGV4dC4gYGluc3RhbmNlYCBwb2ludHMgdG8gYHN0cnVjdCBjeGFjcnVfZGF0YWAsIGFuZCBkaWdnaW5nIGRvd24sIGBpbnN0YW5jZS0mZ3Q7dXNiYXRtYCBwb2ludHMgdG8gYSBgc3RydWN0IHVzYmF0bV9kYXRhYCwgd2hpY2ggaW4gdHVybiwgaGFzIGEgcG9pbnRlciBgYXRtX2RldmAgb2YgdHlwZSBgc3RydWN0IGF0bV9kZXZgLiBUaGUgcGF0Y2ggZ3VhcmRzIGFnYWluc3QgYWNjZXNzaW5nIGBhdG1fZGV2YCB3aGVuIGl0JiMzOTtzIE5VTEwsIGFzIHRoZSBjaGVjayBpbmRpY2F0ZXMuCgpHaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBmaXgsIEkgc2VlIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgYW55IGluZm9ybWF0aW9uIGxlYWsgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZS4gSXQmIzM5O3MgYSB0YXJnZXRlZCBkZWZlbnNlIGFnYWluc3QgYSBzcGVjaWZpYywgd2VsbC11bmRlcnN0b29kIGNsYXNzIG9mIGVycm9ycy4gVGhlIGtlcm5lbCYjMzk7cyBleGlzdGluZyBwcm90ZWN0aW9ucyBhcmUgdGhlcmUsIGJ1dCB0aGlzIHBhdGNoIGlzIGEgZ29vZCBiZWx0LWFuZC1zdXNwZW5kZXJzIGFwcHJvYWNoLgoKVGhlcmVmb3JlLCBhZnRlciBjb25zaWRlcmluZyB0aGlzIGNhcmVmdWxseSwgSSYjMzk7bSBjb25maWRlbnQgdGhhdCAqKk5lZWRzS01TQU4gc2hvdWxkIGJlIGZhbHNlKiogaW4gdGhpcyBjYXNlLiBNeSByZWFzb25pbmcgaXMgc29saWQsIGFuZCBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gZG9jdW1lbnQgaXQgYXMgc3VjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayAoYGluc3RhbmNlLVx1MDAzZXVzYmF0bS1cdTAwM2VhdG1fZGV2ID09IE5VTExgKSBpbiBgYWRzbF9zdGF0ZV9zdG9yZWAgYW5kIGBhZHNsX2NvbmZpZ19zdG9yZWAgdG8gcHJldmVudCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBtZWNoYW5pc21zIHN1Y2ggYXMgcGFnZSBmYXVsdHMgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29waWVzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgTlVMTCBwb2ludGVyIGNoZWNrIChgaW5zdGFuY2UtXHUwMDNldXNiYXRtLVx1MDAzZWF0bV9kZXYgPT0gTlVMTGApIGluIGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYCB0byBwcmV2ZW50IGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIG1lY2hhbmlzbXMgc3VjaCBhcyBwYWdlIGZhdWx0cyBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgdXNlci1zcGFjZSBjb3BpZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6NDk6MjguOTgzNTQ5NzcyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1ODAzMDE3NTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9DWEFDUlVcIixcbiAgICBcIlVTQl9BVE1cIixcbiAgICBcIkFUTVwiLFxuICAgIFwiVVNCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWRzbF9zdGF0ZV9zdG9yZVwiLFxuICAgIFwiYWRzbF9jb25maWdfc3RvcmVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBOVUxMIHBvaW50ZXIgY2hlY2sgKGBpbnN0YW5jZS1cXHUwMDNldXNiYXRtLVxcdTAwM2VhdG1fZGV2ID09IE5VTExgKSBpbiBgYWRzbF9zdGF0ZV9zdG9yZWAgYW5kIGBhZHNsX2NvbmZpZ19zdG9yZWAgdG8gcHJldmVudCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBtZWNoYW5pc21zIHN1Y2ggYXMgcGFnZSBmYXVsdHMgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29waWVzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayBpbiB0aGUgYGFkc2xfc3RhdGVfc3RvcmVgIGFuZCBgYWRzbF9jb25maWdfc3RvcmVgIHN5c2ZzIGhhbmRsZXJzIGZvciB0aGUgY3hhY3J1IFVTQiBBVE0gZHJpdmVyLiBUaGVzZSBoYW5kbGVycyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBjYW4gYmUgZnV6emVkIHZpYSBzeXNmcyBhbmQgVVNCIGR1bW15X2hjZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6NDk6MjguOTgzNTU0NjAyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzMwNTg4ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMTE5MTE1YzExMTRlYWRjYmZjYTc5MmEzOWVlMTZhZTMzY2U1MjllNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxOCAwNjo0OToyNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMgYi9kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmNcXG5pbmRleCA0MjlhYzIwYTg5OTlmLi5kZWUxNWY3YjcwYmY2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1xcbisrKyBiL2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1xcbkBAIC0zNDcsNyArMzQ3LDcgQEAgc3RhdGljIHNzaXplX3QgYWRzbF9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRyZXQgPSAwO1xcbiBcXG4tXFx0aWYgKGluc3RhbmNlID09IE5VTEwpXFxuK1xcdGlmIChpbnN0YW5jZSA9PSBOVUxMIHx8IGluc3RhbmNlLVxcdTAwM2V1c2JhdG0tXFx1MDAzZWF0bV9kZXYgPT0gTlVMTClcXG4gXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIFxcbiBcXHRpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKFxcdTAwMjZpbnN0YW5jZS1cXHUwMDNlYWRzbF9zdGF0ZV9zZXJpYWxpemUpKVxcbkBAIC00NDQsNyArNDQ0LDcgQEAgc3RhdGljIHNzaXplX3QgYWRzbF9jb25maWdfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbiBcXHRpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpXFxuIFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbiBcXG4tXFx0aWYgKGluc3RhbmNlID09IE5VTEwpXFxuK1xcdGlmIChpbnN0YW5jZSA9PSBOVUxMIHx8IGluc3RhbmNlLVxcdTAwM2V1c2JhdG0tXFx1MDAzZWF0bV9kZXYgPT0gTlVMTClcXG4gXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIFxcbiBcXHRwb3MgPSAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo0OTozMC4zMTQ3NDU5ODJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMjc5NDk4MzcyNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX0NYQUNSVVwiLFxuICAgIFwiVVNCX0FUTVwiLFxuICAgIFwiQVRNXCIsXG4gICAgXCJVU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhZHNsX3N0YXRlX3N0b3JlXCIsXG4gICAgXCJhZHNsX2NvbmZpZ19zdG9yZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBOVUxMIHBvaW50ZXIgY2hlY2sgaW4gdGhlIGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYCBzeXNmcyBoYW5kbGVycyBmb3IgdGhlIGN4YWNydSBVU0IgQVRNIGRyaXZlci4gVGhlc2UgaGFuZGxlcnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgY2FuIGJlIGZ1enplZCB2aWEgc3lzZnMgYW5kIFVTQiBkdW1teV9oY2QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDExOTExNWMxMTE0ZWFkY2JmY2E3OTJhMzllZTE2YWUzM2NlNTI5ZTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAwNjo0OToyNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYyBiL2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1xuaW5kZXggNDI5YWMyMGE4OTk5Zi4uZGVlMTVmN2I3MGJmNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1xuKysrIGIvZHJpdmVycy91c2IvYXRtL2N4YWNydS5jXG5AQCAtMzQ3LDcgKzM0Nyw3IEBAIHN0YXRpYyBzc2l6ZV90IGFkc2xfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdHJldCA9IDA7XG4gXG4tXHRpZiAoaW5zdGFuY2UgPT0gTlVMTClcbitcdGlmIChpbnN0YW5jZSA9PSBOVUxMIHx8IGluc3RhbmNlLVx1MDAzZXVzYmF0bS1cdTAwM2VhdG1fZGV2ID09IE5VTEwpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuIFx0aWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZShcdTAwMjZpbnN0YW5jZS1cdTAwM2VhZHNsX3N0YXRlX3NlcmlhbGl6ZSkpXG5AQCAtNDQ0LDcgKzQ0NCw3IEBAIHN0YXRpYyBzc2l6ZV90IGFkc2xfY29uZmlnX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbiBcdGlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSlcbiBcdFx0cmV0dXJuIC1FQUNDRVM7XG4gXG4tXHRpZiAoaW5zdGFuY2UgPT0gTlVMTClcbitcdGlmIChpbnN0YW5jZSA9PSBOVUxMIHx8IGluc3RhbmNlLVx1MDAzZXVzYmF0bS1cdTAwM2VhdG1fZGV2ID09IE5VTEwpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuIFx0cG9zID0gMDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjQ5OjMwLjMxNDc0ODc3MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MDU2MzEzMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVVNCIEFUTSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdG91Y2hlcyBgZHJpdmVycy91c2IvYXRtL2N4YWNydS5jYC4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIGEgY2hlY2s6IGB8fCBpbnN0YW5jZS1cdTAwM2V1c2JhdG0tXHUwMDNlYXRtX2RldiA9PSBOVUxMYCBpbiB0aGUgYGFkc2xfc3RhdGVfc3RvcmVgIGFuZCBgYWRzbF9jb25maWdfc3RvcmVgIGZ1bmN0aW9ucy4gSG1tLCB0aGVzZSBhcmUgc3lzZnMgc3RvcmUgZnVuY3Rpb25zIGZvciBhIFVTQiBBVE0gZHJpdmVyLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gTXkgaW5zdGluY3QgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgbmV3IGNvbmRpdGlvbmFsIGlzIHJlYWNoYWJsZSBhbmQsIGNydWNpYWxseSwgaWYgaXQgb3BlbnMgdXAgYSBmdXp6aW5nIG9wcG9ydHVuaXR5LiBVU0IgQVRNIGRyaXZlcnMgYXJlIGNlcnRhaW5seSB3aXRoaW4gbXkgYXJlYSBvZiBleHBlcnRpc2UuXG5cblRoZSBmYWN0IHRoYXQgdGhpcyBpbnZvbHZlcyBhIFVTQiBBVE0gZHJpdmVyIG1ha2VzIG1lIHRoaW5rIGFib3V0IGZ1enppbmcgdXNpbmcgYSBVU0IgZ2FkZ2V0L2R1bW15X2hjZCBzZXR1cC4gVGhpcyBpcyBhIGNvbW1vbiBhbmQgZWZmZWN0aXZlIGFwcHJvYWNoLiBTbywgdGhlIG5leHQgc3RlcCBpcyB0byByZWFsbHkgZGlnIGludG8gYGRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY2AgaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGVzZSBgYWRzbF9zdGF0ZV9zdG9yZWAgYW5kIGBhZHNsX2NvbmZpZ19zdG9yZWAgZnVuY3Rpb25zLCBzZWUgaG93IHRoZSBgaW5zdGFuY2VgIHN0cnVjdCBpcyBwb3B1bGF0ZWQsIGFuZCBmaWd1cmUgb3V0IHVuZGVyIHdoYXQgY29uZGl0aW9ucyBgaW5zdGFuY2UtXHUwMDNldXNiYXRtLVx1MDAzZWF0bV9kZXZgIG1pZ2h0IGJlIE5VTEwuIFRoYXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5LCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgaG93IHRvIHRyaWdnZXIgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo0OTozNC45MjAzODIzOTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyMjM2OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWRzbF9zdGF0ZV9zdG9yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTMxNT1zdGF0aWMgc3NpemVfdCBhZHNsX3N0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTMzMS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MzMyOnN0YXRpYyBzc2l6ZV90IGFkc2xfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zMzMtXFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo0OTozNC45NjQ2MDk2NDJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTQ5MDA3NjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gZm9yIGN4YWNydS5jKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgdGhlIGNvbXBpbGF0aW9uIG9yIGxpbmtpbmcgb2YgYGN4YWNydS5jYC4gVGhpcyBpc24ndCBqdXN0IGEgY2FzdWFsIGN1cmlvc2l0eTsga25vd2luZyB0aGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIHN5c3RlbSdzIGRlcGVuZGVuY2llcyBhbmQgcG90ZW50aWFsbHkgbW9kaWZ5aW5nIGl0cyBiZWhhdmlvci4gSSdtIHRoaW5raW5nIEknbGwgc3RhcnQgYnkgbG9va2luZyBhdCB0aGUgbWFrZWZpbGVzLCBpZiB0aGV5J3JlIHN0YW5kYXJkIGZvciB0aGlzIHByb2plY3QuIFRoZXkgdXN1YWxseSBjb250YWluIHRoZSBidWlsZCBsb2dpYy4gSSBuZWVkIHRvIGRldGVybWluZSB3aGF0IHZhcmlhYmxlcyBvciBmbGFncyBhcmUgc2V0IHRoYXQgY29udHJvbCB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgc291cmNlIGZpbGUuXG5cbklmIGl0J3Mgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMgaW4gdGhlIG1ha2VmaWxlcywgSSdsbCBuZWVkIHRvIGNvbnNpZGVyIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGlzIHN0cnVjdHVyZWQuIEFyZSB0aGVyZSBhbnkgY29uZmlndXJhdGlvbiBzY3JpcHRzIHRoYXQgZ2VuZXJhdGUgdGhlIG1ha2VmaWxlcz8gSWYgc28sIHRob3NlIGFyZSB0aGUgcmVhbCBrZXkuIEkgbmVlZCB0byB0cmFjZSB0aGUgdmFyaWFibGVzIGJhY2sgdG8gdGhlaXIgZGVmaW5pdGlvbnMuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZmxhZ3MgKGAjaWZkZWZgLCBgLURgKSwgaW5jbHVzaW9uIG9mIHNvdXJjZSBmaWxlcyBiYXNlZCBvbiBmZWF0dXJlIGZsYWdzLCBvciBzcGVjaWZpYyB0YXJnZXRzIHRoYXQgaW5jbHVkZSBgY3hhY3J1LmNgIGFzIGEgZGVwZW5kZW5jeS5cblxuVGhpcyBjb3VsZCByYW5nZSBmcm9tIGEgc2ltcGxlIGBpZmVxYCBzdGF0ZW1lbnQgdG8gYSBtb3JlIGludHJpY2F0ZSBjYXNjYWRlIG9mIGluY2x1ZGVzIGFuZCB2YXJpYWJsZSBhc3NpZ25tZW50cy4gSSdsbCBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBidWlsZCBzeXN0ZW0gYW5kIGNob29zZSB0aGUgbW9zdCBlZmZlY3RpdmUgc2VhcmNoIHN0cmF0ZWd5LiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IEknbGwgYmUgbG9va2luZyBmb3IgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgb3IgdGFyZ2V0cy4gVGltZSB0byBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NDQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo0OTo0MC4xMTM2MTkyMTNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ0MzQ2NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3hhY3J1Lm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvYXRtL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2F0bS9NYWtlZmlsZS00LSNcXG5kcml2ZXJzL3VzYi9hdG0vTWFrZWZpbGU6NTpvYmotJChDT05GSUdfVVNCX0NYQUNSVSlcXHQrPSBjeGFjcnUub1xcbmRyaXZlcnMvdXNiL2F0bS9NYWtlZmlsZS02LW9iai0kKENPTkZJR19VU0JfU1BFRURUT1VDSClcXHQrPSBzcGVlZHRjaC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjQ5OjQwLjE1ODA1NzI5OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNTQ0OTgxMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipDaGVja2luZyB0aGUgVVNCIENYQUNSVSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBzdGF0dXMgb2YgYENPTkZJR19VU0JfQ1hBQ1JVYC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGdvaW5nIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2Ug4oCTIHRoZSBgS2NvbmZpZ2AgZmlsZSB3aXRoaW4gdGhlIFVTQiBBVE0gZHJpdmVyIGRpcmVjdG9yeS4gVGhhdCdzIGBkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZ2AuIFRoaXMgc2hvdWxkIGJlIGEgc3RyYWlnaHRmb3J3YXJkIGNoZWNrLiBJJ2xsIG5lZWQgdG8gc2VlIGlmIGl0J3MgZGVmaW5lZCwgaWYgaXQncyB0cmlzdGF0ZWQsIGFuZCBhbnkgZGVwZW5kZW5jaWVzIG9yIGRlZmF1bHQgdmFsdWVzLiBLbm93aW5nIHRoZSBjb250ZXh0IHdpdGhpbiB0aGUgYEtjb25maWdgIGlzIGNydWNpYWwsIGVzcGVjaWFsbHkgcmVnYXJkaW5nIGl0cyBsb2NhdGlvbiB3aXRoaW4gdGhlIHNvdXJjZSB0cmVlLiBUaGlzIHVzdWFsbHkgaGVscHMgbWUgdW5kZXJzdGFuZCB3aGljaCBvdGhlciByZWxhdGVkIG9wdGlvbnMgb3IgZHJpdmVycyBtaWdodCBiZSByZWxldmFudC4gRXNzZW50aWFsbHksIEknbSB0cnlpbmcgdG8gcXVpY2tseSBlc3RhYmxpc2ggd2hlcmUgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBzdGFuZHMgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA3NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjQ5OjQzLjIxMjU1Nzc1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NTIxMzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBVU0JfQ1hBQ1JVXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2F0bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2F0bS9LY29uZmlnPTIwPWNvbmZpZyBVU0JfU1BFRURUT1VDSFxcbi0tXFxuZHJpdmVycy91c2IvYXRtL0tjb25maWctMzEtXFxuZHJpdmVycy91c2IvYXRtL0tjb25maWc6MzI6Y29uZmlnIFVTQl9DWEFDUlVcXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy0zMy1cXHR0cmlzdGF0ZSBcXFwiQ29uZXhhbnQgQWNjZXNzUnVubmVyIFVTQiBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo0OTo0My4yNTcwODI3MTRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODc1NjMwNjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyBEZXBlbmRlbmNpZXMqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGF0IHBsYXkgaGVyZS4gVGhpcyBpc24ndCBqdXN0IGFib3V0IGlkZW50aWZ5aW5nIHRoZSBkaXJlY3QgcmVsYXRpb25zaGlwczsgSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIGNoYW5nZXMgb3IgZmFpbHVyZXMgd2l0aGluIHRob3NlIGRlcGVuZGVudCBjb21wb25lbnRzLiBJJ20gYWxyZWFkeSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgYm90dGxlbmVja3MsIHNpbmdsZSBwb2ludHMgb2YgZmFpbHVyZSwgYW5kIHRoZSBjYXNjYWRpbmcgZWZmZWN0cyBhIHByb2JsZW0gaW4gb25lIGFyZWEgY291bGQgdHJpZ2dlciBhY3Jvc3MgdGhlIHN5c3RlbS4gSXQncyBhYm91dCBidWlsZGluZyBhIG1lbnRhbCBtYXAgb2YgdGhlIHN5c3RlbSdzIGFyY2hpdGVjdHVyZSBhbmQgcGlucG9pbnRpbmcgdGhlIGNyaXRpY2FsIHBhdGh3YXlzLiBJJ20gbWVudGFsbHkgcGFyc2luZyB0aGUgY29kZSwgbGlicmFyeSB2ZXJzaW9ucywgYW5kIGV4dGVybmFsIHNlcnZpY2VzIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0aGlzIHRoaW5nIGxlYW5zIG9uIGFuZCBob3cgcm9idXN0IChvciBmcmFnaWxlKSB0aG9zZSBsaW5rcyBhcmUuIEVzc2VudGlhbGx5LCBJJ20gdHJ5aW5nIHRvIGlkZW50aWZ5IHRoZSB3ZWFrIGxpbmtzIGFuZCBhbnRpY2lwYXRlIHdoZXJlIHByb2JsZW1zIG1pZ2h0IGFyaXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzk0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo0OTo0Ni4xMzI3MTU3NzdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MzE2NTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvYXRtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvYXRtL0tjb25maWc9Nj1tZW51Y29uZmlnIFVTQl9BVE1cXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJVU0IgRFNMIG1vZGVtIHN1cHBvcnRcXFwiXFxuZHJpdmVycy91c2IvYXRtL0tjb25maWc6ODpcXHRkZXBlbmRzIG9uIEFUTVxcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTktXFx0c2VsZWN0IENSQzMyXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjQ5OjQ2LjE3ODAzNTMzMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzQxMDM1NzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBVU0ItQVRNIERlcGVuZGVuY2llcyBpbiB0aGUgS2VybmVsIENvbmZpZyoqXG5cblJpZ2h0LCBsZXQgbWUgc2VlLi4uIEknbSBsb29raW5nIGF0IGBVU0JfQ1hBQ1JVYC4gVGhlIGJ1aWxkIHN5c3RlbSBpcyBmbGFnZ2luZyBpdCwgYW5kIHRoZSBkZXBlbmRlbmN5IGNoYWluIGlzIG1ha2luZyBtZSB0aGluay4gT2theSwgc28gYFVTQl9DWEFDUlVgIGxlYW5zIG9uIGBVU0JfQVRNYCwgd2hpY2gsIHVuc3VycHJpc2luZ2x5LCBkZXBlbmRzIG9uIGBBVE1gIGl0c2VsZi4gVGhhdCdzIGFsbCBsb2dpY2FsIHNvIGZhci4gTm93IHRoZSBjcml0aWNhbCBiaXQ6IEknbSBwcmV0dHkgc3VyZSBgVVNCX0NYQUNSVWAgaXMgbmVzdGVkICppbnNpZGUqIHRoZSBgbWVudWNvbmZpZ2Agb3B0aW9uIGZvciBgVVNCX0FUTWAuIEJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGF0LiBMZXQncyBub3QgbWFrZSBhc3N1bXB0aW9ucy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoZSBVU0IgQVRNIGRyaXZlcnMuIEknbSBnb2luZyB0byBqdW1wIGludG8gYGRyaXZlcnMvdXNiL2F0bS9LY29uZmlnYCB0byB2ZXJpZnkgdGhlIGV4YWN0IGNvbmZpZyBzdHJ1Y3R1cmUgYW5kIGl0cyBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoaXMgY2xlYXJseSBiZWZvcmUgSSBtYWtlIGFueSBtb2RpZmljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzAwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6NDk6NDkuOTE5MDczNTE1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2F0bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBVU0IvQVRNIERTTCBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgVVNCX0FUTVxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIlVTQiBEU0wgbW9kZW0gc3VwcG9ydFxcXCJcXG4gICA4OlxcdFxcdGRlcGVuZHMgb24gQVRNXFxuICAgOTpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IGEgVVNCIERpZ2l0YWwgU3Vic2NyaWJlciBMaW5lIChEU0wpXFxuICAxMjpcXHRcXHQgIG1vZGVtIHRvIHlvdXIgY29tcHV0ZXIncyBVU0IgcG9ydC4gIFlvdSB3aWxsIHRoZW4gbmVlZCB0byBjaG9vc2UgeW91clxcbiAgMTM6XFx0XFx0ICBtb2RlbSBmcm9tIHRoZSBsaXN0IGJlbG93LlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAgMTY6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdXNiYXRtLlxcbiAgMTc6XFx0XFxuICAxODpcXHRpZiBVU0JfQVRNXFxuICAxOTpcXHRcXG4gIDIwOlxcdGNvbmZpZyBVU0JfU1BFRURUT1VDSFxcbiAgMjE6XFx0XFx0dHJpc3RhdGUgXFxcIlNwZWVkdG91Y2ggVVNCIHN1cHBvcnRcXFwiXFxuICAyMjpcXHRcXHRzZWxlY3QgRldfTE9BREVSXFxuICAyMzpcXHRcXHRoZWxwXFxuICAyNDpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYW4gU3BlZWRUb3VjaCBVU0Igb3IgU3BlZWRUb3VjaCAzMzBcXG4gIDI1OlxcdFxcdCAgbW9kZW0uICBJbiBvcmRlciB0byB1c2UgeW91ciBtb2RlbSB5b3Ugd2lsbCBuZWVkIHRvIGluc3RhbGwgdGhlIFxcbiAgMjY6XFx0XFx0ICB0d28gcGFydHMgb2YgdGhlIGZpcm13YXJlLCBleHRyYWN0ZWQgYnkgdGhlIHVzZXIgc3BhY2UgdG9vbHM7IHNlZVxcbiAgMjc6XFx0XFx0ICBcXHUwMDNjaHR0cDovL3d3dy5saW51eC11c2Iub3JnL1NwZWVkVG91Y2gvXFx1MDAzZSBmb3IgZGV0YWlscy5cXG4gIDI4OlxcdFxcbiAgMjk6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gIDMwOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNwZWVkdGNoLlxcbiAgMzE6XFx0XFxuICAzMjpcXHRjb25maWcgVVNCX0NYQUNSVVxcbiAgMzM6XFx0XFx0dHJpc3RhdGUgXFxcIkNvbmV4YW50IEFjY2Vzc1J1bm5lciBVU0Igc3VwcG9ydFxcXCJcXG4gIDM0OlxcdFxcdHNlbGVjdCBGV19MT0FERVJcXG4gIDM1OlxcdFxcdGhlbHBcXG4gIDM2OlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhbiBBRFNMIFVTQiBtb2RlbSBiYXNlZCBvbiB0aGUgQ29uZXhhbnRcXG4gIDM3OlxcdFxcdCAgQWNjZXNzUnVubmVyIGNoaXBzZXQuICBJbiBvcmRlciB0byB1c2UgeW91ciBtb2RlbSB5b3Ugd2lsbCBuZWVkIHRvXFxuICAzODpcXHRcXHQgIGluc3RhbGwgdGhlIGZpcm13YXJlLCBleHRyYWN0ZWQgYnkgdGhlIHVzZXIgc3BhY2UgdG9vbHM7IHNlZVxcbiAgMzk6XFx0XFx0ICBcXHUwMDNjaHR0cDovL2FjY2Vzc3J1bm5lci5zb3VyY2Vmb3JnZS5uZXQvXFx1MDAzZSBmb3IgZGV0YWlscy5cXG4gIDQwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo0OTo0OS45MTkxMzY4NzVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5NTU0NDE2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBVU0IgRHJpdmVycyBhbmQgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBkcml2ZXIgc2l0dWF0aW9uLCBhbmQgaXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBhdCBmaXJzdCBnbGFuY2UuIFdlIGRlZmluaXRlbHkgbmVlZCB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIGJvdGggYFVTQl9BVE1gIGFuZCBgVVNCX0NYQUNSVWAgZHJpdmVycy4gTm8gc3VycHJpc2VzIHRoZXJlLiBOb3csIHRoZSBrZXkgaXMgdGhlIGRlcGVuZGVuY3kuIEkgcmVtZW1iZXIgYFVTQl9BVE1gIHJlbGllcyBvbiBgQVRNYCwgc28gd2UgbmVlZCB0byBlbnN1cmUgdGhhdCdzIGhhbmRsZWQgY29ycmVjdGx5IGluIHRoZSBjb25maWd1cmF0aW9uLiBUaGF0IG1ha2VzIHNlbnNlLCBjb21tb24gYXJjaGl0ZWN0dXJlLiBOb3csIGJlZm9yZSBJIHByb2NlZWQgSSByZWFsbHkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYEFUTWAgaXRzZWxmIGhhcyBhbnkgZnVydGhlciB1cHN0cmVhbSBkZXBlbmRlbmNpZXMuIEkgYmV0dGVyIGdvIGFuZCBjaGVjayBpdCdzIGRlcGVuZGVuY2llcyBzbyBJIGRvbid0IG1pc3Mgc29tZXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTU3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo0OTo1My4yMTQ2ODM5NDJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDMyMTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBVE1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2F0bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9hdG0vS2NvbmZpZy01LVxcbm5ldC9hdG0vS2NvbmZpZzo2OmNvbmZpZyBBVE1cXG5uZXQvYXRtL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiQXN5bmNocm9ub3VzIFRyYW5zZmVyIE1vZGUgKEFUTSlcXFwiXFxuLS1cXG5uZXQvYXRtL0tjb25maWctMjEtXFxubmV0L2F0bS9LY29uZmlnOjIyOmNvbmZpZyBBVE1fQlIyNjg0XFxubmV0L2F0bS9LY29uZmlnLTIzLVxcdHRyaXN0YXRlIFxcXCJSRkMxNDgzLzI2ODQgQnJpZGdlZCBwcm90b2NvbHNcXFwiXFxuLS1cXG5uZXQvYXRtL0tjb25maWctMzAtXFxubmV0L2F0bS9LY29uZmlnOjMxOmNvbmZpZyBBVE1fQlIyNjg0X0lQRklMVEVSXFxubmV0L2F0bS9LY29uZmlnLTMyLVxcdGJvb2wgXFxcIlBlci1WQyBJUCBmaWx0ZXIga2x1ZGdlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo0OTo1My4yNTkxMjEzMDdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg0ODUxMTgxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBVE0gQ29uZmlndXJhdGlvbjogQSBRdWljayBTY2FuKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSB0aGlua2luZywgXCJXaGVyZSB3b3VsZCB0aGUgQVRNIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBiZT9cIiBHaXZlbiB0aGUgc3RydWN0dXJlIEknbSBmYW1pbGlhciB3aXRoLCBgbmV0L2AgZmVlbHMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBTcGVjaWZpY2FsbHksIGBuZXQvYXRtL2AganVtcHMgb3V0IGFzIHRoZSBtb3N0IGxpa2VseSBzdWJkaXJlY3RvcnkuIFNvLCBteSBtZW50YWwgcHJvY2VzcyBpcyBsZWFkaW5nIG1lIGRpcmVjdGx5IHRvIGBuZXQvYXRtL0tjb25maWdgLiBUaGF0IGZpbGUgaXMgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBBVE0tcmVsYXRlZCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJdCdzIHRoZSBzdGFuZGFyZCBsb2NhdGlvbiBmb3IgbWFuYWdpbmcgZGVwZW5kZW5jaWVzIGFuZCBzZWxlY3RpbmcgYnVpbGQgb3B0aW9ucyB3aXRoaW4gdGhhdCBwYXJ0IG9mIHRoZSBrZXJuZWwgdHJlZS4gQSBxdWljayBjaGVjayBvZiB0aGF0IGZpbGUgc2hvdWxkIGdpdmUgbWUgYSBwcmV0dHkgY2xlYXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDkzNywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjQ5OjU2LjEwNzYzNTcwN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYXRtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgQXN5bmNocm9ub3VzIFRyYW5zZmVyIE1vZGUgKEFUTSlcXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIEFUTVxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIkFzeW5jaHJvbm91cyBUcmFuc2ZlciBNb2RlIChBVE0pXFxcIlxcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBBVE0gaXMgYSBoaWdoLXNwZWVkIG5ldHdvcmtpbmcgdGVjaG5vbG9neSBmb3IgTG9jYWwgQXJlYSBOZXR3b3Jrc1xcbiAgMTA6XFx0XFx0ICBhbmQgV2lkZSBBcmVhIE5ldHdvcmtzLiAgSXQgdXNlcyBhIGZpeGVkIHBhY2tldCBzaXplIGFuZCBpc1xcbiAgMTE6XFx0XFx0ICBjb25uZWN0aW9uIG9yaWVudGVkLCBhbGxvd2luZyBmb3IgdGhlIG5lZ290aWF0aW9uIG9mIG1pbmltdW1cXG4gIDEyOlxcdFxcdCAgYmFuZHdpZHRoIHJlcXVpcmVtZW50cy5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0XFx0ICBJbiBvcmRlciB0byBwYXJ0aWNpcGF0ZSBpbiBhbiBBVE0gbmV0d29yaywgeW91ciBMaW51eCBib3ggbmVlZHMgYW5cXG4gIDE1OlxcdFxcdCAgQVRNIG5ldHdvcmtpbmcgY2FyZC4gSWYgeW91IGhhdmUgdGhhdCwgc2F5IFkgaGVyZSBhbmQgdG8gdGhlIGRyaXZlclxcbiAgMTY6XFx0XFx0ICBvZiB5b3VyIEFUTSBjYXJkIGJlbG93LlxcbiAgMTc6XFx0XFxuICAxODpcXHRcXHQgIE5vdGUgdGhhdCB5b3UgbmVlZCBhIHNldCBvZiB1c2VyLXNwYWNlIHByb2dyYW1zIHRvIGFjdHVhbGx5IG1ha2UgdXNlXFxuICAxOTpcXHRcXHQgIG9mIEFUTS4gIFNlZSB0aGUgZmlsZSBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYXRtLnJzdFxcdTAwM2UgZm9yXFxuICAyMDpcXHRcXHQgIGZ1cnRoZXIgZGV0YWlscy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6NDk6NTYuMTA3NzA0NDM2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTkzMjkwOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6XG5cbioqQW5hbHl6aW5nIHRoZSBBVE0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBmaXJzdCB0aGluZywgYEFUTWAgaGFzIG5vIGxpc3RlZCBkZXBlbmRlbmNpZXMsIHdoaWNoIGlzIGdvb2QuIFRoYXQgbWFrZXMgaXQgZWFzaWVyIHRvIGV2YWx1YXRlIGluIGlzb2xhdGlvbi4gTm93LCB0aGUgbWVhdCBvZiB0aGUgZml4IGlzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYC4gVGhvc2UgYXJlIHN5c2ZzIHN0b3JlIGZ1bmN0aW9ucywgd2hpY2ggc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIHNvbWUga2luZCBvZiBjb25maWd1cmF0aW9uIG9yIHN0YXRlIHBlcnNpc3RlbmNlIG1lY2hhbmlzbS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB3aGVyZSB0aG9zZSBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkLCBzbyBsZXQncyBjaGVjayBgZHJpdmVycy91c2IvYXRtL2N4YWNydS5jYC4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgdnVsbmVyYWJsZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDMwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo0OTo1OS4zMjcwMzYxOTVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMzA6XFx0fVxcbiAzMzE6XFx0XFxuIDMzMjpcXHRzdGF0aWMgc3NpemVfdCBhZHNsX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4gMzMzOlxcdFxcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4gMzM0OlxcdHtcXG4gMzM1OlxcdFxcdHN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UgPSB0b191c2JhdG1fZHJpdmVyX2RhdGEoXFxuIDMzNjpcXHRcXHRcXHRcXHR0b191c2JfaW50ZXJmYWNlKGRldikpO1xcbiAzMzc6XFx0XFx0aW50IHJldDtcXG4gMzM4OlxcdFxcdGludCBwb2xsID0gLTE7XFxuIDMzOTpcXHRcXHRjaGFyIHN0cl9jbWRbOF07XFxuIDM0MDpcXHRcXHRpbnQgbGVuID0gc3RybGVuKGJ1Zik7XFxuIDM0MTpcXHRcXG4gMzQyOlxcdFxcdGlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSlcXG4gMzQzOlxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbiAzNDQ6XFx0XFxuIDM0NTpcXHRcXHRyZXQgPSBzc2NhbmYoYnVmLCBcXFwiJTdzXFxcIiwgc3RyX2NtZCk7XFxuIDM0NjpcXHRcXHRpZiAocmV0ICE9IDEpXFxuIDM0NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMzQ4OlxcdFxcdHJldCA9IDA7XFxuIDM0OTpcXHRcXG4gMzUwOlxcdFxcdGlmIChpbnN0YW5jZSA9PSBOVUxMIHx8IGluc3RhbmNlLVxcdTAwM2V1c2JhdG0tXFx1MDAzZWF0bV9kZXYgPT0gTlVMTClcXG4gMzUxOlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiAzNTI6XFx0XFxuIDM1MzpcXHRcXHRpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKFxcdTAwMjZpbnN0YW5jZS1cXHUwMDNlYWRzbF9zdGF0ZV9zZXJpYWxpemUpKVxcbiAzNTQ6XFx0XFx0XFx0cmV0dXJuIC1FUkVTVEFSVFNZUztcXG4gMzU1OlxcdFxcbiAzNTY6XFx0XFx0aWYgKCFzdHJjbXAoc3RyX2NtZCwgXFxcInN0b3BcXFwiKSB8fCAhc3RyY21wKHN0cl9jbWQsIFxcXCJyZXN0YXJ0XFxcIikpIHtcXG4gMzU3OlxcdFxcdFxcdHJldCA9IGN4YWNydV9jbShpbnN0YW5jZSwgQ01fUkVRVUVTVF9DSElQX0FEU0xfTElORV9TVE9QLCBOVUxMLCAwLCBOVUxMLCAwKTtcXG4gMzU4OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIDM1OTpcXHRcXHRcXHRcXHRhdG1fZXJyKGluc3RhbmNlLVxcdTAwM2V1c2JhdG0sIFxcXCJjaGFuZ2UgYWRzbCBzdGF0ZTpcXFwiXFxuIDM2MDpcXHRcXHRcXHRcXHRcXHRcXFwiIENISVBfQURTTF9MSU5FX1NUT1AgcmV0dXJuZWQgJWRcXFxcblxcXCIsIHJldCk7XFxuIDM2MTpcXHRcXG4gMzYyOlxcdFxcdFxcdFxcdHJldCA9IC1FSU87XFxuIDM2MzpcXHRcXHRcXHR9IGVsc2Uge1xcbiAzNjQ6XFx0XFx0XFx0XFx0cmV0ID0gbGVuO1xcbiAzNjU6XFx0XFx0XFx0XFx0cG9sbCA9IENYUE9MTF9TVE9QUEVEO1xcbiAzNjY6XFx0XFx0XFx0fVxcbiAzNjc6XFx0XFx0fVxcbiAzNjg6XFx0XFxuIDM2OTpcXHRcXHQvKiBMaW5lIHN0YXR1cyBpcyBvbmx5IHVwZGF0ZWQgZXZlcnkgc2Vjb25kXFxuIDM3MDpcXHRcXHQgKiBhbmQgdGhlIGRldmljZSBhcHBlYXJzIHRvIG9ubHkgcmVhY3QgdG9cXG4gMzcxOlxcdFxcdCAqIFNUQVJUL1NUT1AgZXZlcnkgc2Vjb25kIHRvby4gV2FpdCAxLjVzIHRvXFxuIDM3MjpcXHRcXHQgKiBiZSBzdXJlIHRoYXQgcmVzdGFydCB3aWxsIGhhdmUgYW4gZWZmZWN0LiAqL1xcbiAzNzM6XFx0XFx0aWYgKCFzdHJjbXAoc3RyX2NtZCwgXFxcInJlc3RhcnRcXFwiKSlcXG4gMzc0OlxcdFxcdFxcdG1zbGVlcCgxNTAwKTtcXG4gMzc1OlxcdFxcbiAzNzY6XFx0XFx0aWYgKCFzdHJjbXAoc3RyX2NtZCwgXFxcInN0YXJ0XFxcIikgfHwgIXN0cmNtcChzdHJfY21kLCBcXFwicmVzdGFydFxcXCIpKSB7XFxuIDM3NzpcXHRcXHRcXHRyZXQgPSBjeGFjcnVfY20oaW5zdGFuY2UsIENNX1JFUVVFU1RfQ0hJUF9BRFNMX0xJTkVfU1RBUlQsIE5VTEwsIDAsIE5VTEwsIDApO1xcbiAzNzg6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4gMzc5OlxcdFxcdFxcdFxcdGF0bV9lcnIoaW5zdGFuY2UtXFx1MDAzZXVzYmF0bSwgXFxcImNoYW5nZSBhZHNsIHN0YXRlOlxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6NDk6NTkuMzI3MTQ0MTc1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIyNjMxMjc5NzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFN5c2ZzIFN0b3JlIEZ1bmN0aW9uIGZvciBWdWxuZXJhYmlsaXRpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGl0J3MgYSBzeXNmcyBzdG9yZSBmdW5jdGlvbi4gVGhhdCdzIGEgcmVkIGZsYWcg4oCTIHN5c2ZzIGVudHJpZXMgYXJlIHVzZXItYWNjZXNzaWJsZSwgd2hpY2ggbWVhbnMgdGhleSdyZSBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLiBBbmQsIHllcywgSSByZWNhbGwgc3l6a2FsbGVyIGFjdGl2ZWx5IHRhcmdldHMgc3lzZnMgZW50cmllcy4gVGhpcyBwYXJ0aWN1bGFyIGRldmljZSBpcyBVU0IsIHdoaWNoIGlzIGdvb2QuIFRoYXQgbWVhbnMgSSBjYW4gcG90ZW50aWFsbHkgZW11bGF0ZSBpdCB1c2luZyBVU0IgZHVtbXlfaGNkIGZvciB0ZXN0aW5nLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGludHJvZHVjZXMgYSBjaGVjayBmb3IgYGluc3RhbmNlLVx1MDAzZXVzYmF0bS1cdTAwM2VhdG1fZGV2ID09IE5VTExgLiBJbnRlcmVzdGluZy4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgb2YgdGhhdCBjaGVjay4gVGhlIG1lYXQgb2YgdGhlIHBhdGNoIHNlZW1zIHRvIGNlbnRlciBhcm91bmQgYGFkc2xfc3RhdGVfc3RvcmVgIGFuZCBgYWRzbF9jb25maWdfc3RvcmVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhvc2UgYXJlIHRoZSBmdW5jdGlvbnMgdG8gZm9jdXMgb24uIFdhaXQgYSBtaW51dGUuLi4gKnN0YXRpYyo/IE9rYXksIHRoYXQgY2hhbmdlcyB0aGluZ3MuIFN0YXRpYyBmdW5jdGlvbnMgY2FuIHN0aWxsIGJlIGNhbGxlZCBmcm9tIG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBidXQgYXJlIGxpa2VseSBub3QgY2FsbGVkIGRpcmVjdGx5IHRocm91Z2ggdGhlIHN5c2ZzIGVudHJ5LiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrLiBMZXQncyBzZWUgaWYgdGhleSBhcmUgdXNlZCB3aXRoaW4gc29tZSBtYWNyby4gVGhhdCdzIHVzdWFsbHkgdGhlIGluZGljYXRvciBvZiBob3cgYW5kIHdoZXJlIHRoZXkgYXJlIGNhbGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjUyMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjUwOjIxLjk1ODQyNjAxN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1OTQwODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWRzbF9zdGF0ZV9zdG9yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTMxNT1zdGF0aWMgc3NpemVfdCBhZHNsX3N0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTMzMS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MzMyOnN0YXRpYyBzc2l6ZV90IGFkc2xfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zMzMtXFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo1MDoyMi4wMDYwMjIwNjJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI4MjM5OTE3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlLCB0YWlsb3JlZCBmb3IgYW5vdGhlciBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBBRFNMIFN0YXRlIE1hbmFnZW1lbnQqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB3ZSdyZSBoYW5kbGluZyBBRFNMIHN0YXRlIOKAkyBib3RoIGRpc3BsYXlpbmcgaXQgYW5kIHBlcnNpc3RpbmcgaXQuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gcGlucG9pbnRpbmcgdGhlIGNvZGUgcmVzcG9uc2libGUgZm9yIHRoZXNlIG9wZXJhdGlvbnMuIFNvLCBJJ20gdGhpbmtpbmcsIGxldCdzIHN0YXJ0IHdpdGggYSB0YXJnZXRlZCBzZWFyY2guIEknbGwgYmVnaW4gYnkgbG9va2luZyBmb3IgdXNhZ2VzIG9mIGZ1bmN0aW9ucyBvciBtZXRob2RzIHRoYXQgbGlrZWx5IGRlYWwgd2l0aCBzaG93aW5nIHRoZSBBRFNMIHN0YXRlLCBwZXJoYXBzIHNvbWV0aGluZyBuYW1lZCBgYWRzbF9zdGF0ZV9zaG93YC4gVGhlbiwgSSdsbCBtb3ZlIG9uIHRvIHRob3NlIGludm9sdmVkIGluIHN0b3JpbmcgdGhhdCBzdGF0ZSwgbGlrZSBgYWRzbF9zdGF0ZV9zdG9yZWAuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50IHRvIGV4cGxvcmUgdGhlIHJlbGV2YW50IG1vZHVsZXMgYW5kIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgZmxvdy4gS25vd2luZyBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSAqdXNlZCogaXMga2V5LCBub3QganVzdCB3aGVyZSB0aGV5J3JlIGRlZmluZWQuIFRoYXTigJlzIHdoZXJlIHRoZSByZWFsIGluc2lnaHRzIGFyZS4gVGhpcyBhcHByb2FjaCB0eXBpY2FsbHkgZ2V0cyBtZSB0byB3aGVyZSBJIG5lZWQgdG8gYmUgcHJldHR5IHF1aWNrbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwNzQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo1MDoyNS4yODg0MjQ0MzdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NTE1NjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFkc2xfc3RhdGVfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9MTcwPXN0cnVjdCBjeGFjcnVfZGF0YSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTc1LVxcdGludCBsaW5lX3N0YXR1cztcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTc2OlxcdHN0cnVjdCBtdXRleCBhZHNsX3N0YXRlX3NlcmlhbGl6ZTtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTc3LVxcdGludCBhZHNsX3N0YXR1cztcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz0zMDM9c3RhdGljIHNzaXplX3QgbWFjX2FkZHJlc3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzE0LVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzozMTU6c3RhdGljIHNzaXplX3QgYWRzbF9zdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzE2LVxcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzMxLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzozMzI6c3RhdGljIHNzaXplX3QgYWRzbF9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTMzMy1cXHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzUyLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzozNTM6XFx0aWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZShcXHUwMDI2aW5zdGFuY2UtXFx1MDAzZWFkc2xfc3RhdGVfc2VyaWFsaXplKSlcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzU0LVxcdFxcdHJldHVybiAtRVJFU1RBUlRTWVM7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNDI0LVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo0MjU6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZpbnN0YW5jZS1cXHUwMDNlYWRzbF9zdGF0ZV9zZXJpYWxpemUpO1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy00MjYtXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9NzcxPXN0YXRpYyBpbnQgY3hhY3J1X2F0bV9zdGFydChzdHJ1Y3QgdXNiYXRtX2RhdGEgKnVzYmF0bV9pbnN0YW5jZSxcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03ODktXFx0Lyogc3RhcnQgQURTTCAqL1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo3OTA6XFx0bXV0ZXhfbG9jayhcXHUwMDI2aW5zdGFuY2UtXFx1MDAzZWFkc2xfc3RhdGVfc2VyaWFsaXplKTtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzkxLVxcdHJldCA9IGN4YWNydV9jbShpbnN0YW5jZSwgQ01fUkVRVUVTVF9DSElQX0FEU0xfTElORV9TVEFSVCwgTlVMTCwgMCwgTlVMTCwgMCk7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtODEyLVxcdG11dGV4X3VubG9jayhcXHUwMDI2aW5zdGFuY2UtXFx1MDAzZXBvbGxfc3RhdGVfc2VyaWFsaXplKTtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6ODEzOlxcdG11dGV4X3VubG9jayhcXHUwMDI2aW5zdGFuY2UtXFx1MDAzZWFkc2xfc3RhdGVfc2VyaWFsaXplKTtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtODE0LVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTExMjI9c3RhdGljIGludCBjeGFjcnVfYmluZChzdHJ1Y3QgdXNiYXRtX2RhdGEgKnVzYmF0bV9pbnN0YW5jZSxcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xMTQ2LVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoxMTQ3OlxcdG11dGV4X2luaXQoXFx1MDAyNmluc3RhbmNlLVxcdTAwM2VhZHNsX3N0YXRlX3NlcmlhbGl6ZSk7XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTExNDgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjUwOjI1LjMzMjk0MjU2MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjE1MjEzMzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBhIGZpcnN0LXBlcnNvbiBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqRmluZGluZyB0aGUgVXNhZ2Ugb2YgYGFkc2xfc3RhdGVfc2hvd2AgYW5kIGBhZHNsX3N0YXRlX3N0b3JlYCoqXG5cbkhtbSwgSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoZXJlIGBhZHNsX3N0YXRlX3Nob3dgIGFuZCBgYWRzbF9zdGF0ZV9zdG9yZWAgYXJlIGFjdHVhbGx5IGJlaW5nICp1c2VkKi4gSXQncyBhIGJpdCB1bmNsZWFyIGZyb20gYSBxdWljayBnbGFuY2UuIEkgbmVlZCB0byB0cmFjZSB0aGVpciB1c2FnZS4gQXJlIHRoZXkganVzdCBmbG9hdGluZyBhcm91bmQgaW4gdGhlIGNvZGViYXNlLCBvciBhcmUgdGhleSBwYXJ0IG9mIHNvbWV0aGluZyBiaWdnZXI/IEFoLCB3YWl0IGEgbWludXRlLCB0aGUgd2F5IHRoaXMgY29kZSBpcyBzdHJ1Y3R1cmVkLCBpdCdzIG9mdGVuIHRoZSBjYXNlIHRoYXQgdGhlc2Uga2luZHMgb2YgZnVuY3Rpb25zIGFyZSBwbHVnZ2VkIGludG8gYSBtYWNybywgbGlrZSBgREVWSUNFX0FUVFJgLiBUaGF0IHdvdWxkIG1ha2UgYSBsb3Qgb2Ygc2Vuc2UuIEkgc2hvdWxkIGxvb2sgZm9yIGEgbWFjcm8gZGVmaW5pdGlvbiBhbmQgdGhlbiBzZWUgaWYgdGhvc2UgZnVuY3Rpb25zIGFyZSBwYXNzZWQgYXMgYXJndW1lbnRzIHRvIGl0LiBUaGF0J3MgcHJvYmFibHkgdGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIGZpbmQgdGhlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE1MCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjUwOjI4Ljk0ODE1ODUwM1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxODIyOTQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkRFVklDRV9BVFRSLiphZHNsX3N0YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6NTA6MjguOTkzMzQ2NDU3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNzk5NjI2OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkIGFuZCBoYXZlIHRoYXQgc2VhcmNoIHF1ZXJ5IGluIG1pbmQ6XG5cbioqSW5pdGlhbCBTZWFyY2ggU3RyYXRlZ3kgZm9yIEFEU0wgU3RhdGUgSW5mb3JtYXRpb24qKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhlIGBhZHNsX3N0YXRlYCB2YXJpYWJsZS4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCwgYnV0IEkgd2FudCB0byBiZSBlZmZpY2llbnQgYW5kIHplcm8gaW4gb24gdGhlIGNvcmUgZGVmaW5pdGlvbiBvciB1c2FnZSwgbm90IGp1c3QgZXZlcnkgc2luZ2xlIHBsYWNlIGl0J3MgbWVudGlvbmVkLiBTbywgSSdtIHRoaW5raW5nLCBsZXQncyBzdGFydCB3aXRoIGEgZm9jdXNlZCBzZWFyY2guIEkgZG9uJ3Qgd2FudCB0byBnZXQgYm9nZ2VkIGRvd24gaW4gZnVuY3Rpb25zIHRoYXQganVzdCAqc2hvdyogdGhlIHN0YXRlIHRvIHRoZSB1c2VyIG9yICpzdG9yZSogaXQgc29tZXdoZXJlLiBUaG9zZSBhcmUgZG93bnN0cmVhbSBlZmZlY3RzLiBJIHdhbnQgdGhlIG1lYXQgb2Ygd2hlcmUgYGFkc2xfc3RhdGVgIGlzIGFjdHVhbGx5ICpkZWZpbmVkKiwgKm1vZGlmaWVkKiwgb3IgKmRpcmVjdGx5IHVzZWQqIHdpdGhpbiB0aGUgc3lzdGVtLiBUaGVyZWZvcmUsIEknbGwgZmlsdGVyIG91dCBhbnkgc2VhcmNoIHJlc3VsdHMgdGhhdCBpbmNsdWRlIGBfc2hvd2Agb3IgYF9zdG9yZWAuIFRoYXQgc2hvdWxkIGhlbHAgbWUgY3V0IHRocm91Z2ggdGhlIG5vaXNlIGFuZCBnZXQgdG8gdGhlIGNyaXRpY2FsIGxvY2F0aW9ucyBtb3JlIHF1aWNrbHkuIFRoaXMgaXMgYWJvdXQgZWZmaWNpZW50IGRlYnVnZ2luZyBhbmQgcHJvYmxlbSBzb2x2aW5nLCBub3QgYSBjYXN1YWwgZXhwbG9yYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0MzMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo1MDozMi4zNzMzMTIxNjNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNjg4MTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFkc2xfc3RhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvYXRtL2N4YWNydS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz0xNzA9c3RydWN0IGN4YWNydV9kYXRhIHtcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xNzUtXFx0aW50IGxpbmVfc3RhdHVzO1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoxNzY6XFx0c3RydWN0IG11dGV4IGFkc2xfc3RhdGVfc2VyaWFsaXplO1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xNzctXFx0aW50IGFkc2xfc3RhdHVzO1xcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTMwMz1zdGF0aWMgc3NpemVfdCBtYWNfYWRkcmVzc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zMTQtXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjMxNTpzdGF0aWMgc3NpemVfdCBhZHNsX3N0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zMTYtXFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zMzEtXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjMzMjpzdGF0aWMgc3NpemVfdCBhZHNsX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzMzLVxcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zNTItXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjM1MzpcXHRpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKFxcdTAwMjZpbnN0YW5jZS1cXHUwMDNlYWRzbF9zdGF0ZV9zZXJpYWxpemUpKVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zNTQtXFx0XFx0cmV0dXJuIC1FUkVTVEFSVFNZUztcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy00MjQtXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjQyNTpcXHRtdXRleF91bmxvY2soXFx1MDAyNmluc3RhbmNlLVxcdTAwM2VhZHNsX3N0YXRlX3NlcmlhbGl6ZSk7XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTQyNi1cXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz01MzU9Q1hBQ1JVX0FUVFJfIyNfYWN0aW9uKENYSU5GX0NPTlRST0xMRVJfVkVSU0lPTiwgICAgICAgIHUzMiwgIGFkc2xfY29udHJvbGxlcl92ZXJzaW9uKTsgXFxcXFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo1MzY6Q1hBQ1JVX0NNRF8jI19hY3Rpb24oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkc2xfc3RhdGUpOyBcXFxcXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTUzNy1DWEFDUlVfU0VUXyMjX2FjdGlvbiggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRzbF9jb25maWcpO1xcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTU0MT1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqY3hhY3J1X2F0dHJzW10gPSB7XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTU0Mi1cXHRcXHUwMDI2ZGV2X2F0dHJfYWRzbF9jb25maWcuYXR0cixcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NTQzOlxcdFxcdTAwMjZkZXZfYXR0cl9hZHNsX3N0YXRlLmF0dHIsXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTU0NC1cXHRcXHUwMDI2ZGV2X2F0dHJfYWRzbF9jb250cm9sbGVyX3ZlcnNpb24uYXR0cixcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz03NzE9c3RhdGljIGludCBjeGFjcnVfYXRtX3N0YXJ0KHN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtX2luc3RhbmNlLFxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc4OS1cXHQvKiBzdGFydCBBRFNMICovXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjc5MDpcXHRtdXRleF9sb2NrKFxcdTAwMjZpbnN0YW5jZS1cXHUwMDNlYWRzbF9zdGF0ZV9zZXJpYWxpemUpO1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03OTEtXFx0cmV0ID0gY3hhY3J1X2NtKGluc3RhbmNlLCBDTV9SRVFVRVNUX0NISVBfQURTTF9MSU5FX1NUQVJULCBOVUxMLCAwLCBOVUxMLCAwKTtcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy04MTItXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZpbnN0YW5jZS1cXHUwMDNlcG9sbF9zdGF0ZV9zZXJpYWxpemUpO1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo4MTM6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZpbnN0YW5jZS1cXHUwMDNlYWRzbF9zdGF0ZV9zZXJpYWxpemUpO1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy04MTQtXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9ODIwPXN0YXRpYyB2b2lkIGN4YWNydV9wb2xsX3N0YXR1cyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtODM5LVxcdFxcdFxcdGlmIChyZXQgIT0gLUVTSFVURE9XTilcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6ODQwOlxcdFxcdFxcdFxcdGF0bV93YXJuKHVzYmF0bSwgXFxcInBvbGxpbmcgZGlzYWJsZWQsIHNldCBhZHNsX3N0YXRlXFxcIlxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy04NDEtXFx0XFx0XFx0XFx0XFx0XFx0XFxcIiB0byAnc3RhcnQnIG9yICdwb2xsJyB0byByZXN1bWVcXFxcblxcXCIpO1xcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTExMjI9c3RhdGljIGludCBjeGFjcnVfYmluZChzdHJ1Y3QgdXNiYXRtX2RhdGEgKnVzYmF0bV9pbnN0YW5jZSxcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xMTQ2LVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoxMTQ3OlxcdG11dGV4X2luaXQoXFx1MDAyNmluc3RhbmNlLVxcdTAwM2VhZHNsX3N0YXRlX3NlcmlhbGl6ZSk7XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTExNDgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjUwOjMyLjQxNzAwNTMxN1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjQzODYwNjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyBhIENvbW1hbmQgQ2FsbCoqXG5cblJpZ2h0LCBzbyBJIHNlZSBgQ1hBQ1JVX0NNRF8jI19hY3Rpb24oIGFkc2xfc3RhdGUpO2AgYmVpbmcgaW52b2tlZCBoZXJlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCBgQ1hBQ1JVX0NNRF9gIGlzIGludm9sdmVkLiBMZXQncyBkaWcgaW50byB0aGF0IG1hY3JvLCB0aGF0J3Mgd2hlcmUgdGhlIHJlYWwgYWN0aW9uIGlzLlwiIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYENYQUNSVV9DTURfYCBhY3R1YWxseSBleHBhbmRzIHRvLiBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlbnQgb2YgdGhpcyBlbnRpcmUgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg4OCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjUwOjM4LjA2MDg2ODM5MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzMjYzNTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmaW5lIENYQUNSVV9DTURfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9MTk5PXN0YXRpYyBERVZJQ0VfQVRUUl9STyhfbmFtZSlcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjAwLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoyMDE6I2RlZmluZSBDWEFDUlVfQ01EX0lOSVQoX25hbWUpIFxcXFxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjAyLXN0YXRpYyBERVZJQ0VfQVRUUl9SVyhfbmFtZSlcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz0yMTk9Q1hBQ1JVX19BVFRSX0lOSVQoX25hbWUpXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjIxLSNkZWZpbmUgQ1hBQ1JVX0FUVFJfQ1JFQVRFKF92LCBfdCwgX25hbWUpIENYQUNSVV9ERVZJQ0VfQ1JFQVRFX0ZJTEUoX25hbWUpXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjIyMjojZGVmaW5lIENYQUNSVV9DTURfQ1JFQVRFKF9uYW1lKSAgICAgICAgICBDWEFDUlVfREVWSUNFX0NSRUFURV9GSUxFKF9uYW1lKVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yMjMtI2RlZmluZSBDWEFDUlVfU0VUX0NSRUFURShfbmFtZSkgICAgICAgICAgQ1hBQ1JVX0RFVklDRV9DUkVBVEVfRklMRShfbmFtZSlcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yMjYtI2RlZmluZSBDWEFDUlVfQVRUUl9SRU1PVkUoX3YsIF90LCBfbmFtZSkgQ1hBQ1JVX0RFVklDRV9SRU1PVkVfRklMRShfbmFtZSlcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MjI3OiNkZWZpbmUgQ1hBQ1JVX0NNRF9SRU1PVkUoX25hbWUpICAgICAgICAgIENYQUNSVV9ERVZJQ0VfUkVNT1ZFX0ZJTEUoX25hbWUpXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTIyOC0jZGVmaW5lIENYQUNSVV9TRVRfUkVNT1ZFKF9uYW1lKSAgICAgICAgICBDWEFDUlVfREVWSUNFX1JFTU9WRV9GSUxFKF9uYW1lKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo1MDozOC4xMDcyMDAxODZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAxNzAxMTQzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHF1aWNrIHJ1bmRvd24gb2YgdGhlc2UgY29uc2lkZXJhdGlvbnMsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgYGFkc2xfc3RhdGVfc3RvcmVgIGFuZCBgYWRzbF9jb25maWdfc3RvcmVgIGZvciBWdWxuZXJhYmlsaXRpZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuIEknbSBsb29raW5nIGF0IGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoZXkncmUgc3lzZnMgc3RvcmUgZnVuY3Rpb25zIOKAkyBnb29kLCBzdHJhaWdodGZvcndhcmQuIEFyZSB0aGV5IGFjY2Vzc2libGUgdGhyb3VnaCBzeXNmcz8gWWVzLCB0aGF0J3MgdGhlIHBvaW50IG9mIHRoZW0gYmVpbmcgdGhlcmUsIHNvIHRoYXQncyBhIGNoZWNrIG1hcmsuIENhbiBzeXprYWxsZXIgZ2V0IGF0IHRoZW0gZm9yIGZ1enppbmc/IEFic29sdXRlbHksIHN5emthbGxlciBsb3ZlcyB0byBwbGF5IHdpdGggc3lzZnMsIGl0J3MgYSBrbm93biBhdHRhY2sgdmVjdG9yLCBzbyB0aGF0J3MgYW5vdGhlciBjaGVjay4gSG9sZCBvbi4uLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBhZHNsX3N0YXRlX3N0b3JlYC4gSXQgcmVxdWlyZXMgYENBUF9ORVRfQURNSU5gPyBBaCwgdGhhdCdzIGNydWNpYWwuIFRoaXMgaXMgc29tZXRoaW5nIHRoYXQgc3l6a2FsbGVyIGxpa2VseSBoYXMgdG8gY29uc2lkZXIgd2hlbiBhdHRlbXB0aW5nIHRoZSBmdXp6LCBhbmQgSSB3b3VsZCBjZXJ0YWlubHkgaGF2ZSB0byBjb25zaWRlciBpdCB3aGVuIGNoZWNraW5nIGlmIHRoZSBzeXN0ZW0gaGFzIGJlZW4gbWlzY29uZmlndXJlZC4gTm93LCBsZXQncyBkaWcgaW50byB0aGF0IGBhZHNsX3N0YXRlX3N0b3JlYCBmdW5jdGlvbiBzcGVjaWZpY2FsbHkgYW5kIHNlZSBob3cgaXQgaGFuZGxlcyB0aGUgcGVybWlzc2lvbiBjaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0ODMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo1MDo0My4xMjQyMTM1MzRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExNjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzIsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMzI6XFx0c3RhdGljIHNzaXplX3QgYWRzbF9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuIDMzMzpcXHRcXHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuIDMzNDpcXHR7XFxuIDMzNTpcXHRcXHRzdHJ1Y3QgY3hhY3J1X2RhdGEgKmluc3RhbmNlID0gdG9fdXNiYXRtX2RyaXZlcl9kYXRhKFxcbiAzMzY6XFx0XFx0XFx0XFx0dG9fdXNiX2ludGVyZmFjZShkZXYpKTtcXG4gMzM3OlxcdFxcdGludCByZXQ7XFxuIDMzODpcXHRcXHRpbnQgcG9sbCA9IC0xO1xcbiAzMzk6XFx0XFx0Y2hhciBzdHJfY21kWzhdO1xcbiAzNDA6XFx0XFx0aW50IGxlbiA9IHN0cmxlbihidWYpO1xcbiAzNDE6XFx0XFxuIDM0MjpcXHRcXHRpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpXFxuIDM0MzpcXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4gMzQ0OlxcdFxcbiAzNDU6XFx0XFx0cmV0ID0gc3NjYW5mKGJ1ZiwgXFxcIiU3c1xcXCIsIHN0cl9jbWQpO1xcbiAzNDY6XFx0XFx0aWYgKHJldCAhPSAxKVxcbiAzNDc6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDM0ODpcXHRcXHRyZXQgPSAwO1xcbiAzNDk6XFx0XFxuIDM1MDpcXHRcXHRpZiAoaW5zdGFuY2UgPT0gTlVMTCB8fCBpbnN0YW5jZS1cXHUwMDNldXNiYXRtLVxcdTAwM2VhdG1fZGV2ID09IE5VTEwpXFxuIDM1MTpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6NTA6NDMuMTI0MzI2NTA0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NjQxODg1NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIENhcGFiaWxpdHkgQ2hlY2tzIGluIFN5emthbGxlciBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IFN5emthbGxlciBpbnRlcmFjdHMgd2l0aCBzeXNmcyBhbmQgY2FwYWJpbGl0aWVzLiBUaGUga2V5IGlzc3VlIGhlcmUgaXMgdGhhdCBTeXprYWxsZXIgdXN1YWxseSBydW5zIHdpdGggYENBUF9ORVRfQURNSU5gIHdpdGhpbiBpdHMgb3duIG5hbWVzcGFjZS4gSG93ZXZlciwgdGhlIHN5c2ZzIGZpbGVzIGFyZSBnZW5lcmFsbHkgaW4gdGhlIGdsb2JhbCBuYW1lc3BhY2UsIHByZXNlbnRpbmcgYSBwb3RlbnRpYWwgY29uZmxpY3QuIEJ1dCB3YWl0LCBzaW5jZSBTeXprYWxsZXIgcnVucyBpbiBhIHVzZXIgbmFtZXNwYWNlIHdoZXJlIGl0IGhhcyBgQ0FQX05FVF9BRE1JTmAsIEkgbmVlZCB0byByZWFsbHkgY29uc2lkZXIgd2hhdCBgY2FwYWJsZShDQVBfTkVUX0FETUlOKWAgaXMgYWN0dWFsbHkgY2hlY2tpbmcuIEFoLCByaWdodCwgdGhhdCBjYWxsIGNoZWNrcyB0aGUgKmluaXQqIHVzZXIgbmFtZXNwYWNlLiBUaGF0J3MgY3J1Y2lhbC4gQW5kIGlmIFN5emthbGxlciBpcyBpbmRlZWQgcnVubmluZyBpbiBhIHVzZXIgbmFtZXNwYWNlLCB0aGVuIHRoYXQgY2hlY2sgd291bGQgZmFpbCBiZWNhdXNlIGBjYXBhYmxlKClgIHVzZXMgdGhlIGluaXQgdXNlciBuYW1lc3BhY2UuXG5cblNvLCBJIG5lZWQgdG8gY2hlY2sgZXhhY3RseSB3aGV0aGVyIGBjYXBhYmxlKClgIG9yIGBuc19jYXBhYmxlKClgIGFyZSB1c2VkLiBJdCBsb29rcyBsaWtlIGBjYXBhYmxlKENBUF9ORVRfQURNSU4pYCBpcywgaW4gZmFjdCwgdGhlIHJlbGV2YW50IGZ1bmN0aW9uLCB3aGljaCwgYXMgSSBzYWlkLCBjaGVja3MgdGhlICppbml0KiB1c2VyIG5hbWVzcGFjZS4gTm93LCBnaXZlbiB0aGF0IFN5emthbGxlcidzIHNhbmRib3hpbmcgcmVsaWVzIG9uIHVzZXIgbmFtZXNwYWNlcywgaXQncyB2ZXJ5IHBvc3NpYmxlIHRoYXQgaXQgKndvbid0KiBoYXZlIGBDQVBfTkVUX0FETUlOYCBpbiB0aGUgaW5pdCB1c2VyIG5hbWVzcGFjZSwgd2hpY2ggaXMgcHJvYmxlbWF0aWMuIEJ1dCB3YWl0ISBJIGFsc28gcmVjYWxsIHRoYXQgU3l6a2FsbGVyIGhhcyBhIGBzYW5kYm94PW5vbmVgIG1vZGUsIHdoZXJlIGl0IHJ1bnMgYXMgcm9vdCBpbiB0aGUgaW5pdCBuYW1lc3BhY2UuIFRoYXQncyBhIGNyaXRpY2FsIGRpZmZlcmVuY2UuIFRoYXQgbWVhbnMgU3l6a2FsbGVyICpjYW4qIHJlYWNoIHRoZSBjb2RlIHBhdGggYW5kIHBvdGVudGlhbGx5IGJ5cGFzcyB0aGUgaW50ZW5kZWQgc2VjdXJpdHkgcmVzdHJpY3Rpb25zLiBGdXJ0aGVybW9yZSwgSSBzZWUgdGhhdCBgYWRzbF9jb25maWdfc3RvcmVgIGhhcyB0aGUgc2FtZSBjYXBhYmlsaXR5IGNoZWNrLCBtYWtpbmcgaXQgZXF1YWxseSB2dWxuZXJhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE2NywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjUwOjQ4LjU4ODUxNzY3OVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDMwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDMwOlxcdFxcdHJldHVybiByZXQ7XFxuIDQzMTpcXHR9XFxuIDQzMjpcXHRcXG4gNDMzOlxcdC8qIENNX1JFUVVFU1RfQ0FSRF9EQVRBX0dFVCB0aW1lcyBvdXQsIHNvIG5vIHNob3cgYXR0cmlidXRlICovXFxuIDQzNDpcXHRcXG4gNDM1OlxcdHN0YXRpYyBzc2l6ZV90IGFkc2xfY29uZmlnX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4gNDM2OlxcdFxcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4gNDM3OlxcdHtcXG4gNDM4OlxcdFxcdHN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UgPSB0b191c2JhdG1fZHJpdmVyX2RhdGEoXFxuIDQzOTpcXHRcXHRcXHRcXHR0b191c2JfaW50ZXJmYWNlKGRldikpO1xcbiA0NDA6XFx0XFx0aW50IGxlbiA9IHN0cmxlbihidWYpO1xcbiA0NDE6XFx0XFx0aW50IHJldCwgcG9zLCBudW07XFxuIDQ0MjpcXHRcXHRfX2xlMzIgZGF0YVtDTURfUEFDS0VUX1NJWkUgLyA0XTtcXG4gNDQzOlxcdFxcbiA0NDQ6XFx0XFx0aWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKVxcbiA0NDU6XFx0XFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuIDQ0NjpcXHRcXG4gNDQ3OlxcdFxcdGlmIChpbnN0YW5jZSA9PSBOVUxMIHx8IGluc3RhbmNlLVxcdTAwM2V1c2JhdG0tXFx1MDAzZWF0bV9kZXYgPT0gTlVMTClcXG4gNDQ4OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiA0NDk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjUwOjQ4LjU4ODYxNzI1OVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDkwMTEyNzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3RyYXRlZ3kgQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIGJvdGggZnVuY3Rpb25zIGluIHF1ZXN0aW9uIGhhdmUgYGNhcGFibGUoQ0FQX05FVF9BRE1JTilgLiBXb3J0aCB0aGlua2luZyBhYm91dCBmdXp6aW5nIHRoaXMsIEkgdGhpbmsuIFRoaXMgcGF0Y2ggaXMgdGFyZ2V0aW5nIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBpcyBhbHdheXMgaW50ZXJlc3RpbmcuIFRoZSBmdW5jdGlvbnMgaW52b2x2ZWQgYXJlIGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYC5cblxuSG9sZCBvbiwgdGhlIHByb21wdCBpcyBndWlkaW5nIG1lIGhlcmU6IFwiUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucy5cIiBOb3csIHRoZXNlIHR3byBhcmUgc3RhdGljLCB3aGljaCAqY291bGQqIG1lYW4gdGhleSdyZSBpbmxpbmVkIGFuZCB0aGVpciBhZGRyZXNzZXMgYXJlbid0IGRpc3RpbmN0IHN5bWJvbHMuIEJ1dCB0aGV5ICphcmUqIHBhc3NlZCB0byBgREVWSUNFX0FUVFJfUldgLCBtZWFuaW5nIHRoZSBrZXJuZWwgaXMgdGFraW5nIHRoZWlyIGFkZHJlc3Nlcy4gVGhlcmVmb3JlLCB0aGV5ICp3b24ndCogYmUgaW5saW5lZC4gU28gcHJvdmlkaW5nIGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYCBhcyBmb2N1cyBzeW1ib2xzIHNob3VsZCBiZSBmaW5lLCBhbmQgaW4gbGluZSB3aXRoIHRoZSBndWlkYW5jZS4gSSBjYW4gcHJvdmlkZSB0aG9zZS5cblxuV2FpdCwgYmFjayB0byB0aGUgcHJvbXB0OiBJdCAqcHJlZmVycyogbm9uLXN0YXRpYyBmdW5jdGlvbnMuIElzIHRoZXJlIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiB0aGF0IGNhbGxzIHRoZXNlPyBObywgdGhleSdyZSBjYWxsZWQgZGlyZWN0bHkgYnkgdGhlIHN5c2ZzIGNvcmUuIFNvLCBzdGlja2luZyB3aXRoIGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYCBpcyB0aGUgd2F5IHRvIGdvLlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUgaWYgdGhpcyBwYXRjaCBhZmZlY3RzIGFueXRoaW5nIGVsc2UuIEl0IG1vZGlmaWVzIGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYCBkaXJlY3RseS4gV2Ugc2hvdWxkIHByb2JhYmx5IGluY2x1ZGUgYFVTQl9DWEFDUlVgIGFuZCBgVVNCX0FUTWAgaW4gYEVuYWJsZUNvbmZpZ3NgLiBIYW5nIG9uLi4uIGBVU0JfQVRNYCBpcyBsaXN0ZWQgYXMgYm90aCBhIG1lbnVjb25maWcgKmFuZCogYSBjb25maWcsIHNvIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgYGRyaXZlcnMvdXNiL2F0bS9LY29uZmlnYCBmaWxlIGFnYWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA2NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjUwOjU0LjY3ODczMTgzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTI0MzA5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVVNCX0FUTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy01LVxcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnOjY6bWVudWNvbmZpZyBVU0JfQVRNXFxuZHJpdmVycy91c2IvYXRtL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiVVNCIERTTCBtb2RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo1MDo1NC43MjM5NzkxNzVaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDczMTUxMjE1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIENoZWNrKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uLCBhbmQgSSd2ZSBjb25maXJtZWQgdGhhdCBgVVNCX0FUTWAgaXMgaW5kZWVkIGEgY29uZmlndXJhdGlvbiBvcHRpb24uIE5vdywgdGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIGBBVE1gIGl0c2VsZiBpcyByZXF1aXJlZC4gWWVzLCBpdCBsb29rcyBsaWtlIGBVU0JfQVRNYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBBVE1gLiBUaGF0IG1lYW5zIGBFbmFibGVDb25maWdzYCBzaG91bGQgaW5jbHVkZSBgW1wiVVNCX0NYQUNSVVwiLCBcIlVTQl9BVE1cIiwgXCJBVE1cIl1gLiBNYWtlcyBzZW5zZS5cblxuTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSB1c2luZyB0aGUgcmlnaHQgc3ltYm9scyBhcyBmb2N1cyBwb2ludHMuIExldCBtZSBkb3VibGUtY2hlY2sgdGhhdCBgYWRzbF9zdGF0ZV9zdG9yZWAgYW5kIGBhZHNsX2NvbmZpZ19zdG9yZWAgYXJlLCBpbiBmYWN0LCB0aGUgYmVzdCBjaG9pY2VzLiBZZXMsIHRob3NlIGFyZSB0aGUgZXhhY3QgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkLiBBbmQgc2luY2Ugd2UncmUgdGFraW5nIHRoZWlyIGFkZHJlc3NlcyBmb3IgYERFVklDRV9BVFRSX1JXYCwgSSBrbm93IHRoZXkgYXJlbid0IGlubGluZWQsIHNvIHRoZXkncmUgcGVyZmVjdGx5IHN1aXRhYmxlIGZvY3VzIHBvaW50cy4gRXhjZWxsZW50LlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSdsbCBydW4gdGhyb3VnaCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgVVNCX0NYQUNSVWAgYWdhaW4uIEl0IGRlcGVuZHMgb24gYFVTQl9BVE1gLCB3aGljaCBpbiB0dXJuIGRlcGVuZHMgb24gYEFUTWAuIEFuZCBgQVRNYCBsb29rcyBsaWtlIGEgc3RhbmRhbG9uZSBjb25maWd1cmF0aW9uLiBXYWl0LCBoYW5nIG9uLi4uIGBVU0JfQ1hBQ1JVYCAqYWxzbyogc2VsZWN0cyBgRldfTE9BREVSYC4gQW5kIGBGV19MT0FERVJgIGlzIHVzdWFsbHkgZW5hYmxlZCBpbiB0aGUgYnJvYWRlciBjb250ZXh0LiBUaW1lIHRvIHRha2UgYW5vdGhlciBsb29rIGF0IGBkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZ2AgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4NjksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6NTA6NTkuNDU1NDk0MjczWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2F0bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDMwOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNwZWVkdGNoLlxcbiAgMzE6XFx0XFxuICAzMjpcXHRjb25maWcgVVNCX0NYQUNSVVxcbiAgMzM6XFx0XFx0dHJpc3RhdGUgXFxcIkNvbmV4YW50IEFjY2Vzc1J1bm5lciBVU0Igc3VwcG9ydFxcXCJcXG4gIDM0OlxcdFxcdHNlbGVjdCBGV19MT0FERVJcXG4gIDM1OlxcdFxcdGhlbHBcXG4gIDM2OlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhbiBBRFNMIFVTQiBtb2RlbSBiYXNlZCBvbiB0aGUgQ29uZXhhbnRcXG4gIDM3OlxcdFxcdCAgQWNjZXNzUnVubmVyIGNoaXBzZXQuICBJbiBvcmRlciB0byB1c2UgeW91ciBtb2RlbSB5b3Ugd2lsbCBuZWVkIHRvXFxuICAzODpcXHRcXHQgIGluc3RhbGwgdGhlIGZpcm13YXJlLCBleHRyYWN0ZWQgYnkgdGhlIHVzZXIgc3BhY2UgdG9vbHM7IHNlZVxcbiAgMzk6XFx0XFx0ICBcXHUwMDNjaHR0cDovL2FjY2Vzc3J1bm5lci5zb3VyY2Vmb3JnZS5uZXQvXFx1MDAzZSBmb3IgZGV0YWlscy5cXG4gIDQwOlxcdFxcbiAgNDE6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gIDQyOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGN4YWNydS5cXG4gIDQzOlxcdFxcbiAgNDQ6XFx0Y29uZmlnIFVTQl9VRUFHTEVBVE1cXG4gIDQ1OlxcdFxcdHRyaXN0YXRlIFxcXCJBREkgOTMwIGFuZCBlYWdsZSBVU0IgRFNMIG1vZGVtXFxcIlxcbiAgNDY6XFx0XFx0c2VsZWN0IEZXX0xPQURFUlxcbiAgNDc6XFx0XFx0aGVscFxcbiAgNDg6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGFuIEFEU0wgVVNCIG1vZGVtIGJhc2VkIG9uIHRoZSBBREkgOTMwXFxuICA0OTpcXHRcXHQgIG9yIGVhZ2xlIGNoaXBzZXQuIEluIG9yZGVyIHRvIHVzZSB5b3VyIG1vZGVtIHlvdSB3aWxsIG5lZWQgdG9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6NTA6NTkuNDU1NTU2MTAzWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MTE1MTUzOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBVU0IgQVRNIE1vZHVsZSdzIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgVVNCX0FUTWAgbW9kdWxlLCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBpdHMgYnVpbGQgY29uZmlndXJhdGlvbi4gVGhlIGZpcnN0IHF1ZXN0aW9uIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXM6IGFyZSB0aGVyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZiBiZXlvbmQgdGhlIG1vZHVsZSBpdHNlbGY/IEkga25vdyBgVVNCX0FUTWAgaXMgZGVmaW5lZCB3aXRoaW4gYGRyaXZlcnMvdXNiL2F0bS9LY29uZmlnYCwgc28gdGhhdCdzIG15IHN0YXJ0aW5nIHBvaW50LiBOb3csIHRvIGdldCBhIGJyb2FkZXIgcGljdHVyZSBvZiBob3cgdGhpcyBtb2R1bGUgZml0cyBpbnRvIHRoZSBVU0Igc3Vic3lzdGVtLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGBkcml2ZXJzL3VzYi9NYWtlZmlsZWAuIEknbGwgc2NhbiB0aGF0IHRvIHNlZSBob3cgaXQncyBsaW5rZWQsIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcHJlLXJlcXVpc2l0ZXMsIG9yIGlmIHRoZXJlIGlzIGFueXRoaW5nIHRoYXQgbWF5IGhhdmUgYmVlbiBtaXNzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzQyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo1MTowNC4yNjcwNzQ1NFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI5ODk0MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL01ha2VmaWxlPTUzPW9iai0kKENPTkZJR19FQVJMWV9QUklOVEtfVVNCKVxcdCs9IGVhcmx5L1xcbmRyaXZlcnMvdXNiL01ha2VmaWxlLTU0LVxcbmRyaXZlcnMvdXNiL01ha2VmaWxlOjU1Om9iai0kKENPTkZJR19VU0JfQVRNKVxcdFxcdCs9IGF0bS9cXG5kcml2ZXJzL3VzYi9NYWtlZmlsZTo1NjpvYmotJChDT05GSUdfVVNCX1NQRUVEVE9VQ0gpXFx0Kz0gYXRtL1xcbmRyaXZlcnMvdXNiL01ha2VmaWxlLTU3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo1MTowNC4zMTAwNjkyMDRaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA4NjE5NTMyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nLCBhcyBpZiBJIHdlcmUgd29ya2luZyB0aHJvdWdoIHRoaXMgY29kZTpcblxuKipNYWtlZmlsZSBEZXBlbmRlbmN5IENvbnVuZHJ1bSoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4gTXkgbWVudGFsIG1vZGVsIGlzIHRlbGxpbmcgbWUgdGhhdCBgZHJpdmVycy91c2IvTWFrZWZpbGVgIGhhcyBhIGNvbmRpdGlvbmFsIGRlcGVuZGVuY3kgaGVyZS4gSXQncyBzYXlpbmcgdGhhdCwgdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzLCBzcGVjaWZpY2FsbHkgd2hlbiBgQ09ORklHX1VTQl9BVE1gIGlzIGRlZmluZWQsIHRoZSBgYXRtL2AgZGlyZWN0b3J5IHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkIHByb2Nlc3MgKnRocm91Z2gqIHRoZSBgZHJpdmVycy91c2IvTWFrZWZpbGVgLiAgVGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEl0IG1ha2VzIHNlbnNlLCB5b3UndmUgZ290IHlvdXIgQVRNIG92ZXIgVVNCIGZ1bmN0aW9uYWxpdHksIGFuZCB0aGlzIGlzIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGFjY291bnRzIGZvciBpdC5cblxuSG93ZXZlciwgdGhlcmUncyBhbm90aGVyIGxldmVsIGhlcmUuICBUaGUgYGRyaXZlcnMvdXNiL01ha2VmaWxlYCBmaWxlIGl0c2VsZiBpcyBvbmx5IHB1bGxlZCBpbiB3aGVuIGBDT05GSUdfVVNCX1NVUFBPUlRgIGlzIGVuYWJsZWQuICBTbyBpdCdzIG5vdCBhIGRpcmVjdCBpbmNsdXNpb24gYWx3YXlzIC0gaXQgaXMgbmVzdGVkLlxuXG5TbywgdG8gc3VtbWFyaXplLCB0aGUgZGVwZW5kZW5jeSBjaGFpbiBpczogaWYgYENPTkZJR19VU0JfU1VQUE9SVGAgaXMgc2V0LCAqdGhlbiogYGRyaXZlcnMvdXNiL01ha2VmaWxlYCBpcyBpbmNsdWRlZC4gSWYgQU5EIE9OTFkgSUYgYENPTkZJR19VU0JfQVRNYCBpcyAqYWxzbyogc2V0LCAqdGhlbiogdGhlIGBhdG0vYCBkaXJlY3RvcnkgaXMgYWxzbyBpbmNsdWRlZCAqdGhyb3VnaCogdGhlIGluY2x1ZGVkIGBkcml2ZXJzL3VzYi9NYWtlZmlsZWAuIEl0J3MgYSBuZXN0ZWQgY29uZGl0aW9uYWwgaW5jbHVzaW9uLiBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgdGhpcyB3aGVuIGRlYnVnZ2luZyBvciBtb2RpZnlpbmcgYW55dGhpbmcgcmVsYXRlZCB0byBVU0Igb3IgQVRNIHN1cHBvcnQgd2l0aGluIHRoaXMgYnVpbGQgc3lzdGVtLiBUaGlzIGNvdWxkIGFmZmVjdCB0aGUgb3JkZXIgb2YgY29tcGlsYXRpb24gYW5kIHRoZXJlZm9yZSByZXF1aXJlIGNhcmVmdWwgcGxhbm5pbmcgaWYgYW55IGNoYW5nZXMgYXJlIG5lZWRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQwNjMsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo1MTowOC4zOTYyNjY4MDRaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNjgxOTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvTWFrZWZpbGU9MTA1PW9iai0kKENPTkZJR19UQylcXHRcXHQrPSB0Yy9cXG5kcml2ZXJzL01ha2VmaWxlOjEwNjpvYmotJChDT05GSUdfVVNCX1BIWSlcXHRcXHQrPSB1c2IvXFxuZHJpdmVycy9NYWtlZmlsZToxMDc6b2JqLSQoQ09ORklHX1VTQilcXHRcXHQrPSB1c2IvXFxuZHJpdmVycy9NYWtlZmlsZToxMDg6b2JqLSQoQ09ORklHX1VTQl9TVVBQT1JUKVxcdCs9IHVzYi9cXG5kcml2ZXJzL01ha2VmaWxlOjEwOTpvYmotJChDT05GSUdfUENJKVxcdFxcdCs9IHVzYi9cXG5kcml2ZXJzL01ha2VmaWxlOjExMDpvYmotJChDT05GSUdfVVNCX0dBREdFVClcXHQrPSB1c2IvXFxuZHJpdmVycy9NYWtlZmlsZToxMTE6b2JqLSQoQ09ORklHX09GKVxcdFxcdCs9IHVzYi9cXG5kcml2ZXJzL01ha2VmaWxlLTExMi1vYmotJChDT05GSUdfU0VSSU8pXFx0XFx0Kz0gaW5wdXQvc2VyaW8vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjUxOjA4LjQzODk1NTI5OFoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzUzMzQ3NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVTQiBDb25maWd1cmF0aW9uIENoZWNrKipcblxuT2theSwgc28gSSdtIHByZXR0eSBzdXJlIGBVU0JfU1VQUE9SVGAgbmVlZHMgdG8gYmUgZW5hYmxlZC4gVGhhdCdzIHVzdWFsbHkgdGhlIGRlZmF1bHQsIGJ1dCBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUuIE5vdywgSSBoYXZlIHRvIHRoaW5rIGFib3V0IGBVU0JgIGl0c2VsZiwgYW5kIGlmIGBVU0JfQVRNYCBpcyBhIGRlcGVuZGVudCBtb2R1bGUuIEknbGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgZHJpdmVycy91c2IvYXRtL0tjb25maWdgIGZpbGUgYWdhaW47IGl0J3MgYWx3YXlzIHdvcnRoIGEgcXVpY2sgY29uZmlybWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDYzNiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjUxOjE2Ljc5MjMwNTUzOFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMzMDMwMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZz02PW1lbnVjb25maWcgVVNCX0FUTVxcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIlVTQiBEU0wgbW9kZW0gc3VwcG9ydFxcXCJcXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZzo4OlxcdGRlcGVuZHMgb24gQVRNXFxuZHJpdmVycy91c2IvYXRtL0tjb25maWctOS1cXHRzZWxlY3QgQ1JDMzJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6NTE6MTYuODM1NjEwNTEyWiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNTkwMDkxMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6XG5cbioqVVNCIERlcGVuZGVuY3kgQ2hlY2sqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IHRoZSBgVVNCX0FUTWAgZHJpdmVyLCBsaWtlIG1vc3QgVVNCLXJlbGF0ZWQgbW9kdWxlcywgd291bGQgaW1wbGljaXRseSBkZXBlbmQgb24gdGhlIGNvcmUgYFVTQmAgc3Vic3lzdGVtIGJlaW5nIGVuYWJsZWQuIEJ1dCBub3cgSSdtIGhhdmluZyBhIHNlY29uZCB0aG91Z2h0IGFuZCBJJ20gbm90IHNvIHN1cmUuIEl0IG1pZ2h0IGJlIHBvc3NpYmxlIHRoYXQgaXQgZG9lc24ndC5cblxuQmVzdCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBmaWxlLCBgZHJpdmVycy91c2IvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBVU0IgZHJpdmVycyBhcmUgZGVmaW5lZC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uLiBMZXQncyBkaWcgaW4gdGhlcmUgYW5kIHNlZSB3aGF0IGBVU0JfQVRNYCdzIGNvbmZpZyBkZWZpbml0aW9uIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODkzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6NTE6MjAuMTk0NjIyNTU2WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTM1NDI4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb3VyY2UgXFxcImRyaXZlcnMvdXNiL2F0bS9LY29uZmlnXFxcIlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL0tjb25maWc9MTQ4PXNvdXJjZSBcXFwiZHJpdmVycy91c2IvbWlzYy9LY29uZmlnXFxcIlxcbmRyaXZlcnMvdXNiL0tjb25maWctMTQ5LVxcbmRyaXZlcnMvdXNiL0tjb25maWc6MTUwOnNvdXJjZSBcXFwiZHJpdmVycy91c2IvYXRtL0tjb25maWdcXFwiXFxuZHJpdmVycy91c2IvS2NvbmZpZy0xNTEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjUxOjIwLjI0Mzk3OTM1MVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Njk1ODI5NzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIFVTQiBEcml2ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIHNlZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgdmVyaWZ5IHRoZSBLY29uZmlnIHN0cnVjdHVyZSBmb3IgdGhlIFVTQiBBVE0gZHJpdmVyLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IGlmIHRoZSBgc291cmNlIFwiZHJpdmVycy91c2IvYXRtL0tjb25maWdcImAgbGluZSBpcyBuZXN0ZWQgd2l0aGluIGFuIGBpZiBVU0JgIGNvbmRpdGlvbmFsIGJsb2NrLiBUaGF0J3MgYSBjcnVjaWFsIHBvaW50LiBJZiBpdCAqaXMqIGluc2lkZSB0aGUgYGlmIFVTQmAgYmxvY2ssIGl0IG1lYW5zIHRoZSBBVE0gVVNCIGRyaXZlciBpcywgY29ycmVjdGx5LCBvbmx5IGNvbnNpZGVyZWQgaWYgdGhlIGNvcmUgVVNCIGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZC4gSWYgaXQgKmlzbid0Kiwgd2VsbCwgdGhhdCByYWlzZXMgc29tZSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFib3V0IGhvdyB0aGUgZGVwZW5kZW5jeSBpcyBtYW5hZ2VkIGFuZCBjb3VsZCBwb3RlbnRpYWxseSBjcmVhdGUgYnVpbGQgaXNzdWVzIG9yIHJ1bnRpbWUgYmVoYXZpb3IgSSBuZWVkIHRvIGludmVzdGlnYXRlLiBTbywgeWVhaCwgdGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcyAqd2hlcmUqIGlzIHRoYXQgYHNvdXJjZWAgc3RhdGVtZW50IGFuZCB3aGF0J3Mgc3Vycm91bmRpbmcgaXQgaW4gdGhlIEtjb25maWcgaGllcmFyY2h5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTE4OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjUxOjI1LjkzOTgxMTY0WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTQwOlxcdHNvdXJjZSBcXFwiZHJpdmVycy91c2IvaXNwMTc2MC9LY29uZmlnXFxcIlxcbiAxNDE6XFx0XFxuIDE0MjpcXHRjb21tZW50IFxcXCJVU0IgcG9ydCBkcml2ZXJzXFxcIlxcbiAxNDM6XFx0XFxuIDE0NDpcXHRpZiBVU0JcXG4gMTQ1OlxcdFxcbiAxNDY6XFx0c291cmNlIFxcXCJkcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZ1xcXCJcXG4gMTQ3OlxcdFxcbiAxNDg6XFx0c291cmNlIFxcXCJkcml2ZXJzL3VzYi9taXNjL0tjb25maWdcXFwiXFxuIDE0OTpcXHRcXG4gMTUwOlxcdHNvdXJjZSBcXFwiZHJpdmVycy91c2IvYXRtL0tjb25maWdcXFwiXFxuIDE1MTpcXHRcXG4gMTUyOlxcdGVuZGlmICMgVVNCXFxuIDE1MzpcXHRcXG4gMTU0OlxcdHNvdXJjZSBcXFwiZHJpdmVycy91c2IvcGh5L0tjb25maWdcXFwiXFxuIDE1NTpcXHRcXG4gMTU2OlxcdHNvdXJjZSBcXFwiZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWdcXFwiXFxuIDE1NzpcXHRcXG4gMTU4OlxcdHNvdXJjZSBcXFwiZHJpdmVycy91c2IvdHlwZWMvS2NvbmZpZ1xcXCJcXG4gMTU5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo1MToyNS45Mzk5MDM4M1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDg4Mzg4MTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIFBvdGVudGlhbCBTZWN1cml0eSBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGlzIHBhdGNoIGFuZCBpdCdzIG1vZGlmeWluZyB0aGUgYGFkc2xfc3RhdGVfc3RvcmVgIGFuZCBgYWRzbF9jb25maWdfc3RvcmVgIGZ1bmN0aW9ucy4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBhZGRpbmcgYSBjaGVjayBmb3IgYGluc3RhbmNlLVx1MDAzZXVzYmF0bS1cdTAwM2VhdG1fZGV2ID09IE5VTExgIGJlZm9yZSBhY2Nlc3NpbmcgdGhlIGBhdG1fZGV2YCBtZW1iZXIuIFJpZ2h0LCB0aGF0J3MgYSBzdHJhaWdodGZvcndhcmQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHByZXZlbnRpb24uIEdvb2QsIHByZXZlbnRpbmcgY3Jhc2hlcyBpcyBhbHdheXMgYSBwcmlvcml0eS4gSXQgbG9va3MgbGlrZSB0aGlzIGlzIHJlYWNoYWJsZSB2aWEgc3lzZnMsIHNvIGEgdXNlci1zcGFjZSBwcm9jZXNzIGNhbiB0cmlnZ2VyIHRoaXMgY29kZSBwYXRoLlxuXG5TaW5jZSB0aGlzIHRvdWNoZXMgc3lzZnMsIGl0J3MgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBzaG91bGQgYmUgZnV6emVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgY29uc2lkZXIgdGhhdCB3aGVuIGV2YWx1YXRpbmcgdGhpcy5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb25zLiBUaGUgZGVwZW5kZW5jeSB0cmVlIHRlbGxzIG1lIHRoYXQgYFVTQmAgaXMgcmVxdWlyZWQgYmVjYXVzZSBpdCdzIGluc2lkZSBgaWYgVVNCYC4gQ29uc2VxdWVudGx5LCB0aGUgbmVjZXNzYXJ5IGBFbmFibGVDb25maWdzYCBzaG91bGQgYmUgYFtcIlVTQl9DWEFDUlVcIiwgXCJVU0JfQVRNXCIsIFwiQVRNXCIsIFwiVVNCXCJdYC4gSSBhbHNvIHNlZSB0aGF0IGBVU0JfQ1hBQ1JVYCBzZWxlY3RzIGBGV19MT0FERVJgLiBgRldfTE9BREVSYCBpcyBwcmV0dHkgY29tbW9uLCBzbyBJJ20gbm90IG92ZXJseSBjb25jZXJuZWQgYWJvdXQgdGhhdCBiZWluZyBhbiBvYnN0YWNsZS5cblxuSSdtIGNvbmZpZGVudCB0aGF0IHRoZSBtb2RpZmllZCBmdW5jdGlvbnMsIGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYCwgYXJlIHRoZSBvbmx5IG9uZXMgaW1wYWN0ZWQuIFRoZXkgYXJlIGFsc28gc3RhdGljIGFuZCBjYW4gYmUgcHJvdmlkZWQgYXMgZm9jdXMgc3ltYm9scywgc2luY2UgdGhleSdyZSBwYXNzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMgdGhyb3VnaCBgREVWSUNFX0FUVFJfUldgLiBJJ2xsIGRvdWJsZS1jaGVjayBgQ1hBQ1JVX0NNRF9JTklUYCBhbmQgYENYQUNSVV9TRVRfSU5JVGAganVzdCB0byBiZSBzdXJlLCBidXQgSSBmZWVsIGZhaXJseSBjb25maWRlbnQgSSd2ZSBnb3QgYSBnb29kIGdyYXNwIG9uIHRoZSBzY29wZSBvZiB0aGlzIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2NTgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo1MTozMy4wMjgyOTQ0MDZaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDI2NTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNYQUNSVV9DTURfSU5JVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTE5OT1zdGF0aWMgREVWSUNFX0FUVFJfUk8oX25hbWUpXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTIwMC1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MjAxOiNkZWZpbmUgQ1hBQ1JVX0NNRF9JTklUKF9uYW1lKSBcXFxcXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTIwMi1zdGF0aWMgREVWSUNFX0FUVFJfUlcoX25hbWUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjUxOjMzLjA3MjMyNjY5MVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTA4MDY0Njc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBDWEFDUlUgVVNCIEFUTSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGp1c3QgYmVlbiBsb29raW5nIG92ZXIgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgZ2l2ZW4gbXkgZXhwZXJ0aXNlLiBUaGUgY29yZSBvZiBpdCBpcyB0aGUgYWRkaXRpb24gb2YgYSBOVUxMIHBvaW50ZXIgY2hlY2sgd2l0aGluIHRoZSBgYWRzbF9zdGF0ZV9zdG9yZWAgYW5kIGBhZHNsX2NvbmZpZ19zdG9yZWAgc3lzZnMgaGFuZGxlcnMuIEkgcmVjb2duaXplIGltbWVkaWF0ZWx5IHRoYXQgdGhlc2UgZnVuY3Rpb25zLCBhcyBpbmRpY2F0ZWQgYnkgdGhlIGBERVZJQ0VfQVRUUl9SV2AgbWFjcm8sIGFyZSBlc3NlbnRpYWxseSBmdW5jdGlvbiBwb2ludGVycyDigJMgdGhleSdyZSB0aGUgYF9zaG93YCBhbmQgYF9zdG9yZWAgZnVuY3Rpb25zIGFzc29jaWF0ZWQgd2l0aCBhIHN5c2ZzIGF0dHJpYnV0ZS4gQmVjYXVzZSBvZiB0aGlzLCB0aGV5ICp3b24ndCogYmUgaW5saW5lZC4gVGhhdCdzIGFuIGltcG9ydGFudCBkZXRhaWwgZm9yIGZ1enppbmcuXG5cbk15IGNvbmNsdXNpb24/IFRoaXMgaXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLiBJIGNhbiBzZWUgdGhhdCB0aGUgcGF0Y2ggc3BlY2lmaWNhbGx5IG1lbnRpb25zIGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYCwgYW5kIHRoZSByZWFzb25pbmcgaXMgc291bmQ6IHRoZXNlIGhhbmRsZXJzICphcmUqIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSwgbWFraW5nIHRoZW0gcG90ZW50aWFsIHRhcmdldHMuIFRoZSBwYXRoIHRvIGV4cGxvaXQgdGhlbT8gVmlhIHN5c2ZzLCBjb3VwbGVkIHdpdGggdGhlIFVTQiBkdW1teV9oY2QuIFRoaXMgaXMgYSB2ZXJ5IHR5cGljYWwgYW5kIGVmZmVjdGl2ZSBmdXp6aW5nIHN0cmF0ZWd5IGluIHRoaXMgZG9tYWluLlxuXG5UaGVyZWZvcmUsIHRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIGlzIHNldCB0byBgdHJ1ZWAuIFdlIHNob3VsZCBmb2N1cyBvdXIgZnV6emluZyBlZmZvcnRzIG9uIGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYCwgYXMgdGhvc2UgYXJlIHRoZSBcIkZvY3VzU3ltYm9sc1wiLiBUaGUgdGFyZ2V0IGNvbmZpZ3VyYXRpb25zIHRoYXQgbmVlZCB0byBiZSBlbmFibGVkIGFyZSBgVVNCX0NYQUNSVWAsIGBVU0JfQVRNYCwgYEFUTWAsIGFuZCBgVVNCYCB0byBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgbmVjZXNzYXJ5IHBhcnRzIG9mIHRoZSBrZXJuZWwuXG5cblJpZ2h0LCBJJ20gcmVhZHkgdG8gY2FsbCB0aGUgc2V0LXJlc3VsdHMgZnVuY3Rpb24gYW5kIGRvY3VtZW50IG15IGZpbmRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjY5MywiT3V0cHV0VG9rZW5zIjoxMzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6NTE6MzguMTgwMzkzNzI4WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQxODYyNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9DWEFDUlVcIixcbiAgICBcIlVTQl9BVE1cIixcbiAgICBcIkFUTVwiLFxuICAgIFwiVVNCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWRzbF9zdGF0ZV9zdG9yZVwiLFxuICAgIFwiYWRzbF9jb25maWdfc3RvcmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgTlVMTCBwb2ludGVyIGNoZWNrIGluIHRoZSBgYWRzbF9zdGF0ZV9zdG9yZWAgYW5kIGBhZHNsX2NvbmZpZ19zdG9yZWAgc3lzZnMgaGFuZGxlcnMgZm9yIHRoZSBjeGFjcnUgVVNCIEFUTSBkcml2ZXIuIFRoZXNlIGhhbmRsZXJzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIGNhbiBiZSBmdXp6ZWQgdmlhIHN5c2ZzIGFuZCBVU0IgZHVtbXlfaGNkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9DWEFDUlVcIixcbiAgICBcIlVTQl9BVE1cIixcbiAgICBcIkFUTVwiLFxuICAgIFwiVVNCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWRzbF9zdGF0ZV9zdG9yZVwiLFxuICAgIFwiYWRzbF9jb25maWdfc3RvcmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgTlVMTCBwb2ludGVyIGNoZWNrIGluIHRoZSBgYWRzbF9zdGF0ZV9zdG9yZWAgYW5kIGBhZHNsX2NvbmZpZ19zdG9yZWAgc3lzZnMgaGFuZGxlcnMgZm9yIHRoZSBjeGFjcnUgVVNCIEFUTSBkcml2ZXIuIFRoZXNlIGhhbmRsZXJzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIGNhbiBiZSBmdXp6ZWQgdmlhIHN5c2ZzIGFuZCBVU0IgZHVtbXlfaGNkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo1MTozOC4yNjQ1ODczMDdaIiwiU2VxIjo1MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MjE5NzA1OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo1MTozOC4yNjUxMTA4NzdaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjUyMTQ0Mzc3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayAoYGluc3RhbmNlLVxcdTAwM2V1c2JhdG0tXFx1MDAzZWF0bV9kZXYgPT0gTlVMTGApIGluIGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYCB0byBwcmV2ZW50IGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIG1lY2hhbmlzbXMgc3VjaCBhcyBwYWdlIGZhdWx0cyBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgdXNlci1zcGFjZSBjb3BpZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxMTkxMTVjMTExNGVhZGNiZmNhNzkyYTM5ZWUxNmFlMzNjZTUyOWU0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMDY6NDk6MjcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMgYi9kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmNcbmluZGV4IDQyOWFjMjBhODk5OWYuLmRlZTE1ZjdiNzBiZjYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmNcbisrKyBiL2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1xuQEAgLTM0Nyw3ICszNDcsNyBAQCBzdGF0aWMgc3NpemVfdCBhZHNsX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRyZXQgPSAwO1xuIFxuLVx0aWYgKGluc3RhbmNlID09IE5VTEwpXG4rXHRpZiAoaW5zdGFuY2UgPT0gTlVMTCB8fCBpbnN0YW5jZS1cdTAwM2V1c2JhdG0tXHUwMDNlYXRtX2RldiA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbiBcdGlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoXHUwMDI2aW5zdGFuY2UtXHUwMDNlYWRzbF9zdGF0ZV9zZXJpYWxpemUpKVxuQEAgLTQ0NCw3ICs0NDQsNyBAQCBzdGF0aWMgc3NpemVfdCBhZHNsX2NvbmZpZ19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gXHRpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpXG4gXHRcdHJldHVybiAtRUFDQ0VTO1xuIFxuLVx0aWYgKGluc3RhbmNlID09IE5VTEwpXG4rXHRpZiAoaW5zdGFuY2UgPT0gTlVMTCB8fCBpbnN0YW5jZS1cdTAwM2V1c2JhdG0tXHUwMDNlYXRtX2RldiA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbiBcdHBvcyA9IDA7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo1MTozOC4yNjUxMTE4ODdaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUyMTQyNDE4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBjeGFjcnUuYyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBhZGRpbmcgYSBjaGVjaywgYHx8IGluc3RhbmNlLVx1MDAzZXVzYmF0bS1cdTAwM2VhdG1fZGV2ID09IE5VTExgLCBpbiBgYWRzbF9zdGF0ZV9zdG9yZWAgYW5kIGBhZHNsX2NvbmZpZ19zdG9yZWAuIE15IGluaXRpYWwgdGhvdWdodCBpczogdGhpcyBpcyBhIGNsYXNzaWMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHByZXZlbnRpb24uIEkga25vdyB0aGUga2VybmVsIGhhcyBtZWNoYW5pc21zIGxpa2UgcGFnZSBmYXVsdHMgYW5kIEtBU0FOIHRvIGNhdGNoIHRoZXNlLCBidXQgdGhpcyBwcm9hY3RpdmUgYXBwcm9hY2ggaXMgY2xlYW5lci5cblxuSSdtIHF1aWNrbHkgdmVyaWZ5aW5nIHRoZSBjb250ZXh0LiBgaW5zdGFuY2VgIHBvaW50cyB0byBgc3RydWN0IGN4YWNydV9kYXRhYCwgYW5kIGRpZ2dpbmcgZG93biwgYGluc3RhbmNlLVx1MDAzZXVzYmF0bWAgcG9pbnRzIHRvIGEgYHN0cnVjdCB1c2JhdG1fZGF0YWAsIHdoaWNoIGluIHR1cm4sIGhhcyBhIHBvaW50ZXIgYGF0bV9kZXZgIG9mIHR5cGUgYHN0cnVjdCBhdG1fZGV2YC4gVGhlIHBhdGNoIGd1YXJkcyBhZ2FpbnN0IGFjY2Vzc2luZyBgYXRtX2RldmAgd2hlbiBpdCdzIE5VTEwsIGFzIHRoZSBjaGVjayBpbmRpY2F0ZXMuXG5cbkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGZpeCwgSSBzZWUgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBhbnkgaW5mb3JtYXRpb24gbGVhayBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlLiBJdCdzIGEgdGFyZ2V0ZWQgZGVmZW5zZSBhZ2FpbnN0IGEgc3BlY2lmaWMsIHdlbGwtdW5kZXJzdG9vZCBjbGFzcyBvZiBlcnJvcnMuIFRoZSBrZXJuZWwncyBleGlzdGluZyBwcm90ZWN0aW9ucyBhcmUgdGhlcmUsIGJ1dCB0aGlzIHBhdGNoIGlzIGEgZ29vZCBiZWx0LWFuZC1zdXNwZW5kZXJzIGFwcHJvYWNoLlxuXG5UaGVyZWZvcmUsIGFmdGVyIGNvbnNpZGVyaW5nIHRoaXMgY2FyZWZ1bGx5LCBJJ20gY29uZmlkZW50IHRoYXQgKipOZWVkc0tNU0FOIHNob3VsZCBiZSBmYWxzZSoqIGluIHRoaXMgY2FzZS4gTXkgcmVhc29uaW5nIGlzIHNvbGlkLCBhbmQgSSdsbCBtYWtlIHN1cmUgdG8gZG9jdW1lbnQgaXQgYXMgc3VjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4MiwiT3V0cHV0VG9rZW5zIjoxMjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjo1MTo0NC43ODY1Mzg2MDRaIiwiU2VxIjo1NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBOVUxMIHBvaW50ZXIgY2hlY2sgKGBpbnN0YW5jZS1cXHUwMDNldXNiYXRtLVxcdTAwM2VhdG1fZGV2ID09IE5VTExgKSBpbiBgYWRzbF9zdGF0ZV9zdG9yZWAgYW5kIGBhZHNsX2NvbmZpZ19zdG9yZWAgdG8gcHJldmVudCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBtZWNoYW5pc21zIHN1Y2ggYXMgcGFnZSBmYXVsdHMgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29waWVzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayAoYGluc3RhbmNlLVxcdTAwM2V1c2JhdG0tXFx1MDAzZWF0bV9kZXYgPT0gTlVMTGApIGluIGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYCB0byBwcmV2ZW50IGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIG1lY2hhbmlzbXMgc3VjaCBhcyBwYWdlIGZhdWx0cyBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgdXNlci1zcGFjZSBjb3BpZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowpjt7d[1] Phase: Succeeded StartedAt: 2026-08-18 06:51:55 +0000 UTC FinishedAt: 2026-08-18 06:51:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpjt7d[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-18 06:51:55 +0000 UTC FinishedAt: 2026-08-18 06:51:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpjt7d[2] Phase: Succeeded StartedAt: 2026-08-18 06:51:55 +0000 UTC FinishedAt: 2026-08-18 10:32:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpjt7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["adsl_state_store","adsl_config_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"9792d684-e4c9-4baf-aac3-efd15773ba58","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-18 06:51:55 +0000 UTC FinishedAt: 2026-08-18 10:32:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["adsl_state_store","adsl_config_store"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"9792d684-e4c9-4baf-aac3-efd15773ba58","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowpjt7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["adsl_state_store","adsl_config_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"9792d684-e4c9-4baf-aac3-efd15773ba58","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-18 06:51:55 +0000 UTC FinishedAt: 2026-08-18 06:52:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpjt7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["adsl_state_store","adsl_config_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"9792d684-e4c9-4baf-aac3-efd15773ba58","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-18 06:51:55 +0000 UTC FinishedAt: 2026-08-18 06:51:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.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-workflowpjt7d/series-workflowpjt7d-convert-artifact-2589568939/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpjt7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["adsl_state_store","adsl_config_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"9792d684-e4c9-4baf-aac3-efd15773ba58","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-18 06:52:05 +0000 UTC FinishedAt: 2026-08-18 07:08:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpjt7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["adsl_state_store","adsl_config_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"9792d684-e4c9-4baf-aac3-efd15773ba58","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-18 06:52:05 +0000 UTC FinishedAt: 2026-08-18 07:08:32 +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:*6e4fefbe-e23b-41ea-bfa6-5ea21dcb9470,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-workflowpjt7d/series-workflowpjt7d-convert-artifact-2589568939/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": "33f3afb4-6e9e-4f1d-9d6a-0817e4557c1d", "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-workflowpjt7d/series-workflowpjt7d-build-action-3668787369/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpjt7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["adsl_state_store","adsl_config_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"9792d684-e4c9-4baf-aac3-efd15773ba58","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-18 06:52:05 +0000 UTC FinishedAt: 2026-08-18 07:08:22 +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:*6e4fefbe-e23b-41ea-bfa6-5ea21dcb9470,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-workflowpjt7d/series-workflowpjt7d-convert-artifact-2589568939/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": "33f3afb4-6e9e-4f1d-9d6a-0817e4557c1d", "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-workflowpjt7d/series-workflowpjt7d-build-action-3668787369/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpjt7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["adsl_state_store","adsl_config_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"9792d684-e4c9-4baf-aac3-efd15773ba58","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-18 07:08:32 +0000 UTC FinishedAt: 2026-08-18 07:08:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpjt7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["adsl_state_store","adsl_config_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"9792d684-e4c9-4baf-aac3-efd15773ba58","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-18 07:08:32 +0000 UTC FinishedAt: 2026-08-18 07:08:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpjt7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["adsl_state_store","adsl_config_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"9792d684-e4c9-4baf-aac3-efd15773ba58","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-18 07:08:32 +0000 UTC FinishedAt: 2026-08-18 07:08:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpjt7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["adsl_state_store","adsl_config_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"9792d684-e4c9-4baf-aac3-efd15773ba58","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-18 07:08:32 +0000 UTC FinishedAt: 2026-08-18 07:08:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"9792d684-e4c9-4baf-aac3-efd15773ba58","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.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-workflowpjt7d/series-workflowpjt7d-convert-artifact-2880111234/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpjt7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["adsl_state_store","adsl_config_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"9792d684-e4c9-4baf-aac3-efd15773ba58","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-18 07:08:42 +0000 UTC FinishedAt: 2026-08-18 07:10:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpjt7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["adsl_state_store","adsl_config_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"9792d684-e4c9-4baf-aac3-efd15773ba58","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-18 07:08:42 +0000 UTC FinishedAt: 2026-08-18 07:10:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*33f3afb4-6e9e-4f1d-9d6a-0817e4557c1d,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-workflowpjt7d/series-workflowpjt7d-build-action-3668787369/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-workflowpjt7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["adsl_state_store","adsl_config_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"9792d684-e4c9-4baf-aac3-efd15773ba58","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-18 07:10:29 +0000 UTC FinishedAt: 2026-08-18 07:10:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpjt7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["adsl_state_store","adsl_config_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"9792d684-e4c9-4baf-aac3-efd15773ba58","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-18 07:10:29 +0000 UTC FinishedAt: 2026-08-18 07:10:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpjt7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["adsl_state_store","adsl_config_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"9792d684-e4c9-4baf-aac3-efd15773ba58","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-18 07:10:29 +0000 UTC FinishedAt: 2026-08-18 07:27:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpjt7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["adsl_state_store","adsl_config_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"9792d684-e4c9-4baf-aac3-efd15773ba58","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-18 07:10:29 +0000 UTC FinishedAt: 2026-08-18 07:27:01 +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:*6e4fefbe-e23b-41ea-bfa6-5ea21dcb9470,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-workflowpjt7d/series-workflowpjt7d-convert-artifact-2880111234/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": "20fffcf2-af1e-4e92-a64e-4a43e4dc1358", "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-workflowpjt7d/series-workflowpjt7d-build-action-4041141462/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpjt7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["adsl_state_store","adsl_config_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"9792d684-e4c9-4baf-aac3-efd15773ba58","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-18 07:10:29 +0000 UTC FinishedAt: 2026-08-18 07:26:51 +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:*6e4fefbe-e23b-41ea-bfa6-5ea21dcb9470,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-workflowpjt7d/series-workflowpjt7d-convert-artifact-2880111234/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": "20fffcf2-af1e-4e92-a64e-4a43e4dc1358", "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-workflowpjt7d/series-workflowpjt7d-build-action-4041141462/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpjt7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["adsl_state_store","adsl_config_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"9792d684-e4c9-4baf-aac3-efd15773ba58","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-18 07:27:01 +0000 UTC FinishedAt: 2026-08-18 07:27:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpjt7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["adsl_state_store","adsl_config_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"9792d684-e4c9-4baf-aac3-efd15773ba58","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-18 07:27:01 +0000 UTC FinishedAt: 2026-08-18 07:27:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpjt7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["adsl_state_store","adsl_config_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"9792d684-e4c9-4baf-aac3-efd15773ba58","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-18 07:27:01 +0000 UTC FinishedAt: 2026-08-18 07:29:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpjt7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["adsl_state_store","adsl_config_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"9792d684-e4c9-4baf-aac3-efd15773ba58","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-18 07:27:01 +0000 UTC FinishedAt: 2026-08-18 07:28:58 +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:*20fffcf2-af1e-4e92-a64e-4a43e4dc1358,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-workflowpjt7d/series-workflowpjt7d-build-action-4041141462/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-workflowpjt7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["adsl_state_store","adsl_config_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"9792d684-e4c9-4baf-aac3-efd15773ba58","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-18 07:29:08 +0000 UTC FinishedAt: 2026-08-18 10:32:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpjt7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["adsl_state_store","adsl_config_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"9792d684-e4c9-4baf-aac3-efd15773ba58","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-18 07:29:08 +0000 UTC FinishedAt: 2026-08-18 10:32:30 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["adsl_state_store","adsl_config_store"],"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:*33f3afb4-6e9e-4f1d-9d6a-0817e4557c1d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*20fffcf2-af1e-4e92-a64e-4a43e4dc1358,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-workflowpjt7d/series-workflowpjt7d-build-action-3668787369/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-workflowpjt7d/series-workflowpjt7d-build-action-4041141462/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowpjt7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["adsl_state_store","adsl_config_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"9792d684-e4c9-4baf-aac3-efd15773ba58","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-18 07:29:08 +0000 UTC FinishedAt: 2026-08-18 07:29:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpjt7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["adsl_state_store","adsl_config_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"9792d684-e4c9-4baf-aac3-efd15773ba58","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-18 07:29:08 +0000 UTC FinishedAt: 2026-08-18 07:29:11 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["adsl_state_store","adsl_config_store"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpjt7d/series-workflowpjt7d-convert-artifact-755442615/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpjt7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["adsl_state_store","adsl_config_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"9792d684-e4c9-4baf-aac3-efd15773ba58","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-18 07:29:08 +0000 UTC FinishedAt: 2026-08-18 07:29:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpjt7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["adsl_state_store","adsl_config_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"9792d684-e4c9-4baf-aac3-efd15773ba58","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-18 07:29:08 +0000 UTC FinishedAt: 2026-08-18 07:29:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpjt7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["adsl_state_store","adsl_config_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"9792d684-e4c9-4baf-aac3-efd15773ba58","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-18 07:29:08 +0000 UTC FinishedAt: 2026-08-18 07:29:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpjt7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["adsl_state_store","adsl_config_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"9792d684-e4c9-4baf-aac3-efd15773ba58","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-18 07:29:18 +0000 UTC FinishedAt: 2026-08-18 10:32:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpjt7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["adsl_state_store","adsl_config_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM","USB"],"series_id":"9792d684-e4c9-4baf-aac3-efd15773ba58","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-18 07:29:18 +0000 UTC FinishedAt: 2026-08-18 10:32:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*33f3afb4-6e9e-4f1d-9d6a-0817e4557c1d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*20fffcf2-af1e-4e92-a64e-4a43e4dc1358,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpjt7d/series-workflowpjt7d-build-action-3668787369/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpjt7d/series-workflowpjt7d-build-action-4041141462/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpjt7d/series-workflowpjt7d-convert-artifact-755442615/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}