Name: series-workflow79m96 Phase: Succeeded StartedAt: 2026-09-14 04:24:51 +0000 UTC FinishedAt: 2026-09-14 04:47:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow79m96[0] Phase: Succeeded StartedAt: 2026-09-14 04:24:51 +0000 UTC FinishedAt: 2026-09-14 04:30:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow79m96[0].run-triage Phase: Succeeded StartedAt: 2026-09-14 04:24:51 +0000 UTC FinishedAt: 2026-09-14 04:30:24 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETPOLL", "NETCONSOLE", "NETCONSOLE_DYNAMIC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETPOLL", "NETCONSOLE", "NETCONSOLE_DYNAMIC" ], "series_id": "91f8cc47-d49e-4903-a1c8-5ec06dcb491f" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "__netpoll_send_skb", "netpoll_send_skb", "queue_process" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "base_tree": "net" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA0OjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVFBPTEwmIzM0OywKICAgICYjMzQ7TkVUQ09OU09MRSYjMzQ7LAogICAgJiMzNDtORVRDT05TT0xFX0RZTkFNSUMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX25ldHBvbGxfc2VuZF9za2ImIzM0OywKICAgICYjMzQ7bmV0cG9sbF9zZW5kX3NrYiYjMzQ7LAogICAgJiMzNDtxdWV1ZV9wcm9jZXNzJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHF1ZXVlIGxlbmd0aCBjYXAgKE5FVFBPTExfVFhRX01BWCA9IDEwMjQpIG9uIHRoZSBuZXRwb2xsIHRyYW5zbWlzc2lvbiBxdWV1ZSAobnBpbmZvLVx1MDAzZXR4cSkgaW4gbmV0L2NvcmUvbmV0cG9sbC5jIHRvIHByZXZlbnQgdW5ib3VuZGVkIHF1ZXVlIGdyb3d0aCB3aGVuIHRyYW5zbWlzc2lvbiBzdGFsbHMuIElmIHRoZSBxdWV1ZSBsaW1pdCBpcyByZWFjaGVkLCB0aGUgc2tiIGlzIGZyZWVkIHdpdGggZGV2X2tmcmVlX3NrYl9pcnEoc2tiKSBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMgTkVUX1hNSVRfRFJPUC5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeTpcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMgYXJlIGNyZWF0ZWQgb3IgcmVhZC4gVGhlIHF1ZXVlIGxlbmd0aCBjaGVjayBvcGVyYXRlcyBvbiBucGluZm8tXHUwMDNldHhxLCBhbiBhbHJlYWR5IGluaXRpYWxpemVkIHNrX2J1ZmZfaGVhZC5cbjIuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIHNvIHRoZXJlIGlzIG5vIHJpc2sgb2Yga2VybmVsIGluZm9ybWF0aW9uIGRpc2Nsb3N1cmUuXG4zLiBObyBidWZmZXIgYm91bmRzIG9yIHBhY2tldCBwYXlsb2FkIG9mZnNldHMgYXJlIG1vZGlmaWVkIGluIHdheXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgYnl0ZXMuXG5cbkFueSBwb3RlbnRpYWwgYnVncyByZXN1bHRpbmcgZnJvbSB0aGlzIGNoYW5nZSAoZS5nLiwgcGFja2V0IGxpZmVjeWNsZSBlcnJvcnMgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtZnJlZSBvZiB0aGUgc2tiKSBhcmUgYWRkcmVzc2VkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgbWVtb3J5IGRlYnVnZ2luZywgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgcXVldWUgbGVuZ3RoIGxpbWl0IChORVRQT0xMX1RYUV9NQVgpIGluIF9fbmV0cG9sbF9zZW5kX3NrYigpIGluIG5ldC9jb3JlL25ldHBvbGwuYyB0byBwcmV2ZW50IHVuYm91bmRlZCBza2IgcXVldWUgZ3Jvd3RoIHdoZW4gYSBkZXZpY2UgaXMgc3RhbGxlZCBvciBidXN5LiBDb3JlIG5ldHdvcmtpbmcgY29kZSBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlcyBhbmQgbmV0Y29uc29sZSAoaW5jbHVkaW5nIGR5bmFtaWNhbGx5IHJlY29uZmlndXJlZCB0YXJnZXRzIHZpYSBjb25maWdmcykuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3Qgc2tiIGxpZmVjeWNsZSwgcXVldWUgb3ZlcmZsb3cgaGFuZGxpbmcsIGFuZCBwYWNrZXQgZHJvcCBlZGdlIGNhc2VzIGluIHRoZSBuZXRwb2xsIHRyYW5zbWl0IHBhdGguJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDQ6MjY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5MDgxNGFhMTU5MmU1Y2M2NzViZjE5OTVkMmUxODRlNmJiZjk5MWU1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMDQ6MjY6NDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0cG9sbC5jIGIvbmV0L2NvcmUvbmV0cG9sbC5jXG5pbmRleCBmZTFlMGNkYTVkNmJmLi44ZmQ2NDA5NTVlNDYzIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvbmV0cG9sbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9uZXRwb2xsLmNcbkBAIC0zOCw2ICYjNDM7MzgsMTQgQEBcbiBcbiAjZGVmaW5lIFVTRUNfUEVSX1BPTExcdDUwXG4gXG4mIzQzOy8qXG4mIzQzOyAqIENhcCBvbiBza2JzIHBhcmtlZCBpbiBucGluZm8tXHUwMDNldHhxIHdoaWxlIHRoZSBkZXZpY2UgaXMgYnVzeS4gVGhlIHF1ZXVlXG4mIzQzOyAqIGV4aXN0cyB0byByaWRlIG91dCBhIHRyYW5zaWVudCBzdGFsbDsgYSBwcm9kdWNlciB0aGF0IG91dHJ1bnMgdGhlXG4mIzQzOyAqIGRldmljZSBmb3IgbG9uZ2VyIHRoYW4gdGhhdCBtdXN0IGxvc2UgcGFja2V0cywgbm90IGdyb3cgaXQgd2l0aG91dFxuJiM0MzsgKiBib3VuZC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgTkVUUE9MTF9UWFFfTUFYXHQxMDI0XG4mIzQzO1xuIC8qXG4gICogY2Fycmllcl90aW1lb3V0IGlzIG5ldGNvbnNvbGUtc3BlY2lmaWMgYW5kIG9ubHkga2VwdCBoZXJlIHRvIHByZXNlcnZlIHRoZVxuICAqIG5ldHBvbGwuY2Fycmllcl90aW1lb3V0IG1vZHVsZS1wYXJhbWV0ZXIgQUJJLiBJdHMgdmFsdWUgaXMgZXhwb3NlZCB0b1xuQEAgLTMxNCw2ICYjNDM7MzIyLDEwIEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBfX25ldHBvbGxfc2VuZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0fVxuIFxuIFx0aWYgKCFkZXZfeG1pdF9jb21wbGV0ZShzdGF0dXMpKSB7XG4mIzQzO1x0XHRpZiAoc2tiX3F1ZXVlX2xlbihcdTAwMjZucGluZm8tXHUwMDNldHhxKSBcdTAwM2U9IE5FVFBPTExfVFhRX01BWCkge1xuJiM0MztcdFx0XHRkZXZfa2ZyZWVfc2tiX2lycShza2IpO1xuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdH1cbiBcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2bnBpbmZvLVx1MDAzZXR4cSwgc2tiKTtcbiBcdFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNm5waW5mby1cdTAwM2V0eF93b3JrLDApO1xuIFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA0OjI2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVFBPTEwmIzM0OywKICAgICYjMzQ7TkVUQ09OU09MRSYjMzQ7LAogICAgJiMzNDtORVRDT05TT0xFX0RZTkFNSUMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX25ldHBvbGxfc2VuZF9za2ImIzM0OywKICAgICYjMzQ7bmV0cG9sbF9zZW5kX3NrYiYjMzQ7LAogICAgJiMzNDtxdWV1ZV9wcm9jZXNzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBxdWV1ZSBsZW5ndGggbGltaXQgKE5FVFBPTExfVFhRX01BWCkgaW4gX19uZXRwb2xsX3NlbmRfc2tiKCkgaW4gbmV0L2NvcmUvbmV0cG9sbC5jIHRvIHByZXZlbnQgdW5ib3VuZGVkIHNrYiBxdWV1ZSBncm93dGggd2hlbiBhIGRldmljZSBpcyBzdGFsbGVkIG9yIGJ1c3kuIENvcmUgbmV0d29ya2luZyBjb2RlIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHZpcnR1YWwgbmV0d29yayBkZXZpY2VzIGFuZCBuZXRjb25zb2xlIChpbmNsdWRpbmcgZHluYW1pY2FsbHkgcmVjb25maWd1cmVkIHRhcmdldHMgdmlhIGNvbmZpZ2ZzKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBza2IgbGlmZWN5Y2xlLCBxdWV1ZSBvdmVyZmxvdyBoYW5kbGluZywgYW5kIHBhY2tldCBkcm9wIGVkZ2UgY2FzZXMgaW4gdGhlIG5ldHBvbGwgdHJhbnNtaXQgcGF0aC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDkwODE0YWExNTkyZTVjYzY3NWJmMTk5NWQyZTE4NGU2YmJmOTkxZTUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCAxNCAwNDoyNjo0MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldHBvbGwuYyBiL25ldC9jb3JlL25ldHBvbGwuYwppbmRleCBmZTFlMGNkYTVkNmJmLi44ZmQ2NDA5NTVlNDYzIDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZXRwb2xsLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvbmV0cG9sbC5jCkBAIC0zOCw2ICYjNDM7MzgsMTQgQEAKIAogI2RlZmluZSBVU0VDX1BFUl9QT0xMCTUwCiAKJiM0MzsvKgomIzQzOyAqIENhcCBvbiBza2JzIHBhcmtlZCBpbiBucGluZm8tJmd0O3R4cSB3aGlsZSB0aGUgZGV2aWNlIGlzIGJ1c3kuIFRoZSBxdWV1ZQomIzQzOyAqIGV4aXN0cyB0byByaWRlIG91dCBhIHRyYW5zaWVudCBzdGFsbDsgYSBwcm9kdWNlciB0aGF0IG91dHJ1bnMgdGhlCiYjNDM7ICogZGV2aWNlIGZvciBsb25nZXIgdGhhbiB0aGF0IG11c3QgbG9zZSBwYWNrZXRzLCBub3QgZ3JvdyBpdCB3aXRob3V0CiYjNDM7ICogYm91bmQuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBORVRQT0xMX1RYUV9NQVgJMTAyNAomIzQzOwogLyoKICAqIGNhcnJpZXJfdGltZW91dCBpcyBuZXRjb25zb2xlLXNwZWNpZmljIGFuZCBvbmx5IGtlcHQgaGVyZSB0byBwcmVzZXJ2ZSB0aGUKICAqIG5ldHBvbGwuY2Fycmllcl90aW1lb3V0IG1vZHVsZS1wYXJhbWV0ZXIgQUJJLiBJdHMgdmFsdWUgaXMgZXhwb3NlZCB0bwpAQCAtMzE0LDYgJiM0MzszMjIsMTAgQEAgc3RhdGljIG5ldGRldl90eF90IF9fbmV0cG9sbF9zZW5kX3NrYihzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IpCiAJfQogCiAJaWYgKCFkZXZfeG1pdF9jb21wbGV0ZShzdGF0dXMpKSB7CiYjNDM7CQlpZiAoc2tiX3F1ZXVlX2xlbigmYW1wO25waW5mby0mZ3Q7dHhxKSAmZ3Q7PSBORVRQT0xMX1RYUV9NQVgpIHsKJiM0MzsJCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQogCQlza2JfcXVldWVfdGFpbCgmYW1wO25waW5mby0mZ3Q7dHhxLCBza2IpOwogCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmFtcDtucGluZm8tJmd0O3R4X3dvcmssMCk7CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDYwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0d29yayBQb2xsaW5nIENvZGUqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBuZXRwb2xsLmNgIGRpZmYuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2UsIHNvIEkmIzM5O2xsIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgc3Vycm91bmRpbmcgY29kZS4gSXQgbG9va3MgbGlrZSBhIG5ldyBgI2RlZmluZWAgY2FsbGVkIGBORVRQT0xMX1RYUV9NQVhgIGhhcyBiZWVuIGFkZGVkLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaXRzIHB1cnBvc2UuCgpMb29raW5nIGF0IHRoZSBjb2RlLCBpdCBsb29rcyBsaWtlIGBORVRQT0xMX1RYUV9NQVhgIGlzIHVzZWQgdG8gbGltaXQgdGhlIHNpemUgb2YgYG5waW5mby0mZ3Q7dHhxYC4gVGhlIGNvbW1lbnQgY2xhcmlmaWVzIHRoYXQgYHR4cWAgaXMgdXNlZCB0byBidWZmZXIgU0tCcyAoc29ja2V0IGJ1ZmZlcikgd2hlbiB0aGUgbmV0d29yayBkZXZpY2UgaXMgYnVzeS4gVGhlIGdvYWwgaXMgdG8gaGFuZGxlIHRlbXBvcmFyeSBzdGFsbHMsIGJ1dCBwcmV2ZW50IHRoZSBxdWV1ZSBmcm9tIGdyb3dpbmcgaW5kZWZpbml0ZWx5LCB3aGljaCBjb3VsZCBsZWFkIHRvIHJlc291cmNlIGV4aGF1c3Rpb24uIFRoZSBsb2dpYyBzZWVtcyBzdHJhaWdodGZvcndhcmQ6IElmIHRoZSBgdHhxYCByZWFjaGVzIGBORVRQT0xMX1RYUV9NQVhgLCBhbnkgbmV3IHBhY2tldHMgYXJlIGRyb3BwZWQuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIGEgZ29vZCBhcHByb2FjaCB0byBwcmV2ZW50IHVuYm91bmRlZCBxdWV1ZSBncm93dGggZHVyaW5nIHRyYW5zaWVudCBuZXR3b3JrIGNvbmdlc3Rpb24uIEkgd2lsbCBuZWVkIHRvIGxvb2sgdXAgYGRldl94bWl0X2NvbXBsZXRlYCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGNvbnRyb2wgdG8gYmUgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL25ldHBvbGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzAwOlx0XHRcdCAgICAgdHJpZXMgXHUwMDNlIDA7IC0tdHJpZXMpIHtcbiAzMDE6XHRcdFx0XHRpZiAoSEFSRF9UWF9UUllMT0NLKGRldiwgdHhxKSkge1xuIDMwMjpcdFx0XHRcdFx0aWYgKCFuZXRpZl94bWl0X3N0b3BwZWQodHhxKSlcbiAzMDM6XHRcdFx0XHRcdFx0c3RhdHVzID0gbmV0cG9sbF9zdGFydF94bWl0KHNrYiwgZGV2LCB0eHEpO1xuIDMwNDpcdFxuIDMwNTpcdFx0XHRcdFx0SEFSRF9UWF9VTkxPQ0soZGV2LCB0eHEpO1xuIDMwNjpcdFxuIDMwNzpcdFx0XHRcdFx0aWYgKGRldl94bWl0X2NvbXBsZXRlKHN0YXR1cykpXG4gMzA4Olx0XHRcdFx0XHRcdGJyZWFrO1xuIDMwOTpcdFxuIDMxMDpcdFx0XHRcdH1cbiAzMTE6XHRcbiAzMTI6XHRcdFx0XHQvKiB0aWNrbGUgZGV2aWNlIG1heWJlIHRoZXJlIGlzIHNvbWUgY2xlYW51cCAqL1xuIDMxMzpcdFx0XHRcdG5ldHBvbGxfcG9sbF9kZXYobnAtXHUwMDNlZGV2KTtcbiAzMTQ6XHRcbiAzMTU6XHRcdFx0XHR1ZGVsYXkoVVNFQ19QRVJfUE9MTCk7XG4gMzE2Olx0XHRcdH1cbiAzMTc6XHRcbiAzMTg6XHRcdFx0V0FSTl9PTkNFKCFpcnFzX2Rpc2FibGVkKCksXG4gMzE5Olx0XHRcdFx0XCYjMzQ7bmV0cG9sbF9zZW5kX3NrYl9vbl9kZXYoKTogJXMgZW5hYmxlZCBpbnRlcnJ1cHRzIGluIHBvbGwgKCVwUylcXG5cJiMzNDssXG4gMzIwOlx0XHRcdFx0ZGV2LVx1MDAzZW5hbWUsIGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zdGFydF94bWl0KTtcbiAzMjE6XHRcbiAzMjI6XHRcdH1cbiAzMjM6XHRcbiAzMjQ6XHRcdGlmICghZGV2X3htaXRfY29tcGxldGUoc3RhdHVzKSkge1xuIDMyNTpcdFx0XHRpZiAoc2tiX3F1ZXVlX2xlbihcdTAwMjZucGluZm8tXHUwMDNldHhxKSBcdTAwM2U9IE5FVFBPTExfVFhRX01BWCkge1xuIDMyNjpcdFx0XHRcdGRldl9rZnJlZV9za2JfaXJxKHNrYik7XG4gMzI3Olx0XHRcdFx0Z290byBvdXQ7XG4gMzI4Olx0XHRcdH1cbiAzMjk6XHRcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2bnBpbmZvLVx1MDAzZXR4cSwgc2tiKTtcbiAzMzA6XHRcdFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNm5waW5mby1cdTAwM2V0eF93b3JrLDApO1xuIDMzMTpcdFx0fVxuIDMzMjpcdFx0cmV0ID0gTkVUREVWX1RYX09LO1xuIDMzMzpcdG91dDpcbiAzMzQ6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDMzNTpcdFx0cmV0dXJuIHJldDtcbiAzMzY6XHR9XG4gMzM3Olx0XG4gMzM4Olx0bmV0ZGV2X3R4X3QgbmV0cG9sbF9zZW5kX3NrYihzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IpXG4gMzM5Olx0e1xuIDM0MDpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiAzNDE6XHRcdG5ldGRldl90eF90IHJldDtcbiAzNDI6XHRcbiAzNDM6XHRcdGlmICh1bmxpa2VseSghbnApKSB7XG4gMzQ0Olx0XHRcdGRldl9rZnJlZV9za2JfaXJxKHNrYik7XG4gMzQ1Olx0XHRcdHJldCA9IE5FVF9YTUlUX0RST1A7XG4gMzQ2Olx0XHR9IGVsc2Uge1xuIDM0NzpcdFx0XHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4gMzQ4Olx0XHRcdHJldCA9IF9fbmV0cG9sbF9zZW5kX3NrYihucCwgc2tiKTtcbiAzNDk6XHRcdFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA0OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NDkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOgoKKipUcmFjaW5nIHRoZSBOZXR3b3JrIFBvbGwgU2VuZCBQYXRoKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGNhbGwgY2hhaW4gZm9yIGBfX25ldHBvbGxfc2VuZF9za2JgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBzZWUgd2hlcmUgaXQmIzM5O3MgYmVpbmcgY2FsbGVkIGZyb20uIEkga25vdyB0aGF0IGBuZXRwb2xsX3NlbmRfc2tiYCB1bHRpbWF0ZWx5IGNhbGxzIGl0LCBidXQgSSBuZWVkIHRvIHNlZSB3aGF0JiMzOTtzICpjYWxsaW5nKiBgbmV0cG9sbF9zZW5kX3NrYmAuIFNvLCBJJiMzOTtsbCBxdWlja2x5IHVzZSBgZ3JlcGAgdG8gaHVudCBkb3duIHRoZSByZWZlcmVuY2VzIG9yIGFueSBjYWxsZXJzIGluIHRoZSBgbmV0L2NvcmUvbmV0cG9sbC5jYCBmaWxlIGl0c2VsZi4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgdG9wIGxldmVsIGVudHJ5IHBvaW50IG9yIGZ1bmN0aW9uKHMpIHRoYXQgdHJpZ2dlcnMgdGhpcyBjcml0aWNhbCBwaWVjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRwb2xsX3NlbmRfc2tiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9Mjk3PW5ldGRldl90eF90IGJvbmRfZGV2X3F1ZXVlX3htaXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0zMDYtXHRpZiAodW5saWtlbHkobmV0cG9sbF90eF9ydW5uaW5nKGJvbmQtXHUwMDNlZGV2KSkpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjMwNzpcdFx0cmV0dXJuIGJvbmRfbmV0cG9sbF9zZW5kX3NrYihib25kX2dldF9zbGF2ZV9ieV9kZXYoYm9uZCwgc2xhdmVfZGV2KSwgc2tiKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzA4LVxuLS1cbmRyaXZlcnMvbmV0L21hY3ZsYW4uYz01NDk9c3RhdGljIGludCBtYWN2bGFuX3F1ZXVlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9tYWN2bGFuLmMtNTc4LVxuZHJpdmVycy9uZXQvbWFjdmxhbi5jOjU3OTpzdGF0aWMgaW5saW5lIG5ldGRldl90eF90IG1hY3ZsYW5fbmV0cG9sbF9zZW5kX3NrYihzdHJ1Y3QgbWFjdmxhbl9kZXYgKnZsYW4sIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25ldC9tYWN2bGFuLmMtNTgwLXtcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy01ODEtI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXG5kcml2ZXJzL25ldC9tYWN2bGFuLmM6NTgyOlx0cmV0dXJuIG5ldHBvbGxfc2VuZF9za2Iodmxhbi1cdTAwM2VuZXRwb2xsLCBza2IpO1xuZHJpdmVycy9uZXQvbWFjdmxhbi5jLTU4My0jZWxzZVxuLS1cbmRyaXZlcnMvbmV0L21hY3ZsYW4uYz01ODk9c3RhdGljIG5ldGRldl90eF90IG1hY3ZsYW5fc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy01OTYtXHRpZiAodW5saWtlbHkobmV0cG9sbF90eF9ydW5uaW5nKGRldikpKVxuZHJpdmVycy9uZXQvbWFjdmxhbi5jOjU5NzpcdFx0cmV0dXJuIG1hY3ZsYW5fbmV0cG9sbF9zZW5kX3NrYih2bGFuLCBza2IpO1xuZHJpdmVycy9uZXQvbWFjdmxhbi5jLTU5OC1cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjE3ND1zdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjA3LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMDg6XHRyZXR1cm4gKGludCluZXRwb2xsX3NlbmRfc2tiKG5wLCBza2IpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMDktfVxuLS1cbmluY2x1ZGUvbGludXgvaWZfdGVhbS5oPTk5PXN0YXRpYyBpbmxpbmUgYm9vbCB0ZWFtX3BvcnRfZGV2X3R4YWJsZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqcG9ydF9kZXYpXG4tLVxuaW5jbHVkZS9saW51eC9pZl90ZWFtLmgtMTEyLSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxuaW5jbHVkZS9saW51eC9pZl90ZWFtLmg6MTEzOnN0YXRpYyBpbmxpbmUgdm9pZCB0ZWFtX25ldHBvbGxfc2VuZF9za2Ioc3RydWN0IHRlYW1fcG9ydCAqcG9ydCxcbmluY2x1ZGUvbGludXgvaWZfdGVhbS5oLTExNC1cdFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpXG5pbmNsdWRlL2xpbnV4L2lmX3RlYW0uaC0xMTUte1xuaW5jbHVkZS9saW51eC9pZl90ZWFtLmg6MTE2Olx0bmV0cG9sbF9zZW5kX3NrYihwb3J0LVx1MDAzZW5wLCBza2IpO1xuaW5jbHVkZS9saW51eC9pZl90ZWFtLmgtMTE3LX1cbmluY2x1ZGUvbGludXgvaWZfdGVhbS5oLTExOC0jZWxzZVxuaW5jbHVkZS9saW51eC9pZl90ZWFtLmg6MTE5OnN0YXRpYyBpbmxpbmUgdm9pZCB0ZWFtX25ldHBvbGxfc2VuZF9za2Ioc3RydWN0IHRlYW1fcG9ydCAqcG9ydCxcbmluY2x1ZGUvbGludXgvaWZfdGVhbS5oLTEyMC1cdFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuaW5jbHVkZS9saW51eC9pZl90ZWFtLmg9MjM3PXN0YXRpYyBpbmxpbmUgaW50IHRlYW1fZGV2X3F1ZXVlX3htaXQoc3RydWN0IHRlYW0gKnRlYW0sIHN0cnVjdCB0ZWFtX3BvcnQgKnBvcnQsXG4tLVxuaW5jbHVkZS9saW51eC9pZl90ZWFtLmgtMjQ1LVx0aWYgKHVubGlrZWx5KG5ldHBvbGxfdHhfcnVubmluZyhuZXRkZXZfZnJvbV9wcml2KHRlYW0pKSkpIHtcbmluY2x1ZGUvbGludXgvaWZfdGVhbS5oOjI0NjpcdFx0dGVhbV9uZXRwb2xsX3NlbmRfc2tiKHBvcnQsIHNrYik7XG5pbmNsdWRlL2xpbnV4L2lmX3RlYW0uaC0yNDctXHRcdHJldHVybiAwO1xuLS1cbmluY2x1ZGUvbGludXgvbmV0cG9sbC5oPTY4PXZvaWQgZG9fbmV0cG9sbF9jbGVhbnVwKHN0cnVjdCBuZXRwb2xsICpucCk7XG5pbmNsdWRlL2xpbnV4L25ldHBvbGwuaDo2OTpuZXRkZXZfdHhfdCBuZXRwb2xsX3NlbmRfc2tiKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5pbmNsdWRlL2xpbnV4L25ldHBvbGwuaC03MC12b2lkIG5ldHBvbGxfemFwX2NvbXBsZXRpb25fcXVldWUodm9pZCk7XG4tLVxuaW5jbHVkZS9uZXQvYm9uZGluZy5oPTU0OD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc2xhdmVfbGFzdF90eChzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxuLS1cbmluY2x1ZGUvbmV0L2JvbmRpbmcuaC01NTMtI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXG5pbmNsdWRlL25ldC9ib25kaW5nLmg6NTU0OnN0YXRpYyBpbmxpbmUgbmV0ZGV2X3R4X3QgYm9uZF9uZXRwb2xsX3NlbmRfc2tiKGNvbnN0IHN0cnVjdCBzbGF2ZSAqc2xhdmUsXG5pbmNsdWRlL25ldC9ib25kaW5nLmgtNTU1LVx0XHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmluY2x1ZGUvbmV0L2JvbmRpbmcuaC01NTYte1xuaW5jbHVkZS9uZXQvYm9uZGluZy5oOjU1NzpcdHJldHVybiBuZXRwb2xsX3NlbmRfc2tiKHNsYXZlLVx1MDAzZW5wLCBza2IpO1xuaW5jbHVkZS9uZXQvYm9uZGluZy5oLTU1OC19XG5pbmNsdWRlL25ldC9ib25kaW5nLmgtNTU5LSNlbHNlXG5pbmNsdWRlL25ldC9ib25kaW5nLmg6NTYwOnN0YXRpYyBpbmxpbmUgbmV0ZGV2X3R4X3QgYm9uZF9uZXRwb2xsX3NlbmRfc2tiKGNvbnN0IHN0cnVjdCBzbGF2ZSAqc2xhdmUsXG5pbmNsdWRlL25ldC9ib25kaW5nLmgtNTYxLVx0XHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvODAyMXEvdmxhbl9kZXYuYz00Nj1zdGF0aWMgaW50IHZsYW5fZGV2X2hhcmRfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtODktXG5uZXQvODAyMXEvdmxhbl9kZXYuYzo5MDpzdGF0aWMgaW5saW5lIG5ldGRldl90eF90IHZsYW5fbmV0cG9sbF9zZW5kX3NrYihzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmxhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC84MDIxcS92bGFuX2Rldi5jLTkxLXtcbm5ldC84MDIxcS92bGFuX2Rldi5jLTkyLSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxubmV0LzgwMjFxL3ZsYW5fZGV2LmM6OTM6XHRyZXR1cm4gbmV0cG9sbF9zZW5kX3NrYih2bGFuLVx1MDAzZW5ldHBvbGwsIHNrYik7XG5uZXQvODAyMXEvdmxhbl9kZXYuYy05NC0jZWxzZVxuLS1cbm5ldC84MDIxcS92bGFuX2Rldi5jPTEwMD1zdGF0aWMgbmV0ZGV2X3R4X3Qgdmxhbl9kZXZfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtMTIzLVx0aWYgKHVubGlrZWx5KG5ldHBvbGxfdHhfcnVubmluZyhkZXYpKSlcbm5ldC84MDIxcS92bGFuX2Rldi5jOjEyNDpcdFx0cmV0dXJuIHZsYW5fbmV0cG9sbF9zZW5kX3NrYih2bGFuLCBza2IpO1xubmV0LzgwMjFxL3ZsYW5fZGV2LmMtMTI1LVxuLS1cbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jPTczPXN0YXRpYyB2b2lkIF9fYnJfZm9yd2FyZChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICp0byxcbi0tXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0xMDYtXHRcdFx0ZWxzZVxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmM6MTA3Olx0XHRcdFx0YnJfbmV0cG9sbF9zZW5kX3NrYih0bywgc2tiKTtcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jLTEwOC1cdFx0XHRyZXR1cm47XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9ODE0PW5ldGRldl90eF90IGJyX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtODE1LSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6ODE2OnN0YXRpYyBpbmxpbmUgdm9pZCBicl9uZXRwb2xsX3NlbmRfc2tiKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC04MTctXHRcdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTgxOC17XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo4MTk6XHRuZXRwb2xsX3NlbmRfc2tiKHAtXHUwMDNlbnAsIHNrYik7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC04MjAtfVxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTgyMz12b2lkIGJyX25ldHBvbGxfZGlzYWJsZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTgyNC0jZWxzZVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6ODI1OnN0YXRpYyBpbmxpbmUgdm9pZCBicl9uZXRwb2xsX3NlbmRfc2tiKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC04MjYtXHRcdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9uZXRwb2xsLmM9MjU4PXN0YXRpYyBpbnQgbmV0cG9sbF9vd25lcl9hY3RpdmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9uZXRwb2xsLmMtMjY5LS8qIGNhbGwgd2l0aCBJUlEgZGlzYWJsZWQgKi9cbm5ldC9jb3JlL25ldHBvbGwuYzoyNzA6c3RhdGljIG5ldGRldl90eF90IF9fbmV0cG9sbF9zZW5kX3NrYihzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvY29yZS9uZXRwb2xsLmMtMjcxLXtcbi0tXG5uZXQvY29yZS9uZXRwb2xsLmMtMzE4LVx0XHRXQVJOX09OQ0UoIWlycXNfZGlzYWJsZWQoKSxcbm5ldC9jb3JlL25ldHBvbGwuYzozMTk6XHRcdFx0XCYjMzQ7bmV0cG9sbF9zZW5kX3NrYl9vbl9kZXYoKTogJXMgZW5hYmxlZCBpbnRlcnJ1cHRzIGluIHBvbGwgKCVwUylcXG5cJiMzNDssXG5uZXQvY29yZS9uZXRwb2xsLmMtMzIwLVx0XHRcdGRldi1cdTAwM2VuYW1lLCBkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fc3RhcnRfeG1pdCk7XG4tLVxubmV0L2NvcmUvbmV0cG9sbC5jLTMzNy1cbm5ldC9jb3JlL25ldHBvbGwuYzozMzg6bmV0ZGV2X3R4X3QgbmV0cG9sbF9zZW5kX3NrYihzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvY29yZS9uZXRwb2xsLmMtMzM5LXtcbi0tXG5uZXQvY29yZS9uZXRwb2xsLmMtMzQ3LVx0XHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG5uZXQvY29yZS9uZXRwb2xsLmM6MzQ4Olx0XHRyZXQgPSBfX25ldHBvbGxfc2VuZF9za2IobnAsIHNrYik7XG5uZXQvY29yZS9uZXRwb2xsLmMtMzQ5LVx0XHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4tLVxubmV0L2NvcmUvbmV0cG9sbC5jLTM1Mi19XG5uZXQvY29yZS9uZXRwb2xsLmM6MzUzOkVYUE9SVF9TWU1CT0wobmV0cG9sbF9zZW5kX3NrYik7XG5uZXQvY29yZS9uZXRwb2xsLmMtMzU0LVxuLS1cbm5ldC9kc2EvdXNlci5jPTgyMD1zdGF0aWMgaW50IGRzYV91c2VyX3BvcnRfb2JqX2RlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB2b2lkICpjdHgsXG4tLVxubmV0L2RzYS91c2VyLmMtODY4LVxubmV0L2RzYS91c2VyLmM6ODY5OnN0YXRpYyBuZXRkZXZfdHhfdCBkc2FfdXNlcl9uZXRwb2xsX3NlbmRfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvZHNhL3VzZXIuYy04NzAtXHRcdFx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvZHNhL3VzZXIuYy04NzQtXG5uZXQvZHNhL3VzZXIuYzo4NzU6XHRyZXR1cm4gbmV0cG9sbF9zZW5kX3NrYihwLVx1MDAzZW5ldHBvbGwsIHNrYik7XG5uZXQvZHNhL3VzZXIuYy04NzYtI2Vsc2Vcbi0tXG5uZXQvZHNhL3VzZXIuYz04OTY9bmV0ZGV2X3R4X3QgZHNhX2VucXVldWVfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2RzYS91c2VyLmMtOTAxLVx0aWYgKHVubGlrZWx5KG5ldHBvbGxfdHhfcnVubmluZyhkZXYpKSlcbm5ldC9kc2EvdXNlci5jOjkwMjpcdFx0cmV0dXJuIGRzYV91c2VyX25ldHBvbGxfc2VuZF9za2IoZGV2LCBza2IpO1xubmV0L2RzYS91c2VyLmMtOTAzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA0OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2MjUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyB0aGUgTmV0cG9sbCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIGBuZXRwb2xsLmNgIHJlc2lkZXMgd2l0aGluIGBuZXQvY29yZS9uZXRwb2xsLmNgLiBSaWdodC4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBjb25maWd1cmF0aW9ucyBhY3R1YWxseSAqZW5hYmxlKiB0aGF0IHBhcnRpY3VsYXIgY29tcG9uZW50LiBXaGVyZSYjMzk7cyB0aGUgcmlnaHQgcGxhY2UgdG8gbG9vayBmb3IgdGhhdD8gT2YgY291cnNlLCB0aGUgYE1ha2VmaWxlYCBpbiB0aGUgc2FtZSBkaXJlY3RvcnksIGBuZXQvY29yZS9NYWtlZmlsZWAsIGlzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBUaGF0IHNob3VsZCBoYXZlIHRoZSBuZWNlc3NhcnkgYnVpbGQgbG9naWMgYW5kIGNvbmRpdGlvbmFsIGluY2x1c2lvbiBydWxlcy4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgYW5kIHNlZSB3aGF0IGZsYWdzIG9yIGRlcGVuZGVuY2llcyBhcmUgaW4gcGxheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRwb2xsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGU9Mjc9b2JqLSQoQ09ORklHX05FVF9QS1RHRU4pICYjNDM7PSBwa3RnZW4ub1xubmV0L2NvcmUvTWFrZWZpbGU6Mjg6b2JqLSQoQ09ORklHX05FVFBPTEwpICYjNDM7PSBuZXRwb2xsLm9cbm5ldC9jb3JlL01ha2VmaWxlLTI5LW9iai0kKENPTkZJR19GSUJfUlVMRVMpICYjNDM7PSBmaWJfcnVsZXMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA0OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5MTMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgTkVUUE9MTCBhbmQgTkVUX1BPTExfQ09OVFJPTExFUiBLY29uZmlnIERlZmluaXRpb25zKioKCk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBgTkVUUE9MTGAgYW5kIGBORVRfUE9MTF9DT05UUk9MTEVSYCB3aXRoaW4gdGhlIEtjb25maWcgc3lzdGVtLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgcmVsZXZhbnQgZGVmaW5pdGlvbnMg4oCTIHByb2JhYmx5IGBuZXQvY29yZS9LY29uZmlnYCBvciBzaW1pbGFyLCBkZXBlbmRpbmcgb24gdGhlIGtlcm5lbCB2ZXJzaW9uIEkmIzM5O20gd29ya2luZyB3aXRoIOKAkyB0byBnZXQgdGhlIGV4YWN0IGRldGFpbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGVzZSBvcHRpb25zIHJlbGF0ZSB0byBlbmFibGluZyBvciBkaXNhYmxpbmcgbmV0d29yayBwb2xsaW5nIGZlYXR1cmVzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gaW50ZXJlc3RlZCBpbjoKCiogICAqKlRoZSBDb25maWcgRGVwZW5kZW5jaWVzOioqIFdoYXQgb3RoZXIgS2NvbmZpZyBzeW1ib2xzIGRvZXMgYE5FVFBPTExgIGRlcGVuZCBvbj8gSXMgaXQgdGllZCB0byBzcGVjaWZpYyBkcml2ZXJzIG9yIGZlYXR1cmVzPyBEb2VzIGl0IHJlcXVpcmUgdGhpbmdzIGxpa2UgaW50ZXJydXB0IG1hbmFnZW1lbnQgb3IgRE1BIGNhcGFiaWxpdGllcz8gV2hhdCBhYm91dCBgTkVUX1BPTExfQ09OVFJPTExFUmA/IERvZXMgdGhlIGV4aXN0ZW5jZSBvZiBhIHBvbGwgY29udHJvbGxlciBpbXBseSBhbnkgc3BlY2lmaWMgY2FwYWJpbGl0aWVzIGluIHRoZSBzZWxlY3RlZCBkcml2ZXI/CiogICAqKkltcGxpZWQgRnVuY3Rpb25hbGl0eToqKiBXaGF0IGlzIHRoZSBpbnRlbnQgb2YgZWFjaCBkZWZpbmU/IEhvdyBpcyBgTkVUUE9MTGAgKnVzZWQqIGluIHRoZSBrZXJuZWw/IERvZXMgaXQgYWxsb3cgc3BlY2lmaWMgZmVhdHVyZXMgdG8gYmUgb3B0aW9uYWxseSBpbXBsZW1lbnRlZD8gSG93IGRvZXMgYSBgTkVUX1BPTExfQ09OVFJPTExFUmAgZml0IGludG8gdGhlIGdyYW5kZXIgc2NoZW1lIG9mIGFuIEV0aGVybmV0IGRyaXZlcj8gSXMgaXQgdXNlZCB0byBkaXNhYmxlIGludGVycnVwdHM/CiogICAqKkludGVyYWN0aW9uIHdpdGggRHJpdmVyczoqKiBIb3cgYXJlIG5ldHdvcmsgZHJpdmVycyBpbXBhY3RlZCBieSB0aGVzZSBjb25maWd1cmF0aW9ucz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBmb3IgZHJpdmVycyB0aGF0IGltcGxlbWVudCBuZXR3b3JrIHBvbGxpbmcuIEFyZSBjZXJ0YWluIGRyaXZlcnMgKnJlcXVpcmVkKiB0byBpbXBsZW1lbnQgc3BlY2lmaWMgYG5ldHBvbGxgIEFQSXMgd2hlbiBgTkVUUE9MTGAgaXMgc2V0PyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBwb3dlciBtYW5hZ2VtZW50IGFuZCBsaW5rIHN0YXR1cyBjaGFuZ2VzPwoqICAgKipCb290IFRpbWUgQ29uZmlndXJhdGlvbjoqKiBJIG5lZWQgdG8gY2xhcmlmeSB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgYXJlIGZvciBkcml2ZXJzIGFuZCBuZXR3b3JraW5nIGF0IGJvb3QgdGltZS4KKiAgICoqUG90ZW50aWFsIGNvbmZsaWN0czoqKiBIb3cgZG9lcyB0aGUgc2V0dGluZyBvZiB0aGVzZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIGFmZmVjdCBwb3NzaWJsZSBjb25mbGljdHMgYW5kIHJ1bnRpbWUgYmVoYXZpb3I/CgpVbHRpbWF0ZWx5LCB0aGUgZ29hbCBpcyB0byBmdWxseSBncmFzcCB0aGUgY29udHJvbCBmbG93IHRoZXNlIG9wdGlvbnMgcmVwcmVzZW50IHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdGFjay4gVGhpcyB3aWxsIGhlbHAgbWUgZGlhZ25vc2UgaXNzdWVzLCBvcHRpbWl6ZSBwb2xsaW5nIGJlaGF2aW9yLCBvciB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmFiaWxpdHkgb2YgY2VydGFpbiBmZWF0dXJlcyBiYXNlZCBvbiBteSBjdXJyZW50IGludmVzdGlnYXRpb24uIFNvLCBkaWdnaW5nIGludG8gdGhlIEtjb25maWcgZGVmaW5pdGlvbnMgaXMgdGhlIGNyaXRpY2FsIGZpcnN0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA0OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRQT0xMXFxiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9MzU1PWNvbmZpZyBORVRDT05TT0xFX1BSRVBFTkRfUkVMRUFTRVxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMzY2LVxuZHJpdmVycy9uZXQvS2NvbmZpZzozNjc6Y29uZmlnIE5FVFBPTExcbmRyaXZlcnMvbmV0L0tjb25maWctMzY4LVx0ZGVmX2Jvb2wgTkVUQ09OU09MRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDg0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgdGhlIE5ldHdvcmsgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBCYXNlZCBvbiB3aGF0IEkmIzM5O20gbG9va2luZyBhdCwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhcm91bmQgbGluZSAzNjcuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgbWVhdCBvZiBhIHBhcnRpY3VsYXIgZHJpdmVyIGNvbmZpZ3VyYXRpb24sIG9yIGF0IGxlYXN0IGEgcmVsYXRlZCBzZWN0aW9uLCBiZWdpbnMuIEhvcGVmdWxseSwgaXQmIzM5O2xsIGdpdmUgbWUgc29tZSBrZXkgaW5zaWdodHMgaW50byBob3cgdGhpcyBwYXJ0aWN1bGFyIG5ldHdvcmsgZHJpdmVyIGlzIGNvbmZpZ3VyZWQsIGFueSBkZXBlbmRlbmNpZXMsIGFuZCB0aGUgYXZhaWxhYmxlIG9wdGlvbnMuIFRpbWUgdG8gZ2V0IHRvIHRoZSBkZXRhaWxzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM0MDpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBhYmlsaXR5IHRvIGR5bmFtaWNhbGx5IHJlY29uZmlndXJlIHRhcmdldFxuIDM0MTpcdFx0ICBwYXJhbWV0ZXJzIChpbnRlcmZhY2UsIElQIGFkZHJlc3NlcywgcG9ydCBudW1iZXJzLCBNQUMgYWRkcmVzc2VzKVxuIDM0MjpcdFx0ICBhdCBydW50aW1lIHRocm91Z2ggYSB1c2Vyc3BhY2UgaW50ZXJmYWNlIGV4cG9ydGVkIHVzaW5nIGNvbmZpZ2ZzLlxuIDM0MzpcdFx0ICBTZWUgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcdTAwM2UgZm9yIGRldGFpbHMuXG4gMzQ0Olx0XG4gMzQ1Olx0Y29uZmlnIE5FVENPTlNPTEVfRVhURU5ERURfTE9HXG4gMzQ2Olx0XHRib29sIFwmIzM0O1NldCBrZXJuZWwgZXh0ZW5kZWQgbWVzc2FnZSBieSBkZWZhdWx0XCYjMzQ7XG4gMzQ3Olx0XHRkZXBlbmRzIG9uIE5FVENPTlNPTEVcbiAzNDg6XHRcdGRlZmF1bHQgblxuIDM0OTpcdFx0aGVscFxuIDM1MDpcdFx0ICBTZXQgZXh0ZW5kZWQgbG9nIHN1cHBvcnQgZm9yIG5ldGNvbnNvbGUgbWVzc2FnZS4gSWYgdGhpcyBvcHRpb24gaXNcbiAzNTE6XHRcdCAgc2V0LCBsb2cgbWVzc2FnZXMgYXJlIHRyYW5zbWl0dGVkIHdpdGggZXh0ZW5kZWQgbWV0YWRhdGEgaGVhZGVyIGluIGFcbiAzNTI6XHRcdCAgZm9ybWF0IHNpbWlsYXIgdG8gL2Rldi9rbXNnLiAgU2VlXG4gMzUzOlx0XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XHUwMDNlIGZvciBkZXRhaWxzLlxuIDM1NDpcdFxuIDM1NTpcdGNvbmZpZyBORVRDT05TT0xFX1BSRVBFTkRfUkVMRUFTRVxuIDM1NjpcdFx0Ym9vbCBcJiMzNDtQcmVwZW5kIGtlcm5lbCByZWxlYXNlIHZlcnNpb24gaW4gdGhlIG1lc3NhZ2UgYnkgZGVmYXVsdFwmIzM0O1xuIDM1NzpcdFx0ZGVwZW5kcyBvbiBORVRDT05TT0xFX0VYVEVOREVEX0xPR1xuIDM1ODpcdFx0ZGVmYXVsdCBuXG4gMzU5Olx0XHRoZWxwXG4gMzYwOlx0XHQgIFNldCBrZXJuZWwgcmVsZWFzZSB0byBiZSBwcmVwZW5kZWQgdG8gZWFjaCBuZXRjb25zb2xlIG1lc3NhZ2UgYnlcbiAzNjE6XHRcdCAgZGVmYXVsdC4gSWYgdGhpcyBvcHRpb24gaXMgc2V0LCB0aGUga2VybmVsIHJlbGVhc2UgaXMgcHJlcGVuZGVkIGludG9cbiAzNjI6XHRcdCAgdGhlIGZpcnN0IGZpZWxkIG9mIGV2ZXJ5IG5ldGNvbnNvbGUgbWVzc2FnZSwgc28sIHRoZSBuZXRjb25zb2xlXG4gMzYzOlx0XHQgIHNlcnZlci9wZWVyIGNhbiBlYXNpbHkgaWRlbnRpZnkgd2hhdCBrZXJuZWwgcmVsZWFzZSBpcyBsb2dnaW5nIGVhY2hcbiAzNjQ6XHRcdCAgbWVzc2FnZS4gIFNlZSBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdFx1MDAzZSBmb3JcbiAzNjU6XHRcdCAgZGV0YWlscy5cbiAzNjY6XHRcbiAzNjc6XHRjb25maWcgTkVUUE9MTFxuIDM2ODpcdFx0ZGVmX2Jvb2wgTkVUQ09OU09MRVxuIDM2OTpcdFxuIDM3MDpcdGNvbmZpZyBORVRfUE9MTF9DT05UUk9MTEVSXG4gMzcxOlx0XHRkZWZfYm9vbCBORVRQT0xMXG4gMzcyOlx0XG4gMzczOlx0Y29uZmlnIE5UQl9ORVRERVZcbiAzNzQ6XHRcdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgRXRoZXJuZXQgb3ZlciBOVEIgVHJhbnNwb3J0XCYjMzQ7XG4gMzc1Olx0XHRkZXBlbmRzIG9uIE5UQl9UUkFOU1BPUlRcbiAzNzY6XHRcbiAzNzc6XHRjb25maWcgUklPTkVUXG4gMzc4Olx0XHR0cmlzdGF0ZSBcJiMzNDtSYXBpZElPIEV0aGVybmV0IG92ZXIgbWVzc2FnaW5nIGRyaXZlciBzdXBwb3J0XCYjMzQ7XG4gMzc5Olx0XHRkZXBlbmRzIG9uIFJBUElESU9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDQ6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI3NQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uIERlcGVuZGVuY3kqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBjb25maWcgTkVUUE9MTGAgc2V0dGluZywgYW5kIGl0JiMzOTtzIGRlZmluZWQgYXMgYSBib29sZWFuLCBjb250cm9sbGVkIGJ5IGBORVRDT05TT0xFYC4gQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlLiBXaGF0IGRvZXMgYE5FVENPTlNPTEVgIGRlcGVuZCBvbj8gSXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aGUgYGRyaXZlcnMvbmV0L0tjb25maWdgIGZpbGUgYW5kIGNoZWNrIHRoZSBkZWZpbml0aW9uIGZvciBgTkVUQ09OU09MRWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMsIGltcGxpY2F0aW9ucywgYW5kIGFsbCB0aGF0IGdvb2Qgc3R1ZmYgb2YgYE5FVENPTlNPTEVgLiBHb3QgdG8ga25vdyB3aGF0JiMzOTtzIGxpbmtlZCBoZXJlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUQ09OU09MRVxcYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTMxOD1jb25maWcgTUFDU0VDXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMjYtXG5kcml2ZXJzL25ldC9LY29uZmlnOjMyNzpjb25maWcgTkVUQ09OU09MRVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMjgtXHR0cmlzdGF0ZSBcJiMzNDtOZXR3b3JrIGNvbnNvbGUgbG9nZ2luZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA0OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1NDMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBwcm92aWRlZCB0ZXh0OgoKKipBbmFseXppbmcgYGRyaXZlcnMvbmV0L0tjb25maWdgIFNlY3Rpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byBsaW5lcyAzMjUtMzQ1IG9mIGBkcml2ZXJzL25ldC9LY29uZmlnYC4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBkZWZpbmUgc29tZSBuZXR3b3JrIGRyaXZlciBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHByb2JhYmx5IHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBoYXJkd2FyZSBvciBzb2Z0d2FyZSBmZWF0dXJlLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUga2V5IGRlcGVuZGVuY2llcyBhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGVhY2ggb3B0aW9uLiBBcmUgdGhlc2UgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycz8gQXJlIHRoZXkgcmVsYXRlZCB0byBwcm90b2NvbCBzdXBwb3J0LCBvciBwZXJoYXBzIG9mZmxvYWQgY2FwYWJpbGl0aWVzPyBUaGUgc3RydWN0dXJlIG9mIEtjb25maWcgZmlsZXMgaXMgdXN1YWxseSBwcmV0dHkgcHJlZGljdGFibGUsIGJ1dCBjb250ZXh0IGlzIGFsd2F5cyBrZXkuIExldCBtZSBsb29rIGZvciBgY29uZmlnYCBrZXl3b3JkcywgZGVwZW5kZW5jaWVzIGV4cHJlc3NlZCB3aXRoIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzLCBhbmQgaGVscCB0ZXh0IHRoYXQgY2xhcmlmaWVzIHRoZSBwdXJwb3NlIG9mIGVhY2ggb3B0aW9uLiBJJiMzOTtsbCBtZW50YWxseSBub3RlIGFueSB1bnVzdWFsIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgd2FycmFudCBmdXJ0aGVyIGludmVzdGlnYXRpb24sIG1heWJlIGxvb2tpbmcgYXQgaG93IHRoZXNlIG9wdGlvbnMgaW50ZXJhY3Qgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgbmV0d29yayBzdGFjay4gSSYjMzk7bSBhbHNvIGxvb2tpbmcgZm9yIGFueSBkZWZhdWx0IHZhbHVlcywgdGhhdCBjYW4gcHJvdmlkZSBhIGhpbnQgYWJvdXQgdGhlIGRldmVsb3BlciYjMzk7cyB0eXBpY2FsIHVzZSBjYXNlLiBVbHRpbWF0ZWx5LCBJJiMzOTttIHRyeWluZyB0byBidWlsZCBhIHF1aWNrIG1lbnRhbCBtb2RlbCBvZiB3aGF0IHRoZXNlIGxpbmVzIGFyZSBjb25maWd1cmluZyBhbmQgaG93IGl0IGludGVncmF0ZXMgaW50byB0aGUgYnJvYWRlciBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA0OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzI1Olx0XHQgICBNQUNzZWMgaXMgYW4gZW5jcnlwdGlvbiBzdGFuZGFyZCBmb3IgRXRoZXJuZXQuXG4gMzI2Olx0XG4gMzI3Olx0Y29uZmlnIE5FVENPTlNPTEVcbiAzMjg6XHRcdHRyaXN0YXRlIFwmIzM0O05ldHdvcmsgY29uc29sZSBsb2dnaW5nIHN1cHBvcnRcJiMzNDtcbiAzMjk6XHRcdGRlcGVuZHMgb24gUFJJTlRLXG4gMzMwOlx0XHRoZWxwXG4gMzMxOlx0XHQgIElmIHlvdSB3YW50IHRvIGxvZyBrZXJuZWwgbWVzc2FnZXMgb3ZlciB0aGUgbmV0d29yaywgZW5hYmxlIHRoaXMuXG4gMzMyOlx0XHQgIFNlZSBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdFx1MDAzZSBmb3IgZGV0YWlscy5cbiAzMzM6XHRcbiAzMzQ6XHRjb25maWcgTkVUQ09OU09MRV9EWU5BTUlDXG4gMzM1Olx0XHRib29sIFwmIzM0O0R5bmFtaWMgcmVjb25maWd1cmF0aW9uIG9mIGxvZ2dpbmcgdGFyZ2V0c1wmIzM0O1xuIDMzNjpcdFx0ZGVwZW5kcyBvbiBORVRDT05TT0xFIFx1MDAyNlx1MDAyNiBTWVNGUyBcdTAwMjZcdTAwMjYgQ09ORklHRlNfRlMgXHUwMDI2XHUwMDI2IFxcXG4gMzM3Olx0XHRcdFx0IShORVRDT05TT0xFPXkgXHUwMDI2XHUwMDI2IENPTkZJR0ZTX0ZTPW0pXG4gMzM4Olx0XHRzZWxlY3QgUFJJTlRLX0VYRUNVVElPTl9DVFhcbiAzMzk6XHRcdGhlbHBcbiAzNDA6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgYWJpbGl0eSB0byBkeW5hbWljYWxseSByZWNvbmZpZ3VyZSB0YXJnZXRcbiAzNDE6XHRcdCAgcGFyYW1ldGVycyAoaW50ZXJmYWNlLCBJUCBhZGRyZXNzZXMsIHBvcnQgbnVtYmVycywgTUFDIGFkZHJlc3NlcylcbiAzNDI6XHRcdCAgYXQgcnVudGltZSB0aHJvdWdoIGEgdXNlcnNwYWNlIGludGVyZmFjZSBleHBvcnRlZCB1c2luZyBjb25maWdmcy5cbiAzNDM6XHRcdCAgU2VlIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XHUwMDNlIGZvciBkZXRhaWxzLlxuIDM0NDpcdFxuIDM0NTpcdGNvbmZpZyBORVRDT05TT0xFX0VYVEVOREVEX0xPR1xuIDM0NjpcdFx0Ym9vbCBcJiMzNDtTZXQga2VybmVsIGV4dGVuZGVkIG1lc3NhZ2UgYnkgZGVmYXVsdFwmIzM0O1xuIDM0NzpcdFx0ZGVwZW5kcyBvbiBORVRDT05TT0xFXG4gMzQ4Olx0XHRkZWZhdWx0IG5cbiAzNDk6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDQ6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyMjAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW52ZXN0aWdhdGlvbiBvZiBOZXRwb2xsIGFuZCBTeXprYWxsZXIgUmVhY2hhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgbmV0cG9sbGAgc2l0dWF0aW9uLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgaXQmIzM5O3MgdXNlZCwgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nLCBhbmQgaWYgaXQmIzM5O3MgZXZlbiByZW1vdGVseSBhY2Nlc3NpYmxlIHdpdGhpbiB0aGUgU3l6a2FsbGVyIHRlc3RpbmcgZW52aXJvbm1lbnQuIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciB1c2Vyc3BhY2UsIHRocm91Z2ggU3l6a2FsbGVyLCBjYW4gY29uZmlndXJlIG9yIHRyaWdnZXIgZWl0aGVyIGBuZXRjb25zb2xlYCBvciBgbmV0cG9sbGAuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgU3l6a2FsbGVyJiMzOTtzIGRvY3VtZW50YXRpb24gYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IGV4aXN0aW5nIGRlc2NyaXB0aW9ucyBvciBtZWNoYW5pc21zIGZvciB1c2VyLXNwYWNlIGNvbnRyb2wgb3ZlciBgbmV0Y29uc29sZWAuIEkgYWxzbyB3YW50IHRvIGV4cGxvcmUgd2hldGhlciBgbmV0Y29uc29sZWAgKG9yIGV2ZW4gYG5ldHBvbGxgKSBtaWdodCBiZSBjb25maWd1cmFibGUgdmlhIHN0YW5kYXJkIGludGVyZmFjZXMgbGlrZSBjb25maWdmcywgc3lzZnMsIG1vZHVsZSBwYXJhbWV0ZXJzLCBvciBkeW5hbWljIHJlY29uZmlndXJhdGlvbi4gUGVyaGFwcyBgbmV0cG9sbGAgY291bGQgYmUgaW5kaXJlY3RseSB1dGlsaXplZCB0aHJvdWdoIG5ldHdvcmtpbmcgZmVhdHVyZXMgc3VjaCBhcyBib25kaW5nLCBicmlkZ2luZywgb3IgbWFjdmxhbi4KCldhaXQgYSBtb21lbnQuIEJlZm9yZSBJIGdvIHRvbyBmYXIgZG93biB0aGF0IHBhdGgsIEkgc2hvdWxkIG1ha2Ugc3VyZSBJIGNvbXBsZXRlbHkgdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24gb2YgYG5ldHBvbGxgIGl0c2VsZi4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgbmV0L2NvcmUvbmV0cG9sbC5jYCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBucGluZm8tJmd0O3R4cWAgYW5kIHdoYXQgaXQgYWN0dWFsbHkgZG9lcy4gVGhhdCBzaG91bGQgcHJvdmlkZSBhIGNydWNpYWwgZm9vdGhvbGQgb24gdGhlIGRldGFpbHMuIEkgd2lsbCBuZWVkIHRvIGRlbHZlIGRlZXBlciBpbnRvIHRoZSBjb2RlIHRvIGVuc3VyZSBJIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHdvcmtpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL25ldHBvbGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0LypcbiAgIDM6XHQgKiBDb21tb24gZnJhbWV3b3JrIGZvciBsb3ctbGV2ZWwgbmV0d29yayBjb25zb2xlLCBkdW1wLCBhbmQgZGVidWdnZXIgY29kZVxuICAgNDpcdCAqXG4gICA1Olx0ICogU2VwIDggMjAwMyAgTWF0dCBNYWNrYWxsIFx1MDAzY21wbUBzZWxlbmljLmNvbVx1MDAzZVxuICAgNjpcdCAqXG4gICA3Olx0ICogYmFzZWQgb24gdGhlIG5ldGNvbnNvbGUgY29kZSBmcm9tOlxuICAgODpcdCAqXG4gICA5Olx0ICogQ29weXJpZ2h0IChDKSAyMDAxICBJbmdvIE1vbG5hciBcdTAwM2NtaW5nb0ByZWRoYXQuY29tXHUwMDNlXG4gIDEwOlx0ICogQ29weXJpZ2h0IChDKSAyMDAyICBSZWQgSGF0LCBJbmMuXG4gIDExOlx0ICovXG4gIDEyOlx0XG4gIDEzOlx0I2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSBcJiMzNDs6IFwmIzM0OyBmbXRcbiAgMTQ6XHRcbiAgMTU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGVwYXJhbS5oXHUwMDNlXG4gIDE2Olx0I2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAgMTc6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuICAxODpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcdTAwM2VcbiAgMTk6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICAyMDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2FycC5oXHUwMDNlXG4gIDIxOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvaW5ldGRldmljZS5oXHUwMDNlXG4gIDIyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvaW5ldC5oXHUwMDNlXG4gIDIzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvaW50ZXJydXB0LmhcdTAwM2VcbiAgMjQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRwb2xsLmhcdTAwM2VcbiAgMjU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG4gIDI2Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuICAyNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlLmhcdTAwM2VcbiAgMjg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuICAyOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICAzMDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG4gIDMxOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvaWZfdmxhbi5oXHUwMDNlXG4gIDMyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvdWRwLmhcdTAwM2VcbiAgMzM6XHQjaW5jbHVkZSBcdTAwM2NuZXQvdGNwLmhcdTAwM2VcbiAgMzQ6XHQjaW5jbHVkZSBcdTAwM2NuZXQvYWRkcmNvbmYuaFx1MDAzZVxuICAzNTpcdCNpbmNsdWRlIFx1MDAzY25ldC9uZGlzYy5oXHUwMDNlXG4gIDM2Olx0I2luY2x1ZGUgXHUwMDNjdHJhY2UvZXZlbnRzL25hcGkuaFx1MDAzZVxuICAzNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2tjb25maWcuaFx1MDAzZVxuICAzODpcdFxuICAzOTpcdCNkZWZpbmUgVVNFQ19QRVJfUE9MTFx0NTBcbiAgNDA6XHRcbiAgNDE6XHQvKlxuICA0MjpcdCAqIENhcCBvbiBza2JzIHBhcmtlZCBpbiBucGluZm8tXHUwMDNldHhxIHdoaWxlIHRoZSBkZXZpY2UgaXMgYnVzeS4gVGhlIHF1ZXVlXG4gIDQzOlx0ICogZXhpc3RzIHRvIHJpZGUgb3V0IGEgdHJhbnNpZW50IHN0YWxsOyBhIHByb2R1Y2VyIHRoYXQgb3V0cnVucyB0aGVcbiAgNDQ6XHQgKiBkZXZpY2UgZm9yIGxvbmdlciB0aGFuIHRoYXQgbXVzdCBsb3NlIHBhY2tldHMsIG5vdCBncm93IGl0IHdpdGhvdXRcbiAgNDU6XHQgKiBib3VuZC5cbiAgNDY6XHQgKi9cbiAgNDc6XHQjZGVmaW5lIE5FVFBPTExfVFhRX01BWFx0MTAyNFxuICA0ODpcdFxuICA0OTpcdC8qXG4gIDUwOlx0ICogY2Fycmllcl90aW1lb3V0IGlzIG5ldGNvbnNvbGUtc3BlY2lmaWMgYW5kIG9ubHkga2VwdCBoZXJlIHRvIHByZXNlcnZlIHRoZVxuICA1MTpcdCAqIG5ldHBvbGwuY2Fycmllcl90aW1lb3V0IG1vZHVsZS1wYXJhbWV0ZXIgQUJJLiBJdHMgdmFsdWUgaXMgZXhwb3NlZCB0b1xuICA1MjpcdCAqIG5ldGNvbnNvbGUgdGhyb3VnaCBuZXRwb2xsX2dldF9jYXJyaWVyX3RpbWVvdXQoKS5cbiAgNTM6XHQgKi9cbiAgNTQ6XHRzdGF0aWMgdW5zaWduZWQgaW50IGNhcnJpZXJfdGltZW91dCA9IDQ7XG4gIDU1Olx0bW9kdWxlX3BhcmFtKGNhcnJpZXJfdGltZW91dCwgdWludCwgMDY0NCk7XG4gIDU2Olx0XG4gIDU3Olx0dW5zaWduZWQgaW50IG5ldHBvbGxfZ2V0X2NhcnJpZXJfdGltZW91dCh2b2lkKVxuICA1ODpcdHtcbiAgNTk6XHRcdHJldHVybiBjYXJyaWVyX3RpbWVvdXQ7XG4gIDYwOlx0fVxuICA2MTpcdEVYUE9SVF9TWU1CT0xfR1BMKG5ldHBvbGxfZ2V0X2NhcnJpZXJfdGltZW91dCk7XG4gIDYyOlx0XG4gIDYzOlx0c3RhdGljIG5ldGRldl90eF90IG5ldHBvbGxfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuICA2NDpcdFx0XHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiAgNjU6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cSlcbiAgNjY6XHR7XG4gIDY3Olx0XHRuZXRkZXZfdHhfdCBzdGF0dXMgPSBORVRERVZfVFhfT0s7XG4gIDY4Olx0XHRuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcztcbiAgNjk6XHRcbiAgNzA6XHRcdGZlYXR1cmVzID0gbmV0aWZfc2tiX2ZlYXR1cmVzKHNrYik7XG4gIDcxOlx0XG4gIDcyOlx0XHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSBcdTAwMjZcdTAwMjZcbiAgNzM6XHRcdCAgICAhdmxhbl9od19vZmZsb2FkX2NhcGFibGUoZmVhdHVyZXMsIHNrYi1cdTAwM2V2bGFuX3Byb3RvKSkge1xuICA3NDpcdFx0XHRza2IgPSBfX3ZsYW5faHdhY2NlbF9wdXNoX2luc2lkZShza2IpO1xuICA3NTpcdFx0XHRpZiAodW5saWtlbHkoIXNrYikpIHtcbiAgNzY6XHRcdFx0XHQvKiBUaGlzIGlzIGFjdHVhbGx5IGEgcGFja2V0IGRyb3AsIGJ1dCB3ZVxuICA3NzpcdFx0XHRcdCAqIGRvbiYjMzk7dCB3YW50IHRoZSBjb2RlIHRoYXQgY2FsbHMgdGhpc1xuICA3ODpcdFx0XHRcdCAqIGZ1bmN0aW9uIHRvIHRyeSBhbmQgb3BlcmF0ZSBvbiBhIE5VTEwgc2tiLlxuICA3OTpcdFx0XHRcdCAqL1xuICA4MDpcdFx0XHRcdGdvdG8gb3V0O1xuICA4MTpcdFx0XHR9XG4gIDgyOlx0XHR9XG4gIDgzOlx0XG4gIDg0Olx0XHRzdGF0dXMgPSBuZXRkZXZfc3RhcnRfeG1pdChza2IsIGRldiwgdHhxLCBmYWxzZSk7XG4gIDg1Olx0XG4gIDg2Olx0b3V0OlxuICA4NzpcdFx0cmV0dXJuIHN0YXR1cztcbiAgODg6XHR9XG4gIDg5Olx0XG4gIDkwOlx0c3RhdGljIHZvaWQgcXVldWVfcHJvY2VzcyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gIDkxOlx0e1xuICA5MjpcdFx0c3RydWN0IG5ldHBvbGxfaW5mbyAqbnBpbmZvID1cbiAgOTM6XHRcdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXRwb2xsX2luZm8sIHR4X3dvcmsud29yayk7XG4gIDk0Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuICA5NTpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiAgOTY6XHRcbiAgOTc6XHRcdHdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoXHUwMDI2bnBpbmZvLVx1MDAzZXR4cSkpKSB7XG4gIDk4Olx0XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBza2ItXHUwMDNlZGV2O1xuICA5OTpcdFx0XHRzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7XG4gMTAwOlx0XHRcdHVuc2lnbmVkIGludCBxX2luZGV4O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjEzNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYG5ldHBvbGxgIGJ1c2luZXNzLiBBcyBhIHF1aWNrIHJlZnJlc2hlciwgSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzZXR1cCBhbmQgdGhlIHBhY2tldCBmbG93LiBJIHRoaW5rIHJlYWRpbmcgbGluZXMgMjYwIHRocm91Z2ggMzEwIG9mIGBuZXQvY29yZS9uZXRwb2xsLmNgIHNob3VsZCBnaXZlIG1lIGEgc29saWQgc3RhcnQgb24gdGhhdC4gSSYjMzk7bSBrZWVuIHRvIHNlZSBob3cgdGhleSYjMzk7dmUgaW1wbGVtZW50ZWQgaXQsIGNvbnNpZGVyaW5nIHRoZSBudWFuY2VzIG9mIGhpZ2gtcGVyZm9ybWFuY2UgbmV0d29ya2luZyBhbmQgdGhlIGtlcm5lbCYjMzk7cyBhcmNoaXRlY3R1cmUuIEkmIzM5O20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBjbGV2ZXIgb3B0aW1pemF0aW9ucyB0aGV5JiMzOTt2ZSBlbXBsb3llZC4gSXQgd2lsbCBiZSBpbnRlcmVzdGluZyB0byBzZWUgd2hhdCBraW5kIG9mIGRlc2lnbiBjaG9pY2VzIHdlcmUgbWFkZSBhbmQgaG93IHRoYXQgbWF5IGltcGFjdCBwZXJmb3JtYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDQ6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9uZXRwb2xsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI2MDpcdFx0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpO1xuIDI2MTpcdFxuIDI2MjpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UobmFwaSwgXHUwMDI2ZGV2LVx1MDAzZW5hcGlfbGlzdCwgZGV2X2xpc3QpIHtcbiAyNjM6XHRcdFx0aWYgKFJFQURfT05DRShuYXBpLVx1MDAzZXBvbGxfb3duZXIpID09IHNtcF9wcm9jZXNzb3JfaWQoKSlcbiAyNjQ6XHRcdFx0XHRyZXR1cm4gMTtcbiAyNjU6XHRcdH1cbiAyNjY6XHRcdHJldHVybiAwO1xuIDI2NzpcdH1cbiAyNjg6XHRcbiAyNjk6XHQvKiBjYWxsIHdpdGggSVJRIGRpc2FibGVkICovXG4gMjcwOlx0c3RhdGljIG5ldGRldl90eF90IF9fbmV0cG9sbF9zZW5kX3NrYihzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IpXG4gMjcxOlx0e1xuIDI3MjpcdFx0bmV0ZGV2X3R4X3Qgc3RhdHVzID0gTkVUREVWX1RYX0JVU1k7XG4gMjczOlx0XHRuZXRkZXZfdHhfdCByZXQgPSBORVRfWE1JVF9EUk9QO1xuIDI3NDpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbiAyNzU6XHRcdHVuc2lnbmVkIGxvbmcgdHJpZXM7XG4gMjc2Olx0XHQvKiBJdCBpcyB1cCB0byB0aGUgY2FsbGVyIHRvIGtlZXAgbnBpbmZvIGFsaXZlLiAqL1xuIDI3NzpcdFx0c3RydWN0IG5ldHBvbGxfaW5mbyAqbnBpbmZvO1xuIDI3ODpcdFxuIDI3OTpcdFx0bG9ja2RlcF9hc3NlcnRfaXJxc19kaXNhYmxlZCgpO1xuIDI4MDpcdFxuIDI4MTpcdFx0ZGV2ID0gbnAtXHUwMDNlZGV2O1xuIDI4MjpcdFx0LyogbnBpbmZvLVx1MDAzZXR4cSBiZWxvbmdzIHRvIG5wLVx1MDAzZWRldiwgc28gcmV0cmllcyBtdXN0IHN0YXkgYm91bmQgdG8gaXQuICovXG4gMjgzOlx0XHRza2ItXHUwMDNlZGV2ID0gZGV2O1xuIDI4NDpcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDI4NTpcdFx0bnBpbmZvID0gcmN1X2RlcmVmZXJlbmNlX2JoKGRldi1cdTAwM2VucGluZm8pO1xuIDI4NjpcdFxuIDI4NzpcdFx0aWYgKCFucGluZm8gfHwgIW5ldGlmX3J1bm5pbmcoZGV2KSB8fCAhbmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSkge1xuIDI4ODpcdFx0XHRkZXZfa2ZyZWVfc2tiX2lycShza2IpO1xuIDI4OTpcdFx0XHRnb3RvIG91dDtcbiAyOTA6XHRcdH1cbiAyOTE6XHRcbiAyOTI6XHRcdC8qIGRvbiYjMzk7dCBnZXQgbWVzc2FnZXMgb3V0IG9mIG9yZGVyLCBhbmQgbm8gcmVjdXJzaW9uICovXG4gMjkzOlx0XHRpZiAoc2tiX3F1ZXVlX2xlbihcdTAwMjZucGluZm8tXHUwMDNldHhxKSA9PSAwIFx1MDAyNlx1MDAyNiAhbmV0cG9sbF9vd25lcl9hY3RpdmUoZGV2KSkge1xuIDI5NDpcdFx0XHRzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7XG4gMjk1Olx0XG4gMjk2Olx0XHRcdHR4cSA9IG5ldGRldl9jb3JlX3BpY2tfdHgoZGV2LCBza2IsIE5VTEwpO1xuIDI5NzpcdFxuIDI5ODpcdFx0XHQvKiB0cnkgdW50aWwgbmV4dCBjbG9jayB0aWNrICovXG4gMjk5Olx0XHRcdGZvciAodHJpZXMgPSBqaWZmaWVzX3RvX3VzZWNzKDEpL1VTRUNfUEVSX1BPTEw7XG4gMzAwOlx0XHRcdCAgICAgdHJpZXMgXHUwMDNlIDA7IC0tdHJpZXMpIHtcbiAzMDE6XHRcdFx0XHRpZiAoSEFSRF9UWF9UUllMT0NLKGRldiwgdHhxKSkge1xuIDMwMjpcdFx0XHRcdFx0aWYgKCFuZXRpZl94bWl0X3N0b3BwZWQodHhxKSlcbiAzMDM6XHRcdFx0XHRcdFx0c3RhdHVzID0gbmV0cG9sbF9zdGFydF94bWl0KHNrYiwgZGV2LCB0eHEpO1xuIDMwNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzExOAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDM5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldHBvbGwgVFggUXVldWUgYW5kIFBvdGVudGlhbCBPT00gVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJbiBgX19uZXRwb2xsX3NlbmRfc2tiYCwgSSBzZWUgYSBjcml0aWNhbCBhcmVhIGNvbmNlcm5pbmcgdGhlIGhhbmRsaW5nIG9mIHRyYW5zbWlzc2lvbiBmYWlsdXJlcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgd2hhdCBoYXBwZW5zIGluIHRoZSBmYWlsdXJlIHBhdGguIFNwZWNpZmljYWxseSwgaWYgYGRldl94bWl0X2NvbXBsZXRlKHN0YXR1cylgIHJldHVybnMgZmFsc2UsIGltcGx5aW5nIHRoZSBkZXZpY2UgaXNuJiMzOTt0IGltbWVkaWF0ZWx5IHJlYWR5IHRvIHNlbmQgdGhlIHBhY2tldC4KCkZpcnN0LCBJIHNlZSB0aGUgY29kZSBjaGVja3MgaWYgdGhlIGBucGluZm8tJmd0O3R4cWAgcXVldWUgaGFzIHJlYWNoZWQgaXRzIG1heGltdW0gc2l6ZSwgYE5FVFBPTExfVFhRX01BWGAuICBJZiBpdCAqaGFzKiwgdGhlIHBhY2tldCAoYHNrYmApIGlzIGZyZWVkIGltbWVkaWF0ZWx5IHVzaW5nIGBkZXZfa2ZyZWVfc2tiX2lycShza2IpYCBhbmQgdGhlIGZ1bmN0aW9uIGp1bXBzIHRvIGBvdXRgLCByZXR1cm5pbmcgYHJldGAgd2hpY2gsIGltcG9ydGFudGx5LCBpcyBzZXQgdG8gYE5FVF9YTUlUX0RST1BgLgoKVGhlIGNydWNpYWwgcG9pbnQgaGl0cyBtZTogUHJldmlvdXNseSwgdGhlcmUgKndhcyBubyogbWF4aW11bSBzaXplIG9uIGBucGluZm8tJmd0O3R4cWAhIElmIHRoZSBuZXR3b3JrIHRyYW5zbWlzc2lvbiBjb250aW51b3VzbHkgZmFpbGVkLCBvciB3YXMgaGFsdGVkLCBwYWNrZXRzIGNvdWxkIGJlIGVuZGxlc3NseSBhZGRlZCB0byBgbnBpbmZvLSZndDt0eHFgLiBUaGlzLCB3aXRob3V0IGFueSBsaW1pdCwgb3BlbnMgdGhlIGRvb3IgdG8gYSBtZW1vcnkgZXhoYXVzdGlvbiB2dWxuZXJhYmlsaXR5LCBhIGNsYXNzaWMgT09NIHNpdHVhdGlvbi4gIFRoZSBmYWN0IHRoYXQgcGFja2V0cyB3ZXJlIHNpbXBseSBxdWV1ZWQgYW5kIG5vdCBkcm9wcGVkLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSAmIzM0O291dCYjMzQ7IHJldHVybiBzdGF0dXMsIGlzIGEgaHVnZSByZWQgZmxhZy4KCk15IG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgYWN0dWFsbHkgcmVhY2hhYmxlLiBDYW4gSSB0cmlnZ2VyIHRoaXMgY29uZGl0aW9uIHdpdGhpbiBzeXprYWxsZXIgb3IgYSB2aXJ0dWFsIG1hY2hpbmU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgbmV0cG9sbGAgYW5kIGBuZXRjb25zb2xlYCBhcmUgY29uZmlndXJlZCBhbmQgdXNlZC4gV2hlcmUgYXJlIHRoZXNlIGZlYXR1cmVzIGV2ZW4gZW5hYmxlZD8gSSBuZWVkIHRvIGNoZWNrIGhvdyBgbmV0cG9sbGAgb3IgYG5ldGNvbnNvbGVgIGlzIGNvbmZpZ3VyZWQuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgX19uZXRwb2xsX3NldHVwYCBvciBgbmV0cG9sbF9zZXR1cGAgaXMgY2FsbGVkLiBJIG5lZWQgdG8gZ3JlcCBmb3IgYG5ldHBvbGxfc2V0dXBgIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDQ6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0cG9sbF9zZXR1cCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTEzOTI9c3RhdGljIGlubGluZSBpbnQgc2xhdmVfZW5hYmxlX25ldHBvbGwoc3RydWN0IHNsYXZlICpzbGF2ZSlcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTE0MDEtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjE0MDI6XHRlcnIgPSBfX25ldHBvbGxfc2V0dXAobnAsIHNsYXZlLVx1MDAzZWRldik7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTE0MDMtXHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz0xNDUxPXN0YXRpYyB2b2lkIGJvbmRfbmV0cG9sbF9jbGVhbnVwKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldilcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTE0NjEtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjE0NjI6c3RhdGljIGludCBib25kX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTQ2My17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz01OTQyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYm9uZF9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTk2MC0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTk2MTpcdC5uZG9fbmV0cG9sbF9zZXR1cFx0PSBib25kX25ldHBvbGxfc2V0dXAsXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU5NjItXHQubmRvX25ldHBvbGxfY2xlYW51cFx0PSBib25kX25ldHBvbGxfY2xlYW51cCxcbi0tXG5kcml2ZXJzL25ldC9tYWN2bGFuLmM9MTEzNj1zdGF0aWMgdm9pZCBtYWN2bGFuX2Rldl9wb2xsX2NvbnRyb2xsZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9tYWN2bGFuLmMtMTE0MC1cbmRyaXZlcnMvbmV0L21hY3ZsYW4uYzoxMTQxOnN0YXRpYyBpbnQgbWFjdmxhbl9kZXZfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuZHJpdmVycy9uZXQvbWFjdmxhbi5jLTExNDIte1xuLS1cbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy0xMTUyLVxuZHJpdmVycy9uZXQvbWFjdmxhbi5jOjExNTM6XHRlcnIgPSBfX25ldHBvbGxfc2V0dXAobmV0cG9sbCwgcmVhbF9kZXYpO1xuZHJpdmVycy9uZXQvbWFjdmxhbi5jLTExNTQtXHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvbWFjdmxhbi5jPTExOTM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBtYWN2bGFuX25ldGRldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvbWFjdmxhbi5jLTEyMTItXHQubmRvX3BvbGxfY29udHJvbGxlclx0PSBtYWN2bGFuX2Rldl9wb2xsX2NvbnRyb2xsZXIsXG5kcml2ZXJzL25ldC9tYWN2bGFuLmM6MTIxMzpcdC5uZG9fbmV0cG9sbF9zZXR1cFx0PSBtYWN2bGFuX2Rldl9uZXRwb2xsX3NldHVwLFxuZHJpdmVycy9uZXQvbWFjdmxhbi5jLTEyMTQtXHQubmRvX25ldHBvbGxfY2xlYW51cFx0PSBtYWN2bGFuX2Rldl9uZXRwb2xsX2NsZWFudXAsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE2Mz1zdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwNS0gKlx0XHRpdHMgR0ZQX0FUT01JQyBhbGxvY2F0aW9uIGZhaWxzLiBMaWZldGltZSBicmFja2V0cyBhXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjA2OiAqXHRcdHN1Y2Nlc3NmdWwgbmV0cG9sbF9zZXR1cCgpIC8gbmV0cG9sbF9jbGVhbnVwKCkgcGFpciBvbiBAbnAuXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjA3LSAqIEByZWZpbGxfd3E6XHRXb3JrIGl0ZW0gdGhhdCBhc3luY2hyb25vdXNseSB0b3BzIEBza2JfcG9vbCBiYWNrIHVwIHRvXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTQ0OT1zdGF0aWMgaW50IG5ldGNvbnNfdGFrZV9pcHY0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQ3OC0gKiBUZXN0IHdoZXRoZXIgdGhlIGNhbGxlciBsZWZ0IG50LVx1MDAzZWxvY2FsX2lwIHVuc2V0LCBzbyB0aGF0XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NDc5OiAqIG5ldGNvbnNfbmV0cG9sbF9zZXR1cCgpIHNob3VsZCBhdXRvLXBvcHVsYXRlIGl0IGZyb20gdGhlIGVncmVzcyBkZXZpY2UuXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDgwLSAqXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTQ4Nz1zdGF0aWMgYm9vbCBuZXRjb25zX2xvY2FsX2lwX3Vuc2V0KGNvbnN0IHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQ5My1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo0OTQ6c3RhdGljIGludCBuZXRjb25zX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00OTUte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01NTEtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NTUyOlx0ZXJyID0gX19uZXRwb2xsX3NldHVwKG5wLCBuZGV2KTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01NTMtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz01NzY9c3RhdGljIHZvaWQgcmVzdW1lX3RhcmdldChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU3Ny17XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NTc4Olx0LyogSW5pdGlhbGlzZSB0aGUgc2tiIHBvb2wgYmVmb3JlIG5ldHBvbGxfc2V0dXAoKSBtYWtlcyBudC1cdTAwM2VucC5kZXZcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01NzktXHQgKiB2aXNpYmxlIHRvIHRhcmdldF9saXN0IHdhbGtlcnMgKGUuZy4gbmV0Y29uc29sZV9uZXRkZXZfZXZlbnQpLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01ODQtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NTg1Olx0aWYgKG5ldGNvbnNfbmV0cG9sbF9zZXR1cChudCkpIHtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01ODYtXHRcdC8qIG5ldHBvbGwgZmFpbHMgc2V0dXAgb25jZSwgZG8gbm90IHRyeSBhZ2Fpbi4gKi9cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9NjA5PXN0YXRpYyB2b2lkIHByb2Nlc3NfcmVzdW1lX3RhcmdldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTYzNC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo2MzU6XHQvKiBuZXRwb2xsX3NldHVwKCkgdG9vayBhIG5ldF9kZXZpY2UgcmVmZXJlbmNlIGFuZCBkcm9wcGVkIHRoZSBSVE5MXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjM2LVx0ICogYmVmb3JlIHJldHVybmluZywgYWxsIHdoaWxlIHRoaXMgdGFyZ2V0IHdhcyBvZmYgdGFyZ2V0X2xpc3QgYW5kXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTEwMDI9c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwNTUtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTA1NjpcdFx0LyogSW5pdGlhbGlzZSB0aGUgc2tiIHBvb2wgYmVmb3JlIG5ldHBvbGxfc2V0dXAoKSBzbyB0aGUgcG9vbFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwNTctXHRcdCAqIGlzIHZhbGlkIGFzIHNvb24gYXMgbnQtXHUwMDNlbnAuZGV2IGJlY29tZXMgdmlzaWJsZSB0b1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDYzLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEwNjQ6XHRcdHJldCA9IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChudCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA2NS1cdFx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNjIzPXN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmFsbG9jX3BhcmFtX3RhcmdldChjaGFyICp0YXJnZXRfY29uZmlnLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjU0LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2NTU6XHQvKiBJbml0aWFsaXNlIHRoZSBza2IgcG9vbCBiZWZvcmUgbmV0cG9sbF9zZXR1cCgpIHNvIHRoZSBwb29sIGlzXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY1Ni1cdCAqIHZhbGlkIGFzIHNvb24gYXMgbnQtXHUwMDNlbnAuZGV2IGJlY29tZXMgdmlzaWJsZS4gVGhlIHRhcmdldCBpcyBub3Rcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY2MS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjYyOlx0ZXJyID0gbmV0Y29uc19uZXRwb2xsX3NldHVwKG50KTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjYzLVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MTE0MD1zdGF0aWMgaW50IF9fdGVhbV9wb3J0X2VuYWJsZV9uZXRwb2xsKHN0cnVjdCB0ZWFtX3BvcnQgKnBvcnQpXG4tLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0xMTQ4LVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoxMTQ5Olx0ZXJyID0gX19uZXRwb2xsX3NldHVwKG5wLCBwb3J0LVx1MDAzZWRldik7XG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTExNTAtXHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz0yMDc4PXN0YXRpYyB2b2lkIHRlYW1fbmV0cG9sbF9jbGVhbnVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yMDg2LVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyMDg3OnN0YXRpYyBpbnQgdGVhbV9uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTIwODgte1xuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MjE3MD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHRlYW1fbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTIxODUtXHQubmRvX3BvbGxfY29udHJvbGxlclx0PSB0ZWFtX3BvbGxfY29udHJvbGxlcixcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MjE4NjpcdC5uZG9fbmV0cG9sbF9zZXR1cFx0PSB0ZWFtX25ldHBvbGxfc2V0dXAsXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTIxODctXHQubmRvX25ldHBvbGxfY2xlYW51cFx0PSB0ZWFtX25ldHBvbGxfY2xlYW51cCxcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTE0NTU9c3RydWN0IG5ldF9kZXZpY2Vfb3BzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTE1MTMtXHR2b2lkICAgICAgICAgICAgICAgICAgICAoKm5kb19wb2xsX2NvbnRyb2xsZXIpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoxNTE0Olx0aW50XHRcdFx0KCpuZG9fbmV0cG9sbF9zZXR1cCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTE1MTUtXHR2b2lkXHRcdFx0KCpuZG9fbmV0cG9sbF9jbGVhbnVwKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldHBvbGwuaD02Mj1zdGF0aWMgaW5saW5lIHZvaWQgbmV0cG9sbF9wb2xsX2VuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7IHJldHVybjsgfVxuLS1cbmluY2x1ZGUvbGludXgvbmV0cG9sbC5oLTY0LVxuaW5jbHVkZS9saW51eC9uZXRwb2xsLmg6NjU6aW50IF9fbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbmluY2x1ZGUvbGludXgvbmV0cG9sbC5oLTY2LXZvaWQgX19uZXRwb2xsX2ZyZWUoc3RydWN0IG5ldHBvbGwgKm5wKTtcbi0tXG5uZXQvODAyMXEvdmxhbl9kZXYuYz02OTA9c3RhdGljIHZvaWQgdmxhbl9kZXZfcG9sbF9jb250cm9sbGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtNjk0LVxubmV0LzgwMjFxL3ZsYW5fZGV2LmM6Njk1OnN0YXRpYyBpbnQgdmxhbl9kZXZfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtNjk2LXtcbi0tXG5uZXQvODAyMXEvdmxhbl9kZXYuYy03MDYtXG5uZXQvODAyMXEvdmxhbl9kZXYuYzo3MDc6XHRlcnIgPSBfX25ldHBvbGxfc2V0dXAobmV0cG9sbCwgcmVhbF9kZXYpO1xubmV0LzgwMjFxL3ZsYW5fZGV2LmMtNzA4LVx0aWYgKGVycikge1xuLS1cbm5ldC84MDIxcS92bGFuX2Rldi5jPTEwNTM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2bGFuX25ldGRldl9vcHMgPSB7XG4tLVxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtMTA3OS1cdC5uZG9fcG9sbF9jb250cm9sbGVyXHQ9IHZsYW5fZGV2X3BvbGxfY29udHJvbGxlcixcbm5ldC84MDIxcS92bGFuX2Rldi5jOjEwODA6XHQubmRvX25ldHBvbGxfc2V0dXBcdD0gdmxhbl9kZXZfbmV0cG9sbF9zZXR1cCxcbm5ldC84MDIxcS92bGFuX2Rldi5jLTEwODEtXHQubmRvX25ldHBvbGxfY2xlYW51cFx0PSB2bGFuX2Rldl9uZXRwb2xsX2NsZWFudXAsXG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYz0zMDY9c3RhdGljIGludCBfX2JyX25ldHBvbGxfZW5hYmxlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApXG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0zMTQtXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjMxNTpcdGVyciA9IF9fbmV0cG9sbF9zZXR1cChucCwgcC1cdTAwM2VkZXYpO1xubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0zMTYtXHRpZiAoZXJyKSB7XG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYz0zMjU9aW50IGJyX25ldHBvbGxfZW5hYmxlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApXG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0zMzItXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjMzMzpzdGF0aWMgaW50IGJyX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMzM0LXtcbi0tXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jPTQzOT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGJyX25ldGRldl9vcHMgPSB7XG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy00NTEtI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjQ1MjpcdC5uZG9fbmV0cG9sbF9zZXR1cFx0ID0gYnJfbmV0cG9sbF9zZXR1cCxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtNDUzLVx0Lm5kb19uZXRwb2xsX2NsZWFudXBcdCA9IGJyX25ldHBvbGxfY2xlYW51cCxcbi0tXG5uZXQvY29yZS9uZXRwb2xsLmM9MzUzPUVYUE9SVF9TWU1CT0wobmV0cG9sbF9zZW5kX3NrYik7XG5uZXQvY29yZS9uZXRwb2xsLmMtMzU0LVxubmV0L2NvcmUvbmV0cG9sbC5jOjM1NTppbnQgX19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG5uZXQvY29yZS9uZXRwb2xsLmMtMzU2LXtcbi0tXG5uZXQvY29yZS9uZXRwb2xsLmMtMzgyLVx0XHRvcHMgPSBuZGV2LVx1MDAzZW5ldGRldl9vcHM7XG5uZXQvY29yZS9uZXRwb2xsLmM6MzgzOlx0XHRpZiAob3BzLVx1MDAzZW5kb19uZXRwb2xsX3NldHVwKSB7XG5uZXQvY29yZS9uZXRwb2xsLmM6Mzg0Olx0XHRcdGVyciA9IG9wcy1cdTAwM2VuZG9fbmV0cG9sbF9zZXR1cChuZGV2KTtcbm5ldC9jb3JlL25ldHBvbGwuYy0zODUtXHRcdFx0aWYgKGVycilcbi0tXG5uZXQvY29yZS9uZXRwb2xsLmMtNDA0LX1cbm5ldC9jb3JlL25ldHBvbGwuYzo0MDU6RVhQT1JUX1NZTUJPTF9HUEwoX19uZXRwb2xsX3NldHVwKTtcbm5ldC9jb3JlL25ldHBvbGwuYy00MDYtXG4tLVxubmV0L2RzYS91c2VyLmM9MTMwNT1zdGF0aWMgaW50IGRzYV91c2VyX3NldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2RzYS91c2VyLmMtMTMxMy0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcbm5ldC9kc2EvdXNlci5jOjEzMTQ6c3RhdGljIGludCBkc2FfdXNlcl9uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvZHNhL3VzZXIuYy0xMzE1LXtcbi0tXG5uZXQvZHNhL3VzZXIuYy0xMzI0LVxubmV0L2RzYS91c2VyLmM6MTMyNTpcdGVyciA9IF9fbmV0cG9sbF9zZXR1cChuZXRwb2xsLCBjb25kdWl0KTtcbm5ldC9kc2EvdXNlci5jLTEzMjYtXHRpZiAoZXJyKSB7XG4tLVxubmV0L2RzYS91c2VyLmM9MjU4Nj1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGRzYV91c2VyX25ldGRldl9vcHMgPSB7XG4tLVxubmV0L2RzYS91c2VyLmMtMjU5Ni0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcbm5ldC9kc2EvdXNlci5jOjI1OTc6XHQubmRvX25ldHBvbGxfc2V0dXBcdD0gZHNhX3VzZXJfbmV0cG9sbF9zZXR1cCxcbm5ldC9kc2EvdXNlci5jLTI1OTgtXHQubmRvX25ldHBvbGxfY2xlYW51cFx0PSBkc2FfdXNlcl9uZXRwb2xsX2NsZWFudXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA0OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NTEzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEludmVzdGlnYXRpb24gb2YgbmV0Y29uc29sZSBhbmQgbmV0cG9sbCBTZXR1cCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byBob3cgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAgd29ya3MuIEl0IHNlZW1zIHRoYXQgYG5ldGNvbnNvbGVgLCB3aGVuIGNvbmZpZ3VyZWQgZWl0aGVyIHRocm91Z2ggYGNvbmZpZ2ZzYCBhdCBgL3N5cy9rZXJuZWwvY29uZmlnL25ldGNvbnNvbGUvYCBvciB3aXRoIG1vZHVsZSBwYXJhbWV0ZXJzIHVzaW5nIGBuZXRjb25zb2xlPS4uLmAsIGVuZHMgdXAgY2FsbGluZyBgX19uZXRwb2xsX3NldHVwYC4gTm93LCB0aGF0IGdldHMgbWUgdGhpbmtpbmc6IENhbiBgbmV0Y29uc29sZWAgZXZlbiAqYmUqIHJlYWNoZWQgdGhyb3VnaCBgY29uZmlnZnNgPyBJdCYjMzk7cyBiZWVuIGEgd2hpbGUsIGFuZCBJIG5lZWQgdG8gYmUgc3VyZS4KCkxldCYjMzk7cyBzZWUsIEkgc2hvdWxkIGNoZWNrIHRoZSB1c2Ugb2YgYE5FVENPTlNPTEVfRFlOQU1JQ2AgYW5kIHRoZSBjb25maWdmcyB1c2FnZSBpbiBzeXprYWxsZXIgb3IgYSBzdGFuZGFyZCBMaW51eCBrZXJuZWwgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuIEFoLCByaWdodCwgb2YgY291cnNlLCBjb25maWdmcyBpcyBzb21ldGhpbmcgdGhhdCB1c2VyIHNwYWNlIGNhbiBkeW5hbWljYWxseSBtb3VudDsgc3l6a2FsbGVyIGNhbiBlYXNpbHkgbW91bnQgY29uZmlnZnMgYW5kIGNyZWF0ZSBlbnRyaWVzLCBzbyB0aGF0JiMzOTtzIGhlbHBmdWwuIFRoaXMgbWFrZXMgbWUgd29uZGVyLCBjYW4gYG5ldHBvbGxfc2VuZF9za2JgIGFjdHVhbGx5IGJlIGNhbGxlZCBpbiB0aGlzIHNjZW5hcmlvPwoKVGltZSB0byBkaWcgaW50byB0aGUgY29kZSBpdHNlbGYuIE9rYXksIGhlcmUgd2UgYXJlIGluIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgLiBSaWdodCwgc28gYG5ldHBvbGxfc2VuZF91ZHBgIGlzIHdoYXQgd2UmIzM5O3JlIGFmdGVyLiBBaGEhIFdoZW4gYHByaW50a2AgaXMgY2FsbGVkLCBvciB3aGVuIHNvbWV0aGluZyB3cml0ZXMgdG8gYC9kZXYva21zZ2AsIHRoZSBuZXRjb25zb2xlJiMzOTtzIHdyaXRlIGhhbmRsZXIsIGB3cml0ZV9tc2dgLCBpcyBpbnZva2VkLiBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBsaW5rLiBOb3csIGxldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhhdCBgd3JpdGVfbXNnYCBmdW5jdGlvbiBpbiBgZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jYCB0byBzZWUgcHJlY2lzZWx5IHdoYXQgdHJpZ2dlcnMgdGhlIG91dHB1dCwgYW5kIHdoZXJlIGl0IGdvZXMgZnJvbSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDQ6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0cG9sbF9zZW5kX3VkcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjE1MD1zdGF0aWMgdm9pZCBwdXNoX2lwdjYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE3My1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTc0OnN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE3NS1cdFx0XHQgICAgaW50IGxlbilcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIxMS0vKipcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjEyOiAqIHNlbmRfdWRwIC0gV3JhcHBlciBmb3IgbmV0cG9sbF9zZW5kX3VkcCB0aGF0IGNvdW50cyBlcnJvcnNcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjEzLSAqIEBudDogdGFyZ2V0IHRvIHNlbmQgbWVzc2FnZSB0b1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjE2LSAqXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIxNzogKiBDYWxscyBuZXRwb2xsX3NlbmRfdWRwIGFuZCBjbGFzc2lmaWVzIHRoZSByZXR1cm4gdmFsdWUuIElmIGFuIGVycm9yXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIxOC0gKiBvY2N1cnJlZCBpdCBpbmNyZW1lbnRzIHN0YXRpc3RpY3MgaW4gbnQtXHUwMDNlc3RhdHMgYWNjb3JkaW5nbHkuXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIxOTogKiBPbmx5IGNhbGxzIG5ldHBvbGxfc2VuZF91ZHAgaWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBkaXNhYmxlZC5cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjIwLSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIyMjE9c3RhdGljIHZvaWQgc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMjIte1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMjM6XHRpbnQgcmVzdWx0ID0gbmV0cG9sbF9zZW5kX3VkcChudCwgbXNnLCBsZW4pO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMjQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA0OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NTEyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGVzZSBgc2VuZF91ZHBgIGFuZCBgbmV0cG9sbF9zZW5kX3VkcGAgZnVuY3Rpb25zLiBSaWdodCBub3csIEkmIzM5O20gdHJ5aW5nIHRvIGdldCBhIGNvbXByZWhlbnNpdmUgdmlldyBvZiB0aGUgY29kZS4KCioqSW52ZXN0aWdhdGluZyBDYWxsIFNpdGVzKioKCkkmIzM5O20gdGhpbmtpbmcsICYjMzQ7V2hlcmUgZWxzZSBhcmUgdGhlc2UgZnVuY3Rpb25zIGFjdHVhbGx5IGJlaW5nICp1c2VkKj8mIzM0OyBGaW5kaW5nIGFsbCB0aGUgY2FsbCBzaXRlcyBpcyBrZXkgaGVyZS4gTGV0JiMzOTtzIHNlZS4uLiBhIHF1aWNrIGNoZWNrIG9mIHRoZSBjb2RlYmFzZSBzaG91bGQgZG8gdGhlIHRyaWNrLiBBIGdvb2QgcGxhY2UgdG8gc3RhcnQsIGJhc2VkIG9uIHByaW9yIGV4cGVyaWVuY2UsIHdvdWxkIGxpa2VseSBiZSBgZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jYC4gSXQmIzM5O3MgYSBwcmltZSBzdXNwZWN0IGdpdmVuIGl0cyBsaWtlbHkgcmVsYXRpb24gdG8gbmV0d29yayBjb25zb2xlIGZ1bmN0aW9uYWxpdHksIGFuZCBzaG91bGQgZ2l2ZSBtZSBzb21lIGdvb2QgbGVhZHMgdG8gZm9sbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZW5kX3VkcFxcYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjE1MD1zdGF0aWMgdm9pZCBwdXNoX2lwdjYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE3My1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTc0OnN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE3NS1cdFx0XHQgICAgaW50IGxlbilcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIxMS0vKipcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjEyOiAqIHNlbmRfdWRwIC0gV3JhcHBlciBmb3IgbmV0cG9sbF9zZW5kX3VkcCB0aGF0IGNvdW50cyBlcnJvcnNcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjEzLSAqIEBudDogdGFyZ2V0IHRvIHNlbmQgbWVzc2FnZSB0b1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjE2LSAqXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIxNzogKiBDYWxscyBuZXRwb2xsX3NlbmRfdWRwIGFuZCBjbGFzc2lmaWVzIHRoZSByZXR1cm4gdmFsdWUuIElmIGFuIGVycm9yXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIxOC0gKiBvY2N1cnJlZCBpdCBpbmNyZW1lbnRzIHN0YXRpc3RpY3MgaW4gbnQtXHUwMDNlc3RhdHMgYWNjb3JkaW5nbHkuXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIxOTogKiBPbmx5IGNhbGxzIG5ldHBvbGxfc2VuZF91ZHAgaWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBkaXNhYmxlZC5cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjIwLSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMjE6c3RhdGljIHZvaWQgc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMjIte1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMjM6XHRpbnQgcmVzdWx0ID0gbmV0cG9sbF9zZW5kX3VkcChudCwgbXNnLCBsZW4pO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMjQtXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIyMzg9c3RhdGljIHZvaWQgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjcwLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyNzE6XHRzZW5kX3VkcChudCwgbnQtXHUwMDNlYnVmLCBtc2dfbGVuKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjcyLX1cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjI4Mj1zdGF0aWMgdm9pZCBzZW5kX2ZyYWdtZW50ZWRfYm9keShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMzY5LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIzNzA6XHRcdHNlbmRfdWRwKG50LCBudC1cdTAwM2VidWYsIGJ1Zl9vZmZzZXQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzNzEtXHR9XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI0MjA9c3RhdGljIHZvaWQgc2VuZF9leHRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDI4LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0Mjk6XHQvKiBLZWVwcyB0aGUgcGF5bG9hZCBwaWNrZWQgYmVsb3cgYWxpdmUgdW50aWwgdGhlIGxhc3Qgc2VuZF91ZHAoKS4gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDMwLVx0cmN1X3JlYWRfbG9jaygpO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNDUyPXN0YXRpYyB2b2lkIHNlbmRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0NTktXHRcdGZyYWcgPSBtaW4obGVmdCwgTUFYX1BSSU5UX0NIVU5LKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDYwOlx0XHRzZW5kX3VkcChudCwgdG1wLCBmcmFnKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDYxLVx0XHR0bXAgJiM0Mzs9IGZyYWc7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA0OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTcxCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBDYWxsZXJzIG9mIGBuZXRwb2xsX3NlbmRfc2tiYCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBjYWxsZXJzIG9mIGBuZXRwb2xsX3NlbmRfc2tiYC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uLiBUaGlzIGlzIGNsZWFybHkgYSBjcml0aWNhbCBwYXRoIGZvciBuZXR3b3JrIHBvbGxpbmcgZHVyaW5nIGVtZXJnZW5jaWVzIG9yIGRlYnVnZ2luZywgc28gaXQmIzM5O3Mgd29ydGggdW5kZXJzdGFuZGluZyB0aGUgaW50ZWdyYXRpb25zLgoKSSYjMzk7dmUgZ290IHNpeCBrZXkgY2FsbGluZyBjb250ZXh0czogYGJvbmRpbmdgLCBgbWFjdmxhbmAsIGB2bGFuYCwgYGJyaWRnZWAsIGB0ZWFtYCwgYW5kIGBkc2FgLiBFYWNoIG9uZSBjaGVja3MgYG5ldHBvbGxfdHhfcnVubmluZyhkZXYpYCBhbmQsIGlmIGl0JiMzOTtzIHNldCwgY2FsbHMgaXRzIG93biBuZXRwb2xsLXNwZWNpZmljIHNlbmQgZnVuY3Rpb24sIGxpa2UgYGJvbmRfbmV0cG9sbF9zZW5kX3NrYmAsIGBtYWN2bGFuX25ldHBvbGxfc2VuZF9za2JgLCBhbmQgc28gb24uIEVhY2ggb2YgdGhlc2UgZnVuY3Rpb25zIGlzIGxpa2VseSB0YWlsb3JlZCB0byB0aGUgc3BlY2lmaWMgbmV0d29ya2luZyBhYnN0cmFjdGlvbi4gRm9yIGV4YW1wbGUsIGBib25kaW5nYCBjYWxscyBgYm9uZF9nZXRfc2xhdmVfYnlfZGV2YCB0byBzZWxlY3QgdGhlIHJpZ2h0IHNsYXZlIGRldmljZSB0byBzZW5kIHRvLiBgYnJpZGdlYCBqdXN0IGNhbGxzIGBicl9uZXRwb2xsX3NlbmRfc2tiYC4KCk5vdyB0aGUgcXVlc3Rpb24gaXMsICpob3cqIGlzIHRoaXMgYG5ldHBvbGxfdHhfcnVubmluZ2AgZmxhZyBzZXQ/IEl0JiMzOTtzIGEga2V5IGNvbmRpdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN0YXRlIG1hY2hpbmUgYW5kIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIHRoaXMgbmV0cG9sbCBUWCBtb2RlLiBUaW1lIHRvIGdyZXAgZm9yIHRoYXQgZmxhZyBhbmQgc2VlIHdoZXJlIGl0JiMzOTtzIGJlaW5nIG1hbmlwdWxhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRwb2xsX3R4X3J1bm5pbmcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz0yOTc9bmV0ZGV2X3R4X3QgYm9uZF9kZXZfcXVldWVfeG1pdChzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTMwNS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MzA2Olx0aWYgKHVubGlrZWx5KG5ldHBvbGxfdHhfcnVubmluZyhib25kLVx1MDAzZWRldikpKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0zMDctXHRcdHJldHVybiBib25kX25ldHBvbGxfc2VuZF9za2IoYm9uZF9nZXRfc2xhdmVfYnlfZGV2KGJvbmQsIHNsYXZlX2RldiksIHNrYik7XG4tLVxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzY19icGYuYz0yNDc9aW50IG5ldHZzY19uZG94ZHBfeG1pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgaW50IG4sXG4tLVxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzY19icGYuYy0yNjgtXHRpZiAodmZfbmV0ZGV2IFx1MDAyNlx1MDAyNiBuZXRpZl9ydW5uaW5nKHZmX25ldGRldikgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjX2JwZi5jOjI2OTpcdCAgICBuZXRpZl9jYXJyaWVyX29rKHZmX25ldGRldikgXHUwMDI2XHUwMDI2ICFuZXRwb2xsX3R4X3J1bm5pbmcobmRldikgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjX2JwZi5jLTI3MC1cdCAgICB2Zl9uZXRkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9feGRwX3htaXQgXHUwMDI2XHUwMDI2XG4tLVxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzY19kcnYuYz00NDI9c3RhdGljIGludCBuZXR2c2NfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBib29sIHhkcF90eClcbi0tXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjX2Rydi5jLTQ1OS1cdGlmICh2Zl9uZXRkZXYgXHUwMDI2XHUwMDI2IG5ldGlmX3J1bm5pbmcodmZfbmV0ZGV2KSBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmM6NDYwOlx0ICAgIG5ldGlmX2NhcnJpZXJfb2sodmZfbmV0ZGV2KSBcdTAwMjZcdTAwMjYgIW5ldHBvbGxfdHhfcnVubmluZyhuZXQpIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzY19kcnYuYy00NjEtXHQgICAgbmV0X2RldmljZV9jdHgtXHUwMDNlZGF0YV9wYXRoX2lzX3ZmKVxuLS1cbmRyaXZlcnMvbmV0L21hY3ZsYW4uYz01ODk9c3RhdGljIG5ldGRldl90eF90IG1hY3ZsYW5fc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy01OTUtXG5kcml2ZXJzL25ldC9tYWN2bGFuLmM6NTk2Olx0aWYgKHVubGlrZWx5KG5ldHBvbGxfdHhfcnVubmluZyhkZXYpKSlcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy01OTctXHRcdHJldHVybiBtYWN2bGFuX25ldHBvbGxfc2VuZF9za2Iodmxhbiwgc2tiKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2lmX3RlYW0uaD0yMzc9c3RhdGljIGlubGluZSBpbnQgdGVhbV9kZXZfcXVldWVfeG1pdChzdHJ1Y3QgdGVhbSAqdGVhbSwgc3RydWN0IHRlYW1fcG9ydCAqcG9ydCxcbi0tXG5pbmNsdWRlL2xpbnV4L2lmX3RlYW0uaC0yNDQtXHRza2ItXHUwMDNlZGV2ID0gcG9ydC1cdTAwM2VkZXY7XG5pbmNsdWRlL2xpbnV4L2lmX3RlYW0uaDoyNDU6XHRpZiAodW5saWtlbHkobmV0cG9sbF90eF9ydW5uaW5nKG5ldGRldl9mcm9tX3ByaXYodGVhbSkpKSkge1xuaW5jbHVkZS9saW51eC9pZl90ZWFtLmgtMjQ2LVx0XHR0ZWFtX25ldHBvbGxfc2VuZF9za2IocG9ydCwgc2tiKTtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldHBvbGwuaD04OT1zdGF0aWMgaW5saW5lIHZvaWQgbmV0cG9sbF9wb2xsX3VubG9jayh2b2lkICpoYXZlKVxuLS1cbmluY2x1ZGUvbGludXgvbmV0cG9sbC5oLTk2LVxuaW5jbHVkZS9saW51eC9uZXRwb2xsLmg6OTc6c3RhdGljIGlubGluZSBib29sIG5ldHBvbGxfdHhfcnVubmluZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuaW5jbHVkZS9saW51eC9uZXRwb2xsLmgtOTgte1xuLS1cbmluY2x1ZGUvbGludXgvbmV0cG9sbC5oPTEwNz1zdGF0aWMgaW5saW5lIHZvaWQgbmV0cG9sbF9wb2xsX3VubG9jayh2b2lkICpoYXZlKVxuLS1cbmluY2x1ZGUvbGludXgvbmV0cG9sbC5oLTEwOS19XG5pbmNsdWRlL2xpbnV4L25ldHBvbGwuaDoxMTA6c3RhdGljIGlubGluZSBib29sIG5ldHBvbGxfdHhfcnVubmluZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuaW5jbHVkZS9saW51eC9uZXRwb2xsLmgtMTExLXtcbi0tXG5pbmNsdWRlL25ldC9ib25kaW5nLmg9MTAzPXN0YXRpYyBpbmxpbmUgaW50IGlzX25ldHBvbGxfdHhfYmxvY2tlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmluY2x1ZGUvbmV0L2JvbmRpbmcuaC0xMDUtXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZuZXRwb2xsX2Jsb2NrX3R4KSlcbmluY2x1ZGUvbmV0L2JvbmRpbmcuaDoxMDY6XHRcdHJldHVybiBuZXRwb2xsX3R4X3J1bm5pbmcoZGV2KTtcbmluY2x1ZGUvbmV0L2JvbmRpbmcuaC0xMDctXHRyZXR1cm4gMDtcbi0tXG5uZXQvODAyMXEvdmxhbl9kZXYuYz0xMDA9c3RhdGljIG5ldGRldl90eF90IHZsYW5fZGV2X2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC84MDIxcS92bGFuX2Rldi5jLTEyMi1cdGxlbiA9IHNrYi1cdTAwM2VsZW47XG5uZXQvODAyMXEvdmxhbl9kZXYuYzoxMjM6XHRpZiAodW5saWtlbHkobmV0cG9sbF90eF9ydW5uaW5nKGRldikpKVxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtMTI0LVx0XHRyZXR1cm4gdmxhbl9uZXRwb2xsX3NlbmRfc2tiKHZsYW4sIHNrYik7XG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYz0zMD1uZXRkZXZfdHhfdCBicl9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtOTMtXHR9IGVsc2UgaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGRlc3QpKSB7XG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjk0Olx0XHRpZiAodW5saWtlbHkobmV0cG9sbF90eF9ydW5uaW5nKGRldikpKSB7XG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTk1LVx0XHRcdGJyX2Zsb29kKGJyLCBza2IsIEJSX1BLVF9NVUxUSUNBU1QsIGZhbHNlLCB0cnVlLCB2aWQpO1xuLS1cbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jPTczPXN0YXRpYyB2b2lkIF9fYnJfZm9yd2FyZChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICp0byxcbi0tXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0xMDEtXHR9IGVsc2Uge1xubmV0L2JyaWRnZS9icl9mb3J3YXJkLmM6MTAyOlx0XHRpZiAodW5saWtlbHkobmV0cG9sbF90eF9ydW5uaW5nKHRvLVx1MDAzZWJyLVx1MDAzZWRldikpKSB7XG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0xMDMtXHRcdFx0c2tiX3B1c2goc2tiLCBFVEhfSExFTik7XG4tLVxubmV0L2RzYS91c2VyLmM9ODk2PW5ldGRldl90eF90IGRzYV9lbnF1ZXVlX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9kc2EvdXNlci5jLTkwMC1cdCAqL1xubmV0L2RzYS91c2VyLmM6OTAxOlx0aWYgKHVubGlrZWx5KG5ldHBvbGxfdHhfcnVubmluZyhkZXYpKSlcbm5ldC9kc2EvdXNlci5jLTkwMi1cdFx0cmV0dXJuIGRzYV91c2VyX25ldHBvbGxfc2VuZF9za2IoZGV2LCBza2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTg3NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIGBuZXRwb2xsX3R4X3J1bm5pbmdgIERlZmluaXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBuZXRwb2xsX3R4X3J1bm5pbmdgIHZhcmlhYmxlLCBhbmQgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMsIG9mIGNvdXJzZSwgdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCB0aGUgZGVmaW5pdGlvbiB3aXRoaW4gYGluY2x1ZGUvbGludXgvbmV0cG9sbC5oYC4gSSYjMzk7bSBhc3N1bWluZyBpdCYjMzk7cyBhIGNyaXRpY2FsIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUgb3IgZmxhZyByZWxhdGVkIHRvIG5ldHBvbGwmIzM5O3MgdHJhbnNtaXQgcGF0aC4gS25vd2luZyB0aGUgZXhhY3QgZGF0YSB0eXBlLCB0aGUgY29udGV4dCBpbiB3aGljaCBpdCYjMzk7cyBkZWNsYXJlZCwgYW5kIGFueSBhc3NvY2lhdGVkIGNvbW1lbnRzIHdpbGwgcHJvdmlkZSB0aGUgZm91bmRhdGlvbmFsIHVuZGVyc3RhbmRpbmcgSSBuZWVkLiBJJiMzOTttIGhvcGluZyB0byBxdWlja2x5IGdyYXNwIGl0cyByb2xlIGluIG1hbmFnaW5nIHRyYW5zbWl0IHN0YXRlIGFuZCBwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucywgZ2l2ZW4gbmV0cG9sbCYjMzk7cyBpbmhlcmVudCBjb21wbGV4aXRpZXMgcmVnYXJkaW5nIGludGVycnVwdCBjb250ZXh0IGFuZCBwb3RlbnRpYWxseSBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzIHdpdGggb3RoZXIgbmV0d29yayBzdGFja3MuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhpbnRzIGFib3V0IGF0b21pY2l0eSwgbWVtb3J5IGJhcnJpZXJzLCBhbmQgcG90ZW50aWFsIGxvY2sgdXNhZ2UgYXJvdW5kIHRoaXMgdmFyaWFibGUuIE15IGdvYWwgaXMgdG8gcXVpY2tseSBwaW5wb2ludCBpdHMgZnVuY3Rpb24gYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgZ290Y2hhcyBmb3IgdGhlIGN1cnJlbnQgZGVidWdnaW5nIG9yIGRldmVsb3BtZW50IHRhc2sgYXQgaGFuZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBoZWFkZXIgZmlsZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0cG9sbC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA5MDpcdHtcbiAgOTE6XHRcdHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSA9IGhhdmU7XG4gIDkyOlx0XG4gIDkzOlx0XHRpZiAobmFwaSlcbiAgOTQ6XHRcdFx0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2bmFwaS1cdTAwM2Vwb2xsX293bmVyLCAtMSk7XG4gIDk1Olx0fVxuICA5NjpcdFxuICA5NzpcdHN0YXRpYyBpbmxpbmUgYm9vbCBuZXRwb2xsX3R4X3J1bm5pbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiAgOTg6XHR7XG4gIDk5Olx0XHRyZXR1cm4gaXJxc19kaXNhYmxlZCgpO1xuIDEwMDpcdH1cbiAxMDE6XHRcbiAxMDI6XHQjZWxzZVxuIDEwMzpcdHN0YXRpYyBpbmxpbmUgdm9pZCAqbmV0cG9sbF9wb2xsX2xvY2soc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKVxuIDEwNDpcdHtcbiAxMDU6XHRcdHJldHVybiBOVUxMO1xuIDEwNjpcdH1cbiAxMDc6XHRzdGF0aWMgaW5saW5lIHZvaWQgbmV0cG9sbF9wb2xsX3VubG9jayh2b2lkICpoYXZlKVxuIDEwODpcdHtcbiAxMDk6XHR9XG4gMTEwOlx0c3RhdGljIGlubGluZSBib29sIG5ldHBvbGxfdHhfcnVubmluZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIDExMTpcdHtcbiAxMTI6XHRcdHJldHVybiBmYWxzZTtcbiAxMTM6XHR9XG4gMTE0Olx0I2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA0OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNDc1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IE5ldHBvbGwgQ29udW5kcnVtKioKCk9rYXksIHNvIGBuZXRwb2xsX3R4X3J1bm5pbmdgIGlzIGdpdmluZyBtZSBgaXJxc19kaXNhYmxlZCgpYC4gVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZW4gdGhlIGB2bGFuLSZndDtuZXRwb2xsYCBvciBgYm9uZC0mZ3Q7c2xhdmUtJmd0O25wYCBzdHJ1Y3R1cmVzIGFyZSBhY3R1YWxseSBzZXQgdXAuIExldCYjMzk7cyB0cmFjZSBpdCBiYWNrLgoKUmlnaHQsIGluIGB2bGFuX2Rldl9uZXRwb2xsX3NldHVwYCwgdGhlcmUmIzM5O3MgYSBga3phbGxvY2AgZm9yIGBuZXRwb2xsYCBhbmQgYSBjYWxsIHRvIGBfX25ldHBvbGxfc2V0dXBgLiBUaGF04oCZcyB3aGVyZSBpdCYjMzk7cyBoYXBwZW5pbmcuIEhvdyBkb2VzICp0aGF0KiBnZXQgY2FsbGVkPyBBaCwgaXQmIzM5O3MgYHZsYW5fbmV0ZGV2X29wcy5uZG9fbmV0cG9sbF9zZXR1cGAhIEFuZCB0aGF0LCBpbiB0dXJuLCBpcyBjYWxsZWQgaW5kaXJlY3RseSBmcm9tIGBfX25ldHBvbGxfc2V0dXBgISBMb29rOiBpZiBgZGV2LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fbmV0cG9sbF9zZXR1cGAgZXhpc3RzLCBpdCBnZXRzIGNhbGxlZCBmcm9tIGBfX25ldHBvbGxfc2V0dXBgLiBTbywgbmV0Y29uc29sZSBpcyBzZXR0aW5nIHVwIG5ldHBvbGwgb24gdGhlc2UgdmlydHVhbCBkZXZpY2Vz4oCUdmxhbiwgYm9uZCwgYnJpZGdlLCB0ZWFtLCBldGMu4oCUd2hlbiBuZXRjb25zb2xlIGlzIHVzZWQuCgpCdXQgaG93IGlzIG5ldGNvbnNvbGUgKmNvbmZpZ3VyZWQqPyBDYW4gdXNlcnNwYWNlIGV2ZW4gY29uZmlndXJlIGl0PyBUaGlzIGlzIGNydWNpYWwuIEkgbmVlZCB0byBjaGVjayB0aGUgbmV0Y29uc29sZSBkcml2ZXIgaXRzZWxmIChgZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jYCkuIExldCYjMzk7cyBqdW1wIHRvIGFyb3VuZCBsaW5lIDEwMDAgaW4gYG5ldGNvbnNvbGUuY2Agb3Igc2VhcmNoIGZvciBjb25maWdmcyBpbiB0aGF0IGZpbGUgdG8gZ2V0IGEgY2x1ZSBhYm91dCBob3cgdXNlcnNwYWNlIGludGVyYWN0cyB3aXRoIGl0LiBUaGF0IHNob3VsZCB0ZWxsIG1lIGhvdyB0aGlzIHdob2xlIHRoaW5nIGlzIHRyaWdnZXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDQ6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnZnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQzLSNpbmNsdWRlIFx1MDAzY25ldC9hZGRyY29uZi5oXHUwMDNlXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NDQ6I2luY2x1ZGUgXHUwMDNjbGludXgvY29uZmlnZnMuaFx1MDAzZVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQ1LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcdTAwM2Vcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTYzPXN0cnVjdCBuZXRjb25zX3VzZXJkYXRhIHtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTcxLSAqIEBsaXN0Olx0TGlua3MgdGhpcyB0YXJnZXQgaW50byB0aGUgdGFyZ2V0X2xpc3QuXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTcyOiAqIEBncm91cDpcdExpbmtzIHVzIGludG8gdGhlIGNvbmZpZ2ZzIHN1YnN5c3RlbSBoaWVyYXJjaHkuXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTczOiAqIEB1c2VyZGF0YV9ncm91cDpcdExpbmtzIHRvIHRoZSB1c2VyZGF0YSBjb25maWdmcyBoaWVyYXJjaHlcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzQtICogQHVzZXJkYXRhOlx0XHRDYWNoZWQsIGZvcm1hdHRlZCB1c2VyZGF0YSBwYXlsb2FkLiBSQ1UgcHJvdGVjdGVkLlxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMTA9c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQyLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0MzpzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSBuZXRjb25zb2xlX3N1YnN5cztcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDQtc3RhdGljIERFRklORV9NVVRFWChkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXgpO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNDY9c3RhdGljIGludCBfX2luaXQgZHluYW1pY19uZXRjb25zb2xlX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ5LVx0bXV0ZXhfaW5pdChcdTAwMjZuZXRjb25zb2xlX3N1YnN5cy5zdV9tdXRleCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjUwOlx0cmV0dXJuIGNvbmZpZ2ZzX3JlZ2lzdGVyX3N1YnN5c3RlbShcdTAwMjZuZXRjb25zb2xlX3N1YnN5cyk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjUxLX1cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjUzPXN0YXRpYyB2b2lkIF9fZXhpdCBkeW5hbWljX25ldGNvbnNvbGVfZXhpdCh2b2lkKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1NC17XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjU1Olx0Y29uZmlnZnNfdW5yZWdpc3Rlcl9zdWJzeXN0ZW0oXHUwMDI2bmV0Y29uc29sZV9zdWJzeXMpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1Ni19XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1OS0gKiBUYXJnZXRzIHRoYXQgd2VyZSBjcmVhdGVkIGJ5IHBhcnNpbmcgdGhlIGJvb3QvbW9kdWxlIG9wdGlvbiBzdHJpbmdcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjA6ICogZG8gbm90IGV4aXN0IGluIHRoZSBjb25maWdmcyBoaWVyYXJjaHkgKGFuZCBoYXZlIE5VTEwgbmFtZXMpIGFuZCB3aWxsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYxLSAqIG5ldmVyIGdvIGF3YXksIHNvIG1ha2UgdGhlc2UgYSBuby1vcCBmb3IgdGhlbS5cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MzA0PXN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfdGFyZ2V0X3B1dChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMDctXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzA4OnN0YXRpYyB2b2lkIHBvcHVsYXRlX2NvbmZpZ2ZzX2l0ZW0oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMDktXHRcdFx0XHQgICBpbnQgY21kbGluZV9jb3VudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9OTAwPXN0YXRpYyBzc2l6ZV90IHRyYW5zbWl0X2Vycm9yc19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05MTQtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6OTE1Oi8qIGNvbmZpZ2ZzIGhlbHBlciB0byBkaXNwbGF5IGlmIGNwdV9uciBzeXNkYXRhIGZlYXR1cmUgaXMgZW5hYmxlZCAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTkxNi1zdGF0aWMgc3NpemVfdCBzeXNkYXRhX2NwdV9ucl9lbmFibGVkX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTkyNy1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo5Mjg6LyogY29uZmlnZnMgaGVscGVyIHRvIGRpc3BsYXkgaWYgdGFza25hbWUgc3lzZGF0YSBmZWF0dXJlIGlzIGVuYWJsZWQgKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05Mjktc3RhdGljIHNzaXplX3Qgc3lzZGF0YV90YXNrbmFtZV9lbmFibGVkX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz05ODI9c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9tc2dpZF9lbmFibGVkX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05OTUtLypcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo5OTY6ICogVGhpcyBvbmUgaXMgc3BlY2lhbCAtLSB0YXJnZXRzIGNyZWF0ZWQgdGhyb3VnaCB0aGUgY29uZmlnZnMgaW50ZXJmYWNlXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTk3LSAqIGFyZSBub3QgZW5hYmxlZCAoYW5kIHRoZSBjb3JyZXNwb25kaW5nIG5ldHBvbGwgYWN0aXZhdGVkKSBieSBkZWZhdWx0LlxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMDAyPXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDUxLVx0XHQgKiBTa2lwIG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoKSAtLSBhbGwgdGhlIGF0dHJpYnV0ZXMgYXJlXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTA1MjpcdFx0ICogYWxyZWFkeSBjb25maWd1cmVkIHZpYSBjb25maWdmcy4gSnVzdCBwcmludCB0aGVtIG91dC5cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDUzLVx0XHQgKi9cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTMzNz1zdGF0aWMgc3NpemVfdCB1c2VyZGF0dW1fdmFsdWVfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1Zilcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTM0MS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMzQyOi8qIE5hdmlnYXRlIGNvbmZpZ2ZzIGFuZCBjYWxjdWxhdGUgdGhlIGxlbnRnaCBvZiB0aGUgZm9ybWF0dGVkIHN0cmluZ1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzNDMtICogcmVwcmVzZW50aW5nIHVzZXJkYXRhLlxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNTE3PXN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfdGFza25hbWVfZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1NDUtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU0NjovKiBjb25maWdmcyBoZWxwZXIgdG8gc3lzZGF0YSBjcHVfbnIgZmVhdHVyZSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1NDctc3RhdGljIHNzaXplX3Qgc3lzZGF0YV9jcHVfbnJfZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE1ODQ9Q09ORklHRlNfQVRUUihzeXNkYXRhXywgbXNnaWRfZW5hYmxlZCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU4NS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNTg2OnN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlICp1c2VyZGF0dW1fYXR0cnNbXSA9IHtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTg3LVx0XHUwMDI2dXNlcmRhdHVtX2F0dHJfdmFsdWUsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE1OTE9c3RhdGljIHZvaWQgdXNlcmRhdHVtX3JlbGVhc2Uoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTk1LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1OTY6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdmc19pdGVtX29wZXJhdGlvbnMgdXNlcmRhdHVtX29wcyA9IHtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTk3LVx0LnJlbGVhc2UgPSB1c2VyZGF0dW1fcmVsZWFzZSxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTYyOT1zdGF0aWMgdm9pZCB1c2VyZGF0dW1fZHJvcChzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCwgc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjQyLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NDM6c3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKnVzZXJkYXRhX2F0dHJzW10gPSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY0NC1cdFx1MDAyNnN5c2RhdGFfYXR0cl9jcHVfbnJfZW5hYmxlZCxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY1MC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjUxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnZnNfZ3JvdXBfb3BlcmF0aW9ucyB1c2VyZGF0YV9vcHMgPSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY1Mi1cdC5tYWtlX2l0ZW1cdFx0PSB1c2VyZGF0dW1fbWFrZV9pdGVtLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNjczPUNPTkZJR0ZTX0FUVFJfUk8oLCB0cmFuc21pdF9lcnJvcnMpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2NzQtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY3NTpzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2F0dHJpYnV0ZSAqbmV0Y29uc29sZV90YXJnZXRfYXR0cnNbXSA9IHtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjc2LVx0XHUwMDI2YXR0cl9lbmFibGVkLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNjk0PXN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfdGFyZ2V0X3JlbGVhc2Uoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzAxLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE3MDI6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdmc19pdGVtX29wZXJhdGlvbnMgbmV0Y29uc29sZV90YXJnZXRfaXRlbV9vcHMgPSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTcwMy1cdC5yZWxlYXNlXHRcdD0gbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZSxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTcxMj1zdGF0aWMgdm9pZCBpbml0X3RhcmdldF9jb25maWdfZ3JvdXAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTcxNy1cdFx0XHRcdCAgICBcdTAwMjZ1c2VyZGF0YV90eXBlKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzE4Olx0Y29uZmlnZnNfYWRkX2RlZmF1bHRfZ3JvdXAoXHUwMDI2bnQtXHUwMDNldXNlcmRhdGFfZ3JvdXAsIFx1MDAyNm50LVx1MDAzZWdyb3VwKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzE5LX1cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTc0Mj1zdGF0aWMgc3RydWN0IGNvbmZpZ19ncm91cCAqbWFrZV9uZXRjb25zb2xlX3RhcmdldChzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTc0OC1cdC8qIENoZWNraW5nIGlmIGEgdGFyZ2V0IGJ5IHRoaXMgbmFtZSB3YXMgY3JlYXRlZCBhdCBib290IHRpbWUuICBJZiBzbyxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzQ5Olx0ICogYXR0YWNoIGEgY29uZmlnZnMgZW50cnkgdG8gdGhhdCB0YXJnZXQuICBUaGlzIGVuYWJsZXMgZHluYW1pY1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3NTAtXHQgKiBjb250cm9sLlxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNzc2PXN0YXRpYyB2b2lkIGRyb3BfbmV0Y29uc29sZV90YXJnZXQoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4MjctXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTgyODpzdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ2ZzX2dyb3VwX29wZXJhdGlvbnMgbmV0Y29uc29sZV9zdWJzeXNfZ3JvdXBfb3BzID0ge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4MjktXHQubWFrZV9ncm91cFx0PSBtYWtlX25ldGNvbnNvbGVfdGFyZ2V0LFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xODMzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSBuZXRjb25zb2xlX3N1YnN5c190eXBlID0ge1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODM3LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4Mzg6LyogVGhlIG5ldGNvbnNvbGUgY29uZmlnZnMgc3Vic3lzdGVtICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTgzOTpzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSBuZXRjb25zb2xlX3N1YnN5cyA9IHtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODQwLVx0LnN1X2dyb3VwXHQ9IHtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg0Ny1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODQ4OnN0YXRpYyB2b2lkIHBvcHVsYXRlX2NvbmZpZ2ZzX2l0ZW0oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODQ5LVx0XHRcdFx0ICAgaW50IGNtZGxpbmVfY291bnQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI2MjM9c3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfcGFyYW1fdGFyZ2V0KGNoYXIgKnRhcmdldF9jb25maWcsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2NTctXHQgKiB5ZXQgb24gdGFyZ2V0X2xpc3QsIHNvIGEgbmV0ZGV2IGV2ZW50IGNhbm5vdCByZWFjaCBpdCBoZXJlLCBidXRcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjU4Olx0ICogbWlycm9yIHRoZSBjb25maWdmcyBwYXRoIGZvciBzeW1tZXRyeS5cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjU5LVx0ICovXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2NzQtXHR9XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjY3NTpcdHBvcHVsYXRlX2NvbmZpZ2ZzX2l0ZW0obnQsIGNtZGxpbmVfY291bnQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2NzYtXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI3OTY9c3RhdGljIHZvaWQgX19leGl0IGNsZWFudXBfbmV0Y29uc29sZSh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yODA4LVx0LypcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyODA5Olx0ICogVGFyZ2V0cyBjcmVhdGVkIHZpYSBjb25maWdmcyBwaW4gcmVmZXJlbmNlcyBvbiBvdXIgbW9kdWxlXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjgxMC1cdCAqIGFuZCB3b3VsZCBmaXJzdCBiZSBybWRpcigyKSYjMzk7ZWQgZnJvbSB1c2Vyc3BhY2UuIFdlIHJlYWNoXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA0OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1OTgwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk5ldGNvbnNvbGUmIzM5O3MgRHluYW1pYyBUYXJnZXQgQ3JlYXRpb24gYW5kIFBhY2tldCBIYW5kbGluZyoqCgpBbHJpZ2h0LCB0aGlzIGlzIGludGVyZXN0aW5nLiBJJiMzOTttIHNlZWluZyB0aGF0IG5ldGNvbnNvbGUgdGFyZ2V0cyBjYW4gYmUgZHluYW1pY2FsbHkgY3JlYXRlZCB1c2luZyBjb25maWdmcyDigJMgYnJpbGxpYW50ISBKdXN0IGBta2RpciAvc3lzL2tlcm5lbC9jb25maWcvbmV0Y29uc29sZS90YXJnZXQxYCBhbmQgY29uZmlndXJlIGl0LiBTZXR0aW5nIHRoZSBgZGV2X25hbWVgIGFuZCBlbmFibGluZyBpdCBnZXRzIHRoaW5ncyByb2xsaW5nLiBTZXR0aW5nIGBlbmFibGVkYCB0byBgMWAgdHJpZ2dlcnMgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cChudClgLiAgVGhlbiwgc3RhbmRhcmQgYHByaW50a2AgbWVzc2FnZXMgYXJlIHJvdXRlZCB0aHJvdWdoIGBuZXRwb2xsX3NlbmRfc2tiKG5wLCBza2IpYC4KCk5vdywgd2hlbiBgbmV0cG9sbF9zZW5kX3NrYmAga2lja3MgaW4sIGl0IG1vdmVzIGludG8gYF9fbmV0cG9sbF9zZW5kX3NrYihucCwgc2tiKWAuIFRoZSByZWFsIG1lYXQgb2YgaXQgaXMgd2hhdCBoYXBwZW5zIHdoZW4gdGhlIGRldmljZSB0cmFuc21pdCBmYWlscyBvciB0aGUgcXVldWUgaXMgc2F0dXJhdGVkLiBJdCYjMzk7cyBzdXBwb3NlZCB0byBxdWV1ZSBpbnRvIGBucGluZm8tJmd0O3R4cWAsIGJ1dCB0aGVyZSYjMzk7cyBhIHBhdGNoIGhlcmUuLi4KCkhvbGQgb24sIEkgc2VlIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZy4gSWYgdGhlIGRldmljZSB4bWl0IGlzbiYjMzk7dCBjb21wbGV0ZSwgYW5kIHRoZSBxdWV1ZSBsZW5ndGggZXhjZWVkcyBgTkVUUE9MTF9UWFFfTUFYYCwgaXQgKmRyb3BzKiB0aGUgU0tCIHJpZ2h0IHRoZXJlIHdpdGggYGRldl9rZnJlZV9za2JfaXJxKHNrYilgISBUaGF0JiMzOTtzIGEgY3J1Y2lhbCByYXRlLWxpbWl0aW5nIG1lY2hhbmlzbS4gIE90aGVyd2lzZSwgaXQgcXVldWVzIHRoZSBTS0IgYW5kIHNjaGVkdWxlcyBhIGRlbGF5ZWQgd29yayB3aXRoIGBzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmFtcDtucGluZm8tJmd0O3R4X3dvcmssMClgLgoKQW5kIGZpbmFsbHksIGBxdWV1ZV9wcm9jZXNzYOKApiBJIG5lZWQgdG8gY2hlY2sgb3V0IHdoYXQgdGhhdCB3b3JrIGl0ZW0gaXMgZG9pbmcgaW4gYG5ldC9jb3JlL25ldHBvbGwuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIHF1ZXVlZCBTS0JzIGFyZSBhY3R1YWxseSBwcm9jZXNzZWQgZm9yIHRyYW5zbWlzc2lvbi4gIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgdGhlIGRldGFpbHMgb2YgdGhhdCBwcm9jZXNzaW5nIGxvb3AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA0OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0cG9sbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA5MDpcdHN0YXRpYyB2b2lkIHF1ZXVlX3Byb2Nlc3Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuICA5MTpcdHtcbiAgOTI6XHRcdHN0cnVjdCBuZXRwb2xsX2luZm8gKm5waW5mbyA9XG4gIDkzOlx0XHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmV0cG9sbF9pbmZvLCB0eF93b3JrLndvcmspO1xuICA5NDpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiAgOTU6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gIDk2Olx0XG4gIDk3Olx0XHR3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKFx1MDAyNm5waW5mby1cdTAwM2V0eHEpKSkge1xuICA5ODpcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLVx1MDAzZWRldjtcbiAgOTk6XHRcdFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxO1xuIDEwMDpcdFx0XHR1bnNpZ25lZCBpbnQgcV9pbmRleDtcbiAxMDE6XHRcbiAxMDI6XHRcdFx0aWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpIHx8ICFuZXRpZl9ydW5uaW5nKGRldikpIHtcbiAxMDM6XHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAxMDQ6XHRcdFx0XHRjb250aW51ZTtcbiAxMDU6XHRcdFx0fVxuIDEwNjpcdFxuIDEwNzpcdFx0XHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4gMTA4Olx0XHRcdC8qIGNoZWNrIGlmIHNrYi1cdTAwM2VxdWV1ZV9tYXBwaW5nIGlzIHN0aWxsIHZhbGlkICovXG4gMTA5Olx0XHRcdHFfaW5kZXggPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTtcbiAxMTA6XHRcdFx0aWYgKHVubGlrZWx5KHFfaW5kZXggXHUwMDNlPSBkZXYtXHUwMDNlcmVhbF9udW1fdHhfcXVldWVzKSkge1xuIDExMTpcdFx0XHRcdHFfaW5kZXggPSBxX2luZGV4ICUgZGV2LVx1MDAzZXJlYWxfbnVtX3R4X3F1ZXVlcztcbiAxMTI6XHRcdFx0XHRza2Jfc2V0X3F1ZXVlX21hcHBpbmcoc2tiLCBxX2luZGV4KTtcbiAxMTM6XHRcdFx0fVxuIDExNDpcdFx0XHR0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgcV9pbmRleCk7XG4gMTE1Olx0XHRcdEhBUkRfVFhfTE9DSyhkZXYsIHR4cSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTtcbiAxMTY6XHRcdFx0aWYgKG5ldGlmX3htaXRfZnJvemVuX29yX3N0b3BwZWQodHhxKSB8fFxuIDExNzpcdFx0XHQgICAgIWRldl94bWl0X2NvbXBsZXRlKG5ldHBvbGxfc3RhcnRfeG1pdChza2IsIGRldiwgdHhxKSkpIHtcbiAxMTg6XHRcdFx0XHRza2JfcXVldWVfaGVhZChcdTAwMjZucGluZm8tXHUwMDNldHhxLCBza2IpO1xuIDExOTpcdFx0XHRcdEhBUkRfVFhfVU5MT0NLKGRldiwgdHhxKTtcbiAxMjA6XHRcdFx0XHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4gMTIxOlx0XG4gMTIyOlx0XHRcdFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNm5waW5mby1cdTAwM2V0eF93b3JrLCBIWi8xMCk7XG4gMTIzOlx0XHRcdFx0cmV0dXJuO1xuIDEyNDpcdFx0XHR9XG4gMTI1Olx0XHRcdEhBUkRfVFhfVU5MT0NLKGRldiwgdHhxKTtcbiAxMjY6XHRcdFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuIDEyNzpcdFx0fVxuIDEyODpcdH1cbiAxMjk6XHRcbiAxMzA6XHRzdGF0aWMgaW50IG5ldGlmX2xvY2FsX3htaXRfYWN0aXZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gMTMxOlx0e1xuIDEzMjpcdFx0aW50IGk7XG4gMTMzOlx0XG4gMTM0Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkZXYtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbiAxMzU6XHRcdFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIGkpO1xuIDEzNjpcdFxuIDEzNzpcdFx0XHRpZiAobmV0aWZfdHhfb3duZWQodHhxLCBzbXBfcHJvY2Vzc29yX2lkKCkpKVxuIDEzODpcdFx0XHRcdHJldHVybiAxO1xuIDEzOTpcdFx0fVxuIDE0MDpcdFxuIDE0MTpcdFx0cmV0dXJuIDA7XG4gMTQyOlx0fVxuIDE0MzpcdFxuIDE0NDpcdHN0YXRpYyB2b2lkIHBvbGxfb25lX25hcGkoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKVxuIDE0NTpcdHtcbiAxNDY6XHRcdGludCB3b3JrO1xuIDE0NzpcdFxuIDE0ODpcdFx0LyogSWYgd2Ugc2V0IHRoaXMgYml0IGJ1dCBzZWUgdGhhdCBpdCBoYXMgYWxyZWFkeSBiZWVuIHNldCxcbiAxNDk6XHRcdCAqIHRoYXQgaW5kaWNhdGVzIHRoYXQgbmFwaSBoYXMgYmVlbiBkaXNhYmxlZCBhbmQgd2UgbmVlZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzY3NQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDY3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldGNvbnNvbGUgVFggUGF0aCBhbmQgUG90ZW50aWFsIFBhY2tldCBEcm9wcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIGZvY3VzZWQgb24gdGhlIGBxdWV1ZV9wcm9jZXNzYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBpZiB0aGUgZGV2aWNlIHRyYW5zbWl0IGlzbiYjMzk7dCBpbW1lZGlhdGVseSBjb21wbGV0ZSAoYCFkZXZfeG1pdF9jb21wbGV0ZSguLi4pYCksIHRoZSBjb2RlIHF1ZXVlcyB0aGUgU0tCIChgc2tiX3F1ZXVlX2hlYWRgKSwgdW5sb2NrcyB0aGUgaGFyZHdhcmUsIHJlc3RvcmVzIGludGVycnVwdHMsIGFuZCB0aGVuIHNjaGVkdWxlcyBhIGRlbGF5ZWQgd29yayBpdGVtLiBUaGlzIHNlZW1zIHByZXR0eSBzdGFuZGFyZC4KCk5vdywgdGhlIGNydWNpYWwgcG9pbnQgaXMgY29tcGFyaW5nIHRoaXMgdG8gKmJlZm9yZSogdGhlIHBhdGNoLiBJIHJlY2FsbCB0aGF0IGlmIHRoZSBkZXZpY2Ugd2FzIHN0b3BwZWQgb3IgY29udGludW91c2x5IGZhaWxpbmcgdG8gdHJhbnNtaXQsIG5ldyBuZXRjb25zb2xlIG1lc3NhZ2VzIChmcm9tIGBwcmludGtgIG9yIGBkbWVzZ2ApIHdvdWxkIHRyaWdnZXIgYG5ldHBvbGxfc2VuZF9za2JgLCB3aGljaCB0aGVuIGNhbGxzIGBfX25ldHBvbGxfc2VuZF9za2JgLgoKSW4gdGhlIHByZS1wYXRjaCB2ZXJzaW9uLCB3aXRoaW4gYF9fbmV0cG9sbF9zZW5kX3NrYmAsIGEgY2hlY2sgYHNrYl9xdWV1ZV9sZW4oJmFtcDtucGluZm8tJmd0O3R4cSkgPT0gMGAgd291bGQgYmUgZmFsc2UgYmVjYXVzZSB0aGVyZSYjMzk7cyBhbHJlYWR5IGFuIFNLQiBxdWV1ZWQuIFRoaXMgd291bGQgY2F1c2UgbGluZXMgMjkzLTMyMiB0byBiZSBza2lwcGVkLiBDcml0aWNhbGx5LCB0aGUgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24gdW5jb25kaXRpb25hbGx5IHF1ZXVlZCBldmVyeSBuZXcgU0tCIHVzaW5nIGBza2JfcXVldWVfdGFpbCgmYW1wO25waW5mby0mZ3Q7dHhxLCBza2IpYC4KCkhvd2V2ZXIsIHRoZSB1cGRhdGVkIGNvZGUgaW50cm9kdWNlcyBhIG1heGltdW0gcXVldWUgbGVuZ3RoIGNoZWNrOiBgaWYgKHNrYl9xdWV1ZV9sZW4oJmFtcDtucGluZm8tJmd0O3R4cSkgJmd0Oz0gTkVUUE9MTF9UWFFfTUFYKWAuIElmIHRoZSBxdWV1ZSBpcyBmdWxsLCB0aGUgbmV3IFNLQiBpcyBub3cgKmRyb3BwZWQqIHdpdGggYGRldl9rZnJlZV9za2JfaXJxKHNrYilgISBUaGlzIGlzIHRoZSBmdW5kYW1lbnRhbCBjaGFuZ2UuIElmIGBkZXZfeG1pdF9jb21wbGV0ZShzdGF0dXMpYCBpcyBmYWxzZSAobGlrZWx5IGR1ZSB0byBgTkVUREVWX1RYX0JVU1lgKSwgdGhlIFNLQiBlbmRzIHVwIGluIHRoaXMgbmV3IGRyb3AgcGF0aCB3aGVuIHRoZSBxdWV1ZSBpcyBmdWxsLgoKQSBxdWVzdGlvbiB0aGF0IGFyb3NlIGR1cmluZyBteSBhbmFseXNpcyBpcyBpZiBgX19uZXRwb2xsX3NlbmRfc2tiYCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gWWVzLCBpdCYjMzk7cyBkZWZpbmVkIGFzIGBzdGF0aWMgbmV0ZGV2X3R4X3QgX19uZXRwb2xsX3NlbmRfc2tiKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYilgLiBUaGlzIG1lYW5zIGl0JiMzOTtzIG9ubHkgdmlzaWJsZSB3aXRoaW4gdGhpcyB0cmFuc2xhdGlvbiB1bml0LiBJdCYjMzk7cyBjYWxsZWQgYnkgdGhlIHB1YmxpYyBmdW5jdGlvbiBgbmV0cG9sbF9zZW5kX3NrYihzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IpYC4gVGhpcyBvcGVucyB0aGUgcG9zc2liaWxpdHkgb2YgaW5saW5pbmcuIFNpbmNlIGBfX25ldHBvbGxfc2VuZF9za2JgIGlzIG9ubHkgZXZlciBjYWxsZWQgZnJvbSBgbmV0cG9sbF9zZW5kX3NrYmAsIGl0IHNob3VsZCBiZSBzYWZlIHRvIGlubGluZSB0aGUgZm9ybWVyIGludG8gdGhlIGxhdHRlci4gVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTtsbCBxdWlja2x5IGdyZXAgdGhlIGNvZGUgdG8gY2hlY2sgdGhhdCB0aGVyZSBhcmUgbm8gb3RoZXIgY2FsbCBzaXRlcyBmb3IgYF9fbmV0cG9sbF9zZW5kX3NrYmAgd2l0aGluIGBuZXRwb2xsLmNgLiBUaGlzIHdvdWxkIHN0cmVhbWxpbmUgdGhlIGNvZGUgYW5kIHJlZHVjZSB0aGUgZnVuY3Rpb24gY2FsbCBvdmVyaGVhZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDQ6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19uZXRwb2xsX3NlbmRfc2tiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL25ldHBvbGwuYz0yNTg9c3RhdGljIGludCBuZXRwb2xsX293bmVyX2FjdGl2ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9jb3JlL25ldHBvbGwuYy0yNjktLyogY2FsbCB3aXRoIElSUSBkaXNhYmxlZCAqL1xubmV0L2NvcmUvbmV0cG9sbC5jOjI3MDpzdGF0aWMgbmV0ZGV2X3R4X3QgX19uZXRwb2xsX3NlbmRfc2tiKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9jb3JlL25ldHBvbGwuYy0yNzEte1xuLS1cbm5ldC9jb3JlL25ldHBvbGwuYz0zMzg9bmV0ZGV2X3R4X3QgbmV0cG9sbF9zZW5kX3NrYihzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvbmV0cG9sbC5jLTM0Ny1cdFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xubmV0L2NvcmUvbmV0cG9sbC5jOjM0ODpcdFx0cmV0ID0gX19uZXRwb2xsX3NlbmRfc2tiKG5wLCBza2IpO1xubmV0L2NvcmUvbmV0cG9sbC5jLTM0OS1cdFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTIwMQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDc2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBgX19uZXRwb2xsX3NlbmRfc2tiYCBhbmQgaXRzIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIGBfX25ldHBvbGxfc2VuZF9za2JgIGlzIGEgc3RhdGljIGZ1bmN0aW9uIGFuZCBvbmx5IGNhbGxlZCBmcm9tIGBuZXRwb2xsX3NlbmRfc2tiYCwgc28gdGhlIGNvbXBpbGVyIGlzICpsaWtlbHkqIHRvIGlubGluZSBpdC4gVGhhdCBtZWFucyBgbmV0cG9sbF9zZW5kX3NrYmAgZGVmaW5pdGVseSBuZWVkcyB0byBiZSBpbiB0aGUgRm9jdXNTeW1ib2xzIGxpc3QsIGFuZCB3ZSBjYW4gaW5jbHVkZSBgX19uZXRwb2xsX3NlbmRfc2tiYCB0b28sIGJ1dCBvbmx5IGlmIGl0ICppc24mIzM5O3QqIGJlaW5nIGlubGluZWQuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IGlzIHRoaXMgY2hhbmdlIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZz8gTGV0JiMzOTtzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdC4KClRoZSBndWlkZWxpbmVzIGFyZSBwcmV0dHkgY2xlYXI6IFJlYWNoYWJpbGl0eSBpcyB0aGUgcHJpbWFyeSBnYXRlLiBXZSBjYW4gb25seSBmdXp6IGNvZGUgdGhhdCBleGVjdXRlcyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFVucmVhY2hhYmxlIGNvZGUgaXMgYSBuby1nby4gV2UgaGF2ZSBuZWdhdGl2ZSBjcml0ZXJpYSBsaWtlIG5vbi1rZXJuZWwsIG5vbi1leGVjdXRhYmxlIGNoYW5nZXMgYW5kIHVucmVhY2hhYmxlIGhhcmR3YXJlIG9yIGV4ZWN1dGlvbiBwYXRocy4gIFRoaW5ncyBsaWtlIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMgdGhhdCBuZWVkIHBoeXNpY2FsIEFTSUNzIG9yIFBDSSBob3QtdW5wbHVnIGFyZSBvdXQuIFBvc2l0aXZlIGNyaXRlcmlhIGluY2x1ZGUgY29yZSBzdWJzeXN0ZW1zLCByZWZhY3RvcmluZ3MsIGFzc2VydGlvbnMsIGFuZCByZWFjaGFibGUgZHJpdmVycy9wcm90b2NvbHMuCgpSaWdodCwgdGhlIG1vZGlmaWVkIGZpbGUgaXMgYG5ldC9jb3JlL25ldHBvbGwuY2AsIGFuZCB0aGF0JiMzOTtzIHBhcnQgb2YgY29yZSBuZXR3b3JraW5nISBHb29kIHN0YXJ0LiBUaGUgY2hhbmdlIGl0c2VsZiBpcyBpbiBgX19uZXRwb2xsX3NlbmRfc2tiKClgIGFuZCBpcyByZWxhdGVkIHRvIHRoZSB0cmFuc21pdCBxdWV1ZTogSXQgY2FwcyB0aGUgcXVldWUgbGVuZ3RoIGFuZCBmcmVlcyBza2JzIG9uIG92ZXJmbG93IHRvIHByZXZlbnQgdW5ib3VuZGVkIG1lbW9yeSBjb25zdW1wdGlvbiB3aGVuIHRoZSBlZ3Jlc3MgbmV0ZGV2IGlzIGJ1c3kuIGBuZXRwb2xsYCBzdXBwb3J0cyB2aXJ0dWFsIGRldmljZXM6IGR1bW15LCB2ZXRoLCBicmlkZ2UsIGJvbmQsIHRlYW0sIG1hY3ZsYW4sIHdpdGggYG5ldGNvbnNvbGVgIG9yIGJvbmRpbmcvYnJpZGdlL3RlYW0uICBEZWZpbml0ZWx5IHNvdW5kcyBsaWtlIHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIGV4ZXJjaXNlZCBpbiBhIHN0YW5kYXJkIHNldHVwLgoKTGV0JiMzOTtzIGNoZWNrIHRoZSBjb25maWd1cmF0aW9ucy4gTG9va2luZyBhdCB0aGUgYE1ha2VmaWxlYCwgYG9iai0kKENPTkZJR19ORVRQT0xMKSAmIzQzOz0gbmV0cG9sbC5vYCwgdGhlbiBgS2NvbmZpZ2A6IHdlIG5lZWQgYE5FVFBPTExgLCB3aGljaCBpcyBhIGBkZWZfYm9vbGAgZm9yIGBORVRDT05TT0xFYC4gYE5FVENPTlNPTEVgIHJlcXVpcmVzIGBQUklOVEtgLCBhbmQgdGhlcmUmIzM5O3MgYWxzbyBgTkVUQ09OU09MRV9EWU5BTUlDYCB0aGF0IGRlcGVuZHMgb24gYE5FVENPTlNPTEVgIGFuZCBgQ09ORklHRlNfRlNgLiBJbiBgaW5jbHVkZS9saW51eC9uZXRwb2xsLmhgLCBgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJgIGlzIGBkZWZfYm9vbCBORVRQT0xMYC4KCkkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3Igb3RoZXIgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBvciBzZWxlY3Rpb25zIG9mIGBORVRQT0xMYCB1c2luZyBhIGdyZXBwZXIuIEp1c3QgdG8gYmUgdGhvcm91Z2guIEJ1dCwgYmFzZWQgb24gd2hhdCBJJiMzOTt2ZSBzZWVuLCBpdCBsb29rcyB2ZXJ5IHByb21pc2luZy4gVGhpcyBjaGFuZ2UsIGluIGNvcmUgbmV0d29ya2luZywgYWZmZWN0aW5nIGEgZnVuY3Rpb24gdGhhdCYjMzk7cyBwYXJ0IG9mIGBuZXRwb2xsYCB3aGljaCBpcyBjb25maWd1cmFibGUgZm9yIHZpcnR1YWwgZGV2aWNlcywgc2VlbXMgKnZlcnkqIHJlYWNoYWJsZS4gSSYjMzk7ZCBsZWFuIHRvd2FyZHMgdGhpcyBiZWluZyBhIGhpZ2gtcHJpb3JpdHkgZnV6eiB0YXJnZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA0OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05FVFBPTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGU9Mjc9b2JqLSQoQ09ORklHX05FVF9QS1RHRU4pICYjNDM7PSBwa3RnZW4ub1xubmV0L2NvcmUvTWFrZWZpbGU6Mjg6b2JqLSQoQ09ORklHX05FVFBPTEwpICYjNDM7PSBuZXRwb2xsLm9cbm5ldC9jb3JlL01ha2VmaWxlLTI5LW9iai0kKENPTkZJR19GSUJfUlVMRVMpICYjNDM7PSBmaWJfcnVsZXMub1xuLS1cbm5ldC9jb3JlL2Rldi5jPTc2MTI9dm9pZCBuZXRpZl9uYXBpX2FkZF93ZWlnaHRfbG9ja2VkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZGV2LmMtNzYzMS1cdG5hcGktXHUwMDNlZGV2ID0gZGV2O1xubmV0L2NvcmUvZGV2LmM6NzYzMjojaWZkZWYgQ09ORklHX05FVFBPTExcbm5ldC9jb3JlL2Rldi5jLTc2MzMtXHRuYXBpLVx1MDAzZXBvbGxfb3duZXIgPSAtMTtcbi0tXG5uZXQvY29yZS9kZXYuYz0xMzI5OT1zdGF0aWMgdm9pZCBfX2luaXQgbmV0X2Rldl9zdHJ1Y3RfY2hlY2sodm9pZClcbi0tXG5uZXQvY29yZS9kZXYuYy0xMzM0NC1cdENBQ0hFTElORV9BU1NFUlRfR1JPVVBfTUVNQkVSKHN0cnVjdCBuZXRfZGV2aWNlLCBuZXRfZGV2aWNlX3JlYWRfcngsIG5kX25ldCk7XG5uZXQvY29yZS9kZXYuYzoxMzM0NTojaWZkZWYgQ09ORklHX05FVFBPTExcbm5ldC9jb3JlL2Rldi5jLTEzMzQ2LVx0Q0FDSEVMSU5FX0FTU0VSVF9HUk9VUF9NRU1CRVIoc3RydWN0IG5ldF9kZXZpY2UsIG5ldF9kZXZpY2VfcmVhZF9yeCwgbnBpbmZvKTtcbi0tXG5uZXQvY29yZS9uZXRwb2xsLmMtNDYtICovXG5uZXQvY29yZS9uZXRwb2xsLmM6NDc6I2RlZmluZSBORVRQT0xMX1RYUV9NQVhcdDEwMjRcbm5ldC9jb3JlL25ldHBvbGwuYy00OC1cbi0tXG5uZXQvY29yZS9uZXRwb2xsLmM9MjcwPXN0YXRpYyBuZXRkZXZfdHhfdCBfX25ldHBvbGxfc2VuZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL25ldHBvbGwuYy0zMjQtXHRpZiAoIWRldl94bWl0X2NvbXBsZXRlKHN0YXR1cykpIHtcbm5ldC9jb3JlL25ldHBvbGwuYzozMjU6XHRcdGlmIChza2JfcXVldWVfbGVuKFx1MDAyNm5waW5mby1cdTAwM2V0eHEpIFx1MDAzZT0gTkVUUE9MTF9UWFFfTUFYKSB7XG5uZXQvY29yZS9uZXRwb2xsLmMtMzI2LVx0XHRcdGRldl9rZnJlZV9za2JfaXJxKHNrYik7XG4tLVxubmV0L2NvcmUvbmV0cG9sbC5jPTM1NT1pbnQgX19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxubmV0L2NvcmUvbmV0cG9sbC5jLTM2MC1cbm5ldC9jb3JlL25ldHBvbGwuYzozNjE6XHRpZiAobmRldi1cdTAwM2Vwcml2X2ZsYWdzIFx1MDAyNiBJRkZfRElTQUJMRV9ORVRQT0xMKSB7XG5uZXQvY29yZS9uZXRwb2xsLmMtMzYyLVx0XHRucF9lcnIobnAsIFwmIzM0OyVzIGRvZXNuJiMzOTt0IHN1cHBvcnQgcG9sbGluZywgYWJvcnRpbmdcXG5cJiMzNDssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA0OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMjE3CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkludmVzdGlnYXRpbmcgYE5FVFBPTExgIENyb3NzLVJlZmVyZW5jZXMqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGJyb2FkZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgYE5FVFBPTExgIGlzIHV0aWxpemVkIHRocm91Z2hvdXQgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHNwYWNlLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBicm9hZGVyIEtjb25maWcgbGFuZHNjYXBlLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBvciBjb25mbGljdHMgdGhhdCBtaWdodCBhcmlzZSBmcm9tIGhvdyBpdCYjMzk7cyBjb25maWd1cmVkIGluIG90aGVyIGFyZWFzLiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O0xldCYjMzk7cyBjaGVjayBgTkVUUE9MTGAgaW4gb3RoZXIgS2NvbmZpZ3MuJiMzNDsgVGhhdCYjMzk7cyB0aGUgZmlyc3QgbG9naWNhbCBzdGVwLiBHZXQgYSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBORVRQT0xMfGRlcGVuZHMgb24gTkVUUE9MTCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA0OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNDAwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQ2hlY2tpbmcgdGhlIGBORVRDT05TT0xFYCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIGJlZm9yZSB3ZSBkaXZlIGRlZXBlciwgbGV0JiMzOTtzIGp1c3QgcXVpY2tseSBjb25maXJtIHRoYXQgYE5FVENPTlNPTEVgIGlzIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGVsZW1lbnQgZm9yLi4uIHdlbGwsIHlvdSBrbm93LCBuZXR3b3JrIGNvbnNvbGUgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGl0JiMzOTtzIHNldCB1cCBiZWZvcmUgZ29pbmcgZnVydGhlciB3aXRoIHRyb3VibGVzaG9vdGluZyBvciBhbnkgb3RoZXIgcmVsYXRlZCB0YXNrLCBhcyBgTkVUQ09OU09MRWAgaXMgdGhlIGZvdW5kYXRpb24gb24gd2hpY2ggbWFueSBuZXR3b3JrLXJlbGF0ZWQgdGFza3MgZGVwZW5kLiBJdOKAmXMgdGhlIG9idmlvdXMgZmlyc3QgdGhpbmcgdG8gdmVyaWZ5LiBBIHF1aWNrIGNoZWNrIG9mIHRoZSBLY29uZmlnIGZpbGVzIHdpbGwgZWl0aGVyIHByb3ZpZGUgYW4gaW5zdGFudCBjb25maXJtYXRpb24gYW5kIGVuYWJsZSBtZSB0byBnZXQgYSBydW5uaW5nIGtlcm5lbC4gSXQgd2lsbCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQgYmVmb3JlIEkgcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDQ6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XFxiTkVUQ09OU09MRVxcYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTMxOD1jb25maWcgTUFDU0VDXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMjYtXG5kcml2ZXJzL25ldC9LY29uZmlnOjMyNzpjb25maWcgTkVUQ09OU09MRVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMjgtXHR0cmlzdGF0ZSBcJiMzNDtOZXR3b3JrIGNvbnNvbGUgbG9nZ2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz0zMzQ9Y29uZmlnIE5FVENPTlNPTEVfRFlOQU1JQ1xuZHJpdmVycy9uZXQvS2NvbmZpZy0zMzUtXHRib29sIFwmIzM0O0R5bmFtaWMgcmVjb25maWd1cmF0aW9uIG9mIGxvZ2dpbmcgdGFyZ2V0c1wmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzozMzY6XHRkZXBlbmRzIG9uIE5FVENPTlNPTEUgXHUwMDI2XHUwMDI2IFNZU0ZTIFx1MDAyNlx1MDAyNiBDT05GSUdGU19GUyBcdTAwMjZcdTAwMjYgXFxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzM3Olx0XHRcdCEoTkVUQ09OU09MRT15IFx1MDAyNlx1MDAyNiBDT05GSUdGU19GUz1tKVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMzgtXHRzZWxlY3QgUFJJTlRLX0VYRUNVVElPTl9DVFhcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTM0NT1jb25maWcgTkVUQ09OU09MRV9FWFRFTkRFRF9MT0dcbmRyaXZlcnMvbmV0L0tjb25maWctMzQ2LVx0Ym9vbCBcJiMzNDtTZXQga2VybmVsIGV4dGVuZGVkIG1lc3NhZ2UgYnkgZGVmYXVsdFwmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzozNDc6XHRkZXBlbmRzIG9uIE5FVENPTlNPTEVcbmRyaXZlcnMvbmV0L0tjb25maWctMzQ4LVx0ZGVmYXVsdCBuXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz0zNjc9Y29uZmlnIE5FVFBPTExcbmRyaXZlcnMvbmV0L0tjb25maWc6MzY4Olx0ZGVmX2Jvb2wgTkVUQ09OU09MRVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNjktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FseGVkYS94Z21hYy5jPTEzNzg9c3RhdGljIGlycXJldHVybl90IHhnbWFjX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FseGVkYS94Z21hYy5jLTE0MjctI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWx4ZWRhL3hnbWFjLmM6MTQyODovKiBQb2xsaW5nIHJlY2VpdmUgLSB1c2VkIGJ5IE5FVENPTlNPTEUgYW5kIG90aGVyIGRpYWdub3N0aWMgdG9vbHNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhbHhlZGEveGdtYWMuYy0xNDI5LSAqIHRvIGFsbG93IG5ldHdvcmsgSS9PIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4gKi9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zYW1zdW5nL3N4Z2JlL3N4Z2JlX21haW4uYz0xODQ5PXN0YXRpYyB2b2lkIHN4Z2JlX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2Ftc3VuZy9zeGdiZS9zeGdiZV9tYWluLmMtMTkxOS0gKiBEZXNjcmlwdGlvbjpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NhbXN1bmcvc3hnYmUvc3hnYmVfbWFpbi5jOjE5MjA6ICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJ5IE5FVENPTlNPTEUgYW5kIG90aGVyIGRpYWdub3N0aWMgdG9vbHNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NhbXN1bmcvc3hnYmUvc3hnYmVfbWFpbi5jLTE5MjEtICogdG8gYWxsb3cgbmV0d29yayBJL08gd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3ZpYS92aWEtdmVsb2NpdHkuYz0yMjkwPXN0YXRpYyBpbnQgdmVsb2NpdHlfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC92aWEvdmlhLXZlbG9jaXR5LmMtMjM2Ny0gKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdmlhL3ZpYS12ZWxvY2l0eS5jOjIzNjg6ICogIFVzZWQgYnkgTkVUQ09OU09MRSBhbmQgb3RoZXIgZGlhZ25vc3RpYyB0b29scyB0byBhbGxvdyBuZXR3b3JrIEkvUFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdmlhL3ZpYS12ZWxvY2l0eS5jLTIzNjktICogIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDQ6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIzNTQKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA3OTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBuZXRjb25zb2xlYCBhbmQgYG5ldHBvbGxgIENvbmZpZ3VyYXRpb24gYW5kIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBgTkVUQ09OU09MRWAgYW5kIGBORVRQT0xMYCBjb25maWd1cmF0aW9uLCBhbmQgaXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gYE5FVENPTlNPTEVgIHNldHMgYE5FVFBPTExgLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhlbiBgTkVUQ09OU09MRV9EWU5BTUlDYCBlbmFibGVzIHRoZSBhYmlsaXR5IHRvIGR5bmFtaWNhbGx5IHJlY29uZmlndXJlIHRoZSB0YXJnZXQgdmlhIGNvbmZpZ2ZzIC0gd2hpY2ggaXMga2V5IGZvciB0b29scyBsaWtlIHN5emthbGxlciBvciB1c2Vyc3BhY2UgcHJvZ3JhbXMuIFNvLCB0aG9zZSB0d28gYXJlIHRoZSBtYWluIGNvbmZpZ3MgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4gQWN0dWFsbHksIGBORVRQT0xMYCBpcyBqdXN0IGEgYGRlZl9ib29sYCB0aGF0IG1pcnJvcnMgdGhlIHZhbHVlIG9mIGBORVRDT05TT0xFYC4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29kZS4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYWZmZWN0ZWQgZnVuY3Rpb25zLCB1c2luZyB0aGUgRm9jdXNTeW1ib2xzIHRvIHRhcmdldCB0aGUgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIGRpcmVjdGx5IG1vZGlmaWVkLCBvciBhcmUgY2FsbGVkLiBJIHNlZSB0aGF0IHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIGRpcmVjdGx5IG1vZGlmaWVkIGlzIGBfX25ldHBvbGxfc2VuZF9za2JgLiBUaGVyZSYjMzk7cyBhbHNvIGEgbm9uLXN0YXRpYyBleHBvcnRlZCB3cmFwcGVyIGZ1bmN0aW9uLCBgbmV0cG9sbF9zZW5kX3NrYmAuIEFuZCB0aGVuLCB0aGUgZW50cnkgcG9pbnRzIGBuZXRwb2xsX3NlbmRfdWRwYCBhbmQgdGhlIGBxdWV1ZV9wcm9jZXNzYCwgdGhhdCB3b3JrcyBvbiBgbnBpbmZvLSZndDt0eHFgIC0gd2hpY2ggaXMgYSBzaWduaWZpY2FudCBwYXJ0IG9mIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkuIEkgc2hvdWxkIG5vdGUgdGhhdCBgcXVldWVfcHJvY2Vzc2AgaXMgc3RhdGljIGluIGBuZXQvY29yZS9uZXRwb2xsLmNgLCBzbyBpdCYjMzk7cyBub3QgZGlyZWN0bHkgZXhwb3J0ZWQsIGFuZCBpdCBsb29rcyBsaWtlIGEgd29yayBoYW5kbGVyIGZvciBgJmFtcDtucGluZm8tJmd0O3R4X3dvcmtgLiBUaGUgYG5ldHBvbGxfc2VuZF9za2JgIGlzIGV4cG9ydGVkIHVzaW5nIGBFWFBPUlRfU1lNQk9MYC4KCkkmIzM5O3ZlIGFsc28gY2hlY2tlZCB0aGUgZnVsbCBsaXN0IG9mIGZ1bmN0aW9ucyBpbiBgbmV0L2NvcmUvbmV0cG9sbC5jYCwgYW5kIHRoYXQgY29uZmlybXMgdGhhdCBvbmx5IHRoZSB0aHJlZSBmdW5jdGlvbnMgLSBgX19uZXRwb2xsX3NlbmRfc2tiYCwgYG5ldHBvbGxfc2VuZF9za2JgLCBhbmQgYHF1ZXVlX3Byb2Nlc3NgIGhhdmUgYmVlbiB0b3VjaGVkLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgYWN0dWFsIGRpZmYuIFRoZSBjb2RlIGNoYW5nZXMgYXJlIGFsbCB3aXRoaW4gYF9fbmV0cG9sbF9zZW5kX3NrYmAuIFRoZSBrZXkgYWRkaXRpb24gaXMgYSBjaGVjayBvbiB0aGUgbnVtYmVyIG9mIHBhY2tldHMgaGVsZCBpbiBgbnBpbmZvLSZndDt0eHFgLiBJdCBsb29rcyBsaWtlIHRoZXJlJiMzOTtzIGEgbmV3IGBORVRQT0xMX1RYUV9NQVhgIGxpbWl0IChkZWZpbmVkIGFzIDEwMjQpLCBhbmQgaWYgdGhlIHF1ZXVlIGV4Y2VlZHMgdGhhdCwgdGhlIG5ldyBjb2RlIHdpbGwgZHJvcCB0aGUgcGFja2V0IGluc3RlYWQgb2YgZ3Jvd2luZyB0aGUgcXVldWUgaW5kZWZpbml0ZWx5LiBUaGF0IG1ha2VzIHNlbnNlLCB0byBwcmV2ZW50IHJlc291cmNlIGV4aGF1c3Rpb24gZnJvbSBhIHN0YWxsZWQgZGV2aWNlLCBhbmQgdGhhdCYjMzk7cyBhIGdvb2QgY2hhbmdlLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQuIFRoaXMgaXMgYSBjb21tb24gcGF0dGVybiBpbiBkcml2ZXJzLgoKSSYjMzk7dmUgZG91YmxlLWNoZWNrZWQgdGhhdCB0aGVyZSBhcmUgbm8gb3RoZXIgY2hhbmdlcyBpbiB0aGUgSEVBRCBjb21taXQsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORVRQT0xMX1RYUV9NQVgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0cG9sbC5jLTQ2LSAqL1xubmV0L2NvcmUvbmV0cG9sbC5jOjQ3OiNkZWZpbmUgTkVUUE9MTF9UWFFfTUFYXHQxMDI0XG5uZXQvY29yZS9uZXRwb2xsLmMtNDgtXG4tLVxubmV0L2NvcmUvbmV0cG9sbC5jPTI3MD1zdGF0aWMgbmV0ZGV2X3R4X3QgX19uZXRwb2xsX3NlbmRfc2tiKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9uZXRwb2xsLmMtMzI0LVx0aWYgKCFkZXZfeG1pdF9jb21wbGV0ZShzdGF0dXMpKSB7XG5uZXQvY29yZS9uZXRwb2xsLmM6MzI1Olx0XHRpZiAoc2tiX3F1ZXVlX2xlbihcdTAwMjZucGluZm8tXHUwMDNldHhxKSBcdTAwM2U9IE5FVFBPTExfVFhRX01BWCkge1xubmV0L2NvcmUvbmV0cG9sbC5jLTMyNi1cdFx0XHRkZXZfa2ZyZWVfc2tiX2lycShza2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzkyNAoJCQkJCQkJb3V0cHV0OiAxNzkKCQkJCQkJCXRob3VnaHRzOiAzNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IG5ldC9jb3JlL25ldHBvbGwuYyoqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlLCB0aGUgYGdpdCBsb2cgLTFgIHNob3dzIGEgcmVjZW50IGNvbW1pdCBtb2RpZnlpbmcgYG5ldC9jb3JlL25ldHBvbGwuY2AuIFRoaXMgaXMgaW50ZXJlc3Rpbmc7IEkgc2VlIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBxdWV1ZSBsZW5ndGggY2hlY2sgd2l0aGluIGBfX25ldHBvbGxfc2VuZF9za2JgLiBTcGVjaWZpY2FsbHksIGl0IGNoZWNrcyBpZiBgc2tiX3F1ZXVlX2xlbigmYW1wO25waW5mby0mZ3Q7dHhxKWAgZXhjZWVkcyBgTkVUUE9MTF9UWFFfTUFYYC4gSWYgaXQgZG9lcywgdGhlIFNLQiBpcyBkcm9wcGVkIHVzaW5nIGBkZXZfa2ZyZWVfc2tiX2lycShza2IpYCwgcmV0dXJuaW5nIGBORVRfWE1JVF9EUk9QYC4gVGhpcyBwcm90ZWN0cyBhZ2FpbnN0IHVuYm91bmRlZCBxdWV1ZSBncm93dGggaW4gYG5waW5mby0mZ3Q7dHhxYC4KClRoaXMgY29kZSBsaXZlcyB3aXRoaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0sIHdoaWNoIG1lYW5zIGl0IGNhbiBiZSByZWFjaGVkIHRocm91Z2ggdmlydHVhbCBuZXR3b3JrIGRldmljZXMsIG5ldGNvbnNvbGUsIGR5bmFtaWMgbmV0Y29uc29sZSwgb3IgZXZlbiBuZXR3b3JraW5nIHN0YWNrcyBsaWtlIGJvbmRpbmcsIHRlYW1pbmcsIG9yIGJyaWRnaW5nLCAqaWYqIG5ldHBvbGwgaXMgZW5hYmxlZC4gVGhlIHBvdGVudGlhbCBoZXJlIGZvciBmdXp6aW5nIGlzIHNpZ25pZmljYW50LiBJJiMzOTttIHRoaW5raW5nIHdlIGNvdWxkIHVuY292ZXIgaXNzdWVzIGFyb3VuZCBwYWNrZXQgZHJvcHBpbmcgc2NlbmFyaW9zLCByZWZjb3VudGluZyBvZiBTS0JzIGFuZCB0aGVpciBsaWZlY3ljbGUsIGVzcGVjaWFsbHkgYXJvdW5kIGZyZWVpbmcgdGhlIFNLQiB3aXRoIGBkZXZfa2ZyZWVfc2tiX2lycWAgd2hlbiBjYWxsZXJzIG1heSBleHBlY3Qgc29tZXRoaW5nIGRpZmZlcmVudCwgb3IgZXZlbiBkb3VibGUtZnJlZXMuIFdlIHNob3VsZCBhbHNvIGJlIG9uIHRoZSBsb29rb3V0IGZvciBsb2NrZGVwIGlzc3VlcyBhbmQgcG90ZW50aWFsIHN0YXRlLWhhbmRsaW5nIHByb2JsZW1zIHdoZW4gdGhpcyBxdWV1ZSBvdmVyZmxvd3MuCgpUaGVyZWZvcmUsIG15IGV2YWx1YXRpb246CgoqICAgKipXb3J0aEZ1enppbmc6IHRydWUqKiAoZGVmaW5pdGVseSB3b3J0aCB0aGUgZWZmb3J0KQoqICAgKipFbmFibGVDb25maWdzOiBbJiMzNDtORVRQT0xMJiMzNDssICYjMzQ7TkVUQ09OU09MRSYjMzQ7LCAmIzM0O05FVENPTlNPTEVfRFlOQU1JQyYjMzQ7XSoqICh3ZSBuZWVkIHRob3NlIGVuYWJsZWQgdG8gaGl0IHRoaXMgY29kZSkKKiAgICoqRm9jdXNTeW1ib2xzOiBbJiMzNDtfX25ldHBvbGxfc2VuZF9za2ImIzM0OywgJiMzNDtuZXRwb2xsX3NlbmRfc2tiJiMzNDssICYjMzQ7cXVldWVfcHJvY2VzcyYjMzQ7XSoqIChUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgdG8gdGFyZ2V0IGZvciBmdXp6aW5nLiBJIGluY2x1ZGUgYHF1ZXVlX3Byb2Nlc3NgIGJlY2F1c2UgaWYgc29tZXRoaW5nIGlzIHdyb25nIHdpdGggYSBxdWV1ZSwgd2Ugc2hvdWxkIGJlIGFibGUgdG8gdHJpZ2dlciBpdCwgYW5kIHRoaXMgaXMgd2hlcmUgaXQgaGFwcGVucykuCgpOb3csIGxldCYjMzk7cyBtYWtlIHN1cmUgZXZlcnl0aGluZyByZXF1aXJlZCBpcyBpbiBwbGFjZS4gV2UgbmVlZDoKCiogICBgV29ydGhGdXp6aW5nYDogQm9vbGVhbiAtIENoZWNrIQoqICAgYEZvY3VzU3ltYm9sc2A6IExpc3Qgb2Ygc3RyaW5ncyB3aXRoIHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdG8gZm9jdXMgb24gLSBDaGVjayEKKiAgIGBFbmFibGVDb25maWdzYDogTGlzdCBvZiBzdHJpbmdzIHdpdGhvdXQgdGhlIGBDT05GSUdfYCBwcmVmaXggLSBDaGVjayEKKiAgIGBSZWFzb25pbmdgOiBDb25jaXNlIGV4cGxhbmF0aW9uIG9mIHRoZSB2ZXJkaWN0IC0gQ2hlY2shCgpFdmVyeXRoaW5nIGlzIHNvdW5kLiBUaW1lIHRvIHJ1biBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUUE9MTCYjMzQ7LAogICAgJiMzNDtORVRDT05TT0xFJiMzNDssCiAgICAmIzM0O05FVENPTlNPTEVfRFlOQU1JQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fbmV0cG9sbF9zZW5kX3NrYiYjMzQ7LAogICAgJiMzNDtuZXRwb2xsX3NlbmRfc2tiJiMzNDssCiAgICAmIzM0O3F1ZXVlX3Byb2Nlc3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHF1ZXVlIGxlbmd0aCBsaW1pdCAoTkVUUE9MTF9UWFFfTUFYKSBpbiBfX25ldHBvbGxfc2VuZF9za2IoKSBpbiBuZXQvY29yZS9uZXRwb2xsLmMgdG8gcHJldmVudCB1bmJvdW5kZWQgc2tiIHF1ZXVlIGdyb3d0aCB3aGVuIGEgZGV2aWNlIGlzIHN0YWxsZWQgb3IgYnVzeS4gQ29yZSBuZXR3b3JraW5nIGNvZGUgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgdmlydHVhbCBuZXR3b3JrIGRldmljZXMgYW5kIG5ldGNvbnNvbGUgKGluY2x1ZGluZyBkeW5hbWljYWxseSByZWNvbmZpZ3VyZWQgdGFyZ2V0cyB2aWEgY29uZmlnZnMpLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHNrYiBsaWZlY3ljbGUsIHF1ZXVlIG92ZXJmbG93IGhhbmRsaW5nLCBhbmQgcGFja2V0IGRyb3AgZWRnZSBjYXNlcyBpbiB0aGUgbmV0cG9sbCB0cmFuc21pdCBwYXRoLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRQT0xMJiMzNDssCiAgICAmIzM0O05FVENPTlNPTEUmIzM0OywKICAgICYjMzQ7TkVUQ09OU09MRV9EWU5BTUlDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19uZXRwb2xsX3NlbmRfc2tiJiMzNDssCiAgICAmIzM0O25ldHBvbGxfc2VuZF9za2ImIzM0OywKICAgICYjMzQ7cXVldWVfcHJvY2VzcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgcXVldWUgbGVuZ3RoIGxpbWl0IChORVRQT0xMX1RYUV9NQVgpIGluIF9fbmV0cG9sbF9zZW5kX3NrYigpIGluIG5ldC9jb3JlL25ldHBvbGwuYyB0byBwcmV2ZW50IHVuYm91bmRlZCBza2IgcXVldWUgZ3Jvd3RoIHdoZW4gYSBkZXZpY2UgaXMgc3RhbGxlZCBvciBidXN5LiBDb3JlIG5ldHdvcmtpbmcgY29kZSBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlcyBhbmQgbmV0Y29uc29sZSAoaW5jbHVkaW5nIGR5bmFtaWNhbGx5IHJlY29uZmlndXJlZCB0YXJnZXRzIHZpYSBjb25maWdmcykuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3Qgc2tiIGxpZmVjeWNsZSwgcXVldWUgb3ZlcmZsb3cgaGFuZGxpbmcsIGFuZCBwYWNrZXQgZHJvcCBlZGdlIGNhc2VzIGluIHRoZSBuZXRwb2xsIHRyYW5zbWl0IHBhdGguJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA0OjI5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDQ6Mjk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgcXVldWUgbGVuZ3RoIGNhcCAoTkVUUE9MTF9UWFFfTUFYID0gMTAyNCkgb24gdGhlIG5ldHBvbGwgdHJhbnNtaXNzaW9uIHF1ZXVlIChucGluZm8tXHUwMDNldHhxKSBpbiBuZXQvY29yZS9uZXRwb2xsLmMgdG8gcHJldmVudCB1bmJvdW5kZWQgcXVldWUgZ3Jvd3RoIHdoZW4gdHJhbnNtaXNzaW9uIHN0YWxscy4gSWYgdGhlIHF1ZXVlIGxpbWl0IGlzIHJlYWNoZWQsIHRoZSBza2IgaXMgZnJlZWQgd2l0aCBkZXZfa2ZyZWVfc2tiX2lycShza2IpIGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyBORVRfWE1JVF9EUk9QLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OlxuMS4gTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcyBhcmUgY3JlYXRlZCBvciByZWFkLiBUaGUgcXVldWUgbGVuZ3RoIGNoZWNrIG9wZXJhdGVzIG9uIG5waW5mby1cdTAwM2V0eHEsIGFuIGFscmVhZHkgaW5pdGlhbGl6ZWQgc2tfYnVmZl9oZWFkLlxuMi4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiBrZXJuZWwgaW5mb3JtYXRpb24gZGlzY2xvc3VyZS5cbjMuIE5vIGJ1ZmZlciBib3VuZHMgb3IgcGFja2V0IHBheWxvYWQgb2Zmc2V0cyBhcmUgbW9kaWZpZWQgaW4gd2F5cyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSBieXRlcy5cblxuQW55IHBvdGVudGlhbCBidWdzIHJlc3VsdGluZyBmcm9tIHRoaXMgY2hhbmdlIChlLmcuLCBwYWNrZXQgbGlmZWN5Y2xlIGVycm9ycyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIG9mIHRoZSBza2IpIGFyZSBhZGRyZXNzZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBtZW1vcnkgZGVidWdnaW5nLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5MDgxNGFhMTU5MmU1Y2M2NzViZjE5OTVkMmUxODRlNmJiZjk5MWU1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgMTQgMDQ6MjY6NDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRwb2xsLmMgYi9uZXQvY29yZS9uZXRwb2xsLmMKaW5kZXggZmUxZTBjZGE1ZDZiZi4uOGZkNjQwOTU1ZTQ2MyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmV0cG9sbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL25ldHBvbGwuYwpAQCAtMzgsNiAmIzQzOzM4LDE0IEBACiAKICNkZWZpbmUgVVNFQ19QRVJfUE9MTAk1MAogCiYjNDM7LyoKJiM0MzsgKiBDYXAgb24gc2ticyBwYXJrZWQgaW4gbnBpbmZvLSZndDt0eHEgd2hpbGUgdGhlIGRldmljZSBpcyBidXN5LiBUaGUgcXVldWUKJiM0MzsgKiBleGlzdHMgdG8gcmlkZSBvdXQgYSB0cmFuc2llbnQgc3RhbGw7IGEgcHJvZHVjZXIgdGhhdCBvdXRydW5zIHRoZQomIzQzOyAqIGRldmljZSBmb3IgbG9uZ2VyIHRoYW4gdGhhdCBtdXN0IGxvc2UgcGFja2V0cywgbm90IGdyb3cgaXQgd2l0aG91dAomIzQzOyAqIGJvdW5kLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgTkVUUE9MTF9UWFFfTUFYCTEwMjQKJiM0MzsKIC8qCiAgKiBjYXJyaWVyX3RpbWVvdXQgaXMgbmV0Y29uc29sZS1zcGVjaWZpYyBhbmQgb25seSBrZXB0IGhlcmUgdG8gcHJlc2VydmUgdGhlCiAgKiBuZXRwb2xsLmNhcnJpZXJfdGltZW91dCBtb2R1bGUtcGFyYW1ldGVyIEFCSS4gSXRzIHZhbHVlIGlzIGV4cG9zZWQgdG8KQEAgLTMxNCw2ICYjNDM7MzIyLDEwIEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBfX25ldHBvbGxfc2VuZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCX0KIAogCWlmICghZGV2X3htaXRfY29tcGxldGUoc3RhdHVzKSkgewomIzQzOwkJaWYgKHNrYl9xdWV1ZV9sZW4oJmFtcDtucGluZm8tJmd0O3R4cSkgJmd0Oz0gTkVUUE9MTF9UWFFfTUFYKSB7CiYjNDM7CQkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KIAkJc2tiX3F1ZXVlX3RhaWwoJmFtcDtucGluZm8tJmd0O3R4cSwgc2tiKTsKIAkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhbXA7bnBpbmZvLSZndDt0eF93b3JrLDApOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA0OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNzIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLgoKKipBbmFseXppbmcgdGhpcyBLZXJuZWwgUGF0Y2gqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGlzIHBhdGNoLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGl0JiMzOTtzIGhpdHRpbmcgYG5ldC9jb3JlL25ldHBvbGwuY2AsIHdoaWNoLCBhcyB5b3Uga25vdywgZGVhbHMgd2l0aCBuZXR3b3JrIHBvbGxpbmcuIEdvb2QsIHRoYXQgbmFycm93cyB0aGUgZm9jdXMuIExldCYjMzk7cyBnZXQgdGhlIGNvbnRleHQsIEkmIzM5O2xsIHVzZSBgcmVhZC1maWxlYCB0byBnZXQgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhhdCBmaWxlLCBhbmQgSSYjMzk7bGwganVtcCByaWdodCBhcm91bmQgbGluZSAzMTQuIFRoYXQmIzM5O3MgdXN1YWxseSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgdG8gc2VlIHdoZXJlIHRoaXMgcGF0Y2ggaXMgc2xvdHRlZCBpbiBhbmQgdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgbG9naWMuIFRpbWUgdG8gZGl2ZSBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDQ6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9uZXRwb2xsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMwMDpcdFx0XHQgICAgIHRyaWVzIFx1MDAzZSAwOyAtLXRyaWVzKSB7XG4gMzAxOlx0XHRcdFx0aWYgKEhBUkRfVFhfVFJZTE9DSyhkZXYsIHR4cSkpIHtcbiAzMDI6XHRcdFx0XHRcdGlmICghbmV0aWZfeG1pdF9zdG9wcGVkKHR4cSkpXG4gMzAzOlx0XHRcdFx0XHRcdHN0YXR1cyA9IG5ldHBvbGxfc3RhcnRfeG1pdChza2IsIGRldiwgdHhxKTtcbiAzMDQ6XHRcbiAzMDU6XHRcdFx0XHRcdEhBUkRfVFhfVU5MT0NLKGRldiwgdHhxKTtcbiAzMDY6XHRcbiAzMDc6XHRcdFx0XHRcdGlmIChkZXZfeG1pdF9jb21wbGV0ZShzdGF0dXMpKVxuIDMwODpcdFx0XHRcdFx0XHRicmVhaztcbiAzMDk6XHRcbiAzMTA6XHRcdFx0XHR9XG4gMzExOlx0XG4gMzEyOlx0XHRcdFx0LyogdGlja2xlIGRldmljZSBtYXliZSB0aGVyZSBpcyBzb21lIGNsZWFudXAgKi9cbiAzMTM6XHRcdFx0XHRuZXRwb2xsX3BvbGxfZGV2KG5wLVx1MDAzZWRldik7XG4gMzE0Olx0XG4gMzE1Olx0XHRcdFx0dWRlbGF5KFVTRUNfUEVSX1BPTEwpO1xuIDMxNjpcdFx0XHR9XG4gMzE3Olx0XG4gMzE4Olx0XHRcdFdBUk5fT05DRSghaXJxc19kaXNhYmxlZCgpLFxuIDMxOTpcdFx0XHRcdFwmIzM0O25ldHBvbGxfc2VuZF9za2Jfb25fZGV2KCk6ICVzIGVuYWJsZWQgaW50ZXJydXB0cyBpbiBwb2xsICglcFMpXFxuXCYjMzQ7LFxuIDMyMDpcdFx0XHRcdGRldi1cdTAwM2VuYW1lLCBkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fc3RhcnRfeG1pdCk7XG4gMzIxOlx0XG4gMzIyOlx0XHR9XG4gMzIzOlx0XG4gMzI0Olx0XHRpZiAoIWRldl94bWl0X2NvbXBsZXRlKHN0YXR1cykpIHtcbiAzMjU6XHRcdFx0aWYgKHNrYl9xdWV1ZV9sZW4oXHUwMDI2bnBpbmZvLVx1MDAzZXR4cSkgXHUwMDNlPSBORVRQT0xMX1RYUV9NQVgpIHtcbiAzMjY6XHRcdFx0XHRkZXZfa2ZyZWVfc2tiX2lycShza2IpO1xuIDMyNzpcdFx0XHRcdGdvdG8gb3V0O1xuIDMyODpcdFx0XHR9XG4gMzI5Olx0XHRcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNm5waW5mby1cdTAwM2V0eHEsIHNrYik7XG4gMzMwOlx0XHRcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZucGluZm8tXHUwMDNldHhfd29yaywwKTtcbiAzMzE6XHRcdH1cbiAzMzI6XHRcdHJldCA9IE5FVERFVl9UWF9PSztcbiAzMzM6XHRvdXQ6XG4gMzM0Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAzMzU6XHRcdHJldHVybiByZXQ7XG4gMzM2Olx0fVxuIDMzNzpcdFxuIDMzODpcdG5ldGRldl90eF90IG5ldHBvbGxfc2VuZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDMzOTpcdHtcbiAzNDA6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gMzQxOlx0XHRuZXRkZXZfdHhfdCByZXQ7XG4gMzQyOlx0XG4gMzQzOlx0XHRpZiAodW5saWtlbHkoIW5wKSkge1xuIDM0NDpcdFx0XHRkZXZfa2ZyZWVfc2tiX2lycShza2IpO1xuIDM0NTpcdFx0XHRyZXQgPSBORVRfWE1JVF9EUk9QO1xuIDM0NjpcdFx0fSBlbHNlIHtcbiAzNDc6XHRcdFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xuIDM0ODpcdFx0XHRyZXQgPSBfX25ldHBvbGxfc2VuZF9za2IobnAsIHNrYik7XG4gMzQ5Olx0XHRcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDQ6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI0NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldHBvbGwgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJIHNlZSBhIGBkaWZmYCBvdXRwdXQsIHdoaWNoIG1lYW5zIHdlJiMzOTtyZSBsb29raW5nIGF0IGNoYW5nZXMgdG8gdGhlIGBuZXRwb2xsLmNgIGZpbGUgaW4gdGhlIGBuZXQvY29yZWAgZGlyZWN0b3J5LiBUaGUgcHJpbWFyeSBmb2N1cyBzZWVtcyB0byBiZSBhIG5ldyBkZWZpbml0aW9uLCBgTkVUUE9MTF9UWFFfTUFYYCwgc2V0IHRvIDEwMjQuIFRoaXMgaXMgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGUgY29tbWVudCBjbGFyaWZpZXMgdGhhdCBpdCYjMzk7cyBhIGNhcCBvbiB0aGUgbnVtYmVyIG9mIFNLQnMgKHNvY2tldCBidWZmZXIpIHBhcmtlZCBpbiB0aGUgYG5waW5mby0mZ3Q7dHhxYCBxdWV1ZSB3aGlsZSB0aGUgbmV0d29yayBkZXZpY2UgaXMgYnVzeS4gVGhlIGNvbW1lbnQgY2xlYXJseSBzdGF0ZXMgdGhlIHF1ZXVlIGV4aXN0cyB0byBoYW5kbGUgYnJpZWYgZGV2aWNlIHN0YWxscywgYW5kIHRoZSBpbXBsZW1lbnRhdGlvbiB3aWxsIGJlZ2luIGRpc2NhcmRpbmcgcGFja2V0cyBvbmNlIGl0IGhpdHMgdGhhdCBsaW1pdC4gVGhhdCYjMzk7cyBnb29kLCBwcmV2ZW50cyBhbiB1bmJvdW5kZWQgcXVldWUgdGhhdCBjb3VsZCBsZWFkIHRvIG1lbW9yeSBleGhhdXN0aW9uLiBTbywgaW5zdGVhZCBvZiBsZXR0aW5nIGl0IGdyb3cgaW5kZWZpbml0ZWx5IGlmIHRoZSBkZXZpY2UgaXMgcGVyc2lzdGVudGx5IGJ1c3ksIHdlJiMzOTtyZSBub3cgaW1wbGVtZW50aW5nIGJhY2twcmVzc3VyZSBhbmQgZHJvcHBpbmcgcGFja2V0cyBhZnRlciBhIHRocmVzaG9sZC4gU21hcnQuCgpUaGVuLCB0aGVyZSYjMzk7cyBhIG5ldyBgaWZgIGJsb2NrIGluc2lkZSBgX19uZXRwb2xsX3NlbmRfc2tiYC4gSWYgdGhlIGRldmljZSB0cmFuc21pdCBpc24mIzM5O3QgY29tcGxldGUgKG1lYW5pbmcgaXQmIzM5O3MgYnVzeSksIGFuZCB0aGUgYHR4cWAgbGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgTkVUUE9MTF9UWFFfTUFYYCwgdGhlIFNLQiBpcyBmcmVlZCwgYW5kIHdlIGBnb3RvIG91dGAuIE90aGVyd2lzZSwgdGhlIFNLQiBpcyBxdWV1ZWQgYW5kIGEgZGVsYXllZCB3b3JrIGl0ZW0gaXMgc2NoZWR1bGVkLiBUaGUgbmV3IGltcGxlbWVudGF0aW9uIHByZXZlbnRzIGFuIHVuYm91bmRlZCBpbmNyZWFzZSBpbiB0aGUgc2l6ZSBvZiBgbnBpbmZvLSZndDt0eHFgIGJ5IGRpc2NhcmRpbmcgcGFja2V0cyBpZiB0aGUgZGV2aWNlIGlzIHRvbyBzbG93LgoKTm93LCBJJiMzOTttIGp1c3QgY3VyaW91cyBhYm91dCBob3cgYF9fbmV0cG9sbF9zZW5kX3NrYmAgaGFuZGxlcyB0aGUgcmV0dXJuIHZhbHVlIG9yIGFueSBlcnJvcnMuIExldCBtZSBxdWlja2x5IHNjYW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHNwZWNpZmljYWxseSBsaW5lcyAyNzAtMzAwIG9mIHRoZSBzYW1lIGZpbGUsIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGxvY2FsIHZhcmlhYmxlcyBiZWluZyB1c2VkIGFuZCBob3cgZXJyb3JzIG1pZ2h0IGJlIGhhbmRsZWQgb3IgaWYgdGhlIHJldHVybiB2YXJpYWJsZSBpcyBpbml0aWFsaXplZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDQ6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9uZXRwb2xsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI3MDpcdHN0YXRpYyBuZXRkZXZfdHhfdCBfX25ldHBvbGxfc2VuZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDI3MTpcdHtcbiAyNzI6XHRcdG5ldGRldl90eF90IHN0YXR1cyA9IE5FVERFVl9UWF9CVVNZO1xuIDI3MzpcdFx0bmV0ZGV2X3R4X3QgcmV0ID0gTkVUX1hNSVRfRFJPUDtcbiAyNzQ6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4gMjc1Olx0XHR1bnNpZ25lZCBsb25nIHRyaWVzO1xuIDI3NjpcdFx0LyogSXQgaXMgdXAgdG8gdGhlIGNhbGxlciB0byBrZWVwIG5waW5mbyBhbGl2ZS4gKi9cbiAyNzc6XHRcdHN0cnVjdCBuZXRwb2xsX2luZm8gKm5waW5mbztcbiAyNzg6XHRcbiAyNzk6XHRcdGxvY2tkZXBfYXNzZXJ0X2lycXNfZGlzYWJsZWQoKTtcbiAyODA6XHRcbiAyODE6XHRcdGRldiA9IG5wLVx1MDAzZWRldjtcbiAyODI6XHRcdC8qIG5waW5mby1cdTAwM2V0eHEgYmVsb25ncyB0byBucC1cdTAwM2VkZXYsIHNvIHJldHJpZXMgbXVzdCBzdGF5IGJvdW5kIHRvIGl0LiAqL1xuIDI4MzpcdFx0c2tiLVx1MDAzZWRldiA9IGRldjtcbiAyODQ6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiAyODU6XHRcdG5waW5mbyA9IHJjdV9kZXJlZmVyZW5jZV9iaChkZXYtXHUwMDNlbnBpbmZvKTtcbiAyODY6XHRcbiAyODc6XHRcdGlmICghbnBpbmZvIHx8ICFuZXRpZl9ydW5uaW5nKGRldikgfHwgIW5ldGlmX2RldmljZV9wcmVzZW50KGRldikpIHtcbiAyODg6XHRcdFx0ZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTtcbiAyODk6XHRcdFx0Z290byBvdXQ7XG4gMjkwOlx0XHR9XG4gMjkxOlx0XG4gMjkyOlx0XHQvKiBkb24mIzM5O3QgZ2V0IG1lc3NhZ2VzIG91dCBvZiBvcmRlciwgYW5kIG5vIHJlY3Vyc2lvbiAqL1xuIDI5MzpcdFx0aWYgKHNrYl9xdWV1ZV9sZW4oXHUwMDI2bnBpbmZvLVx1MDAzZXR4cSkgPT0gMCBcdTAwMjZcdTAwMjYgIW5ldHBvbGxfb3duZXJfYWN0aXZlKGRldikpIHtcbiAyOTQ6XHRcdFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxO1xuIDI5NTpcdFxuIDI5NjpcdFx0XHR0eHEgPSBuZXRkZXZfY29yZV9waWNrX3R4KGRldiwgc2tiLCBOVUxMKTtcbiAyOTc6XHRcbiAyOTg6XHRcdFx0LyogdHJ5IHVudGlsIG5leHQgY2xvY2sgdGljayAqL1xuIDI5OTpcdFx0XHRmb3IgKHRyaWVzID0gamlmZmllc190b191c2VjcygxKS9VU0VDX1BFUl9QT0xMO1xuIDMwMDpcdFx0XHQgICAgIHRyaWVzIFx1MDAzZSAwOyAtLXRyaWVzKSB7XG4gMzAxOlx0XHRcdFx0aWYgKEhBUkRfVFhfVFJZTE9DSyhkZXYsIHR4cSkpIHtcbiAzMDI6XHRcdFx0XHRcdGlmICghbmV0aWZfeG1pdF9zdG9wcGVkKHR4cSkpXG4gMzAzOlx0XHRcdFx0XHRcdHN0YXR1cyA9IG5ldHBvbGxfc3RhcnRfeG1pdChza2IsIGRldiwgdHhxKTtcbiAzMDQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDQ6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc1MAoJCQkJCQkJb3V0cHV0OiAyNjgKCQkJCQkJCXRob3VnaHRzOiA5ODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTkVUUE9MTCBUWCBRdWV1ZSBMaW1pdCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIHNhZmUgZnJvbSBhIEtNU0FOIHBlcnNwZWN0aXZlLCBhbmQgSSYjMzk7bSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAuIExldCYjMzk7cyB3YWxrIHRocm91Z2ggdGhlIGxvZ2ljLgoKRmlyc3QsIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY2FwLCBgTkVUUE9MTF9UWFFfTUFYYCwgb24gdGhlIHNpemUgb2YgdGhlIGBucGluZm8tJmd0O3R4cWAgcXVldWUuIFRoaXMgaXMgYSBjcnVjaWFsIGFkZGl0aW9uIHRvIHByZXZlbnQgdW5ib3VuZGVkIHF1ZXVlIGdyb3d0aCwgd2hpY2ggY291bGQgbGVhZCB0byBvdXQtb2YtbWVtb3J5IHNpdHVhdGlvbnMgb3IgcmVzb3VyY2UgZXhoYXVzdGlvbi4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyB0aGlzOiBpZiB0aGUgcXVldWUgaXMgZnVsbCAobGVuZ3RoIGV4Y2VlZHMgYE5FVFBPTExfVFhRX01BWGApLCB0aGUgaW5jb21pbmcgYHNrYmAgaXMgZnJlZWQgdXNpbmcgYGRldl9rZnJlZV9za2JfaXJxKHNrYilgIGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyBgTkVUX1hNSVRfRFJPUGAuCgpOb3csIGNvbnNpZGVyaW5nIEtNU0FOJiMzOTtzIHB1cnBvc2U6IGl0JiMzOTtzIGRlc2lnbmVkIHRvIGNhdGNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBpbmZvcm1hdGlvbiBsZWFrcywgcGFydGljdWxhcmx5IHRob3NlIHRoYXQgY291bGQgZXhwb3NlIGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuIERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYW55IG9mIHRob3NlIHJpc2tzPyBJJiMzOTt2ZSBzeXN0ZW1hdGljYWxseSBjaGVja2VkIHRoZSBtYWluIHRocmVhdCB2ZWN0b3JzLgoKMS4gICoqVXNlci1TcGFjZSBJbnRlcmFjdGlvbnM6KiogVGhlIGNvZGUgZG9lc24mIzM5O3QgbW9kaWZ5IG9yIGludHJvZHVjZSBhbnkgbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSB2aWEgYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIG5ldGxpbmsgU0tCIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycy4gTmV0cG9sbCBpcyBpbnRlcm5hbCwgc28gbm90aGluZyBlc2NhcGVzLgoyLiAgKipVbmluaXRpYWxpemVkIFZhcmlhYmxlIFVzYWdlOioqIFRoZXJlJiMzOTtzIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzLiBUaGUgcXVldWUgbGVuZ3RoIGNoZWNrLCBgc2tiX3F1ZXVlX2xlbigmYW1wO25waW5mby0mZ3Q7dHhxKWAsIGlzIG9wZXJhdGluZyBvbiBhIHN0YW5kYXJkLCBpbml0aWFsaXplZCBgc3RydWN0IHNrX2J1ZmZfaGVhZGAuCjMuICAqKkRhdGEgU3RydWN0dXJlIEluaXRpYWxpemF0aW9uOioqIFRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgbGF0ZXIgcmVhZC4KNC4gICoqQnVmZmVyIEFjY2Vzcy9MZW5ndGggSXNzdWVzOioqIEl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGJvdW5kcyBjaGVja3Mgb3IgbGVuZ3RoIG1hbmlwdWxhdGlvbnMgdGhhdCBtaWdodCBjcmVhdGUgb3Bwb3J0dW5pdGllcyB0byByZWFkIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgaW4gZXhpc3RpbmcgYnVmZmVycy4gSXQgKnByZXZlbnRzKiB1bmJvdW5kZWQgYnVmZmVyIGdyb3d0aC4KNS4gICoqTWVtb3J5IE1hbmFnZW1lbnQ6KiogVGhlIHBhdGNoICpmcmVlcyogYSBidWZmZXIgaWYgdGhlIHF1ZXVlIGlzIGZ1bGwsIHVzaW5nIGBkZXZfa2ZyZWVfc2tiX2lycShza2IpYC4gQW55IHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIG9yIHJlZmVyZW5jZSBjb3VudCBpc3N1ZXMgcmVsYXRlZCB0byB0aGUgYHNrYmAgYXJlIHRoaW5ncyBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIG1lbW9yeSBkZXRlY3RvcnMgYXJlIGFscmVhZHkgZGVzaWduZWQgdG8gaGFuZGxlLgoKVGhlcmVmb3JlLCB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MuIEtBU0FOIHdpbGwgY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgbGlmZWN5Y2xlIGVycm9ycy4KClRoZSBydWxlIHN0YXRlczogJiMzNDtUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLCBMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLiYjMzQ7IFRoaXMgYXBwbGllcyBoZXJlLCBhcyBLQVNBTiBhbmQgc3RhbmRhcmQgY2hlY2tzIGFscmVhZHkgY292ZXIgdGhlIHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UuIFNpbmNlIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIHRoZSAqc3BlY2lmaWMqIHNldCBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IG9ubHkgS01TQU4gd291bGQgZGV0ZWN0LCBLTVNBTiBpcyBub3QganVzdGlmaWVkLiBUaGUgcGF0Y2ggb25seSBsaW1pdHMgcXVldWUgbGVuZ3RoIGFuZCBpZiB0aGUgY2FwIGlzIHJlYWNoZWQsIHNpbXBseSBkcm9wcyBwYWNrZXRzLgoKU28sIEkgd2lsbCBub3cgcHJlcGFyZSB0aGUgc3BlY2lmaWMgcmVhc29uaW5nIGFzIGBLTVNBTlJlYXNvbmluZ2A6ClRoZSBwYXRjaCBhZGRzIGEgbGVuZ3RoIGxpbWl0IChgTkVUUE9MTF9UWFFfTUFYYCkgb24gYG5waW5mby0mZ3Q7dHhxYCBpbiBgX19uZXRwb2xsX3NlbmRfc2tiKClgIHRvIGF2b2lkIHVuYm91bmRlZCBtZW1vcnkgZ3Jvd3RoIHdoZW4gdGhlIGRldmljZSBpcyBjb25nZXN0ZWQuIElmIHRoZSBxdWV1ZSBsZW5ndGggZXhjZWVkcyB0aGUgdGhyZXNob2xkLCB0aGUgaW5jb21pbmcgc2tiIGlzIGZyZWVkIHZpYSBgZGV2X2tmcmVlX3NrYl9pcnEoc2tiKWAgYW5kIGRyb3BwZWQuIEtNU0FOIGlzIG5vdCBuZWVkZWQgYmVjYXVzZSB0aGUgcGF0Y2ggZG9lcyBub3QgY3JlYXRlLCB0b3VjaCwgb3IgcmVhZCBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcywgbm9yIGRvZXMgaXQgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBNZW1vcnkgc2FmZXR5IGNvbmNlcm5zIHJlbGF0ZWQgdG8gc2tiIGxpZmVjeWNsZSBvciBxdWV1ZSBoYW5kbGluZyBhcmUgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgY2hlY2tzLiBEZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QganVzdGlmaWVkLgoKSSYjMzk7bSBjb25maWRlbnQgaW4gaW52b2tpbmcgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDQ6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHF1ZXVlIGxlbmd0aCBjYXAgKE5FVFBPTExfVFhRX01BWCA9IDEwMjQpIG9uIHRoZSBuZXRwb2xsIHRyYW5zbWlzc2lvbiBxdWV1ZSAobnBpbmZvLVx1MDAzZXR4cSkgaW4gbmV0L2NvcmUvbmV0cG9sbC5jIHRvIHByZXZlbnQgdW5ib3VuZGVkIHF1ZXVlIGdyb3d0aCB3aGVuIHRyYW5zbWlzc2lvbiBzdGFsbHMuIElmIHRoZSBxdWV1ZSBsaW1pdCBpcyByZWFjaGVkLCB0aGUgc2tiIGlzIGZyZWVkIHdpdGggZGV2X2tmcmVlX3NrYl9pcnEoc2tiKSBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMgTkVUX1hNSVRfRFJPUC5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeTpcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMgYXJlIGNyZWF0ZWQgb3IgcmVhZC4gVGhlIHF1ZXVlIGxlbmd0aCBjaGVjayBvcGVyYXRlcyBvbiBucGluZm8tXHUwMDNldHhxLCBhbiBhbHJlYWR5IGluaXRpYWxpemVkIHNrX2J1ZmZfaGVhZC5cbjIuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIHNvIHRoZXJlIGlzIG5vIHJpc2sgb2Yga2VybmVsIGluZm9ybWF0aW9uIGRpc2Nsb3N1cmUuXG4zLiBObyBidWZmZXIgYm91bmRzIG9yIHBhY2tldCBwYXlsb2FkIG9mZnNldHMgYXJlIG1vZGlmaWVkIGluIHdheXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgYnl0ZXMuXG5cbkFueSBwb3RlbnRpYWwgYnVncyByZXN1bHRpbmcgZnJvbSB0aGlzIGNoYW5nZSAoZS5nLiwgcGFja2V0IGxpZmVjeWNsZSBlcnJvcnMgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtZnJlZSBvZiB0aGUgc2tiKSBhcmUgYWRkcmVzc2VkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgbWVtb3J5IGRlYnVnZ2luZywgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHF1ZXVlIGxlbmd0aCBjYXAgKE5FVFBPTExfVFhRX01BWCA9IDEwMjQpIG9uIHRoZSBuZXRwb2xsIHRyYW5zbWlzc2lvbiBxdWV1ZSAobnBpbmZvLVx1MDAzZXR4cSkgaW4gbmV0L2NvcmUvbmV0cG9sbC5jIHRvIHByZXZlbnQgdW5ib3VuZGVkIHF1ZXVlIGdyb3d0aCB3aGVuIHRyYW5zbWlzc2lvbiBzdGFsbHMuIElmIHRoZSBxdWV1ZSBsaW1pdCBpcyByZWFjaGVkLCB0aGUgc2tiIGlzIGZyZWVkIHdpdGggZGV2X2tmcmVlX3NrYl9pcnEoc2tiKSBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMgTkVUX1hNSVRfRFJPUC5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeTpcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMgYXJlIGNyZWF0ZWQgb3IgcmVhZC4gVGhlIHF1ZXVlIGxlbmd0aCBjaGVjayBvcGVyYXRlcyBvbiBucGluZm8tXHUwMDNldHhxLCBhbiBhbHJlYWR5IGluaXRpYWxpemVkIHNrX2J1ZmZfaGVhZC5cbjIuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIHNvIHRoZXJlIGlzIG5vIHJpc2sgb2Yga2VybmVsIGluZm9ybWF0aW9uIGRpc2Nsb3N1cmUuXG4zLiBObyBidWZmZXIgYm91bmRzIG9yIHBhY2tldCBwYXlsb2FkIG9mZnNldHMgYXJlIG1vZGlmaWVkIGluIHdheXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgYnl0ZXMuXG5cbkFueSBwb3RlbnRpYWwgYnVncyByZXN1bHRpbmcgZnJvbSB0aGlzIGNoYW5nZSAoZS5nLiwgcGFja2V0IGxpZmVjeWNsZSBlcnJvcnMgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtZnJlZSBvZiB0aGUgc2tiKSBhcmUgYWRkcmVzc2VkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgbWVtb3J5IGRlYnVnZ2luZywgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNDoyNjo0NC42NTAyMDkwNDFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDgxNDkyMDU5NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUUE9MTFwiLFxuICAgIFwiTkVUQ09OU09MRVwiLFxuICAgIFwiTkVUQ09OU09MRV9EWU5BTUlDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19uZXRwb2xsX3NlbmRfc2tiXCIsXG4gICAgXCJuZXRwb2xsX3NlbmRfc2tiXCIsXG4gICAgXCJxdWV1ZV9wcm9jZXNzXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgcXVldWUgbGVuZ3RoIGNhcCAoTkVUUE9MTF9UWFFfTUFYID0gMTAyNCkgb24gdGhlIG5ldHBvbGwgdHJhbnNtaXNzaW9uIHF1ZXVlIChucGluZm8tXFx1MDAzZXR4cSkgaW4gbmV0L2NvcmUvbmV0cG9sbC5jIHRvIHByZXZlbnQgdW5ib3VuZGVkIHF1ZXVlIGdyb3d0aCB3aGVuIHRyYW5zbWlzc2lvbiBzdGFsbHMuIElmIHRoZSBxdWV1ZSBsaW1pdCBpcyByZWFjaGVkLCB0aGUgc2tiIGlzIGZyZWVkIHdpdGggZGV2X2tmcmVlX3NrYl9pcnEoc2tiKSBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMgTkVUX1hNSVRfRFJPUC5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OlxcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMgYXJlIGNyZWF0ZWQgb3IgcmVhZC4gVGhlIHF1ZXVlIGxlbmd0aCBjaGVjayBvcGVyYXRlcyBvbiBucGluZm8tXFx1MDAzZXR4cSwgYW4gYWxyZWFkeSBpbml0aWFsaXplZCBza19idWZmX2hlYWQuXFxuMi4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiBrZXJuZWwgaW5mb3JtYXRpb24gZGlzY2xvc3VyZS5cXG4zLiBObyBidWZmZXIgYm91bmRzIG9yIHBhY2tldCBwYXlsb2FkIG9mZnNldHMgYXJlIG1vZGlmaWVkIGluIHdheXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgYnl0ZXMuXFxuXFxuQW55IHBvdGVudGlhbCBidWdzIHJlc3VsdGluZyBmcm9tIHRoaXMgY2hhbmdlIChlLmcuLCBwYWNrZXQgbGlmZWN5Y2xlIGVycm9ycyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIG9mIHRoZSBza2IpIGFyZSBhZGRyZXNzZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBtZW1vcnkgZGVidWdnaW5nLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHF1ZXVlIGxlbmd0aCBsaW1pdCAoTkVUUE9MTF9UWFFfTUFYKSBpbiBfX25ldHBvbGxfc2VuZF9za2IoKSBpbiBuZXQvY29yZS9uZXRwb2xsLmMgdG8gcHJldmVudCB1bmJvdW5kZWQgc2tiIHF1ZXVlIGdyb3d0aCB3aGVuIGEgZGV2aWNlIGlzIHN0YWxsZWQgb3IgYnVzeS4gQ29yZSBuZXR3b3JraW5nIGNvZGUgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgdmlydHVhbCBuZXR3b3JrIGRldmljZXMgYW5kIG5ldGNvbnNvbGUgKGluY2x1ZGluZyBkeW5hbWljYWxseSByZWNvbmZpZ3VyZWQgdGFyZ2V0cyB2aWEgY29uZmlnZnMpLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHNrYiBsaWZlY3ljbGUsIHF1ZXVlIG92ZXJmbG93IGhhbmRsaW5nLCBhbmQgcGFja2V0IGRyb3AgZWRnZSBjYXNlcyBpbiB0aGUgbmV0cG9sbCB0cmFuc21pdCBwYXRoLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNDoyNjo0NC42NTAyMTMwODFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NDU1OTE5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDkwODE0YWExNTkyZTVjYzY3NWJmMTk5NWQyZTE4NGU2YmJmOTkxZTVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgMTQgMDQ6MjY6NDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0cG9sbC5jIGIvbmV0L2NvcmUvbmV0cG9sbC5jXFxuaW5kZXggZmUxZTBjZGE1ZDZiZi4uOGZkNjQwOTU1ZTQ2MyAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9uZXRwb2xsLmNcXG4rKysgYi9uZXQvY29yZS9uZXRwb2xsLmNcXG5AQCAtMzgsNiArMzgsMTQgQEBcXG4gXFxuICNkZWZpbmUgVVNFQ19QRVJfUE9MTFxcdDUwXFxuIFxcbisvKlxcbisgKiBDYXAgb24gc2ticyBwYXJrZWQgaW4gbnBpbmZvLVxcdTAwM2V0eHEgd2hpbGUgdGhlIGRldmljZSBpcyBidXN5LiBUaGUgcXVldWVcXG4rICogZXhpc3RzIHRvIHJpZGUgb3V0IGEgdHJhbnNpZW50IHN0YWxsOyBhIHByb2R1Y2VyIHRoYXQgb3V0cnVucyB0aGVcXG4rICogZGV2aWNlIGZvciBsb25nZXIgdGhhbiB0aGF0IG11c3QgbG9zZSBwYWNrZXRzLCBub3QgZ3JvdyBpdCB3aXRob3V0XFxuKyAqIGJvdW5kLlxcbisgKi9cXG4rI2RlZmluZSBORVRQT0xMX1RYUV9NQVhcXHQxMDI0XFxuK1xcbiAvKlxcbiAgKiBjYXJyaWVyX3RpbWVvdXQgaXMgbmV0Y29uc29sZS1zcGVjaWZpYyBhbmQgb25seSBrZXB0IGhlcmUgdG8gcHJlc2VydmUgdGhlXFxuICAqIG5ldHBvbGwuY2Fycmllcl90aW1lb3V0IG1vZHVsZS1wYXJhbWV0ZXIgQUJJLiBJdHMgdmFsdWUgaXMgZXhwb3NlZCB0b1xcbkBAIC0zMTQsNiArMzIyLDEwIEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBfX25ldHBvbGxfc2VuZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHR9XFxuIFxcbiBcXHRpZiAoIWRldl94bWl0X2NvbXBsZXRlKHN0YXR1cykpIHtcXG4rXFx0XFx0aWYgKHNrYl9xdWV1ZV9sZW4oXFx1MDAyNm5waW5mby1cXHUwMDNldHhxKSBcXHUwMDNlPSBORVRQT0xMX1RYUV9NQVgpIHtcXG4rXFx0XFx0XFx0ZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTtcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdH1cXG4gXFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNm5waW5mby1cXHUwMDNldHhxLCBza2IpO1xcbiBcXHRcXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXFx1MDAyNm5waW5mby1cXHUwMDNldHhfd29yaywwKTtcXG4gXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNDoyNjo0NS4xMjUzNjM2NzRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE3MjU0NTc5MDgzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRQT0xMXCIsXG4gICAgXCJORVRDT05TT0xFXCIsXG4gICAgXCJORVRDT05TT0xFX0RZTkFNSUNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX25ldHBvbGxfc2VuZF9za2JcIixcbiAgICBcIm5ldHBvbGxfc2VuZF9za2JcIixcbiAgICBcInF1ZXVlX3Byb2Nlc3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgcXVldWUgbGVuZ3RoIGxpbWl0IChORVRQT0xMX1RYUV9NQVgpIGluIF9fbmV0cG9sbF9zZW5kX3NrYigpIGluIG5ldC9jb3JlL25ldHBvbGwuYyB0byBwcmV2ZW50IHVuYm91bmRlZCBza2IgcXVldWUgZ3Jvd3RoIHdoZW4gYSBkZXZpY2UgaXMgc3RhbGxlZCBvciBidXN5LiBDb3JlIG5ldHdvcmtpbmcgY29kZSBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlcyBhbmQgbmV0Y29uc29sZSAoaW5jbHVkaW5nIGR5bmFtaWNhbGx5IHJlY29uZmlndXJlZCB0YXJnZXRzIHZpYSBjb25maWdmcykuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3Qgc2tiIGxpZmVjeWNsZSwgcXVldWUgb3ZlcmZsb3cgaGFuZGxpbmcsIGFuZCBwYWNrZXQgZHJvcCBlZGdlIGNhc2VzIGluIHRoZSBuZXRwb2xsIHRyYW5zbWl0IHBhdGguXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTA4MTRhYTE1OTJlNWNjNjc1YmYxOTk1ZDJlMTg0ZTZiYmY5OTFlNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDE0IDA0OjI2OjQzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0cG9sbC5jIGIvbmV0L2NvcmUvbmV0cG9sbC5jXG5pbmRleCBmZTFlMGNkYTVkNmJmLi44ZmQ2NDA5NTVlNDYzIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvbmV0cG9sbC5jXG4rKysgYi9uZXQvY29yZS9uZXRwb2xsLmNcbkBAIC0zOCw2ICszOCwxNCBAQFxuIFxuICNkZWZpbmUgVVNFQ19QRVJfUE9MTFx0NTBcbiBcbisvKlxuKyAqIENhcCBvbiBza2JzIHBhcmtlZCBpbiBucGluZm8tXHUwMDNldHhxIHdoaWxlIHRoZSBkZXZpY2UgaXMgYnVzeS4gVGhlIHF1ZXVlXG4rICogZXhpc3RzIHRvIHJpZGUgb3V0IGEgdHJhbnNpZW50IHN0YWxsOyBhIHByb2R1Y2VyIHRoYXQgb3V0cnVucyB0aGVcbisgKiBkZXZpY2UgZm9yIGxvbmdlciB0aGFuIHRoYXQgbXVzdCBsb3NlIHBhY2tldHMsIG5vdCBncm93IGl0IHdpdGhvdXRcbisgKiBib3VuZC5cbisgKi9cbisjZGVmaW5lIE5FVFBPTExfVFhRX01BWFx0MTAyNFxuK1xuIC8qXG4gICogY2Fycmllcl90aW1lb3V0IGlzIG5ldGNvbnNvbGUtc3BlY2lmaWMgYW5kIG9ubHkga2VwdCBoZXJlIHRvIHByZXNlcnZlIHRoZVxuICAqIG5ldHBvbGwuY2Fycmllcl90aW1lb3V0IG1vZHVsZS1wYXJhbWV0ZXIgQUJJLiBJdHMgdmFsdWUgaXMgZXhwb3NlZCB0b1xuQEAgLTMxNCw2ICszMjIsMTAgQEAgc3RhdGljIG5ldGRldl90eF90IF9fbmV0cG9sbF9zZW5kX3NrYihzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHR9XG4gXG4gXHRpZiAoIWRldl94bWl0X2NvbXBsZXRlKHN0YXR1cykpIHtcbitcdFx0aWYgKHNrYl9xdWV1ZV9sZW4oXHUwMDI2bnBpbmZvLVx1MDAzZXR4cSkgXHUwMDNlPSBORVRQT0xMX1RYUV9NQVgpIHtcbitcdFx0XHRkZXZfa2ZyZWVfc2tiX2lycShza2IpO1xuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHR9XG4gXHRcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNm5waW5mby1cdTAwM2V0eHEsIHNrYik7XG4gXHRcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZucGluZm8tXHUwMDNldHhfd29yaywwKTtcbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA0OjI2OjQ1LjEyNTM2NTE4NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ3MzI1MTQxODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXR3b3JrIFBvbGxpbmcgQ29kZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBuZXRwb2xsLmNgIGRpZmYuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2UsIHNvIEknbGwgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJdCBsb29rcyBsaWtlIGEgbmV3IGAjZGVmaW5lYCBjYWxsZWQgYE5FVFBPTExfVFhRX01BWGAgaGFzIGJlZW4gYWRkZWQsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCBpdHMgcHVycG9zZS5cblxuTG9va2luZyBhdCB0aGUgY29kZSwgaXQgbG9va3MgbGlrZSBgTkVUUE9MTF9UWFFfTUFYYCBpcyB1c2VkIHRvIGxpbWl0IHRoZSBzaXplIG9mIGBucGluZm8tXHUwMDNldHhxYC4gVGhlIGNvbW1lbnQgY2xhcmlmaWVzIHRoYXQgYHR4cWAgaXMgdXNlZCB0byBidWZmZXIgU0tCcyAoc29ja2V0IGJ1ZmZlcikgd2hlbiB0aGUgbmV0d29yayBkZXZpY2UgaXMgYnVzeS4gVGhlIGdvYWwgaXMgdG8gaGFuZGxlIHRlbXBvcmFyeSBzdGFsbHMsIGJ1dCBwcmV2ZW50IHRoZSBxdWV1ZSBmcm9tIGdyb3dpbmcgaW5kZWZpbml0ZWx5LCB3aGljaCBjb3VsZCBsZWFkIHRvIHJlc291cmNlIGV4aGF1c3Rpb24uIFRoZSBsb2dpYyBzZWVtcyBzdHJhaWdodGZvcndhcmQ6IElmIHRoZSBgdHhxYCByZWFjaGVzIGBORVRQT0xMX1RYUV9NQVhgLCBhbnkgbmV3IHBhY2tldHMgYXJlIGRyb3BwZWQuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0J3MgYSBnb29kIGFwcHJvYWNoIHRvIHByZXZlbnQgdW5ib3VuZGVkIHF1ZXVlIGdyb3d0aCBkdXJpbmcgdHJhbnNpZW50IG5ldHdvcmsgY29uZ2VzdGlvbi4gSSB3aWxsIG5lZWQgdG8gbG9vayB1cCBgZGV2X3htaXRfY29tcGxldGVgIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cgY29udHJvbCB0byBiZSBjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDYwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDQ6MjY6NDkuODU3ODgxNDU5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvbmV0cG9sbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMwMDpcXHRcXHRcXHQgICAgIHRyaWVzIFxcdTAwM2UgMDsgLS10cmllcykge1xcbiAzMDE6XFx0XFx0XFx0XFx0aWYgKEhBUkRfVFhfVFJZTE9DSyhkZXYsIHR4cSkpIHtcXG4gMzAyOlxcdFxcdFxcdFxcdFxcdGlmICghbmV0aWZfeG1pdF9zdG9wcGVkKHR4cSkpXFxuIDMwMzpcXHRcXHRcXHRcXHRcXHRcXHRzdGF0dXMgPSBuZXRwb2xsX3N0YXJ0X3htaXQoc2tiLCBkZXYsIHR4cSk7XFxuIDMwNDpcXHRcXG4gMzA1OlxcdFxcdFxcdFxcdFxcdEhBUkRfVFhfVU5MT0NLKGRldiwgdHhxKTtcXG4gMzA2OlxcdFxcbiAzMDc6XFx0XFx0XFx0XFx0XFx0aWYgKGRldl94bWl0X2NvbXBsZXRlKHN0YXR1cykpXFxuIDMwODpcXHRcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gMzA5OlxcdFxcbiAzMTA6XFx0XFx0XFx0XFx0fVxcbiAzMTE6XFx0XFxuIDMxMjpcXHRcXHRcXHRcXHQvKiB0aWNrbGUgZGV2aWNlIG1heWJlIHRoZXJlIGlzIHNvbWUgY2xlYW51cCAqL1xcbiAzMTM6XFx0XFx0XFx0XFx0bmV0cG9sbF9wb2xsX2RldihucC1cXHUwMDNlZGV2KTtcXG4gMzE0OlxcdFxcbiAzMTU6XFx0XFx0XFx0XFx0dWRlbGF5KFVTRUNfUEVSX1BPTEwpO1xcbiAzMTY6XFx0XFx0XFx0fVxcbiAzMTc6XFx0XFxuIDMxODpcXHRcXHRcXHRXQVJOX09OQ0UoIWlycXNfZGlzYWJsZWQoKSxcXG4gMzE5OlxcdFxcdFxcdFxcdFxcXCJuZXRwb2xsX3NlbmRfc2tiX29uX2RldigpOiAlcyBlbmFibGVkIGludGVycnVwdHMgaW4gcG9sbCAoJXBTKVxcXFxuXFxcIixcXG4gMzIwOlxcdFxcdFxcdFxcdGRldi1cXHUwMDNlbmFtZSwgZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fc3RhcnRfeG1pdCk7XFxuIDMyMTpcXHRcXG4gMzIyOlxcdFxcdH1cXG4gMzIzOlxcdFxcbiAzMjQ6XFx0XFx0aWYgKCFkZXZfeG1pdF9jb21wbGV0ZShzdGF0dXMpKSB7XFxuIDMyNTpcXHRcXHRcXHRpZiAoc2tiX3F1ZXVlX2xlbihcXHUwMDI2bnBpbmZvLVxcdTAwM2V0eHEpIFxcdTAwM2U9IE5FVFBPTExfVFhRX01BWCkge1xcbiAzMjY6XFx0XFx0XFx0XFx0ZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTtcXG4gMzI3OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiAzMjg6XFx0XFx0XFx0fVxcbiAzMjk6XFx0XFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNm5waW5mby1cXHUwMDNldHhxLCBza2IpO1xcbiAzMzA6XFx0XFx0XFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFxcdTAwMjZucGluZm8tXFx1MDAzZXR4X3dvcmssMCk7XFxuIDMzMTpcXHRcXHR9XFxuIDMzMjpcXHRcXHRyZXQgPSBORVRERVZfVFhfT0s7XFxuIDMzMzpcXHRvdXQ6XFxuIDMzNDpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gMzM1OlxcdFxcdHJldHVybiByZXQ7XFxuIDMzNjpcXHR9XFxuIDMzNzpcXHRcXG4gMzM4OlxcdG5ldGRldl90eF90IG5ldHBvbGxfc2VuZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAzMzk6XFx0e1xcbiAzNDA6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gMzQxOlxcdFxcdG5ldGRldl90eF90IHJldDtcXG4gMzQyOlxcdFxcbiAzNDM6XFx0XFx0aWYgKHVubGlrZWx5KCFucCkpIHtcXG4gMzQ0OlxcdFxcdFxcdGRldl9rZnJlZV9za2JfaXJxKHNrYik7XFxuIDM0NTpcXHRcXHRcXHRyZXQgPSBORVRfWE1JVF9EUk9QO1xcbiAzNDY6XFx0XFx0fSBlbHNlIHtcXG4gMzQ3OlxcdFxcdFxcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcXG4gMzQ4OlxcdFxcdFxcdHJldCA9IF9fbmV0cG9sbF9zZW5kX3NrYihucCwgc2tiKTtcXG4gMzQ5OlxcdFxcdFxcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDQ6MjY6NDkuODU3OTY5MjU5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTc3NTAwMjg3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjpcblxuKipUcmFjaW5nIHRoZSBOZXR3b3JrIFBvbGwgU2VuZCBQYXRoKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBjYWxsIGNoYWluIGZvciBgX19uZXRwb2xsX3NlbmRfc2tiYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gc2VlIHdoZXJlIGl0J3MgYmVpbmcgY2FsbGVkIGZyb20uIEkga25vdyB0aGF0IGBuZXRwb2xsX3NlbmRfc2tiYCB1bHRpbWF0ZWx5IGNhbGxzIGl0LCBidXQgSSBuZWVkIHRvIHNlZSB3aGF0J3MgKmNhbGxpbmcqIGBuZXRwb2xsX3NlbmRfc2tiYC4gU28sIEknbGwgcXVpY2tseSB1c2UgYGdyZXBgIHRvIGh1bnQgZG93biB0aGUgcmVmZXJlbmNlcyBvciBhbnkgY2FsbGVycyBpbiB0aGUgYG5ldC9jb3JlL25ldHBvbGwuY2AgZmlsZSBpdHNlbGYuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIHRvcCBsZXZlbCBlbnRyeSBwb2ludCBvciBmdW5jdGlvbihzKSB0aGF0IHRyaWdnZXJzIHRoaXMgY3JpdGljYWwgcGllY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NDksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA0OjI2OjUxLjYzMjk3NDQ1MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODI1MTE5NTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldHBvbGxfc2VuZF9za2JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz0yOTc9bmV0ZGV2X3R4X3QgYm9uZF9kZXZfcXVldWVfeG1pdChzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzA2LVxcdGlmICh1bmxpa2VseShuZXRwb2xsX3R4X3J1bm5pbmcoYm9uZC1cXHUwMDNlZGV2KSkpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzozMDc6XFx0XFx0cmV0dXJuIGJvbmRfbmV0cG9sbF9zZW5kX3NrYihib25kX2dldF9zbGF2ZV9ieV9kZXYoYm9uZCwgc2xhdmVfZGV2KSwgc2tiKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTMwOC1cXG4tLVxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYz01NDk9c3RhdGljIGludCBtYWN2bGFuX3F1ZXVlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy01NzgtXFxuZHJpdmVycy9uZXQvbWFjdmxhbi5jOjU3OTpzdGF0aWMgaW5saW5lIG5ldGRldl90eF90IG1hY3ZsYW5fbmV0cG9sbF9zZW5kX3NrYihzdHJ1Y3QgbWFjdmxhbl9kZXYgKnZsYW4sIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvbWFjdmxhbi5jLTU4MC17XFxuZHJpdmVycy9uZXQvbWFjdmxhbi5jLTU4MS0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcXG5kcml2ZXJzL25ldC9tYWN2bGFuLmM6NTgyOlxcdHJldHVybiBuZXRwb2xsX3NlbmRfc2tiKHZsYW4tXFx1MDAzZW5ldHBvbGwsIHNrYik7XFxuZHJpdmVycy9uZXQvbWFjdmxhbi5jLTU4My0jZWxzZVxcbi0tXFxuZHJpdmVycy9uZXQvbWFjdmxhbi5jPTU4OT1zdGF0aWMgbmV0ZGV2X3R4X3QgbWFjdmxhbl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9tYWN2bGFuLmMtNTk2LVxcdGlmICh1bmxpa2VseShuZXRwb2xsX3R4X3J1bm5pbmcoZGV2KSkpXFxuZHJpdmVycy9uZXQvbWFjdmxhbi5jOjU5NzpcXHRcXHRyZXR1cm4gbWFjdmxhbl9uZXRwb2xsX3NlbmRfc2tiKHZsYW4sIHNrYik7XFxuZHJpdmVycy9uZXQvbWFjdmxhbi5jLTU5OC1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMTc0PXN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIwNy1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIwODpcXHRyZXR1cm4gKGludCluZXRwb2xsX3NlbmRfc2tiKG5wLCBza2IpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjA5LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdGVhbS5oPTk5PXN0YXRpYyBpbmxpbmUgYm9vbCB0ZWFtX3BvcnRfZGV2X3R4YWJsZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqcG9ydF9kZXYpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3RlYW0uaC0xMTItI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXFxuaW5jbHVkZS9saW51eC9pZl90ZWFtLmg6MTEzOnN0YXRpYyBpbmxpbmUgdm9pZCB0ZWFtX25ldHBvbGxfc2VuZF9za2Ioc3RydWN0IHRlYW1fcG9ydCAqcG9ydCxcXG5pbmNsdWRlL2xpbnV4L2lmX3RlYW0uaC0xMTQtXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IpXFxuaW5jbHVkZS9saW51eC9pZl90ZWFtLmgtMTE1LXtcXG5pbmNsdWRlL2xpbnV4L2lmX3RlYW0uaDoxMTY6XFx0bmV0cG9sbF9zZW5kX3NrYihwb3J0LVxcdTAwM2VucCwgc2tiKTtcXG5pbmNsdWRlL2xpbnV4L2lmX3RlYW0uaC0xMTctfVxcbmluY2x1ZGUvbGludXgvaWZfdGVhbS5oLTExOC0jZWxzZVxcbmluY2x1ZGUvbGludXgvaWZfdGVhbS5oOjExOTpzdGF0aWMgaW5saW5lIHZvaWQgdGVhbV9uZXRwb2xsX3NlbmRfc2tiKHN0cnVjdCB0ZWFtX3BvcnQgKnBvcnQsXFxuaW5jbHVkZS9saW51eC9pZl90ZWFtLmgtMTIwLVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9saW51eC9pZl90ZWFtLmg9MjM3PXN0YXRpYyBpbmxpbmUgaW50IHRlYW1fZGV2X3F1ZXVlX3htaXQoc3RydWN0IHRlYW0gKnRlYW0sIHN0cnVjdCB0ZWFtX3BvcnQgKnBvcnQsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3RlYW0uaC0yNDUtXFx0aWYgKHVubGlrZWx5KG5ldHBvbGxfdHhfcnVubmluZyhuZXRkZXZfZnJvbV9wcml2KHRlYW0pKSkpIHtcXG5pbmNsdWRlL2xpbnV4L2lmX3RlYW0uaDoyNDY6XFx0XFx0dGVhbV9uZXRwb2xsX3NlbmRfc2tiKHBvcnQsIHNrYik7XFxuaW5jbHVkZS9saW51eC9pZl90ZWFtLmgtMjQ3LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRwb2xsLmg9Njg9dm9pZCBkb19uZXRwb2xsX2NsZWFudXAoc3RydWN0IG5ldHBvbGwgKm5wKTtcXG5pbmNsdWRlL2xpbnV4L25ldHBvbGwuaDo2OTpuZXRkZXZfdHhfdCBuZXRwb2xsX3NlbmRfc2tiKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuaW5jbHVkZS9saW51eC9uZXRwb2xsLmgtNzAtdm9pZCBuZXRwb2xsX3phcF9jb21wbGV0aW9uX3F1ZXVlKHZvaWQpO1xcbi0tXFxuaW5jbHVkZS9uZXQvYm9uZGluZy5oPTU0OD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc2xhdmVfbGFzdF90eChzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxcbi0tXFxuaW5jbHVkZS9uZXQvYm9uZGluZy5oLTU1My0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcXG5pbmNsdWRlL25ldC9ib25kaW5nLmg6NTU0OnN0YXRpYyBpbmxpbmUgbmV0ZGV2X3R4X3QgYm9uZF9uZXRwb2xsX3NlbmRfc2tiKGNvbnN0IHN0cnVjdCBzbGF2ZSAqc2xhdmUsXFxuaW5jbHVkZS9uZXQvYm9uZGluZy5oLTU1NS1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5pbmNsdWRlL25ldC9ib25kaW5nLmgtNTU2LXtcXG5pbmNsdWRlL25ldC9ib25kaW5nLmg6NTU3OlxcdHJldHVybiBuZXRwb2xsX3NlbmRfc2tiKHNsYXZlLVxcdTAwM2VucCwgc2tiKTtcXG5pbmNsdWRlL25ldC9ib25kaW5nLmgtNTU4LX1cXG5pbmNsdWRlL25ldC9ib25kaW5nLmgtNTU5LSNlbHNlXFxuaW5jbHVkZS9uZXQvYm9uZGluZy5oOjU2MDpzdGF0aWMgaW5saW5lIG5ldGRldl90eF90IGJvbmRfbmV0cG9sbF9zZW5kX3NrYihjb25zdCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlLFxcbmluY2x1ZGUvbmV0L2JvbmRpbmcuaC01NjEtXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvODAyMXEvdmxhbl9kZXYuYz00Nj1zdGF0aWMgaW50IHZsYW5fZGV2X2hhcmRfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvODAyMXEvdmxhbl9kZXYuYy04OS1cXG5uZXQvODAyMXEvdmxhbl9kZXYuYzo5MDpzdGF0aWMgaW5saW5lIG5ldGRldl90eF90IHZsYW5fbmV0cG9sbF9zZW5kX3NrYihzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmxhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvODAyMXEvdmxhbl9kZXYuYy05MS17XFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtOTItI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmM6OTM6XFx0cmV0dXJuIG5ldHBvbGxfc2VuZF9za2Iodmxhbi1cXHUwMDNlbmV0cG9sbCwgc2tiKTtcXG5uZXQvODAyMXEvdmxhbl9kZXYuYy05NC0jZWxzZVxcbi0tXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmM9MTAwPXN0YXRpYyBuZXRkZXZfdHhfdCB2bGFuX2Rldl9oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC84MDIxcS92bGFuX2Rldi5jLTEyMy1cXHRpZiAodW5saWtlbHkobmV0cG9sbF90eF9ydW5uaW5nKGRldikpKVxcbm5ldC84MDIxcS92bGFuX2Rldi5jOjEyNDpcXHRcXHRyZXR1cm4gdmxhbl9uZXRwb2xsX3NlbmRfc2tiKHZsYW4sIHNrYik7XFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtMTI1LVxcbi0tXFxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmM9NzM9c3RhdGljIHZvaWQgX19icl9mb3J3YXJkKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnRvLFxcbi0tXFxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtMTA2LVxcdFxcdFxcdGVsc2VcXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYzoxMDc6XFx0XFx0XFx0XFx0YnJfbmV0cG9sbF9zZW5kX3NrYih0bywgc2tiKTtcXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0xMDgtXFx0XFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9ODE0PW5ldGRldl90eF90IGJyX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTgxNS0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo4MTY6c3RhdGljIGlubGluZSB2b2lkIGJyX25ldHBvbGxfc2VuZF9za2IoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC04MTctXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtODE4LXtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo4MTk6XFx0bmV0cG9sbF9zZW5kX3NrYihwLVxcdTAwM2VucCwgc2tiKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC04MjAtfVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9ODIzPXZvaWQgYnJfbmV0cG9sbF9kaXNhYmxlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTgyNC0jZWxzZVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjgyNTpzdGF0aWMgaW5saW5lIHZvaWQgYnJfbmV0cG9sbF9zZW5kX3NrYihjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTgyNi1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL25ldHBvbGwuYz0yNTg9c3RhdGljIGludCBuZXRwb2xsX293bmVyX2FjdGl2ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvbmV0cG9sbC5jLTI2OS0vKiBjYWxsIHdpdGggSVJRIGRpc2FibGVkICovXFxubmV0L2NvcmUvbmV0cG9sbC5jOjI3MDpzdGF0aWMgbmV0ZGV2X3R4X3QgX19uZXRwb2xsX3NlbmRfc2tiKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvY29yZS9uZXRwb2xsLmMtMjcxLXtcXG4tLVxcbm5ldC9jb3JlL25ldHBvbGwuYy0zMTgtXFx0XFx0V0FSTl9PTkNFKCFpcnFzX2Rpc2FibGVkKCksXFxubmV0L2NvcmUvbmV0cG9sbC5jOjMxOTpcXHRcXHRcXHRcXFwibmV0cG9sbF9zZW5kX3NrYl9vbl9kZXYoKTogJXMgZW5hYmxlZCBpbnRlcnJ1cHRzIGluIHBvbGwgKCVwUylcXFxcblxcXCIsXFxubmV0L2NvcmUvbmV0cG9sbC5jLTMyMC1cXHRcXHRcXHRkZXYtXFx1MDAzZW5hbWUsIGRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX3N0YXJ0X3htaXQpO1xcbi0tXFxubmV0L2NvcmUvbmV0cG9sbC5jLTMzNy1cXG5uZXQvY29yZS9uZXRwb2xsLmM6MzM4Om5ldGRldl90eF90IG5ldHBvbGxfc2VuZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9jb3JlL25ldHBvbGwuYy0zMzkte1xcbi0tXFxubmV0L2NvcmUvbmV0cG9sbC5jLTM0Ny1cXHRcXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XFxubmV0L2NvcmUvbmV0cG9sbC5jOjM0ODpcXHRcXHRyZXQgPSBfX25ldHBvbGxfc2VuZF9za2IobnAsIHNrYik7XFxubmV0L2NvcmUvbmV0cG9sbC5jLTM0OS1cXHRcXHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XFxuLS1cXG5uZXQvY29yZS9uZXRwb2xsLmMtMzUyLX1cXG5uZXQvY29yZS9uZXRwb2xsLmM6MzUzOkVYUE9SVF9TWU1CT0wobmV0cG9sbF9zZW5kX3NrYik7XFxubmV0L2NvcmUvbmV0cG9sbC5jLTM1NC1cXG4tLVxcbm5ldC9kc2EvdXNlci5jPTgyMD1zdGF0aWMgaW50IGRzYV91c2VyX3BvcnRfb2JqX2RlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB2b2lkICpjdHgsXFxuLS1cXG5uZXQvZHNhL3VzZXIuYy04NjgtXFxubmV0L2RzYS91c2VyLmM6ODY5OnN0YXRpYyBuZXRkZXZfdHhfdCBkc2FfdXNlcl9uZXRwb2xsX3NlbmRfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2RzYS91c2VyLmMtODcwLVxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9kc2EvdXNlci5jLTg3NC1cXG5uZXQvZHNhL3VzZXIuYzo4NzU6XFx0cmV0dXJuIG5ldHBvbGxfc2VuZF9za2IocC1cXHUwMDNlbmV0cG9sbCwgc2tiKTtcXG5uZXQvZHNhL3VzZXIuYy04NzYtI2Vsc2VcXG4tLVxcbm5ldC9kc2EvdXNlci5jPTg5Nj1uZXRkZXZfdHhfdCBkc2FfZW5xdWV1ZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9kc2EvdXNlci5jLTkwMS1cXHRpZiAodW5saWtlbHkobmV0cG9sbF90eF9ydW5uaW5nKGRldikpKVxcbm5ldC9kc2EvdXNlci5jOjkwMjpcXHRcXHRyZXR1cm4gZHNhX3VzZXJfbmV0cG9sbF9zZW5kX3NrYihkZXYsIHNrYik7XFxubmV0L2RzYS91c2VyLmMtOTAzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNDoyNjo1My40NTgxMDU0MzRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNzg2MTU5OTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgTmV0cG9sbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gYG5ldHBvbGwuY2AgcmVzaWRlcyB3aXRoaW4gYG5ldC9jb3JlL25ldHBvbGwuY2AuIFJpZ2h0LiBOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZ3VyYXRpb25zIGFjdHVhbGx5ICplbmFibGUqIHRoYXQgcGFydGljdWxhciBjb21wb25lbnQuIFdoZXJlJ3MgdGhlIHJpZ2h0IHBsYWNlIHRvIGxvb2sgZm9yIHRoYXQ/IE9mIGNvdXJzZSwgdGhlIGBNYWtlZmlsZWAgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LCBgbmV0L2NvcmUvTWFrZWZpbGVgLCBpcyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gVGhhdCBzaG91bGQgaGF2ZSB0aGUgbmVjZXNzYXJ5IGJ1aWxkIGxvZ2ljIGFuZCBjb25kaXRpb25hbCBpbmNsdXNpb24gcnVsZXMuIExldCdzIGRpZyBpbnRvIHRoYXQgYW5kIHNlZSB3aGF0IGZsYWdzIG9yIGRlcGVuZGVuY2llcyBhcmUgaW4gcGxheS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzYyNSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA0OjI2OjU1LjI0NDI2NzczNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQ3NTk0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRwb2xsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlPTI3PW9iai0kKENPTkZJR19ORVRfUEtUR0VOKSArPSBwa3RnZW4ub1xcbm5ldC9jb3JlL01ha2VmaWxlOjI4Om9iai0kKENPTkZJR19ORVRQT0xMKSArPSBuZXRwb2xsLm9cXG5uZXQvY29yZS9NYWtlZmlsZS0yOS1vYmotJChDT05GSUdfRklCX1JVTEVTKSArPSBmaWJfcnVsZXMub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNDoyNjo1NS4yOTA3NDgwNzVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozOTc0MDc1NTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgTkVUUE9MTCBhbmQgTkVUX1BPTExfQ09OVFJPTExFUiBLY29uZmlnIERlZmluaXRpb25zKipcblxuT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVycGxheSBiZXR3ZWVuIGBORVRQT0xMYCBhbmQgYE5FVF9QT0xMX0NPTlRST0xMRVJgIHdpdGhpbiB0aGUgS2NvbmZpZyBzeXN0ZW0uIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIHJlbGV2YW50IGRlZmluaXRpb25zIOKAkyBwcm9iYWJseSBgbmV0L2NvcmUvS2NvbmZpZ2Agb3Igc2ltaWxhciwgZGVwZW5kaW5nIG9uIHRoZSBrZXJuZWwgdmVyc2lvbiBJJ20gd29ya2luZyB3aXRoIOKAkyB0byBnZXQgdGhlIGV4YWN0IGRldGFpbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGVzZSBvcHRpb25zIHJlbGF0ZSB0byBlbmFibGluZyBvciBkaXNhYmxpbmcgbmV0d29yayBwb2xsaW5nIGZlYXR1cmVzLiBTcGVjaWZpY2FsbHksIEknbSBpbnRlcmVzdGVkIGluOlxuXG4qICAgKipUaGUgQ29uZmlnIERlcGVuZGVuY2llczoqKiBXaGF0IG90aGVyIEtjb25maWcgc3ltYm9scyBkb2VzIGBORVRQT0xMYCBkZXBlbmQgb24/IElzIGl0IHRpZWQgdG8gc3BlY2lmaWMgZHJpdmVycyBvciBmZWF0dXJlcz8gRG9lcyBpdCByZXF1aXJlIHRoaW5ncyBsaWtlIGludGVycnVwdCBtYW5hZ2VtZW50IG9yIERNQSBjYXBhYmlsaXRpZXM/IFdoYXQgYWJvdXQgYE5FVF9QT0xMX0NPTlRST0xMRVJgPyBEb2VzIHRoZSBleGlzdGVuY2Ugb2YgYSBwb2xsIGNvbnRyb2xsZXIgaW1wbHkgYW55IHNwZWNpZmljIGNhcGFiaWxpdGllcyBpbiB0aGUgc2VsZWN0ZWQgZHJpdmVyP1xuKiAgICoqSW1wbGllZCBGdW5jdGlvbmFsaXR5OioqIFdoYXQgaXMgdGhlIGludGVudCBvZiBlYWNoIGRlZmluZT8gSG93IGlzIGBORVRQT0xMYCAqdXNlZCogaW4gdGhlIGtlcm5lbD8gRG9lcyBpdCBhbGxvdyBzcGVjaWZpYyBmZWF0dXJlcyB0byBiZSBvcHRpb25hbGx5IGltcGxlbWVudGVkPyBIb3cgZG9lcyBhIGBORVRfUE9MTF9DT05UUk9MTEVSYCBmaXQgaW50byB0aGUgZ3JhbmRlciBzY2hlbWUgb2YgYW4gRXRoZXJuZXQgZHJpdmVyPyBJcyBpdCB1c2VkIHRvIGRpc2FibGUgaW50ZXJydXB0cz9cbiogICAqKkludGVyYWN0aW9uIHdpdGggRHJpdmVyczoqKiBIb3cgYXJlIG5ldHdvcmsgZHJpdmVycyBpbXBhY3RlZCBieSB0aGVzZSBjb25maWd1cmF0aW9ucz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBmb3IgZHJpdmVycyB0aGF0IGltcGxlbWVudCBuZXR3b3JrIHBvbGxpbmcuIEFyZSBjZXJ0YWluIGRyaXZlcnMgKnJlcXVpcmVkKiB0byBpbXBsZW1lbnQgc3BlY2lmaWMgYG5ldHBvbGxgIEFQSXMgd2hlbiBgTkVUUE9MTGAgaXMgc2V0PyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBwb3dlciBtYW5hZ2VtZW50IGFuZCBsaW5rIHN0YXR1cyBjaGFuZ2VzP1xuKiAgICoqQm9vdCBUaW1lIENvbmZpZ3VyYXRpb246KiogSSBuZWVkIHRvIGNsYXJpZnkgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZSBmb3IgZHJpdmVycyBhbmQgbmV0d29ya2luZyBhdCBib290IHRpbWUuXG4qICAgKipQb3RlbnRpYWwgY29uZmxpY3RzOioqIEhvdyBkb2VzIHRoZSBzZXR0aW5nIG9mIHRoZXNlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgYWZmZWN0IHBvc3NpYmxlIGNvbmZsaWN0cyBhbmQgcnVudGltZSBiZWhhdmlvcj9cblxuVWx0aW1hdGVseSwgdGhlIGdvYWwgaXMgdG8gZnVsbHkgZ3Jhc3AgdGhlIGNvbnRyb2wgZmxvdyB0aGVzZSBvcHRpb25zIHJlcHJlc2VudCB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suIFRoaXMgd2lsbCBoZWxwIG1lIGRpYWdub3NlIGlzc3Vlcywgb3B0aW1pemUgcG9sbGluZyBiZWhhdmlvciwgb3IgdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhYmlsaXR5IG9mIGNlcnRhaW4gZmVhdHVyZXMgYmFzZWQgb24gbXkgY3VycmVudCBpbnZlc3RpZ2F0aW9uLiBTbywgZGlnZ2luZyBpbnRvIHRoZSBLY29uZmlnIGRlZmluaXRpb25zIGlzIHRoZSBjcml0aWNhbCBmaXJzdCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTEzLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDQ6MjY6NTkuMjY0ODI1NjYzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTgxNjgyNDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRQT0xMXFxcXGJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz0zNTU9Y29uZmlnIE5FVENPTlNPTEVfUFJFUEVORF9SRUxFQVNFXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTM2Ni1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjM2Nzpjb25maWcgTkVUUE9MTFxcbmRyaXZlcnMvbmV0L0tjb25maWctMzY4LVxcdGRlZl9ib29sIE5FVENPTlNPTEVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDQ6Mjc6MDEuNDQ2NTE2MzdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDM1MzI2NTQ4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipFeGFtaW5pbmcgdGhlIE5ldHdvcmsgRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gQmFzZWQgb24gd2hhdCBJJ20gbG9va2luZyBhdCwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhcm91bmQgbGluZSAzNjcuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIGEgcGFydGljdWxhciBkcml2ZXIgY29uZmlndXJhdGlvbiwgb3IgYXQgbGVhc3QgYSByZWxhdGVkIHNlY3Rpb24sIGJlZ2lucy4gSG9wZWZ1bGx5LCBpdCdsbCBnaXZlIG1lIHNvbWUga2V5IGluc2lnaHRzIGludG8gaG93IHRoaXMgcGFydGljdWxhciBuZXR3b3JrIGRyaXZlciBpcyBjb25maWd1cmVkLCBhbnkgZGVwZW5kZW5jaWVzLCBhbmQgdGhlIGF2YWlsYWJsZSBvcHRpb25zLiBUaW1lIHRvIGdldCB0byB0aGUgZGV0YWlscyFcblxuXG4iLCJJbnB1dFRva2VucyI6ODQ4NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA0OjI3OjA1Ljc5OTc4OTI0MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Nzk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM0MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM0MDpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGFiaWxpdHkgdG8gZHluYW1pY2FsbHkgcmVjb25maWd1cmUgdGFyZ2V0XFxuIDM0MTpcXHRcXHQgIHBhcmFtZXRlcnMgKGludGVyZmFjZSwgSVAgYWRkcmVzc2VzLCBwb3J0IG51bWJlcnMsIE1BQyBhZGRyZXNzZXMpXFxuIDM0MjpcXHRcXHQgIGF0IHJ1bnRpbWUgdGhyb3VnaCBhIHVzZXJzcGFjZSBpbnRlcmZhY2UgZXhwb3J0ZWQgdXNpbmcgY29uZmlnZnMuXFxuIDM0MzpcXHRcXHQgIFNlZSBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcXHUwMDNlIGZvciBkZXRhaWxzLlxcbiAzNDQ6XFx0XFxuIDM0NTpcXHRjb25maWcgTkVUQ09OU09MRV9FWFRFTkRFRF9MT0dcXG4gMzQ2OlxcdFxcdGJvb2wgXFxcIlNldCBrZXJuZWwgZXh0ZW5kZWQgbWVzc2FnZSBieSBkZWZhdWx0XFxcIlxcbiAzNDc6XFx0XFx0ZGVwZW5kcyBvbiBORVRDT05TT0xFXFxuIDM0ODpcXHRcXHRkZWZhdWx0IG5cXG4gMzQ5OlxcdFxcdGhlbHBcXG4gMzUwOlxcdFxcdCAgU2V0IGV4dGVuZGVkIGxvZyBzdXBwb3J0IGZvciBuZXRjb25zb2xlIG1lc3NhZ2UuIElmIHRoaXMgb3B0aW9uIGlzXFxuIDM1MTpcXHRcXHQgIHNldCwgbG9nIG1lc3NhZ2VzIGFyZSB0cmFuc21pdHRlZCB3aXRoIGV4dGVuZGVkIG1ldGFkYXRhIGhlYWRlciBpbiBhXFxuIDM1MjpcXHRcXHQgIGZvcm1hdCBzaW1pbGFyIHRvIC9kZXYva21zZy4gIFNlZVxcbiAzNTM6XFx0XFx0ICBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcXHUwMDNlIGZvciBkZXRhaWxzLlxcbiAzNTQ6XFx0XFxuIDM1NTpcXHRjb25maWcgTkVUQ09OU09MRV9QUkVQRU5EX1JFTEVBU0VcXG4gMzU2OlxcdFxcdGJvb2wgXFxcIlByZXBlbmQga2VybmVsIHJlbGVhc2UgdmVyc2lvbiBpbiB0aGUgbWVzc2FnZSBieSBkZWZhdWx0XFxcIlxcbiAzNTc6XFx0XFx0ZGVwZW5kcyBvbiBORVRDT05TT0xFX0VYVEVOREVEX0xPR1xcbiAzNTg6XFx0XFx0ZGVmYXVsdCBuXFxuIDM1OTpcXHRcXHRoZWxwXFxuIDM2MDpcXHRcXHQgIFNldCBrZXJuZWwgcmVsZWFzZSB0byBiZSBwcmVwZW5kZWQgdG8gZWFjaCBuZXRjb25zb2xlIG1lc3NhZ2UgYnlcXG4gMzYxOlxcdFxcdCAgZGVmYXVsdC4gSWYgdGhpcyBvcHRpb24gaXMgc2V0LCB0aGUga2VybmVsIHJlbGVhc2UgaXMgcHJlcGVuZGVkIGludG9cXG4gMzYyOlxcdFxcdCAgdGhlIGZpcnN0IGZpZWxkIG9mIGV2ZXJ5IG5ldGNvbnNvbGUgbWVzc2FnZSwgc28sIHRoZSBuZXRjb25zb2xlXFxuIDM2MzpcXHRcXHQgIHNlcnZlci9wZWVyIGNhbiBlYXNpbHkgaWRlbnRpZnkgd2hhdCBrZXJuZWwgcmVsZWFzZSBpcyBsb2dnaW5nIGVhY2hcXG4gMzY0OlxcdFxcdCAgbWVzc2FnZS4gIFNlZSBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcXHUwMDNlIGZvclxcbiAzNjU6XFx0XFx0ICBkZXRhaWxzLlxcbiAzNjY6XFx0XFxuIDM2NzpcXHRjb25maWcgTkVUUE9MTFxcbiAzNjg6XFx0XFx0ZGVmX2Jvb2wgTkVUQ09OU09MRVxcbiAzNjk6XFx0XFxuIDM3MDpcXHRjb25maWcgTkVUX1BPTExfQ09OVFJPTExFUlxcbiAzNzE6XFx0XFx0ZGVmX2Jvb2wgTkVUUE9MTFxcbiAzNzI6XFx0XFxuIDM3MzpcXHRjb25maWcgTlRCX05FVERFVlxcbiAzNzQ6XFx0XFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgRXRoZXJuZXQgb3ZlciBOVEIgVHJhbnNwb3J0XFxcIlxcbiAzNzU6XFx0XFx0ZGVwZW5kcyBvbiBOVEJfVFJBTlNQT1JUXFxuIDM3NjpcXHRcXG4gMzc3OlxcdGNvbmZpZyBSSU9ORVRcXG4gMzc4OlxcdFxcdHRyaXN0YXRlIFxcXCJSYXBpZElPIEV0aGVybmV0IG92ZXIgbWVzc2FnaW5nIGRyaXZlciBzdXBwb3J0XFxcIlxcbiAzNzk6XFx0XFx0ZGVwZW5kcyBvbiBSQVBJRElPXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA0OjI3OjA1Ljc5OTg2OTAzMVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNjI5NDgyNTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5KipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGNvbmZpZyBORVRQT0xMYCBzZXR0aW5nLCBhbmQgaXQncyBkZWZpbmVkIGFzIGEgYm9vbGVhbiwgY29udHJvbGxlZCBieSBgTkVUQ09OU09MRWAuIEFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZS4gV2hhdCBkb2VzIGBORVRDT05TT0xFYCBkZXBlbmQgb24/IEl0J3MgdGltZSB0byBkaWcgaW50byB0aGUgYGRyaXZlcnMvbmV0L0tjb25maWdgIGZpbGUgYW5kIGNoZWNrIHRoZSBkZWZpbml0aW9uIGZvciBgTkVUQ09OU09MRWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMsIGltcGxpY2F0aW9ucywgYW5kIGFsbCB0aGF0IGdvb2Qgc3R1ZmYgb2YgYE5FVENPTlNPTEVgLiBHb3QgdG8ga25vdyB3aGF0J3MgbGlua2VkIGhlcmUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyNzUsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA0OjI3OjA3LjQyOTM1ODMzN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0NDQxODE2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUQ09OU09MRVxcXFxiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9MzE4PWNvbmZpZyBNQUNTRUNcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzI2LVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzI3OmNvbmZpZyBORVRDT05TT0xFXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMjgtXFx0dHJpc3RhdGUgXFxcIk5ldHdvcmsgY29uc29sZSBsb2dnaW5nIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA0OjI3OjA5LjY3Mzc4MTkyMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3NDQ5Mzg4ODA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBwcm92aWRlZCB0ZXh0OlxuXG4qKkFuYWx5emluZyBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgU2VjdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byBsaW5lcyAzMjUtMzQ1IG9mIGBkcml2ZXJzL25ldC9LY29uZmlnYC4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIGRlZmluZSBzb21lIG5ldHdvcmsgZHJpdmVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgcHJvYmFibHkgcmVsYXRlZCB0byBhIHNwZWNpZmljIGhhcmR3YXJlIG9yIHNvZnR3YXJlIGZlYXR1cmUuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBrZXkgZGVwZW5kZW5jaWVzIGFuZCB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgZWFjaCBvcHRpb24uIEFyZSB0aGVzZSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzPyBBcmUgdGhleSByZWxhdGVkIHRvIHByb3RvY29sIHN1cHBvcnQsIG9yIHBlcmhhcHMgb2ZmbG9hZCBjYXBhYmlsaXRpZXM/IFRoZSBzdHJ1Y3R1cmUgb2YgS2NvbmZpZyBmaWxlcyBpcyB1c3VhbGx5IHByZXR0eSBwcmVkaWN0YWJsZSwgYnV0IGNvbnRleHQgaXMgYWx3YXlzIGtleS4gTGV0IG1lIGxvb2sgZm9yIGBjb25maWdgIGtleXdvcmRzLCBkZXBlbmRlbmNpZXMgZXhwcmVzc2VkIHdpdGggYGRlcGVuZHMgb25gIHN0YXRlbWVudHMsIGFuZCBoZWxwIHRleHQgdGhhdCBjbGFyaWZpZXMgdGhlIHB1cnBvc2Ugb2YgZWFjaCBvcHRpb24uIEknbGwgbWVudGFsbHkgbm90ZSBhbnkgdW51c3VhbCBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IHdhcnJhbnQgZnVydGhlciBpbnZlc3RpZ2F0aW9uLCBtYXliZSBsb29raW5nIGF0IGhvdyB0aGVzZSBvcHRpb25zIGludGVyYWN0IHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIG5ldHdvcmsgc3RhY2suIEknbSBhbHNvIGxvb2tpbmcgZm9yIGFueSBkZWZhdWx0IHZhbHVlcywgdGhhdCBjYW4gcHJvdmlkZSBhIGhpbnQgYWJvdXQgdGhlIGRldmVsb3BlcidzIHR5cGljYWwgdXNlIGNhc2UuIFVsdGltYXRlbHksIEknbSB0cnlpbmcgdG8gYnVpbGQgYSBxdWljayBtZW50YWwgbW9kZWwgb2Ygd2hhdCB0aGVzZSBsaW5lcyBhcmUgY29uZmlndXJpbmcgYW5kIGhvdyBpdCBpbnRlZ3JhdGVzIGludG8gdGhlIGJyb2FkZXIgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTQzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDQ6Mjc6MTcuMTIzMTczNDE3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyNzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzI1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzI1OlxcdFxcdCAgIE1BQ3NlYyBpcyBhbiBlbmNyeXB0aW9uIHN0YW5kYXJkIGZvciBFdGhlcm5ldC5cXG4gMzI2OlxcdFxcbiAzMjc6XFx0Y29uZmlnIE5FVENPTlNPTEVcXG4gMzI4OlxcdFxcdHRyaXN0YXRlIFxcXCJOZXR3b3JrIGNvbnNvbGUgbG9nZ2luZyBzdXBwb3J0XFxcIlxcbiAzMjk6XFx0XFx0ZGVwZW5kcyBvbiBQUklOVEtcXG4gMzMwOlxcdFxcdGhlbHBcXG4gMzMxOlxcdFxcdCAgSWYgeW91IHdhbnQgdG8gbG9nIGtlcm5lbCBtZXNzYWdlcyBvdmVyIHRoZSBuZXR3b3JrLCBlbmFibGUgdGhpcy5cXG4gMzMyOlxcdFxcdCAgU2VlIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdFxcdTAwM2UgZm9yIGRldGFpbHMuXFxuIDMzMzpcXHRcXG4gMzM0OlxcdGNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcXG4gMzM1OlxcdFxcdGJvb2wgXFxcIkR5bmFtaWMgcmVjb25maWd1cmF0aW9uIG9mIGxvZ2dpbmcgdGFyZ2V0c1xcXCJcXG4gMzM2OlxcdFxcdGRlcGVuZHMgb24gTkVUQ09OU09MRSBcXHUwMDI2XFx1MDAyNiBTWVNGUyBcXHUwMDI2XFx1MDAyNiBDT05GSUdGU19GUyBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuIDMzNzpcXHRcXHRcXHRcXHQhKE5FVENPTlNPTEU9eSBcXHUwMDI2XFx1MDAyNiBDT05GSUdGU19GUz1tKVxcbiAzMzg6XFx0XFx0c2VsZWN0IFBSSU5US19FWEVDVVRJT05fQ1RYXFxuIDMzOTpcXHRcXHRoZWxwXFxuIDM0MDpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGFiaWxpdHkgdG8gZHluYW1pY2FsbHkgcmVjb25maWd1cmUgdGFyZ2V0XFxuIDM0MTpcXHRcXHQgIHBhcmFtZXRlcnMgKGludGVyZmFjZSwgSVAgYWRkcmVzc2VzLCBwb3J0IG51bWJlcnMsIE1BQyBhZGRyZXNzZXMpXFxuIDM0MjpcXHRcXHQgIGF0IHJ1bnRpbWUgdGhyb3VnaCBhIHVzZXJzcGFjZSBpbnRlcmZhY2UgZXhwb3J0ZWQgdXNpbmcgY29uZmlnZnMuXFxuIDM0MzpcXHRcXHQgIFNlZSBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcXHUwMDNlIGZvciBkZXRhaWxzLlxcbiAzNDQ6XFx0XFxuIDM0NTpcXHRjb25maWcgTkVUQ09OU09MRV9FWFRFTkRFRF9MT0dcXG4gMzQ2OlxcdFxcdGJvb2wgXFxcIlNldCBrZXJuZWwgZXh0ZW5kZWQgbWVzc2FnZSBieSBkZWZhdWx0XFxcIlxcbiAzNDc6XFx0XFx0ZGVwZW5kcyBvbiBORVRDT05TT0xFXFxuIDM0ODpcXHRcXHRkZWZhdWx0IG5cXG4gMzQ5OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDQ6Mjc6MTcuMTIzMjY4MzM3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc3ODc5MDA1OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW52ZXN0aWdhdGlvbiBvZiBOZXRwb2xsIGFuZCBTeXprYWxsZXIgUmVhY2hhYmlsaXR5KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYG5ldHBvbGxgIHNpdHVhdGlvbi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGl0J3MgdXNlZCwgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nLCBhbmQgaWYgaXQncyBldmVuIHJlbW90ZWx5IGFjY2Vzc2libGUgd2l0aGluIHRoZSBTeXprYWxsZXIgdGVzdGluZyBlbnZpcm9ubWVudC4gVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIHVzZXJzcGFjZSwgdGhyb3VnaCBTeXprYWxsZXIsIGNhbiBjb25maWd1cmUgb3IgdHJpZ2dlciBlaXRoZXIgYG5ldGNvbnNvbGVgIG9yIGBuZXRwb2xsYC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIFN5emthbGxlcidzIGRvY3VtZW50YXRpb24gYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IGV4aXN0aW5nIGRlc2NyaXB0aW9ucyBvciBtZWNoYW5pc21zIGZvciB1c2VyLXNwYWNlIGNvbnRyb2wgb3ZlciBgbmV0Y29uc29sZWAuIEkgYWxzbyB3YW50IHRvIGV4cGxvcmUgd2hldGhlciBgbmV0Y29uc29sZWAgKG9yIGV2ZW4gYG5ldHBvbGxgKSBtaWdodCBiZSBjb25maWd1cmFibGUgdmlhIHN0YW5kYXJkIGludGVyZmFjZXMgbGlrZSBjb25maWdmcywgc3lzZnMsIG1vZHVsZSBwYXJhbWV0ZXJzLCBvciBkeW5hbWljIHJlY29uZmlndXJhdGlvbi4gUGVyaGFwcyBgbmV0cG9sbGAgY291bGQgYmUgaW5kaXJlY3RseSB1dGlsaXplZCB0aHJvdWdoIG5ldHdvcmtpbmcgZmVhdHVyZXMgc3VjaCBhcyBib25kaW5nLCBicmlkZ2luZywgb3IgbWFjdmxhbi5cblxuV2FpdCBhIG1vbWVudC4gQmVmb3JlIEkgZ28gdG9vIGZhciBkb3duIHRoYXQgcGF0aCwgSSBzaG91bGQgbWFrZSBzdXJlIEkgY29tcGxldGVseSB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBvZiBgbmV0cG9sbGAgaXRzZWxmLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBuZXQvY29yZS9uZXRwb2xsLmNgLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYG5waW5mby1cdTAwM2V0eHFgIGFuZCB3aGF0IGl0IGFjdHVhbGx5IGRvZXMuIFRoYXQgc2hvdWxkIHByb3ZpZGUgYSBjcnVjaWFsIGZvb3Rob2xkIG9uIHRoZSBkZXRhaWxzLiBJIHdpbGwgbmVlZCB0byBkZWx2ZSBkZWVwZXIgaW50byB0aGUgY29kZSB0byBlbnN1cmUgSSBmdWxseSB1bmRlcnN0YW5kIHRoZSB3b3JraW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyMjAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNDoyNzoyNC45MTExNzA5NDdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvbmV0cG9sbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBDb21tb24gZnJhbWV3b3JrIGZvciBsb3ctbGV2ZWwgbmV0d29yayBjb25zb2xlLCBkdW1wLCBhbmQgZGVidWdnZXIgY29kZVxcbiAgIDQ6XFx0ICpcXG4gICA1OlxcdCAqIFNlcCA4IDIwMDMgIE1hdHQgTWFja2FsbCBcXHUwMDNjbXBtQHNlbGVuaWMuY29tXFx1MDAzZVxcbiAgIDY6XFx0ICpcXG4gICA3OlxcdCAqIGJhc2VkIG9uIHRoZSBuZXRjb25zb2xlIGNvZGUgZnJvbTpcXG4gICA4OlxcdCAqXFxuICAgOTpcXHQgKiBDb3B5cmlnaHQgKEMpIDIwMDEgIEluZ28gTW9sbmFyIFxcdTAwM2NtaW5nb0ByZWRoYXQuY29tXFx1MDAzZVxcbiAgMTA6XFx0ICogQ29weXJpZ2h0IChDKSAyMDAyICBSZWQgSGF0LCBJbmMuXFxuICAxMTpcXHQgKi9cXG4gIDEyOlxcdFxcbiAgMTM6XFx0I2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSBcXFwiOiBcXFwiIGZtdFxcbiAgMTQ6XFx0XFxuICAxNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlcGFyYW0uaFxcdTAwM2VcXG4gIDE2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4gIDE3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG4gIDE4OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXFx1MDAzZVxcbiAgMTk6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N0cmluZy5oXFx1MDAzZVxcbiAgMjA6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX2FycC5oXFx1MDAzZVxcbiAgMjE6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2luZXRkZXZpY2UuaFxcdTAwM2VcXG4gIDIyOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbmV0LmhcXHUwMDNlXFxuICAyMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvaW50ZXJydXB0LmhcXHUwMDNlXFxuICAyNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0cG9sbC5oXFx1MDAzZVxcbiAgMjU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkLmhcXHUwMDNlXFxuICAyNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVsYXkuaFxcdTAwM2VcXG4gIDI3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9yY3VwZGF0ZS5oXFx1MDAzZVxcbiAgMjg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXFx1MDAzZVxcbiAgMjk6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4gIDMwOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9leHBvcnQuaFxcdTAwM2VcXG4gIDMxOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl92bGFuLmhcXHUwMDNlXFxuICAzMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvdWRwLmhcXHUwMDNlXFxuICAzMzpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L3RjcC5oXFx1MDAzZVxcbiAgMzQ6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9hZGRyY29uZi5oXFx1MDAzZVxcbiAgMzU6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9uZGlzYy5oXFx1MDAzZVxcbiAgMzY6XFx0I2luY2x1ZGUgXFx1MDAzY3RyYWNlL2V2ZW50cy9uYXBpLmhcXHUwMDNlXFxuICAzNzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgva2NvbmZpZy5oXFx1MDAzZVxcbiAgMzg6XFx0XFxuICAzOTpcXHQjZGVmaW5lIFVTRUNfUEVSX1BPTExcXHQ1MFxcbiAgNDA6XFx0XFxuICA0MTpcXHQvKlxcbiAgNDI6XFx0ICogQ2FwIG9uIHNrYnMgcGFya2VkIGluIG5waW5mby1cXHUwMDNldHhxIHdoaWxlIHRoZSBkZXZpY2UgaXMgYnVzeS4gVGhlIHF1ZXVlXFxuICA0MzpcXHQgKiBleGlzdHMgdG8gcmlkZSBvdXQgYSB0cmFuc2llbnQgc3RhbGw7IGEgcHJvZHVjZXIgdGhhdCBvdXRydW5zIHRoZVxcbiAgNDQ6XFx0ICogZGV2aWNlIGZvciBsb25nZXIgdGhhbiB0aGF0IG11c3QgbG9zZSBwYWNrZXRzLCBub3QgZ3JvdyBpdCB3aXRob3V0XFxuICA0NTpcXHQgKiBib3VuZC5cXG4gIDQ2OlxcdCAqL1xcbiAgNDc6XFx0I2RlZmluZSBORVRQT0xMX1RYUV9NQVhcXHQxMDI0XFxuICA0ODpcXHRcXG4gIDQ5OlxcdC8qXFxuICA1MDpcXHQgKiBjYXJyaWVyX3RpbWVvdXQgaXMgbmV0Y29uc29sZS1zcGVjaWZpYyBhbmQgb25seSBrZXB0IGhlcmUgdG8gcHJlc2VydmUgdGhlXFxuICA1MTpcXHQgKiBuZXRwb2xsLmNhcnJpZXJfdGltZW91dCBtb2R1bGUtcGFyYW1ldGVyIEFCSS4gSXRzIHZhbHVlIGlzIGV4cG9zZWQgdG9cXG4gIDUyOlxcdCAqIG5ldGNvbnNvbGUgdGhyb3VnaCBuZXRwb2xsX2dldF9jYXJyaWVyX3RpbWVvdXQoKS5cXG4gIDUzOlxcdCAqL1xcbiAgNTQ6XFx0c3RhdGljIHVuc2lnbmVkIGludCBjYXJyaWVyX3RpbWVvdXQgPSA0O1xcbiAgNTU6XFx0bW9kdWxlX3BhcmFtKGNhcnJpZXJfdGltZW91dCwgdWludCwgMDY0NCk7XFxuICA1NjpcXHRcXG4gIDU3OlxcdHVuc2lnbmVkIGludCBuZXRwb2xsX2dldF9jYXJyaWVyX3RpbWVvdXQodm9pZClcXG4gIDU4OlxcdHtcXG4gIDU5OlxcdFxcdHJldHVybiBjYXJyaWVyX3RpbWVvdXQ7XFxuICA2MDpcXHR9XFxuICA2MTpcXHRFWFBPUlRfU1lNQk9MX0dQTChuZXRwb2xsX2dldF9jYXJyaWVyX3RpbWVvdXQpO1xcbiAgNjI6XFx0XFxuICA2MzpcXHRzdGF0aWMgbmV0ZGV2X3R4X3QgbmV0cG9sbF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuICA2NDpcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiAgNjU6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxKVxcbiAgNjY6XFx0e1xcbiAgNjc6XFx0XFx0bmV0ZGV2X3R4X3Qgc3RhdHVzID0gTkVUREVWX1RYX09LO1xcbiAgNjg6XFx0XFx0bmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXM7XFxuICA2OTpcXHRcXG4gIDcwOlxcdFxcdGZlYXR1cmVzID0gbmV0aWZfc2tiX2ZlYXR1cmVzKHNrYik7XFxuICA3MTpcXHRcXG4gIDcyOlxcdFxcdGlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpIFxcdTAwMjZcXHUwMDI2XFxuICA3MzpcXHRcXHQgICAgIXZsYW5faHdfb2ZmbG9hZF9jYXBhYmxlKGZlYXR1cmVzLCBza2ItXFx1MDAzZXZsYW5fcHJvdG8pKSB7XFxuICA3NDpcXHRcXHRcXHRza2IgPSBfX3ZsYW5faHdhY2NlbF9wdXNoX2luc2lkZShza2IpO1xcbiAgNzU6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFza2IpKSB7XFxuICA3NjpcXHRcXHRcXHRcXHQvKiBUaGlzIGlzIGFjdHVhbGx5IGEgcGFja2V0IGRyb3AsIGJ1dCB3ZVxcbiAgNzc6XFx0XFx0XFx0XFx0ICogZG9uJ3Qgd2FudCB0aGUgY29kZSB0aGF0IGNhbGxzIHRoaXNcXG4gIDc4OlxcdFxcdFxcdFxcdCAqIGZ1bmN0aW9uIHRvIHRyeSBhbmQgb3BlcmF0ZSBvbiBhIE5VTEwgc2tiLlxcbiAgNzk6XFx0XFx0XFx0XFx0ICovXFxuICA4MDpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gIDgxOlxcdFxcdFxcdH1cXG4gIDgyOlxcdFxcdH1cXG4gIDgzOlxcdFxcbiAgODQ6XFx0XFx0c3RhdHVzID0gbmV0ZGV2X3N0YXJ0X3htaXQoc2tiLCBkZXYsIHR4cSwgZmFsc2UpO1xcbiAgODU6XFx0XFxuICA4NjpcXHRvdXQ6XFxuICA4NzpcXHRcXHRyZXR1cm4gc3RhdHVzO1xcbiAgODg6XFx0fVxcbiAgODk6XFx0XFxuICA5MDpcXHRzdGF0aWMgdm9pZCBxdWV1ZV9wcm9jZXNzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gIDkxOlxcdHtcXG4gIDkyOlxcdFxcdHN0cnVjdCBuZXRwb2xsX2luZm8gKm5waW5mbyA9XFxuICA5MzpcXHRcXHRcXHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5ldHBvbGxfaW5mbywgdHhfd29yay53b3JrKTtcXG4gIDk0OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuICA5NTpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiAgOTY6XFx0XFxuICA5NzpcXHRcXHR3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKFxcdTAwMjZucGluZm8tXFx1MDAzZXR4cSkpKSB7XFxuICA5ODpcXHRcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLVxcdTAwM2VkZXY7XFxuICA5OTpcXHRcXHRcXHRzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7XFxuIDEwMDpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgcV9pbmRleDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDQ6Mjc6MjQuOTExMjcxNTM3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUwNjAyOTkwNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBuZXRwb2xsYCBidXNpbmVzcy4gQXMgYSBxdWljayByZWZyZXNoZXIsIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzZXR1cCBhbmQgdGhlIHBhY2tldCBmbG93LiBJIHRoaW5rIHJlYWRpbmcgbGluZXMgMjYwIHRocm91Z2ggMzEwIG9mIGBuZXQvY29yZS9uZXRwb2xsLmNgIHNob3VsZCBnaXZlIG1lIGEgc29saWQgc3RhcnQgb24gdGhhdC4gSSdtIGtlZW4gdG8gc2VlIGhvdyB0aGV5J3ZlIGltcGxlbWVudGVkIGl0LCBjb25zaWRlcmluZyB0aGUgbnVhbmNlcyBvZiBoaWdoLXBlcmZvcm1hbmNlIG5ldHdvcmtpbmcgYW5kIHRoZSBrZXJuZWwncyBhcmNoaXRlY3R1cmUuIEknbSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGNsZXZlciBvcHRpbWl6YXRpb25zIHRoZXkndmUgZW1wbG95ZWQuIEl0IHdpbGwgYmUgaW50ZXJlc3RpbmcgdG8gc2VlIHdoYXQga2luZCBvZiBkZXNpZ24gY2hvaWNlcyB3ZXJlIG1hZGUgYW5kIGhvdyB0aGF0IG1heSBpbXBhY3QgcGVyZm9ybWFuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTM2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNDoyNzoyOS45NzE1NzQ2MzFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExNDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL25ldHBvbGwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNjA6XFx0XFx0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpO1xcbiAyNjE6XFx0XFxuIDI2MjpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShuYXBpLCBcXHUwMDI2ZGV2LVxcdTAwM2VuYXBpX2xpc3QsIGRldl9saXN0KSB7XFxuIDI2MzpcXHRcXHRcXHRpZiAoUkVBRF9PTkNFKG5hcGktXFx1MDAzZXBvbGxfb3duZXIpID09IHNtcF9wcm9jZXNzb3JfaWQoKSlcXG4gMjY0OlxcdFxcdFxcdFxcdHJldHVybiAxO1xcbiAyNjU6XFx0XFx0fVxcbiAyNjY6XFx0XFx0cmV0dXJuIDA7XFxuIDI2NzpcXHR9XFxuIDI2ODpcXHRcXG4gMjY5OlxcdC8qIGNhbGwgd2l0aCBJUlEgZGlzYWJsZWQgKi9cXG4gMjcwOlxcdHN0YXRpYyBuZXRkZXZfdHhfdCBfX25ldHBvbGxfc2VuZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAyNzE6XFx0e1xcbiAyNzI6XFx0XFx0bmV0ZGV2X3R4X3Qgc3RhdHVzID0gTkVUREVWX1RYX0JVU1k7XFxuIDI3MzpcXHRcXHRuZXRkZXZfdHhfdCByZXQgPSBORVRfWE1JVF9EUk9QO1xcbiAyNzQ6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4gMjc1OlxcdFxcdHVuc2lnbmVkIGxvbmcgdHJpZXM7XFxuIDI3NjpcXHRcXHQvKiBJdCBpcyB1cCB0byB0aGUgY2FsbGVyIHRvIGtlZXAgbnBpbmZvIGFsaXZlLiAqL1xcbiAyNzc6XFx0XFx0c3RydWN0IG5ldHBvbGxfaW5mbyAqbnBpbmZvO1xcbiAyNzg6XFx0XFxuIDI3OTpcXHRcXHRsb2NrZGVwX2Fzc2VydF9pcnFzX2Rpc2FibGVkKCk7XFxuIDI4MDpcXHRcXG4gMjgxOlxcdFxcdGRldiA9IG5wLVxcdTAwM2VkZXY7XFxuIDI4MjpcXHRcXHQvKiBucGluZm8tXFx1MDAzZXR4cSBiZWxvbmdzIHRvIG5wLVxcdTAwM2VkZXYsIHNvIHJldHJpZXMgbXVzdCBzdGF5IGJvdW5kIHRvIGl0LiAqL1xcbiAyODM6XFx0XFx0c2tiLVxcdTAwM2VkZXYgPSBkZXY7XFxuIDI4NDpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIDI4NTpcXHRcXHRucGluZm8gPSByY3VfZGVyZWZlcmVuY2VfYmgoZGV2LVxcdTAwM2VucGluZm8pO1xcbiAyODY6XFx0XFxuIDI4NzpcXHRcXHRpZiAoIW5waW5mbyB8fCAhbmV0aWZfcnVubmluZyhkZXYpIHx8ICFuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKSB7XFxuIDI4ODpcXHRcXHRcXHRkZXZfa2ZyZWVfc2tiX2lycShza2IpO1xcbiAyODk6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDI5MDpcXHRcXHR9XFxuIDI5MTpcXHRcXG4gMjkyOlxcdFxcdC8qIGRvbid0IGdldCBtZXNzYWdlcyBvdXQgb2Ygb3JkZXIsIGFuZCBubyByZWN1cnNpb24gKi9cXG4gMjkzOlxcdFxcdGlmIChza2JfcXVldWVfbGVuKFxcdTAwMjZucGluZm8tXFx1MDAzZXR4cSkgPT0gMCBcXHUwMDI2XFx1MDAyNiAhbmV0cG9sbF9vd25lcl9hY3RpdmUoZGV2KSkge1xcbiAyOTQ6XFx0XFx0XFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxO1xcbiAyOTU6XFx0XFxuIDI5NjpcXHRcXHRcXHR0eHEgPSBuZXRkZXZfY29yZV9waWNrX3R4KGRldiwgc2tiLCBOVUxMKTtcXG4gMjk3OlxcdFxcbiAyOTg6XFx0XFx0XFx0LyogdHJ5IHVudGlsIG5leHQgY2xvY2sgdGljayAqL1xcbiAyOTk6XFx0XFx0XFx0Zm9yICh0cmllcyA9IGppZmZpZXNfdG9fdXNlY3MoMSkvVVNFQ19QRVJfUE9MTDtcXG4gMzAwOlxcdFxcdFxcdCAgICAgdHJpZXMgXFx1MDAzZSAwOyAtLXRyaWVzKSB7XFxuIDMwMTpcXHRcXHRcXHRcXHRpZiAoSEFSRF9UWF9UUllMT0NLKGRldiwgdHhxKSkge1xcbiAzMDI6XFx0XFx0XFx0XFx0XFx0aWYgKCFuZXRpZl94bWl0X3N0b3BwZWQodHhxKSlcXG4gMzAzOlxcdFxcdFxcdFxcdFxcdFxcdHN0YXR1cyA9IG5ldHBvbGxfc3RhcnRfeG1pdChza2IsIGRldiwgdHhxKTtcXG4gMzA0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNDoyNzoyOS45NzE2ODg2NzFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzkxMzkzNDU4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldHBvbGwgVFggUXVldWUgYW5kIFBvdGVudGlhbCBPT00gVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSW4gYF9fbmV0cG9sbF9zZW5kX3NrYmAsIEkgc2VlIGEgY3JpdGljYWwgYXJlYSBjb25jZXJuaW5nIHRoZSBoYW5kbGluZyBvZiB0cmFuc21pc3Npb24gZmFpbHVyZXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHdoYXQgaGFwcGVucyBpbiB0aGUgZmFpbHVyZSBwYXRoLiBTcGVjaWZpY2FsbHksIGlmIGBkZXZfeG1pdF9jb21wbGV0ZShzdGF0dXMpYCByZXR1cm5zIGZhbHNlLCBpbXBseWluZyB0aGUgZGV2aWNlIGlzbid0IGltbWVkaWF0ZWx5IHJlYWR5IHRvIHNlbmQgdGhlIHBhY2tldC5cblxuRmlyc3QsIEkgc2VlIHRoZSBjb2RlIGNoZWNrcyBpZiB0aGUgYG5waW5mby1cdTAwM2V0eHFgIHF1ZXVlIGhhcyByZWFjaGVkIGl0cyBtYXhpbXVtIHNpemUsIGBORVRQT0xMX1RYUV9NQVhgLiAgSWYgaXQgKmhhcyosIHRoZSBwYWNrZXQgKGBza2JgKSBpcyBmcmVlZCBpbW1lZGlhdGVseSB1c2luZyBgZGV2X2tmcmVlX3NrYl9pcnEoc2tiKWAgYW5kIHRoZSBmdW5jdGlvbiBqdW1wcyB0byBgb3V0YCwgcmV0dXJuaW5nIGByZXRgIHdoaWNoLCBpbXBvcnRhbnRseSwgaXMgc2V0IHRvIGBORVRfWE1JVF9EUk9QYC5cblxuVGhlIGNydWNpYWwgcG9pbnQgaGl0cyBtZTogUHJldmlvdXNseSwgdGhlcmUgKndhcyBubyogbWF4aW11bSBzaXplIG9uIGBucGluZm8tXHUwMDNldHhxYCEgSWYgdGhlIG5ldHdvcmsgdHJhbnNtaXNzaW9uIGNvbnRpbnVvdXNseSBmYWlsZWQsIG9yIHdhcyBoYWx0ZWQsIHBhY2tldHMgY291bGQgYmUgZW5kbGVzc2x5IGFkZGVkIHRvIGBucGluZm8tXHUwMDNldHhxYC4gVGhpcywgd2l0aG91dCBhbnkgbGltaXQsIG9wZW5zIHRoZSBkb29yIHRvIGEgbWVtb3J5IGV4aGF1c3Rpb24gdnVsbmVyYWJpbGl0eSwgYSBjbGFzc2ljIE9PTSBzaXR1YXRpb24uICBUaGUgZmFjdCB0aGF0IHBhY2tldHMgd2VyZSBzaW1wbHkgcXVldWVkIGFuZCBub3QgZHJvcHBlZCwgZXNwZWNpYWxseSBnaXZlbiB0aGUgXCJvdXRcIiByZXR1cm4gc3RhdHVzLCBpcyBhIGh1Z2UgcmVkIGZsYWcuXG5cbk15IG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgYWN0dWFsbHkgcmVhY2hhYmxlLiBDYW4gSSB0cmlnZ2VyIHRoaXMgY29uZGl0aW9uIHdpdGhpbiBzeXprYWxsZXIgb3IgYSB2aXJ0dWFsIG1hY2hpbmU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgbmV0cG9sbGAgYW5kIGBuZXRjb25zb2xlYCBhcmUgY29uZmlndXJlZCBhbmQgdXNlZC4gV2hlcmUgYXJlIHRoZXNlIGZlYXR1cmVzIGV2ZW4gZW5hYmxlZD8gSSBuZWVkIHRvIGNoZWNrIGhvdyBgbmV0cG9sbGAgb3IgYG5ldGNvbnNvbGVgIGlzIGNvbmZpZ3VyZWQuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBfX25ldHBvbGxfc2V0dXBgIG9yIGBuZXRwb2xsX3NldHVwYCBpcyBjYWxsZWQuIEkgbmVlZCB0byBncmVwIGZvciBgbmV0cG9sbF9zZXR1cGAgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzExOCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA0OjI3OjMzLjg4NTYyNjUyMVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxMzQ1NDE1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRwb2xsX3NldHVwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MTM5Mj1zdGF0aWMgaW5saW5lIGludCBzbGF2ZV9lbmFibGVfbmV0cG9sbChzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xNDAxLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MTQwMjpcXHRlcnIgPSBfX25ldHBvbGxfc2V0dXAobnAsIHNsYXZlLVxcdTAwM2VkZXYpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTQwMy1cXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTE0NTE9c3RhdGljIHZvaWQgYm9uZF9uZXRwb2xsX2NsZWFudXAoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xNDYxLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MTQ2MjpzdGF0aWMgaW50IGJvbmRfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTQ2My17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTU5NDI9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBib25kX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU5NjAtI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo1OTYxOlxcdC5uZG9fbmV0cG9sbF9zZXR1cFxcdD0gYm9uZF9uZXRwb2xsX3NldHVwLFxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTk2Mi1cXHQubmRvX25ldHBvbGxfY2xlYW51cFxcdD0gYm9uZF9uZXRwb2xsX2NsZWFudXAsXFxuLS1cXG5kcml2ZXJzL25ldC9tYWN2bGFuLmM9MTEzNj1zdGF0aWMgdm9pZCBtYWN2bGFuX2Rldl9wb2xsX2NvbnRyb2xsZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy0xMTQwLVxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYzoxMTQxOnN0YXRpYyBpbnQgbWFjdmxhbl9kZXZfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy0xMTQyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy0xMTUyLVxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYzoxMTUzOlxcdGVyciA9IF9fbmV0cG9sbF9zZXR1cChuZXRwb2xsLCByZWFsX2Rldik7XFxuZHJpdmVycy9uZXQvbWFjdmxhbi5jLTExNTQtXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvbWFjdmxhbi5jPTExOTM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBtYWN2bGFuX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9tYWN2bGFuLmMtMTIxMi1cXHQubmRvX3BvbGxfY29udHJvbGxlclxcdD0gbWFjdmxhbl9kZXZfcG9sbF9jb250cm9sbGVyLFxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYzoxMjEzOlxcdC5uZG9fbmV0cG9sbF9zZXR1cFxcdD0gbWFjdmxhbl9kZXZfbmV0cG9sbF9zZXR1cCxcXG5kcml2ZXJzL25ldC9tYWN2bGFuLmMtMTIxNC1cXHQubmRvX25ldHBvbGxfY2xlYW51cFxcdD0gbWFjdmxhbl9kZXZfbmV0cG9sbF9jbGVhbnVwLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE2Mz1zdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjA1LSAqXFx0XFx0aXRzIEdGUF9BVE9NSUMgYWxsb2NhdGlvbiBmYWlscy4gTGlmZXRpbWUgYnJhY2tldHMgYVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMDY6ICpcXHRcXHRzdWNjZXNzZnVsIG5ldHBvbGxfc2V0dXAoKSAvIG5ldHBvbGxfY2xlYW51cCgpIHBhaXIgb24gQG5wLlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDctICogQHJlZmlsbF93cTpcXHRXb3JrIGl0ZW0gdGhhdCBhc3luY2hyb25vdXNseSB0b3BzIEBza2JfcG9vbCBiYWNrIHVwIHRvXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9NDQ5PXN0YXRpYyBpbnQgbmV0Y29uc190YWtlX2lwdjQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00NzgtICogVGVzdCB3aGV0aGVyIHRoZSBjYWxsZXIgbGVmdCBudC1cXHUwMDNlbG9jYWxfaXAgdW5zZXQsIHNvIHRoYXRcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NDc5OiAqIG5ldGNvbnNfbmV0cG9sbF9zZXR1cCgpIHNob3VsZCBhdXRvLXBvcHVsYXRlIGl0IGZyb20gdGhlIGVncmVzcyBkZXZpY2UuXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQ4MC0gKlxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTQ4Nz1zdGF0aWMgYm9vbCBuZXRjb25zX2xvY2FsX2lwX3Vuc2V0KGNvbnN0IHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDkzLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo0OTQ6c3RhdGljIGludCBuZXRjb25zX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDk1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01NTEtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjU1MjpcXHRlcnIgPSBfX25ldHBvbGxfc2V0dXAobnAsIG5kZXYpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01NTMtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz01NzY9c3RhdGljIHZvaWQgcmVzdW1lX3RhcmdldChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01Nzcte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo1Nzg6XFx0LyogSW5pdGlhbGlzZSB0aGUgc2tiIHBvb2wgYmVmb3JlIG5ldHBvbGxfc2V0dXAoKSBtYWtlcyBudC1cXHUwMDNlbnAuZGV2XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU3OS1cXHQgKiB2aXNpYmxlIHRvIHRhcmdldF9saXN0IHdhbGtlcnMgKGUuZy4gbmV0Y29uc29sZV9uZXRkZXZfZXZlbnQpLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU4NC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NTg1OlxcdGlmIChuZXRjb25zX25ldHBvbGxfc2V0dXAobnQpKSB7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU4Ni1cXHRcXHQvKiBuZXRwb2xsIGZhaWxzIHNldHVwIG9uY2UsIGRvIG5vdCB0cnkgYWdhaW4uICovXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9NjA5PXN0YXRpYyB2b2lkIHByb2Nlc3NfcmVzdW1lX3RhcmdldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjM0LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo2MzU6XFx0LyogbmV0cG9sbF9zZXR1cCgpIHRvb2sgYSBuZXRfZGV2aWNlIHJlZmVyZW5jZSBhbmQgZHJvcHBlZCB0aGUgUlROTFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy02MzYtXFx0ICogYmVmb3JlIHJldHVybmluZywgYWxsIHdoaWxlIHRoaXMgdGFyZ2V0IHdhcyBvZmYgdGFyZ2V0X2xpc3QgYW5kXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTAwMj1zdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDU1LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMDU2OlxcdFxcdC8qIEluaXRpYWxpc2UgdGhlIHNrYiBwb29sIGJlZm9yZSBuZXRwb2xsX3NldHVwKCkgc28gdGhlIHBvb2xcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA1Ny1cXHRcXHQgKiBpcyB2YWxpZCBhcyBzb29uIGFzIG50LVxcdTAwM2VucC5kZXYgYmVjb21lcyB2aXNpYmxlIHRvXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA2My1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTA2NDpcXHRcXHRyZXQgPSBuZXRjb25zX25ldHBvbGxfc2V0dXAobnQpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDY1LVxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNjIzPXN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmFsbG9jX3BhcmFtX3RhcmdldChjaGFyICp0YXJnZXRfY29uZmlnLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2NTQtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2NTU6XFx0LyogSW5pdGlhbGlzZSB0aGUgc2tiIHBvb2wgYmVmb3JlIG5ldHBvbGxfc2V0dXAoKSBzbyB0aGUgcG9vbCBpc1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjU2LVxcdCAqIHZhbGlkIGFzIHNvb24gYXMgbnQtXFx1MDAzZW5wLmRldiBiZWNvbWVzIHZpc2libGUuIFRoZSB0YXJnZXQgaXMgbm90XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY2MS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjY2MjpcXHRlcnIgPSBuZXRjb25zX25ldHBvbGxfc2V0dXAobnQpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjYzLVxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MTE0MD1zdGF0aWMgaW50IF9fdGVhbV9wb3J0X2VuYWJsZV9uZXRwb2xsKHN0cnVjdCB0ZWFtX3BvcnQgKnBvcnQpXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTExNDgtXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoxMTQ5OlxcdGVyciA9IF9fbmV0cG9sbF9zZXR1cChucCwgcG9ydC1cXHUwMDNlZGV2KTtcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTExNTAtXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz0yMDc4PXN0YXRpYyB2b2lkIHRlYW1fbmV0cG9sbF9jbGVhbnVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTIwODYtXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyMDg3OnN0YXRpYyBpbnQgdGVhbV9uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yMDg4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MjE3MD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHRlYW1fbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjE4NS1cXHQubmRvX3BvbGxfY29udHJvbGxlclxcdD0gdGVhbV9wb2xsX2NvbnRyb2xsZXIsXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyMTg2OlxcdC5uZG9fbmV0cG9sbF9zZXR1cFxcdD0gdGVhbV9uZXRwb2xsX3NldHVwLFxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjE4Ny1cXHQubmRvX25ldHBvbGxfY2xlYW51cFxcdD0gdGVhbV9uZXRwb2xsX2NsZWFudXAsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTE0NTU9c3RydWN0IG5ldF9kZXZpY2Vfb3BzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTUxMy1cXHR2b2lkICAgICAgICAgICAgICAgICAgICAoKm5kb19wb2xsX2NvbnRyb2xsZXIpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MTUxNDpcXHRpbnRcXHRcXHRcXHQoKm5kb19uZXRwb2xsX3NldHVwKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTE1MTUtXFx0dm9pZFxcdFxcdFxcdCgqbmRvX25ldHBvbGxfY2xlYW51cCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldHBvbGwuaD02Mj1zdGF0aWMgaW5saW5lIHZvaWQgbmV0cG9sbF9wb2xsX2VuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7IHJldHVybjsgfVxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRwb2xsLmgtNjQtXFxuaW5jbHVkZS9saW51eC9uZXRwb2xsLmg6NjU6aW50IF9fbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcXG5pbmNsdWRlL2xpbnV4L25ldHBvbGwuaC02Ni12b2lkIF9fbmV0cG9sbF9mcmVlKHN0cnVjdCBuZXRwb2xsICpucCk7XFxuLS1cXG5uZXQvODAyMXEvdmxhbl9kZXYuYz02OTA9c3RhdGljIHZvaWQgdmxhbl9kZXZfcG9sbF9jb250cm9sbGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvODAyMXEvdmxhbl9kZXYuYy02OTQtXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmM6Njk1OnN0YXRpYyBpbnQgdmxhbl9kZXZfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC84MDIxcS92bGFuX2Rldi5jLTY5Ni17XFxuLS1cXG5uZXQvODAyMXEvdmxhbl9kZXYuYy03MDYtXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmM6NzA3OlxcdGVyciA9IF9fbmV0cG9sbF9zZXR1cChuZXRwb2xsLCByZWFsX2Rldik7XFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtNzA4LVxcdGlmIChlcnIpIHtcXG4tLVxcbm5ldC84MDIxcS92bGFuX2Rldi5jPTEwNTM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2bGFuX25ldGRldl9vcHMgPSB7XFxuLS1cXG5uZXQvODAyMXEvdmxhbl9kZXYuYy0xMDc5LVxcdC5uZG9fcG9sbF9jb250cm9sbGVyXFx0PSB2bGFuX2Rldl9wb2xsX2NvbnRyb2xsZXIsXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmM6MTA4MDpcXHQubmRvX25ldHBvbGxfc2V0dXBcXHQ9IHZsYW5fZGV2X25ldHBvbGxfc2V0dXAsXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtMTA4MS1cXHQubmRvX25ldHBvbGxfY2xlYW51cFxcdD0gdmxhbl9kZXZfbmV0cG9sbF9jbGVhbnVwLFxcbi0tXFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYz0zMDY9c3RhdGljIGludCBfX2JyX25ldHBvbGxfZW5hYmxlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTMxNC1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjMxNTpcXHRlcnIgPSBfX25ldHBvbGxfc2V0dXAobnAsIHAtXFx1MDAzZWRldik7XFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0zMTYtXFx0aWYgKGVycikge1xcbi0tXFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYz0zMjU9aW50IGJyX25ldHBvbGxfZW5hYmxlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTMzMi1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjMzMzpzdGF0aWMgaW50IGJyX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTMzNC17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jPTQzOT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGJyX25ldGRldl9vcHMgPSB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTQ1MS0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjQ1MjpcXHQubmRvX25ldHBvbGxfc2V0dXBcXHQgPSBicl9uZXRwb2xsX3NldHVwLFxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtNDUzLVxcdC5uZG9fbmV0cG9sbF9jbGVhbnVwXFx0ID0gYnJfbmV0cG9sbF9jbGVhbnVwLFxcbi0tXFxubmV0L2NvcmUvbmV0cG9sbC5jPTM1Mz1FWFBPUlRfU1lNQk9MKG5ldHBvbGxfc2VuZF9za2IpO1xcbm5ldC9jb3JlL25ldHBvbGwuYy0zNTQtXFxubmV0L2NvcmUvbmV0cG9sbC5jOjM1NTppbnQgX19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxubmV0L2NvcmUvbmV0cG9sbC5jLTM1Ni17XFxuLS1cXG5uZXQvY29yZS9uZXRwb2xsLmMtMzgyLVxcdFxcdG9wcyA9IG5kZXYtXFx1MDAzZW5ldGRldl9vcHM7XFxubmV0L2NvcmUvbmV0cG9sbC5jOjM4MzpcXHRcXHRpZiAob3BzLVxcdTAwM2VuZG9fbmV0cG9sbF9zZXR1cCkge1xcbm5ldC9jb3JlL25ldHBvbGwuYzozODQ6XFx0XFx0XFx0ZXJyID0gb3BzLVxcdTAwM2VuZG9fbmV0cG9sbF9zZXR1cChuZGV2KTtcXG5uZXQvY29yZS9uZXRwb2xsLmMtMzg1LVxcdFxcdFxcdGlmIChlcnIpXFxuLS1cXG5uZXQvY29yZS9uZXRwb2xsLmMtNDA0LX1cXG5uZXQvY29yZS9uZXRwb2xsLmM6NDA1OkVYUE9SVF9TWU1CT0xfR1BMKF9fbmV0cG9sbF9zZXR1cCk7XFxubmV0L2NvcmUvbmV0cG9sbC5jLTQwNi1cXG4tLVxcbm5ldC9kc2EvdXNlci5jPTEzMDU9c3RhdGljIGludCBkc2FfdXNlcl9zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2RzYS91c2VyLmMtMTMxMy0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcXG5uZXQvZHNhL3VzZXIuYzoxMzE0OnN0YXRpYyBpbnQgZHNhX3VzZXJfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9kc2EvdXNlci5jLTEzMTUte1xcbi0tXFxubmV0L2RzYS91c2VyLmMtMTMyNC1cXG5uZXQvZHNhL3VzZXIuYzoxMzI1OlxcdGVyciA9IF9fbmV0cG9sbF9zZXR1cChuZXRwb2xsLCBjb25kdWl0KTtcXG5uZXQvZHNhL3VzZXIuYy0xMzI2LVxcdGlmIChlcnIpIHtcXG4tLVxcbm5ldC9kc2EvdXNlci5jPTI1ODY9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBkc2FfdXNlcl9uZXRkZXZfb3BzID0ge1xcbi0tXFxubmV0L2RzYS91c2VyLmMtMjU5Ni0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcXG5uZXQvZHNhL3VzZXIuYzoyNTk3OlxcdC5uZG9fbmV0cG9sbF9zZXR1cFxcdD0gZHNhX3VzZXJfbmV0cG9sbF9zZXR1cCxcXG5uZXQvZHNhL3VzZXIuYy0yNTk4LVxcdC5uZG9fbmV0cG9sbF9jbGVhbnVwXFx0PSBkc2FfdXNlcl9uZXRwb2xsX2NsZWFudXAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA0OjI3OjM1LjQ5OTA4NTk3NloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozODg3MzQ3OTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEludmVzdGlnYXRpb24gb2YgbmV0Y29uc29sZSBhbmQgbmV0cG9sbCBTZXR1cCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gaG93IGBuZXRjb25zX25ldHBvbGxfc2V0dXBgIHdvcmtzLiBJdCBzZWVtcyB0aGF0IGBuZXRjb25zb2xlYCwgd2hlbiBjb25maWd1cmVkIGVpdGhlciB0aHJvdWdoIGBjb25maWdmc2AgYXQgYC9zeXMva2VybmVsL2NvbmZpZy9uZXRjb25zb2xlL2Agb3Igd2l0aCBtb2R1bGUgcGFyYW1ldGVycyB1c2luZyBgbmV0Y29uc29sZT0uLi5gLCBlbmRzIHVwIGNhbGxpbmcgYF9fbmV0cG9sbF9zZXR1cGAuIE5vdywgdGhhdCBnZXRzIG1lIHRoaW5raW5nOiBDYW4gYG5ldGNvbnNvbGVgIGV2ZW4gKmJlKiByZWFjaGVkIHRocm91Z2ggYGNvbmZpZ2ZzYD8gSXQncyBiZWVuIGEgd2hpbGUsIGFuZCBJIG5lZWQgdG8gYmUgc3VyZS5cblxuTGV0J3Mgc2VlLCBJIHNob3VsZCBjaGVjayB0aGUgdXNlIG9mIGBORVRDT05TT0xFX0RZTkFNSUNgIGFuZCB0aGUgY29uZmlnZnMgdXNhZ2UgaW4gc3l6a2FsbGVyIG9yIGEgc3RhbmRhcmQgTGludXgga2VybmVsIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLiBBaCwgcmlnaHQsIG9mIGNvdXJzZSwgY29uZmlnZnMgaXMgc29tZXRoaW5nIHRoYXQgdXNlciBzcGFjZSBjYW4gZHluYW1pY2FsbHkgbW91bnQ7IHN5emthbGxlciBjYW4gZWFzaWx5IG1vdW50IGNvbmZpZ2ZzIGFuZCBjcmVhdGUgZW50cmllcywgc28gdGhhdCdzIGhlbHBmdWwuIFRoaXMgbWFrZXMgbWUgd29uZGVyLCBjYW4gYG5ldHBvbGxfc2VuZF9za2JgIGFjdHVhbGx5IGJlIGNhbGxlZCBpbiB0aGlzIHNjZW5hcmlvP1xuXG5UaW1lIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGl0c2VsZi4gT2theSwgaGVyZSB3ZSBhcmUgaW4gYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AuIFJpZ2h0LCBzbyBgbmV0cG9sbF9zZW5kX3VkcGAgaXMgd2hhdCB3ZSdyZSBhZnRlci4gQWhhISBXaGVuIGBwcmludGtgIGlzIGNhbGxlZCwgb3Igd2hlbiBzb21ldGhpbmcgd3JpdGVzIHRvIGAvZGV2L2ttc2dgLCB0aGUgbmV0Y29uc29sZSdzIHdyaXRlIGhhbmRsZXIsIGB3cml0ZV9tc2dgLCBpcyBpbnZva2VkLiBUaGF0J3MgdGhlIGNyaXRpY2FsIGxpbmsuIE5vdywgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoYXQgYHdyaXRlX21zZ2AgZnVuY3Rpb24gaW4gYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AgdG8gc2VlIHByZWNpc2VseSB3aGF0IHRyaWdnZXJzIHRoZSBvdXRwdXQsIGFuZCB3aGVyZSBpdCBnb2VzIGZyb20gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NTEzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA0OjI3OjM5LjM4NjQzNjk4OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY3OTkyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0cG9sbF9zZW5kX3VkcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIxNTA9c3RhdGljIHZvaWQgcHVzaF9pcHY2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE3My1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE3NDpzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTc1LVxcdFxcdFxcdCAgICBpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTEtLyoqXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMTI6ICogc2VuZF91ZHAgLSBXcmFwcGVyIGZvciBuZXRwb2xsX3NlbmRfdWRwIHRoYXQgY291bnRzIGVycm9yc1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjEzLSAqIEBudDogdGFyZ2V0IHRvIHNlbmQgbWVzc2FnZSB0b1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTYtICpcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIxNzogKiBDYWxscyBuZXRwb2xsX3NlbmRfdWRwIGFuZCBjbGFzc2lmaWVzIHRoZSByZXR1cm4gdmFsdWUuIElmIGFuIGVycm9yXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTgtICogb2NjdXJyZWQgaXQgaW5jcmVtZW50cyBzdGF0aXN0aWNzIGluIG50LVxcdTAwM2VzdGF0cyBhY2NvcmRpbmdseS5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIxOTogKiBPbmx5IGNhbGxzIG5ldHBvbGxfc2VuZF91ZHAgaWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBkaXNhYmxlZC5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIyMC0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjIyMT1zdGF0aWMgdm9pZCBzZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMjIte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjIzOlxcdGludCByZXN1bHQgPSBuZXRwb2xsX3NlbmRfdWRwKG50LCBtc2csIGxlbik7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMjQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA0OjI3OjM5LjQzMzI0MDgzN1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxODYxMDczMjExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGVzZSBgc2VuZF91ZHBgIGFuZCBgbmV0cG9sbF9zZW5kX3VkcGAgZnVuY3Rpb25zLiBSaWdodCBub3csIEknbSB0cnlpbmcgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIHRoZSBjb2RlLlxuXG4qKkludmVzdGlnYXRpbmcgQ2FsbCBTaXRlcyoqXG5cbkknbSB0aGlua2luZywgXCJXaGVyZSBlbHNlIGFyZSB0aGVzZSBmdW5jdGlvbnMgYWN0dWFsbHkgYmVpbmcgKnVzZWQqP1wiIEZpbmRpbmcgYWxsIHRoZSBjYWxsIHNpdGVzIGlzIGtleSBoZXJlLiBMZXQncyBzZWUuLi4gYSBxdWljayBjaGVjayBvZiB0aGUgY29kZWJhc2Ugc2hvdWxkIGRvIHRoZSB0cmljay4gQSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBiYXNlZCBvbiBwcmlvciBleHBlcmllbmNlLCB3b3VsZCBsaWtlbHkgYmUgYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AuIEl0J3MgYSBwcmltZSBzdXNwZWN0IGdpdmVuIGl0cyBsaWtlbHkgcmVsYXRpb24gdG8gbmV0d29yayBjb25zb2xlIGZ1bmN0aW9uYWxpdHksIGFuZCBzaG91bGQgZ2l2ZSBtZSBzb21lIGdvb2QgbGVhZHMgdG8gZm9sbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODUxMiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA0OjI3OjQxLjI5NDMxNjA1OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4MzI1OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VuZF91ZHBcXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIxNTA9c3RhdGljIHZvaWQgcHVzaF9pcHY2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE3My1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE3NDpzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTc1LVxcdFxcdFxcdCAgICBpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTEtLyoqXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMTI6ICogc2VuZF91ZHAgLSBXcmFwcGVyIGZvciBuZXRwb2xsX3NlbmRfdWRwIHRoYXQgY291bnRzIGVycm9yc1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjEzLSAqIEBudDogdGFyZ2V0IHRvIHNlbmQgbWVzc2FnZSB0b1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTYtICpcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIxNzogKiBDYWxscyBuZXRwb2xsX3NlbmRfdWRwIGFuZCBjbGFzc2lmaWVzIHRoZSByZXR1cm4gdmFsdWUuIElmIGFuIGVycm9yXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTgtICogb2NjdXJyZWQgaXQgaW5jcmVtZW50cyBzdGF0aXN0aWNzIGluIG50LVxcdTAwM2VzdGF0cyBhY2NvcmRpbmdseS5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIxOTogKiBPbmx5IGNhbGxzIG5ldHBvbGxfc2VuZF91ZHAgaWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBkaXNhYmxlZC5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIyMC0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIyMTpzdGF0aWMgdm9pZCBzZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMjIte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjIzOlxcdGludCByZXN1bHQgPSBuZXRwb2xsX3NlbmRfdWRwKG50LCBtc2csIGxlbik7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMjQtXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjIzOD1zdGF0aWMgdm9pZCBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjI3MC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjI3MTpcXHRzZW5kX3VkcChudCwgbnQtXFx1MDAzZWJ1ZiwgbXNnX2xlbik7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyNzItfVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIyODI9c3RhdGljIHZvaWQgc2VuZF9mcmFnbWVudGVkX2JvZHkoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMzY5LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMzcwOlxcdFxcdHNlbmRfdWRwKG50LCBudC1cXHUwMDNlYnVmLCBidWZfb2Zmc2V0KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjM3MS1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjQyMD1zdGF0aWMgdm9pZCBzZW5kX2V4dF9tc2dfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQyOC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQyOTpcXHQvKiBLZWVwcyB0aGUgcGF5bG9hZCBwaWNrZWQgYmVsb3cgYWxpdmUgdW50aWwgdGhlIGxhc3Qgc2VuZF91ZHAoKS4gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQzMC1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjQ1Mj1zdGF0aWMgdm9pZCBzZW5kX21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0NTktXFx0XFx0ZnJhZyA9IG1pbihsZWZ0LCBNQVhfUFJJTlRfQ0hVTkspO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDYwOlxcdFxcdHNlbmRfdWRwKG50LCB0bXAsIGZyYWcpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDYxLVxcdFxcdHRtcCArPSBmcmFnO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNDoyNzo0MS4zNDExNTE3NzdaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mjg3OTkxODI2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQ2FsbGVycyBvZiBgbmV0cG9sbF9zZW5kX3NrYmAqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIGNhbGxlcnMgb2YgYG5ldHBvbGxfc2VuZF9za2JgLiBMZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uLiBUaGlzIGlzIGNsZWFybHkgYSBjcml0aWNhbCBwYXRoIGZvciBuZXR3b3JrIHBvbGxpbmcgZHVyaW5nIGVtZXJnZW5jaWVzIG9yIGRlYnVnZ2luZywgc28gaXQncyB3b3J0aCB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlZ3JhdGlvbnMuXG5cbkkndmUgZ290IHNpeCBrZXkgY2FsbGluZyBjb250ZXh0czogYGJvbmRpbmdgLCBgbWFjdmxhbmAsIGB2bGFuYCwgYGJyaWRnZWAsIGB0ZWFtYCwgYW5kIGBkc2FgLiBFYWNoIG9uZSBjaGVja3MgYG5ldHBvbGxfdHhfcnVubmluZyhkZXYpYCBhbmQsIGlmIGl0J3Mgc2V0LCBjYWxscyBpdHMgb3duIG5ldHBvbGwtc3BlY2lmaWMgc2VuZCBmdW5jdGlvbiwgbGlrZSBgYm9uZF9uZXRwb2xsX3NlbmRfc2tiYCwgYG1hY3ZsYW5fbmV0cG9sbF9zZW5kX3NrYmAsIGFuZCBzbyBvbi4gRWFjaCBvZiB0aGVzZSBmdW5jdGlvbnMgaXMgbGlrZWx5IHRhaWxvcmVkIHRvIHRoZSBzcGVjaWZpYyBuZXR3b3JraW5nIGFic3RyYWN0aW9uLiBGb3IgZXhhbXBsZSwgYGJvbmRpbmdgIGNhbGxzIGBib25kX2dldF9zbGF2ZV9ieV9kZXZgIHRvIHNlbGVjdCB0aGUgcmlnaHQgc2xhdmUgZGV2aWNlIHRvIHNlbmQgdG8uIGBicmlkZ2VgIGp1c3QgY2FsbHMgYGJyX25ldHBvbGxfc2VuZF9za2JgLlxuXG5Ob3cgdGhlIHF1ZXN0aW9uIGlzLCAqaG93KiBpcyB0aGlzIGBuZXRwb2xsX3R4X3J1bm5pbmdgIGZsYWcgc2V0PyBJdCdzIGEga2V5IGNvbmRpdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN0YXRlIG1hY2hpbmUgYW5kIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIHRoaXMgbmV0cG9sbCBUWCBtb2RlLiBUaW1lIHRvIGdyZXAgZm9yIHRoYXQgZmxhZyBhbmQgc2VlIHdoZXJlIGl0J3MgYmVpbmcgbWFuaXB1bGF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTcxLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA0OjI3OjQ0LjIyMTA3Mjg5MloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyNjIxODMyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRwb2xsX3R4X3J1bm5pbmdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz0yOTc9bmV0ZGV2X3R4X3QgYm9uZF9kZXZfcXVldWVfeG1pdChzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzA1LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MzA2OlxcdGlmICh1bmxpa2VseShuZXRwb2xsX3R4X3J1bm5pbmcoYm9uZC1cXHUwMDNlZGV2KSkpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0zMDctXFx0XFx0cmV0dXJuIGJvbmRfbmV0cG9sbF9zZW5kX3NrYihib25kX2dldF9zbGF2ZV9ieV9kZXYoYm9uZCwgc2xhdmVfZGV2KSwgc2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfYnBmLmM9MjQ3PWludCBuZXR2c2NfbmRveGRwX3htaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGludCBuLFxcbi0tXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzY19icGYuYy0yNjgtXFx0aWYgKHZmX25ldGRldiBcXHUwMDI2XFx1MDAyNiBuZXRpZl9ydW5uaW5nKHZmX25ldGRldikgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjX2JwZi5jOjI2OTpcXHQgICAgbmV0aWZfY2Fycmllcl9vayh2Zl9uZXRkZXYpIFxcdTAwMjZcXHUwMDI2ICFuZXRwb2xsX3R4X3J1bm5pbmcobmRldikgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjX2JwZi5jLTI3MC1cXHQgICAgdmZfbmV0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9feGRwX3htaXQgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmM9NDQyPXN0YXRpYyBpbnQgbmV0dnNjX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgYm9vbCB4ZHBfdHgpXFxuLS1cXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjX2Rydi5jLTQ1OS1cXHRpZiAodmZfbmV0ZGV2IFxcdTAwMjZcXHUwMDI2IG5ldGlmX3J1bm5pbmcodmZfbmV0ZGV2KSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmM6NDYwOlxcdCAgICBuZXRpZl9jYXJyaWVyX29rKHZmX25ldGRldikgXFx1MDAyNlxcdTAwMjYgIW5ldHBvbGxfdHhfcnVubmluZyhuZXQpIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzY19kcnYuYy00NjEtXFx0ICAgIG5ldF9kZXZpY2VfY3R4LVxcdTAwM2VkYXRhX3BhdGhfaXNfdmYpXFxuLS1cXG5kcml2ZXJzL25ldC9tYWN2bGFuLmM9NTg5PXN0YXRpYyBuZXRkZXZfdHhfdCBtYWN2bGFuX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy01OTUtXFxuZHJpdmVycy9uZXQvbWFjdmxhbi5jOjU5NjpcXHRpZiAodW5saWtlbHkobmV0cG9sbF90eF9ydW5uaW5nKGRldikpKVxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy01OTctXFx0XFx0cmV0dXJuIG1hY3ZsYW5fbmV0cG9sbF9zZW5kX3NrYih2bGFuLCBza2IpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9pZl90ZWFtLmg9MjM3PXN0YXRpYyBpbmxpbmUgaW50IHRlYW1fZGV2X3F1ZXVlX3htaXQoc3RydWN0IHRlYW0gKnRlYW0sIHN0cnVjdCB0ZWFtX3BvcnQgKnBvcnQsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3RlYW0uaC0yNDQtXFx0c2tiLVxcdTAwM2VkZXYgPSBwb3J0LVxcdTAwM2VkZXY7XFxuaW5jbHVkZS9saW51eC9pZl90ZWFtLmg6MjQ1OlxcdGlmICh1bmxpa2VseShuZXRwb2xsX3R4X3J1bm5pbmcobmV0ZGV2X2Zyb21fcHJpdih0ZWFtKSkpKSB7XFxuaW5jbHVkZS9saW51eC9pZl90ZWFtLmgtMjQ2LVxcdFxcdHRlYW1fbmV0cG9sbF9zZW5kX3NrYihwb3J0LCBza2IpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRwb2xsLmg9ODk9c3RhdGljIGlubGluZSB2b2lkIG5ldHBvbGxfcG9sbF91bmxvY2sodm9pZCAqaGF2ZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0cG9sbC5oLTk2LVxcbmluY2x1ZGUvbGludXgvbmV0cG9sbC5oOjk3OnN0YXRpYyBpbmxpbmUgYm9vbCBuZXRwb2xsX3R4X3J1bm5pbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5pbmNsdWRlL2xpbnV4L25ldHBvbGwuaC05OC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldHBvbGwuaD0xMDc9c3RhdGljIGlubGluZSB2b2lkIG5ldHBvbGxfcG9sbF91bmxvY2sodm9pZCAqaGF2ZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0cG9sbC5oLTEwOS19XFxuaW5jbHVkZS9saW51eC9uZXRwb2xsLmg6MTEwOnN0YXRpYyBpbmxpbmUgYm9vbCBuZXRwb2xsX3R4X3J1bm5pbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5pbmNsdWRlL2xpbnV4L25ldHBvbGwuaC0xMTEte1xcbi0tXFxuaW5jbHVkZS9uZXQvYm9uZGluZy5oPTEwMz1zdGF0aWMgaW5saW5lIGludCBpc19uZXRwb2xsX3R4X2Jsb2NrZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmluY2x1ZGUvbmV0L2JvbmRpbmcuaC0xMDUtXFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNm5ldHBvbGxfYmxvY2tfdHgpKVxcbmluY2x1ZGUvbmV0L2JvbmRpbmcuaDoxMDY6XFx0XFx0cmV0dXJuIG5ldHBvbGxfdHhfcnVubmluZyhkZXYpO1xcbmluY2x1ZGUvbmV0L2JvbmRpbmcuaC0xMDctXFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvODAyMXEvdmxhbl9kZXYuYz0xMDA9c3RhdGljIG5ldGRldl90eF90IHZsYW5fZGV2X2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtMTIyLVxcdGxlbiA9IHNrYi1cXHUwMDNlbGVuO1xcbm5ldC84MDIxcS92bGFuX2Rldi5jOjEyMzpcXHRpZiAodW5saWtlbHkobmV0cG9sbF90eF9ydW5uaW5nKGRldikpKVxcbm5ldC84MDIxcS92bGFuX2Rldi5jLTEyNC1cXHRcXHRyZXR1cm4gdmxhbl9uZXRwb2xsX3NlbmRfc2tiKHZsYW4sIHNrYik7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jPTMwPW5ldGRldl90eF90IGJyX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTkzLVxcdH0gZWxzZSBpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoZGVzdCkpIHtcXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjk0OlxcdFxcdGlmICh1bmxpa2VseShuZXRwb2xsX3R4X3J1bm5pbmcoZGV2KSkpIHtcXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTk1LVxcdFxcdFxcdGJyX2Zsb29kKGJyLCBza2IsIEJSX1BLVF9NVUxUSUNBU1QsIGZhbHNlLCB0cnVlLCB2aWQpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmM9NzM9c3RhdGljIHZvaWQgX19icl9mb3J3YXJkKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnRvLFxcbi0tXFxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtMTAxLVxcdH0gZWxzZSB7XFxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmM6MTAyOlxcdFxcdGlmICh1bmxpa2VseShuZXRwb2xsX3R4X3J1bm5pbmcodG8tXFx1MDAzZWJyLVxcdTAwM2VkZXYpKSkge1xcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jLTEwMy1cXHRcXHRcXHRza2JfcHVzaChza2IsIEVUSF9ITEVOKTtcXG4tLVxcbm5ldC9kc2EvdXNlci5jPTg5Nj1uZXRkZXZfdHhfdCBkc2FfZW5xdWV1ZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9kc2EvdXNlci5jLTkwMC1cXHQgKi9cXG5uZXQvZHNhL3VzZXIuYzo5MDE6XFx0aWYgKHVubGlrZWx5KG5ldHBvbGxfdHhfcnVubmluZyhkZXYpKSlcXG5uZXQvZHNhL3VzZXIuYy05MDItXFx0XFx0cmV0dXJuIGRzYV91c2VyX25ldHBvbGxfc2VuZF9za2IoZGV2LCBza2IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNDoyNzo0NS43NDcyOTgxNjlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzA2Mjg5MzM4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgYG5ldHBvbGxfdHhfcnVubmluZ2AgRGVmaW5pdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBuZXRwb2xsX3R4X3J1bm5pbmdgIHZhcmlhYmxlLCBhbmQgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMsIG9mIGNvdXJzZSwgdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCB0aGUgZGVmaW5pdGlvbiB3aXRoaW4gYGluY2x1ZGUvbGludXgvbmV0cG9sbC5oYC4gSSdtIGFzc3VtaW5nIGl0J3MgYSBjcml0aWNhbCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlIG9yIGZsYWcgcmVsYXRlZCB0byBuZXRwb2xsJ3MgdHJhbnNtaXQgcGF0aC4gS25vd2luZyB0aGUgZXhhY3QgZGF0YSB0eXBlLCB0aGUgY29udGV4dCBpbiB3aGljaCBpdCdzIGRlY2xhcmVkLCBhbmQgYW55IGFzc29jaWF0ZWQgY29tbWVudHMgd2lsbCBwcm92aWRlIHRoZSBmb3VuZGF0aW9uYWwgdW5kZXJzdGFuZGluZyBJIG5lZWQuIEknbSBob3BpbmcgdG8gcXVpY2tseSBncmFzcCBpdHMgcm9sZSBpbiBtYW5hZ2luZyB0cmFuc21pdCBzdGF0ZSBhbmQgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMsIGdpdmVuIG5ldHBvbGwncyBpbmhlcmVudCBjb21wbGV4aXRpZXMgcmVnYXJkaW5nIGludGVycnVwdCBjb250ZXh0IGFuZCBwb3RlbnRpYWxseSBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzIHdpdGggb3RoZXIgbmV0d29yayBzdGFja3MuIEknbGwgYmUgbG9va2luZyBmb3IgaGludHMgYWJvdXQgYXRvbWljaXR5LCBtZW1vcnkgYmFycmllcnMsIGFuZCBwb3RlbnRpYWwgbG9jayB1c2FnZSBhcm91bmQgdGhpcyB2YXJpYWJsZS4gTXkgZ29hbCBpcyB0byBxdWlja2x5IHBpbnBvaW50IGl0cyBmdW5jdGlvbiBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBnb3RjaGFzIGZvciB0aGUgY3VycmVudCBkZWJ1Z2dpbmcgb3IgZGV2ZWxvcG1lbnQgdGFzayBhdCBoYW5kLiBMZXQncyBzZWUgd2hhdCB0aGUgaGVhZGVyIGZpbGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE4NzcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNDoyNzo0OC44MTAxOTQzNDNaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQxMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9uZXRwb2xsLmhcIixcbiAgXCJGaXJzdExpbmVcIjogOTAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgOTA6XFx0e1xcbiAgOTE6XFx0XFx0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gaGF2ZTtcXG4gIDkyOlxcdFxcbiAgOTM6XFx0XFx0aWYgKG5hcGkpXFxuICA5NDpcXHRcXHRcXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2bmFwaS1cXHUwMDNlcG9sbF9vd25lciwgLTEpO1xcbiAgOTU6XFx0fVxcbiAgOTY6XFx0XFxuICA5NzpcXHRzdGF0aWMgaW5saW5lIGJvb2wgbmV0cG9sbF90eF9ydW5uaW5nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuICA5ODpcXHR7XFxuICA5OTpcXHRcXHRyZXR1cm4gaXJxc19kaXNhYmxlZCgpO1xcbiAxMDA6XFx0fVxcbiAxMDE6XFx0XFxuIDEwMjpcXHQjZWxzZVxcbiAxMDM6XFx0c3RhdGljIGlubGluZSB2b2lkICpuZXRwb2xsX3BvbGxfbG9jayhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXFxuIDEwNDpcXHR7XFxuIDEwNTpcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMTA2OlxcdH1cXG4gMTA3OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRwb2xsX3BvbGxfdW5sb2NrKHZvaWQgKmhhdmUpXFxuIDEwODpcXHR7XFxuIDEwOTpcXHR9XFxuIDExMDpcXHRzdGF0aWMgaW5saW5lIGJvb2wgbmV0cG9sbF90eF9ydW5uaW5nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIDExMTpcXHR7XFxuIDExMjpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDExMzpcXHR9XFxuIDExNDpcXHQjZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDQ6Mjc6NDguODEwMjYwNTIzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEyNjM2MTA3MDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IE5ldHBvbGwgQ29udW5kcnVtKipcblxuT2theSwgc28gYG5ldHBvbGxfdHhfcnVubmluZ2AgaXMgZ2l2aW5nIG1lIGBpcnFzX2Rpc2FibGVkKClgLiBUaGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVuIHRoZSBgdmxhbi1cdTAwM2VuZXRwb2xsYCBvciBgYm9uZC1cdTAwM2VzbGF2ZS1cdTAwM2VucGAgc3RydWN0dXJlcyBhcmUgYWN0dWFsbHkgc2V0IHVwLiBMZXQncyB0cmFjZSBpdCBiYWNrLlxuXG5SaWdodCwgaW4gYHZsYW5fZGV2X25ldHBvbGxfc2V0dXBgLCB0aGVyZSdzIGEgYGt6YWxsb2NgIGZvciBgbmV0cG9sbGAgYW5kIGEgY2FsbCB0byBgX19uZXRwb2xsX3NldHVwYC4gVGhhdOKAmXMgd2hlcmUgaXQncyBoYXBwZW5pbmcuIEhvdyBkb2VzICp0aGF0KiBnZXQgY2FsbGVkPyBBaCwgaXQncyBgdmxhbl9uZXRkZXZfb3BzLm5kb19uZXRwb2xsX3NldHVwYCEgQW5kIHRoYXQsIGluIHR1cm4sIGlzIGNhbGxlZCBpbmRpcmVjdGx5IGZyb20gYF9fbmV0cG9sbF9zZXR1cGAhIExvb2s6IGlmIGBkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fbmV0cG9sbF9zZXR1cGAgZXhpc3RzLCBpdCBnZXRzIGNhbGxlZCBmcm9tIGBfX25ldHBvbGxfc2V0dXBgLiBTbywgbmV0Y29uc29sZSBpcyBzZXR0aW5nIHVwIG5ldHBvbGwgb24gdGhlc2UgdmlydHVhbCBkZXZpY2Vz4oCUdmxhbiwgYm9uZCwgYnJpZGdlLCB0ZWFtLCBldGMu4oCUd2hlbiBuZXRjb25zb2xlIGlzIHVzZWQuXG5cbkJ1dCBob3cgaXMgbmV0Y29uc29sZSAqY29uZmlndXJlZCo/IENhbiB1c2Vyc3BhY2UgZXZlbiBjb25maWd1cmUgaXQ/IFRoaXMgaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIGNoZWNrIHRoZSBuZXRjb25zb2xlIGRyaXZlciBpdHNlbGYgKGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgKS4gTGV0J3MganVtcCB0byBhcm91bmQgbGluZSAxMDAwIGluIGBuZXRjb25zb2xlLmNgIG9yIHNlYXJjaCBmb3IgY29uZmlnZnMgaW4gdGhhdCBmaWxlIHRvIGdldCBhIGNsdWUgYWJvdXQgaG93IHVzZXJzcGFjZSBpbnRlcmFjdHMgd2l0aCBpdC4gVGhhdCBzaG91bGQgdGVsbCBtZSBob3cgdGhpcyB3aG9sZSB0aGluZyBpcyB0cmlnZ2VyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNDc1LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDQ6Mjg6MDEuNDQ2MzcwMTlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzMzgwMjg4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWdmc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQzLSNpbmNsdWRlIFxcdTAwM2NuZXQvYWRkcmNvbmYuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NDQ6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbmZpZ2ZzLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQ1LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXFx1MDAzZVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE2Mz1zdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTcxLSAqIEBsaXN0OlxcdExpbmtzIHRoaXMgdGFyZ2V0IGludG8gdGhlIHRhcmdldF9saXN0LlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzI6ICogQGdyb3VwOlxcdExpbmtzIHVzIGludG8gdGhlIGNvbmZpZ2ZzIHN1YnN5c3RlbSBoaWVyYXJjaHkuXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE3MzogKiBAdXNlcmRhdGFfZ3JvdXA6XFx0TGlua3MgdG8gdGhlIHVzZXJkYXRhIGNvbmZpZ2ZzIGhpZXJhcmNoeVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzQtICogQHVzZXJkYXRhOlxcdFxcdENhY2hlZCwgZm9ybWF0dGVkIHVzZXJkYXRhIHBheWxvYWQuIFJDVSBwcm90ZWN0ZWQuXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjEwPXN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQyLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDM6c3RhdGljIHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gbmV0Y29uc29sZV9zdWJzeXM7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0NC1zdGF0aWMgREVGSU5FX01VVEVYKGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleCk7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjQ2PXN0YXRpYyBpbnQgX19pbml0IGR5bmFtaWNfbmV0Y29uc29sZV9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ5LVxcdG11dGV4X2luaXQoXFx1MDAyNm5ldGNvbnNvbGVfc3Vic3lzLnN1X211dGV4KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjUwOlxcdHJldHVybiBjb25maWdmc19yZWdpc3Rlcl9zdWJzeXN0ZW0oXFx1MDAyNm5ldGNvbnNvbGVfc3Vic3lzKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjUxLX1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNTM9c3RhdGljIHZvaWQgX19leGl0IGR5bmFtaWNfbmV0Y29uc29sZV9leGl0KHZvaWQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1NC17XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI1NTpcXHRjb25maWdmc191bnJlZ2lzdGVyX3N1YnN5c3RlbShcXHUwMDI2bmV0Y29uc29sZV9zdWJzeXMpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTYtfVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1OS0gKiBUYXJnZXRzIHRoYXQgd2VyZSBjcmVhdGVkIGJ5IHBhcnNpbmcgdGhlIGJvb3QvbW9kdWxlIG9wdGlvbiBzdHJpbmdcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjYwOiAqIGRvIG5vdCBleGlzdCBpbiB0aGUgY29uZmlnZnMgaGllcmFyY2h5IChhbmQgaGF2ZSBOVUxMIG5hbWVzKSBhbmQgd2lsbFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjEtICogbmV2ZXIgZ28gYXdheSwgc28gbWFrZSB0aGVzZSBhIG5vLW9wIGZvciB0aGVtLlxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTMwND1zdGF0aWMgdm9pZCBuZXRjb25zb2xlX3RhcmdldF9wdXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMDctXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjMwODpzdGF0aWMgdm9pZCBwb3B1bGF0ZV9jb25maWdmc19pdGVtKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMwOS1cXHRcXHRcXHRcXHQgICBpbnQgY21kbGluZV9jb3VudClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz05MDA9c3RhdGljIHNzaXplX3QgdHJhbnNtaXRfZXJyb3JzX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTE0LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo5MTU6LyogY29uZmlnZnMgaGVscGVyIHRvIGRpc3BsYXkgaWYgY3B1X25yIHN5c2RhdGEgZmVhdHVyZSBpcyBlbmFibGVkICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTkxNi1zdGF0aWMgc3NpemVfdCBzeXNkYXRhX2NwdV9ucl9lbmFibGVkX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTI3LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo5Mjg6LyogY29uZmlnZnMgaGVscGVyIHRvIGRpc3BsYXkgaWYgdGFza25hbWUgc3lzZGF0YSBmZWF0dXJlIGlzIGVuYWJsZWQgKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTI5LXN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfdGFza25hbWVfZW5hYmxlZF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz05ODI9c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9tc2dpZF9lbmFibGVkX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk5NS0vKlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo5OTY6ICogVGhpcyBvbmUgaXMgc3BlY2lhbCAtLSB0YXJnZXRzIGNyZWF0ZWQgdGhyb3VnaCB0aGUgY29uZmlnZnMgaW50ZXJmYWNlXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk5Ny0gKiBhcmUgbm90IGVuYWJsZWQgKGFuZCB0aGUgY29ycmVzcG9uZGluZyBuZXRwb2xsIGFjdGl2YXRlZCkgYnkgZGVmYXVsdC5cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMDAyPXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwNTEtXFx0XFx0ICogU2tpcCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKCkgLS0gYWxsIHRoZSBhdHRyaWJ1dGVzIGFyZVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMDUyOlxcdFxcdCAqIGFscmVhZHkgY29uZmlndXJlZCB2aWEgY29uZmlnZnMuIEp1c3QgcHJpbnQgdGhlbSBvdXQuXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwNTMtXFx0XFx0ICovXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTMzNz1zdGF0aWMgc3NpemVfdCB1c2VyZGF0dW1fdmFsdWVfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzQxLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMzQyOi8qIE5hdmlnYXRlIGNvbmZpZ2ZzIGFuZCBjYWxjdWxhdGUgdGhlIGxlbnRnaCBvZiB0aGUgZm9ybWF0dGVkIHN0cmluZ1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzQzLSAqIHJlcHJlc2VudGluZyB1c2VyZGF0YS5cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNTE3PXN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfdGFza25hbWVfZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU0NS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU0NjovKiBjb25maWdmcyBoZWxwZXIgdG8gc3lzZGF0YSBjcHVfbnIgZmVhdHVyZSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTQ3LXN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfY3B1X25yX2VuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE1ODQ9Q09ORklHRlNfQVRUUihzeXNkYXRhXywgbXNnaWRfZW5hYmxlZCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1ODUtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1ODY6c3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKnVzZXJkYXR1bV9hdHRyc1tdID0ge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTg3LVxcdFxcdTAwMjZ1c2VyZGF0dW1fYXR0cl92YWx1ZSxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNTkxPXN0YXRpYyB2b2lkIHVzZXJkYXR1bV9yZWxlYXNlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTk1LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNTk2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnZnNfaXRlbV9vcGVyYXRpb25zIHVzZXJkYXR1bV9vcHMgPSB7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1OTctXFx0LnJlbGVhc2UgPSB1c2VyZGF0dW1fcmVsZWFzZSxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNjI5PXN0YXRpYyB2b2lkIHVzZXJkYXR1bV9kcm9wKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLCBzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY0Mi1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY0MzpzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2F0dHJpYnV0ZSAqdXNlcmRhdGFfYXR0cnNbXSA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY0NC1cXHRcXHUwMDI2c3lzZGF0YV9hdHRyX2NwdV9ucl9lbmFibGVkLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2NTAtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NTE6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdmc19ncm91cF9vcGVyYXRpb25zIHVzZXJkYXRhX29wcyA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY1Mi1cXHQubWFrZV9pdGVtXFx0XFx0PSB1c2VyZGF0dW1fbWFrZV9pdGVtLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE2NzM9Q09ORklHRlNfQVRUUl9STygsIHRyYW5zbWl0X2Vycm9ycyk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2NzQtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NzU6c3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKm5ldGNvbnNvbGVfdGFyZ2V0X2F0dHJzW10gPSB7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2NzYtXFx0XFx1MDAyNmF0dHJfZW5hYmxlZCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNjk0PXN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfdGFyZ2V0X3JlbGVhc2Uoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3MDEtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE3MDI6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdmc19pdGVtX29wZXJhdGlvbnMgbmV0Y29uc29sZV90YXJnZXRfaXRlbV9vcHMgPSB7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3MDMtXFx0LnJlbGVhc2VcXHRcXHQ9IG5ldGNvbnNvbGVfdGFyZ2V0X3JlbGVhc2UsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTcxMj1zdGF0aWMgdm9pZCBpbml0X3RhcmdldF9jb25maWdfZ3JvdXAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzE3LVxcdFxcdFxcdFxcdCAgICBcXHUwMDI2dXNlcmRhdGFfdHlwZSk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE3MTg6XFx0Y29uZmlnZnNfYWRkX2RlZmF1bHRfZ3JvdXAoXFx1MDAyNm50LVxcdTAwM2V1c2VyZGF0YV9ncm91cCwgXFx1MDAyNm50LVxcdTAwM2Vncm91cCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3MTktfVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE3NDI9c3RhdGljIHN0cnVjdCBjb25maWdfZ3JvdXAgKm1ha2VfbmV0Y29uc29sZV90YXJnZXQoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTc0OC1cXHQvKiBDaGVja2luZyBpZiBhIHRhcmdldCBieSB0aGlzIG5hbWUgd2FzIGNyZWF0ZWQgYXQgYm9vdCB0aW1lLiAgSWYgc28sXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE3NDk6XFx0ICogYXR0YWNoIGEgY29uZmlnZnMgZW50cnkgdG8gdGhhdCB0YXJnZXQuICBUaGlzIGVuYWJsZXMgZHluYW1pY1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzUwLVxcdCAqIGNvbnRyb2wuXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTc3Nj1zdGF0aWMgdm9pZCBkcm9wX25ldGNvbnNvbGVfdGFyZ2V0KHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4MjctXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4Mjg6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdmc19ncm91cF9vcGVyYXRpb25zIG5ldGNvbnNvbGVfc3Vic3lzX2dyb3VwX29wcyA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTgyOS1cXHQubWFrZV9ncm91cFxcdD0gbWFrZV9uZXRjb25zb2xlX3RhcmdldCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xODMzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSBuZXRjb25zb2xlX3N1YnN5c190eXBlID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4MzctXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4Mzg6LyogVGhlIG5ldGNvbnNvbGUgY29uZmlnZnMgc3Vic3lzdGVtICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4Mzk6c3RhdGljIHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gbmV0Y29uc29sZV9zdWJzeXMgPSB7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4NDAtXFx0LnN1X2dyb3VwXFx0PSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg0Ny1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTg0ODpzdGF0aWMgdm9pZCBwb3B1bGF0ZV9jb25maWdmc19pdGVtKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4NDktXFx0XFx0XFx0XFx0ICAgaW50IGNtZGxpbmVfY291bnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjYyMz1zdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19wYXJhbV90YXJnZXQoY2hhciAqdGFyZ2V0X2NvbmZpZyxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjU3LVxcdCAqIHlldCBvbiB0YXJnZXRfbGlzdCwgc28gYSBuZXRkZXYgZXZlbnQgY2Fubm90IHJlYWNoIGl0IGhlcmUsIGJ1dFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjU4OlxcdCAqIG1pcnJvciB0aGUgY29uZmlnZnMgcGF0aCBmb3Igc3ltbWV0cnkuXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2NTktXFx0ICovXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY3NC1cXHR9XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2NzU6XFx0cG9wdWxhdGVfY29uZmlnZnNfaXRlbShudCwgY21kbGluZV9jb3VudCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2NzYtXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9Mjc5Nj1zdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cF9uZXRjb25zb2xlKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjgwOC1cXHQvKlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyODA5OlxcdCAqIFRhcmdldHMgY3JlYXRlZCB2aWEgY29uZmlnZnMgcGluIHJlZmVyZW5jZXMgb24gb3VyIG1vZHVsZVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yODEwLVxcdCAqIGFuZCB3b3VsZCBmaXJzdCBiZSBybWRpcigyKSdlZCBmcm9tIHVzZXJzcGFjZS4gV2UgcmVhY2hcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDQ6Mjg6MDEuNzgwMTgxMDY0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE2MDM3MDU5NDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk5ldGNvbnNvbGUncyBEeW5hbWljIFRhcmdldCBDcmVhdGlvbiBhbmQgUGFja2V0IEhhbmRsaW5nKipcblxuQWxyaWdodCwgdGhpcyBpcyBpbnRlcmVzdGluZy4gSSdtIHNlZWluZyB0aGF0IG5ldGNvbnNvbGUgdGFyZ2V0cyBjYW4gYmUgZHluYW1pY2FsbHkgY3JlYXRlZCB1c2luZyBjb25maWdmcyDigJMgYnJpbGxpYW50ISBKdXN0IGBta2RpciAvc3lzL2tlcm5lbC9jb25maWcvbmV0Y29uc29sZS90YXJnZXQxYCBhbmQgY29uZmlndXJlIGl0LiBTZXR0aW5nIHRoZSBgZGV2X25hbWVgIGFuZCBlbmFibGluZyBpdCBnZXRzIHRoaW5ncyByb2xsaW5nLiBTZXR0aW5nIGBlbmFibGVkYCB0byBgMWAgdHJpZ2dlcnMgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cChudClgLiAgVGhlbiwgc3RhbmRhcmQgYHByaW50a2AgbWVzc2FnZXMgYXJlIHJvdXRlZCB0aHJvdWdoIGBuZXRwb2xsX3NlbmRfc2tiKG5wLCBza2IpYC5cblxuTm93LCB3aGVuIGBuZXRwb2xsX3NlbmRfc2tiYCBraWNrcyBpbiwgaXQgbW92ZXMgaW50byBgX19uZXRwb2xsX3NlbmRfc2tiKG5wLCBza2IpYC4gVGhlIHJlYWwgbWVhdCBvZiBpdCBpcyB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgZGV2aWNlIHRyYW5zbWl0IGZhaWxzIG9yIHRoZSBxdWV1ZSBpcyBzYXR1cmF0ZWQuIEl0J3Mgc3VwcG9zZWQgdG8gcXVldWUgaW50byBgbnBpbmZvLVx1MDAzZXR4cWAsIGJ1dCB0aGVyZSdzIGEgcGF0Y2ggaGVyZS4uLlxuXG5Ib2xkIG9uLCBJIHNlZSB3aGF0IHRoaXMgcGF0Y2ggaXMgZG9pbmcuIElmIHRoZSBkZXZpY2UgeG1pdCBpc24ndCBjb21wbGV0ZSwgYW5kIHRoZSBxdWV1ZSBsZW5ndGggZXhjZWVkcyBgTkVUUE9MTF9UWFFfTUFYYCwgaXQgKmRyb3BzKiB0aGUgU0tCIHJpZ2h0IHRoZXJlIHdpdGggYGRldl9rZnJlZV9za2JfaXJxKHNrYilgISBUaGF0J3MgYSBjcnVjaWFsIHJhdGUtbGltaXRpbmcgbWVjaGFuaXNtLiAgT3RoZXJ3aXNlLCBpdCBxdWV1ZXMgdGhlIFNLQiBhbmQgc2NoZWR1bGVzIGEgZGVsYXllZCB3b3JrIHdpdGggYHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZucGluZm8tXHUwMDNldHhfd29yaywwKWAuXG5cbkFuZCBmaW5hbGx5LCBgcXVldWVfcHJvY2Vzc2DigKYgSSBuZWVkIHRvIGNoZWNrIG91dCB3aGF0IHRoYXQgd29yayBpdGVtIGlzIGRvaW5nIGluIGBuZXQvY29yZS9uZXRwb2xsLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBxdWV1ZWQgU0tCcyBhcmUgYWN0dWFsbHkgcHJvY2Vzc2VkIGZvciB0cmFuc21pc3Npb24uICBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHRoZSBkZXRhaWxzIG9mIHRoYXQgcHJvY2Vzc2luZyBsb29wLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTk4MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNDoyODoxNy44MTcyNDMyNzlaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL25ldHBvbGwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA5MDpcXHRzdGF0aWMgdm9pZCBxdWV1ZV9wcm9jZXNzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gIDkxOlxcdHtcXG4gIDkyOlxcdFxcdHN0cnVjdCBuZXRwb2xsX2luZm8gKm5waW5mbyA9XFxuICA5MzpcXHRcXHRcXHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5ldHBvbGxfaW5mbywgdHhfd29yay53b3JrKTtcXG4gIDk0OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuICA5NTpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiAgOTY6XFx0XFxuICA5NzpcXHRcXHR3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKFxcdTAwMjZucGluZm8tXFx1MDAzZXR4cSkpKSB7XFxuICA5ODpcXHRcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLVxcdTAwM2VkZXY7XFxuICA5OTpcXHRcXHRcXHRzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7XFxuIDEwMDpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgcV9pbmRleDtcXG4gMTAxOlxcdFxcbiAxMDI6XFx0XFx0XFx0aWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpIHx8ICFuZXRpZl9ydW5uaW5nKGRldikpIHtcXG4gMTAzOlxcdFxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAxMDQ6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDEwNTpcXHRcXHRcXHR9XFxuIDEwNjpcXHRcXG4gMTA3OlxcdFxcdFxcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcXG4gMTA4OlxcdFxcdFxcdC8qIGNoZWNrIGlmIHNrYi1cXHUwMDNlcXVldWVfbWFwcGluZyBpcyBzdGlsbCB2YWxpZCAqL1xcbiAxMDk6XFx0XFx0XFx0cV9pbmRleCA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpO1xcbiAxMTA6XFx0XFx0XFx0aWYgKHVubGlrZWx5KHFfaW5kZXggXFx1MDAzZT0gZGV2LVxcdTAwM2VyZWFsX251bV90eF9xdWV1ZXMpKSB7XFxuIDExMTpcXHRcXHRcXHRcXHRxX2luZGV4ID0gcV9pbmRleCAlIGRldi1cXHUwMDNlcmVhbF9udW1fdHhfcXVldWVzO1xcbiAxMTI6XFx0XFx0XFx0XFx0c2tiX3NldF9xdWV1ZV9tYXBwaW5nKHNrYiwgcV9pbmRleCk7XFxuIDExMzpcXHRcXHRcXHR9XFxuIDExNDpcXHRcXHRcXHR0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgcV9pbmRleCk7XFxuIDExNTpcXHRcXHRcXHRIQVJEX1RYX0xPQ0soZGV2LCB0eHEsIHNtcF9wcm9jZXNzb3JfaWQoKSk7XFxuIDExNjpcXHRcXHRcXHRpZiAobmV0aWZfeG1pdF9mcm96ZW5fb3Jfc3RvcHBlZCh0eHEpIHx8XFxuIDExNzpcXHRcXHRcXHQgICAgIWRldl94bWl0X2NvbXBsZXRlKG5ldHBvbGxfc3RhcnRfeG1pdChza2IsIGRldiwgdHhxKSkpIHtcXG4gMTE4OlxcdFxcdFxcdFxcdHNrYl9xdWV1ZV9oZWFkKFxcdTAwMjZucGluZm8tXFx1MDAzZXR4cSwgc2tiKTtcXG4gMTE5OlxcdFxcdFxcdFxcdEhBUkRfVFhfVU5MT0NLKGRldiwgdHhxKTtcXG4gMTIwOlxcdFxcdFxcdFxcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcXG4gMTIxOlxcdFxcbiAxMjI6XFx0XFx0XFx0XFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFxcdTAwMjZucGluZm8tXFx1MDAzZXR4X3dvcmssIEhaLzEwKTtcXG4gMTIzOlxcdFxcdFxcdFxcdHJldHVybjtcXG4gMTI0OlxcdFxcdFxcdH1cXG4gMTI1OlxcdFxcdFxcdEhBUkRfVFhfVU5MT0NLKGRldiwgdHhxKTtcXG4gMTI2OlxcdFxcdFxcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcXG4gMTI3OlxcdFxcdH1cXG4gMTI4OlxcdH1cXG4gMTI5OlxcdFxcbiAxMzA6XFx0c3RhdGljIGludCBuZXRpZl9sb2NhbF94bWl0X2FjdGl2ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiAxMzE6XFx0e1xcbiAxMzI6XFx0XFx0aW50IGk7XFxuIDEzMzpcXHRcXG4gMTM0OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBkZXYtXFx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKykge1xcbiAxMzU6XFx0XFx0XFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIGkpO1xcbiAxMzY6XFx0XFxuIDEzNzpcXHRcXHRcXHRpZiAobmV0aWZfdHhfb3duZWQodHhxLCBzbXBfcHJvY2Vzc29yX2lkKCkpKVxcbiAxMzg6XFx0XFx0XFx0XFx0cmV0dXJuIDE7XFxuIDEzOTpcXHRcXHR9XFxuIDE0MDpcXHRcXG4gMTQxOlxcdFxcdHJldHVybiAwO1xcbiAxNDI6XFx0fVxcbiAxNDM6XFx0XFxuIDE0NDpcXHRzdGF0aWMgdm9pZCBwb2xsX29uZV9uYXBpKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSlcXG4gMTQ1OlxcdHtcXG4gMTQ2OlxcdFxcdGludCB3b3JrO1xcbiAxNDc6XFx0XFxuIDE0ODpcXHRcXHQvKiBJZiB3ZSBzZXQgdGhpcyBiaXQgYnV0IHNlZSB0aGF0IGl0IGhhcyBhbHJlYWR5IGJlZW4gc2V0LFxcbiAxNDk6XFx0XFx0ICogdGhhdCBpbmRpY2F0ZXMgdGhhdCBuYXBpIGhhcyBiZWVuIGRpc2FibGVkIGFuZCB3ZSBuZWVkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA0OjI4OjE3LjgxNzM4OTcxOVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDA1MTQyNjU1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldGNvbnNvbGUgVFggUGF0aCBhbmQgUG90ZW50aWFsIFBhY2tldCBEcm9wcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyBmb2N1c2VkIG9uIHRoZSBgcXVldWVfcHJvY2Vzc2AgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgaWYgdGhlIGRldmljZSB0cmFuc21pdCBpc24ndCBpbW1lZGlhdGVseSBjb21wbGV0ZSAoYCFkZXZfeG1pdF9jb21wbGV0ZSguLi4pYCksIHRoZSBjb2RlIHF1ZXVlcyB0aGUgU0tCIChgc2tiX3F1ZXVlX2hlYWRgKSwgdW5sb2NrcyB0aGUgaGFyZHdhcmUsIHJlc3RvcmVzIGludGVycnVwdHMsIGFuZCB0aGVuIHNjaGVkdWxlcyBhIGRlbGF5ZWQgd29yayBpdGVtLiBUaGlzIHNlZW1zIHByZXR0eSBzdGFuZGFyZC5cblxuTm93LCB0aGUgY3J1Y2lhbCBwb2ludCBpcyBjb21wYXJpbmcgdGhpcyB0byAqYmVmb3JlKiB0aGUgcGF0Y2guIEkgcmVjYWxsIHRoYXQgaWYgdGhlIGRldmljZSB3YXMgc3RvcHBlZCBvciBjb250aW51b3VzbHkgZmFpbGluZyB0byB0cmFuc21pdCwgbmV3IG5ldGNvbnNvbGUgbWVzc2FnZXMgKGZyb20gYHByaW50a2Agb3IgYGRtZXNnYCkgd291bGQgdHJpZ2dlciBgbmV0cG9sbF9zZW5kX3NrYmAsIHdoaWNoIHRoZW4gY2FsbHMgYF9fbmV0cG9sbF9zZW5kX3NrYmAuXG5cbkluIHRoZSBwcmUtcGF0Y2ggdmVyc2lvbiwgd2l0aGluIGBfX25ldHBvbGxfc2VuZF9za2JgLCBhIGNoZWNrIGBza2JfcXVldWVfbGVuKFx1MDAyNm5waW5mby1cdTAwM2V0eHEpID09IDBgIHdvdWxkIGJlIGZhbHNlIGJlY2F1c2UgdGhlcmUncyBhbHJlYWR5IGFuIFNLQiBxdWV1ZWQuIFRoaXMgd291bGQgY2F1c2UgbGluZXMgMjkzLTMyMiB0byBiZSBza2lwcGVkLiBDcml0aWNhbGx5LCB0aGUgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24gdW5jb25kaXRpb25hbGx5IHF1ZXVlZCBldmVyeSBuZXcgU0tCIHVzaW5nIGBza2JfcXVldWVfdGFpbChcdTAwMjZucGluZm8tXHUwMDNldHhxLCBza2IpYC5cblxuSG93ZXZlciwgdGhlIHVwZGF0ZWQgY29kZSBpbnRyb2R1Y2VzIGEgbWF4aW11bSBxdWV1ZSBsZW5ndGggY2hlY2s6IGBpZiAoc2tiX3F1ZXVlX2xlbihcdTAwMjZucGluZm8tXHUwMDNldHhxKSBcdTAwM2U9IE5FVFBPTExfVFhRX01BWClgLiBJZiB0aGUgcXVldWUgaXMgZnVsbCwgdGhlIG5ldyBTS0IgaXMgbm93ICpkcm9wcGVkKiB3aXRoIGBkZXZfa2ZyZWVfc2tiX2lycShza2IpYCEgVGhpcyBpcyB0aGUgZnVuZGFtZW50YWwgY2hhbmdlLiBJZiBgZGV2X3htaXRfY29tcGxldGUoc3RhdHVzKWAgaXMgZmFsc2UgKGxpa2VseSBkdWUgdG8gYE5FVERFVl9UWF9CVVNZYCksIHRoZSBTS0IgZW5kcyB1cCBpbiB0aGlzIG5ldyBkcm9wIHBhdGggd2hlbiB0aGUgcXVldWUgaXMgZnVsbC5cblxuQSBxdWVzdGlvbiB0aGF0IGFyb3NlIGR1cmluZyBteSBhbmFseXNpcyBpcyBpZiBgX19uZXRwb2xsX3NlbmRfc2tiYCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gWWVzLCBpdCdzIGRlZmluZWQgYXMgYHN0YXRpYyBuZXRkZXZfdHhfdCBfX25ldHBvbGxfc2VuZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKWAuIFRoaXMgbWVhbnMgaXQncyBvbmx5IHZpc2libGUgd2l0aGluIHRoaXMgdHJhbnNsYXRpb24gdW5pdC4gSXQncyBjYWxsZWQgYnkgdGhlIHB1YmxpYyBmdW5jdGlvbiBgbmV0cG9sbF9zZW5kX3NrYihzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IpYC4gVGhpcyBvcGVucyB0aGUgcG9zc2liaWxpdHkgb2YgaW5saW5pbmcuIFNpbmNlIGBfX25ldHBvbGxfc2VuZF9za2JgIGlzIG9ubHkgZXZlciBjYWxsZWQgZnJvbSBgbmV0cG9sbF9zZW5kX3NrYmAsIGl0IHNob3VsZCBiZSBzYWZlIHRvIGlubGluZSB0aGUgZm9ybWVyIGludG8gdGhlIGxhdHRlci4gVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIHF1aWNrbHkgZ3JlcCB0aGUgY29kZSB0byBjaGVjayB0aGF0IHRoZXJlIGFyZSBubyBvdGhlciBjYWxsIHNpdGVzIGZvciBgX19uZXRwb2xsX3NlbmRfc2tiYCB3aXRoaW4gYG5ldHBvbGwuY2AuIFRoaXMgd291bGQgc3RyZWFtbGluZSB0aGUgY29kZSBhbmQgcmVkdWNlIHRoZSBmdW5jdGlvbiBjYWxsIG92ZXJoZWFkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzY3NSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA0OjI4OjQxLjg2ODgxOTM0N1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3MDY4ODExNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX25ldHBvbGxfc2VuZF9za2JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvbmV0cG9sbC5jPTI1OD1zdGF0aWMgaW50IG5ldHBvbGxfb3duZXJfYWN0aXZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvY29yZS9uZXRwb2xsLmMtMjY5LS8qIGNhbGwgd2l0aCBJUlEgZGlzYWJsZWQgKi9cXG5uZXQvY29yZS9uZXRwb2xsLmM6MjcwOnN0YXRpYyBuZXRkZXZfdHhfdCBfX25ldHBvbGxfc2VuZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9jb3JlL25ldHBvbGwuYy0yNzEte1xcbi0tXFxubmV0L2NvcmUvbmV0cG9sbC5jPTMzOD1uZXRkZXZfdHhfdCBuZXRwb2xsX3NlbmRfc2tiKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL25ldHBvbGwuYy0zNDctXFx0XFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xcbm5ldC9jb3JlL25ldHBvbGwuYzozNDg6XFx0XFx0cmV0ID0gX19uZXRwb2xsX3NlbmRfc2tiKG5wLCBza2IpO1xcbm5ldC9jb3JlL25ldHBvbGwuYy0zNDktXFx0XFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNDoyODo0My41Mzk1MTI5MTNaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTkzODM2MzcxNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYF9fbmV0cG9sbF9zZW5kX3NrYmAgYW5kIGl0cyBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIGBfX25ldHBvbGxfc2VuZF9za2JgIGlzIGEgc3RhdGljIGZ1bmN0aW9uIGFuZCBvbmx5IGNhbGxlZCBmcm9tIGBuZXRwb2xsX3NlbmRfc2tiYCwgc28gdGhlIGNvbXBpbGVyIGlzICpsaWtlbHkqIHRvIGlubGluZSBpdC4gVGhhdCBtZWFucyBgbmV0cG9sbF9zZW5kX3NrYmAgZGVmaW5pdGVseSBuZWVkcyB0byBiZSBpbiB0aGUgRm9jdXNTeW1ib2xzIGxpc3QsIGFuZCB3ZSBjYW4gaW5jbHVkZSBgX19uZXRwb2xsX3NlbmRfc2tiYCB0b28sIGJ1dCBvbmx5IGlmIGl0ICppc24ndCogYmVpbmcgaW5saW5lZC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBpcyB0aGlzIGNoYW5nZSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmc/IExldCdzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdC5cblxuVGhlIGd1aWRlbGluZXMgYXJlIHByZXR0eSBjbGVhcjogUmVhY2hhYmlsaXR5IGlzIHRoZSBwcmltYXJ5IGdhdGUuIFdlIGNhbiBvbmx5IGZ1enogY29kZSB0aGF0IGV4ZWN1dGVzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVW5yZWFjaGFibGUgY29kZSBpcyBhIG5vLWdvLiBXZSBoYXZlIG5lZ2F0aXZlIGNyaXRlcmlhIGxpa2Ugbm9uLWtlcm5lbCwgbm9uLWV4ZWN1dGFibGUgY2hhbmdlcyBhbmQgdW5yZWFjaGFibGUgaGFyZHdhcmUgb3IgZXhlY3V0aW9uIHBhdGhzLiAgVGhpbmdzIGxpa2UgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycyB0aGF0IG5lZWQgcGh5c2ljYWwgQVNJQ3Mgb3IgUENJIGhvdC11bnBsdWcgYXJlIG91dC4gUG9zaXRpdmUgY3JpdGVyaWEgaW5jbHVkZSBjb3JlIHN1YnN5c3RlbXMsIHJlZmFjdG9yaW5ncywgYXNzZXJ0aW9ucywgYW5kIHJlYWNoYWJsZSBkcml2ZXJzL3Byb3RvY29scy5cblxuUmlnaHQsIHRoZSBtb2RpZmllZCBmaWxlIGlzIGBuZXQvY29yZS9uZXRwb2xsLmNgLCBhbmQgdGhhdCdzIHBhcnQgb2YgY29yZSBuZXR3b3JraW5nISBHb29kIHN0YXJ0LiBUaGUgY2hhbmdlIGl0c2VsZiBpcyBpbiBgX19uZXRwb2xsX3NlbmRfc2tiKClgIGFuZCBpcyByZWxhdGVkIHRvIHRoZSB0cmFuc21pdCBxdWV1ZTogSXQgY2FwcyB0aGUgcXVldWUgbGVuZ3RoIGFuZCBmcmVlcyBza2JzIG9uIG92ZXJmbG93IHRvIHByZXZlbnQgdW5ib3VuZGVkIG1lbW9yeSBjb25zdW1wdGlvbiB3aGVuIHRoZSBlZ3Jlc3MgbmV0ZGV2IGlzIGJ1c3kuIGBuZXRwb2xsYCBzdXBwb3J0cyB2aXJ0dWFsIGRldmljZXM6IGR1bW15LCB2ZXRoLCBicmlkZ2UsIGJvbmQsIHRlYW0sIG1hY3ZsYW4sIHdpdGggYG5ldGNvbnNvbGVgIG9yIGJvbmRpbmcvYnJpZGdlL3RlYW0uICBEZWZpbml0ZWx5IHNvdW5kcyBsaWtlIHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIGV4ZXJjaXNlZCBpbiBhIHN0YW5kYXJkIHNldHVwLlxuXG5MZXQncyBjaGVjayB0aGUgY29uZmlndXJhdGlvbnMuIExvb2tpbmcgYXQgdGhlIGBNYWtlZmlsZWAsIGBvYmotJChDT05GSUdfTkVUUE9MTCkgKz0gbmV0cG9sbC5vYCwgdGhlbiBgS2NvbmZpZ2A6IHdlIG5lZWQgYE5FVFBPTExgLCB3aGljaCBpcyBhIGBkZWZfYm9vbGAgZm9yIGBORVRDT05TT0xFYC4gYE5FVENPTlNPTEVgIHJlcXVpcmVzIGBQUklOVEtgLCBhbmQgdGhlcmUncyBhbHNvIGBORVRDT05TT0xFX0RZTkFNSUNgIHRoYXQgZGVwZW5kcyBvbiBgTkVUQ09OU09MRWAgYW5kIGBDT05GSUdGU19GU2AuIEluIGBpbmNsdWRlL2xpbnV4L25ldHBvbGwuaGAsIGBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUmAgaXMgYGRlZl9ib29sIE5FVFBPTExgLlxuXG5JJ20gZ29pbmcgdG8gbG9vayBmb3Igb3RoZXIgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBvciBzZWxlY3Rpb25zIG9mIGBORVRQT0xMYCB1c2luZyBhIGdyZXBwZXIuIEp1c3QgdG8gYmUgdGhvcm91Z2guIEJ1dCwgYmFzZWQgb24gd2hhdCBJJ3ZlIHNlZW4sIGl0IGxvb2tzIHZlcnkgcHJvbWlzaW5nLiBUaGlzIGNoYW5nZSwgaW4gY29yZSBuZXR3b3JraW5nLCBhZmZlY3RpbmcgYSBmdW5jdGlvbiB0aGF0J3MgcGFydCBvZiBgbmV0cG9sbGAgd2hpY2ggaXMgY29uZmlndXJhYmxlIGZvciB2aXJ0dWFsIGRldmljZXMsIHNlZW1zICp2ZXJ5KiByZWFjaGFibGUuIEknZCBsZWFuIHRvd2FyZHMgdGhpcyBiZWluZyBhIGhpZ2gtcHJpb3JpdHkgZnV6eiB0YXJnZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MjAxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA0OjI5OjAyLjkyMzE1MTk4NVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA1NjcwOTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5FVFBPTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlPTI3PW9iai0kKENPTkZJR19ORVRfUEtUR0VOKSArPSBwa3RnZW4ub1xcbm5ldC9jb3JlL01ha2VmaWxlOjI4Om9iai0kKENPTkZJR19ORVRQT0xMKSArPSBuZXRwb2xsLm9cXG5uZXQvY29yZS9NYWtlZmlsZS0yOS1vYmotJChDT05GSUdfRklCX1JVTEVTKSArPSBmaWJfcnVsZXMub1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9NzYxMj12b2lkIG5ldGlmX25hcGlfYWRkX3dlaWdodF9sb2NrZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTc2MzEtXFx0bmFwaS1cXHUwMDNlZGV2ID0gZGV2O1xcbm5ldC9jb3JlL2Rldi5jOjc2MzI6I2lmZGVmIENPTkZJR19ORVRQT0xMXFxubmV0L2NvcmUvZGV2LmMtNzYzMy1cXHRuYXBpLVxcdTAwM2Vwb2xsX293bmVyID0gLTE7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMzI5OT1zdGF0aWMgdm9pZCBfX2luaXQgbmV0X2Rldl9zdHJ1Y3RfY2hlY2sodm9pZClcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEzMzQ0LVxcdENBQ0hFTElORV9BU1NFUlRfR1JPVVBfTUVNQkVSKHN0cnVjdCBuZXRfZGV2aWNlLCBuZXRfZGV2aWNlX3JlYWRfcngsIG5kX25ldCk7XFxubmV0L2NvcmUvZGV2LmM6MTMzNDU6I2lmZGVmIENPTkZJR19ORVRQT0xMXFxubmV0L2NvcmUvZGV2LmMtMTMzNDYtXFx0Q0FDSEVMSU5FX0FTU0VSVF9HUk9VUF9NRU1CRVIoc3RydWN0IG5ldF9kZXZpY2UsIG5ldF9kZXZpY2VfcmVhZF9yeCwgbnBpbmZvKTtcXG4tLVxcbm5ldC9jb3JlL25ldHBvbGwuYy00Ni0gKi9cXG5uZXQvY29yZS9uZXRwb2xsLmM6NDc6I2RlZmluZSBORVRQT0xMX1RYUV9NQVhcXHQxMDI0XFxubmV0L2NvcmUvbmV0cG9sbC5jLTQ4LVxcbi0tXFxubmV0L2NvcmUvbmV0cG9sbC5jPTI3MD1zdGF0aWMgbmV0ZGV2X3R4X3QgX19uZXRwb2xsX3NlbmRfc2tiKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL25ldHBvbGwuYy0zMjQtXFx0aWYgKCFkZXZfeG1pdF9jb21wbGV0ZShzdGF0dXMpKSB7XFxubmV0L2NvcmUvbmV0cG9sbC5jOjMyNTpcXHRcXHRpZiAoc2tiX3F1ZXVlX2xlbihcXHUwMDI2bnBpbmZvLVxcdTAwM2V0eHEpIFxcdTAwM2U9IE5FVFBPTExfVFhRX01BWCkge1xcbm5ldC9jb3JlL25ldHBvbGwuYy0zMjYtXFx0XFx0XFx0ZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTtcXG4tLVxcbm5ldC9jb3JlL25ldHBvbGwuYz0zNTU9aW50IF9fbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbi0tXFxubmV0L2NvcmUvbmV0cG9sbC5jLTM2MC1cXG5uZXQvY29yZS9uZXRwb2xsLmM6MzYxOlxcdGlmIChuZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIFxcdTAwMjYgSUZGX0RJU0FCTEVfTkVUUE9MTCkge1xcbm5ldC9jb3JlL25ldHBvbGwuYy0zNjItXFx0XFx0bnBfZXJyKG5wLCBcXFwiJXMgZG9lc24ndCBzdXBwb3J0IHBvbGxpbmcsIGFib3J0aW5nXFxcXG5cXFwiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNDoyOTowMy4yMjg4MzE3NVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxODYxMDM4NDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW52ZXN0aWdhdGluZyBgTkVUUE9MTGAgQ3Jvc3MtUmVmZXJlbmNlcyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBicm9hZGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IGBORVRQT0xMYCBpcyB1dGlsaXplZCB0aHJvdWdob3V0IHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzcGFjZS4gSXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBicm9hZGVyIEtjb25maWcgbGFuZHNjYXBlLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBvciBjb25mbGljdHMgdGhhdCBtaWdodCBhcmlzZSBmcm9tIGhvdyBpdCdzIGNvbmZpZ3VyZWQgaW4gb3RoZXIgYXJlYXMuIEknbSB0aGlua2luZywgXCJMZXQncyBjaGVjayBgTkVUUE9MTGAgaW4gb3RoZXIgS2NvbmZpZ3MuXCIgVGhhdCdzIHRoZSBmaXJzdCBsb2dpY2FsIHN0ZXAuIEdldCBhIGNvbXByZWhlbnNpdmUgb3ZlcnZpZXcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMjE3LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDQ6Mjk6MDUuMDg5ODcyODIyWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzg0MDM2NTU0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgTkVUUE9MTHxkZXBlbmRzIG9uIE5FVFBPTExcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA0OjI5OjA3LjQ3MzkxNjkxNloiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNjY3NjM0OTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipDaGVja2luZyB0aGUgYE5FVENPTlNPTEVgIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIGJlZm9yZSB3ZSBkaXZlIGRlZXBlciwgbGV0J3MganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdCBgTkVUQ09OU09MRWAgaXMgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEl0J3MgYSBmdW5kYW1lbnRhbCBlbGVtZW50IGZvci4uLiB3ZWxsLCB5b3Uga25vdywgbmV0d29yayBjb25zb2xlIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBpdCdzIHNldCB1cCBiZWZvcmUgZ29pbmcgZnVydGhlciB3aXRoIHRyb3VibGVzaG9vdGluZyBvciBhbnkgb3RoZXIgcmVsYXRlZCB0YXNrLCBhcyBgTkVUQ09OU09MRWAgaXMgdGhlIGZvdW5kYXRpb24gb24gd2hpY2ggbWFueSBuZXR3b3JrLXJlbGF0ZWQgdGFza3MgZGVwZW5kLiBJdOKAmXMgdGhlIG9idmlvdXMgZmlyc3QgdGhpbmcgdG8gdmVyaWZ5LiBBIHF1aWNrIGNoZWNrIG9mIHRoZSBLY29uZmlnIGZpbGVzIHdpbGwgZWl0aGVyIHByb3ZpZGUgYW4gaW5zdGFudCBjb25maXJtYXRpb24gYW5kIGVuYWJsZSBtZSB0byBnZXQgYSBydW5uaW5nIGtlcm5lbC4gSXQgd2lsbCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQgYmVmb3JlIEkgcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE0MDAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNDoyOTowOS4xNDE1NTQ3MjJaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjY2NTQyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJcXFxcYk5FVENPTlNPTEVcXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz0zMTg9Y29uZmlnIE1BQ1NFQ1xcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMjYtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozMjc6Y29uZmlnIE5FVENPTlNPTEVcXG5kcml2ZXJzL25ldC9LY29uZmlnLTMyOC1cXHR0cmlzdGF0ZSBcXFwiTmV0d29yayBjb25zb2xlIGxvZ2dpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9MzM0PWNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzNS1cXHRib29sIFxcXCJEeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiBsb2dnaW5nIHRhcmdldHNcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozMzY6XFx0ZGVwZW5kcyBvbiBORVRDT05TT0xFIFxcdTAwMjZcXHUwMDI2IFNZU0ZTIFxcdTAwMjZcXHUwMDI2IENPTkZJR0ZTX0ZTIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG5kcml2ZXJzL25ldC9LY29uZmlnOjMzNzpcXHRcXHRcXHQhKE5FVENPTlNPTEU9eSBcXHUwMDI2XFx1MDAyNiBDT05GSUdGU19GUz1tKVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzM4LVxcdHNlbGVjdCBQUklOVEtfRVhFQ1VUSU9OX0NUWFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz0zNDU9Y29uZmlnIE5FVENPTlNPTEVfRVhURU5ERURfTE9HXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNDYtXFx0Ym9vbCBcXFwiU2V0IGtlcm5lbCBleHRlbmRlZCBtZXNzYWdlIGJ5IGRlZmF1bHRcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozNDc6XFx0ZGVwZW5kcyBvbiBORVRDT05TT0xFXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNDgtXFx0ZGVmYXVsdCBuXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTM2Nz1jb25maWcgTkVUUE9MTFxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzY4OlxcdGRlZl9ib29sIE5FVENPTlNPTEVcXG5kcml2ZXJzL25ldC9LY29uZmlnLTM2OS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhbHhlZGEveGdtYWMuYz0xMzc4PXN0YXRpYyBpcnFyZXR1cm5fdCB4Z21hY19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FseGVkYS94Z21hYy5jLTE0MjctI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FseGVkYS94Z21hYy5jOjE0Mjg6LyogUG9sbGluZyByZWNlaXZlIC0gdXNlZCBieSBORVRDT05TT0xFIGFuZCBvdGhlciBkaWFnbm9zdGljIHRvb2xzXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FseGVkYS94Z21hYy5jLTE0MjktICogdG8gYWxsb3cgbmV0d29yayBJL08gd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLiAqL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2Ftc3VuZy9zeGdiZS9zeGdiZV9tYWluLmM9MTg0OT1zdGF0aWMgdm9pZCBzeGdiZV9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2Ftc3VuZy9zeGdiZS9zeGdiZV9tYWluLmMtMTkxOS0gKiBEZXNjcmlwdGlvbjpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zYW1zdW5nL3N4Z2JlL3N4Z2JlX21haW4uYzoxOTIwOiAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSBORVRDT05TT0xFIGFuZCBvdGhlciBkaWFnbm9zdGljIHRvb2xzXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2Ftc3VuZy9zeGdiZS9zeGdiZV9tYWluLmMtMTkyMS0gKiB0byBhbGxvdyBuZXR3b3JrIEkvTyB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC92aWEvdmlhLXZlbG9jaXR5LmM9MjI5MD1zdGF0aWMgaW50IHZlbG9jaXR5X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC92aWEvdmlhLXZlbG9jaXR5LmMtMjM2Ny0gKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3ZpYS92aWEtdmVsb2NpdHkuYzoyMzY4OiAqICBVc2VkIGJ5IE5FVENPTlNPTEUgYW5kIG90aGVyIGRpYWdub3N0aWMgdG9vbHMgdG8gYWxsb3cgbmV0d29yayBJL1BcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC92aWEvdmlhLXZlbG9jaXR5LmMtMjM2OS0gKiAgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNDoyOTowOS4yNjgyMjY0NFoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5ODg5MTg5OTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgbmV0Y29uc29sZWAgYW5kIGBuZXRwb2xsYCBDb25maWd1cmF0aW9uIGFuZCBDb2RlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGBORVRDT05TT0xFYCBhbmQgYE5FVFBPTExgIGNvbmZpZ3VyYXRpb24sIGFuZCBpdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBgTkVUQ09OU09MRWAgc2V0cyBgTkVUUE9MTGAsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGVuIGBORVRDT05TT0xFX0RZTkFNSUNgIGVuYWJsZXMgdGhlIGFiaWxpdHkgdG8gZHluYW1pY2FsbHkgcmVjb25maWd1cmUgdGhlIHRhcmdldCB2aWEgY29uZmlnZnMgLSB3aGljaCBpcyBrZXkgZm9yIHRvb2xzIGxpa2Ugc3l6a2FsbGVyIG9yIHVzZXJzcGFjZSBwcm9ncmFtcy4gU28sIHRob3NlIHR3byBhcmUgdGhlIG1haW4gY29uZmlncyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLiBBY3R1YWxseSwgYE5FVFBPTExgIGlzIGp1c3QgYSBgZGVmX2Jvb2xgIHRoYXQgbWlycm9ycyB0aGUgdmFsdWUgb2YgYE5FVENPTlNPTEVgLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgY29kZS4gSSdtIGZvY3VzaW5nIG9uIHRoZSBhZmZlY3RlZCBmdW5jdGlvbnMsIHVzaW5nIHRoZSBGb2N1c1N5bWJvbHMgdG8gdGFyZ2V0IHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gZGlyZWN0bHkgbW9kaWZpZWQsIG9yIGFyZSBjYWxsZWQuIEkgc2VlIHRoYXQgdGhlIGZ1bmN0aW9uIHRoYXQncyBkaXJlY3RseSBtb2RpZmllZCBpcyBgX19uZXRwb2xsX3NlbmRfc2tiYC4gVGhlcmUncyBhbHNvIGEgbm9uLXN0YXRpYyBleHBvcnRlZCB3cmFwcGVyIGZ1bmN0aW9uLCBgbmV0cG9sbF9zZW5kX3NrYmAuIEFuZCB0aGVuLCB0aGUgZW50cnkgcG9pbnRzIGBuZXRwb2xsX3NlbmRfdWRwYCBhbmQgdGhlIGBxdWV1ZV9wcm9jZXNzYCwgdGhhdCB3b3JrcyBvbiBgbnBpbmZvLVx1MDAzZXR4cWAgLSB3aGljaCBpcyBhIHNpZ25pZmljYW50IHBhcnQgb2YgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS4gSSBzaG91bGQgbm90ZSB0aGF0IGBxdWV1ZV9wcm9jZXNzYCBpcyBzdGF0aWMgaW4gYG5ldC9jb3JlL25ldHBvbGwuY2AsIHNvIGl0J3Mgbm90IGRpcmVjdGx5IGV4cG9ydGVkLCBhbmQgaXQgbG9va3MgbGlrZSBhIHdvcmsgaGFuZGxlciBmb3IgYFx1MDAyNm5waW5mby1cdTAwM2V0eF93b3JrYC4gVGhlIGBuZXRwb2xsX3NlbmRfc2tiYCBpcyBleHBvcnRlZCB1c2luZyBgRVhQT1JUX1NZTUJPTGAuXG5cbkkndmUgYWxzbyBjaGVja2VkIHRoZSBmdWxsIGxpc3Qgb2YgZnVuY3Rpb25zIGluIGBuZXQvY29yZS9uZXRwb2xsLmNgLCBhbmQgdGhhdCBjb25maXJtcyB0aGF0IG9ubHkgdGhlIHRocmVlIGZ1bmN0aW9ucyAtIGBfX25ldHBvbGxfc2VuZF9za2JgLCBgbmV0cG9sbF9zZW5kX3NrYmAsIGFuZCBgcXVldWVfcHJvY2Vzc2AgaGF2ZSBiZWVuIHRvdWNoZWQuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgYWN0dWFsIGRpZmYuIFRoZSBjb2RlIGNoYW5nZXMgYXJlIGFsbCB3aXRoaW4gYF9fbmV0cG9sbF9zZW5kX3NrYmAuIFRoZSBrZXkgYWRkaXRpb24gaXMgYSBjaGVjayBvbiB0aGUgbnVtYmVyIG9mIHBhY2tldHMgaGVsZCBpbiBgbnBpbmZvLVx1MDAzZXR4cWAuIEl0IGxvb2tzIGxpa2UgdGhlcmUncyBhIG5ldyBgTkVUUE9MTF9UWFFfTUFYYCBsaW1pdCAoZGVmaW5lZCBhcyAxMDI0KSwgYW5kIGlmIHRoZSBxdWV1ZSBleGNlZWRzIHRoYXQsIHRoZSBuZXcgY29kZSB3aWxsIGRyb3AgdGhlIHBhY2tldCBpbnN0ZWFkIG9mIGdyb3dpbmcgdGhlIHF1ZXVlIGluZGVmaW5pdGVseS4gVGhhdCBtYWtlcyBzZW5zZSwgdG8gcHJldmVudCByZXNvdXJjZSBleGhhdXN0aW9uIGZyb20gYSBzdGFsbGVkIGRldmljZSwgYW5kIHRoYXQncyBhIGdvb2QgY2hhbmdlLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuIGluIGRyaXZlcnMuXG5cbkkndmUgZG91YmxlLWNoZWNrZWQgdGhhdCB0aGVyZSBhcmUgbm8gb3RoZXIgY2hhbmdlcyBpbiB0aGUgSEVBRCBjb21taXQsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjM1NCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNDoyOToxOS4xNTc0MTk0OTRaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODI5ODUxNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkVUUE9MTF9UWFFfTUFYXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL25ldHBvbGwuYy00Ni0gKi9cXG5uZXQvY29yZS9uZXRwb2xsLmM6NDc6I2RlZmluZSBORVRQT0xMX1RYUV9NQVhcXHQxMDI0XFxubmV0L2NvcmUvbmV0cG9sbC5jLTQ4LVxcbi0tXFxubmV0L2NvcmUvbmV0cG9sbC5jPTI3MD1zdGF0aWMgbmV0ZGV2X3R4X3QgX19uZXRwb2xsX3NlbmRfc2tiKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL25ldHBvbGwuYy0zMjQtXFx0aWYgKCFkZXZfeG1pdF9jb21wbGV0ZShzdGF0dXMpKSB7XFxubmV0L2NvcmUvbmV0cG9sbC5jOjMyNTpcXHRcXHRpZiAoc2tiX3F1ZXVlX2xlbihcXHUwMDI2bnBpbmZvLVxcdTAwM2V0eHEpIFxcdTAwM2U9IE5FVFBPTExfVFhRX01BWCkge1xcbm5ldC9jb3JlL25ldHBvbGwuYy0zMjYtXFx0XFx0XFx0ZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDQ6Mjk6MjAuNjQwNDExMzEyWiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE2OTYzMjY0NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBuZXQvY29yZS9uZXRwb2xsLmMqKlxuXG5Pa2F5LCBsZXQncyBzZWUsIHRoZSBgZ2l0IGxvZyAtMWAgc2hvd3MgYSByZWNlbnQgY29tbWl0IG1vZGlmeWluZyBgbmV0L2NvcmUvbmV0cG9sbC5jYC4gVGhpcyBpcyBpbnRlcmVzdGluZzsgSSBzZWUgdGhlIGludHJvZHVjdGlvbiBvZiBhIHF1ZXVlIGxlbmd0aCBjaGVjayB3aXRoaW4gYF9fbmV0cG9sbF9zZW5kX3NrYmAuIFNwZWNpZmljYWxseSwgaXQgY2hlY2tzIGlmIGBza2JfcXVldWVfbGVuKFx1MDAyNm5waW5mby1cdTAwM2V0eHEpYCBleGNlZWRzIGBORVRQT0xMX1RYUV9NQVhgLiBJZiBpdCBkb2VzLCB0aGUgU0tCIGlzIGRyb3BwZWQgdXNpbmcgYGRldl9rZnJlZV9za2JfaXJxKHNrYilgLCByZXR1cm5pbmcgYE5FVF9YTUlUX0RST1BgLiBUaGlzIHByb3RlY3RzIGFnYWluc3QgdW5ib3VuZGVkIHF1ZXVlIGdyb3d0aCBpbiBgbnBpbmZvLVx1MDAzZXR4cWAuXG5cblRoaXMgY29kZSBsaXZlcyB3aXRoaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0sIHdoaWNoIG1lYW5zIGl0IGNhbiBiZSByZWFjaGVkIHRocm91Z2ggdmlydHVhbCBuZXR3b3JrIGRldmljZXMsIG5ldGNvbnNvbGUsIGR5bmFtaWMgbmV0Y29uc29sZSwgb3IgZXZlbiBuZXR3b3JraW5nIHN0YWNrcyBsaWtlIGJvbmRpbmcsIHRlYW1pbmcsIG9yIGJyaWRnaW5nLCAqaWYqIG5ldHBvbGwgaXMgZW5hYmxlZC4gVGhlIHBvdGVudGlhbCBoZXJlIGZvciBmdXp6aW5nIGlzIHNpZ25pZmljYW50LiBJJ20gdGhpbmtpbmcgd2UgY291bGQgdW5jb3ZlciBpc3N1ZXMgYXJvdW5kIHBhY2tldCBkcm9wcGluZyBzY2VuYXJpb3MsIHJlZmNvdW50aW5nIG9mIFNLQnMgYW5kIHRoZWlyIGxpZmVjeWNsZSwgZXNwZWNpYWxseSBhcm91bmQgZnJlZWluZyB0aGUgU0tCIHdpdGggYGRldl9rZnJlZV9za2JfaXJxYCB3aGVuIGNhbGxlcnMgbWF5IGV4cGVjdCBzb21ldGhpbmcgZGlmZmVyZW50LCBvciBldmVuIGRvdWJsZS1mcmVlcy4gV2Ugc2hvdWxkIGFsc28gYmUgb24gdGhlIGxvb2tvdXQgZm9yIGxvY2tkZXAgaXNzdWVzIGFuZCBwb3RlbnRpYWwgc3RhdGUtaGFuZGxpbmcgcHJvYmxlbXMgd2hlbiB0aGlzIHF1ZXVlIG92ZXJmbG93cy5cblxuVGhlcmVmb3JlLCBteSBldmFsdWF0aW9uOlxuXG4qICAgKipXb3J0aEZ1enppbmc6IHRydWUqKiAoZGVmaW5pdGVseSB3b3J0aCB0aGUgZWZmb3J0KVxuKiAgICoqRW5hYmxlQ29uZmlnczogW1wiTkVUUE9MTFwiLCBcIk5FVENPTlNPTEVcIiwgXCJORVRDT05TT0xFX0RZTkFNSUNcIl0qKiAod2UgbmVlZCB0aG9zZSBlbmFibGVkIHRvIGhpdCB0aGlzIGNvZGUpXG4qICAgKipGb2N1c1N5bWJvbHM6IFtcIl9fbmV0cG9sbF9zZW5kX3NrYlwiLCBcIm5ldHBvbGxfc2VuZF9za2JcIiwgXCJxdWV1ZV9wcm9jZXNzXCJdKiogKFRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0byB0YXJnZXQgZm9yIGZ1enppbmcuIEkgaW5jbHVkZSBgcXVldWVfcHJvY2Vzc2AgYmVjYXVzZSBpZiBzb21ldGhpbmcgaXMgd3Jvbmcgd2l0aCBhIHF1ZXVlLCB3ZSBzaG91bGQgYmUgYWJsZSB0byB0cmlnZ2VyIGl0LCBhbmQgdGhpcyBpcyB3aGVyZSBpdCBoYXBwZW5zKS5cblxuTm93LCBsZXQncyBtYWtlIHN1cmUgZXZlcnl0aGluZyByZXF1aXJlZCBpcyBpbiBwbGFjZS4gV2UgbmVlZDpcblxuKiAgIGBXb3J0aEZ1enppbmdgOiBCb29sZWFuIC0gQ2hlY2shXG4qICAgYEZvY3VzU3ltYm9sc2A6IExpc3Qgb2Ygc3RyaW5ncyB3aXRoIHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdG8gZm9jdXMgb24gLSBDaGVjayFcbiogICBgRW5hYmxlQ29uZmlnc2A6IExpc3Qgb2Ygc3RyaW5ncyB3aXRob3V0IHRoZSBgQ09ORklHX2AgcHJlZml4IC0gQ2hlY2shXG4qICAgYFJlYXNvbmluZ2A6IENvbmNpc2UgZXhwbGFuYXRpb24gb2YgdGhlIHZlcmRpY3QgLSBDaGVjayFcblxuRXZlcnl0aGluZyBpcyBzb3VuZC4gVGltZSB0byBydW4gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM5MjQsIk91dHB1dFRva2VucyI6MTc5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA0OjI5OjM3LjYwMzY3ODU0MloiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3NDcyNTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRQT0xMXCIsXG4gICAgXCJORVRDT05TT0xFXCIsXG4gICAgXCJORVRDT05TT0xFX0RZTkFNSUNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX25ldHBvbGxfc2VuZF9za2JcIixcbiAgICBcIm5ldHBvbGxfc2VuZF9za2JcIixcbiAgICBcInF1ZXVlX3Byb2Nlc3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgcXVldWUgbGVuZ3RoIGxpbWl0IChORVRQT0xMX1RYUV9NQVgpIGluIF9fbmV0cG9sbF9zZW5kX3NrYigpIGluIG5ldC9jb3JlL25ldHBvbGwuYyB0byBwcmV2ZW50IHVuYm91bmRlZCBza2IgcXVldWUgZ3Jvd3RoIHdoZW4gYSBkZXZpY2UgaXMgc3RhbGxlZCBvciBidXN5LiBDb3JlIG5ldHdvcmtpbmcgY29kZSBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlcyBhbmQgbmV0Y29uc29sZSAoaW5jbHVkaW5nIGR5bmFtaWNhbGx5IHJlY29uZmlndXJlZCB0YXJnZXRzIHZpYSBjb25maWdmcykuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3Qgc2tiIGxpZmVjeWNsZSwgcXVldWUgb3ZlcmZsb3cgaGFuZGxpbmcsIGFuZCBwYWNrZXQgZHJvcCBlZGdlIGNhc2VzIGluIHRoZSBuZXRwb2xsIHRyYW5zbWl0IHBhdGguXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUUE9MTFwiLFxuICAgIFwiTkVUQ09OU09MRVwiLFxuICAgIFwiTkVUQ09OU09MRV9EWU5BTUlDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19uZXRwb2xsX3NlbmRfc2tiXCIsXG4gICAgXCJuZXRwb2xsX3NlbmRfc2tiXCIsXG4gICAgXCJxdWV1ZV9wcm9jZXNzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHF1ZXVlIGxlbmd0aCBsaW1pdCAoTkVUUE9MTF9UWFFfTUFYKSBpbiBfX25ldHBvbGxfc2VuZF9za2IoKSBpbiBuZXQvY29yZS9uZXRwb2xsLmMgdG8gcHJldmVudCB1bmJvdW5kZWQgc2tiIHF1ZXVlIGdyb3d0aCB3aGVuIGEgZGV2aWNlIGlzIHN0YWxsZWQgb3IgYnVzeS4gQ29yZSBuZXR3b3JraW5nIGNvZGUgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgdmlydHVhbCBuZXR3b3JrIGRldmljZXMgYW5kIG5ldGNvbnNvbGUgKGluY2x1ZGluZyBkeW5hbWljYWxseSByZWNvbmZpZ3VyZWQgdGFyZ2V0cyB2aWEgY29uZmlnZnMpLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHNrYiBsaWZlY3ljbGUsIHF1ZXVlIG92ZXJmbG93IGhhbmRsaW5nLCBhbmQgcGFja2V0IGRyb3AgZWRnZSBjYXNlcyBpbiB0aGUgbmV0cG9sbCB0cmFuc21pdCBwYXRoLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNDoyOTozNy42NzExNTgyOTFaIiwiU2VxIjo0NywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MTI4MjQ3MDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDQ6Mjk6MzcuNjcxNTgwMDkxWiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzUxMjc4MjA4OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBxdWV1ZSBsZW5ndGggY2FwIChORVRQT0xMX1RYUV9NQVggPSAxMDI0KSBvbiB0aGUgbmV0cG9sbCB0cmFuc21pc3Npb24gcXVldWUgKG5waW5mby1cXHUwMDNldHhxKSBpbiBuZXQvY29yZS9uZXRwb2xsLmMgdG8gcHJldmVudCB1bmJvdW5kZWQgcXVldWUgZ3Jvd3RoIHdoZW4gdHJhbnNtaXNzaW9uIHN0YWxscy4gSWYgdGhlIHF1ZXVlIGxpbWl0IGlzIHJlYWNoZWQsIHRoZSBza2IgaXMgZnJlZWQgd2l0aCBkZXZfa2ZyZWVfc2tiX2lycShza2IpIGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyBORVRfWE1JVF9EUk9QLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnk6XFxuMS4gTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcyBhcmUgY3JlYXRlZCBvciByZWFkLiBUaGUgcXVldWUgbGVuZ3RoIGNoZWNrIG9wZXJhdGVzIG9uIG5waW5mby1cXHUwMDNldHhxLCBhbiBhbHJlYWR5IGluaXRpYWxpemVkIHNrX2J1ZmZfaGVhZC5cXG4yLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBzbyB0aGVyZSBpcyBubyByaXNrIG9mIGtlcm5lbCBpbmZvcm1hdGlvbiBkaXNjbG9zdXJlLlxcbjMuIE5vIGJ1ZmZlciBib3VuZHMgb3IgcGFja2V0IHBheWxvYWQgb2Zmc2V0cyBhcmUgbW9kaWZpZWQgaW4gd2F5cyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSBieXRlcy5cXG5cXG5BbnkgcG90ZW50aWFsIGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhpcyBjaGFuZ2UgKGUuZy4sIHBhY2tldCBsaWZlY3ljbGUgZXJyb3JzIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWZyZWUgb2YgdGhlIHNrYikgYXJlIGFkZHJlc3NlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIG1lbW9yeSBkZWJ1Z2dpbmcsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5MDgxNGFhMTU5MmU1Y2M2NzViZjE5OTVkMmUxODRlNmJiZjk5MWU1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMDQ6MjY6NDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRwb2xsLmMgYi9uZXQvY29yZS9uZXRwb2xsLmNcbmluZGV4IGZlMWUwY2RhNWQ2YmYuLjhmZDY0MDk1NWU0NjMgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9uZXRwb2xsLmNcbisrKyBiL25ldC9jb3JlL25ldHBvbGwuY1xuQEAgLTM4LDYgKzM4LDE0IEBAXG4gXG4gI2RlZmluZSBVU0VDX1BFUl9QT0xMXHQ1MFxuIFxuKy8qXG4rICogQ2FwIG9uIHNrYnMgcGFya2VkIGluIG5waW5mby1cdTAwM2V0eHEgd2hpbGUgdGhlIGRldmljZSBpcyBidXN5LiBUaGUgcXVldWVcbisgKiBleGlzdHMgdG8gcmlkZSBvdXQgYSB0cmFuc2llbnQgc3RhbGw7IGEgcHJvZHVjZXIgdGhhdCBvdXRydW5zIHRoZVxuKyAqIGRldmljZSBmb3IgbG9uZ2VyIHRoYW4gdGhhdCBtdXN0IGxvc2UgcGFja2V0cywgbm90IGdyb3cgaXQgd2l0aG91dFxuKyAqIGJvdW5kLlxuKyAqL1xuKyNkZWZpbmUgTkVUUE9MTF9UWFFfTUFYXHQxMDI0XG4rXG4gLypcbiAgKiBjYXJyaWVyX3RpbWVvdXQgaXMgbmV0Y29uc29sZS1zcGVjaWZpYyBhbmQgb25seSBrZXB0IGhlcmUgdG8gcHJlc2VydmUgdGhlXG4gICogbmV0cG9sbC5jYXJyaWVyX3RpbWVvdXQgbW9kdWxlLXBhcmFtZXRlciBBQkkuIEl0cyB2YWx1ZSBpcyBleHBvc2VkIHRvXG5AQCAtMzE0LDYgKzMyMiwxMCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgX19uZXRwb2xsX3NlbmRfc2tiKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdH1cbiBcbiBcdGlmICghZGV2X3htaXRfY29tcGxldGUoc3RhdHVzKSkge1xuK1x0XHRpZiAoc2tiX3F1ZXVlX2xlbihcdTAwMjZucGluZm8tXHUwMDNldHhxKSBcdTAwM2U9IE5FVFBPTExfVFhRX01BWCkge1xuK1x0XHRcdGRldl9rZnJlZV9za2JfaXJxKHNrYik7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbiBcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2bnBpbmZvLVx1MDAzZXR4cSwgc2tiKTtcbiBcdFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNm5waW5mby1cdTAwM2V0eF93b3JrLDApO1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDQ6Mjk6MzcuNjcxNTgxMzcxWiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjExOTEwNTM2NjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy5cblxuKipBbmFseXppbmcgdGhpcyBLZXJuZWwgUGF0Y2gqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoaXMgcGF0Y2guIEZpcnN0IHRoaW5ncyBmaXJzdCwgaXQncyBoaXR0aW5nIGBuZXQvY29yZS9uZXRwb2xsLmNgLCB3aGljaCwgYXMgeW91IGtub3csIGRlYWxzIHdpdGggbmV0d29yayBwb2xsaW5nLiBHb29kLCB0aGF0IG5hcnJvd3MgdGhlIGZvY3VzLiBMZXQncyBnZXQgdGhlIGNvbnRleHQsIEknbGwgdXNlIGByZWFkLWZpbGVgIHRvIGdldCB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGF0IGZpbGUsIGFuZCBJJ2xsIGp1bXAgcmlnaHQgYXJvdW5kIGxpbmUgMzE0LiBUaGF0J3MgdXN1YWxseSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgdG8gc2VlIHdoZXJlIHRoaXMgcGF0Y2ggaXMgc2xvdHRlZCBpbiBhbmQgdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgbG9naWMuIFRpbWUgdG8gZGl2ZSBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI3MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDQ6Mjk6NDkuNTgyMTIxMzZaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODMyMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvbmV0cG9sbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMwMDpcXHRcXHRcXHQgICAgIHRyaWVzIFxcdTAwM2UgMDsgLS10cmllcykge1xcbiAzMDE6XFx0XFx0XFx0XFx0aWYgKEhBUkRfVFhfVFJZTE9DSyhkZXYsIHR4cSkpIHtcXG4gMzAyOlxcdFxcdFxcdFxcdFxcdGlmICghbmV0aWZfeG1pdF9zdG9wcGVkKHR4cSkpXFxuIDMwMzpcXHRcXHRcXHRcXHRcXHRcXHRzdGF0dXMgPSBuZXRwb2xsX3N0YXJ0X3htaXQoc2tiLCBkZXYsIHR4cSk7XFxuIDMwNDpcXHRcXG4gMzA1OlxcdFxcdFxcdFxcdFxcdEhBUkRfVFhfVU5MT0NLKGRldiwgdHhxKTtcXG4gMzA2OlxcdFxcbiAzMDc6XFx0XFx0XFx0XFx0XFx0aWYgKGRldl94bWl0X2NvbXBsZXRlKHN0YXR1cykpXFxuIDMwODpcXHRcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gMzA5OlxcdFxcbiAzMTA6XFx0XFx0XFx0XFx0fVxcbiAzMTE6XFx0XFxuIDMxMjpcXHRcXHRcXHRcXHQvKiB0aWNrbGUgZGV2aWNlIG1heWJlIHRoZXJlIGlzIHNvbWUgY2xlYW51cCAqL1xcbiAzMTM6XFx0XFx0XFx0XFx0bmV0cG9sbF9wb2xsX2RldihucC1cXHUwMDNlZGV2KTtcXG4gMzE0OlxcdFxcbiAzMTU6XFx0XFx0XFx0XFx0dWRlbGF5KFVTRUNfUEVSX1BPTEwpO1xcbiAzMTY6XFx0XFx0XFx0fVxcbiAzMTc6XFx0XFxuIDMxODpcXHRcXHRcXHRXQVJOX09OQ0UoIWlycXNfZGlzYWJsZWQoKSxcXG4gMzE5OlxcdFxcdFxcdFxcdFxcXCJuZXRwb2xsX3NlbmRfc2tiX29uX2RldigpOiAlcyBlbmFibGVkIGludGVycnVwdHMgaW4gcG9sbCAoJXBTKVxcXFxuXFxcIixcXG4gMzIwOlxcdFxcdFxcdFxcdGRldi1cXHUwMDNlbmFtZSwgZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fc3RhcnRfeG1pdCk7XFxuIDMyMTpcXHRcXG4gMzIyOlxcdFxcdH1cXG4gMzIzOlxcdFxcbiAzMjQ6XFx0XFx0aWYgKCFkZXZfeG1pdF9jb21wbGV0ZShzdGF0dXMpKSB7XFxuIDMyNTpcXHRcXHRcXHRpZiAoc2tiX3F1ZXVlX2xlbihcXHUwMDI2bnBpbmZvLVxcdTAwM2V0eHEpIFxcdTAwM2U9IE5FVFBPTExfVFhRX01BWCkge1xcbiAzMjY6XFx0XFx0XFx0XFx0ZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTtcXG4gMzI3OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiAzMjg6XFx0XFx0XFx0fVxcbiAzMjk6XFx0XFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNm5waW5mby1cXHUwMDNldHhxLCBza2IpO1xcbiAzMzA6XFx0XFx0XFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFxcdTAwMjZucGluZm8tXFx1MDAzZXR4X3dvcmssMCk7XFxuIDMzMTpcXHRcXHR9XFxuIDMzMjpcXHRcXHRyZXQgPSBORVRERVZfVFhfT0s7XFxuIDMzMzpcXHRvdXQ6XFxuIDMzNDpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gMzM1OlxcdFxcdHJldHVybiByZXQ7XFxuIDMzNjpcXHR9XFxuIDMzNzpcXHRcXG4gMzM4OlxcdG5ldGRldl90eF90IG5ldHBvbGxfc2VuZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAzMzk6XFx0e1xcbiAzNDA6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gMzQxOlxcdFxcdG5ldGRldl90eF90IHJldDtcXG4gMzQyOlxcdFxcbiAzNDM6XFx0XFx0aWYgKHVubGlrZWx5KCFucCkpIHtcXG4gMzQ0OlxcdFxcdFxcdGRldl9rZnJlZV9za2JfaXJxKHNrYik7XFxuIDM0NTpcXHRcXHRcXHRyZXQgPSBORVRfWE1JVF9EUk9QO1xcbiAzNDY6XFx0XFx0fSBlbHNlIHtcXG4gMzQ3OlxcdFxcdFxcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcXG4gMzQ4OlxcdFxcdFxcdHJldCA9IF9fbmV0cG9sbF9zZW5kX3NrYihucCwgc2tiKTtcXG4gMzQ5OlxcdFxcdFxcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDQ6Mjk6NDkuNTgyMjA2OVoiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNTU3MjE2ODY0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldHBvbGwgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBzZWUgYSBgZGlmZmAgb3V0cHV0LCB3aGljaCBtZWFucyB3ZSdyZSBsb29raW5nIGF0IGNoYW5nZXMgdG8gdGhlIGBuZXRwb2xsLmNgIGZpbGUgaW4gdGhlIGBuZXQvY29yZWAgZGlyZWN0b3J5LiBUaGUgcHJpbWFyeSBmb2N1cyBzZWVtcyB0byBiZSBhIG5ldyBkZWZpbml0aW9uLCBgTkVUUE9MTF9UWFFfTUFYYCwgc2V0IHRvIDEwMjQuIFRoaXMgaXMgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGUgY29tbWVudCBjbGFyaWZpZXMgdGhhdCBpdCdzIGEgY2FwIG9uIHRoZSBudW1iZXIgb2YgU0tCcyAoc29ja2V0IGJ1ZmZlcikgcGFya2VkIGluIHRoZSBgbnBpbmZvLVx1MDAzZXR4cWAgcXVldWUgd2hpbGUgdGhlIG5ldHdvcmsgZGV2aWNlIGlzIGJ1c3kuIFRoZSBjb21tZW50IGNsZWFybHkgc3RhdGVzIHRoZSBxdWV1ZSBleGlzdHMgdG8gaGFuZGxlIGJyaWVmIGRldmljZSBzdGFsbHMsIGFuZCB0aGUgaW1wbGVtZW50YXRpb24gd2lsbCBiZWdpbiBkaXNjYXJkaW5nIHBhY2tldHMgb25jZSBpdCBoaXRzIHRoYXQgbGltaXQuIFRoYXQncyBnb29kLCBwcmV2ZW50cyBhbiB1bmJvdW5kZWQgcXVldWUgdGhhdCBjb3VsZCBsZWFkIHRvIG1lbW9yeSBleGhhdXN0aW9uLiBTbywgaW5zdGVhZCBvZiBsZXR0aW5nIGl0IGdyb3cgaW5kZWZpbml0ZWx5IGlmIHRoZSBkZXZpY2UgaXMgcGVyc2lzdGVudGx5IGJ1c3ksIHdlJ3JlIG5vdyBpbXBsZW1lbnRpbmcgYmFja3ByZXNzdXJlIGFuZCBkcm9wcGluZyBwYWNrZXRzIGFmdGVyIGEgdGhyZXNob2xkLiBTbWFydC5cblxuVGhlbiwgdGhlcmUncyBhIG5ldyBgaWZgIGJsb2NrIGluc2lkZSBgX19uZXRwb2xsX3NlbmRfc2tiYC4gSWYgdGhlIGRldmljZSB0cmFuc21pdCBpc24ndCBjb21wbGV0ZSAobWVhbmluZyBpdCdzIGJ1c3kpLCBhbmQgdGhlIGB0eHFgIGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYE5FVFBPTExfVFhRX01BWGAsIHRoZSBTS0IgaXMgZnJlZWQsIGFuZCB3ZSBgZ290byBvdXRgLiBPdGhlcndpc2UsIHRoZSBTS0IgaXMgcXVldWVkIGFuZCBhIGRlbGF5ZWQgd29yayBpdGVtIGlzIHNjaGVkdWxlZC4gVGhlIG5ldyBpbXBsZW1lbnRhdGlvbiBwcmV2ZW50cyBhbiB1bmJvdW5kZWQgaW5jcmVhc2UgaW4gdGhlIHNpemUgb2YgYG5waW5mby1cdTAwM2V0eHFgIGJ5IGRpc2NhcmRpbmcgcGFja2V0cyBpZiB0aGUgZGV2aWNlIGlzIHRvbyBzbG93LlxuXG5Ob3csIEknbSBqdXN0IGN1cmlvdXMgYWJvdXQgaG93IGBfX25ldHBvbGxfc2VuZF9za2JgIGhhbmRsZXMgdGhlIHJldHVybiB2YWx1ZSBvciBhbnkgZXJyb3JzLiBMZXQgbWUgcXVpY2tseSBzY2FuIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBzcGVjaWZpY2FsbHkgbGluZXMgMjcwLTMwMCBvZiB0aGUgc2FtZSBmaWxlLCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBsb2NhbCB2YXJpYWJsZXMgYmVpbmcgdXNlZCBhbmQgaG93IGVycm9ycyBtaWdodCBiZSBoYW5kbGVkIG9yIGlmIHRoZSByZXR1cm4gdmFyaWFibGUgaXMgaW5pdGlhbGl6ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNDQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNDozMDowNS4xNTQzNzkwNTFaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvbmV0cG9sbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3MCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI3MDpcXHRzdGF0aWMgbmV0ZGV2X3R4X3QgX19uZXRwb2xsX3NlbmRfc2tiKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gMjcxOlxcdHtcXG4gMjcyOlxcdFxcdG5ldGRldl90eF90IHN0YXR1cyA9IE5FVERFVl9UWF9CVVNZO1xcbiAyNzM6XFx0XFx0bmV0ZGV2X3R4X3QgcmV0ID0gTkVUX1hNSVRfRFJPUDtcXG4gMjc0OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuIDI3NTpcXHRcXHR1bnNpZ25lZCBsb25nIHRyaWVzO1xcbiAyNzY6XFx0XFx0LyogSXQgaXMgdXAgdG8gdGhlIGNhbGxlciB0byBrZWVwIG5waW5mbyBhbGl2ZS4gKi9cXG4gMjc3OlxcdFxcdHN0cnVjdCBuZXRwb2xsX2luZm8gKm5waW5mbztcXG4gMjc4OlxcdFxcbiAyNzk6XFx0XFx0bG9ja2RlcF9hc3NlcnRfaXJxc19kaXNhYmxlZCgpO1xcbiAyODA6XFx0XFxuIDI4MTpcXHRcXHRkZXYgPSBucC1cXHUwMDNlZGV2O1xcbiAyODI6XFx0XFx0LyogbnBpbmZvLVxcdTAwM2V0eHEgYmVsb25ncyB0byBucC1cXHUwMDNlZGV2LCBzbyByZXRyaWVzIG11c3Qgc3RheSBib3VuZCB0byBpdC4gKi9cXG4gMjgzOlxcdFxcdHNrYi1cXHUwMDNlZGV2ID0gZGV2O1xcbiAyODQ6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiAyODU6XFx0XFx0bnBpbmZvID0gcmN1X2RlcmVmZXJlbmNlX2JoKGRldi1cXHUwMDNlbnBpbmZvKTtcXG4gMjg2OlxcdFxcbiAyODc6XFx0XFx0aWYgKCFucGluZm8gfHwgIW5ldGlmX3J1bm5pbmcoZGV2KSB8fCAhbmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSkge1xcbiAyODg6XFx0XFx0XFx0ZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTtcXG4gMjg5OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAyOTA6XFx0XFx0fVxcbiAyOTE6XFx0XFxuIDI5MjpcXHRcXHQvKiBkb24ndCBnZXQgbWVzc2FnZXMgb3V0IG9mIG9yZGVyLCBhbmQgbm8gcmVjdXJzaW9uICovXFxuIDI5MzpcXHRcXHRpZiAoc2tiX3F1ZXVlX2xlbihcXHUwMDI2bnBpbmZvLVxcdTAwM2V0eHEpID09IDAgXFx1MDAyNlxcdTAwMjYgIW5ldHBvbGxfb3duZXJfYWN0aXZlKGRldikpIHtcXG4gMjk0OlxcdFxcdFxcdHN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTtcXG4gMjk1OlxcdFxcbiAyOTY6XFx0XFx0XFx0dHhxID0gbmV0ZGV2X2NvcmVfcGlja190eChkZXYsIHNrYiwgTlVMTCk7XFxuIDI5NzpcXHRcXG4gMjk4OlxcdFxcdFxcdC8qIHRyeSB1bnRpbCBuZXh0IGNsb2NrIHRpY2sgKi9cXG4gMjk5OlxcdFxcdFxcdGZvciAodHJpZXMgPSBqaWZmaWVzX3RvX3VzZWNzKDEpL1VTRUNfUEVSX1BPTEw7XFxuIDMwMDpcXHRcXHRcXHQgICAgIHRyaWVzIFxcdTAwM2UgMDsgLS10cmllcykge1xcbiAzMDE6XFx0XFx0XFx0XFx0aWYgKEhBUkRfVFhfVFJZTE9DSyhkZXYsIHR4cSkpIHtcXG4gMzAyOlxcdFxcdFxcdFxcdFxcdGlmICghbmV0aWZfeG1pdF9zdG9wcGVkKHR4cSkpXFxuIDMwMzpcXHRcXHRcXHRcXHRcXHRcXHRzdGF0dXMgPSBuZXRwb2xsX3N0YXJ0X3htaXQoc2tiLCBkZXYsIHR4cSk7XFxuIDMwNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDQ6MzA6MDUuMTU0NDYyMDYxWiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc2NDQ5MTc5NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogTkVUUE9MTCBUWCBRdWV1ZSBMaW1pdCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBzYWZlIGZyb20gYSBLTVNBTiBwZXJzcGVjdGl2ZSwgYW5kIEknbSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAuIExldCdzIHdhbGsgdGhyb3VnaCB0aGUgbG9naWMuXG5cbkZpcnN0LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNhcCwgYE5FVFBPTExfVFhRX01BWGAsIG9uIHRoZSBzaXplIG9mIHRoZSBgbnBpbmZvLVx1MDAzZXR4cWAgcXVldWUuIFRoaXMgaXMgYSBjcnVjaWFsIGFkZGl0aW9uIHRvIHByZXZlbnQgdW5ib3VuZGVkIHF1ZXVlIGdyb3d0aCwgd2hpY2ggY291bGQgbGVhZCB0byBvdXQtb2YtbWVtb3J5IHNpdHVhdGlvbnMgb3IgcmVzb3VyY2UgZXhoYXVzdGlvbi4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyB0aGlzOiBpZiB0aGUgcXVldWUgaXMgZnVsbCAobGVuZ3RoIGV4Y2VlZHMgYE5FVFBPTExfVFhRX01BWGApLCB0aGUgaW5jb21pbmcgYHNrYmAgaXMgZnJlZWQgdXNpbmcgYGRldl9rZnJlZV9za2JfaXJxKHNrYilgIGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyBgTkVUX1hNSVRfRFJPUGAuXG5cbk5vdywgY29uc2lkZXJpbmcgS01TQU4ncyBwdXJwb3NlOiBpdCdzIGRlc2lnbmVkIHRvIGNhdGNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBpbmZvcm1hdGlvbiBsZWFrcywgcGFydGljdWxhcmx5IHRob3NlIHRoYXQgY291bGQgZXhwb3NlIGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuIERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYW55IG9mIHRob3NlIHJpc2tzPyBJJ3ZlIHN5c3RlbWF0aWNhbGx5IGNoZWNrZWQgdGhlIG1haW4gdGhyZWF0IHZlY3RvcnMuXG5cbjEuICAqKlVzZXItU3BhY2UgSW50ZXJhY3Rpb25zOioqIFRoZSBjb2RlIGRvZXNuJ3QgbW9kaWZ5IG9yIGludHJvZHVjZSBhbnkgbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSB2aWEgYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIG5ldGxpbmsgU0tCIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycy4gTmV0cG9sbCBpcyBpbnRlcm5hbCwgc28gbm90aGluZyBlc2NhcGVzLlxuMi4gICoqVW5pbml0aWFsaXplZCBWYXJpYWJsZSBVc2FnZToqKiBUaGVyZSdzIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzLiBUaGUgcXVldWUgbGVuZ3RoIGNoZWNrLCBgc2tiX3F1ZXVlX2xlbihcdTAwMjZucGluZm8tXHUwMDNldHhxKWAsIGlzIG9wZXJhdGluZyBvbiBhIHN0YW5kYXJkLCBpbml0aWFsaXplZCBgc3RydWN0IHNrX2J1ZmZfaGVhZGAuXG4zLiAgKipEYXRhIFN0cnVjdHVyZSBJbml0aWFsaXphdGlvbjoqKiBUaGlzIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgbGF0ZXIgcmVhZC5cbjQuICAqKkJ1ZmZlciBBY2Nlc3MvTGVuZ3RoIElzc3VlczoqKiBJdCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGJvdW5kcyBjaGVja3Mgb3IgbGVuZ3RoIG1hbmlwdWxhdGlvbnMgdGhhdCBtaWdodCBjcmVhdGUgb3Bwb3J0dW5pdGllcyB0byByZWFkIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgaW4gZXhpc3RpbmcgYnVmZmVycy4gSXQgKnByZXZlbnRzKiB1bmJvdW5kZWQgYnVmZmVyIGdyb3d0aC5cbjUuICAqKk1lbW9yeSBNYW5hZ2VtZW50OioqIFRoZSBwYXRjaCAqZnJlZXMqIGEgYnVmZmVyIGlmIHRoZSBxdWV1ZSBpcyBmdWxsLCB1c2luZyBgZGV2X2tmcmVlX3NrYl9pcnEoc2tiKWAuIEFueSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBvciByZWZlcmVuY2UgY291bnQgaXNzdWVzIHJlbGF0ZWQgdG8gdGhlIGBza2JgIGFyZSB0aGluZ3MgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBtZW1vcnkgZGV0ZWN0b3JzIGFyZSBhbHJlYWR5IGRlc2lnbmVkIHRvIGhhbmRsZS5cblxuVGhlcmVmb3JlLCB0aGUgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcy4gS0FTQU4gd2lsbCBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBsaWZlY3ljbGUgZXJyb3JzLlxuXG5UaGUgcnVsZSBzdGF0ZXM6IFwiVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwgTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cIiBUaGlzIGFwcGxpZXMgaGVyZSwgYXMgS0FTQU4gYW5kIHN0YW5kYXJkIGNoZWNrcyBhbHJlYWR5IGNvdmVyIHRoZSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBjb25jZXJucyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlLiBTaW5jZSB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSB0aGUgKnNwZWNpZmljKiBzZXQgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCBvbmx5IEtNU0FOIHdvdWxkIGRldGVjdCwgS01TQU4gaXMgbm90IGp1c3RpZmllZC4gVGhlIHBhdGNoIG9ubHkgbGltaXRzIHF1ZXVlIGxlbmd0aCBhbmQgaWYgdGhlIGNhcCBpcyByZWFjaGVkLCBzaW1wbHkgZHJvcHMgcGFja2V0cy5cblxuU28sIEkgd2lsbCBub3cgcHJlcGFyZSB0aGUgc3BlY2lmaWMgcmVhc29uaW5nIGFzIGBLTVNBTlJlYXNvbmluZ2A6XG5UaGUgcGF0Y2ggYWRkcyBhIGxlbmd0aCBsaW1pdCAoYE5FVFBPTExfVFhRX01BWGApIG9uIGBucGluZm8tXHUwMDNldHhxYCBpbiBgX19uZXRwb2xsX3NlbmRfc2tiKClgIHRvIGF2b2lkIHVuYm91bmRlZCBtZW1vcnkgZ3Jvd3RoIHdoZW4gdGhlIGRldmljZSBpcyBjb25nZXN0ZWQuIElmIHRoZSBxdWV1ZSBsZW5ndGggZXhjZWVkcyB0aGUgdGhyZXNob2xkLCB0aGUgaW5jb21pbmcgc2tiIGlzIGZyZWVkIHZpYSBgZGV2X2tmcmVlX3NrYl9pcnEoc2tiKWAgYW5kIGRyb3BwZWQuIEtNU0FOIGlzIG5vdCBuZWVkZWQgYmVjYXVzZSB0aGUgcGF0Y2ggZG9lcyBub3QgY3JlYXRlLCB0b3VjaCwgb3IgcmVhZCBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcywgbm9yIGRvZXMgaXQgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBNZW1vcnkgc2FmZXR5IGNvbmNlcm5zIHJlbGF0ZWQgdG8gc2tiIGxpZmVjeWNsZSBvciBxdWV1ZSBoYW5kbGluZyBhcmUgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgY2hlY2tzLiBEZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QganVzdGlmaWVkLlxuXG5JJ20gY29uZmlkZW50IGluIGludm9raW5nIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3NTAsIk91dHB1dFRva2VucyI6MjY4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTg5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDQ6MzA6MTIuNzk5MzgyNjY5WiIsIlNlcSI6NTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgcXVldWUgbGVuZ3RoIGNhcCAoTkVUUE9MTF9UWFFfTUFYID0gMTAyNCkgb24gdGhlIG5ldHBvbGwgdHJhbnNtaXNzaW9uIHF1ZXVlIChucGluZm8tXFx1MDAzZXR4cSkgaW4gbmV0L2NvcmUvbmV0cG9sbC5jIHRvIHByZXZlbnQgdW5ib3VuZGVkIHF1ZXVlIGdyb3d0aCB3aGVuIHRyYW5zbWlzc2lvbiBzdGFsbHMuIElmIHRoZSBxdWV1ZSBsaW1pdCBpcyByZWFjaGVkLCB0aGUgc2tiIGlzIGZyZWVkIHdpdGggZGV2X2tmcmVlX3NrYl9pcnEoc2tiKSBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMgTkVUX1hNSVRfRFJPUC5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OlxcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMgYXJlIGNyZWF0ZWQgb3IgcmVhZC4gVGhlIHF1ZXVlIGxlbmd0aCBjaGVjayBvcGVyYXRlcyBvbiBucGluZm8tXFx1MDAzZXR4cSwgYW4gYWxyZWFkeSBpbml0aWFsaXplZCBza19idWZmX2hlYWQuXFxuMi4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiBrZXJuZWwgaW5mb3JtYXRpb24gZGlzY2xvc3VyZS5cXG4zLiBObyBidWZmZXIgYm91bmRzIG9yIHBhY2tldCBwYXlsb2FkIG9mZnNldHMgYXJlIG1vZGlmaWVkIGluIHdheXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgYnl0ZXMuXFxuXFxuQW55IHBvdGVudGlhbCBidWdzIHJlc3VsdGluZyBmcm9tIHRoaXMgY2hhbmdlIChlLmcuLCBwYWNrZXQgbGlmZWN5Y2xlIGVycm9ycyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIG9mIHRoZSBza2IpIGFyZSBhZGRyZXNzZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBtZW1vcnkgZGVidWdnaW5nLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHF1ZXVlIGxlbmd0aCBjYXAgKE5FVFBPTExfVFhRX01BWCA9IDEwMjQpIG9uIHRoZSBuZXRwb2xsIHRyYW5zbWlzc2lvbiBxdWV1ZSAobnBpbmZvLVxcdTAwM2V0eHEpIGluIG5ldC9jb3JlL25ldHBvbGwuYyB0byBwcmV2ZW50IHVuYm91bmRlZCBxdWV1ZSBncm93dGggd2hlbiB0cmFuc21pc3Npb24gc3RhbGxzLiBJZiB0aGUgcXVldWUgbGltaXQgaXMgcmVhY2hlZCwgdGhlIHNrYiBpcyBmcmVlZCB3aXRoIGRldl9rZnJlZV9za2JfaXJxKHNrYikgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zIE5FVF9YTUlUX0RST1AuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeTpcXG4xLiBObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzIGFyZSBjcmVhdGVkIG9yIHJlYWQuIFRoZSBxdWV1ZSBsZW5ndGggY2hlY2sgb3BlcmF0ZXMgb24gbnBpbmZvLVxcdTAwM2V0eHEsIGFuIGFscmVhZHkgaW5pdGlhbGl6ZWQgc2tfYnVmZl9oZWFkLlxcbjIuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIHNvIHRoZXJlIGlzIG5vIHJpc2sgb2Yga2VybmVsIGluZm9ybWF0aW9uIGRpc2Nsb3N1cmUuXFxuMy4gTm8gYnVmZmVyIGJvdW5kcyBvciBwYWNrZXQgcGF5bG9hZCBvZmZzZXRzIGFyZSBtb2RpZmllZCBpbiB3YXlzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ5dGVzLlxcblxcbkFueSBwb3RlbnRpYWwgYnVncyByZXN1bHRpbmcgZnJvbSB0aGlzIGNoYW5nZSAoZS5nLiwgcGFja2V0IGxpZmVjeWNsZSBlcnJvcnMgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtZnJlZSBvZiB0aGUgc2tiKSBhcmUgYWRkcmVzc2VkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgbWVtb3J5IGRlYnVnZ2luZywgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow79m96[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-14 04:24:51 +0000 UTC FinishedAt: 2026-09-14 04:30:14 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETPOLL", "NETCONSOLE", "NETCONSOLE_DYNAMIC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETPOLL", "NETCONSOLE", "NETCONSOLE_DYNAMIC" ], "series_id": "91f8cc47-d49e-4903-a1c8-5ec06dcb491f" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "__netpoll_send_skb", "netpoll_send_skb", "queue_process" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "base_tree": "net" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA0OjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVFBPTEwmIzM0OywKICAgICYjMzQ7TkVUQ09OU09MRSYjMzQ7LAogICAgJiMzNDtORVRDT05TT0xFX0RZTkFNSUMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX25ldHBvbGxfc2VuZF9za2ImIzM0OywKICAgICYjMzQ7bmV0cG9sbF9zZW5kX3NrYiYjMzQ7LAogICAgJiMzNDtxdWV1ZV9wcm9jZXNzJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHF1ZXVlIGxlbmd0aCBjYXAgKE5FVFBPTExfVFhRX01BWCA9IDEwMjQpIG9uIHRoZSBuZXRwb2xsIHRyYW5zbWlzc2lvbiBxdWV1ZSAobnBpbmZvLVx1MDAzZXR4cSkgaW4gbmV0L2NvcmUvbmV0cG9sbC5jIHRvIHByZXZlbnQgdW5ib3VuZGVkIHF1ZXVlIGdyb3d0aCB3aGVuIHRyYW5zbWlzc2lvbiBzdGFsbHMuIElmIHRoZSBxdWV1ZSBsaW1pdCBpcyByZWFjaGVkLCB0aGUgc2tiIGlzIGZyZWVkIHdpdGggZGV2X2tmcmVlX3NrYl9pcnEoc2tiKSBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMgTkVUX1hNSVRfRFJPUC5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeTpcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMgYXJlIGNyZWF0ZWQgb3IgcmVhZC4gVGhlIHF1ZXVlIGxlbmd0aCBjaGVjayBvcGVyYXRlcyBvbiBucGluZm8tXHUwMDNldHhxLCBhbiBhbHJlYWR5IGluaXRpYWxpemVkIHNrX2J1ZmZfaGVhZC5cbjIuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIHNvIHRoZXJlIGlzIG5vIHJpc2sgb2Yga2VybmVsIGluZm9ybWF0aW9uIGRpc2Nsb3N1cmUuXG4zLiBObyBidWZmZXIgYm91bmRzIG9yIHBhY2tldCBwYXlsb2FkIG9mZnNldHMgYXJlIG1vZGlmaWVkIGluIHdheXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgYnl0ZXMuXG5cbkFueSBwb3RlbnRpYWwgYnVncyByZXN1bHRpbmcgZnJvbSB0aGlzIGNoYW5nZSAoZS5nLiwgcGFja2V0IGxpZmVjeWNsZSBlcnJvcnMgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtZnJlZSBvZiB0aGUgc2tiKSBhcmUgYWRkcmVzc2VkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgbWVtb3J5IGRlYnVnZ2luZywgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgcXVldWUgbGVuZ3RoIGxpbWl0IChORVRQT0xMX1RYUV9NQVgpIGluIF9fbmV0cG9sbF9zZW5kX3NrYigpIGluIG5ldC9jb3JlL25ldHBvbGwuYyB0byBwcmV2ZW50IHVuYm91bmRlZCBza2IgcXVldWUgZ3Jvd3RoIHdoZW4gYSBkZXZpY2UgaXMgc3RhbGxlZCBvciBidXN5LiBDb3JlIG5ldHdvcmtpbmcgY29kZSBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlcyBhbmQgbmV0Y29uc29sZSAoaW5jbHVkaW5nIGR5bmFtaWNhbGx5IHJlY29uZmlndXJlZCB0YXJnZXRzIHZpYSBjb25maWdmcykuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3Qgc2tiIGxpZmVjeWNsZSwgcXVldWUgb3ZlcmZsb3cgaGFuZGxpbmcsIGFuZCBwYWNrZXQgZHJvcCBlZGdlIGNhc2VzIGluIHRoZSBuZXRwb2xsIHRyYW5zbWl0IHBhdGguJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDQ6MjY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5MDgxNGFhMTU5MmU1Y2M2NzViZjE5OTVkMmUxODRlNmJiZjk5MWU1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMDQ6MjY6NDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0cG9sbC5jIGIvbmV0L2NvcmUvbmV0cG9sbC5jXG5pbmRleCBmZTFlMGNkYTVkNmJmLi44ZmQ2NDA5NTVlNDYzIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvbmV0cG9sbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9uZXRwb2xsLmNcbkBAIC0zOCw2ICYjNDM7MzgsMTQgQEBcbiBcbiAjZGVmaW5lIFVTRUNfUEVSX1BPTExcdDUwXG4gXG4mIzQzOy8qXG4mIzQzOyAqIENhcCBvbiBza2JzIHBhcmtlZCBpbiBucGluZm8tXHUwMDNldHhxIHdoaWxlIHRoZSBkZXZpY2UgaXMgYnVzeS4gVGhlIHF1ZXVlXG4mIzQzOyAqIGV4aXN0cyB0byByaWRlIG91dCBhIHRyYW5zaWVudCBzdGFsbDsgYSBwcm9kdWNlciB0aGF0IG91dHJ1bnMgdGhlXG4mIzQzOyAqIGRldmljZSBmb3IgbG9uZ2VyIHRoYW4gdGhhdCBtdXN0IGxvc2UgcGFja2V0cywgbm90IGdyb3cgaXQgd2l0aG91dFxuJiM0MzsgKiBib3VuZC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgTkVUUE9MTF9UWFFfTUFYXHQxMDI0XG4mIzQzO1xuIC8qXG4gICogY2Fycmllcl90aW1lb3V0IGlzIG5ldGNvbnNvbGUtc3BlY2lmaWMgYW5kIG9ubHkga2VwdCBoZXJlIHRvIHByZXNlcnZlIHRoZVxuICAqIG5ldHBvbGwuY2Fycmllcl90aW1lb3V0IG1vZHVsZS1wYXJhbWV0ZXIgQUJJLiBJdHMgdmFsdWUgaXMgZXhwb3NlZCB0b1xuQEAgLTMxNCw2ICYjNDM7MzIyLDEwIEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBfX25ldHBvbGxfc2VuZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0fVxuIFxuIFx0aWYgKCFkZXZfeG1pdF9jb21wbGV0ZShzdGF0dXMpKSB7XG4mIzQzO1x0XHRpZiAoc2tiX3F1ZXVlX2xlbihcdTAwMjZucGluZm8tXHUwMDNldHhxKSBcdTAwM2U9IE5FVFBPTExfVFhRX01BWCkge1xuJiM0MztcdFx0XHRkZXZfa2ZyZWVfc2tiX2lycShza2IpO1xuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdH1cbiBcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2bnBpbmZvLVx1MDAzZXR4cSwgc2tiKTtcbiBcdFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNm5waW5mby1cdTAwM2V0eF93b3JrLDApO1xuIFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA0OjI2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVFBPTEwmIzM0OywKICAgICYjMzQ7TkVUQ09OU09MRSYjMzQ7LAogICAgJiMzNDtORVRDT05TT0xFX0RZTkFNSUMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX25ldHBvbGxfc2VuZF9za2ImIzM0OywKICAgICYjMzQ7bmV0cG9sbF9zZW5kX3NrYiYjMzQ7LAogICAgJiMzNDtxdWV1ZV9wcm9jZXNzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBxdWV1ZSBsZW5ndGggbGltaXQgKE5FVFBPTExfVFhRX01BWCkgaW4gX19uZXRwb2xsX3NlbmRfc2tiKCkgaW4gbmV0L2NvcmUvbmV0cG9sbC5jIHRvIHByZXZlbnQgdW5ib3VuZGVkIHNrYiBxdWV1ZSBncm93dGggd2hlbiBhIGRldmljZSBpcyBzdGFsbGVkIG9yIGJ1c3kuIENvcmUgbmV0d29ya2luZyBjb2RlIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHZpcnR1YWwgbmV0d29yayBkZXZpY2VzIGFuZCBuZXRjb25zb2xlIChpbmNsdWRpbmcgZHluYW1pY2FsbHkgcmVjb25maWd1cmVkIHRhcmdldHMgdmlhIGNvbmZpZ2ZzKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBza2IgbGlmZWN5Y2xlLCBxdWV1ZSBvdmVyZmxvdyBoYW5kbGluZywgYW5kIHBhY2tldCBkcm9wIGVkZ2UgY2FzZXMgaW4gdGhlIG5ldHBvbGwgdHJhbnNtaXQgcGF0aC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDkwODE0YWExNTkyZTVjYzY3NWJmMTk5NWQyZTE4NGU2YmJmOTkxZTUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCAxNCAwNDoyNjo0MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldHBvbGwuYyBiL25ldC9jb3JlL25ldHBvbGwuYwppbmRleCBmZTFlMGNkYTVkNmJmLi44ZmQ2NDA5NTVlNDYzIDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZXRwb2xsLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvbmV0cG9sbC5jCkBAIC0zOCw2ICYjNDM7MzgsMTQgQEAKIAogI2RlZmluZSBVU0VDX1BFUl9QT0xMCTUwCiAKJiM0MzsvKgomIzQzOyAqIENhcCBvbiBza2JzIHBhcmtlZCBpbiBucGluZm8tJmd0O3R4cSB3aGlsZSB0aGUgZGV2aWNlIGlzIGJ1c3kuIFRoZSBxdWV1ZQomIzQzOyAqIGV4aXN0cyB0byByaWRlIG91dCBhIHRyYW5zaWVudCBzdGFsbDsgYSBwcm9kdWNlciB0aGF0IG91dHJ1bnMgdGhlCiYjNDM7ICogZGV2aWNlIGZvciBsb25nZXIgdGhhbiB0aGF0IG11c3QgbG9zZSBwYWNrZXRzLCBub3QgZ3JvdyBpdCB3aXRob3V0CiYjNDM7ICogYm91bmQuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBORVRQT0xMX1RYUV9NQVgJMTAyNAomIzQzOwogLyoKICAqIGNhcnJpZXJfdGltZW91dCBpcyBuZXRjb25zb2xlLXNwZWNpZmljIGFuZCBvbmx5IGtlcHQgaGVyZSB0byBwcmVzZXJ2ZSB0aGUKICAqIG5ldHBvbGwuY2Fycmllcl90aW1lb3V0IG1vZHVsZS1wYXJhbWV0ZXIgQUJJLiBJdHMgdmFsdWUgaXMgZXhwb3NlZCB0bwpAQCAtMzE0LDYgJiM0MzszMjIsMTAgQEAgc3RhdGljIG5ldGRldl90eF90IF9fbmV0cG9sbF9zZW5kX3NrYihzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IpCiAJfQogCiAJaWYgKCFkZXZfeG1pdF9jb21wbGV0ZShzdGF0dXMpKSB7CiYjNDM7CQlpZiAoc2tiX3F1ZXVlX2xlbigmYW1wO25waW5mby0mZ3Q7dHhxKSAmZ3Q7PSBORVRQT0xMX1RYUV9NQVgpIHsKJiM0MzsJCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQogCQlza2JfcXVldWVfdGFpbCgmYW1wO25waW5mby0mZ3Q7dHhxLCBza2IpOwogCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmFtcDtucGluZm8tJmd0O3R4X3dvcmssMCk7CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDYwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0d29yayBQb2xsaW5nIENvZGUqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBuZXRwb2xsLmNgIGRpZmYuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2UsIHNvIEkmIzM5O2xsIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgc3Vycm91bmRpbmcgY29kZS4gSXQgbG9va3MgbGlrZSBhIG5ldyBgI2RlZmluZWAgY2FsbGVkIGBORVRQT0xMX1RYUV9NQVhgIGhhcyBiZWVuIGFkZGVkLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaXRzIHB1cnBvc2UuCgpMb29raW5nIGF0IHRoZSBjb2RlLCBpdCBsb29rcyBsaWtlIGBORVRQT0xMX1RYUV9NQVhgIGlzIHVzZWQgdG8gbGltaXQgdGhlIHNpemUgb2YgYG5waW5mby0mZ3Q7dHhxYC4gVGhlIGNvbW1lbnQgY2xhcmlmaWVzIHRoYXQgYHR4cWAgaXMgdXNlZCB0byBidWZmZXIgU0tCcyAoc29ja2V0IGJ1ZmZlcikgd2hlbiB0aGUgbmV0d29yayBkZXZpY2UgaXMgYnVzeS4gVGhlIGdvYWwgaXMgdG8gaGFuZGxlIHRlbXBvcmFyeSBzdGFsbHMsIGJ1dCBwcmV2ZW50IHRoZSBxdWV1ZSBmcm9tIGdyb3dpbmcgaW5kZWZpbml0ZWx5LCB3aGljaCBjb3VsZCBsZWFkIHRvIHJlc291cmNlIGV4aGF1c3Rpb24uIFRoZSBsb2dpYyBzZWVtcyBzdHJhaWdodGZvcndhcmQ6IElmIHRoZSBgdHhxYCByZWFjaGVzIGBORVRQT0xMX1RYUV9NQVhgLCBhbnkgbmV3IHBhY2tldHMgYXJlIGRyb3BwZWQuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIGEgZ29vZCBhcHByb2FjaCB0byBwcmV2ZW50IHVuYm91bmRlZCBxdWV1ZSBncm93dGggZHVyaW5nIHRyYW5zaWVudCBuZXR3b3JrIGNvbmdlc3Rpb24uIEkgd2lsbCBuZWVkIHRvIGxvb2sgdXAgYGRldl94bWl0X2NvbXBsZXRlYCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGNvbnRyb2wgdG8gYmUgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL25ldHBvbGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzAwOlx0XHRcdCAgICAgdHJpZXMgXHUwMDNlIDA7IC0tdHJpZXMpIHtcbiAzMDE6XHRcdFx0XHRpZiAoSEFSRF9UWF9UUllMT0NLKGRldiwgdHhxKSkge1xuIDMwMjpcdFx0XHRcdFx0aWYgKCFuZXRpZl94bWl0X3N0b3BwZWQodHhxKSlcbiAzMDM6XHRcdFx0XHRcdFx0c3RhdHVzID0gbmV0cG9sbF9zdGFydF94bWl0KHNrYiwgZGV2LCB0eHEpO1xuIDMwNDpcdFxuIDMwNTpcdFx0XHRcdFx0SEFSRF9UWF9VTkxPQ0soZGV2LCB0eHEpO1xuIDMwNjpcdFxuIDMwNzpcdFx0XHRcdFx0aWYgKGRldl94bWl0X2NvbXBsZXRlKHN0YXR1cykpXG4gMzA4Olx0XHRcdFx0XHRcdGJyZWFrO1xuIDMwOTpcdFxuIDMxMDpcdFx0XHRcdH1cbiAzMTE6XHRcbiAzMTI6XHRcdFx0XHQvKiB0aWNrbGUgZGV2aWNlIG1heWJlIHRoZXJlIGlzIHNvbWUgY2xlYW51cCAqL1xuIDMxMzpcdFx0XHRcdG5ldHBvbGxfcG9sbF9kZXYobnAtXHUwMDNlZGV2KTtcbiAzMTQ6XHRcbiAzMTU6XHRcdFx0XHR1ZGVsYXkoVVNFQ19QRVJfUE9MTCk7XG4gMzE2Olx0XHRcdH1cbiAzMTc6XHRcbiAzMTg6XHRcdFx0V0FSTl9PTkNFKCFpcnFzX2Rpc2FibGVkKCksXG4gMzE5Olx0XHRcdFx0XCYjMzQ7bmV0cG9sbF9zZW5kX3NrYl9vbl9kZXYoKTogJXMgZW5hYmxlZCBpbnRlcnJ1cHRzIGluIHBvbGwgKCVwUylcXG5cJiMzNDssXG4gMzIwOlx0XHRcdFx0ZGV2LVx1MDAzZW5hbWUsIGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zdGFydF94bWl0KTtcbiAzMjE6XHRcbiAzMjI6XHRcdH1cbiAzMjM6XHRcbiAzMjQ6XHRcdGlmICghZGV2X3htaXRfY29tcGxldGUoc3RhdHVzKSkge1xuIDMyNTpcdFx0XHRpZiAoc2tiX3F1ZXVlX2xlbihcdTAwMjZucGluZm8tXHUwMDNldHhxKSBcdTAwM2U9IE5FVFBPTExfVFhRX01BWCkge1xuIDMyNjpcdFx0XHRcdGRldl9rZnJlZV9za2JfaXJxKHNrYik7XG4gMzI3Olx0XHRcdFx0Z290byBvdXQ7XG4gMzI4Olx0XHRcdH1cbiAzMjk6XHRcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2bnBpbmZvLVx1MDAzZXR4cSwgc2tiKTtcbiAzMzA6XHRcdFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNm5waW5mby1cdTAwM2V0eF93b3JrLDApO1xuIDMzMTpcdFx0fVxuIDMzMjpcdFx0cmV0ID0gTkVUREVWX1RYX09LO1xuIDMzMzpcdG91dDpcbiAzMzQ6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDMzNTpcdFx0cmV0dXJuIHJldDtcbiAzMzY6XHR9XG4gMzM3Olx0XG4gMzM4Olx0bmV0ZGV2X3R4X3QgbmV0cG9sbF9zZW5kX3NrYihzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IpXG4gMzM5Olx0e1xuIDM0MDpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiAzNDE6XHRcdG5ldGRldl90eF90IHJldDtcbiAzNDI6XHRcbiAzNDM6XHRcdGlmICh1bmxpa2VseSghbnApKSB7XG4gMzQ0Olx0XHRcdGRldl9rZnJlZV9za2JfaXJxKHNrYik7XG4gMzQ1Olx0XHRcdHJldCA9IE5FVF9YTUlUX0RST1A7XG4gMzQ2Olx0XHR9IGVsc2Uge1xuIDM0NzpcdFx0XHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4gMzQ4Olx0XHRcdHJldCA9IF9fbmV0cG9sbF9zZW5kX3NrYihucCwgc2tiKTtcbiAzNDk6XHRcdFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA0OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NDkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOgoKKipUcmFjaW5nIHRoZSBOZXR3b3JrIFBvbGwgU2VuZCBQYXRoKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGNhbGwgY2hhaW4gZm9yIGBfX25ldHBvbGxfc2VuZF9za2JgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBzZWUgd2hlcmUgaXQmIzM5O3MgYmVpbmcgY2FsbGVkIGZyb20uIEkga25vdyB0aGF0IGBuZXRwb2xsX3NlbmRfc2tiYCB1bHRpbWF0ZWx5IGNhbGxzIGl0LCBidXQgSSBuZWVkIHRvIHNlZSB3aGF0JiMzOTtzICpjYWxsaW5nKiBgbmV0cG9sbF9zZW5kX3NrYmAuIFNvLCBJJiMzOTtsbCBxdWlja2x5IHVzZSBgZ3JlcGAgdG8gaHVudCBkb3duIHRoZSByZWZlcmVuY2VzIG9yIGFueSBjYWxsZXJzIGluIHRoZSBgbmV0L2NvcmUvbmV0cG9sbC5jYCBmaWxlIGl0c2VsZi4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgdG9wIGxldmVsIGVudHJ5IHBvaW50IG9yIGZ1bmN0aW9uKHMpIHRoYXQgdHJpZ2dlcnMgdGhpcyBjcml0aWNhbCBwaWVjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRwb2xsX3NlbmRfc2tiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9Mjk3PW5ldGRldl90eF90IGJvbmRfZGV2X3F1ZXVlX3htaXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0zMDYtXHRpZiAodW5saWtlbHkobmV0cG9sbF90eF9ydW5uaW5nKGJvbmQtXHUwMDNlZGV2KSkpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjMwNzpcdFx0cmV0dXJuIGJvbmRfbmV0cG9sbF9zZW5kX3NrYihib25kX2dldF9zbGF2ZV9ieV9kZXYoYm9uZCwgc2xhdmVfZGV2KSwgc2tiKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzA4LVxuLS1cbmRyaXZlcnMvbmV0L21hY3ZsYW4uYz01NDk9c3RhdGljIGludCBtYWN2bGFuX3F1ZXVlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9tYWN2bGFuLmMtNTc4LVxuZHJpdmVycy9uZXQvbWFjdmxhbi5jOjU3OTpzdGF0aWMgaW5saW5lIG5ldGRldl90eF90IG1hY3ZsYW5fbmV0cG9sbF9zZW5kX3NrYihzdHJ1Y3QgbWFjdmxhbl9kZXYgKnZsYW4sIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25ldC9tYWN2bGFuLmMtNTgwLXtcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy01ODEtI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXG5kcml2ZXJzL25ldC9tYWN2bGFuLmM6NTgyOlx0cmV0dXJuIG5ldHBvbGxfc2VuZF9za2Iodmxhbi1cdTAwM2VuZXRwb2xsLCBza2IpO1xuZHJpdmVycy9uZXQvbWFjdmxhbi5jLTU4My0jZWxzZVxuLS1cbmRyaXZlcnMvbmV0L21hY3ZsYW4uYz01ODk9c3RhdGljIG5ldGRldl90eF90IG1hY3ZsYW5fc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy01OTYtXHRpZiAodW5saWtlbHkobmV0cG9sbF90eF9ydW5uaW5nKGRldikpKVxuZHJpdmVycy9uZXQvbWFjdmxhbi5jOjU5NzpcdFx0cmV0dXJuIG1hY3ZsYW5fbmV0cG9sbF9zZW5kX3NrYih2bGFuLCBza2IpO1xuZHJpdmVycy9uZXQvbWFjdmxhbi5jLTU5OC1cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjE3ND1zdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjA3LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMDg6XHRyZXR1cm4gKGludCluZXRwb2xsX3NlbmRfc2tiKG5wLCBza2IpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMDktfVxuLS1cbmluY2x1ZGUvbGludXgvaWZfdGVhbS5oPTk5PXN0YXRpYyBpbmxpbmUgYm9vbCB0ZWFtX3BvcnRfZGV2X3R4YWJsZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqcG9ydF9kZXYpXG4tLVxuaW5jbHVkZS9saW51eC9pZl90ZWFtLmgtMTEyLSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxuaW5jbHVkZS9saW51eC9pZl90ZWFtLmg6MTEzOnN0YXRpYyBpbmxpbmUgdm9pZCB0ZWFtX25ldHBvbGxfc2VuZF9za2Ioc3RydWN0IHRlYW1fcG9ydCAqcG9ydCxcbmluY2x1ZGUvbGludXgvaWZfdGVhbS5oLTExNC1cdFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpXG5pbmNsdWRlL2xpbnV4L2lmX3RlYW0uaC0xMTUte1xuaW5jbHVkZS9saW51eC9pZl90ZWFtLmg6MTE2Olx0bmV0cG9sbF9zZW5kX3NrYihwb3J0LVx1MDAzZW5wLCBza2IpO1xuaW5jbHVkZS9saW51eC9pZl90ZWFtLmgtMTE3LX1cbmluY2x1ZGUvbGludXgvaWZfdGVhbS5oLTExOC0jZWxzZVxuaW5jbHVkZS9saW51eC9pZl90ZWFtLmg6MTE5OnN0YXRpYyBpbmxpbmUgdm9pZCB0ZWFtX25ldHBvbGxfc2VuZF9za2Ioc3RydWN0IHRlYW1fcG9ydCAqcG9ydCxcbmluY2x1ZGUvbGludXgvaWZfdGVhbS5oLTEyMC1cdFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuaW5jbHVkZS9saW51eC9pZl90ZWFtLmg9MjM3PXN0YXRpYyBpbmxpbmUgaW50IHRlYW1fZGV2X3F1ZXVlX3htaXQoc3RydWN0IHRlYW0gKnRlYW0sIHN0cnVjdCB0ZWFtX3BvcnQgKnBvcnQsXG4tLVxuaW5jbHVkZS9saW51eC9pZl90ZWFtLmgtMjQ1LVx0aWYgKHVubGlrZWx5KG5ldHBvbGxfdHhfcnVubmluZyhuZXRkZXZfZnJvbV9wcml2KHRlYW0pKSkpIHtcbmluY2x1ZGUvbGludXgvaWZfdGVhbS5oOjI0NjpcdFx0dGVhbV9uZXRwb2xsX3NlbmRfc2tiKHBvcnQsIHNrYik7XG5pbmNsdWRlL2xpbnV4L2lmX3RlYW0uaC0yNDctXHRcdHJldHVybiAwO1xuLS1cbmluY2x1ZGUvbGludXgvbmV0cG9sbC5oPTY4PXZvaWQgZG9fbmV0cG9sbF9jbGVhbnVwKHN0cnVjdCBuZXRwb2xsICpucCk7XG5pbmNsdWRlL2xpbnV4L25ldHBvbGwuaDo2OTpuZXRkZXZfdHhfdCBuZXRwb2xsX3NlbmRfc2tiKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5pbmNsdWRlL2xpbnV4L25ldHBvbGwuaC03MC12b2lkIG5ldHBvbGxfemFwX2NvbXBsZXRpb25fcXVldWUodm9pZCk7XG4tLVxuaW5jbHVkZS9uZXQvYm9uZGluZy5oPTU0OD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc2xhdmVfbGFzdF90eChzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxuLS1cbmluY2x1ZGUvbmV0L2JvbmRpbmcuaC01NTMtI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXG5pbmNsdWRlL25ldC9ib25kaW5nLmg6NTU0OnN0YXRpYyBpbmxpbmUgbmV0ZGV2X3R4X3QgYm9uZF9uZXRwb2xsX3NlbmRfc2tiKGNvbnN0IHN0cnVjdCBzbGF2ZSAqc2xhdmUsXG5pbmNsdWRlL25ldC9ib25kaW5nLmgtNTU1LVx0XHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmluY2x1ZGUvbmV0L2JvbmRpbmcuaC01NTYte1xuaW5jbHVkZS9uZXQvYm9uZGluZy5oOjU1NzpcdHJldHVybiBuZXRwb2xsX3NlbmRfc2tiKHNsYXZlLVx1MDAzZW5wLCBza2IpO1xuaW5jbHVkZS9uZXQvYm9uZGluZy5oLTU1OC19XG5pbmNsdWRlL25ldC9ib25kaW5nLmgtNTU5LSNlbHNlXG5pbmNsdWRlL25ldC9ib25kaW5nLmg6NTYwOnN0YXRpYyBpbmxpbmUgbmV0ZGV2X3R4X3QgYm9uZF9uZXRwb2xsX3NlbmRfc2tiKGNvbnN0IHN0cnVjdCBzbGF2ZSAqc2xhdmUsXG5pbmNsdWRlL25ldC9ib25kaW5nLmgtNTYxLVx0XHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvODAyMXEvdmxhbl9kZXYuYz00Nj1zdGF0aWMgaW50IHZsYW5fZGV2X2hhcmRfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtODktXG5uZXQvODAyMXEvdmxhbl9kZXYuYzo5MDpzdGF0aWMgaW5saW5lIG5ldGRldl90eF90IHZsYW5fbmV0cG9sbF9zZW5kX3NrYihzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmxhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC84MDIxcS92bGFuX2Rldi5jLTkxLXtcbm5ldC84MDIxcS92bGFuX2Rldi5jLTkyLSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxubmV0LzgwMjFxL3ZsYW5fZGV2LmM6OTM6XHRyZXR1cm4gbmV0cG9sbF9zZW5kX3NrYih2bGFuLVx1MDAzZW5ldHBvbGwsIHNrYik7XG5uZXQvODAyMXEvdmxhbl9kZXYuYy05NC0jZWxzZVxuLS1cbm5ldC84MDIxcS92bGFuX2Rldi5jPTEwMD1zdGF0aWMgbmV0ZGV2X3R4X3Qgdmxhbl9kZXZfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtMTIzLVx0aWYgKHVubGlrZWx5KG5ldHBvbGxfdHhfcnVubmluZyhkZXYpKSlcbm5ldC84MDIxcS92bGFuX2Rldi5jOjEyNDpcdFx0cmV0dXJuIHZsYW5fbmV0cG9sbF9zZW5kX3NrYih2bGFuLCBza2IpO1xubmV0LzgwMjFxL3ZsYW5fZGV2LmMtMTI1LVxuLS1cbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jPTczPXN0YXRpYyB2b2lkIF9fYnJfZm9yd2FyZChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICp0byxcbi0tXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0xMDYtXHRcdFx0ZWxzZVxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmM6MTA3Olx0XHRcdFx0YnJfbmV0cG9sbF9zZW5kX3NrYih0bywgc2tiKTtcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jLTEwOC1cdFx0XHRyZXR1cm47XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9ODE0PW5ldGRldl90eF90IGJyX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtODE1LSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6ODE2OnN0YXRpYyBpbmxpbmUgdm9pZCBicl9uZXRwb2xsX3NlbmRfc2tiKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC04MTctXHRcdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTgxOC17XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo4MTk6XHRuZXRwb2xsX3NlbmRfc2tiKHAtXHUwMDNlbnAsIHNrYik7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC04MjAtfVxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTgyMz12b2lkIGJyX25ldHBvbGxfZGlzYWJsZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTgyNC0jZWxzZVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6ODI1OnN0YXRpYyBpbmxpbmUgdm9pZCBicl9uZXRwb2xsX3NlbmRfc2tiKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC04MjYtXHRcdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9uZXRwb2xsLmM9MjU4PXN0YXRpYyBpbnQgbmV0cG9sbF9vd25lcl9hY3RpdmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9uZXRwb2xsLmMtMjY5LS8qIGNhbGwgd2l0aCBJUlEgZGlzYWJsZWQgKi9cbm5ldC9jb3JlL25ldHBvbGwuYzoyNzA6c3RhdGljIG5ldGRldl90eF90IF9fbmV0cG9sbF9zZW5kX3NrYihzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvY29yZS9uZXRwb2xsLmMtMjcxLXtcbi0tXG5uZXQvY29yZS9uZXRwb2xsLmMtMzE4LVx0XHRXQVJOX09OQ0UoIWlycXNfZGlzYWJsZWQoKSxcbm5ldC9jb3JlL25ldHBvbGwuYzozMTk6XHRcdFx0XCYjMzQ7bmV0cG9sbF9zZW5kX3NrYl9vbl9kZXYoKTogJXMgZW5hYmxlZCBpbnRlcnJ1cHRzIGluIHBvbGwgKCVwUylcXG5cJiMzNDssXG5uZXQvY29yZS9uZXRwb2xsLmMtMzIwLVx0XHRcdGRldi1cdTAwM2VuYW1lLCBkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fc3RhcnRfeG1pdCk7XG4tLVxubmV0L2NvcmUvbmV0cG9sbC5jLTMzNy1cbm5ldC9jb3JlL25ldHBvbGwuYzozMzg6bmV0ZGV2X3R4X3QgbmV0cG9sbF9zZW5kX3NrYihzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvY29yZS9uZXRwb2xsLmMtMzM5LXtcbi0tXG5uZXQvY29yZS9uZXRwb2xsLmMtMzQ3LVx0XHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG5uZXQvY29yZS9uZXRwb2xsLmM6MzQ4Olx0XHRyZXQgPSBfX25ldHBvbGxfc2VuZF9za2IobnAsIHNrYik7XG5uZXQvY29yZS9uZXRwb2xsLmMtMzQ5LVx0XHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4tLVxubmV0L2NvcmUvbmV0cG9sbC5jLTM1Mi19XG5uZXQvY29yZS9uZXRwb2xsLmM6MzUzOkVYUE9SVF9TWU1CT0wobmV0cG9sbF9zZW5kX3NrYik7XG5uZXQvY29yZS9uZXRwb2xsLmMtMzU0LVxuLS1cbm5ldC9kc2EvdXNlci5jPTgyMD1zdGF0aWMgaW50IGRzYV91c2VyX3BvcnRfb2JqX2RlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB2b2lkICpjdHgsXG4tLVxubmV0L2RzYS91c2VyLmMtODY4LVxubmV0L2RzYS91c2VyLmM6ODY5OnN0YXRpYyBuZXRkZXZfdHhfdCBkc2FfdXNlcl9uZXRwb2xsX3NlbmRfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvZHNhL3VzZXIuYy04NzAtXHRcdFx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvZHNhL3VzZXIuYy04NzQtXG5uZXQvZHNhL3VzZXIuYzo4NzU6XHRyZXR1cm4gbmV0cG9sbF9zZW5kX3NrYihwLVx1MDAzZW5ldHBvbGwsIHNrYik7XG5uZXQvZHNhL3VzZXIuYy04NzYtI2Vsc2Vcbi0tXG5uZXQvZHNhL3VzZXIuYz04OTY9bmV0ZGV2X3R4X3QgZHNhX2VucXVldWVfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2RzYS91c2VyLmMtOTAxLVx0aWYgKHVubGlrZWx5KG5ldHBvbGxfdHhfcnVubmluZyhkZXYpKSlcbm5ldC9kc2EvdXNlci5jOjkwMjpcdFx0cmV0dXJuIGRzYV91c2VyX25ldHBvbGxfc2VuZF9za2IoZGV2LCBza2IpO1xubmV0L2RzYS91c2VyLmMtOTAzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA0OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2MjUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyB0aGUgTmV0cG9sbCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIGBuZXRwb2xsLmNgIHJlc2lkZXMgd2l0aGluIGBuZXQvY29yZS9uZXRwb2xsLmNgLiBSaWdodC4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBjb25maWd1cmF0aW9ucyBhY3R1YWxseSAqZW5hYmxlKiB0aGF0IHBhcnRpY3VsYXIgY29tcG9uZW50LiBXaGVyZSYjMzk7cyB0aGUgcmlnaHQgcGxhY2UgdG8gbG9vayBmb3IgdGhhdD8gT2YgY291cnNlLCB0aGUgYE1ha2VmaWxlYCBpbiB0aGUgc2FtZSBkaXJlY3RvcnksIGBuZXQvY29yZS9NYWtlZmlsZWAsIGlzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBUaGF0IHNob3VsZCBoYXZlIHRoZSBuZWNlc3NhcnkgYnVpbGQgbG9naWMgYW5kIGNvbmRpdGlvbmFsIGluY2x1c2lvbiBydWxlcy4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgYW5kIHNlZSB3aGF0IGZsYWdzIG9yIGRlcGVuZGVuY2llcyBhcmUgaW4gcGxheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRwb2xsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGU9Mjc9b2JqLSQoQ09ORklHX05FVF9QS1RHRU4pICYjNDM7PSBwa3RnZW4ub1xubmV0L2NvcmUvTWFrZWZpbGU6Mjg6b2JqLSQoQ09ORklHX05FVFBPTEwpICYjNDM7PSBuZXRwb2xsLm9cbm5ldC9jb3JlL01ha2VmaWxlLTI5LW9iai0kKENPTkZJR19GSUJfUlVMRVMpICYjNDM7PSBmaWJfcnVsZXMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA0OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5MTMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgTkVUUE9MTCBhbmQgTkVUX1BPTExfQ09OVFJPTExFUiBLY29uZmlnIERlZmluaXRpb25zKioKCk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBgTkVUUE9MTGAgYW5kIGBORVRfUE9MTF9DT05UUk9MTEVSYCB3aXRoaW4gdGhlIEtjb25maWcgc3lzdGVtLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgcmVsZXZhbnQgZGVmaW5pdGlvbnMg4oCTIHByb2JhYmx5IGBuZXQvY29yZS9LY29uZmlnYCBvciBzaW1pbGFyLCBkZXBlbmRpbmcgb24gdGhlIGtlcm5lbCB2ZXJzaW9uIEkmIzM5O20gd29ya2luZyB3aXRoIOKAkyB0byBnZXQgdGhlIGV4YWN0IGRldGFpbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGVzZSBvcHRpb25zIHJlbGF0ZSB0byBlbmFibGluZyBvciBkaXNhYmxpbmcgbmV0d29yayBwb2xsaW5nIGZlYXR1cmVzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gaW50ZXJlc3RlZCBpbjoKCiogICAqKlRoZSBDb25maWcgRGVwZW5kZW5jaWVzOioqIFdoYXQgb3RoZXIgS2NvbmZpZyBzeW1ib2xzIGRvZXMgYE5FVFBPTExgIGRlcGVuZCBvbj8gSXMgaXQgdGllZCB0byBzcGVjaWZpYyBkcml2ZXJzIG9yIGZlYXR1cmVzPyBEb2VzIGl0IHJlcXVpcmUgdGhpbmdzIGxpa2UgaW50ZXJydXB0IG1hbmFnZW1lbnQgb3IgRE1BIGNhcGFiaWxpdGllcz8gV2hhdCBhYm91dCBgTkVUX1BPTExfQ09OVFJPTExFUmA/IERvZXMgdGhlIGV4aXN0ZW5jZSBvZiBhIHBvbGwgY29udHJvbGxlciBpbXBseSBhbnkgc3BlY2lmaWMgY2FwYWJpbGl0aWVzIGluIHRoZSBzZWxlY3RlZCBkcml2ZXI/CiogICAqKkltcGxpZWQgRnVuY3Rpb25hbGl0eToqKiBXaGF0IGlzIHRoZSBpbnRlbnQgb2YgZWFjaCBkZWZpbmU/IEhvdyBpcyBgTkVUUE9MTGAgKnVzZWQqIGluIHRoZSBrZXJuZWw/IERvZXMgaXQgYWxsb3cgc3BlY2lmaWMgZmVhdHVyZXMgdG8gYmUgb3B0aW9uYWxseSBpbXBsZW1lbnRlZD8gSG93IGRvZXMgYSBgTkVUX1BPTExfQ09OVFJPTExFUmAgZml0IGludG8gdGhlIGdyYW5kZXIgc2NoZW1lIG9mIGFuIEV0aGVybmV0IGRyaXZlcj8gSXMgaXQgdXNlZCB0byBkaXNhYmxlIGludGVycnVwdHM/CiogICAqKkludGVyYWN0aW9uIHdpdGggRHJpdmVyczoqKiBIb3cgYXJlIG5ldHdvcmsgZHJpdmVycyBpbXBhY3RlZCBieSB0aGVzZSBjb25maWd1cmF0aW9ucz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBmb3IgZHJpdmVycyB0aGF0IGltcGxlbWVudCBuZXR3b3JrIHBvbGxpbmcuIEFyZSBjZXJ0YWluIGRyaXZlcnMgKnJlcXVpcmVkKiB0byBpbXBsZW1lbnQgc3BlY2lmaWMgYG5ldHBvbGxgIEFQSXMgd2hlbiBgTkVUUE9MTGAgaXMgc2V0PyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBwb3dlciBtYW5hZ2VtZW50IGFuZCBsaW5rIHN0YXR1cyBjaGFuZ2VzPwoqICAgKipCb290IFRpbWUgQ29uZmlndXJhdGlvbjoqKiBJIG5lZWQgdG8gY2xhcmlmeSB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgYXJlIGZvciBkcml2ZXJzIGFuZCBuZXR3b3JraW5nIGF0IGJvb3QgdGltZS4KKiAgICoqUG90ZW50aWFsIGNvbmZsaWN0czoqKiBIb3cgZG9lcyB0aGUgc2V0dGluZyBvZiB0aGVzZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIGFmZmVjdCBwb3NzaWJsZSBjb25mbGljdHMgYW5kIHJ1bnRpbWUgYmVoYXZpb3I/CgpVbHRpbWF0ZWx5LCB0aGUgZ29hbCBpcyB0byBmdWxseSBncmFzcCB0aGUgY29udHJvbCBmbG93IHRoZXNlIG9wdGlvbnMgcmVwcmVzZW50IHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdGFjay4gVGhpcyB3aWxsIGhlbHAgbWUgZGlhZ25vc2UgaXNzdWVzLCBvcHRpbWl6ZSBwb2xsaW5nIGJlaGF2aW9yLCBvciB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmFiaWxpdHkgb2YgY2VydGFpbiBmZWF0dXJlcyBiYXNlZCBvbiBteSBjdXJyZW50IGludmVzdGlnYXRpb24uIFNvLCBkaWdnaW5nIGludG8gdGhlIEtjb25maWcgZGVmaW5pdGlvbnMgaXMgdGhlIGNyaXRpY2FsIGZpcnN0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA0OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRQT0xMXFxiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9MzU1PWNvbmZpZyBORVRDT05TT0xFX1BSRVBFTkRfUkVMRUFTRVxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMzY2LVxuZHJpdmVycy9uZXQvS2NvbmZpZzozNjc6Y29uZmlnIE5FVFBPTExcbmRyaXZlcnMvbmV0L0tjb25maWctMzY4LVx0ZGVmX2Jvb2wgTkVUQ09OU09MRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDg0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgdGhlIE5ldHdvcmsgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBCYXNlZCBvbiB3aGF0IEkmIzM5O20gbG9va2luZyBhdCwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhcm91bmQgbGluZSAzNjcuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgbWVhdCBvZiBhIHBhcnRpY3VsYXIgZHJpdmVyIGNvbmZpZ3VyYXRpb24sIG9yIGF0IGxlYXN0IGEgcmVsYXRlZCBzZWN0aW9uLCBiZWdpbnMuIEhvcGVmdWxseSwgaXQmIzM5O2xsIGdpdmUgbWUgc29tZSBrZXkgaW5zaWdodHMgaW50byBob3cgdGhpcyBwYXJ0aWN1bGFyIG5ldHdvcmsgZHJpdmVyIGlzIGNvbmZpZ3VyZWQsIGFueSBkZXBlbmRlbmNpZXMsIGFuZCB0aGUgYXZhaWxhYmxlIG9wdGlvbnMuIFRpbWUgdG8gZ2V0IHRvIHRoZSBkZXRhaWxzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM0MDpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBhYmlsaXR5IHRvIGR5bmFtaWNhbGx5IHJlY29uZmlndXJlIHRhcmdldFxuIDM0MTpcdFx0ICBwYXJhbWV0ZXJzIChpbnRlcmZhY2UsIElQIGFkZHJlc3NlcywgcG9ydCBudW1iZXJzLCBNQUMgYWRkcmVzc2VzKVxuIDM0MjpcdFx0ICBhdCBydW50aW1lIHRocm91Z2ggYSB1c2Vyc3BhY2UgaW50ZXJmYWNlIGV4cG9ydGVkIHVzaW5nIGNvbmZpZ2ZzLlxuIDM0MzpcdFx0ICBTZWUgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcdTAwM2UgZm9yIGRldGFpbHMuXG4gMzQ0Olx0XG4gMzQ1Olx0Y29uZmlnIE5FVENPTlNPTEVfRVhURU5ERURfTE9HXG4gMzQ2Olx0XHRib29sIFwmIzM0O1NldCBrZXJuZWwgZXh0ZW5kZWQgbWVzc2FnZSBieSBkZWZhdWx0XCYjMzQ7XG4gMzQ3Olx0XHRkZXBlbmRzIG9uIE5FVENPTlNPTEVcbiAzNDg6XHRcdGRlZmF1bHQgblxuIDM0OTpcdFx0aGVscFxuIDM1MDpcdFx0ICBTZXQgZXh0ZW5kZWQgbG9nIHN1cHBvcnQgZm9yIG5ldGNvbnNvbGUgbWVzc2FnZS4gSWYgdGhpcyBvcHRpb24gaXNcbiAzNTE6XHRcdCAgc2V0LCBsb2cgbWVzc2FnZXMgYXJlIHRyYW5zbWl0dGVkIHdpdGggZXh0ZW5kZWQgbWV0YWRhdGEgaGVhZGVyIGluIGFcbiAzNTI6XHRcdCAgZm9ybWF0IHNpbWlsYXIgdG8gL2Rldi9rbXNnLiAgU2VlXG4gMzUzOlx0XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XHUwMDNlIGZvciBkZXRhaWxzLlxuIDM1NDpcdFxuIDM1NTpcdGNvbmZpZyBORVRDT05TT0xFX1BSRVBFTkRfUkVMRUFTRVxuIDM1NjpcdFx0Ym9vbCBcJiMzNDtQcmVwZW5kIGtlcm5lbCByZWxlYXNlIHZlcnNpb24gaW4gdGhlIG1lc3NhZ2UgYnkgZGVmYXVsdFwmIzM0O1xuIDM1NzpcdFx0ZGVwZW5kcyBvbiBORVRDT05TT0xFX0VYVEVOREVEX0xPR1xuIDM1ODpcdFx0ZGVmYXVsdCBuXG4gMzU5Olx0XHRoZWxwXG4gMzYwOlx0XHQgIFNldCBrZXJuZWwgcmVsZWFzZSB0byBiZSBwcmVwZW5kZWQgdG8gZWFjaCBuZXRjb25zb2xlIG1lc3NhZ2UgYnlcbiAzNjE6XHRcdCAgZGVmYXVsdC4gSWYgdGhpcyBvcHRpb24gaXMgc2V0LCB0aGUga2VybmVsIHJlbGVhc2UgaXMgcHJlcGVuZGVkIGludG9cbiAzNjI6XHRcdCAgdGhlIGZpcnN0IGZpZWxkIG9mIGV2ZXJ5IG5ldGNvbnNvbGUgbWVzc2FnZSwgc28sIHRoZSBuZXRjb25zb2xlXG4gMzYzOlx0XHQgIHNlcnZlci9wZWVyIGNhbiBlYXNpbHkgaWRlbnRpZnkgd2hhdCBrZXJuZWwgcmVsZWFzZSBpcyBsb2dnaW5nIGVhY2hcbiAzNjQ6XHRcdCAgbWVzc2FnZS4gIFNlZSBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdFx1MDAzZSBmb3JcbiAzNjU6XHRcdCAgZGV0YWlscy5cbiAzNjY6XHRcbiAzNjc6XHRjb25maWcgTkVUUE9MTFxuIDM2ODpcdFx0ZGVmX2Jvb2wgTkVUQ09OU09MRVxuIDM2OTpcdFxuIDM3MDpcdGNvbmZpZyBORVRfUE9MTF9DT05UUk9MTEVSXG4gMzcxOlx0XHRkZWZfYm9vbCBORVRQT0xMXG4gMzcyOlx0XG4gMzczOlx0Y29uZmlnIE5UQl9ORVRERVZcbiAzNzQ6XHRcdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgRXRoZXJuZXQgb3ZlciBOVEIgVHJhbnNwb3J0XCYjMzQ7XG4gMzc1Olx0XHRkZXBlbmRzIG9uIE5UQl9UUkFOU1BPUlRcbiAzNzY6XHRcbiAzNzc6XHRjb25maWcgUklPTkVUXG4gMzc4Olx0XHR0cmlzdGF0ZSBcJiMzNDtSYXBpZElPIEV0aGVybmV0IG92ZXIgbWVzc2FnaW5nIGRyaXZlciBzdXBwb3J0XCYjMzQ7XG4gMzc5Olx0XHRkZXBlbmRzIG9uIFJBUElESU9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDQ6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI3NQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uIERlcGVuZGVuY3kqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBjb25maWcgTkVUUE9MTGAgc2V0dGluZywgYW5kIGl0JiMzOTtzIGRlZmluZWQgYXMgYSBib29sZWFuLCBjb250cm9sbGVkIGJ5IGBORVRDT05TT0xFYC4gQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlLiBXaGF0IGRvZXMgYE5FVENPTlNPTEVgIGRlcGVuZCBvbj8gSXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aGUgYGRyaXZlcnMvbmV0L0tjb25maWdgIGZpbGUgYW5kIGNoZWNrIHRoZSBkZWZpbml0aW9uIGZvciBgTkVUQ09OU09MRWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMsIGltcGxpY2F0aW9ucywgYW5kIGFsbCB0aGF0IGdvb2Qgc3R1ZmYgb2YgYE5FVENPTlNPTEVgLiBHb3QgdG8ga25vdyB3aGF0JiMzOTtzIGxpbmtlZCBoZXJlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUQ09OU09MRVxcYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTMxOD1jb25maWcgTUFDU0VDXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMjYtXG5kcml2ZXJzL25ldC9LY29uZmlnOjMyNzpjb25maWcgTkVUQ09OU09MRVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMjgtXHR0cmlzdGF0ZSBcJiMzNDtOZXR3b3JrIGNvbnNvbGUgbG9nZ2luZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA0OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1NDMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBwcm92aWRlZCB0ZXh0OgoKKipBbmFseXppbmcgYGRyaXZlcnMvbmV0L0tjb25maWdgIFNlY3Rpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byBsaW5lcyAzMjUtMzQ1IG9mIGBkcml2ZXJzL25ldC9LY29uZmlnYC4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBkZWZpbmUgc29tZSBuZXR3b3JrIGRyaXZlciBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHByb2JhYmx5IHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBoYXJkd2FyZSBvciBzb2Z0d2FyZSBmZWF0dXJlLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUga2V5IGRlcGVuZGVuY2llcyBhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGVhY2ggb3B0aW9uLiBBcmUgdGhlc2UgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycz8gQXJlIHRoZXkgcmVsYXRlZCB0byBwcm90b2NvbCBzdXBwb3J0LCBvciBwZXJoYXBzIG9mZmxvYWQgY2FwYWJpbGl0aWVzPyBUaGUgc3RydWN0dXJlIG9mIEtjb25maWcgZmlsZXMgaXMgdXN1YWxseSBwcmV0dHkgcHJlZGljdGFibGUsIGJ1dCBjb250ZXh0IGlzIGFsd2F5cyBrZXkuIExldCBtZSBsb29rIGZvciBgY29uZmlnYCBrZXl3b3JkcywgZGVwZW5kZW5jaWVzIGV4cHJlc3NlZCB3aXRoIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzLCBhbmQgaGVscCB0ZXh0IHRoYXQgY2xhcmlmaWVzIHRoZSBwdXJwb3NlIG9mIGVhY2ggb3B0aW9uLiBJJiMzOTtsbCBtZW50YWxseSBub3RlIGFueSB1bnVzdWFsIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgd2FycmFudCBmdXJ0aGVyIGludmVzdGlnYXRpb24sIG1heWJlIGxvb2tpbmcgYXQgaG93IHRoZXNlIG9wdGlvbnMgaW50ZXJhY3Qgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgbmV0d29yayBzdGFjay4gSSYjMzk7bSBhbHNvIGxvb2tpbmcgZm9yIGFueSBkZWZhdWx0IHZhbHVlcywgdGhhdCBjYW4gcHJvdmlkZSBhIGhpbnQgYWJvdXQgdGhlIGRldmVsb3BlciYjMzk7cyB0eXBpY2FsIHVzZSBjYXNlLiBVbHRpbWF0ZWx5LCBJJiMzOTttIHRyeWluZyB0byBidWlsZCBhIHF1aWNrIG1lbnRhbCBtb2RlbCBvZiB3aGF0IHRoZXNlIGxpbmVzIGFyZSBjb25maWd1cmluZyBhbmQgaG93IGl0IGludGVncmF0ZXMgaW50byB0aGUgYnJvYWRlciBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA0OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzI1Olx0XHQgICBNQUNzZWMgaXMgYW4gZW5jcnlwdGlvbiBzdGFuZGFyZCBmb3IgRXRoZXJuZXQuXG4gMzI2Olx0XG4gMzI3Olx0Y29uZmlnIE5FVENPTlNPTEVcbiAzMjg6XHRcdHRyaXN0YXRlIFwmIzM0O05ldHdvcmsgY29uc29sZSBsb2dnaW5nIHN1cHBvcnRcJiMzNDtcbiAzMjk6XHRcdGRlcGVuZHMgb24gUFJJTlRLXG4gMzMwOlx0XHRoZWxwXG4gMzMxOlx0XHQgIElmIHlvdSB3YW50IHRvIGxvZyBrZXJuZWwgbWVzc2FnZXMgb3ZlciB0aGUgbmV0d29yaywgZW5hYmxlIHRoaXMuXG4gMzMyOlx0XHQgIFNlZSBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdFx1MDAzZSBmb3IgZGV0YWlscy5cbiAzMzM6XHRcbiAzMzQ6XHRjb25maWcgTkVUQ09OU09MRV9EWU5BTUlDXG4gMzM1Olx0XHRib29sIFwmIzM0O0R5bmFtaWMgcmVjb25maWd1cmF0aW9uIG9mIGxvZ2dpbmcgdGFyZ2V0c1wmIzM0O1xuIDMzNjpcdFx0ZGVwZW5kcyBvbiBORVRDT05TT0xFIFx1MDAyNlx1MDAyNiBTWVNGUyBcdTAwMjZcdTAwMjYgQ09ORklHRlNfRlMgXHUwMDI2XHUwMDI2IFxcXG4gMzM3Olx0XHRcdFx0IShORVRDT05TT0xFPXkgXHUwMDI2XHUwMDI2IENPTkZJR0ZTX0ZTPW0pXG4gMzM4Olx0XHRzZWxlY3QgUFJJTlRLX0VYRUNVVElPTl9DVFhcbiAzMzk6XHRcdGhlbHBcbiAzNDA6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgYWJpbGl0eSB0byBkeW5hbWljYWxseSByZWNvbmZpZ3VyZSB0YXJnZXRcbiAzNDE6XHRcdCAgcGFyYW1ldGVycyAoaW50ZXJmYWNlLCBJUCBhZGRyZXNzZXMsIHBvcnQgbnVtYmVycywgTUFDIGFkZHJlc3NlcylcbiAzNDI6XHRcdCAgYXQgcnVudGltZSB0aHJvdWdoIGEgdXNlcnNwYWNlIGludGVyZmFjZSBleHBvcnRlZCB1c2luZyBjb25maWdmcy5cbiAzNDM6XHRcdCAgU2VlIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XHUwMDNlIGZvciBkZXRhaWxzLlxuIDM0NDpcdFxuIDM0NTpcdGNvbmZpZyBORVRDT05TT0xFX0VYVEVOREVEX0xPR1xuIDM0NjpcdFx0Ym9vbCBcJiMzNDtTZXQga2VybmVsIGV4dGVuZGVkIG1lc3NhZ2UgYnkgZGVmYXVsdFwmIzM0O1xuIDM0NzpcdFx0ZGVwZW5kcyBvbiBORVRDT05TT0xFXG4gMzQ4Olx0XHRkZWZhdWx0IG5cbiAzNDk6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDQ6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyMjAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW52ZXN0aWdhdGlvbiBvZiBOZXRwb2xsIGFuZCBTeXprYWxsZXIgUmVhY2hhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgbmV0cG9sbGAgc2l0dWF0aW9uLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgaXQmIzM5O3MgdXNlZCwgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nLCBhbmQgaWYgaXQmIzM5O3MgZXZlbiByZW1vdGVseSBhY2Nlc3NpYmxlIHdpdGhpbiB0aGUgU3l6a2FsbGVyIHRlc3RpbmcgZW52aXJvbm1lbnQuIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciB1c2Vyc3BhY2UsIHRocm91Z2ggU3l6a2FsbGVyLCBjYW4gY29uZmlndXJlIG9yIHRyaWdnZXIgZWl0aGVyIGBuZXRjb25zb2xlYCBvciBgbmV0cG9sbGAuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgU3l6a2FsbGVyJiMzOTtzIGRvY3VtZW50YXRpb24gYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IGV4aXN0aW5nIGRlc2NyaXB0aW9ucyBvciBtZWNoYW5pc21zIGZvciB1c2VyLXNwYWNlIGNvbnRyb2wgb3ZlciBgbmV0Y29uc29sZWAuIEkgYWxzbyB3YW50IHRvIGV4cGxvcmUgd2hldGhlciBgbmV0Y29uc29sZWAgKG9yIGV2ZW4gYG5ldHBvbGxgKSBtaWdodCBiZSBjb25maWd1cmFibGUgdmlhIHN0YW5kYXJkIGludGVyZmFjZXMgbGlrZSBjb25maWdmcywgc3lzZnMsIG1vZHVsZSBwYXJhbWV0ZXJzLCBvciBkeW5hbWljIHJlY29uZmlndXJhdGlvbi4gUGVyaGFwcyBgbmV0cG9sbGAgY291bGQgYmUgaW5kaXJlY3RseSB1dGlsaXplZCB0aHJvdWdoIG5ldHdvcmtpbmcgZmVhdHVyZXMgc3VjaCBhcyBib25kaW5nLCBicmlkZ2luZywgb3IgbWFjdmxhbi4KCldhaXQgYSBtb21lbnQuIEJlZm9yZSBJIGdvIHRvbyBmYXIgZG93biB0aGF0IHBhdGgsIEkgc2hvdWxkIG1ha2Ugc3VyZSBJIGNvbXBsZXRlbHkgdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24gb2YgYG5ldHBvbGxgIGl0c2VsZi4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgbmV0L2NvcmUvbmV0cG9sbC5jYCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBucGluZm8tJmd0O3R4cWAgYW5kIHdoYXQgaXQgYWN0dWFsbHkgZG9lcy4gVGhhdCBzaG91bGQgcHJvdmlkZSBhIGNydWNpYWwgZm9vdGhvbGQgb24gdGhlIGRldGFpbHMuIEkgd2lsbCBuZWVkIHRvIGRlbHZlIGRlZXBlciBpbnRvIHRoZSBjb2RlIHRvIGVuc3VyZSBJIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHdvcmtpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL25ldHBvbGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0LypcbiAgIDM6XHQgKiBDb21tb24gZnJhbWV3b3JrIGZvciBsb3ctbGV2ZWwgbmV0d29yayBjb25zb2xlLCBkdW1wLCBhbmQgZGVidWdnZXIgY29kZVxuICAgNDpcdCAqXG4gICA1Olx0ICogU2VwIDggMjAwMyAgTWF0dCBNYWNrYWxsIFx1MDAzY21wbUBzZWxlbmljLmNvbVx1MDAzZVxuICAgNjpcdCAqXG4gICA3Olx0ICogYmFzZWQgb24gdGhlIG5ldGNvbnNvbGUgY29kZSBmcm9tOlxuICAgODpcdCAqXG4gICA5Olx0ICogQ29weXJpZ2h0IChDKSAyMDAxICBJbmdvIE1vbG5hciBcdTAwM2NtaW5nb0ByZWRoYXQuY29tXHUwMDNlXG4gIDEwOlx0ICogQ29weXJpZ2h0IChDKSAyMDAyICBSZWQgSGF0LCBJbmMuXG4gIDExOlx0ICovXG4gIDEyOlx0XG4gIDEzOlx0I2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSBcJiMzNDs6IFwmIzM0OyBmbXRcbiAgMTQ6XHRcbiAgMTU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGVwYXJhbS5oXHUwMDNlXG4gIDE2Olx0I2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAgMTc6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuICAxODpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcdTAwM2VcbiAgMTk6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICAyMDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2FycC5oXHUwMDNlXG4gIDIxOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvaW5ldGRldmljZS5oXHUwMDNlXG4gIDIyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvaW5ldC5oXHUwMDNlXG4gIDIzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvaW50ZXJydXB0LmhcdTAwM2VcbiAgMjQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRwb2xsLmhcdTAwM2VcbiAgMjU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG4gIDI2Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuICAyNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlLmhcdTAwM2VcbiAgMjg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuICAyOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICAzMDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG4gIDMxOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvaWZfdmxhbi5oXHUwMDNlXG4gIDMyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvdWRwLmhcdTAwM2VcbiAgMzM6XHQjaW5jbHVkZSBcdTAwM2NuZXQvdGNwLmhcdTAwM2VcbiAgMzQ6XHQjaW5jbHVkZSBcdTAwM2NuZXQvYWRkcmNvbmYuaFx1MDAzZVxuICAzNTpcdCNpbmNsdWRlIFx1MDAzY25ldC9uZGlzYy5oXHUwMDNlXG4gIDM2Olx0I2luY2x1ZGUgXHUwMDNjdHJhY2UvZXZlbnRzL25hcGkuaFx1MDAzZVxuICAzNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2tjb25maWcuaFx1MDAzZVxuICAzODpcdFxuICAzOTpcdCNkZWZpbmUgVVNFQ19QRVJfUE9MTFx0NTBcbiAgNDA6XHRcbiAgNDE6XHQvKlxuICA0MjpcdCAqIENhcCBvbiBza2JzIHBhcmtlZCBpbiBucGluZm8tXHUwMDNldHhxIHdoaWxlIHRoZSBkZXZpY2UgaXMgYnVzeS4gVGhlIHF1ZXVlXG4gIDQzOlx0ICogZXhpc3RzIHRvIHJpZGUgb3V0IGEgdHJhbnNpZW50IHN0YWxsOyBhIHByb2R1Y2VyIHRoYXQgb3V0cnVucyB0aGVcbiAgNDQ6XHQgKiBkZXZpY2UgZm9yIGxvbmdlciB0aGFuIHRoYXQgbXVzdCBsb3NlIHBhY2tldHMsIG5vdCBncm93IGl0IHdpdGhvdXRcbiAgNDU6XHQgKiBib3VuZC5cbiAgNDY6XHQgKi9cbiAgNDc6XHQjZGVmaW5lIE5FVFBPTExfVFhRX01BWFx0MTAyNFxuICA0ODpcdFxuICA0OTpcdC8qXG4gIDUwOlx0ICogY2Fycmllcl90aW1lb3V0IGlzIG5ldGNvbnNvbGUtc3BlY2lmaWMgYW5kIG9ubHkga2VwdCBoZXJlIHRvIHByZXNlcnZlIHRoZVxuICA1MTpcdCAqIG5ldHBvbGwuY2Fycmllcl90aW1lb3V0IG1vZHVsZS1wYXJhbWV0ZXIgQUJJLiBJdHMgdmFsdWUgaXMgZXhwb3NlZCB0b1xuICA1MjpcdCAqIG5ldGNvbnNvbGUgdGhyb3VnaCBuZXRwb2xsX2dldF9jYXJyaWVyX3RpbWVvdXQoKS5cbiAgNTM6XHQgKi9cbiAgNTQ6XHRzdGF0aWMgdW5zaWduZWQgaW50IGNhcnJpZXJfdGltZW91dCA9IDQ7XG4gIDU1Olx0bW9kdWxlX3BhcmFtKGNhcnJpZXJfdGltZW91dCwgdWludCwgMDY0NCk7XG4gIDU2Olx0XG4gIDU3Olx0dW5zaWduZWQgaW50IG5ldHBvbGxfZ2V0X2NhcnJpZXJfdGltZW91dCh2b2lkKVxuICA1ODpcdHtcbiAgNTk6XHRcdHJldHVybiBjYXJyaWVyX3RpbWVvdXQ7XG4gIDYwOlx0fVxuICA2MTpcdEVYUE9SVF9TWU1CT0xfR1BMKG5ldHBvbGxfZ2V0X2NhcnJpZXJfdGltZW91dCk7XG4gIDYyOlx0XG4gIDYzOlx0c3RhdGljIG5ldGRldl90eF90IG5ldHBvbGxfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuICA2NDpcdFx0XHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiAgNjU6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cSlcbiAgNjY6XHR7XG4gIDY3Olx0XHRuZXRkZXZfdHhfdCBzdGF0dXMgPSBORVRERVZfVFhfT0s7XG4gIDY4Olx0XHRuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcztcbiAgNjk6XHRcbiAgNzA6XHRcdGZlYXR1cmVzID0gbmV0aWZfc2tiX2ZlYXR1cmVzKHNrYik7XG4gIDcxOlx0XG4gIDcyOlx0XHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSBcdTAwMjZcdTAwMjZcbiAgNzM6XHRcdCAgICAhdmxhbl9od19vZmZsb2FkX2NhcGFibGUoZmVhdHVyZXMsIHNrYi1cdTAwM2V2bGFuX3Byb3RvKSkge1xuICA3NDpcdFx0XHRza2IgPSBfX3ZsYW5faHdhY2NlbF9wdXNoX2luc2lkZShza2IpO1xuICA3NTpcdFx0XHRpZiAodW5saWtlbHkoIXNrYikpIHtcbiAgNzY6XHRcdFx0XHQvKiBUaGlzIGlzIGFjdHVhbGx5IGEgcGFja2V0IGRyb3AsIGJ1dCB3ZVxuICA3NzpcdFx0XHRcdCAqIGRvbiYjMzk7dCB3YW50IHRoZSBjb2RlIHRoYXQgY2FsbHMgdGhpc1xuICA3ODpcdFx0XHRcdCAqIGZ1bmN0aW9uIHRvIHRyeSBhbmQgb3BlcmF0ZSBvbiBhIE5VTEwgc2tiLlxuICA3OTpcdFx0XHRcdCAqL1xuICA4MDpcdFx0XHRcdGdvdG8gb3V0O1xuICA4MTpcdFx0XHR9XG4gIDgyOlx0XHR9XG4gIDgzOlx0XG4gIDg0Olx0XHRzdGF0dXMgPSBuZXRkZXZfc3RhcnRfeG1pdChza2IsIGRldiwgdHhxLCBmYWxzZSk7XG4gIDg1Olx0XG4gIDg2Olx0b3V0OlxuICA4NzpcdFx0cmV0dXJuIHN0YXR1cztcbiAgODg6XHR9XG4gIDg5Olx0XG4gIDkwOlx0c3RhdGljIHZvaWQgcXVldWVfcHJvY2VzcyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gIDkxOlx0e1xuICA5MjpcdFx0c3RydWN0IG5ldHBvbGxfaW5mbyAqbnBpbmZvID1cbiAgOTM6XHRcdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXRwb2xsX2luZm8sIHR4X3dvcmsud29yayk7XG4gIDk0Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuICA5NTpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiAgOTY6XHRcbiAgOTc6XHRcdHdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoXHUwMDI2bnBpbmZvLVx1MDAzZXR4cSkpKSB7XG4gIDk4Olx0XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBza2ItXHUwMDNlZGV2O1xuICA5OTpcdFx0XHRzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7XG4gMTAwOlx0XHRcdHVuc2lnbmVkIGludCBxX2luZGV4O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjEzNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYG5ldHBvbGxgIGJ1c2luZXNzLiBBcyBhIHF1aWNrIHJlZnJlc2hlciwgSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzZXR1cCBhbmQgdGhlIHBhY2tldCBmbG93LiBJIHRoaW5rIHJlYWRpbmcgbGluZXMgMjYwIHRocm91Z2ggMzEwIG9mIGBuZXQvY29yZS9uZXRwb2xsLmNgIHNob3VsZCBnaXZlIG1lIGEgc29saWQgc3RhcnQgb24gdGhhdC4gSSYjMzk7bSBrZWVuIHRvIHNlZSBob3cgdGhleSYjMzk7dmUgaW1wbGVtZW50ZWQgaXQsIGNvbnNpZGVyaW5nIHRoZSBudWFuY2VzIG9mIGhpZ2gtcGVyZm9ybWFuY2UgbmV0d29ya2luZyBhbmQgdGhlIGtlcm5lbCYjMzk7cyBhcmNoaXRlY3R1cmUuIEkmIzM5O20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBjbGV2ZXIgb3B0aW1pemF0aW9ucyB0aGV5JiMzOTt2ZSBlbXBsb3llZC4gSXQgd2lsbCBiZSBpbnRlcmVzdGluZyB0byBzZWUgd2hhdCBraW5kIG9mIGRlc2lnbiBjaG9pY2VzIHdlcmUgbWFkZSBhbmQgaG93IHRoYXQgbWF5IGltcGFjdCBwZXJmb3JtYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDQ6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9uZXRwb2xsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI2MDpcdFx0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpO1xuIDI2MTpcdFxuIDI2MjpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UobmFwaSwgXHUwMDI2ZGV2LVx1MDAzZW5hcGlfbGlzdCwgZGV2X2xpc3QpIHtcbiAyNjM6XHRcdFx0aWYgKFJFQURfT05DRShuYXBpLVx1MDAzZXBvbGxfb3duZXIpID09IHNtcF9wcm9jZXNzb3JfaWQoKSlcbiAyNjQ6XHRcdFx0XHRyZXR1cm4gMTtcbiAyNjU6XHRcdH1cbiAyNjY6XHRcdHJldHVybiAwO1xuIDI2NzpcdH1cbiAyNjg6XHRcbiAyNjk6XHQvKiBjYWxsIHdpdGggSVJRIGRpc2FibGVkICovXG4gMjcwOlx0c3RhdGljIG5ldGRldl90eF90IF9fbmV0cG9sbF9zZW5kX3NrYihzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IpXG4gMjcxOlx0e1xuIDI3MjpcdFx0bmV0ZGV2X3R4X3Qgc3RhdHVzID0gTkVUREVWX1RYX0JVU1k7XG4gMjczOlx0XHRuZXRkZXZfdHhfdCByZXQgPSBORVRfWE1JVF9EUk9QO1xuIDI3NDpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbiAyNzU6XHRcdHVuc2lnbmVkIGxvbmcgdHJpZXM7XG4gMjc2Olx0XHQvKiBJdCBpcyB1cCB0byB0aGUgY2FsbGVyIHRvIGtlZXAgbnBpbmZvIGFsaXZlLiAqL1xuIDI3NzpcdFx0c3RydWN0IG5ldHBvbGxfaW5mbyAqbnBpbmZvO1xuIDI3ODpcdFxuIDI3OTpcdFx0bG9ja2RlcF9hc3NlcnRfaXJxc19kaXNhYmxlZCgpO1xuIDI4MDpcdFxuIDI4MTpcdFx0ZGV2ID0gbnAtXHUwMDNlZGV2O1xuIDI4MjpcdFx0LyogbnBpbmZvLVx1MDAzZXR4cSBiZWxvbmdzIHRvIG5wLVx1MDAzZWRldiwgc28gcmV0cmllcyBtdXN0IHN0YXkgYm91bmQgdG8gaXQuICovXG4gMjgzOlx0XHRza2ItXHUwMDNlZGV2ID0gZGV2O1xuIDI4NDpcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDI4NTpcdFx0bnBpbmZvID0gcmN1X2RlcmVmZXJlbmNlX2JoKGRldi1cdTAwM2VucGluZm8pO1xuIDI4NjpcdFxuIDI4NzpcdFx0aWYgKCFucGluZm8gfHwgIW5ldGlmX3J1bm5pbmcoZGV2KSB8fCAhbmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSkge1xuIDI4ODpcdFx0XHRkZXZfa2ZyZWVfc2tiX2lycShza2IpO1xuIDI4OTpcdFx0XHRnb3RvIG91dDtcbiAyOTA6XHRcdH1cbiAyOTE6XHRcbiAyOTI6XHRcdC8qIGRvbiYjMzk7dCBnZXQgbWVzc2FnZXMgb3V0IG9mIG9yZGVyLCBhbmQgbm8gcmVjdXJzaW9uICovXG4gMjkzOlx0XHRpZiAoc2tiX3F1ZXVlX2xlbihcdTAwMjZucGluZm8tXHUwMDNldHhxKSA9PSAwIFx1MDAyNlx1MDAyNiAhbmV0cG9sbF9vd25lcl9hY3RpdmUoZGV2KSkge1xuIDI5NDpcdFx0XHRzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7XG4gMjk1Olx0XG4gMjk2Olx0XHRcdHR4cSA9IG5ldGRldl9jb3JlX3BpY2tfdHgoZGV2LCBza2IsIE5VTEwpO1xuIDI5NzpcdFxuIDI5ODpcdFx0XHQvKiB0cnkgdW50aWwgbmV4dCBjbG9jayB0aWNrICovXG4gMjk5Olx0XHRcdGZvciAodHJpZXMgPSBqaWZmaWVzX3RvX3VzZWNzKDEpL1VTRUNfUEVSX1BPTEw7XG4gMzAwOlx0XHRcdCAgICAgdHJpZXMgXHUwMDNlIDA7IC0tdHJpZXMpIHtcbiAzMDE6XHRcdFx0XHRpZiAoSEFSRF9UWF9UUllMT0NLKGRldiwgdHhxKSkge1xuIDMwMjpcdFx0XHRcdFx0aWYgKCFuZXRpZl94bWl0X3N0b3BwZWQodHhxKSlcbiAzMDM6XHRcdFx0XHRcdFx0c3RhdHVzID0gbmV0cG9sbF9zdGFydF94bWl0KHNrYiwgZGV2LCB0eHEpO1xuIDMwNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzExOAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDM5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldHBvbGwgVFggUXVldWUgYW5kIFBvdGVudGlhbCBPT00gVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJbiBgX19uZXRwb2xsX3NlbmRfc2tiYCwgSSBzZWUgYSBjcml0aWNhbCBhcmVhIGNvbmNlcm5pbmcgdGhlIGhhbmRsaW5nIG9mIHRyYW5zbWlzc2lvbiBmYWlsdXJlcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgd2hhdCBoYXBwZW5zIGluIHRoZSBmYWlsdXJlIHBhdGguIFNwZWNpZmljYWxseSwgaWYgYGRldl94bWl0X2NvbXBsZXRlKHN0YXR1cylgIHJldHVybnMgZmFsc2UsIGltcGx5aW5nIHRoZSBkZXZpY2UgaXNuJiMzOTt0IGltbWVkaWF0ZWx5IHJlYWR5IHRvIHNlbmQgdGhlIHBhY2tldC4KCkZpcnN0LCBJIHNlZSB0aGUgY29kZSBjaGVja3MgaWYgdGhlIGBucGluZm8tJmd0O3R4cWAgcXVldWUgaGFzIHJlYWNoZWQgaXRzIG1heGltdW0gc2l6ZSwgYE5FVFBPTExfVFhRX01BWGAuICBJZiBpdCAqaGFzKiwgdGhlIHBhY2tldCAoYHNrYmApIGlzIGZyZWVkIGltbWVkaWF0ZWx5IHVzaW5nIGBkZXZfa2ZyZWVfc2tiX2lycShza2IpYCBhbmQgdGhlIGZ1bmN0aW9uIGp1bXBzIHRvIGBvdXRgLCByZXR1cm5pbmcgYHJldGAgd2hpY2gsIGltcG9ydGFudGx5LCBpcyBzZXQgdG8gYE5FVF9YTUlUX0RST1BgLgoKVGhlIGNydWNpYWwgcG9pbnQgaGl0cyBtZTogUHJldmlvdXNseSwgdGhlcmUgKndhcyBubyogbWF4aW11bSBzaXplIG9uIGBucGluZm8tJmd0O3R4cWAhIElmIHRoZSBuZXR3b3JrIHRyYW5zbWlzc2lvbiBjb250aW51b3VzbHkgZmFpbGVkLCBvciB3YXMgaGFsdGVkLCBwYWNrZXRzIGNvdWxkIGJlIGVuZGxlc3NseSBhZGRlZCB0byBgbnBpbmZvLSZndDt0eHFgLiBUaGlzLCB3aXRob3V0IGFueSBsaW1pdCwgb3BlbnMgdGhlIGRvb3IgdG8gYSBtZW1vcnkgZXhoYXVzdGlvbiB2dWxuZXJhYmlsaXR5LCBhIGNsYXNzaWMgT09NIHNpdHVhdGlvbi4gIFRoZSBmYWN0IHRoYXQgcGFja2V0cyB3ZXJlIHNpbXBseSBxdWV1ZWQgYW5kIG5vdCBkcm9wcGVkLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSAmIzM0O291dCYjMzQ7IHJldHVybiBzdGF0dXMsIGlzIGEgaHVnZSByZWQgZmxhZy4KCk15IG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgYWN0dWFsbHkgcmVhY2hhYmxlLiBDYW4gSSB0cmlnZ2VyIHRoaXMgY29uZGl0aW9uIHdpdGhpbiBzeXprYWxsZXIgb3IgYSB2aXJ0dWFsIG1hY2hpbmU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgbmV0cG9sbGAgYW5kIGBuZXRjb25zb2xlYCBhcmUgY29uZmlndXJlZCBhbmQgdXNlZC4gV2hlcmUgYXJlIHRoZXNlIGZlYXR1cmVzIGV2ZW4gZW5hYmxlZD8gSSBuZWVkIHRvIGNoZWNrIGhvdyBgbmV0cG9sbGAgb3IgYG5ldGNvbnNvbGVgIGlzIGNvbmZpZ3VyZWQuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgX19uZXRwb2xsX3NldHVwYCBvciBgbmV0cG9sbF9zZXR1cGAgaXMgY2FsbGVkLiBJIG5lZWQgdG8gZ3JlcCBmb3IgYG5ldHBvbGxfc2V0dXBgIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDQ6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0cG9sbF9zZXR1cCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTEzOTI9c3RhdGljIGlubGluZSBpbnQgc2xhdmVfZW5hYmxlX25ldHBvbGwoc3RydWN0IHNsYXZlICpzbGF2ZSlcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTE0MDEtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjE0MDI6XHRlcnIgPSBfX25ldHBvbGxfc2V0dXAobnAsIHNsYXZlLVx1MDAzZWRldik7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTE0MDMtXHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz0xNDUxPXN0YXRpYyB2b2lkIGJvbmRfbmV0cG9sbF9jbGVhbnVwKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldilcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTE0NjEtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjE0NjI6c3RhdGljIGludCBib25kX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTQ2My17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz01OTQyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYm9uZF9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTk2MC0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTk2MTpcdC5uZG9fbmV0cG9sbF9zZXR1cFx0PSBib25kX25ldHBvbGxfc2V0dXAsXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU5NjItXHQubmRvX25ldHBvbGxfY2xlYW51cFx0PSBib25kX25ldHBvbGxfY2xlYW51cCxcbi0tXG5kcml2ZXJzL25ldC9tYWN2bGFuLmM9MTEzNj1zdGF0aWMgdm9pZCBtYWN2bGFuX2Rldl9wb2xsX2NvbnRyb2xsZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9tYWN2bGFuLmMtMTE0MC1cbmRyaXZlcnMvbmV0L21hY3ZsYW4uYzoxMTQxOnN0YXRpYyBpbnQgbWFjdmxhbl9kZXZfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuZHJpdmVycy9uZXQvbWFjdmxhbi5jLTExNDIte1xuLS1cbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy0xMTUyLVxuZHJpdmVycy9uZXQvbWFjdmxhbi5jOjExNTM6XHRlcnIgPSBfX25ldHBvbGxfc2V0dXAobmV0cG9sbCwgcmVhbF9kZXYpO1xuZHJpdmVycy9uZXQvbWFjdmxhbi5jLTExNTQtXHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvbWFjdmxhbi5jPTExOTM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBtYWN2bGFuX25ldGRldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvbWFjdmxhbi5jLTEyMTItXHQubmRvX3BvbGxfY29udHJvbGxlclx0PSBtYWN2bGFuX2Rldl9wb2xsX2NvbnRyb2xsZXIsXG5kcml2ZXJzL25ldC9tYWN2bGFuLmM6MTIxMzpcdC5uZG9fbmV0cG9sbF9zZXR1cFx0PSBtYWN2bGFuX2Rldl9uZXRwb2xsX3NldHVwLFxuZHJpdmVycy9uZXQvbWFjdmxhbi5jLTEyMTQtXHQubmRvX25ldHBvbGxfY2xlYW51cFx0PSBtYWN2bGFuX2Rldl9uZXRwb2xsX2NsZWFudXAsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE2Mz1zdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwNS0gKlx0XHRpdHMgR0ZQX0FUT01JQyBhbGxvY2F0aW9uIGZhaWxzLiBMaWZldGltZSBicmFja2V0cyBhXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjA2OiAqXHRcdHN1Y2Nlc3NmdWwgbmV0cG9sbF9zZXR1cCgpIC8gbmV0cG9sbF9jbGVhbnVwKCkgcGFpciBvbiBAbnAuXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjA3LSAqIEByZWZpbGxfd3E6XHRXb3JrIGl0ZW0gdGhhdCBhc3luY2hyb25vdXNseSB0b3BzIEBza2JfcG9vbCBiYWNrIHVwIHRvXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTQ0OT1zdGF0aWMgaW50IG5ldGNvbnNfdGFrZV9pcHY0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQ3OC0gKiBUZXN0IHdoZXRoZXIgdGhlIGNhbGxlciBsZWZ0IG50LVx1MDAzZWxvY2FsX2lwIHVuc2V0LCBzbyB0aGF0XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NDc5OiAqIG5ldGNvbnNfbmV0cG9sbF9zZXR1cCgpIHNob3VsZCBhdXRvLXBvcHVsYXRlIGl0IGZyb20gdGhlIGVncmVzcyBkZXZpY2UuXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDgwLSAqXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTQ4Nz1zdGF0aWMgYm9vbCBuZXRjb25zX2xvY2FsX2lwX3Vuc2V0KGNvbnN0IHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQ5My1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo0OTQ6c3RhdGljIGludCBuZXRjb25zX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00OTUte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01NTEtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NTUyOlx0ZXJyID0gX19uZXRwb2xsX3NldHVwKG5wLCBuZGV2KTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01NTMtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz01NzY9c3RhdGljIHZvaWQgcmVzdW1lX3RhcmdldChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU3Ny17XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NTc4Olx0LyogSW5pdGlhbGlzZSB0aGUgc2tiIHBvb2wgYmVmb3JlIG5ldHBvbGxfc2V0dXAoKSBtYWtlcyBudC1cdTAwM2VucC5kZXZcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01NzktXHQgKiB2aXNpYmxlIHRvIHRhcmdldF9saXN0IHdhbGtlcnMgKGUuZy4gbmV0Y29uc29sZV9uZXRkZXZfZXZlbnQpLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01ODQtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NTg1Olx0aWYgKG5ldGNvbnNfbmV0cG9sbF9zZXR1cChudCkpIHtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01ODYtXHRcdC8qIG5ldHBvbGwgZmFpbHMgc2V0dXAgb25jZSwgZG8gbm90IHRyeSBhZ2Fpbi4gKi9cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9NjA5PXN0YXRpYyB2b2lkIHByb2Nlc3NfcmVzdW1lX3RhcmdldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTYzNC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo2MzU6XHQvKiBuZXRwb2xsX3NldHVwKCkgdG9vayBhIG5ldF9kZXZpY2UgcmVmZXJlbmNlIGFuZCBkcm9wcGVkIHRoZSBSVE5MXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjM2LVx0ICogYmVmb3JlIHJldHVybmluZywgYWxsIHdoaWxlIHRoaXMgdGFyZ2V0IHdhcyBvZmYgdGFyZ2V0X2xpc3QgYW5kXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTEwMDI9c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwNTUtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTA1NjpcdFx0LyogSW5pdGlhbGlzZSB0aGUgc2tiIHBvb2wgYmVmb3JlIG5ldHBvbGxfc2V0dXAoKSBzbyB0aGUgcG9vbFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwNTctXHRcdCAqIGlzIHZhbGlkIGFzIHNvb24gYXMgbnQtXHUwMDNlbnAuZGV2IGJlY29tZXMgdmlzaWJsZSB0b1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDYzLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEwNjQ6XHRcdHJldCA9IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChudCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA2NS1cdFx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNjIzPXN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmFsbG9jX3BhcmFtX3RhcmdldChjaGFyICp0YXJnZXRfY29uZmlnLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjU0LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2NTU6XHQvKiBJbml0aWFsaXNlIHRoZSBza2IgcG9vbCBiZWZvcmUgbmV0cG9sbF9zZXR1cCgpIHNvIHRoZSBwb29sIGlzXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY1Ni1cdCAqIHZhbGlkIGFzIHNvb24gYXMgbnQtXHUwMDNlbnAuZGV2IGJlY29tZXMgdmlzaWJsZS4gVGhlIHRhcmdldCBpcyBub3Rcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY2MS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjYyOlx0ZXJyID0gbmV0Y29uc19uZXRwb2xsX3NldHVwKG50KTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjYzLVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MTE0MD1zdGF0aWMgaW50IF9fdGVhbV9wb3J0X2VuYWJsZV9uZXRwb2xsKHN0cnVjdCB0ZWFtX3BvcnQgKnBvcnQpXG4tLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0xMTQ4LVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoxMTQ5Olx0ZXJyID0gX19uZXRwb2xsX3NldHVwKG5wLCBwb3J0LVx1MDAzZWRldik7XG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTExNTAtXHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz0yMDc4PXN0YXRpYyB2b2lkIHRlYW1fbmV0cG9sbF9jbGVhbnVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yMDg2LVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyMDg3OnN0YXRpYyBpbnQgdGVhbV9uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTIwODgte1xuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MjE3MD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHRlYW1fbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTIxODUtXHQubmRvX3BvbGxfY29udHJvbGxlclx0PSB0ZWFtX3BvbGxfY29udHJvbGxlcixcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MjE4NjpcdC5uZG9fbmV0cG9sbF9zZXR1cFx0PSB0ZWFtX25ldHBvbGxfc2V0dXAsXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTIxODctXHQubmRvX25ldHBvbGxfY2xlYW51cFx0PSB0ZWFtX25ldHBvbGxfY2xlYW51cCxcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTE0NTU9c3RydWN0IG5ldF9kZXZpY2Vfb3BzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTE1MTMtXHR2b2lkICAgICAgICAgICAgICAgICAgICAoKm5kb19wb2xsX2NvbnRyb2xsZXIpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoxNTE0Olx0aW50XHRcdFx0KCpuZG9fbmV0cG9sbF9zZXR1cCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTE1MTUtXHR2b2lkXHRcdFx0KCpuZG9fbmV0cG9sbF9jbGVhbnVwKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldHBvbGwuaD02Mj1zdGF0aWMgaW5saW5lIHZvaWQgbmV0cG9sbF9wb2xsX2VuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7IHJldHVybjsgfVxuLS1cbmluY2x1ZGUvbGludXgvbmV0cG9sbC5oLTY0LVxuaW5jbHVkZS9saW51eC9uZXRwb2xsLmg6NjU6aW50IF9fbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbmluY2x1ZGUvbGludXgvbmV0cG9sbC5oLTY2LXZvaWQgX19uZXRwb2xsX2ZyZWUoc3RydWN0IG5ldHBvbGwgKm5wKTtcbi0tXG5uZXQvODAyMXEvdmxhbl9kZXYuYz02OTA9c3RhdGljIHZvaWQgdmxhbl9kZXZfcG9sbF9jb250cm9sbGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtNjk0LVxubmV0LzgwMjFxL3ZsYW5fZGV2LmM6Njk1OnN0YXRpYyBpbnQgdmxhbl9kZXZfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtNjk2LXtcbi0tXG5uZXQvODAyMXEvdmxhbl9kZXYuYy03MDYtXG5uZXQvODAyMXEvdmxhbl9kZXYuYzo3MDc6XHRlcnIgPSBfX25ldHBvbGxfc2V0dXAobmV0cG9sbCwgcmVhbF9kZXYpO1xubmV0LzgwMjFxL3ZsYW5fZGV2LmMtNzA4LVx0aWYgKGVycikge1xuLS1cbm5ldC84MDIxcS92bGFuX2Rldi5jPTEwNTM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2bGFuX25ldGRldl9vcHMgPSB7XG4tLVxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtMTA3OS1cdC5uZG9fcG9sbF9jb250cm9sbGVyXHQ9IHZsYW5fZGV2X3BvbGxfY29udHJvbGxlcixcbm5ldC84MDIxcS92bGFuX2Rldi5jOjEwODA6XHQubmRvX25ldHBvbGxfc2V0dXBcdD0gdmxhbl9kZXZfbmV0cG9sbF9zZXR1cCxcbm5ldC84MDIxcS92bGFuX2Rldi5jLTEwODEtXHQubmRvX25ldHBvbGxfY2xlYW51cFx0PSB2bGFuX2Rldl9uZXRwb2xsX2NsZWFudXAsXG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYz0zMDY9c3RhdGljIGludCBfX2JyX25ldHBvbGxfZW5hYmxlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApXG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0zMTQtXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjMxNTpcdGVyciA9IF9fbmV0cG9sbF9zZXR1cChucCwgcC1cdTAwM2VkZXYpO1xubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0zMTYtXHRpZiAoZXJyKSB7XG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYz0zMjU9aW50IGJyX25ldHBvbGxfZW5hYmxlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApXG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0zMzItXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjMzMzpzdGF0aWMgaW50IGJyX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMzM0LXtcbi0tXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jPTQzOT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGJyX25ldGRldl9vcHMgPSB7XG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy00NTEtI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjQ1MjpcdC5uZG9fbmV0cG9sbF9zZXR1cFx0ID0gYnJfbmV0cG9sbF9zZXR1cCxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtNDUzLVx0Lm5kb19uZXRwb2xsX2NsZWFudXBcdCA9IGJyX25ldHBvbGxfY2xlYW51cCxcbi0tXG5uZXQvY29yZS9uZXRwb2xsLmM9MzUzPUVYUE9SVF9TWU1CT0wobmV0cG9sbF9zZW5kX3NrYik7XG5uZXQvY29yZS9uZXRwb2xsLmMtMzU0LVxubmV0L2NvcmUvbmV0cG9sbC5jOjM1NTppbnQgX19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG5uZXQvY29yZS9uZXRwb2xsLmMtMzU2LXtcbi0tXG5uZXQvY29yZS9uZXRwb2xsLmMtMzgyLVx0XHRvcHMgPSBuZGV2LVx1MDAzZW5ldGRldl9vcHM7XG5uZXQvY29yZS9uZXRwb2xsLmM6MzgzOlx0XHRpZiAob3BzLVx1MDAzZW5kb19uZXRwb2xsX3NldHVwKSB7XG5uZXQvY29yZS9uZXRwb2xsLmM6Mzg0Olx0XHRcdGVyciA9IG9wcy1cdTAwM2VuZG9fbmV0cG9sbF9zZXR1cChuZGV2KTtcbm5ldC9jb3JlL25ldHBvbGwuYy0zODUtXHRcdFx0aWYgKGVycilcbi0tXG5uZXQvY29yZS9uZXRwb2xsLmMtNDA0LX1cbm5ldC9jb3JlL25ldHBvbGwuYzo0MDU6RVhQT1JUX1NZTUJPTF9HUEwoX19uZXRwb2xsX3NldHVwKTtcbm5ldC9jb3JlL25ldHBvbGwuYy00MDYtXG4tLVxubmV0L2RzYS91c2VyLmM9MTMwNT1zdGF0aWMgaW50IGRzYV91c2VyX3NldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2RzYS91c2VyLmMtMTMxMy0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcbm5ldC9kc2EvdXNlci5jOjEzMTQ6c3RhdGljIGludCBkc2FfdXNlcl9uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvZHNhL3VzZXIuYy0xMzE1LXtcbi0tXG5uZXQvZHNhL3VzZXIuYy0xMzI0LVxubmV0L2RzYS91c2VyLmM6MTMyNTpcdGVyciA9IF9fbmV0cG9sbF9zZXR1cChuZXRwb2xsLCBjb25kdWl0KTtcbm5ldC9kc2EvdXNlci5jLTEzMjYtXHRpZiAoZXJyKSB7XG4tLVxubmV0L2RzYS91c2VyLmM9MjU4Nj1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGRzYV91c2VyX25ldGRldl9vcHMgPSB7XG4tLVxubmV0L2RzYS91c2VyLmMtMjU5Ni0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcbm5ldC9kc2EvdXNlci5jOjI1OTc6XHQubmRvX25ldHBvbGxfc2V0dXBcdD0gZHNhX3VzZXJfbmV0cG9sbF9zZXR1cCxcbm5ldC9kc2EvdXNlci5jLTI1OTgtXHQubmRvX25ldHBvbGxfY2xlYW51cFx0PSBkc2FfdXNlcl9uZXRwb2xsX2NsZWFudXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA0OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NTEzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEludmVzdGlnYXRpb24gb2YgbmV0Y29uc29sZSBhbmQgbmV0cG9sbCBTZXR1cCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byBob3cgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAgd29ya3MuIEl0IHNlZW1zIHRoYXQgYG5ldGNvbnNvbGVgLCB3aGVuIGNvbmZpZ3VyZWQgZWl0aGVyIHRocm91Z2ggYGNvbmZpZ2ZzYCBhdCBgL3N5cy9rZXJuZWwvY29uZmlnL25ldGNvbnNvbGUvYCBvciB3aXRoIG1vZHVsZSBwYXJhbWV0ZXJzIHVzaW5nIGBuZXRjb25zb2xlPS4uLmAsIGVuZHMgdXAgY2FsbGluZyBgX19uZXRwb2xsX3NldHVwYC4gTm93LCB0aGF0IGdldHMgbWUgdGhpbmtpbmc6IENhbiBgbmV0Y29uc29sZWAgZXZlbiAqYmUqIHJlYWNoZWQgdGhyb3VnaCBgY29uZmlnZnNgPyBJdCYjMzk7cyBiZWVuIGEgd2hpbGUsIGFuZCBJIG5lZWQgdG8gYmUgc3VyZS4KCkxldCYjMzk7cyBzZWUsIEkgc2hvdWxkIGNoZWNrIHRoZSB1c2Ugb2YgYE5FVENPTlNPTEVfRFlOQU1JQ2AgYW5kIHRoZSBjb25maWdmcyB1c2FnZSBpbiBzeXprYWxsZXIgb3IgYSBzdGFuZGFyZCBMaW51eCBrZXJuZWwgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuIEFoLCByaWdodCwgb2YgY291cnNlLCBjb25maWdmcyBpcyBzb21ldGhpbmcgdGhhdCB1c2VyIHNwYWNlIGNhbiBkeW5hbWljYWxseSBtb3VudDsgc3l6a2FsbGVyIGNhbiBlYXNpbHkgbW91bnQgY29uZmlnZnMgYW5kIGNyZWF0ZSBlbnRyaWVzLCBzbyB0aGF0JiMzOTtzIGhlbHBmdWwuIFRoaXMgbWFrZXMgbWUgd29uZGVyLCBjYW4gYG5ldHBvbGxfc2VuZF9za2JgIGFjdHVhbGx5IGJlIGNhbGxlZCBpbiB0aGlzIHNjZW5hcmlvPwoKVGltZSB0byBkaWcgaW50byB0aGUgY29kZSBpdHNlbGYuIE9rYXksIGhlcmUgd2UgYXJlIGluIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgLiBSaWdodCwgc28gYG5ldHBvbGxfc2VuZF91ZHBgIGlzIHdoYXQgd2UmIzM5O3JlIGFmdGVyLiBBaGEhIFdoZW4gYHByaW50a2AgaXMgY2FsbGVkLCBvciB3aGVuIHNvbWV0aGluZyB3cml0ZXMgdG8gYC9kZXYva21zZ2AsIHRoZSBuZXRjb25zb2xlJiMzOTtzIHdyaXRlIGhhbmRsZXIsIGB3cml0ZV9tc2dgLCBpcyBpbnZva2VkLiBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBsaW5rLiBOb3csIGxldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhhdCBgd3JpdGVfbXNnYCBmdW5jdGlvbiBpbiBgZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jYCB0byBzZWUgcHJlY2lzZWx5IHdoYXQgdHJpZ2dlcnMgdGhlIG91dHB1dCwgYW5kIHdoZXJlIGl0IGdvZXMgZnJvbSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDQ6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0cG9sbF9zZW5kX3VkcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjE1MD1zdGF0aWMgdm9pZCBwdXNoX2lwdjYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE3My1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTc0OnN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE3NS1cdFx0XHQgICAgaW50IGxlbilcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIxMS0vKipcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjEyOiAqIHNlbmRfdWRwIC0gV3JhcHBlciBmb3IgbmV0cG9sbF9zZW5kX3VkcCB0aGF0IGNvdW50cyBlcnJvcnNcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjEzLSAqIEBudDogdGFyZ2V0IHRvIHNlbmQgbWVzc2FnZSB0b1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjE2LSAqXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIxNzogKiBDYWxscyBuZXRwb2xsX3NlbmRfdWRwIGFuZCBjbGFzc2lmaWVzIHRoZSByZXR1cm4gdmFsdWUuIElmIGFuIGVycm9yXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIxOC0gKiBvY2N1cnJlZCBpdCBpbmNyZW1lbnRzIHN0YXRpc3RpY3MgaW4gbnQtXHUwMDNlc3RhdHMgYWNjb3JkaW5nbHkuXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIxOTogKiBPbmx5IGNhbGxzIG5ldHBvbGxfc2VuZF91ZHAgaWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBkaXNhYmxlZC5cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjIwLSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIyMjE9c3RhdGljIHZvaWQgc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMjIte1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMjM6XHRpbnQgcmVzdWx0ID0gbmV0cG9sbF9zZW5kX3VkcChudCwgbXNnLCBsZW4pO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMjQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA0OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NTEyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGVzZSBgc2VuZF91ZHBgIGFuZCBgbmV0cG9sbF9zZW5kX3VkcGAgZnVuY3Rpb25zLiBSaWdodCBub3csIEkmIzM5O20gdHJ5aW5nIHRvIGdldCBhIGNvbXByZWhlbnNpdmUgdmlldyBvZiB0aGUgY29kZS4KCioqSW52ZXN0aWdhdGluZyBDYWxsIFNpdGVzKioKCkkmIzM5O20gdGhpbmtpbmcsICYjMzQ7V2hlcmUgZWxzZSBhcmUgdGhlc2UgZnVuY3Rpb25zIGFjdHVhbGx5IGJlaW5nICp1c2VkKj8mIzM0OyBGaW5kaW5nIGFsbCB0aGUgY2FsbCBzaXRlcyBpcyBrZXkgaGVyZS4gTGV0JiMzOTtzIHNlZS4uLiBhIHF1aWNrIGNoZWNrIG9mIHRoZSBjb2RlYmFzZSBzaG91bGQgZG8gdGhlIHRyaWNrLiBBIGdvb2QgcGxhY2UgdG8gc3RhcnQsIGJhc2VkIG9uIHByaW9yIGV4cGVyaWVuY2UsIHdvdWxkIGxpa2VseSBiZSBgZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jYC4gSXQmIzM5O3MgYSBwcmltZSBzdXNwZWN0IGdpdmVuIGl0cyBsaWtlbHkgcmVsYXRpb24gdG8gbmV0d29yayBjb25zb2xlIGZ1bmN0aW9uYWxpdHksIGFuZCBzaG91bGQgZ2l2ZSBtZSBzb21lIGdvb2QgbGVhZHMgdG8gZm9sbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZW5kX3VkcFxcYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjE1MD1zdGF0aWMgdm9pZCBwdXNoX2lwdjYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE3My1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTc0OnN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE3NS1cdFx0XHQgICAgaW50IGxlbilcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIxMS0vKipcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjEyOiAqIHNlbmRfdWRwIC0gV3JhcHBlciBmb3IgbmV0cG9sbF9zZW5kX3VkcCB0aGF0IGNvdW50cyBlcnJvcnNcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjEzLSAqIEBudDogdGFyZ2V0IHRvIHNlbmQgbWVzc2FnZSB0b1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjE2LSAqXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIxNzogKiBDYWxscyBuZXRwb2xsX3NlbmRfdWRwIGFuZCBjbGFzc2lmaWVzIHRoZSByZXR1cm4gdmFsdWUuIElmIGFuIGVycm9yXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIxOC0gKiBvY2N1cnJlZCBpdCBpbmNyZW1lbnRzIHN0YXRpc3RpY3MgaW4gbnQtXHUwMDNlc3RhdHMgYWNjb3JkaW5nbHkuXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIxOTogKiBPbmx5IGNhbGxzIG5ldHBvbGxfc2VuZF91ZHAgaWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBkaXNhYmxlZC5cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjIwLSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMjE6c3RhdGljIHZvaWQgc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMjIte1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMjM6XHRpbnQgcmVzdWx0ID0gbmV0cG9sbF9zZW5kX3VkcChudCwgbXNnLCBsZW4pO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMjQtXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIyMzg9c3RhdGljIHZvaWQgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjcwLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyNzE6XHRzZW5kX3VkcChudCwgbnQtXHUwMDNlYnVmLCBtc2dfbGVuKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjcyLX1cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjI4Mj1zdGF0aWMgdm9pZCBzZW5kX2ZyYWdtZW50ZWRfYm9keShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMzY5LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIzNzA6XHRcdHNlbmRfdWRwKG50LCBudC1cdTAwM2VidWYsIGJ1Zl9vZmZzZXQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzNzEtXHR9XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI0MjA9c3RhdGljIHZvaWQgc2VuZF9leHRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDI4LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0Mjk6XHQvKiBLZWVwcyB0aGUgcGF5bG9hZCBwaWNrZWQgYmVsb3cgYWxpdmUgdW50aWwgdGhlIGxhc3Qgc2VuZF91ZHAoKS4gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDMwLVx0cmN1X3JlYWRfbG9jaygpO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNDUyPXN0YXRpYyB2b2lkIHNlbmRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0NTktXHRcdGZyYWcgPSBtaW4obGVmdCwgTUFYX1BSSU5UX0NIVU5LKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDYwOlx0XHRzZW5kX3VkcChudCwgdG1wLCBmcmFnKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDYxLVx0XHR0bXAgJiM0Mzs9IGZyYWc7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA0OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTcxCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBDYWxsZXJzIG9mIGBuZXRwb2xsX3NlbmRfc2tiYCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBjYWxsZXJzIG9mIGBuZXRwb2xsX3NlbmRfc2tiYC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uLiBUaGlzIGlzIGNsZWFybHkgYSBjcml0aWNhbCBwYXRoIGZvciBuZXR3b3JrIHBvbGxpbmcgZHVyaW5nIGVtZXJnZW5jaWVzIG9yIGRlYnVnZ2luZywgc28gaXQmIzM5O3Mgd29ydGggdW5kZXJzdGFuZGluZyB0aGUgaW50ZWdyYXRpb25zLgoKSSYjMzk7dmUgZ290IHNpeCBrZXkgY2FsbGluZyBjb250ZXh0czogYGJvbmRpbmdgLCBgbWFjdmxhbmAsIGB2bGFuYCwgYGJyaWRnZWAsIGB0ZWFtYCwgYW5kIGBkc2FgLiBFYWNoIG9uZSBjaGVja3MgYG5ldHBvbGxfdHhfcnVubmluZyhkZXYpYCBhbmQsIGlmIGl0JiMzOTtzIHNldCwgY2FsbHMgaXRzIG93biBuZXRwb2xsLXNwZWNpZmljIHNlbmQgZnVuY3Rpb24sIGxpa2UgYGJvbmRfbmV0cG9sbF9zZW5kX3NrYmAsIGBtYWN2bGFuX25ldHBvbGxfc2VuZF9za2JgLCBhbmQgc28gb24uIEVhY2ggb2YgdGhlc2UgZnVuY3Rpb25zIGlzIGxpa2VseSB0YWlsb3JlZCB0byB0aGUgc3BlY2lmaWMgbmV0d29ya2luZyBhYnN0cmFjdGlvbi4gRm9yIGV4YW1wbGUsIGBib25kaW5nYCBjYWxscyBgYm9uZF9nZXRfc2xhdmVfYnlfZGV2YCB0byBzZWxlY3QgdGhlIHJpZ2h0IHNsYXZlIGRldmljZSB0byBzZW5kIHRvLiBgYnJpZGdlYCBqdXN0IGNhbGxzIGBicl9uZXRwb2xsX3NlbmRfc2tiYC4KCk5vdyB0aGUgcXVlc3Rpb24gaXMsICpob3cqIGlzIHRoaXMgYG5ldHBvbGxfdHhfcnVubmluZ2AgZmxhZyBzZXQ/IEl0JiMzOTtzIGEga2V5IGNvbmRpdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN0YXRlIG1hY2hpbmUgYW5kIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIHRoaXMgbmV0cG9sbCBUWCBtb2RlLiBUaW1lIHRvIGdyZXAgZm9yIHRoYXQgZmxhZyBhbmQgc2VlIHdoZXJlIGl0JiMzOTtzIGJlaW5nIG1hbmlwdWxhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRwb2xsX3R4X3J1bm5pbmcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz0yOTc9bmV0ZGV2X3R4X3QgYm9uZF9kZXZfcXVldWVfeG1pdChzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTMwNS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MzA2Olx0aWYgKHVubGlrZWx5KG5ldHBvbGxfdHhfcnVubmluZyhib25kLVx1MDAzZWRldikpKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0zMDctXHRcdHJldHVybiBib25kX25ldHBvbGxfc2VuZF9za2IoYm9uZF9nZXRfc2xhdmVfYnlfZGV2KGJvbmQsIHNsYXZlX2RldiksIHNrYik7XG4tLVxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzY19icGYuYz0yNDc9aW50IG5ldHZzY19uZG94ZHBfeG1pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgaW50IG4sXG4tLVxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzY19icGYuYy0yNjgtXHRpZiAodmZfbmV0ZGV2IFx1MDAyNlx1MDAyNiBuZXRpZl9ydW5uaW5nKHZmX25ldGRldikgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjX2JwZi5jOjI2OTpcdCAgICBuZXRpZl9jYXJyaWVyX29rKHZmX25ldGRldikgXHUwMDI2XHUwMDI2ICFuZXRwb2xsX3R4X3J1bm5pbmcobmRldikgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjX2JwZi5jLTI3MC1cdCAgICB2Zl9uZXRkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9feGRwX3htaXQgXHUwMDI2XHUwMDI2XG4tLVxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzY19kcnYuYz00NDI9c3RhdGljIGludCBuZXR2c2NfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBib29sIHhkcF90eClcbi0tXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjX2Rydi5jLTQ1OS1cdGlmICh2Zl9uZXRkZXYgXHUwMDI2XHUwMDI2IG5ldGlmX3J1bm5pbmcodmZfbmV0ZGV2KSBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmM6NDYwOlx0ICAgIG5ldGlmX2NhcnJpZXJfb2sodmZfbmV0ZGV2KSBcdTAwMjZcdTAwMjYgIW5ldHBvbGxfdHhfcnVubmluZyhuZXQpIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzY19kcnYuYy00NjEtXHQgICAgbmV0X2RldmljZV9jdHgtXHUwMDNlZGF0YV9wYXRoX2lzX3ZmKVxuLS1cbmRyaXZlcnMvbmV0L21hY3ZsYW4uYz01ODk9c3RhdGljIG5ldGRldl90eF90IG1hY3ZsYW5fc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy01OTUtXG5kcml2ZXJzL25ldC9tYWN2bGFuLmM6NTk2Olx0aWYgKHVubGlrZWx5KG5ldHBvbGxfdHhfcnVubmluZyhkZXYpKSlcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy01OTctXHRcdHJldHVybiBtYWN2bGFuX25ldHBvbGxfc2VuZF9za2Iodmxhbiwgc2tiKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2lmX3RlYW0uaD0yMzc9c3RhdGljIGlubGluZSBpbnQgdGVhbV9kZXZfcXVldWVfeG1pdChzdHJ1Y3QgdGVhbSAqdGVhbSwgc3RydWN0IHRlYW1fcG9ydCAqcG9ydCxcbi0tXG5pbmNsdWRlL2xpbnV4L2lmX3RlYW0uaC0yNDQtXHRza2ItXHUwMDNlZGV2ID0gcG9ydC1cdTAwM2VkZXY7XG5pbmNsdWRlL2xpbnV4L2lmX3RlYW0uaDoyNDU6XHRpZiAodW5saWtlbHkobmV0cG9sbF90eF9ydW5uaW5nKG5ldGRldl9mcm9tX3ByaXYodGVhbSkpKSkge1xuaW5jbHVkZS9saW51eC9pZl90ZWFtLmgtMjQ2LVx0XHR0ZWFtX25ldHBvbGxfc2VuZF9za2IocG9ydCwgc2tiKTtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldHBvbGwuaD04OT1zdGF0aWMgaW5saW5lIHZvaWQgbmV0cG9sbF9wb2xsX3VubG9jayh2b2lkICpoYXZlKVxuLS1cbmluY2x1ZGUvbGludXgvbmV0cG9sbC5oLTk2LVxuaW5jbHVkZS9saW51eC9uZXRwb2xsLmg6OTc6c3RhdGljIGlubGluZSBib29sIG5ldHBvbGxfdHhfcnVubmluZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuaW5jbHVkZS9saW51eC9uZXRwb2xsLmgtOTgte1xuLS1cbmluY2x1ZGUvbGludXgvbmV0cG9sbC5oPTEwNz1zdGF0aWMgaW5saW5lIHZvaWQgbmV0cG9sbF9wb2xsX3VubG9jayh2b2lkICpoYXZlKVxuLS1cbmluY2x1ZGUvbGludXgvbmV0cG9sbC5oLTEwOS19XG5pbmNsdWRlL2xpbnV4L25ldHBvbGwuaDoxMTA6c3RhdGljIGlubGluZSBib29sIG5ldHBvbGxfdHhfcnVubmluZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuaW5jbHVkZS9saW51eC9uZXRwb2xsLmgtMTExLXtcbi0tXG5pbmNsdWRlL25ldC9ib25kaW5nLmg9MTAzPXN0YXRpYyBpbmxpbmUgaW50IGlzX25ldHBvbGxfdHhfYmxvY2tlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmluY2x1ZGUvbmV0L2JvbmRpbmcuaC0xMDUtXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZuZXRwb2xsX2Jsb2NrX3R4KSlcbmluY2x1ZGUvbmV0L2JvbmRpbmcuaDoxMDY6XHRcdHJldHVybiBuZXRwb2xsX3R4X3J1bm5pbmcoZGV2KTtcbmluY2x1ZGUvbmV0L2JvbmRpbmcuaC0xMDctXHRyZXR1cm4gMDtcbi0tXG5uZXQvODAyMXEvdmxhbl9kZXYuYz0xMDA9c3RhdGljIG5ldGRldl90eF90IHZsYW5fZGV2X2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC84MDIxcS92bGFuX2Rldi5jLTEyMi1cdGxlbiA9IHNrYi1cdTAwM2VsZW47XG5uZXQvODAyMXEvdmxhbl9kZXYuYzoxMjM6XHRpZiAodW5saWtlbHkobmV0cG9sbF90eF9ydW5uaW5nKGRldikpKVxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtMTI0LVx0XHRyZXR1cm4gdmxhbl9uZXRwb2xsX3NlbmRfc2tiKHZsYW4sIHNrYik7XG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYz0zMD1uZXRkZXZfdHhfdCBicl9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtOTMtXHR9IGVsc2UgaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGRlc3QpKSB7XG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjk0Olx0XHRpZiAodW5saWtlbHkobmV0cG9sbF90eF9ydW5uaW5nKGRldikpKSB7XG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTk1LVx0XHRcdGJyX2Zsb29kKGJyLCBza2IsIEJSX1BLVF9NVUxUSUNBU1QsIGZhbHNlLCB0cnVlLCB2aWQpO1xuLS1cbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jPTczPXN0YXRpYyB2b2lkIF9fYnJfZm9yd2FyZChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICp0byxcbi0tXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0xMDEtXHR9IGVsc2Uge1xubmV0L2JyaWRnZS9icl9mb3J3YXJkLmM6MTAyOlx0XHRpZiAodW5saWtlbHkobmV0cG9sbF90eF9ydW5uaW5nKHRvLVx1MDAzZWJyLVx1MDAzZWRldikpKSB7XG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0xMDMtXHRcdFx0c2tiX3B1c2goc2tiLCBFVEhfSExFTik7XG4tLVxubmV0L2RzYS91c2VyLmM9ODk2PW5ldGRldl90eF90IGRzYV9lbnF1ZXVlX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9kc2EvdXNlci5jLTkwMC1cdCAqL1xubmV0L2RzYS91c2VyLmM6OTAxOlx0aWYgKHVubGlrZWx5KG5ldHBvbGxfdHhfcnVubmluZyhkZXYpKSlcbm5ldC9kc2EvdXNlci5jLTkwMi1cdFx0cmV0dXJuIGRzYV91c2VyX25ldHBvbGxfc2VuZF9za2IoZGV2LCBza2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTg3NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIGBuZXRwb2xsX3R4X3J1bm5pbmdgIERlZmluaXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBuZXRwb2xsX3R4X3J1bm5pbmdgIHZhcmlhYmxlLCBhbmQgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMsIG9mIGNvdXJzZSwgdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCB0aGUgZGVmaW5pdGlvbiB3aXRoaW4gYGluY2x1ZGUvbGludXgvbmV0cG9sbC5oYC4gSSYjMzk7bSBhc3N1bWluZyBpdCYjMzk7cyBhIGNyaXRpY2FsIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUgb3IgZmxhZyByZWxhdGVkIHRvIG5ldHBvbGwmIzM5O3MgdHJhbnNtaXQgcGF0aC4gS25vd2luZyB0aGUgZXhhY3QgZGF0YSB0eXBlLCB0aGUgY29udGV4dCBpbiB3aGljaCBpdCYjMzk7cyBkZWNsYXJlZCwgYW5kIGFueSBhc3NvY2lhdGVkIGNvbW1lbnRzIHdpbGwgcHJvdmlkZSB0aGUgZm91bmRhdGlvbmFsIHVuZGVyc3RhbmRpbmcgSSBuZWVkLiBJJiMzOTttIGhvcGluZyB0byBxdWlja2x5IGdyYXNwIGl0cyByb2xlIGluIG1hbmFnaW5nIHRyYW5zbWl0IHN0YXRlIGFuZCBwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucywgZ2l2ZW4gbmV0cG9sbCYjMzk7cyBpbmhlcmVudCBjb21wbGV4aXRpZXMgcmVnYXJkaW5nIGludGVycnVwdCBjb250ZXh0IGFuZCBwb3RlbnRpYWxseSBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzIHdpdGggb3RoZXIgbmV0d29yayBzdGFja3MuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhpbnRzIGFib3V0IGF0b21pY2l0eSwgbWVtb3J5IGJhcnJpZXJzLCBhbmQgcG90ZW50aWFsIGxvY2sgdXNhZ2UgYXJvdW5kIHRoaXMgdmFyaWFibGUuIE15IGdvYWwgaXMgdG8gcXVpY2tseSBwaW5wb2ludCBpdHMgZnVuY3Rpb24gYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgZ290Y2hhcyBmb3IgdGhlIGN1cnJlbnQgZGVidWdnaW5nIG9yIGRldmVsb3BtZW50IHRhc2sgYXQgaGFuZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBoZWFkZXIgZmlsZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0cG9sbC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA5MDpcdHtcbiAgOTE6XHRcdHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSA9IGhhdmU7XG4gIDkyOlx0XG4gIDkzOlx0XHRpZiAobmFwaSlcbiAgOTQ6XHRcdFx0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2bmFwaS1cdTAwM2Vwb2xsX293bmVyLCAtMSk7XG4gIDk1Olx0fVxuICA5NjpcdFxuICA5NzpcdHN0YXRpYyBpbmxpbmUgYm9vbCBuZXRwb2xsX3R4X3J1bm5pbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiAgOTg6XHR7XG4gIDk5Olx0XHRyZXR1cm4gaXJxc19kaXNhYmxlZCgpO1xuIDEwMDpcdH1cbiAxMDE6XHRcbiAxMDI6XHQjZWxzZVxuIDEwMzpcdHN0YXRpYyBpbmxpbmUgdm9pZCAqbmV0cG9sbF9wb2xsX2xvY2soc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKVxuIDEwNDpcdHtcbiAxMDU6XHRcdHJldHVybiBOVUxMO1xuIDEwNjpcdH1cbiAxMDc6XHRzdGF0aWMgaW5saW5lIHZvaWQgbmV0cG9sbF9wb2xsX3VubG9jayh2b2lkICpoYXZlKVxuIDEwODpcdHtcbiAxMDk6XHR9XG4gMTEwOlx0c3RhdGljIGlubGluZSBib29sIG5ldHBvbGxfdHhfcnVubmluZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIDExMTpcdHtcbiAxMTI6XHRcdHJldHVybiBmYWxzZTtcbiAxMTM6XHR9XG4gMTE0Olx0I2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA0OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNDc1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IE5ldHBvbGwgQ29udW5kcnVtKioKCk9rYXksIHNvIGBuZXRwb2xsX3R4X3J1bm5pbmdgIGlzIGdpdmluZyBtZSBgaXJxc19kaXNhYmxlZCgpYC4gVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZW4gdGhlIGB2bGFuLSZndDtuZXRwb2xsYCBvciBgYm9uZC0mZ3Q7c2xhdmUtJmd0O25wYCBzdHJ1Y3R1cmVzIGFyZSBhY3R1YWxseSBzZXQgdXAuIExldCYjMzk7cyB0cmFjZSBpdCBiYWNrLgoKUmlnaHQsIGluIGB2bGFuX2Rldl9uZXRwb2xsX3NldHVwYCwgdGhlcmUmIzM5O3MgYSBga3phbGxvY2AgZm9yIGBuZXRwb2xsYCBhbmQgYSBjYWxsIHRvIGBfX25ldHBvbGxfc2V0dXBgLiBUaGF04oCZcyB3aGVyZSBpdCYjMzk7cyBoYXBwZW5pbmcuIEhvdyBkb2VzICp0aGF0KiBnZXQgY2FsbGVkPyBBaCwgaXQmIzM5O3MgYHZsYW5fbmV0ZGV2X29wcy5uZG9fbmV0cG9sbF9zZXR1cGAhIEFuZCB0aGF0LCBpbiB0dXJuLCBpcyBjYWxsZWQgaW5kaXJlY3RseSBmcm9tIGBfX25ldHBvbGxfc2V0dXBgISBMb29rOiBpZiBgZGV2LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fbmV0cG9sbF9zZXR1cGAgZXhpc3RzLCBpdCBnZXRzIGNhbGxlZCBmcm9tIGBfX25ldHBvbGxfc2V0dXBgLiBTbywgbmV0Y29uc29sZSBpcyBzZXR0aW5nIHVwIG5ldHBvbGwgb24gdGhlc2UgdmlydHVhbCBkZXZpY2Vz4oCUdmxhbiwgYm9uZCwgYnJpZGdlLCB0ZWFtLCBldGMu4oCUd2hlbiBuZXRjb25zb2xlIGlzIHVzZWQuCgpCdXQgaG93IGlzIG5ldGNvbnNvbGUgKmNvbmZpZ3VyZWQqPyBDYW4gdXNlcnNwYWNlIGV2ZW4gY29uZmlndXJlIGl0PyBUaGlzIGlzIGNydWNpYWwuIEkgbmVlZCB0byBjaGVjayB0aGUgbmV0Y29uc29sZSBkcml2ZXIgaXRzZWxmIChgZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jYCkuIExldCYjMzk7cyBqdW1wIHRvIGFyb3VuZCBsaW5lIDEwMDAgaW4gYG5ldGNvbnNvbGUuY2Agb3Igc2VhcmNoIGZvciBjb25maWdmcyBpbiB0aGF0IGZpbGUgdG8gZ2V0IGEgY2x1ZSBhYm91dCBob3cgdXNlcnNwYWNlIGludGVyYWN0cyB3aXRoIGl0LiBUaGF0IHNob3VsZCB0ZWxsIG1lIGhvdyB0aGlzIHdob2xlIHRoaW5nIGlzIHRyaWdnZXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDQ6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnZnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQzLSNpbmNsdWRlIFx1MDAzY25ldC9hZGRyY29uZi5oXHUwMDNlXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NDQ6I2luY2x1ZGUgXHUwMDNjbGludXgvY29uZmlnZnMuaFx1MDAzZVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQ1LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcdTAwM2Vcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTYzPXN0cnVjdCBuZXRjb25zX3VzZXJkYXRhIHtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTcxLSAqIEBsaXN0Olx0TGlua3MgdGhpcyB0YXJnZXQgaW50byB0aGUgdGFyZ2V0X2xpc3QuXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTcyOiAqIEBncm91cDpcdExpbmtzIHVzIGludG8gdGhlIGNvbmZpZ2ZzIHN1YnN5c3RlbSBoaWVyYXJjaHkuXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTczOiAqIEB1c2VyZGF0YV9ncm91cDpcdExpbmtzIHRvIHRoZSB1c2VyZGF0YSBjb25maWdmcyBoaWVyYXJjaHlcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzQtICogQHVzZXJkYXRhOlx0XHRDYWNoZWQsIGZvcm1hdHRlZCB1c2VyZGF0YSBwYXlsb2FkLiBSQ1UgcHJvdGVjdGVkLlxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMTA9c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQyLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0MzpzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSBuZXRjb25zb2xlX3N1YnN5cztcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDQtc3RhdGljIERFRklORV9NVVRFWChkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXgpO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNDY9c3RhdGljIGludCBfX2luaXQgZHluYW1pY19uZXRjb25zb2xlX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ5LVx0bXV0ZXhfaW5pdChcdTAwMjZuZXRjb25zb2xlX3N1YnN5cy5zdV9tdXRleCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjUwOlx0cmV0dXJuIGNvbmZpZ2ZzX3JlZ2lzdGVyX3N1YnN5c3RlbShcdTAwMjZuZXRjb25zb2xlX3N1YnN5cyk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjUxLX1cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjUzPXN0YXRpYyB2b2lkIF9fZXhpdCBkeW5hbWljX25ldGNvbnNvbGVfZXhpdCh2b2lkKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1NC17XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjU1Olx0Y29uZmlnZnNfdW5yZWdpc3Rlcl9zdWJzeXN0ZW0oXHUwMDI2bmV0Y29uc29sZV9zdWJzeXMpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1Ni19XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1OS0gKiBUYXJnZXRzIHRoYXQgd2VyZSBjcmVhdGVkIGJ5IHBhcnNpbmcgdGhlIGJvb3QvbW9kdWxlIG9wdGlvbiBzdHJpbmdcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjA6ICogZG8gbm90IGV4aXN0IGluIHRoZSBjb25maWdmcyBoaWVyYXJjaHkgKGFuZCBoYXZlIE5VTEwgbmFtZXMpIGFuZCB3aWxsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYxLSAqIG5ldmVyIGdvIGF3YXksIHNvIG1ha2UgdGhlc2UgYSBuby1vcCBmb3IgdGhlbS5cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MzA0PXN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfdGFyZ2V0X3B1dChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMDctXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzA4OnN0YXRpYyB2b2lkIHBvcHVsYXRlX2NvbmZpZ2ZzX2l0ZW0oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMDktXHRcdFx0XHQgICBpbnQgY21kbGluZV9jb3VudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9OTAwPXN0YXRpYyBzc2l6ZV90IHRyYW5zbWl0X2Vycm9yc19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05MTQtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6OTE1Oi8qIGNvbmZpZ2ZzIGhlbHBlciB0byBkaXNwbGF5IGlmIGNwdV9uciBzeXNkYXRhIGZlYXR1cmUgaXMgZW5hYmxlZCAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTkxNi1zdGF0aWMgc3NpemVfdCBzeXNkYXRhX2NwdV9ucl9lbmFibGVkX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTkyNy1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo5Mjg6LyogY29uZmlnZnMgaGVscGVyIHRvIGRpc3BsYXkgaWYgdGFza25hbWUgc3lzZGF0YSBmZWF0dXJlIGlzIGVuYWJsZWQgKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05Mjktc3RhdGljIHNzaXplX3Qgc3lzZGF0YV90YXNrbmFtZV9lbmFibGVkX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz05ODI9c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9tc2dpZF9lbmFibGVkX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05OTUtLypcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo5OTY6ICogVGhpcyBvbmUgaXMgc3BlY2lhbCAtLSB0YXJnZXRzIGNyZWF0ZWQgdGhyb3VnaCB0aGUgY29uZmlnZnMgaW50ZXJmYWNlXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTk3LSAqIGFyZSBub3QgZW5hYmxlZCAoYW5kIHRoZSBjb3JyZXNwb25kaW5nIG5ldHBvbGwgYWN0aXZhdGVkKSBieSBkZWZhdWx0LlxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMDAyPXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDUxLVx0XHQgKiBTa2lwIG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoKSAtLSBhbGwgdGhlIGF0dHJpYnV0ZXMgYXJlXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTA1MjpcdFx0ICogYWxyZWFkeSBjb25maWd1cmVkIHZpYSBjb25maWdmcy4gSnVzdCBwcmludCB0aGVtIG91dC5cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDUzLVx0XHQgKi9cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTMzNz1zdGF0aWMgc3NpemVfdCB1c2VyZGF0dW1fdmFsdWVfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1Zilcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTM0MS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMzQyOi8qIE5hdmlnYXRlIGNvbmZpZ2ZzIGFuZCBjYWxjdWxhdGUgdGhlIGxlbnRnaCBvZiB0aGUgZm9ybWF0dGVkIHN0cmluZ1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzNDMtICogcmVwcmVzZW50aW5nIHVzZXJkYXRhLlxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNTE3PXN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfdGFza25hbWVfZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1NDUtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU0NjovKiBjb25maWdmcyBoZWxwZXIgdG8gc3lzZGF0YSBjcHVfbnIgZmVhdHVyZSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1NDctc3RhdGljIHNzaXplX3Qgc3lzZGF0YV9jcHVfbnJfZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE1ODQ9Q09ORklHRlNfQVRUUihzeXNkYXRhXywgbXNnaWRfZW5hYmxlZCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU4NS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNTg2OnN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlICp1c2VyZGF0dW1fYXR0cnNbXSA9IHtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTg3LVx0XHUwMDI2dXNlcmRhdHVtX2F0dHJfdmFsdWUsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE1OTE9c3RhdGljIHZvaWQgdXNlcmRhdHVtX3JlbGVhc2Uoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTk1LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1OTY6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdmc19pdGVtX29wZXJhdGlvbnMgdXNlcmRhdHVtX29wcyA9IHtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTk3LVx0LnJlbGVhc2UgPSB1c2VyZGF0dW1fcmVsZWFzZSxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTYyOT1zdGF0aWMgdm9pZCB1c2VyZGF0dW1fZHJvcChzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCwgc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjQyLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NDM6c3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKnVzZXJkYXRhX2F0dHJzW10gPSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY0NC1cdFx1MDAyNnN5c2RhdGFfYXR0cl9jcHVfbnJfZW5hYmxlZCxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY1MC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjUxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnZnNfZ3JvdXBfb3BlcmF0aW9ucyB1c2VyZGF0YV9vcHMgPSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY1Mi1cdC5tYWtlX2l0ZW1cdFx0PSB1c2VyZGF0dW1fbWFrZV9pdGVtLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNjczPUNPTkZJR0ZTX0FUVFJfUk8oLCB0cmFuc21pdF9lcnJvcnMpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2NzQtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY3NTpzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2F0dHJpYnV0ZSAqbmV0Y29uc29sZV90YXJnZXRfYXR0cnNbXSA9IHtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjc2LVx0XHUwMDI2YXR0cl9lbmFibGVkLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNjk0PXN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfdGFyZ2V0X3JlbGVhc2Uoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzAxLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE3MDI6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdmc19pdGVtX29wZXJhdGlvbnMgbmV0Y29uc29sZV90YXJnZXRfaXRlbV9vcHMgPSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTcwMy1cdC5yZWxlYXNlXHRcdD0gbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZSxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTcxMj1zdGF0aWMgdm9pZCBpbml0X3RhcmdldF9jb25maWdfZ3JvdXAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTcxNy1cdFx0XHRcdCAgICBcdTAwMjZ1c2VyZGF0YV90eXBlKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzE4Olx0Y29uZmlnZnNfYWRkX2RlZmF1bHRfZ3JvdXAoXHUwMDI2bnQtXHUwMDNldXNlcmRhdGFfZ3JvdXAsIFx1MDAyNm50LVx1MDAzZWdyb3VwKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzE5LX1cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTc0Mj1zdGF0aWMgc3RydWN0IGNvbmZpZ19ncm91cCAqbWFrZV9uZXRjb25zb2xlX3RhcmdldChzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTc0OC1cdC8qIENoZWNraW5nIGlmIGEgdGFyZ2V0IGJ5IHRoaXMgbmFtZSB3YXMgY3JlYXRlZCBhdCBib290IHRpbWUuICBJZiBzbyxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzQ5Olx0ICogYXR0YWNoIGEgY29uZmlnZnMgZW50cnkgdG8gdGhhdCB0YXJnZXQuICBUaGlzIGVuYWJsZXMgZHluYW1pY1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3NTAtXHQgKiBjb250cm9sLlxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNzc2PXN0YXRpYyB2b2lkIGRyb3BfbmV0Y29uc29sZV90YXJnZXQoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4MjctXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTgyODpzdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ2ZzX2dyb3VwX29wZXJhdGlvbnMgbmV0Y29uc29sZV9zdWJzeXNfZ3JvdXBfb3BzID0ge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4MjktXHQubWFrZV9ncm91cFx0PSBtYWtlX25ldGNvbnNvbGVfdGFyZ2V0LFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xODMzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSBuZXRjb25zb2xlX3N1YnN5c190eXBlID0ge1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODM3LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4Mzg6LyogVGhlIG5ldGNvbnNvbGUgY29uZmlnZnMgc3Vic3lzdGVtICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTgzOTpzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSBuZXRjb25zb2xlX3N1YnN5cyA9IHtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODQwLVx0LnN1X2dyb3VwXHQ9IHtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg0Ny1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODQ4OnN0YXRpYyB2b2lkIHBvcHVsYXRlX2NvbmZpZ2ZzX2l0ZW0oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODQ5LVx0XHRcdFx0ICAgaW50IGNtZGxpbmVfY291bnQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI2MjM9c3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfcGFyYW1fdGFyZ2V0KGNoYXIgKnRhcmdldF9jb25maWcsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2NTctXHQgKiB5ZXQgb24gdGFyZ2V0X2xpc3QsIHNvIGEgbmV0ZGV2IGV2ZW50IGNhbm5vdCByZWFjaCBpdCBoZXJlLCBidXRcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjU4Olx0ICogbWlycm9yIHRoZSBjb25maWdmcyBwYXRoIGZvciBzeW1tZXRyeS5cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjU5LVx0ICovXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2NzQtXHR9XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjY3NTpcdHBvcHVsYXRlX2NvbmZpZ2ZzX2l0ZW0obnQsIGNtZGxpbmVfY291bnQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2NzYtXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI3OTY9c3RhdGljIHZvaWQgX19leGl0IGNsZWFudXBfbmV0Y29uc29sZSh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yODA4LVx0LypcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyODA5Olx0ICogVGFyZ2V0cyBjcmVhdGVkIHZpYSBjb25maWdmcyBwaW4gcmVmZXJlbmNlcyBvbiBvdXIgbW9kdWxlXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjgxMC1cdCAqIGFuZCB3b3VsZCBmaXJzdCBiZSBybWRpcigyKSYjMzk7ZWQgZnJvbSB1c2Vyc3BhY2UuIFdlIHJlYWNoXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA0OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1OTgwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk5ldGNvbnNvbGUmIzM5O3MgRHluYW1pYyBUYXJnZXQgQ3JlYXRpb24gYW5kIFBhY2tldCBIYW5kbGluZyoqCgpBbHJpZ2h0LCB0aGlzIGlzIGludGVyZXN0aW5nLiBJJiMzOTttIHNlZWluZyB0aGF0IG5ldGNvbnNvbGUgdGFyZ2V0cyBjYW4gYmUgZHluYW1pY2FsbHkgY3JlYXRlZCB1c2luZyBjb25maWdmcyDigJMgYnJpbGxpYW50ISBKdXN0IGBta2RpciAvc3lzL2tlcm5lbC9jb25maWcvbmV0Y29uc29sZS90YXJnZXQxYCBhbmQgY29uZmlndXJlIGl0LiBTZXR0aW5nIHRoZSBgZGV2X25hbWVgIGFuZCBlbmFibGluZyBpdCBnZXRzIHRoaW5ncyByb2xsaW5nLiBTZXR0aW5nIGBlbmFibGVkYCB0byBgMWAgdHJpZ2dlcnMgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cChudClgLiAgVGhlbiwgc3RhbmRhcmQgYHByaW50a2AgbWVzc2FnZXMgYXJlIHJvdXRlZCB0aHJvdWdoIGBuZXRwb2xsX3NlbmRfc2tiKG5wLCBza2IpYC4KCk5vdywgd2hlbiBgbmV0cG9sbF9zZW5kX3NrYmAga2lja3MgaW4sIGl0IG1vdmVzIGludG8gYF9fbmV0cG9sbF9zZW5kX3NrYihucCwgc2tiKWAuIFRoZSByZWFsIG1lYXQgb2YgaXQgaXMgd2hhdCBoYXBwZW5zIHdoZW4gdGhlIGRldmljZSB0cmFuc21pdCBmYWlscyBvciB0aGUgcXVldWUgaXMgc2F0dXJhdGVkLiBJdCYjMzk7cyBzdXBwb3NlZCB0byBxdWV1ZSBpbnRvIGBucGluZm8tJmd0O3R4cWAsIGJ1dCB0aGVyZSYjMzk7cyBhIHBhdGNoIGhlcmUuLi4KCkhvbGQgb24sIEkgc2VlIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZy4gSWYgdGhlIGRldmljZSB4bWl0IGlzbiYjMzk7dCBjb21wbGV0ZSwgYW5kIHRoZSBxdWV1ZSBsZW5ndGggZXhjZWVkcyBgTkVUUE9MTF9UWFFfTUFYYCwgaXQgKmRyb3BzKiB0aGUgU0tCIHJpZ2h0IHRoZXJlIHdpdGggYGRldl9rZnJlZV9za2JfaXJxKHNrYilgISBUaGF0JiMzOTtzIGEgY3J1Y2lhbCByYXRlLWxpbWl0aW5nIG1lY2hhbmlzbS4gIE90aGVyd2lzZSwgaXQgcXVldWVzIHRoZSBTS0IgYW5kIHNjaGVkdWxlcyBhIGRlbGF5ZWQgd29yayB3aXRoIGBzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmFtcDtucGluZm8tJmd0O3R4X3dvcmssMClgLgoKQW5kIGZpbmFsbHksIGBxdWV1ZV9wcm9jZXNzYOKApiBJIG5lZWQgdG8gY2hlY2sgb3V0IHdoYXQgdGhhdCB3b3JrIGl0ZW0gaXMgZG9pbmcgaW4gYG5ldC9jb3JlL25ldHBvbGwuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIHF1ZXVlZCBTS0JzIGFyZSBhY3R1YWxseSBwcm9jZXNzZWQgZm9yIHRyYW5zbWlzc2lvbi4gIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgdGhlIGRldGFpbHMgb2YgdGhhdCBwcm9jZXNzaW5nIGxvb3AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA0OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0cG9sbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA5MDpcdHN0YXRpYyB2b2lkIHF1ZXVlX3Byb2Nlc3Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuICA5MTpcdHtcbiAgOTI6XHRcdHN0cnVjdCBuZXRwb2xsX2luZm8gKm5waW5mbyA9XG4gIDkzOlx0XHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmV0cG9sbF9pbmZvLCB0eF93b3JrLndvcmspO1xuICA5NDpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiAgOTU6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gIDk2Olx0XG4gIDk3Olx0XHR3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKFx1MDAyNm5waW5mby1cdTAwM2V0eHEpKSkge1xuICA5ODpcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLVx1MDAzZWRldjtcbiAgOTk6XHRcdFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxO1xuIDEwMDpcdFx0XHR1bnNpZ25lZCBpbnQgcV9pbmRleDtcbiAxMDE6XHRcbiAxMDI6XHRcdFx0aWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpIHx8ICFuZXRpZl9ydW5uaW5nKGRldikpIHtcbiAxMDM6XHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAxMDQ6XHRcdFx0XHRjb250aW51ZTtcbiAxMDU6XHRcdFx0fVxuIDEwNjpcdFxuIDEwNzpcdFx0XHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4gMTA4Olx0XHRcdC8qIGNoZWNrIGlmIHNrYi1cdTAwM2VxdWV1ZV9tYXBwaW5nIGlzIHN0aWxsIHZhbGlkICovXG4gMTA5Olx0XHRcdHFfaW5kZXggPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTtcbiAxMTA6XHRcdFx0aWYgKHVubGlrZWx5KHFfaW5kZXggXHUwMDNlPSBkZXYtXHUwMDNlcmVhbF9udW1fdHhfcXVldWVzKSkge1xuIDExMTpcdFx0XHRcdHFfaW5kZXggPSBxX2luZGV4ICUgZGV2LVx1MDAzZXJlYWxfbnVtX3R4X3F1ZXVlcztcbiAxMTI6XHRcdFx0XHRza2Jfc2V0X3F1ZXVlX21hcHBpbmcoc2tiLCBxX2luZGV4KTtcbiAxMTM6XHRcdFx0fVxuIDExNDpcdFx0XHR0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgcV9pbmRleCk7XG4gMTE1Olx0XHRcdEhBUkRfVFhfTE9DSyhkZXYsIHR4cSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTtcbiAxMTY6XHRcdFx0aWYgKG5ldGlmX3htaXRfZnJvemVuX29yX3N0b3BwZWQodHhxKSB8fFxuIDExNzpcdFx0XHQgICAgIWRldl94bWl0X2NvbXBsZXRlKG5ldHBvbGxfc3RhcnRfeG1pdChza2IsIGRldiwgdHhxKSkpIHtcbiAxMTg6XHRcdFx0XHRza2JfcXVldWVfaGVhZChcdTAwMjZucGluZm8tXHUwMDNldHhxLCBza2IpO1xuIDExOTpcdFx0XHRcdEhBUkRfVFhfVU5MT0NLKGRldiwgdHhxKTtcbiAxMjA6XHRcdFx0XHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4gMTIxOlx0XG4gMTIyOlx0XHRcdFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNm5waW5mby1cdTAwM2V0eF93b3JrLCBIWi8xMCk7XG4gMTIzOlx0XHRcdFx0cmV0dXJuO1xuIDEyNDpcdFx0XHR9XG4gMTI1Olx0XHRcdEhBUkRfVFhfVU5MT0NLKGRldiwgdHhxKTtcbiAxMjY6XHRcdFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuIDEyNzpcdFx0fVxuIDEyODpcdH1cbiAxMjk6XHRcbiAxMzA6XHRzdGF0aWMgaW50IG5ldGlmX2xvY2FsX3htaXRfYWN0aXZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gMTMxOlx0e1xuIDEzMjpcdFx0aW50IGk7XG4gMTMzOlx0XG4gMTM0Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkZXYtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbiAxMzU6XHRcdFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIGkpO1xuIDEzNjpcdFxuIDEzNzpcdFx0XHRpZiAobmV0aWZfdHhfb3duZWQodHhxLCBzbXBfcHJvY2Vzc29yX2lkKCkpKVxuIDEzODpcdFx0XHRcdHJldHVybiAxO1xuIDEzOTpcdFx0fVxuIDE0MDpcdFxuIDE0MTpcdFx0cmV0dXJuIDA7XG4gMTQyOlx0fVxuIDE0MzpcdFxuIDE0NDpcdHN0YXRpYyB2b2lkIHBvbGxfb25lX25hcGkoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKVxuIDE0NTpcdHtcbiAxNDY6XHRcdGludCB3b3JrO1xuIDE0NzpcdFxuIDE0ODpcdFx0LyogSWYgd2Ugc2V0IHRoaXMgYml0IGJ1dCBzZWUgdGhhdCBpdCBoYXMgYWxyZWFkeSBiZWVuIHNldCxcbiAxNDk6XHRcdCAqIHRoYXQgaW5kaWNhdGVzIHRoYXQgbmFwaSBoYXMgYmVlbiBkaXNhYmxlZCBhbmQgd2UgbmVlZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzY3NQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDY3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldGNvbnNvbGUgVFggUGF0aCBhbmQgUG90ZW50aWFsIFBhY2tldCBEcm9wcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIGZvY3VzZWQgb24gdGhlIGBxdWV1ZV9wcm9jZXNzYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBpZiB0aGUgZGV2aWNlIHRyYW5zbWl0IGlzbiYjMzk7dCBpbW1lZGlhdGVseSBjb21wbGV0ZSAoYCFkZXZfeG1pdF9jb21wbGV0ZSguLi4pYCksIHRoZSBjb2RlIHF1ZXVlcyB0aGUgU0tCIChgc2tiX3F1ZXVlX2hlYWRgKSwgdW5sb2NrcyB0aGUgaGFyZHdhcmUsIHJlc3RvcmVzIGludGVycnVwdHMsIGFuZCB0aGVuIHNjaGVkdWxlcyBhIGRlbGF5ZWQgd29yayBpdGVtLiBUaGlzIHNlZW1zIHByZXR0eSBzdGFuZGFyZC4KCk5vdywgdGhlIGNydWNpYWwgcG9pbnQgaXMgY29tcGFyaW5nIHRoaXMgdG8gKmJlZm9yZSogdGhlIHBhdGNoLiBJIHJlY2FsbCB0aGF0IGlmIHRoZSBkZXZpY2Ugd2FzIHN0b3BwZWQgb3IgY29udGludW91c2x5IGZhaWxpbmcgdG8gdHJhbnNtaXQsIG5ldyBuZXRjb25zb2xlIG1lc3NhZ2VzIChmcm9tIGBwcmludGtgIG9yIGBkbWVzZ2ApIHdvdWxkIHRyaWdnZXIgYG5ldHBvbGxfc2VuZF9za2JgLCB3aGljaCB0aGVuIGNhbGxzIGBfX25ldHBvbGxfc2VuZF9za2JgLgoKSW4gdGhlIHByZS1wYXRjaCB2ZXJzaW9uLCB3aXRoaW4gYF9fbmV0cG9sbF9zZW5kX3NrYmAsIGEgY2hlY2sgYHNrYl9xdWV1ZV9sZW4oJmFtcDtucGluZm8tJmd0O3R4cSkgPT0gMGAgd291bGQgYmUgZmFsc2UgYmVjYXVzZSB0aGVyZSYjMzk7cyBhbHJlYWR5IGFuIFNLQiBxdWV1ZWQuIFRoaXMgd291bGQgY2F1c2UgbGluZXMgMjkzLTMyMiB0byBiZSBza2lwcGVkLiBDcml0aWNhbGx5LCB0aGUgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24gdW5jb25kaXRpb25hbGx5IHF1ZXVlZCBldmVyeSBuZXcgU0tCIHVzaW5nIGBza2JfcXVldWVfdGFpbCgmYW1wO25waW5mby0mZ3Q7dHhxLCBza2IpYC4KCkhvd2V2ZXIsIHRoZSB1cGRhdGVkIGNvZGUgaW50cm9kdWNlcyBhIG1heGltdW0gcXVldWUgbGVuZ3RoIGNoZWNrOiBgaWYgKHNrYl9xdWV1ZV9sZW4oJmFtcDtucGluZm8tJmd0O3R4cSkgJmd0Oz0gTkVUUE9MTF9UWFFfTUFYKWAuIElmIHRoZSBxdWV1ZSBpcyBmdWxsLCB0aGUgbmV3IFNLQiBpcyBub3cgKmRyb3BwZWQqIHdpdGggYGRldl9rZnJlZV9za2JfaXJxKHNrYilgISBUaGlzIGlzIHRoZSBmdW5kYW1lbnRhbCBjaGFuZ2UuIElmIGBkZXZfeG1pdF9jb21wbGV0ZShzdGF0dXMpYCBpcyBmYWxzZSAobGlrZWx5IGR1ZSB0byBgTkVUREVWX1RYX0JVU1lgKSwgdGhlIFNLQiBlbmRzIHVwIGluIHRoaXMgbmV3IGRyb3AgcGF0aCB3aGVuIHRoZSBxdWV1ZSBpcyBmdWxsLgoKQSBxdWVzdGlvbiB0aGF0IGFyb3NlIGR1cmluZyBteSBhbmFseXNpcyBpcyBpZiBgX19uZXRwb2xsX3NlbmRfc2tiYCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gWWVzLCBpdCYjMzk7cyBkZWZpbmVkIGFzIGBzdGF0aWMgbmV0ZGV2X3R4X3QgX19uZXRwb2xsX3NlbmRfc2tiKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYilgLiBUaGlzIG1lYW5zIGl0JiMzOTtzIG9ubHkgdmlzaWJsZSB3aXRoaW4gdGhpcyB0cmFuc2xhdGlvbiB1bml0LiBJdCYjMzk7cyBjYWxsZWQgYnkgdGhlIHB1YmxpYyBmdW5jdGlvbiBgbmV0cG9sbF9zZW5kX3NrYihzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IpYC4gVGhpcyBvcGVucyB0aGUgcG9zc2liaWxpdHkgb2YgaW5saW5pbmcuIFNpbmNlIGBfX25ldHBvbGxfc2VuZF9za2JgIGlzIG9ubHkgZXZlciBjYWxsZWQgZnJvbSBgbmV0cG9sbF9zZW5kX3NrYmAsIGl0IHNob3VsZCBiZSBzYWZlIHRvIGlubGluZSB0aGUgZm9ybWVyIGludG8gdGhlIGxhdHRlci4gVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTtsbCBxdWlja2x5IGdyZXAgdGhlIGNvZGUgdG8gY2hlY2sgdGhhdCB0aGVyZSBhcmUgbm8gb3RoZXIgY2FsbCBzaXRlcyBmb3IgYF9fbmV0cG9sbF9zZW5kX3NrYmAgd2l0aGluIGBuZXRwb2xsLmNgLiBUaGlzIHdvdWxkIHN0cmVhbWxpbmUgdGhlIGNvZGUgYW5kIHJlZHVjZSB0aGUgZnVuY3Rpb24gY2FsbCBvdmVyaGVhZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDQ6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19uZXRwb2xsX3NlbmRfc2tiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL25ldHBvbGwuYz0yNTg9c3RhdGljIGludCBuZXRwb2xsX293bmVyX2FjdGl2ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9jb3JlL25ldHBvbGwuYy0yNjktLyogY2FsbCB3aXRoIElSUSBkaXNhYmxlZCAqL1xubmV0L2NvcmUvbmV0cG9sbC5jOjI3MDpzdGF0aWMgbmV0ZGV2X3R4X3QgX19uZXRwb2xsX3NlbmRfc2tiKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9jb3JlL25ldHBvbGwuYy0yNzEte1xuLS1cbm5ldC9jb3JlL25ldHBvbGwuYz0zMzg9bmV0ZGV2X3R4X3QgbmV0cG9sbF9zZW5kX3NrYihzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvbmV0cG9sbC5jLTM0Ny1cdFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xubmV0L2NvcmUvbmV0cG9sbC5jOjM0ODpcdFx0cmV0ID0gX19uZXRwb2xsX3NlbmRfc2tiKG5wLCBza2IpO1xubmV0L2NvcmUvbmV0cG9sbC5jLTM0OS1cdFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTIwMQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDc2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBgX19uZXRwb2xsX3NlbmRfc2tiYCBhbmQgaXRzIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIGBfX25ldHBvbGxfc2VuZF9za2JgIGlzIGEgc3RhdGljIGZ1bmN0aW9uIGFuZCBvbmx5IGNhbGxlZCBmcm9tIGBuZXRwb2xsX3NlbmRfc2tiYCwgc28gdGhlIGNvbXBpbGVyIGlzICpsaWtlbHkqIHRvIGlubGluZSBpdC4gVGhhdCBtZWFucyBgbmV0cG9sbF9zZW5kX3NrYmAgZGVmaW5pdGVseSBuZWVkcyB0byBiZSBpbiB0aGUgRm9jdXNTeW1ib2xzIGxpc3QsIGFuZCB3ZSBjYW4gaW5jbHVkZSBgX19uZXRwb2xsX3NlbmRfc2tiYCB0b28sIGJ1dCBvbmx5IGlmIGl0ICppc24mIzM5O3QqIGJlaW5nIGlubGluZWQuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IGlzIHRoaXMgY2hhbmdlIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZz8gTGV0JiMzOTtzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdC4KClRoZSBndWlkZWxpbmVzIGFyZSBwcmV0dHkgY2xlYXI6IFJlYWNoYWJpbGl0eSBpcyB0aGUgcHJpbWFyeSBnYXRlLiBXZSBjYW4gb25seSBmdXp6IGNvZGUgdGhhdCBleGVjdXRlcyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFVucmVhY2hhYmxlIGNvZGUgaXMgYSBuby1nby4gV2UgaGF2ZSBuZWdhdGl2ZSBjcml0ZXJpYSBsaWtlIG5vbi1rZXJuZWwsIG5vbi1leGVjdXRhYmxlIGNoYW5nZXMgYW5kIHVucmVhY2hhYmxlIGhhcmR3YXJlIG9yIGV4ZWN1dGlvbiBwYXRocy4gIFRoaW5ncyBsaWtlIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMgdGhhdCBuZWVkIHBoeXNpY2FsIEFTSUNzIG9yIFBDSSBob3QtdW5wbHVnIGFyZSBvdXQuIFBvc2l0aXZlIGNyaXRlcmlhIGluY2x1ZGUgY29yZSBzdWJzeXN0ZW1zLCByZWZhY3RvcmluZ3MsIGFzc2VydGlvbnMsIGFuZCByZWFjaGFibGUgZHJpdmVycy9wcm90b2NvbHMuCgpSaWdodCwgdGhlIG1vZGlmaWVkIGZpbGUgaXMgYG5ldC9jb3JlL25ldHBvbGwuY2AsIGFuZCB0aGF0JiMzOTtzIHBhcnQgb2YgY29yZSBuZXR3b3JraW5nISBHb29kIHN0YXJ0LiBUaGUgY2hhbmdlIGl0c2VsZiBpcyBpbiBgX19uZXRwb2xsX3NlbmRfc2tiKClgIGFuZCBpcyByZWxhdGVkIHRvIHRoZSB0cmFuc21pdCBxdWV1ZTogSXQgY2FwcyB0aGUgcXVldWUgbGVuZ3RoIGFuZCBmcmVlcyBza2JzIG9uIG92ZXJmbG93IHRvIHByZXZlbnQgdW5ib3VuZGVkIG1lbW9yeSBjb25zdW1wdGlvbiB3aGVuIHRoZSBlZ3Jlc3MgbmV0ZGV2IGlzIGJ1c3kuIGBuZXRwb2xsYCBzdXBwb3J0cyB2aXJ0dWFsIGRldmljZXM6IGR1bW15LCB2ZXRoLCBicmlkZ2UsIGJvbmQsIHRlYW0sIG1hY3ZsYW4sIHdpdGggYG5ldGNvbnNvbGVgIG9yIGJvbmRpbmcvYnJpZGdlL3RlYW0uICBEZWZpbml0ZWx5IHNvdW5kcyBsaWtlIHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIGV4ZXJjaXNlZCBpbiBhIHN0YW5kYXJkIHNldHVwLgoKTGV0JiMzOTtzIGNoZWNrIHRoZSBjb25maWd1cmF0aW9ucy4gTG9va2luZyBhdCB0aGUgYE1ha2VmaWxlYCwgYG9iai0kKENPTkZJR19ORVRQT0xMKSAmIzQzOz0gbmV0cG9sbC5vYCwgdGhlbiBgS2NvbmZpZ2A6IHdlIG5lZWQgYE5FVFBPTExgLCB3aGljaCBpcyBhIGBkZWZfYm9vbGAgZm9yIGBORVRDT05TT0xFYC4gYE5FVENPTlNPTEVgIHJlcXVpcmVzIGBQUklOVEtgLCBhbmQgdGhlcmUmIzM5O3MgYWxzbyBgTkVUQ09OU09MRV9EWU5BTUlDYCB0aGF0IGRlcGVuZHMgb24gYE5FVENPTlNPTEVgIGFuZCBgQ09ORklHRlNfRlNgLiBJbiBgaW5jbHVkZS9saW51eC9uZXRwb2xsLmhgLCBgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJgIGlzIGBkZWZfYm9vbCBORVRQT0xMYC4KCkkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3Igb3RoZXIgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBvciBzZWxlY3Rpb25zIG9mIGBORVRQT0xMYCB1c2luZyBhIGdyZXBwZXIuIEp1c3QgdG8gYmUgdGhvcm91Z2guIEJ1dCwgYmFzZWQgb24gd2hhdCBJJiMzOTt2ZSBzZWVuLCBpdCBsb29rcyB2ZXJ5IHByb21pc2luZy4gVGhpcyBjaGFuZ2UsIGluIGNvcmUgbmV0d29ya2luZywgYWZmZWN0aW5nIGEgZnVuY3Rpb24gdGhhdCYjMzk7cyBwYXJ0IG9mIGBuZXRwb2xsYCB3aGljaCBpcyBjb25maWd1cmFibGUgZm9yIHZpcnR1YWwgZGV2aWNlcywgc2VlbXMgKnZlcnkqIHJlYWNoYWJsZS4gSSYjMzk7ZCBsZWFuIHRvd2FyZHMgdGhpcyBiZWluZyBhIGhpZ2gtcHJpb3JpdHkgZnV6eiB0YXJnZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA0OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05FVFBPTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGU9Mjc9b2JqLSQoQ09ORklHX05FVF9QS1RHRU4pICYjNDM7PSBwa3RnZW4ub1xubmV0L2NvcmUvTWFrZWZpbGU6Mjg6b2JqLSQoQ09ORklHX05FVFBPTEwpICYjNDM7PSBuZXRwb2xsLm9cbm5ldC9jb3JlL01ha2VmaWxlLTI5LW9iai0kKENPTkZJR19GSUJfUlVMRVMpICYjNDM7PSBmaWJfcnVsZXMub1xuLS1cbm5ldC9jb3JlL2Rldi5jPTc2MTI9dm9pZCBuZXRpZl9uYXBpX2FkZF93ZWlnaHRfbG9ja2VkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZGV2LmMtNzYzMS1cdG5hcGktXHUwMDNlZGV2ID0gZGV2O1xubmV0L2NvcmUvZGV2LmM6NzYzMjojaWZkZWYgQ09ORklHX05FVFBPTExcbm5ldC9jb3JlL2Rldi5jLTc2MzMtXHRuYXBpLVx1MDAzZXBvbGxfb3duZXIgPSAtMTtcbi0tXG5uZXQvY29yZS9kZXYuYz0xMzI5OT1zdGF0aWMgdm9pZCBfX2luaXQgbmV0X2Rldl9zdHJ1Y3RfY2hlY2sodm9pZClcbi0tXG5uZXQvY29yZS9kZXYuYy0xMzM0NC1cdENBQ0hFTElORV9BU1NFUlRfR1JPVVBfTUVNQkVSKHN0cnVjdCBuZXRfZGV2aWNlLCBuZXRfZGV2aWNlX3JlYWRfcngsIG5kX25ldCk7XG5uZXQvY29yZS9kZXYuYzoxMzM0NTojaWZkZWYgQ09ORklHX05FVFBPTExcbm5ldC9jb3JlL2Rldi5jLTEzMzQ2LVx0Q0FDSEVMSU5FX0FTU0VSVF9HUk9VUF9NRU1CRVIoc3RydWN0IG5ldF9kZXZpY2UsIG5ldF9kZXZpY2VfcmVhZF9yeCwgbnBpbmZvKTtcbi0tXG5uZXQvY29yZS9uZXRwb2xsLmMtNDYtICovXG5uZXQvY29yZS9uZXRwb2xsLmM6NDc6I2RlZmluZSBORVRQT0xMX1RYUV9NQVhcdDEwMjRcbm5ldC9jb3JlL25ldHBvbGwuYy00OC1cbi0tXG5uZXQvY29yZS9uZXRwb2xsLmM9MjcwPXN0YXRpYyBuZXRkZXZfdHhfdCBfX25ldHBvbGxfc2VuZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL25ldHBvbGwuYy0zMjQtXHRpZiAoIWRldl94bWl0X2NvbXBsZXRlKHN0YXR1cykpIHtcbm5ldC9jb3JlL25ldHBvbGwuYzozMjU6XHRcdGlmIChza2JfcXVldWVfbGVuKFx1MDAyNm5waW5mby1cdTAwM2V0eHEpIFx1MDAzZT0gTkVUUE9MTF9UWFFfTUFYKSB7XG5uZXQvY29yZS9uZXRwb2xsLmMtMzI2LVx0XHRcdGRldl9rZnJlZV9za2JfaXJxKHNrYik7XG4tLVxubmV0L2NvcmUvbmV0cG9sbC5jPTM1NT1pbnQgX19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxubmV0L2NvcmUvbmV0cG9sbC5jLTM2MC1cbm5ldC9jb3JlL25ldHBvbGwuYzozNjE6XHRpZiAobmRldi1cdTAwM2Vwcml2X2ZsYWdzIFx1MDAyNiBJRkZfRElTQUJMRV9ORVRQT0xMKSB7XG5uZXQvY29yZS9uZXRwb2xsLmMtMzYyLVx0XHRucF9lcnIobnAsIFwmIzM0OyVzIGRvZXNuJiMzOTt0IHN1cHBvcnQgcG9sbGluZywgYWJvcnRpbmdcXG5cJiMzNDssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA0OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMjE3CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkludmVzdGlnYXRpbmcgYE5FVFBPTExgIENyb3NzLVJlZmVyZW5jZXMqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGJyb2FkZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgYE5FVFBPTExgIGlzIHV0aWxpemVkIHRocm91Z2hvdXQgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHNwYWNlLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBicm9hZGVyIEtjb25maWcgbGFuZHNjYXBlLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBvciBjb25mbGljdHMgdGhhdCBtaWdodCBhcmlzZSBmcm9tIGhvdyBpdCYjMzk7cyBjb25maWd1cmVkIGluIG90aGVyIGFyZWFzLiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O0xldCYjMzk7cyBjaGVjayBgTkVUUE9MTGAgaW4gb3RoZXIgS2NvbmZpZ3MuJiMzNDsgVGhhdCYjMzk7cyB0aGUgZmlyc3QgbG9naWNhbCBzdGVwLiBHZXQgYSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBORVRQT0xMfGRlcGVuZHMgb24gTkVUUE9MTCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA0OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNDAwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQ2hlY2tpbmcgdGhlIGBORVRDT05TT0xFYCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIGJlZm9yZSB3ZSBkaXZlIGRlZXBlciwgbGV0JiMzOTtzIGp1c3QgcXVpY2tseSBjb25maXJtIHRoYXQgYE5FVENPTlNPTEVgIGlzIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGVsZW1lbnQgZm9yLi4uIHdlbGwsIHlvdSBrbm93LCBuZXR3b3JrIGNvbnNvbGUgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGl0JiMzOTtzIHNldCB1cCBiZWZvcmUgZ29pbmcgZnVydGhlciB3aXRoIHRyb3VibGVzaG9vdGluZyBvciBhbnkgb3RoZXIgcmVsYXRlZCB0YXNrLCBhcyBgTkVUQ09OU09MRWAgaXMgdGhlIGZvdW5kYXRpb24gb24gd2hpY2ggbWFueSBuZXR3b3JrLXJlbGF0ZWQgdGFza3MgZGVwZW5kLiBJdOKAmXMgdGhlIG9idmlvdXMgZmlyc3QgdGhpbmcgdG8gdmVyaWZ5LiBBIHF1aWNrIGNoZWNrIG9mIHRoZSBLY29uZmlnIGZpbGVzIHdpbGwgZWl0aGVyIHByb3ZpZGUgYW4gaW5zdGFudCBjb25maXJtYXRpb24gYW5kIGVuYWJsZSBtZSB0byBnZXQgYSBydW5uaW5nIGtlcm5lbC4gSXQgd2lsbCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQgYmVmb3JlIEkgcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDQ6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XFxiTkVUQ09OU09MRVxcYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTMxOD1jb25maWcgTUFDU0VDXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMjYtXG5kcml2ZXJzL25ldC9LY29uZmlnOjMyNzpjb25maWcgTkVUQ09OU09MRVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMjgtXHR0cmlzdGF0ZSBcJiMzNDtOZXR3b3JrIGNvbnNvbGUgbG9nZ2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz0zMzQ9Y29uZmlnIE5FVENPTlNPTEVfRFlOQU1JQ1xuZHJpdmVycy9uZXQvS2NvbmZpZy0zMzUtXHRib29sIFwmIzM0O0R5bmFtaWMgcmVjb25maWd1cmF0aW9uIG9mIGxvZ2dpbmcgdGFyZ2V0c1wmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzozMzY6XHRkZXBlbmRzIG9uIE5FVENPTlNPTEUgXHUwMDI2XHUwMDI2IFNZU0ZTIFx1MDAyNlx1MDAyNiBDT05GSUdGU19GUyBcdTAwMjZcdTAwMjYgXFxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzM3Olx0XHRcdCEoTkVUQ09OU09MRT15IFx1MDAyNlx1MDAyNiBDT05GSUdGU19GUz1tKVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMzgtXHRzZWxlY3QgUFJJTlRLX0VYRUNVVElPTl9DVFhcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTM0NT1jb25maWcgTkVUQ09OU09MRV9FWFRFTkRFRF9MT0dcbmRyaXZlcnMvbmV0L0tjb25maWctMzQ2LVx0Ym9vbCBcJiMzNDtTZXQga2VybmVsIGV4dGVuZGVkIG1lc3NhZ2UgYnkgZGVmYXVsdFwmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzozNDc6XHRkZXBlbmRzIG9uIE5FVENPTlNPTEVcbmRyaXZlcnMvbmV0L0tjb25maWctMzQ4LVx0ZGVmYXVsdCBuXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz0zNjc9Y29uZmlnIE5FVFBPTExcbmRyaXZlcnMvbmV0L0tjb25maWc6MzY4Olx0ZGVmX2Jvb2wgTkVUQ09OU09MRVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNjktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FseGVkYS94Z21hYy5jPTEzNzg9c3RhdGljIGlycXJldHVybl90IHhnbWFjX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FseGVkYS94Z21hYy5jLTE0MjctI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWx4ZWRhL3hnbWFjLmM6MTQyODovKiBQb2xsaW5nIHJlY2VpdmUgLSB1c2VkIGJ5IE5FVENPTlNPTEUgYW5kIG90aGVyIGRpYWdub3N0aWMgdG9vbHNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhbHhlZGEveGdtYWMuYy0xNDI5LSAqIHRvIGFsbG93IG5ldHdvcmsgSS9PIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4gKi9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zYW1zdW5nL3N4Z2JlL3N4Z2JlX21haW4uYz0xODQ5PXN0YXRpYyB2b2lkIHN4Z2JlX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2Ftc3VuZy9zeGdiZS9zeGdiZV9tYWluLmMtMTkxOS0gKiBEZXNjcmlwdGlvbjpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NhbXN1bmcvc3hnYmUvc3hnYmVfbWFpbi5jOjE5MjA6ICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJ5IE5FVENPTlNPTEUgYW5kIG90aGVyIGRpYWdub3N0aWMgdG9vbHNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NhbXN1bmcvc3hnYmUvc3hnYmVfbWFpbi5jLTE5MjEtICogdG8gYWxsb3cgbmV0d29yayBJL08gd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3ZpYS92aWEtdmVsb2NpdHkuYz0yMjkwPXN0YXRpYyBpbnQgdmVsb2NpdHlfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC92aWEvdmlhLXZlbG9jaXR5LmMtMjM2Ny0gKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdmlhL3ZpYS12ZWxvY2l0eS5jOjIzNjg6ICogIFVzZWQgYnkgTkVUQ09OU09MRSBhbmQgb3RoZXIgZGlhZ25vc3RpYyB0b29scyB0byBhbGxvdyBuZXR3b3JrIEkvUFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdmlhL3ZpYS12ZWxvY2l0eS5jLTIzNjktICogIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDQ6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIzNTQKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA3OTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBuZXRjb25zb2xlYCBhbmQgYG5ldHBvbGxgIENvbmZpZ3VyYXRpb24gYW5kIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBgTkVUQ09OU09MRWAgYW5kIGBORVRQT0xMYCBjb25maWd1cmF0aW9uLCBhbmQgaXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gYE5FVENPTlNPTEVgIHNldHMgYE5FVFBPTExgLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhlbiBgTkVUQ09OU09MRV9EWU5BTUlDYCBlbmFibGVzIHRoZSBhYmlsaXR5IHRvIGR5bmFtaWNhbGx5IHJlY29uZmlndXJlIHRoZSB0YXJnZXQgdmlhIGNvbmZpZ2ZzIC0gd2hpY2ggaXMga2V5IGZvciB0b29scyBsaWtlIHN5emthbGxlciBvciB1c2Vyc3BhY2UgcHJvZ3JhbXMuIFNvLCB0aG9zZSB0d28gYXJlIHRoZSBtYWluIGNvbmZpZ3MgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4gQWN0dWFsbHksIGBORVRQT0xMYCBpcyBqdXN0IGEgYGRlZl9ib29sYCB0aGF0IG1pcnJvcnMgdGhlIHZhbHVlIG9mIGBORVRDT05TT0xFYC4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29kZS4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYWZmZWN0ZWQgZnVuY3Rpb25zLCB1c2luZyB0aGUgRm9jdXNTeW1ib2xzIHRvIHRhcmdldCB0aGUgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIGRpcmVjdGx5IG1vZGlmaWVkLCBvciBhcmUgY2FsbGVkLiBJIHNlZSB0aGF0IHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIGRpcmVjdGx5IG1vZGlmaWVkIGlzIGBfX25ldHBvbGxfc2VuZF9za2JgLiBUaGVyZSYjMzk7cyBhbHNvIGEgbm9uLXN0YXRpYyBleHBvcnRlZCB3cmFwcGVyIGZ1bmN0aW9uLCBgbmV0cG9sbF9zZW5kX3NrYmAuIEFuZCB0aGVuLCB0aGUgZW50cnkgcG9pbnRzIGBuZXRwb2xsX3NlbmRfdWRwYCBhbmQgdGhlIGBxdWV1ZV9wcm9jZXNzYCwgdGhhdCB3b3JrcyBvbiBgbnBpbmZvLSZndDt0eHFgIC0gd2hpY2ggaXMgYSBzaWduaWZpY2FudCBwYXJ0IG9mIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkuIEkgc2hvdWxkIG5vdGUgdGhhdCBgcXVldWVfcHJvY2Vzc2AgaXMgc3RhdGljIGluIGBuZXQvY29yZS9uZXRwb2xsLmNgLCBzbyBpdCYjMzk7cyBub3QgZGlyZWN0bHkgZXhwb3J0ZWQsIGFuZCBpdCBsb29rcyBsaWtlIGEgd29yayBoYW5kbGVyIGZvciBgJmFtcDtucGluZm8tJmd0O3R4X3dvcmtgLiBUaGUgYG5ldHBvbGxfc2VuZF9za2JgIGlzIGV4cG9ydGVkIHVzaW5nIGBFWFBPUlRfU1lNQk9MYC4KCkkmIzM5O3ZlIGFsc28gY2hlY2tlZCB0aGUgZnVsbCBsaXN0IG9mIGZ1bmN0aW9ucyBpbiBgbmV0L2NvcmUvbmV0cG9sbC5jYCwgYW5kIHRoYXQgY29uZmlybXMgdGhhdCBvbmx5IHRoZSB0aHJlZSBmdW5jdGlvbnMgLSBgX19uZXRwb2xsX3NlbmRfc2tiYCwgYG5ldHBvbGxfc2VuZF9za2JgLCBhbmQgYHF1ZXVlX3Byb2Nlc3NgIGhhdmUgYmVlbiB0b3VjaGVkLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgYWN0dWFsIGRpZmYuIFRoZSBjb2RlIGNoYW5nZXMgYXJlIGFsbCB3aXRoaW4gYF9fbmV0cG9sbF9zZW5kX3NrYmAuIFRoZSBrZXkgYWRkaXRpb24gaXMgYSBjaGVjayBvbiB0aGUgbnVtYmVyIG9mIHBhY2tldHMgaGVsZCBpbiBgbnBpbmZvLSZndDt0eHFgLiBJdCBsb29rcyBsaWtlIHRoZXJlJiMzOTtzIGEgbmV3IGBORVRQT0xMX1RYUV9NQVhgIGxpbWl0IChkZWZpbmVkIGFzIDEwMjQpLCBhbmQgaWYgdGhlIHF1ZXVlIGV4Y2VlZHMgdGhhdCwgdGhlIG5ldyBjb2RlIHdpbGwgZHJvcCB0aGUgcGFja2V0IGluc3RlYWQgb2YgZ3Jvd2luZyB0aGUgcXVldWUgaW5kZWZpbml0ZWx5LiBUaGF0IG1ha2VzIHNlbnNlLCB0byBwcmV2ZW50IHJlc291cmNlIGV4aGF1c3Rpb24gZnJvbSBhIHN0YWxsZWQgZGV2aWNlLCBhbmQgdGhhdCYjMzk7cyBhIGdvb2QgY2hhbmdlLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQuIFRoaXMgaXMgYSBjb21tb24gcGF0dGVybiBpbiBkcml2ZXJzLgoKSSYjMzk7dmUgZG91YmxlLWNoZWNrZWQgdGhhdCB0aGVyZSBhcmUgbm8gb3RoZXIgY2hhbmdlcyBpbiB0aGUgSEVBRCBjb21taXQsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORVRQT0xMX1RYUV9NQVgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0cG9sbC5jLTQ2LSAqL1xubmV0L2NvcmUvbmV0cG9sbC5jOjQ3OiNkZWZpbmUgTkVUUE9MTF9UWFFfTUFYXHQxMDI0XG5uZXQvY29yZS9uZXRwb2xsLmMtNDgtXG4tLVxubmV0L2NvcmUvbmV0cG9sbC5jPTI3MD1zdGF0aWMgbmV0ZGV2X3R4X3QgX19uZXRwb2xsX3NlbmRfc2tiKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9uZXRwb2xsLmMtMzI0LVx0aWYgKCFkZXZfeG1pdF9jb21wbGV0ZShzdGF0dXMpKSB7XG5uZXQvY29yZS9uZXRwb2xsLmM6MzI1Olx0XHRpZiAoc2tiX3F1ZXVlX2xlbihcdTAwMjZucGluZm8tXHUwMDNldHhxKSBcdTAwM2U9IE5FVFBPTExfVFhRX01BWCkge1xubmV0L2NvcmUvbmV0cG9sbC5jLTMyNi1cdFx0XHRkZXZfa2ZyZWVfc2tiX2lycShza2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzkyNAoJCQkJCQkJb3V0cHV0OiAxNzkKCQkJCQkJCXRob3VnaHRzOiAzNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IG5ldC9jb3JlL25ldHBvbGwuYyoqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlLCB0aGUgYGdpdCBsb2cgLTFgIHNob3dzIGEgcmVjZW50IGNvbW1pdCBtb2RpZnlpbmcgYG5ldC9jb3JlL25ldHBvbGwuY2AuIFRoaXMgaXMgaW50ZXJlc3Rpbmc7IEkgc2VlIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBxdWV1ZSBsZW5ndGggY2hlY2sgd2l0aGluIGBfX25ldHBvbGxfc2VuZF9za2JgLiBTcGVjaWZpY2FsbHksIGl0IGNoZWNrcyBpZiBgc2tiX3F1ZXVlX2xlbigmYW1wO25waW5mby0mZ3Q7dHhxKWAgZXhjZWVkcyBgTkVUUE9MTF9UWFFfTUFYYC4gSWYgaXQgZG9lcywgdGhlIFNLQiBpcyBkcm9wcGVkIHVzaW5nIGBkZXZfa2ZyZWVfc2tiX2lycShza2IpYCwgcmV0dXJuaW5nIGBORVRfWE1JVF9EUk9QYC4gVGhpcyBwcm90ZWN0cyBhZ2FpbnN0IHVuYm91bmRlZCBxdWV1ZSBncm93dGggaW4gYG5waW5mby0mZ3Q7dHhxYC4KClRoaXMgY29kZSBsaXZlcyB3aXRoaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0sIHdoaWNoIG1lYW5zIGl0IGNhbiBiZSByZWFjaGVkIHRocm91Z2ggdmlydHVhbCBuZXR3b3JrIGRldmljZXMsIG5ldGNvbnNvbGUsIGR5bmFtaWMgbmV0Y29uc29sZSwgb3IgZXZlbiBuZXR3b3JraW5nIHN0YWNrcyBsaWtlIGJvbmRpbmcsIHRlYW1pbmcsIG9yIGJyaWRnaW5nLCAqaWYqIG5ldHBvbGwgaXMgZW5hYmxlZC4gVGhlIHBvdGVudGlhbCBoZXJlIGZvciBmdXp6aW5nIGlzIHNpZ25pZmljYW50LiBJJiMzOTttIHRoaW5raW5nIHdlIGNvdWxkIHVuY292ZXIgaXNzdWVzIGFyb3VuZCBwYWNrZXQgZHJvcHBpbmcgc2NlbmFyaW9zLCByZWZjb3VudGluZyBvZiBTS0JzIGFuZCB0aGVpciBsaWZlY3ljbGUsIGVzcGVjaWFsbHkgYXJvdW5kIGZyZWVpbmcgdGhlIFNLQiB3aXRoIGBkZXZfa2ZyZWVfc2tiX2lycWAgd2hlbiBjYWxsZXJzIG1heSBleHBlY3Qgc29tZXRoaW5nIGRpZmZlcmVudCwgb3IgZXZlbiBkb3VibGUtZnJlZXMuIFdlIHNob3VsZCBhbHNvIGJlIG9uIHRoZSBsb29rb3V0IGZvciBsb2NrZGVwIGlzc3VlcyBhbmQgcG90ZW50aWFsIHN0YXRlLWhhbmRsaW5nIHByb2JsZW1zIHdoZW4gdGhpcyBxdWV1ZSBvdmVyZmxvd3MuCgpUaGVyZWZvcmUsIG15IGV2YWx1YXRpb246CgoqICAgKipXb3J0aEZ1enppbmc6IHRydWUqKiAoZGVmaW5pdGVseSB3b3J0aCB0aGUgZWZmb3J0KQoqICAgKipFbmFibGVDb25maWdzOiBbJiMzNDtORVRQT0xMJiMzNDssICYjMzQ7TkVUQ09OU09MRSYjMzQ7LCAmIzM0O05FVENPTlNPTEVfRFlOQU1JQyYjMzQ7XSoqICh3ZSBuZWVkIHRob3NlIGVuYWJsZWQgdG8gaGl0IHRoaXMgY29kZSkKKiAgICoqRm9jdXNTeW1ib2xzOiBbJiMzNDtfX25ldHBvbGxfc2VuZF9za2ImIzM0OywgJiMzNDtuZXRwb2xsX3NlbmRfc2tiJiMzNDssICYjMzQ7cXVldWVfcHJvY2VzcyYjMzQ7XSoqIChUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgdG8gdGFyZ2V0IGZvciBmdXp6aW5nLiBJIGluY2x1ZGUgYHF1ZXVlX3Byb2Nlc3NgIGJlY2F1c2UgaWYgc29tZXRoaW5nIGlzIHdyb25nIHdpdGggYSBxdWV1ZSwgd2Ugc2hvdWxkIGJlIGFibGUgdG8gdHJpZ2dlciBpdCwgYW5kIHRoaXMgaXMgd2hlcmUgaXQgaGFwcGVucykuCgpOb3csIGxldCYjMzk7cyBtYWtlIHN1cmUgZXZlcnl0aGluZyByZXF1aXJlZCBpcyBpbiBwbGFjZS4gV2UgbmVlZDoKCiogICBgV29ydGhGdXp6aW5nYDogQm9vbGVhbiAtIENoZWNrIQoqICAgYEZvY3VzU3ltYm9sc2A6IExpc3Qgb2Ygc3RyaW5ncyB3aXRoIHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdG8gZm9jdXMgb24gLSBDaGVjayEKKiAgIGBFbmFibGVDb25maWdzYDogTGlzdCBvZiBzdHJpbmdzIHdpdGhvdXQgdGhlIGBDT05GSUdfYCBwcmVmaXggLSBDaGVjayEKKiAgIGBSZWFzb25pbmdgOiBDb25jaXNlIGV4cGxhbmF0aW9uIG9mIHRoZSB2ZXJkaWN0IC0gQ2hlY2shCgpFdmVyeXRoaW5nIGlzIHNvdW5kLiBUaW1lIHRvIHJ1biBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUUE9MTCYjMzQ7LAogICAgJiMzNDtORVRDT05TT0xFJiMzNDssCiAgICAmIzM0O05FVENPTlNPTEVfRFlOQU1JQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fbmV0cG9sbF9zZW5kX3NrYiYjMzQ7LAogICAgJiMzNDtuZXRwb2xsX3NlbmRfc2tiJiMzNDssCiAgICAmIzM0O3F1ZXVlX3Byb2Nlc3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHF1ZXVlIGxlbmd0aCBsaW1pdCAoTkVUUE9MTF9UWFFfTUFYKSBpbiBfX25ldHBvbGxfc2VuZF9za2IoKSBpbiBuZXQvY29yZS9uZXRwb2xsLmMgdG8gcHJldmVudCB1bmJvdW5kZWQgc2tiIHF1ZXVlIGdyb3d0aCB3aGVuIGEgZGV2aWNlIGlzIHN0YWxsZWQgb3IgYnVzeS4gQ29yZSBuZXR3b3JraW5nIGNvZGUgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgdmlydHVhbCBuZXR3b3JrIGRldmljZXMgYW5kIG5ldGNvbnNvbGUgKGluY2x1ZGluZyBkeW5hbWljYWxseSByZWNvbmZpZ3VyZWQgdGFyZ2V0cyB2aWEgY29uZmlnZnMpLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHNrYiBsaWZlY3ljbGUsIHF1ZXVlIG92ZXJmbG93IGhhbmRsaW5nLCBhbmQgcGFja2V0IGRyb3AgZWRnZSBjYXNlcyBpbiB0aGUgbmV0cG9sbCB0cmFuc21pdCBwYXRoLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRQT0xMJiMzNDssCiAgICAmIzM0O05FVENPTlNPTEUmIzM0OywKICAgICYjMzQ7TkVUQ09OU09MRV9EWU5BTUlDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19uZXRwb2xsX3NlbmRfc2tiJiMzNDssCiAgICAmIzM0O25ldHBvbGxfc2VuZF9za2ImIzM0OywKICAgICYjMzQ7cXVldWVfcHJvY2VzcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgcXVldWUgbGVuZ3RoIGxpbWl0IChORVRQT0xMX1RYUV9NQVgpIGluIF9fbmV0cG9sbF9zZW5kX3NrYigpIGluIG5ldC9jb3JlL25ldHBvbGwuYyB0byBwcmV2ZW50IHVuYm91bmRlZCBza2IgcXVldWUgZ3Jvd3RoIHdoZW4gYSBkZXZpY2UgaXMgc3RhbGxlZCBvciBidXN5LiBDb3JlIG5ldHdvcmtpbmcgY29kZSBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlcyBhbmQgbmV0Y29uc29sZSAoaW5jbHVkaW5nIGR5bmFtaWNhbGx5IHJlY29uZmlndXJlZCB0YXJnZXRzIHZpYSBjb25maWdmcykuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3Qgc2tiIGxpZmVjeWNsZSwgcXVldWUgb3ZlcmZsb3cgaGFuZGxpbmcsIGFuZCBwYWNrZXQgZHJvcCBlZGdlIGNhc2VzIGluIHRoZSBuZXRwb2xsIHRyYW5zbWl0IHBhdGguJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA0OjI5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDQ6Mjk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgcXVldWUgbGVuZ3RoIGNhcCAoTkVUUE9MTF9UWFFfTUFYID0gMTAyNCkgb24gdGhlIG5ldHBvbGwgdHJhbnNtaXNzaW9uIHF1ZXVlIChucGluZm8tXHUwMDNldHhxKSBpbiBuZXQvY29yZS9uZXRwb2xsLmMgdG8gcHJldmVudCB1bmJvdW5kZWQgcXVldWUgZ3Jvd3RoIHdoZW4gdHJhbnNtaXNzaW9uIHN0YWxscy4gSWYgdGhlIHF1ZXVlIGxpbWl0IGlzIHJlYWNoZWQsIHRoZSBza2IgaXMgZnJlZWQgd2l0aCBkZXZfa2ZyZWVfc2tiX2lycShza2IpIGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyBORVRfWE1JVF9EUk9QLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OlxuMS4gTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcyBhcmUgY3JlYXRlZCBvciByZWFkLiBUaGUgcXVldWUgbGVuZ3RoIGNoZWNrIG9wZXJhdGVzIG9uIG5waW5mby1cdTAwM2V0eHEsIGFuIGFscmVhZHkgaW5pdGlhbGl6ZWQgc2tfYnVmZl9oZWFkLlxuMi4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiBrZXJuZWwgaW5mb3JtYXRpb24gZGlzY2xvc3VyZS5cbjMuIE5vIGJ1ZmZlciBib3VuZHMgb3IgcGFja2V0IHBheWxvYWQgb2Zmc2V0cyBhcmUgbW9kaWZpZWQgaW4gd2F5cyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSBieXRlcy5cblxuQW55IHBvdGVudGlhbCBidWdzIHJlc3VsdGluZyBmcm9tIHRoaXMgY2hhbmdlIChlLmcuLCBwYWNrZXQgbGlmZWN5Y2xlIGVycm9ycyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIG9mIHRoZSBza2IpIGFyZSBhZGRyZXNzZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBtZW1vcnkgZGVidWdnaW5nLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5MDgxNGFhMTU5MmU1Y2M2NzViZjE5OTVkMmUxODRlNmJiZjk5MWU1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgMTQgMDQ6MjY6NDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRwb2xsLmMgYi9uZXQvY29yZS9uZXRwb2xsLmMKaW5kZXggZmUxZTBjZGE1ZDZiZi4uOGZkNjQwOTU1ZTQ2MyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmV0cG9sbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL25ldHBvbGwuYwpAQCAtMzgsNiAmIzQzOzM4LDE0IEBACiAKICNkZWZpbmUgVVNFQ19QRVJfUE9MTAk1MAogCiYjNDM7LyoKJiM0MzsgKiBDYXAgb24gc2ticyBwYXJrZWQgaW4gbnBpbmZvLSZndDt0eHEgd2hpbGUgdGhlIGRldmljZSBpcyBidXN5LiBUaGUgcXVldWUKJiM0MzsgKiBleGlzdHMgdG8gcmlkZSBvdXQgYSB0cmFuc2llbnQgc3RhbGw7IGEgcHJvZHVjZXIgdGhhdCBvdXRydW5zIHRoZQomIzQzOyAqIGRldmljZSBmb3IgbG9uZ2VyIHRoYW4gdGhhdCBtdXN0IGxvc2UgcGFja2V0cywgbm90IGdyb3cgaXQgd2l0aG91dAomIzQzOyAqIGJvdW5kLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgTkVUUE9MTF9UWFFfTUFYCTEwMjQKJiM0MzsKIC8qCiAgKiBjYXJyaWVyX3RpbWVvdXQgaXMgbmV0Y29uc29sZS1zcGVjaWZpYyBhbmQgb25seSBrZXB0IGhlcmUgdG8gcHJlc2VydmUgdGhlCiAgKiBuZXRwb2xsLmNhcnJpZXJfdGltZW91dCBtb2R1bGUtcGFyYW1ldGVyIEFCSS4gSXRzIHZhbHVlIGlzIGV4cG9zZWQgdG8KQEAgLTMxNCw2ICYjNDM7MzIyLDEwIEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBfX25ldHBvbGxfc2VuZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCX0KIAogCWlmICghZGV2X3htaXRfY29tcGxldGUoc3RhdHVzKSkgewomIzQzOwkJaWYgKHNrYl9xdWV1ZV9sZW4oJmFtcDtucGluZm8tJmd0O3R4cSkgJmd0Oz0gTkVUUE9MTF9UWFFfTUFYKSB7CiYjNDM7CQkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KIAkJc2tiX3F1ZXVlX3RhaWwoJmFtcDtucGluZm8tJmd0O3R4cSwgc2tiKTsKIAkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhbXA7bnBpbmZvLSZndDt0eF93b3JrLDApOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA0OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNzIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLgoKKipBbmFseXppbmcgdGhpcyBLZXJuZWwgUGF0Y2gqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGlzIHBhdGNoLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGl0JiMzOTtzIGhpdHRpbmcgYG5ldC9jb3JlL25ldHBvbGwuY2AsIHdoaWNoLCBhcyB5b3Uga25vdywgZGVhbHMgd2l0aCBuZXR3b3JrIHBvbGxpbmcuIEdvb2QsIHRoYXQgbmFycm93cyB0aGUgZm9jdXMuIExldCYjMzk7cyBnZXQgdGhlIGNvbnRleHQsIEkmIzM5O2xsIHVzZSBgcmVhZC1maWxlYCB0byBnZXQgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhhdCBmaWxlLCBhbmQgSSYjMzk7bGwganVtcCByaWdodCBhcm91bmQgbGluZSAzMTQuIFRoYXQmIzM5O3MgdXN1YWxseSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgdG8gc2VlIHdoZXJlIHRoaXMgcGF0Y2ggaXMgc2xvdHRlZCBpbiBhbmQgdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgbG9naWMuIFRpbWUgdG8gZGl2ZSBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDQ6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9uZXRwb2xsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMwMDpcdFx0XHQgICAgIHRyaWVzIFx1MDAzZSAwOyAtLXRyaWVzKSB7XG4gMzAxOlx0XHRcdFx0aWYgKEhBUkRfVFhfVFJZTE9DSyhkZXYsIHR4cSkpIHtcbiAzMDI6XHRcdFx0XHRcdGlmICghbmV0aWZfeG1pdF9zdG9wcGVkKHR4cSkpXG4gMzAzOlx0XHRcdFx0XHRcdHN0YXR1cyA9IG5ldHBvbGxfc3RhcnRfeG1pdChza2IsIGRldiwgdHhxKTtcbiAzMDQ6XHRcbiAzMDU6XHRcdFx0XHRcdEhBUkRfVFhfVU5MT0NLKGRldiwgdHhxKTtcbiAzMDY6XHRcbiAzMDc6XHRcdFx0XHRcdGlmIChkZXZfeG1pdF9jb21wbGV0ZShzdGF0dXMpKVxuIDMwODpcdFx0XHRcdFx0XHRicmVhaztcbiAzMDk6XHRcbiAzMTA6XHRcdFx0XHR9XG4gMzExOlx0XG4gMzEyOlx0XHRcdFx0LyogdGlja2xlIGRldmljZSBtYXliZSB0aGVyZSBpcyBzb21lIGNsZWFudXAgKi9cbiAzMTM6XHRcdFx0XHRuZXRwb2xsX3BvbGxfZGV2KG5wLVx1MDAzZWRldik7XG4gMzE0Olx0XG4gMzE1Olx0XHRcdFx0dWRlbGF5KFVTRUNfUEVSX1BPTEwpO1xuIDMxNjpcdFx0XHR9XG4gMzE3Olx0XG4gMzE4Olx0XHRcdFdBUk5fT05DRSghaXJxc19kaXNhYmxlZCgpLFxuIDMxOTpcdFx0XHRcdFwmIzM0O25ldHBvbGxfc2VuZF9za2Jfb25fZGV2KCk6ICVzIGVuYWJsZWQgaW50ZXJydXB0cyBpbiBwb2xsICglcFMpXFxuXCYjMzQ7LFxuIDMyMDpcdFx0XHRcdGRldi1cdTAwM2VuYW1lLCBkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fc3RhcnRfeG1pdCk7XG4gMzIxOlx0XG4gMzIyOlx0XHR9XG4gMzIzOlx0XG4gMzI0Olx0XHRpZiAoIWRldl94bWl0X2NvbXBsZXRlKHN0YXR1cykpIHtcbiAzMjU6XHRcdFx0aWYgKHNrYl9xdWV1ZV9sZW4oXHUwMDI2bnBpbmZvLVx1MDAzZXR4cSkgXHUwMDNlPSBORVRQT0xMX1RYUV9NQVgpIHtcbiAzMjY6XHRcdFx0XHRkZXZfa2ZyZWVfc2tiX2lycShza2IpO1xuIDMyNzpcdFx0XHRcdGdvdG8gb3V0O1xuIDMyODpcdFx0XHR9XG4gMzI5Olx0XHRcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNm5waW5mby1cdTAwM2V0eHEsIHNrYik7XG4gMzMwOlx0XHRcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZucGluZm8tXHUwMDNldHhfd29yaywwKTtcbiAzMzE6XHRcdH1cbiAzMzI6XHRcdHJldCA9IE5FVERFVl9UWF9PSztcbiAzMzM6XHRvdXQ6XG4gMzM0Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAzMzU6XHRcdHJldHVybiByZXQ7XG4gMzM2Olx0fVxuIDMzNzpcdFxuIDMzODpcdG5ldGRldl90eF90IG5ldHBvbGxfc2VuZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDMzOTpcdHtcbiAzNDA6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gMzQxOlx0XHRuZXRkZXZfdHhfdCByZXQ7XG4gMzQyOlx0XG4gMzQzOlx0XHRpZiAodW5saWtlbHkoIW5wKSkge1xuIDM0NDpcdFx0XHRkZXZfa2ZyZWVfc2tiX2lycShza2IpO1xuIDM0NTpcdFx0XHRyZXQgPSBORVRfWE1JVF9EUk9QO1xuIDM0NjpcdFx0fSBlbHNlIHtcbiAzNDc6XHRcdFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xuIDM0ODpcdFx0XHRyZXQgPSBfX25ldHBvbGxfc2VuZF9za2IobnAsIHNrYik7XG4gMzQ5Olx0XHRcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDQ6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI0NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldHBvbGwgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJIHNlZSBhIGBkaWZmYCBvdXRwdXQsIHdoaWNoIG1lYW5zIHdlJiMzOTtyZSBsb29raW5nIGF0IGNoYW5nZXMgdG8gdGhlIGBuZXRwb2xsLmNgIGZpbGUgaW4gdGhlIGBuZXQvY29yZWAgZGlyZWN0b3J5LiBUaGUgcHJpbWFyeSBmb2N1cyBzZWVtcyB0byBiZSBhIG5ldyBkZWZpbml0aW9uLCBgTkVUUE9MTF9UWFFfTUFYYCwgc2V0IHRvIDEwMjQuIFRoaXMgaXMgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGUgY29tbWVudCBjbGFyaWZpZXMgdGhhdCBpdCYjMzk7cyBhIGNhcCBvbiB0aGUgbnVtYmVyIG9mIFNLQnMgKHNvY2tldCBidWZmZXIpIHBhcmtlZCBpbiB0aGUgYG5waW5mby0mZ3Q7dHhxYCBxdWV1ZSB3aGlsZSB0aGUgbmV0d29yayBkZXZpY2UgaXMgYnVzeS4gVGhlIGNvbW1lbnQgY2xlYXJseSBzdGF0ZXMgdGhlIHF1ZXVlIGV4aXN0cyB0byBoYW5kbGUgYnJpZWYgZGV2aWNlIHN0YWxscywgYW5kIHRoZSBpbXBsZW1lbnRhdGlvbiB3aWxsIGJlZ2luIGRpc2NhcmRpbmcgcGFja2V0cyBvbmNlIGl0IGhpdHMgdGhhdCBsaW1pdC4gVGhhdCYjMzk7cyBnb29kLCBwcmV2ZW50cyBhbiB1bmJvdW5kZWQgcXVldWUgdGhhdCBjb3VsZCBsZWFkIHRvIG1lbW9yeSBleGhhdXN0aW9uLiBTbywgaW5zdGVhZCBvZiBsZXR0aW5nIGl0IGdyb3cgaW5kZWZpbml0ZWx5IGlmIHRoZSBkZXZpY2UgaXMgcGVyc2lzdGVudGx5IGJ1c3ksIHdlJiMzOTtyZSBub3cgaW1wbGVtZW50aW5nIGJhY2twcmVzc3VyZSBhbmQgZHJvcHBpbmcgcGFja2V0cyBhZnRlciBhIHRocmVzaG9sZC4gU21hcnQuCgpUaGVuLCB0aGVyZSYjMzk7cyBhIG5ldyBgaWZgIGJsb2NrIGluc2lkZSBgX19uZXRwb2xsX3NlbmRfc2tiYC4gSWYgdGhlIGRldmljZSB0cmFuc21pdCBpc24mIzM5O3QgY29tcGxldGUgKG1lYW5pbmcgaXQmIzM5O3MgYnVzeSksIGFuZCB0aGUgYHR4cWAgbGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgTkVUUE9MTF9UWFFfTUFYYCwgdGhlIFNLQiBpcyBmcmVlZCwgYW5kIHdlIGBnb3RvIG91dGAuIE90aGVyd2lzZSwgdGhlIFNLQiBpcyBxdWV1ZWQgYW5kIGEgZGVsYXllZCB3b3JrIGl0ZW0gaXMgc2NoZWR1bGVkLiBUaGUgbmV3IGltcGxlbWVudGF0aW9uIHByZXZlbnRzIGFuIHVuYm91bmRlZCBpbmNyZWFzZSBpbiB0aGUgc2l6ZSBvZiBgbnBpbmZvLSZndDt0eHFgIGJ5IGRpc2NhcmRpbmcgcGFja2V0cyBpZiB0aGUgZGV2aWNlIGlzIHRvbyBzbG93LgoKTm93LCBJJiMzOTttIGp1c3QgY3VyaW91cyBhYm91dCBob3cgYF9fbmV0cG9sbF9zZW5kX3NrYmAgaGFuZGxlcyB0aGUgcmV0dXJuIHZhbHVlIG9yIGFueSBlcnJvcnMuIExldCBtZSBxdWlja2x5IHNjYW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHNwZWNpZmljYWxseSBsaW5lcyAyNzAtMzAwIG9mIHRoZSBzYW1lIGZpbGUsIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGxvY2FsIHZhcmlhYmxlcyBiZWluZyB1c2VkIGFuZCBob3cgZXJyb3JzIG1pZ2h0IGJlIGhhbmRsZWQgb3IgaWYgdGhlIHJldHVybiB2YXJpYWJsZSBpcyBpbml0aWFsaXplZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDQ6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9uZXRwb2xsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI3MDpcdHN0YXRpYyBuZXRkZXZfdHhfdCBfX25ldHBvbGxfc2VuZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDI3MTpcdHtcbiAyNzI6XHRcdG5ldGRldl90eF90IHN0YXR1cyA9IE5FVERFVl9UWF9CVVNZO1xuIDI3MzpcdFx0bmV0ZGV2X3R4X3QgcmV0ID0gTkVUX1hNSVRfRFJPUDtcbiAyNzQ6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4gMjc1Olx0XHR1bnNpZ25lZCBsb25nIHRyaWVzO1xuIDI3NjpcdFx0LyogSXQgaXMgdXAgdG8gdGhlIGNhbGxlciB0byBrZWVwIG5waW5mbyBhbGl2ZS4gKi9cbiAyNzc6XHRcdHN0cnVjdCBuZXRwb2xsX2luZm8gKm5waW5mbztcbiAyNzg6XHRcbiAyNzk6XHRcdGxvY2tkZXBfYXNzZXJ0X2lycXNfZGlzYWJsZWQoKTtcbiAyODA6XHRcbiAyODE6XHRcdGRldiA9IG5wLVx1MDAzZWRldjtcbiAyODI6XHRcdC8qIG5waW5mby1cdTAwM2V0eHEgYmVsb25ncyB0byBucC1cdTAwM2VkZXYsIHNvIHJldHJpZXMgbXVzdCBzdGF5IGJvdW5kIHRvIGl0LiAqL1xuIDI4MzpcdFx0c2tiLVx1MDAzZWRldiA9IGRldjtcbiAyODQ6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiAyODU6XHRcdG5waW5mbyA9IHJjdV9kZXJlZmVyZW5jZV9iaChkZXYtXHUwMDNlbnBpbmZvKTtcbiAyODY6XHRcbiAyODc6XHRcdGlmICghbnBpbmZvIHx8ICFuZXRpZl9ydW5uaW5nKGRldikgfHwgIW5ldGlmX2RldmljZV9wcmVzZW50KGRldikpIHtcbiAyODg6XHRcdFx0ZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTtcbiAyODk6XHRcdFx0Z290byBvdXQ7XG4gMjkwOlx0XHR9XG4gMjkxOlx0XG4gMjkyOlx0XHQvKiBkb24mIzM5O3QgZ2V0IG1lc3NhZ2VzIG91dCBvZiBvcmRlciwgYW5kIG5vIHJlY3Vyc2lvbiAqL1xuIDI5MzpcdFx0aWYgKHNrYl9xdWV1ZV9sZW4oXHUwMDI2bnBpbmZvLVx1MDAzZXR4cSkgPT0gMCBcdTAwMjZcdTAwMjYgIW5ldHBvbGxfb3duZXJfYWN0aXZlKGRldikpIHtcbiAyOTQ6XHRcdFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxO1xuIDI5NTpcdFxuIDI5NjpcdFx0XHR0eHEgPSBuZXRkZXZfY29yZV9waWNrX3R4KGRldiwgc2tiLCBOVUxMKTtcbiAyOTc6XHRcbiAyOTg6XHRcdFx0LyogdHJ5IHVudGlsIG5leHQgY2xvY2sgdGljayAqL1xuIDI5OTpcdFx0XHRmb3IgKHRyaWVzID0gamlmZmllc190b191c2VjcygxKS9VU0VDX1BFUl9QT0xMO1xuIDMwMDpcdFx0XHQgICAgIHRyaWVzIFx1MDAzZSAwOyAtLXRyaWVzKSB7XG4gMzAxOlx0XHRcdFx0aWYgKEhBUkRfVFhfVFJZTE9DSyhkZXYsIHR4cSkpIHtcbiAzMDI6XHRcdFx0XHRcdGlmICghbmV0aWZfeG1pdF9zdG9wcGVkKHR4cSkpXG4gMzAzOlx0XHRcdFx0XHRcdHN0YXR1cyA9IG5ldHBvbGxfc3RhcnRfeG1pdChza2IsIGRldiwgdHhxKTtcbiAzMDQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDQ6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc1MAoJCQkJCQkJb3V0cHV0OiAyNjgKCQkJCQkJCXRob3VnaHRzOiA5ODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTkVUUE9MTCBUWCBRdWV1ZSBMaW1pdCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIHNhZmUgZnJvbSBhIEtNU0FOIHBlcnNwZWN0aXZlLCBhbmQgSSYjMzk7bSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAuIExldCYjMzk7cyB3YWxrIHRocm91Z2ggdGhlIGxvZ2ljLgoKRmlyc3QsIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY2FwLCBgTkVUUE9MTF9UWFFfTUFYYCwgb24gdGhlIHNpemUgb2YgdGhlIGBucGluZm8tJmd0O3R4cWAgcXVldWUuIFRoaXMgaXMgYSBjcnVjaWFsIGFkZGl0aW9uIHRvIHByZXZlbnQgdW5ib3VuZGVkIHF1ZXVlIGdyb3d0aCwgd2hpY2ggY291bGQgbGVhZCB0byBvdXQtb2YtbWVtb3J5IHNpdHVhdGlvbnMgb3IgcmVzb3VyY2UgZXhoYXVzdGlvbi4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyB0aGlzOiBpZiB0aGUgcXVldWUgaXMgZnVsbCAobGVuZ3RoIGV4Y2VlZHMgYE5FVFBPTExfVFhRX01BWGApLCB0aGUgaW5jb21pbmcgYHNrYmAgaXMgZnJlZWQgdXNpbmcgYGRldl9rZnJlZV9za2JfaXJxKHNrYilgIGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyBgTkVUX1hNSVRfRFJPUGAuCgpOb3csIGNvbnNpZGVyaW5nIEtNU0FOJiMzOTtzIHB1cnBvc2U6IGl0JiMzOTtzIGRlc2lnbmVkIHRvIGNhdGNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBpbmZvcm1hdGlvbiBsZWFrcywgcGFydGljdWxhcmx5IHRob3NlIHRoYXQgY291bGQgZXhwb3NlIGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuIERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYW55IG9mIHRob3NlIHJpc2tzPyBJJiMzOTt2ZSBzeXN0ZW1hdGljYWxseSBjaGVja2VkIHRoZSBtYWluIHRocmVhdCB2ZWN0b3JzLgoKMS4gICoqVXNlci1TcGFjZSBJbnRlcmFjdGlvbnM6KiogVGhlIGNvZGUgZG9lc24mIzM5O3QgbW9kaWZ5IG9yIGludHJvZHVjZSBhbnkgbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSB2aWEgYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIG5ldGxpbmsgU0tCIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycy4gTmV0cG9sbCBpcyBpbnRlcm5hbCwgc28gbm90aGluZyBlc2NhcGVzLgoyLiAgKipVbmluaXRpYWxpemVkIFZhcmlhYmxlIFVzYWdlOioqIFRoZXJlJiMzOTtzIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzLiBUaGUgcXVldWUgbGVuZ3RoIGNoZWNrLCBgc2tiX3F1ZXVlX2xlbigmYW1wO25waW5mby0mZ3Q7dHhxKWAsIGlzIG9wZXJhdGluZyBvbiBhIHN0YW5kYXJkLCBpbml0aWFsaXplZCBgc3RydWN0IHNrX2J1ZmZfaGVhZGAuCjMuICAqKkRhdGEgU3RydWN0dXJlIEluaXRpYWxpemF0aW9uOioqIFRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgbGF0ZXIgcmVhZC4KNC4gICoqQnVmZmVyIEFjY2Vzcy9MZW5ndGggSXNzdWVzOioqIEl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGJvdW5kcyBjaGVja3Mgb3IgbGVuZ3RoIG1hbmlwdWxhdGlvbnMgdGhhdCBtaWdodCBjcmVhdGUgb3Bwb3J0dW5pdGllcyB0byByZWFkIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgaW4gZXhpc3RpbmcgYnVmZmVycy4gSXQgKnByZXZlbnRzKiB1bmJvdW5kZWQgYnVmZmVyIGdyb3d0aC4KNS4gICoqTWVtb3J5IE1hbmFnZW1lbnQ6KiogVGhlIHBhdGNoICpmcmVlcyogYSBidWZmZXIgaWYgdGhlIHF1ZXVlIGlzIGZ1bGwsIHVzaW5nIGBkZXZfa2ZyZWVfc2tiX2lycShza2IpYC4gQW55IHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIG9yIHJlZmVyZW5jZSBjb3VudCBpc3N1ZXMgcmVsYXRlZCB0byB0aGUgYHNrYmAgYXJlIHRoaW5ncyBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIG1lbW9yeSBkZXRlY3RvcnMgYXJlIGFscmVhZHkgZGVzaWduZWQgdG8gaGFuZGxlLgoKVGhlcmVmb3JlLCB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MuIEtBU0FOIHdpbGwgY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgbGlmZWN5Y2xlIGVycm9ycy4KClRoZSBydWxlIHN0YXRlczogJiMzNDtUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLCBMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLiYjMzQ7IFRoaXMgYXBwbGllcyBoZXJlLCBhcyBLQVNBTiBhbmQgc3RhbmRhcmQgY2hlY2tzIGFscmVhZHkgY292ZXIgdGhlIHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UuIFNpbmNlIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIHRoZSAqc3BlY2lmaWMqIHNldCBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IG9ubHkgS01TQU4gd291bGQgZGV0ZWN0LCBLTVNBTiBpcyBub3QganVzdGlmaWVkLiBUaGUgcGF0Y2ggb25seSBsaW1pdHMgcXVldWUgbGVuZ3RoIGFuZCBpZiB0aGUgY2FwIGlzIHJlYWNoZWQsIHNpbXBseSBkcm9wcyBwYWNrZXRzLgoKU28sIEkgd2lsbCBub3cgcHJlcGFyZSB0aGUgc3BlY2lmaWMgcmVhc29uaW5nIGFzIGBLTVNBTlJlYXNvbmluZ2A6ClRoZSBwYXRjaCBhZGRzIGEgbGVuZ3RoIGxpbWl0IChgTkVUUE9MTF9UWFFfTUFYYCkgb24gYG5waW5mby0mZ3Q7dHhxYCBpbiBgX19uZXRwb2xsX3NlbmRfc2tiKClgIHRvIGF2b2lkIHVuYm91bmRlZCBtZW1vcnkgZ3Jvd3RoIHdoZW4gdGhlIGRldmljZSBpcyBjb25nZXN0ZWQuIElmIHRoZSBxdWV1ZSBsZW5ndGggZXhjZWVkcyB0aGUgdGhyZXNob2xkLCB0aGUgaW5jb21pbmcgc2tiIGlzIGZyZWVkIHZpYSBgZGV2X2tmcmVlX3NrYl9pcnEoc2tiKWAgYW5kIGRyb3BwZWQuIEtNU0FOIGlzIG5vdCBuZWVkZWQgYmVjYXVzZSB0aGUgcGF0Y2ggZG9lcyBub3QgY3JlYXRlLCB0b3VjaCwgb3IgcmVhZCBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcywgbm9yIGRvZXMgaXQgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBNZW1vcnkgc2FmZXR5IGNvbmNlcm5zIHJlbGF0ZWQgdG8gc2tiIGxpZmVjeWNsZSBvciBxdWV1ZSBoYW5kbGluZyBhcmUgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgY2hlY2tzLiBEZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QganVzdGlmaWVkLgoKSSYjMzk7bSBjb25maWRlbnQgaW4gaW52b2tpbmcgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDQ6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHF1ZXVlIGxlbmd0aCBjYXAgKE5FVFBPTExfVFhRX01BWCA9IDEwMjQpIG9uIHRoZSBuZXRwb2xsIHRyYW5zbWlzc2lvbiBxdWV1ZSAobnBpbmZvLVx1MDAzZXR4cSkgaW4gbmV0L2NvcmUvbmV0cG9sbC5jIHRvIHByZXZlbnQgdW5ib3VuZGVkIHF1ZXVlIGdyb3d0aCB3aGVuIHRyYW5zbWlzc2lvbiBzdGFsbHMuIElmIHRoZSBxdWV1ZSBsaW1pdCBpcyByZWFjaGVkLCB0aGUgc2tiIGlzIGZyZWVkIHdpdGggZGV2X2tmcmVlX3NrYl9pcnEoc2tiKSBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMgTkVUX1hNSVRfRFJPUC5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeTpcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMgYXJlIGNyZWF0ZWQgb3IgcmVhZC4gVGhlIHF1ZXVlIGxlbmd0aCBjaGVjayBvcGVyYXRlcyBvbiBucGluZm8tXHUwMDNldHhxLCBhbiBhbHJlYWR5IGluaXRpYWxpemVkIHNrX2J1ZmZfaGVhZC5cbjIuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIHNvIHRoZXJlIGlzIG5vIHJpc2sgb2Yga2VybmVsIGluZm9ybWF0aW9uIGRpc2Nsb3N1cmUuXG4zLiBObyBidWZmZXIgYm91bmRzIG9yIHBhY2tldCBwYXlsb2FkIG9mZnNldHMgYXJlIG1vZGlmaWVkIGluIHdheXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgYnl0ZXMuXG5cbkFueSBwb3RlbnRpYWwgYnVncyByZXN1bHRpbmcgZnJvbSB0aGlzIGNoYW5nZSAoZS5nLiwgcGFja2V0IGxpZmVjeWNsZSBlcnJvcnMgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtZnJlZSBvZiB0aGUgc2tiKSBhcmUgYWRkcmVzc2VkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgbWVtb3J5IGRlYnVnZ2luZywgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHF1ZXVlIGxlbmd0aCBjYXAgKE5FVFBPTExfVFhRX01BWCA9IDEwMjQpIG9uIHRoZSBuZXRwb2xsIHRyYW5zbWlzc2lvbiBxdWV1ZSAobnBpbmZvLVx1MDAzZXR4cSkgaW4gbmV0L2NvcmUvbmV0cG9sbC5jIHRvIHByZXZlbnQgdW5ib3VuZGVkIHF1ZXVlIGdyb3d0aCB3aGVuIHRyYW5zbWlzc2lvbiBzdGFsbHMuIElmIHRoZSBxdWV1ZSBsaW1pdCBpcyByZWFjaGVkLCB0aGUgc2tiIGlzIGZyZWVkIHdpdGggZGV2X2tmcmVlX3NrYl9pcnEoc2tiKSBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMgTkVUX1hNSVRfRFJPUC5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeTpcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMgYXJlIGNyZWF0ZWQgb3IgcmVhZC4gVGhlIHF1ZXVlIGxlbmd0aCBjaGVjayBvcGVyYXRlcyBvbiBucGluZm8tXHUwMDNldHhxLCBhbiBhbHJlYWR5IGluaXRpYWxpemVkIHNrX2J1ZmZfaGVhZC5cbjIuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIHNvIHRoZXJlIGlzIG5vIHJpc2sgb2Yga2VybmVsIGluZm9ybWF0aW9uIGRpc2Nsb3N1cmUuXG4zLiBObyBidWZmZXIgYm91bmRzIG9yIHBhY2tldCBwYXlsb2FkIG9mZnNldHMgYXJlIG1vZGlmaWVkIGluIHdheXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgYnl0ZXMuXG5cbkFueSBwb3RlbnRpYWwgYnVncyByZXN1bHRpbmcgZnJvbSB0aGlzIGNoYW5nZSAoZS5nLiwgcGFja2V0IGxpZmVjeWNsZSBlcnJvcnMgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtZnJlZSBvZiB0aGUgc2tiKSBhcmUgYWRkcmVzc2VkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgbWVtb3J5IGRlYnVnZ2luZywgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNDoyNjo0NC42NTAyMDkwNDFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDgxNDkyMDU5NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUUE9MTFwiLFxuICAgIFwiTkVUQ09OU09MRVwiLFxuICAgIFwiTkVUQ09OU09MRV9EWU5BTUlDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19uZXRwb2xsX3NlbmRfc2tiXCIsXG4gICAgXCJuZXRwb2xsX3NlbmRfc2tiXCIsXG4gICAgXCJxdWV1ZV9wcm9jZXNzXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgcXVldWUgbGVuZ3RoIGNhcCAoTkVUUE9MTF9UWFFfTUFYID0gMTAyNCkgb24gdGhlIG5ldHBvbGwgdHJhbnNtaXNzaW9uIHF1ZXVlIChucGluZm8tXFx1MDAzZXR4cSkgaW4gbmV0L2NvcmUvbmV0cG9sbC5jIHRvIHByZXZlbnQgdW5ib3VuZGVkIHF1ZXVlIGdyb3d0aCB3aGVuIHRyYW5zbWlzc2lvbiBzdGFsbHMuIElmIHRoZSBxdWV1ZSBsaW1pdCBpcyByZWFjaGVkLCB0aGUgc2tiIGlzIGZyZWVkIHdpdGggZGV2X2tmcmVlX3NrYl9pcnEoc2tiKSBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMgTkVUX1hNSVRfRFJPUC5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OlxcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMgYXJlIGNyZWF0ZWQgb3IgcmVhZC4gVGhlIHF1ZXVlIGxlbmd0aCBjaGVjayBvcGVyYXRlcyBvbiBucGluZm8tXFx1MDAzZXR4cSwgYW4gYWxyZWFkeSBpbml0aWFsaXplZCBza19idWZmX2hlYWQuXFxuMi4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiBrZXJuZWwgaW5mb3JtYXRpb24gZGlzY2xvc3VyZS5cXG4zLiBObyBidWZmZXIgYm91bmRzIG9yIHBhY2tldCBwYXlsb2FkIG9mZnNldHMgYXJlIG1vZGlmaWVkIGluIHdheXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgYnl0ZXMuXFxuXFxuQW55IHBvdGVudGlhbCBidWdzIHJlc3VsdGluZyBmcm9tIHRoaXMgY2hhbmdlIChlLmcuLCBwYWNrZXQgbGlmZWN5Y2xlIGVycm9ycyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIG9mIHRoZSBza2IpIGFyZSBhZGRyZXNzZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBtZW1vcnkgZGVidWdnaW5nLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHF1ZXVlIGxlbmd0aCBsaW1pdCAoTkVUUE9MTF9UWFFfTUFYKSBpbiBfX25ldHBvbGxfc2VuZF9za2IoKSBpbiBuZXQvY29yZS9uZXRwb2xsLmMgdG8gcHJldmVudCB1bmJvdW5kZWQgc2tiIHF1ZXVlIGdyb3d0aCB3aGVuIGEgZGV2aWNlIGlzIHN0YWxsZWQgb3IgYnVzeS4gQ29yZSBuZXR3b3JraW5nIGNvZGUgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgdmlydHVhbCBuZXR3b3JrIGRldmljZXMgYW5kIG5ldGNvbnNvbGUgKGluY2x1ZGluZyBkeW5hbWljYWxseSByZWNvbmZpZ3VyZWQgdGFyZ2V0cyB2aWEgY29uZmlnZnMpLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHNrYiBsaWZlY3ljbGUsIHF1ZXVlIG92ZXJmbG93IGhhbmRsaW5nLCBhbmQgcGFja2V0IGRyb3AgZWRnZSBjYXNlcyBpbiB0aGUgbmV0cG9sbCB0cmFuc21pdCBwYXRoLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNDoyNjo0NC42NTAyMTMwODFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NDU1OTE5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDkwODE0YWExNTkyZTVjYzY3NWJmMTk5NWQyZTE4NGU2YmJmOTkxZTVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgMTQgMDQ6MjY6NDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0cG9sbC5jIGIvbmV0L2NvcmUvbmV0cG9sbC5jXFxuaW5kZXggZmUxZTBjZGE1ZDZiZi4uOGZkNjQwOTU1ZTQ2MyAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9uZXRwb2xsLmNcXG4rKysgYi9uZXQvY29yZS9uZXRwb2xsLmNcXG5AQCAtMzgsNiArMzgsMTQgQEBcXG4gXFxuICNkZWZpbmUgVVNFQ19QRVJfUE9MTFxcdDUwXFxuIFxcbisvKlxcbisgKiBDYXAgb24gc2ticyBwYXJrZWQgaW4gbnBpbmZvLVxcdTAwM2V0eHEgd2hpbGUgdGhlIGRldmljZSBpcyBidXN5LiBUaGUgcXVldWVcXG4rICogZXhpc3RzIHRvIHJpZGUgb3V0IGEgdHJhbnNpZW50IHN0YWxsOyBhIHByb2R1Y2VyIHRoYXQgb3V0cnVucyB0aGVcXG4rICogZGV2aWNlIGZvciBsb25nZXIgdGhhbiB0aGF0IG11c3QgbG9zZSBwYWNrZXRzLCBub3QgZ3JvdyBpdCB3aXRob3V0XFxuKyAqIGJvdW5kLlxcbisgKi9cXG4rI2RlZmluZSBORVRQT0xMX1RYUV9NQVhcXHQxMDI0XFxuK1xcbiAvKlxcbiAgKiBjYXJyaWVyX3RpbWVvdXQgaXMgbmV0Y29uc29sZS1zcGVjaWZpYyBhbmQgb25seSBrZXB0IGhlcmUgdG8gcHJlc2VydmUgdGhlXFxuICAqIG5ldHBvbGwuY2Fycmllcl90aW1lb3V0IG1vZHVsZS1wYXJhbWV0ZXIgQUJJLiBJdHMgdmFsdWUgaXMgZXhwb3NlZCB0b1xcbkBAIC0zMTQsNiArMzIyLDEwIEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBfX25ldHBvbGxfc2VuZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHR9XFxuIFxcbiBcXHRpZiAoIWRldl94bWl0X2NvbXBsZXRlKHN0YXR1cykpIHtcXG4rXFx0XFx0aWYgKHNrYl9xdWV1ZV9sZW4oXFx1MDAyNm5waW5mby1cXHUwMDNldHhxKSBcXHUwMDNlPSBORVRQT0xMX1RYUV9NQVgpIHtcXG4rXFx0XFx0XFx0ZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTtcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdH1cXG4gXFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNm5waW5mby1cXHUwMDNldHhxLCBza2IpO1xcbiBcXHRcXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXFx1MDAyNm5waW5mby1cXHUwMDNldHhfd29yaywwKTtcXG4gXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNDoyNjo0NS4xMjUzNjM2NzRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE3MjU0NTc5MDgzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRQT0xMXCIsXG4gICAgXCJORVRDT05TT0xFXCIsXG4gICAgXCJORVRDT05TT0xFX0RZTkFNSUNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX25ldHBvbGxfc2VuZF9za2JcIixcbiAgICBcIm5ldHBvbGxfc2VuZF9za2JcIixcbiAgICBcInF1ZXVlX3Byb2Nlc3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgcXVldWUgbGVuZ3RoIGxpbWl0IChORVRQT0xMX1RYUV9NQVgpIGluIF9fbmV0cG9sbF9zZW5kX3NrYigpIGluIG5ldC9jb3JlL25ldHBvbGwuYyB0byBwcmV2ZW50IHVuYm91bmRlZCBza2IgcXVldWUgZ3Jvd3RoIHdoZW4gYSBkZXZpY2UgaXMgc3RhbGxlZCBvciBidXN5LiBDb3JlIG5ldHdvcmtpbmcgY29kZSBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlcyBhbmQgbmV0Y29uc29sZSAoaW5jbHVkaW5nIGR5bmFtaWNhbGx5IHJlY29uZmlndXJlZCB0YXJnZXRzIHZpYSBjb25maWdmcykuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3Qgc2tiIGxpZmVjeWNsZSwgcXVldWUgb3ZlcmZsb3cgaGFuZGxpbmcsIGFuZCBwYWNrZXQgZHJvcCBlZGdlIGNhc2VzIGluIHRoZSBuZXRwb2xsIHRyYW5zbWl0IHBhdGguXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTA4MTRhYTE1OTJlNWNjNjc1YmYxOTk1ZDJlMTg0ZTZiYmY5OTFlNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDE0IDA0OjI2OjQzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0cG9sbC5jIGIvbmV0L2NvcmUvbmV0cG9sbC5jXG5pbmRleCBmZTFlMGNkYTVkNmJmLi44ZmQ2NDA5NTVlNDYzIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvbmV0cG9sbC5jXG4rKysgYi9uZXQvY29yZS9uZXRwb2xsLmNcbkBAIC0zOCw2ICszOCwxNCBAQFxuIFxuICNkZWZpbmUgVVNFQ19QRVJfUE9MTFx0NTBcbiBcbisvKlxuKyAqIENhcCBvbiBza2JzIHBhcmtlZCBpbiBucGluZm8tXHUwMDNldHhxIHdoaWxlIHRoZSBkZXZpY2UgaXMgYnVzeS4gVGhlIHF1ZXVlXG4rICogZXhpc3RzIHRvIHJpZGUgb3V0IGEgdHJhbnNpZW50IHN0YWxsOyBhIHByb2R1Y2VyIHRoYXQgb3V0cnVucyB0aGVcbisgKiBkZXZpY2UgZm9yIGxvbmdlciB0aGFuIHRoYXQgbXVzdCBsb3NlIHBhY2tldHMsIG5vdCBncm93IGl0IHdpdGhvdXRcbisgKiBib3VuZC5cbisgKi9cbisjZGVmaW5lIE5FVFBPTExfVFhRX01BWFx0MTAyNFxuK1xuIC8qXG4gICogY2Fycmllcl90aW1lb3V0IGlzIG5ldGNvbnNvbGUtc3BlY2lmaWMgYW5kIG9ubHkga2VwdCBoZXJlIHRvIHByZXNlcnZlIHRoZVxuICAqIG5ldHBvbGwuY2Fycmllcl90aW1lb3V0IG1vZHVsZS1wYXJhbWV0ZXIgQUJJLiBJdHMgdmFsdWUgaXMgZXhwb3NlZCB0b1xuQEAgLTMxNCw2ICszMjIsMTAgQEAgc3RhdGljIG5ldGRldl90eF90IF9fbmV0cG9sbF9zZW5kX3NrYihzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHR9XG4gXG4gXHRpZiAoIWRldl94bWl0X2NvbXBsZXRlKHN0YXR1cykpIHtcbitcdFx0aWYgKHNrYl9xdWV1ZV9sZW4oXHUwMDI2bnBpbmZvLVx1MDAzZXR4cSkgXHUwMDNlPSBORVRQT0xMX1RYUV9NQVgpIHtcbitcdFx0XHRkZXZfa2ZyZWVfc2tiX2lycShza2IpO1xuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHR9XG4gXHRcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNm5waW5mby1cdTAwM2V0eHEsIHNrYik7XG4gXHRcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZucGluZm8tXHUwMDNldHhfd29yaywwKTtcbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA0OjI2OjQ1LjEyNTM2NTE4NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ3MzI1MTQxODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXR3b3JrIFBvbGxpbmcgQ29kZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBuZXRwb2xsLmNgIGRpZmYuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2UsIHNvIEknbGwgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJdCBsb29rcyBsaWtlIGEgbmV3IGAjZGVmaW5lYCBjYWxsZWQgYE5FVFBPTExfVFhRX01BWGAgaGFzIGJlZW4gYWRkZWQsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCBpdHMgcHVycG9zZS5cblxuTG9va2luZyBhdCB0aGUgY29kZSwgaXQgbG9va3MgbGlrZSBgTkVUUE9MTF9UWFFfTUFYYCBpcyB1c2VkIHRvIGxpbWl0IHRoZSBzaXplIG9mIGBucGluZm8tXHUwMDNldHhxYC4gVGhlIGNvbW1lbnQgY2xhcmlmaWVzIHRoYXQgYHR4cWAgaXMgdXNlZCB0byBidWZmZXIgU0tCcyAoc29ja2V0IGJ1ZmZlcikgd2hlbiB0aGUgbmV0d29yayBkZXZpY2UgaXMgYnVzeS4gVGhlIGdvYWwgaXMgdG8gaGFuZGxlIHRlbXBvcmFyeSBzdGFsbHMsIGJ1dCBwcmV2ZW50IHRoZSBxdWV1ZSBmcm9tIGdyb3dpbmcgaW5kZWZpbml0ZWx5LCB3aGljaCBjb3VsZCBsZWFkIHRvIHJlc291cmNlIGV4aGF1c3Rpb24uIFRoZSBsb2dpYyBzZWVtcyBzdHJhaWdodGZvcndhcmQ6IElmIHRoZSBgdHhxYCByZWFjaGVzIGBORVRQT0xMX1RYUV9NQVhgLCBhbnkgbmV3IHBhY2tldHMgYXJlIGRyb3BwZWQuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0J3MgYSBnb29kIGFwcHJvYWNoIHRvIHByZXZlbnQgdW5ib3VuZGVkIHF1ZXVlIGdyb3d0aCBkdXJpbmcgdHJhbnNpZW50IG5ldHdvcmsgY29uZ2VzdGlvbi4gSSB3aWxsIG5lZWQgdG8gbG9vayB1cCBgZGV2X3htaXRfY29tcGxldGVgIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cgY29udHJvbCB0byBiZSBjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDYwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDQ6MjY6NDkuODU3ODgxNDU5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvbmV0cG9sbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMwMDpcXHRcXHRcXHQgICAgIHRyaWVzIFxcdTAwM2UgMDsgLS10cmllcykge1xcbiAzMDE6XFx0XFx0XFx0XFx0aWYgKEhBUkRfVFhfVFJZTE9DSyhkZXYsIHR4cSkpIHtcXG4gMzAyOlxcdFxcdFxcdFxcdFxcdGlmICghbmV0aWZfeG1pdF9zdG9wcGVkKHR4cSkpXFxuIDMwMzpcXHRcXHRcXHRcXHRcXHRcXHRzdGF0dXMgPSBuZXRwb2xsX3N0YXJ0X3htaXQoc2tiLCBkZXYsIHR4cSk7XFxuIDMwNDpcXHRcXG4gMzA1OlxcdFxcdFxcdFxcdFxcdEhBUkRfVFhfVU5MT0NLKGRldiwgdHhxKTtcXG4gMzA2OlxcdFxcbiAzMDc6XFx0XFx0XFx0XFx0XFx0aWYgKGRldl94bWl0X2NvbXBsZXRlKHN0YXR1cykpXFxuIDMwODpcXHRcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gMzA5OlxcdFxcbiAzMTA6XFx0XFx0XFx0XFx0fVxcbiAzMTE6XFx0XFxuIDMxMjpcXHRcXHRcXHRcXHQvKiB0aWNrbGUgZGV2aWNlIG1heWJlIHRoZXJlIGlzIHNvbWUgY2xlYW51cCAqL1xcbiAzMTM6XFx0XFx0XFx0XFx0bmV0cG9sbF9wb2xsX2RldihucC1cXHUwMDNlZGV2KTtcXG4gMzE0OlxcdFxcbiAzMTU6XFx0XFx0XFx0XFx0dWRlbGF5KFVTRUNfUEVSX1BPTEwpO1xcbiAzMTY6XFx0XFx0XFx0fVxcbiAzMTc6XFx0XFxuIDMxODpcXHRcXHRcXHRXQVJOX09OQ0UoIWlycXNfZGlzYWJsZWQoKSxcXG4gMzE5OlxcdFxcdFxcdFxcdFxcXCJuZXRwb2xsX3NlbmRfc2tiX29uX2RldigpOiAlcyBlbmFibGVkIGludGVycnVwdHMgaW4gcG9sbCAoJXBTKVxcXFxuXFxcIixcXG4gMzIwOlxcdFxcdFxcdFxcdGRldi1cXHUwMDNlbmFtZSwgZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fc3RhcnRfeG1pdCk7XFxuIDMyMTpcXHRcXG4gMzIyOlxcdFxcdH1cXG4gMzIzOlxcdFxcbiAzMjQ6XFx0XFx0aWYgKCFkZXZfeG1pdF9jb21wbGV0ZShzdGF0dXMpKSB7XFxuIDMyNTpcXHRcXHRcXHRpZiAoc2tiX3F1ZXVlX2xlbihcXHUwMDI2bnBpbmZvLVxcdTAwM2V0eHEpIFxcdTAwM2U9IE5FVFBPTExfVFhRX01BWCkge1xcbiAzMjY6XFx0XFx0XFx0XFx0ZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTtcXG4gMzI3OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiAzMjg6XFx0XFx0XFx0fVxcbiAzMjk6XFx0XFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNm5waW5mby1cXHUwMDNldHhxLCBza2IpO1xcbiAzMzA6XFx0XFx0XFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFxcdTAwMjZucGluZm8tXFx1MDAzZXR4X3dvcmssMCk7XFxuIDMzMTpcXHRcXHR9XFxuIDMzMjpcXHRcXHRyZXQgPSBORVRERVZfVFhfT0s7XFxuIDMzMzpcXHRvdXQ6XFxuIDMzNDpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gMzM1OlxcdFxcdHJldHVybiByZXQ7XFxuIDMzNjpcXHR9XFxuIDMzNzpcXHRcXG4gMzM4OlxcdG5ldGRldl90eF90IG5ldHBvbGxfc2VuZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAzMzk6XFx0e1xcbiAzNDA6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gMzQxOlxcdFxcdG5ldGRldl90eF90IHJldDtcXG4gMzQyOlxcdFxcbiAzNDM6XFx0XFx0aWYgKHVubGlrZWx5KCFucCkpIHtcXG4gMzQ0OlxcdFxcdFxcdGRldl9rZnJlZV9za2JfaXJxKHNrYik7XFxuIDM0NTpcXHRcXHRcXHRyZXQgPSBORVRfWE1JVF9EUk9QO1xcbiAzNDY6XFx0XFx0fSBlbHNlIHtcXG4gMzQ3OlxcdFxcdFxcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcXG4gMzQ4OlxcdFxcdFxcdHJldCA9IF9fbmV0cG9sbF9zZW5kX3NrYihucCwgc2tiKTtcXG4gMzQ5OlxcdFxcdFxcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDQ6MjY6NDkuODU3OTY5MjU5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTc3NTAwMjg3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjpcblxuKipUcmFjaW5nIHRoZSBOZXR3b3JrIFBvbGwgU2VuZCBQYXRoKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBjYWxsIGNoYWluIGZvciBgX19uZXRwb2xsX3NlbmRfc2tiYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gc2VlIHdoZXJlIGl0J3MgYmVpbmcgY2FsbGVkIGZyb20uIEkga25vdyB0aGF0IGBuZXRwb2xsX3NlbmRfc2tiYCB1bHRpbWF0ZWx5IGNhbGxzIGl0LCBidXQgSSBuZWVkIHRvIHNlZSB3aGF0J3MgKmNhbGxpbmcqIGBuZXRwb2xsX3NlbmRfc2tiYC4gU28sIEknbGwgcXVpY2tseSB1c2UgYGdyZXBgIHRvIGh1bnQgZG93biB0aGUgcmVmZXJlbmNlcyBvciBhbnkgY2FsbGVycyBpbiB0aGUgYG5ldC9jb3JlL25ldHBvbGwuY2AgZmlsZSBpdHNlbGYuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIHRvcCBsZXZlbCBlbnRyeSBwb2ludCBvciBmdW5jdGlvbihzKSB0aGF0IHRyaWdnZXJzIHRoaXMgY3JpdGljYWwgcGllY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NDksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA0OjI2OjUxLjYzMjk3NDQ1MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODI1MTE5NTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldHBvbGxfc2VuZF9za2JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz0yOTc9bmV0ZGV2X3R4X3QgYm9uZF9kZXZfcXVldWVfeG1pdChzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzA2LVxcdGlmICh1bmxpa2VseShuZXRwb2xsX3R4X3J1bm5pbmcoYm9uZC1cXHUwMDNlZGV2KSkpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzozMDc6XFx0XFx0cmV0dXJuIGJvbmRfbmV0cG9sbF9zZW5kX3NrYihib25kX2dldF9zbGF2ZV9ieV9kZXYoYm9uZCwgc2xhdmVfZGV2KSwgc2tiKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTMwOC1cXG4tLVxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYz01NDk9c3RhdGljIGludCBtYWN2bGFuX3F1ZXVlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy01NzgtXFxuZHJpdmVycy9uZXQvbWFjdmxhbi5jOjU3OTpzdGF0aWMgaW5saW5lIG5ldGRldl90eF90IG1hY3ZsYW5fbmV0cG9sbF9zZW5kX3NrYihzdHJ1Y3QgbWFjdmxhbl9kZXYgKnZsYW4sIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvbWFjdmxhbi5jLTU4MC17XFxuZHJpdmVycy9uZXQvbWFjdmxhbi5jLTU4MS0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcXG5kcml2ZXJzL25ldC9tYWN2bGFuLmM6NTgyOlxcdHJldHVybiBuZXRwb2xsX3NlbmRfc2tiKHZsYW4tXFx1MDAzZW5ldHBvbGwsIHNrYik7XFxuZHJpdmVycy9uZXQvbWFjdmxhbi5jLTU4My0jZWxzZVxcbi0tXFxuZHJpdmVycy9uZXQvbWFjdmxhbi5jPTU4OT1zdGF0aWMgbmV0ZGV2X3R4X3QgbWFjdmxhbl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9tYWN2bGFuLmMtNTk2LVxcdGlmICh1bmxpa2VseShuZXRwb2xsX3R4X3J1bm5pbmcoZGV2KSkpXFxuZHJpdmVycy9uZXQvbWFjdmxhbi5jOjU5NzpcXHRcXHRyZXR1cm4gbWFjdmxhbl9uZXRwb2xsX3NlbmRfc2tiKHZsYW4sIHNrYik7XFxuZHJpdmVycy9uZXQvbWFjdmxhbi5jLTU5OC1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMTc0PXN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIwNy1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIwODpcXHRyZXR1cm4gKGludCluZXRwb2xsX3NlbmRfc2tiKG5wLCBza2IpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjA5LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdGVhbS5oPTk5PXN0YXRpYyBpbmxpbmUgYm9vbCB0ZWFtX3BvcnRfZGV2X3R4YWJsZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqcG9ydF9kZXYpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3RlYW0uaC0xMTItI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXFxuaW5jbHVkZS9saW51eC9pZl90ZWFtLmg6MTEzOnN0YXRpYyBpbmxpbmUgdm9pZCB0ZWFtX25ldHBvbGxfc2VuZF9za2Ioc3RydWN0IHRlYW1fcG9ydCAqcG9ydCxcXG5pbmNsdWRlL2xpbnV4L2lmX3RlYW0uaC0xMTQtXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IpXFxuaW5jbHVkZS9saW51eC9pZl90ZWFtLmgtMTE1LXtcXG5pbmNsdWRlL2xpbnV4L2lmX3RlYW0uaDoxMTY6XFx0bmV0cG9sbF9zZW5kX3NrYihwb3J0LVxcdTAwM2VucCwgc2tiKTtcXG5pbmNsdWRlL2xpbnV4L2lmX3RlYW0uaC0xMTctfVxcbmluY2x1ZGUvbGludXgvaWZfdGVhbS5oLTExOC0jZWxzZVxcbmluY2x1ZGUvbGludXgvaWZfdGVhbS5oOjExOTpzdGF0aWMgaW5saW5lIHZvaWQgdGVhbV9uZXRwb2xsX3NlbmRfc2tiKHN0cnVjdCB0ZWFtX3BvcnQgKnBvcnQsXFxuaW5jbHVkZS9saW51eC9pZl90ZWFtLmgtMTIwLVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9saW51eC9pZl90ZWFtLmg9MjM3PXN0YXRpYyBpbmxpbmUgaW50IHRlYW1fZGV2X3F1ZXVlX3htaXQoc3RydWN0IHRlYW0gKnRlYW0sIHN0cnVjdCB0ZWFtX3BvcnQgKnBvcnQsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3RlYW0uaC0yNDUtXFx0aWYgKHVubGlrZWx5KG5ldHBvbGxfdHhfcnVubmluZyhuZXRkZXZfZnJvbV9wcml2KHRlYW0pKSkpIHtcXG5pbmNsdWRlL2xpbnV4L2lmX3RlYW0uaDoyNDY6XFx0XFx0dGVhbV9uZXRwb2xsX3NlbmRfc2tiKHBvcnQsIHNrYik7XFxuaW5jbHVkZS9saW51eC9pZl90ZWFtLmgtMjQ3LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRwb2xsLmg9Njg9dm9pZCBkb19uZXRwb2xsX2NsZWFudXAoc3RydWN0IG5ldHBvbGwgKm5wKTtcXG5pbmNsdWRlL2xpbnV4L25ldHBvbGwuaDo2OTpuZXRkZXZfdHhfdCBuZXRwb2xsX3NlbmRfc2tiKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuaW5jbHVkZS9saW51eC9uZXRwb2xsLmgtNzAtdm9pZCBuZXRwb2xsX3phcF9jb21wbGV0aW9uX3F1ZXVlKHZvaWQpO1xcbi0tXFxuaW5jbHVkZS9uZXQvYm9uZGluZy5oPTU0OD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc2xhdmVfbGFzdF90eChzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxcbi0tXFxuaW5jbHVkZS9uZXQvYm9uZGluZy5oLTU1My0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcXG5pbmNsdWRlL25ldC9ib25kaW5nLmg6NTU0OnN0YXRpYyBpbmxpbmUgbmV0ZGV2X3R4X3QgYm9uZF9uZXRwb2xsX3NlbmRfc2tiKGNvbnN0IHN0cnVjdCBzbGF2ZSAqc2xhdmUsXFxuaW5jbHVkZS9uZXQvYm9uZGluZy5oLTU1NS1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5pbmNsdWRlL25ldC9ib25kaW5nLmgtNTU2LXtcXG5pbmNsdWRlL25ldC9ib25kaW5nLmg6NTU3OlxcdHJldHVybiBuZXRwb2xsX3NlbmRfc2tiKHNsYXZlLVxcdTAwM2VucCwgc2tiKTtcXG5pbmNsdWRlL25ldC9ib25kaW5nLmgtNTU4LX1cXG5pbmNsdWRlL25ldC9ib25kaW5nLmgtNTU5LSNlbHNlXFxuaW5jbHVkZS9uZXQvYm9uZGluZy5oOjU2MDpzdGF0aWMgaW5saW5lIG5ldGRldl90eF90IGJvbmRfbmV0cG9sbF9zZW5kX3NrYihjb25zdCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlLFxcbmluY2x1ZGUvbmV0L2JvbmRpbmcuaC01NjEtXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvODAyMXEvdmxhbl9kZXYuYz00Nj1zdGF0aWMgaW50IHZsYW5fZGV2X2hhcmRfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvODAyMXEvdmxhbl9kZXYuYy04OS1cXG5uZXQvODAyMXEvdmxhbl9kZXYuYzo5MDpzdGF0aWMgaW5saW5lIG5ldGRldl90eF90IHZsYW5fbmV0cG9sbF9zZW5kX3NrYihzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmxhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvODAyMXEvdmxhbl9kZXYuYy05MS17XFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtOTItI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmM6OTM6XFx0cmV0dXJuIG5ldHBvbGxfc2VuZF9za2Iodmxhbi1cXHUwMDNlbmV0cG9sbCwgc2tiKTtcXG5uZXQvODAyMXEvdmxhbl9kZXYuYy05NC0jZWxzZVxcbi0tXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmM9MTAwPXN0YXRpYyBuZXRkZXZfdHhfdCB2bGFuX2Rldl9oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC84MDIxcS92bGFuX2Rldi5jLTEyMy1cXHRpZiAodW5saWtlbHkobmV0cG9sbF90eF9ydW5uaW5nKGRldikpKVxcbm5ldC84MDIxcS92bGFuX2Rldi5jOjEyNDpcXHRcXHRyZXR1cm4gdmxhbl9uZXRwb2xsX3NlbmRfc2tiKHZsYW4sIHNrYik7XFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtMTI1LVxcbi0tXFxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmM9NzM9c3RhdGljIHZvaWQgX19icl9mb3J3YXJkKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnRvLFxcbi0tXFxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtMTA2LVxcdFxcdFxcdGVsc2VcXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYzoxMDc6XFx0XFx0XFx0XFx0YnJfbmV0cG9sbF9zZW5kX3NrYih0bywgc2tiKTtcXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0xMDgtXFx0XFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9ODE0PW5ldGRldl90eF90IGJyX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTgxNS0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo4MTY6c3RhdGljIGlubGluZSB2b2lkIGJyX25ldHBvbGxfc2VuZF9za2IoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC04MTctXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtODE4LXtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo4MTk6XFx0bmV0cG9sbF9zZW5kX3NrYihwLVxcdTAwM2VucCwgc2tiKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC04MjAtfVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9ODIzPXZvaWQgYnJfbmV0cG9sbF9kaXNhYmxlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTgyNC0jZWxzZVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjgyNTpzdGF0aWMgaW5saW5lIHZvaWQgYnJfbmV0cG9sbF9zZW5kX3NrYihjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTgyNi1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL25ldHBvbGwuYz0yNTg9c3RhdGljIGludCBuZXRwb2xsX293bmVyX2FjdGl2ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvbmV0cG9sbC5jLTI2OS0vKiBjYWxsIHdpdGggSVJRIGRpc2FibGVkICovXFxubmV0L2NvcmUvbmV0cG9sbC5jOjI3MDpzdGF0aWMgbmV0ZGV2X3R4X3QgX19uZXRwb2xsX3NlbmRfc2tiKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvY29yZS9uZXRwb2xsLmMtMjcxLXtcXG4tLVxcbm5ldC9jb3JlL25ldHBvbGwuYy0zMTgtXFx0XFx0V0FSTl9PTkNFKCFpcnFzX2Rpc2FibGVkKCksXFxubmV0L2NvcmUvbmV0cG9sbC5jOjMxOTpcXHRcXHRcXHRcXFwibmV0cG9sbF9zZW5kX3NrYl9vbl9kZXYoKTogJXMgZW5hYmxlZCBpbnRlcnJ1cHRzIGluIHBvbGwgKCVwUylcXFxcblxcXCIsXFxubmV0L2NvcmUvbmV0cG9sbC5jLTMyMC1cXHRcXHRcXHRkZXYtXFx1MDAzZW5hbWUsIGRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX3N0YXJ0X3htaXQpO1xcbi0tXFxubmV0L2NvcmUvbmV0cG9sbC5jLTMzNy1cXG5uZXQvY29yZS9uZXRwb2xsLmM6MzM4Om5ldGRldl90eF90IG5ldHBvbGxfc2VuZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9jb3JlL25ldHBvbGwuYy0zMzkte1xcbi0tXFxubmV0L2NvcmUvbmV0cG9sbC5jLTM0Ny1cXHRcXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XFxubmV0L2NvcmUvbmV0cG9sbC5jOjM0ODpcXHRcXHRyZXQgPSBfX25ldHBvbGxfc2VuZF9za2IobnAsIHNrYik7XFxubmV0L2NvcmUvbmV0cG9sbC5jLTM0OS1cXHRcXHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XFxuLS1cXG5uZXQvY29yZS9uZXRwb2xsLmMtMzUyLX1cXG5uZXQvY29yZS9uZXRwb2xsLmM6MzUzOkVYUE9SVF9TWU1CT0wobmV0cG9sbF9zZW5kX3NrYik7XFxubmV0L2NvcmUvbmV0cG9sbC5jLTM1NC1cXG4tLVxcbm5ldC9kc2EvdXNlci5jPTgyMD1zdGF0aWMgaW50IGRzYV91c2VyX3BvcnRfb2JqX2RlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB2b2lkICpjdHgsXFxuLS1cXG5uZXQvZHNhL3VzZXIuYy04NjgtXFxubmV0L2RzYS91c2VyLmM6ODY5OnN0YXRpYyBuZXRkZXZfdHhfdCBkc2FfdXNlcl9uZXRwb2xsX3NlbmRfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2RzYS91c2VyLmMtODcwLVxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9kc2EvdXNlci5jLTg3NC1cXG5uZXQvZHNhL3VzZXIuYzo4NzU6XFx0cmV0dXJuIG5ldHBvbGxfc2VuZF9za2IocC1cXHUwMDNlbmV0cG9sbCwgc2tiKTtcXG5uZXQvZHNhL3VzZXIuYy04NzYtI2Vsc2VcXG4tLVxcbm5ldC9kc2EvdXNlci5jPTg5Nj1uZXRkZXZfdHhfdCBkc2FfZW5xdWV1ZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9kc2EvdXNlci5jLTkwMS1cXHRpZiAodW5saWtlbHkobmV0cG9sbF90eF9ydW5uaW5nKGRldikpKVxcbm5ldC9kc2EvdXNlci5jOjkwMjpcXHRcXHRyZXR1cm4gZHNhX3VzZXJfbmV0cG9sbF9zZW5kX3NrYihkZXYsIHNrYik7XFxubmV0L2RzYS91c2VyLmMtOTAzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNDoyNjo1My40NTgxMDU0MzRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNzg2MTU5OTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgTmV0cG9sbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gYG5ldHBvbGwuY2AgcmVzaWRlcyB3aXRoaW4gYG5ldC9jb3JlL25ldHBvbGwuY2AuIFJpZ2h0LiBOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZ3VyYXRpb25zIGFjdHVhbGx5ICplbmFibGUqIHRoYXQgcGFydGljdWxhciBjb21wb25lbnQuIFdoZXJlJ3MgdGhlIHJpZ2h0IHBsYWNlIHRvIGxvb2sgZm9yIHRoYXQ/IE9mIGNvdXJzZSwgdGhlIGBNYWtlZmlsZWAgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LCBgbmV0L2NvcmUvTWFrZWZpbGVgLCBpcyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gVGhhdCBzaG91bGQgaGF2ZSB0aGUgbmVjZXNzYXJ5IGJ1aWxkIGxvZ2ljIGFuZCBjb25kaXRpb25hbCBpbmNsdXNpb24gcnVsZXMuIExldCdzIGRpZyBpbnRvIHRoYXQgYW5kIHNlZSB3aGF0IGZsYWdzIG9yIGRlcGVuZGVuY2llcyBhcmUgaW4gcGxheS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzYyNSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA0OjI2OjU1LjI0NDI2NzczNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQ3NTk0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRwb2xsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlPTI3PW9iai0kKENPTkZJR19ORVRfUEtUR0VOKSArPSBwa3RnZW4ub1xcbm5ldC9jb3JlL01ha2VmaWxlOjI4Om9iai0kKENPTkZJR19ORVRQT0xMKSArPSBuZXRwb2xsLm9cXG5uZXQvY29yZS9NYWtlZmlsZS0yOS1vYmotJChDT05GSUdfRklCX1JVTEVTKSArPSBmaWJfcnVsZXMub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNDoyNjo1NS4yOTA3NDgwNzVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozOTc0MDc1NTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgTkVUUE9MTCBhbmQgTkVUX1BPTExfQ09OVFJPTExFUiBLY29uZmlnIERlZmluaXRpb25zKipcblxuT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVycGxheSBiZXR3ZWVuIGBORVRQT0xMYCBhbmQgYE5FVF9QT0xMX0NPTlRST0xMRVJgIHdpdGhpbiB0aGUgS2NvbmZpZyBzeXN0ZW0uIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIHJlbGV2YW50IGRlZmluaXRpb25zIOKAkyBwcm9iYWJseSBgbmV0L2NvcmUvS2NvbmZpZ2Agb3Igc2ltaWxhciwgZGVwZW5kaW5nIG9uIHRoZSBrZXJuZWwgdmVyc2lvbiBJJ20gd29ya2luZyB3aXRoIOKAkyB0byBnZXQgdGhlIGV4YWN0IGRldGFpbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGVzZSBvcHRpb25zIHJlbGF0ZSB0byBlbmFibGluZyBvciBkaXNhYmxpbmcgbmV0d29yayBwb2xsaW5nIGZlYXR1cmVzLiBTcGVjaWZpY2FsbHksIEknbSBpbnRlcmVzdGVkIGluOlxuXG4qICAgKipUaGUgQ29uZmlnIERlcGVuZGVuY2llczoqKiBXaGF0IG90aGVyIEtjb25maWcgc3ltYm9scyBkb2VzIGBORVRQT0xMYCBkZXBlbmQgb24/IElzIGl0IHRpZWQgdG8gc3BlY2lmaWMgZHJpdmVycyBvciBmZWF0dXJlcz8gRG9lcyBpdCByZXF1aXJlIHRoaW5ncyBsaWtlIGludGVycnVwdCBtYW5hZ2VtZW50IG9yIERNQSBjYXBhYmlsaXRpZXM/IFdoYXQgYWJvdXQgYE5FVF9QT0xMX0NPTlRST0xMRVJgPyBEb2VzIHRoZSBleGlzdGVuY2Ugb2YgYSBwb2xsIGNvbnRyb2xsZXIgaW1wbHkgYW55IHNwZWNpZmljIGNhcGFiaWxpdGllcyBpbiB0aGUgc2VsZWN0ZWQgZHJpdmVyP1xuKiAgICoqSW1wbGllZCBGdW5jdGlvbmFsaXR5OioqIFdoYXQgaXMgdGhlIGludGVudCBvZiBlYWNoIGRlZmluZT8gSG93IGlzIGBORVRQT0xMYCAqdXNlZCogaW4gdGhlIGtlcm5lbD8gRG9lcyBpdCBhbGxvdyBzcGVjaWZpYyBmZWF0dXJlcyB0byBiZSBvcHRpb25hbGx5IGltcGxlbWVudGVkPyBIb3cgZG9lcyBhIGBORVRfUE9MTF9DT05UUk9MTEVSYCBmaXQgaW50byB0aGUgZ3JhbmRlciBzY2hlbWUgb2YgYW4gRXRoZXJuZXQgZHJpdmVyPyBJcyBpdCB1c2VkIHRvIGRpc2FibGUgaW50ZXJydXB0cz9cbiogICAqKkludGVyYWN0aW9uIHdpdGggRHJpdmVyczoqKiBIb3cgYXJlIG5ldHdvcmsgZHJpdmVycyBpbXBhY3RlZCBieSB0aGVzZSBjb25maWd1cmF0aW9ucz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBmb3IgZHJpdmVycyB0aGF0IGltcGxlbWVudCBuZXR3b3JrIHBvbGxpbmcuIEFyZSBjZXJ0YWluIGRyaXZlcnMgKnJlcXVpcmVkKiB0byBpbXBsZW1lbnQgc3BlY2lmaWMgYG5ldHBvbGxgIEFQSXMgd2hlbiBgTkVUUE9MTGAgaXMgc2V0PyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBwb3dlciBtYW5hZ2VtZW50IGFuZCBsaW5rIHN0YXR1cyBjaGFuZ2VzP1xuKiAgICoqQm9vdCBUaW1lIENvbmZpZ3VyYXRpb246KiogSSBuZWVkIHRvIGNsYXJpZnkgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZSBmb3IgZHJpdmVycyBhbmQgbmV0d29ya2luZyBhdCBib290IHRpbWUuXG4qICAgKipQb3RlbnRpYWwgY29uZmxpY3RzOioqIEhvdyBkb2VzIHRoZSBzZXR0aW5nIG9mIHRoZXNlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgYWZmZWN0IHBvc3NpYmxlIGNvbmZsaWN0cyBhbmQgcnVudGltZSBiZWhhdmlvcj9cblxuVWx0aW1hdGVseSwgdGhlIGdvYWwgaXMgdG8gZnVsbHkgZ3Jhc3AgdGhlIGNvbnRyb2wgZmxvdyB0aGVzZSBvcHRpb25zIHJlcHJlc2VudCB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suIFRoaXMgd2lsbCBoZWxwIG1lIGRpYWdub3NlIGlzc3Vlcywgb3B0aW1pemUgcG9sbGluZyBiZWhhdmlvciwgb3IgdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhYmlsaXR5IG9mIGNlcnRhaW4gZmVhdHVyZXMgYmFzZWQgb24gbXkgY3VycmVudCBpbnZlc3RpZ2F0aW9uLiBTbywgZGlnZ2luZyBpbnRvIHRoZSBLY29uZmlnIGRlZmluaXRpb25zIGlzIHRoZSBjcml0aWNhbCBmaXJzdCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTEzLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDQ6MjY6NTkuMjY0ODI1NjYzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTgxNjgyNDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRQT0xMXFxcXGJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz0zNTU9Y29uZmlnIE5FVENPTlNPTEVfUFJFUEVORF9SRUxFQVNFXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTM2Ni1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjM2Nzpjb25maWcgTkVUUE9MTFxcbmRyaXZlcnMvbmV0L0tjb25maWctMzY4LVxcdGRlZl9ib29sIE5FVENPTlNPTEVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDQ6Mjc6MDEuNDQ2NTE2MzdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDM1MzI2NTQ4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipFeGFtaW5pbmcgdGhlIE5ldHdvcmsgRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gQmFzZWQgb24gd2hhdCBJJ20gbG9va2luZyBhdCwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhcm91bmQgbGluZSAzNjcuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIGEgcGFydGljdWxhciBkcml2ZXIgY29uZmlndXJhdGlvbiwgb3IgYXQgbGVhc3QgYSByZWxhdGVkIHNlY3Rpb24sIGJlZ2lucy4gSG9wZWZ1bGx5LCBpdCdsbCBnaXZlIG1lIHNvbWUga2V5IGluc2lnaHRzIGludG8gaG93IHRoaXMgcGFydGljdWxhciBuZXR3b3JrIGRyaXZlciBpcyBjb25maWd1cmVkLCBhbnkgZGVwZW5kZW5jaWVzLCBhbmQgdGhlIGF2YWlsYWJsZSBvcHRpb25zLiBUaW1lIHRvIGdldCB0byB0aGUgZGV0YWlscyFcblxuXG4iLCJJbnB1dFRva2VucyI6ODQ4NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA0OjI3OjA1Ljc5OTc4OTI0MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Nzk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM0MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM0MDpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGFiaWxpdHkgdG8gZHluYW1pY2FsbHkgcmVjb25maWd1cmUgdGFyZ2V0XFxuIDM0MTpcXHRcXHQgIHBhcmFtZXRlcnMgKGludGVyZmFjZSwgSVAgYWRkcmVzc2VzLCBwb3J0IG51bWJlcnMsIE1BQyBhZGRyZXNzZXMpXFxuIDM0MjpcXHRcXHQgIGF0IHJ1bnRpbWUgdGhyb3VnaCBhIHVzZXJzcGFjZSBpbnRlcmZhY2UgZXhwb3J0ZWQgdXNpbmcgY29uZmlnZnMuXFxuIDM0MzpcXHRcXHQgIFNlZSBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcXHUwMDNlIGZvciBkZXRhaWxzLlxcbiAzNDQ6XFx0XFxuIDM0NTpcXHRjb25maWcgTkVUQ09OU09MRV9FWFRFTkRFRF9MT0dcXG4gMzQ2OlxcdFxcdGJvb2wgXFxcIlNldCBrZXJuZWwgZXh0ZW5kZWQgbWVzc2FnZSBieSBkZWZhdWx0XFxcIlxcbiAzNDc6XFx0XFx0ZGVwZW5kcyBvbiBORVRDT05TT0xFXFxuIDM0ODpcXHRcXHRkZWZhdWx0IG5cXG4gMzQ5OlxcdFxcdGhlbHBcXG4gMzUwOlxcdFxcdCAgU2V0IGV4dGVuZGVkIGxvZyBzdXBwb3J0IGZvciBuZXRjb25zb2xlIG1lc3NhZ2UuIElmIHRoaXMgb3B0aW9uIGlzXFxuIDM1MTpcXHRcXHQgIHNldCwgbG9nIG1lc3NhZ2VzIGFyZSB0cmFuc21pdHRlZCB3aXRoIGV4dGVuZGVkIG1ldGFkYXRhIGhlYWRlciBpbiBhXFxuIDM1MjpcXHRcXHQgIGZvcm1hdCBzaW1pbGFyIHRvIC9kZXYva21zZy4gIFNlZVxcbiAzNTM6XFx0XFx0ICBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcXHUwMDNlIGZvciBkZXRhaWxzLlxcbiAzNTQ6XFx0XFxuIDM1NTpcXHRjb25maWcgTkVUQ09OU09MRV9QUkVQRU5EX1JFTEVBU0VcXG4gMzU2OlxcdFxcdGJvb2wgXFxcIlByZXBlbmQga2VybmVsIHJlbGVhc2UgdmVyc2lvbiBpbiB0aGUgbWVzc2FnZSBieSBkZWZhdWx0XFxcIlxcbiAzNTc6XFx0XFx0ZGVwZW5kcyBvbiBORVRDT05TT0xFX0VYVEVOREVEX0xPR1xcbiAzNTg6XFx0XFx0ZGVmYXVsdCBuXFxuIDM1OTpcXHRcXHRoZWxwXFxuIDM2MDpcXHRcXHQgIFNldCBrZXJuZWwgcmVsZWFzZSB0byBiZSBwcmVwZW5kZWQgdG8gZWFjaCBuZXRjb25zb2xlIG1lc3NhZ2UgYnlcXG4gMzYxOlxcdFxcdCAgZGVmYXVsdC4gSWYgdGhpcyBvcHRpb24gaXMgc2V0LCB0aGUga2VybmVsIHJlbGVhc2UgaXMgcHJlcGVuZGVkIGludG9cXG4gMzYyOlxcdFxcdCAgdGhlIGZpcnN0IGZpZWxkIG9mIGV2ZXJ5IG5ldGNvbnNvbGUgbWVzc2FnZSwgc28sIHRoZSBuZXRjb25zb2xlXFxuIDM2MzpcXHRcXHQgIHNlcnZlci9wZWVyIGNhbiBlYXNpbHkgaWRlbnRpZnkgd2hhdCBrZXJuZWwgcmVsZWFzZSBpcyBsb2dnaW5nIGVhY2hcXG4gMzY0OlxcdFxcdCAgbWVzc2FnZS4gIFNlZSBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcXHUwMDNlIGZvclxcbiAzNjU6XFx0XFx0ICBkZXRhaWxzLlxcbiAzNjY6XFx0XFxuIDM2NzpcXHRjb25maWcgTkVUUE9MTFxcbiAzNjg6XFx0XFx0ZGVmX2Jvb2wgTkVUQ09OU09MRVxcbiAzNjk6XFx0XFxuIDM3MDpcXHRjb25maWcgTkVUX1BPTExfQ09OVFJPTExFUlxcbiAzNzE6XFx0XFx0ZGVmX2Jvb2wgTkVUUE9MTFxcbiAzNzI6XFx0XFxuIDM3MzpcXHRjb25maWcgTlRCX05FVERFVlxcbiAzNzQ6XFx0XFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgRXRoZXJuZXQgb3ZlciBOVEIgVHJhbnNwb3J0XFxcIlxcbiAzNzU6XFx0XFx0ZGVwZW5kcyBvbiBOVEJfVFJBTlNQT1JUXFxuIDM3NjpcXHRcXG4gMzc3OlxcdGNvbmZpZyBSSU9ORVRcXG4gMzc4OlxcdFxcdHRyaXN0YXRlIFxcXCJSYXBpZElPIEV0aGVybmV0IG92ZXIgbWVzc2FnaW5nIGRyaXZlciBzdXBwb3J0XFxcIlxcbiAzNzk6XFx0XFx0ZGVwZW5kcyBvbiBSQVBJRElPXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA0OjI3OjA1Ljc5OTg2OTAzMVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNjI5NDgyNTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5KipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGNvbmZpZyBORVRQT0xMYCBzZXR0aW5nLCBhbmQgaXQncyBkZWZpbmVkIGFzIGEgYm9vbGVhbiwgY29udHJvbGxlZCBieSBgTkVUQ09OU09MRWAuIEFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZS4gV2hhdCBkb2VzIGBORVRDT05TT0xFYCBkZXBlbmQgb24/IEl0J3MgdGltZSB0byBkaWcgaW50byB0aGUgYGRyaXZlcnMvbmV0L0tjb25maWdgIGZpbGUgYW5kIGNoZWNrIHRoZSBkZWZpbml0aW9uIGZvciBgTkVUQ09OU09MRWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMsIGltcGxpY2F0aW9ucywgYW5kIGFsbCB0aGF0IGdvb2Qgc3R1ZmYgb2YgYE5FVENPTlNPTEVgLiBHb3QgdG8ga25vdyB3aGF0J3MgbGlua2VkIGhlcmUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyNzUsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA0OjI3OjA3LjQyOTM1ODMzN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0NDQxODE2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUQ09OU09MRVxcXFxiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9MzE4PWNvbmZpZyBNQUNTRUNcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzI2LVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzI3OmNvbmZpZyBORVRDT05TT0xFXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMjgtXFx0dHJpc3RhdGUgXFxcIk5ldHdvcmsgY29uc29sZSBsb2dnaW5nIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA0OjI3OjA5LjY3Mzc4MTkyMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3NDQ5Mzg4ODA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBwcm92aWRlZCB0ZXh0OlxuXG4qKkFuYWx5emluZyBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgU2VjdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byBsaW5lcyAzMjUtMzQ1IG9mIGBkcml2ZXJzL25ldC9LY29uZmlnYC4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIGRlZmluZSBzb21lIG5ldHdvcmsgZHJpdmVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgcHJvYmFibHkgcmVsYXRlZCB0byBhIHNwZWNpZmljIGhhcmR3YXJlIG9yIHNvZnR3YXJlIGZlYXR1cmUuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBrZXkgZGVwZW5kZW5jaWVzIGFuZCB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgZWFjaCBvcHRpb24uIEFyZSB0aGVzZSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzPyBBcmUgdGhleSByZWxhdGVkIHRvIHByb3RvY29sIHN1cHBvcnQsIG9yIHBlcmhhcHMgb2ZmbG9hZCBjYXBhYmlsaXRpZXM/IFRoZSBzdHJ1Y3R1cmUgb2YgS2NvbmZpZyBmaWxlcyBpcyB1c3VhbGx5IHByZXR0eSBwcmVkaWN0YWJsZSwgYnV0IGNvbnRleHQgaXMgYWx3YXlzIGtleS4gTGV0IG1lIGxvb2sgZm9yIGBjb25maWdgIGtleXdvcmRzLCBkZXBlbmRlbmNpZXMgZXhwcmVzc2VkIHdpdGggYGRlcGVuZHMgb25gIHN0YXRlbWVudHMsIGFuZCBoZWxwIHRleHQgdGhhdCBjbGFyaWZpZXMgdGhlIHB1cnBvc2Ugb2YgZWFjaCBvcHRpb24uIEknbGwgbWVudGFsbHkgbm90ZSBhbnkgdW51c3VhbCBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IHdhcnJhbnQgZnVydGhlciBpbnZlc3RpZ2F0aW9uLCBtYXliZSBsb29raW5nIGF0IGhvdyB0aGVzZSBvcHRpb25zIGludGVyYWN0IHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIG5ldHdvcmsgc3RhY2suIEknbSBhbHNvIGxvb2tpbmcgZm9yIGFueSBkZWZhdWx0IHZhbHVlcywgdGhhdCBjYW4gcHJvdmlkZSBhIGhpbnQgYWJvdXQgdGhlIGRldmVsb3BlcidzIHR5cGljYWwgdXNlIGNhc2UuIFVsdGltYXRlbHksIEknbSB0cnlpbmcgdG8gYnVpbGQgYSBxdWljayBtZW50YWwgbW9kZWwgb2Ygd2hhdCB0aGVzZSBsaW5lcyBhcmUgY29uZmlndXJpbmcgYW5kIGhvdyBpdCBpbnRlZ3JhdGVzIGludG8gdGhlIGJyb2FkZXIgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTQzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDQ6Mjc6MTcuMTIzMTczNDE3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyNzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzI1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzI1OlxcdFxcdCAgIE1BQ3NlYyBpcyBhbiBlbmNyeXB0aW9uIHN0YW5kYXJkIGZvciBFdGhlcm5ldC5cXG4gMzI2OlxcdFxcbiAzMjc6XFx0Y29uZmlnIE5FVENPTlNPTEVcXG4gMzI4OlxcdFxcdHRyaXN0YXRlIFxcXCJOZXR3b3JrIGNvbnNvbGUgbG9nZ2luZyBzdXBwb3J0XFxcIlxcbiAzMjk6XFx0XFx0ZGVwZW5kcyBvbiBQUklOVEtcXG4gMzMwOlxcdFxcdGhlbHBcXG4gMzMxOlxcdFxcdCAgSWYgeW91IHdhbnQgdG8gbG9nIGtlcm5lbCBtZXNzYWdlcyBvdmVyIHRoZSBuZXR3b3JrLCBlbmFibGUgdGhpcy5cXG4gMzMyOlxcdFxcdCAgU2VlIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdFxcdTAwM2UgZm9yIGRldGFpbHMuXFxuIDMzMzpcXHRcXG4gMzM0OlxcdGNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcXG4gMzM1OlxcdFxcdGJvb2wgXFxcIkR5bmFtaWMgcmVjb25maWd1cmF0aW9uIG9mIGxvZ2dpbmcgdGFyZ2V0c1xcXCJcXG4gMzM2OlxcdFxcdGRlcGVuZHMgb24gTkVUQ09OU09MRSBcXHUwMDI2XFx1MDAyNiBTWVNGUyBcXHUwMDI2XFx1MDAyNiBDT05GSUdGU19GUyBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuIDMzNzpcXHRcXHRcXHRcXHQhKE5FVENPTlNPTEU9eSBcXHUwMDI2XFx1MDAyNiBDT05GSUdGU19GUz1tKVxcbiAzMzg6XFx0XFx0c2VsZWN0IFBSSU5US19FWEVDVVRJT05fQ1RYXFxuIDMzOTpcXHRcXHRoZWxwXFxuIDM0MDpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGFiaWxpdHkgdG8gZHluYW1pY2FsbHkgcmVjb25maWd1cmUgdGFyZ2V0XFxuIDM0MTpcXHRcXHQgIHBhcmFtZXRlcnMgKGludGVyZmFjZSwgSVAgYWRkcmVzc2VzLCBwb3J0IG51bWJlcnMsIE1BQyBhZGRyZXNzZXMpXFxuIDM0MjpcXHRcXHQgIGF0IHJ1bnRpbWUgdGhyb3VnaCBhIHVzZXJzcGFjZSBpbnRlcmZhY2UgZXhwb3J0ZWQgdXNpbmcgY29uZmlnZnMuXFxuIDM0MzpcXHRcXHQgIFNlZSBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcXHUwMDNlIGZvciBkZXRhaWxzLlxcbiAzNDQ6XFx0XFxuIDM0NTpcXHRjb25maWcgTkVUQ09OU09MRV9FWFRFTkRFRF9MT0dcXG4gMzQ2OlxcdFxcdGJvb2wgXFxcIlNldCBrZXJuZWwgZXh0ZW5kZWQgbWVzc2FnZSBieSBkZWZhdWx0XFxcIlxcbiAzNDc6XFx0XFx0ZGVwZW5kcyBvbiBORVRDT05TT0xFXFxuIDM0ODpcXHRcXHRkZWZhdWx0IG5cXG4gMzQ5OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDQ6Mjc6MTcuMTIzMjY4MzM3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc3ODc5MDA1OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW52ZXN0aWdhdGlvbiBvZiBOZXRwb2xsIGFuZCBTeXprYWxsZXIgUmVhY2hhYmlsaXR5KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYG5ldHBvbGxgIHNpdHVhdGlvbi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGl0J3MgdXNlZCwgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nLCBhbmQgaWYgaXQncyBldmVuIHJlbW90ZWx5IGFjY2Vzc2libGUgd2l0aGluIHRoZSBTeXprYWxsZXIgdGVzdGluZyBlbnZpcm9ubWVudC4gVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIHVzZXJzcGFjZSwgdGhyb3VnaCBTeXprYWxsZXIsIGNhbiBjb25maWd1cmUgb3IgdHJpZ2dlciBlaXRoZXIgYG5ldGNvbnNvbGVgIG9yIGBuZXRwb2xsYC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIFN5emthbGxlcidzIGRvY3VtZW50YXRpb24gYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IGV4aXN0aW5nIGRlc2NyaXB0aW9ucyBvciBtZWNoYW5pc21zIGZvciB1c2VyLXNwYWNlIGNvbnRyb2wgb3ZlciBgbmV0Y29uc29sZWAuIEkgYWxzbyB3YW50IHRvIGV4cGxvcmUgd2hldGhlciBgbmV0Y29uc29sZWAgKG9yIGV2ZW4gYG5ldHBvbGxgKSBtaWdodCBiZSBjb25maWd1cmFibGUgdmlhIHN0YW5kYXJkIGludGVyZmFjZXMgbGlrZSBjb25maWdmcywgc3lzZnMsIG1vZHVsZSBwYXJhbWV0ZXJzLCBvciBkeW5hbWljIHJlY29uZmlndXJhdGlvbi4gUGVyaGFwcyBgbmV0cG9sbGAgY291bGQgYmUgaW5kaXJlY3RseSB1dGlsaXplZCB0aHJvdWdoIG5ldHdvcmtpbmcgZmVhdHVyZXMgc3VjaCBhcyBib25kaW5nLCBicmlkZ2luZywgb3IgbWFjdmxhbi5cblxuV2FpdCBhIG1vbWVudC4gQmVmb3JlIEkgZ28gdG9vIGZhciBkb3duIHRoYXQgcGF0aCwgSSBzaG91bGQgbWFrZSBzdXJlIEkgY29tcGxldGVseSB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBvZiBgbmV0cG9sbGAgaXRzZWxmLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBuZXQvY29yZS9uZXRwb2xsLmNgLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYG5waW5mby1cdTAwM2V0eHFgIGFuZCB3aGF0IGl0IGFjdHVhbGx5IGRvZXMuIFRoYXQgc2hvdWxkIHByb3ZpZGUgYSBjcnVjaWFsIGZvb3Rob2xkIG9uIHRoZSBkZXRhaWxzLiBJIHdpbGwgbmVlZCB0byBkZWx2ZSBkZWVwZXIgaW50byB0aGUgY29kZSB0byBlbnN1cmUgSSBmdWxseSB1bmRlcnN0YW5kIHRoZSB3b3JraW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyMjAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNDoyNzoyNC45MTExNzA5NDdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvbmV0cG9sbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBDb21tb24gZnJhbWV3b3JrIGZvciBsb3ctbGV2ZWwgbmV0d29yayBjb25zb2xlLCBkdW1wLCBhbmQgZGVidWdnZXIgY29kZVxcbiAgIDQ6XFx0ICpcXG4gICA1OlxcdCAqIFNlcCA4IDIwMDMgIE1hdHQgTWFja2FsbCBcXHUwMDNjbXBtQHNlbGVuaWMuY29tXFx1MDAzZVxcbiAgIDY6XFx0ICpcXG4gICA3OlxcdCAqIGJhc2VkIG9uIHRoZSBuZXRjb25zb2xlIGNvZGUgZnJvbTpcXG4gICA4OlxcdCAqXFxuICAgOTpcXHQgKiBDb3B5cmlnaHQgKEMpIDIwMDEgIEluZ28gTW9sbmFyIFxcdTAwM2NtaW5nb0ByZWRoYXQuY29tXFx1MDAzZVxcbiAgMTA6XFx0ICogQ29weXJpZ2h0IChDKSAyMDAyICBSZWQgSGF0LCBJbmMuXFxuICAxMTpcXHQgKi9cXG4gIDEyOlxcdFxcbiAgMTM6XFx0I2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSBcXFwiOiBcXFwiIGZtdFxcbiAgMTQ6XFx0XFxuICAxNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlcGFyYW0uaFxcdTAwM2VcXG4gIDE2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4gIDE3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG4gIDE4OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXFx1MDAzZVxcbiAgMTk6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N0cmluZy5oXFx1MDAzZVxcbiAgMjA6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX2FycC5oXFx1MDAzZVxcbiAgMjE6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2luZXRkZXZpY2UuaFxcdTAwM2VcXG4gIDIyOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbmV0LmhcXHUwMDNlXFxuICAyMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvaW50ZXJydXB0LmhcXHUwMDNlXFxuICAyNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0cG9sbC5oXFx1MDAzZVxcbiAgMjU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkLmhcXHUwMDNlXFxuICAyNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVsYXkuaFxcdTAwM2VcXG4gIDI3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9yY3VwZGF0ZS5oXFx1MDAzZVxcbiAgMjg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXFx1MDAzZVxcbiAgMjk6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4gIDMwOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9leHBvcnQuaFxcdTAwM2VcXG4gIDMxOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl92bGFuLmhcXHUwMDNlXFxuICAzMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvdWRwLmhcXHUwMDNlXFxuICAzMzpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L3RjcC5oXFx1MDAzZVxcbiAgMzQ6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9hZGRyY29uZi5oXFx1MDAzZVxcbiAgMzU6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9uZGlzYy5oXFx1MDAzZVxcbiAgMzY6XFx0I2luY2x1ZGUgXFx1MDAzY3RyYWNlL2V2ZW50cy9uYXBpLmhcXHUwMDNlXFxuICAzNzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgva2NvbmZpZy5oXFx1MDAzZVxcbiAgMzg6XFx0XFxuICAzOTpcXHQjZGVmaW5lIFVTRUNfUEVSX1BPTExcXHQ1MFxcbiAgNDA6XFx0XFxuICA0MTpcXHQvKlxcbiAgNDI6XFx0ICogQ2FwIG9uIHNrYnMgcGFya2VkIGluIG5waW5mby1cXHUwMDNldHhxIHdoaWxlIHRoZSBkZXZpY2UgaXMgYnVzeS4gVGhlIHF1ZXVlXFxuICA0MzpcXHQgKiBleGlzdHMgdG8gcmlkZSBvdXQgYSB0cmFuc2llbnQgc3RhbGw7IGEgcHJvZHVjZXIgdGhhdCBvdXRydW5zIHRoZVxcbiAgNDQ6XFx0ICogZGV2aWNlIGZvciBsb25nZXIgdGhhbiB0aGF0IG11c3QgbG9zZSBwYWNrZXRzLCBub3QgZ3JvdyBpdCB3aXRob3V0XFxuICA0NTpcXHQgKiBib3VuZC5cXG4gIDQ2OlxcdCAqL1xcbiAgNDc6XFx0I2RlZmluZSBORVRQT0xMX1RYUV9NQVhcXHQxMDI0XFxuICA0ODpcXHRcXG4gIDQ5OlxcdC8qXFxuICA1MDpcXHQgKiBjYXJyaWVyX3RpbWVvdXQgaXMgbmV0Y29uc29sZS1zcGVjaWZpYyBhbmQgb25seSBrZXB0IGhlcmUgdG8gcHJlc2VydmUgdGhlXFxuICA1MTpcXHQgKiBuZXRwb2xsLmNhcnJpZXJfdGltZW91dCBtb2R1bGUtcGFyYW1ldGVyIEFCSS4gSXRzIHZhbHVlIGlzIGV4cG9zZWQgdG9cXG4gIDUyOlxcdCAqIG5ldGNvbnNvbGUgdGhyb3VnaCBuZXRwb2xsX2dldF9jYXJyaWVyX3RpbWVvdXQoKS5cXG4gIDUzOlxcdCAqL1xcbiAgNTQ6XFx0c3RhdGljIHVuc2lnbmVkIGludCBjYXJyaWVyX3RpbWVvdXQgPSA0O1xcbiAgNTU6XFx0bW9kdWxlX3BhcmFtKGNhcnJpZXJfdGltZW91dCwgdWludCwgMDY0NCk7XFxuICA1NjpcXHRcXG4gIDU3OlxcdHVuc2lnbmVkIGludCBuZXRwb2xsX2dldF9jYXJyaWVyX3RpbWVvdXQodm9pZClcXG4gIDU4OlxcdHtcXG4gIDU5OlxcdFxcdHJldHVybiBjYXJyaWVyX3RpbWVvdXQ7XFxuICA2MDpcXHR9XFxuICA2MTpcXHRFWFBPUlRfU1lNQk9MX0dQTChuZXRwb2xsX2dldF9jYXJyaWVyX3RpbWVvdXQpO1xcbiAgNjI6XFx0XFxuICA2MzpcXHRzdGF0aWMgbmV0ZGV2X3R4X3QgbmV0cG9sbF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuICA2NDpcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiAgNjU6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxKVxcbiAgNjY6XFx0e1xcbiAgNjc6XFx0XFx0bmV0ZGV2X3R4X3Qgc3RhdHVzID0gTkVUREVWX1RYX09LO1xcbiAgNjg6XFx0XFx0bmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXM7XFxuICA2OTpcXHRcXG4gIDcwOlxcdFxcdGZlYXR1cmVzID0gbmV0aWZfc2tiX2ZlYXR1cmVzKHNrYik7XFxuICA3MTpcXHRcXG4gIDcyOlxcdFxcdGlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpIFxcdTAwMjZcXHUwMDI2XFxuICA3MzpcXHRcXHQgICAgIXZsYW5faHdfb2ZmbG9hZF9jYXBhYmxlKGZlYXR1cmVzLCBza2ItXFx1MDAzZXZsYW5fcHJvdG8pKSB7XFxuICA3NDpcXHRcXHRcXHRza2IgPSBfX3ZsYW5faHdhY2NlbF9wdXNoX2luc2lkZShza2IpO1xcbiAgNzU6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFza2IpKSB7XFxuICA3NjpcXHRcXHRcXHRcXHQvKiBUaGlzIGlzIGFjdHVhbGx5IGEgcGFja2V0IGRyb3AsIGJ1dCB3ZVxcbiAgNzc6XFx0XFx0XFx0XFx0ICogZG9uJ3Qgd2FudCB0aGUgY29kZSB0aGF0IGNhbGxzIHRoaXNcXG4gIDc4OlxcdFxcdFxcdFxcdCAqIGZ1bmN0aW9uIHRvIHRyeSBhbmQgb3BlcmF0ZSBvbiBhIE5VTEwgc2tiLlxcbiAgNzk6XFx0XFx0XFx0XFx0ICovXFxuICA4MDpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gIDgxOlxcdFxcdFxcdH1cXG4gIDgyOlxcdFxcdH1cXG4gIDgzOlxcdFxcbiAgODQ6XFx0XFx0c3RhdHVzID0gbmV0ZGV2X3N0YXJ0X3htaXQoc2tiLCBkZXYsIHR4cSwgZmFsc2UpO1xcbiAgODU6XFx0XFxuICA4NjpcXHRvdXQ6XFxuICA4NzpcXHRcXHRyZXR1cm4gc3RhdHVzO1xcbiAgODg6XFx0fVxcbiAgODk6XFx0XFxuICA5MDpcXHRzdGF0aWMgdm9pZCBxdWV1ZV9wcm9jZXNzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gIDkxOlxcdHtcXG4gIDkyOlxcdFxcdHN0cnVjdCBuZXRwb2xsX2luZm8gKm5waW5mbyA9XFxuICA5MzpcXHRcXHRcXHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5ldHBvbGxfaW5mbywgdHhfd29yay53b3JrKTtcXG4gIDk0OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuICA5NTpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiAgOTY6XFx0XFxuICA5NzpcXHRcXHR3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKFxcdTAwMjZucGluZm8tXFx1MDAzZXR4cSkpKSB7XFxuICA5ODpcXHRcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLVxcdTAwM2VkZXY7XFxuICA5OTpcXHRcXHRcXHRzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7XFxuIDEwMDpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgcV9pbmRleDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDQ6Mjc6MjQuOTExMjcxNTM3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUwNjAyOTkwNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBuZXRwb2xsYCBidXNpbmVzcy4gQXMgYSBxdWljayByZWZyZXNoZXIsIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzZXR1cCBhbmQgdGhlIHBhY2tldCBmbG93LiBJIHRoaW5rIHJlYWRpbmcgbGluZXMgMjYwIHRocm91Z2ggMzEwIG9mIGBuZXQvY29yZS9uZXRwb2xsLmNgIHNob3VsZCBnaXZlIG1lIGEgc29saWQgc3RhcnQgb24gdGhhdC4gSSdtIGtlZW4gdG8gc2VlIGhvdyB0aGV5J3ZlIGltcGxlbWVudGVkIGl0LCBjb25zaWRlcmluZyB0aGUgbnVhbmNlcyBvZiBoaWdoLXBlcmZvcm1hbmNlIG5ldHdvcmtpbmcgYW5kIHRoZSBrZXJuZWwncyBhcmNoaXRlY3R1cmUuIEknbSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGNsZXZlciBvcHRpbWl6YXRpb25zIHRoZXkndmUgZW1wbG95ZWQuIEl0IHdpbGwgYmUgaW50ZXJlc3RpbmcgdG8gc2VlIHdoYXQga2luZCBvZiBkZXNpZ24gY2hvaWNlcyB3ZXJlIG1hZGUgYW5kIGhvdyB0aGF0IG1heSBpbXBhY3QgcGVyZm9ybWFuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTM2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNDoyNzoyOS45NzE1NzQ2MzFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExNDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL25ldHBvbGwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNjA6XFx0XFx0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpO1xcbiAyNjE6XFx0XFxuIDI2MjpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShuYXBpLCBcXHUwMDI2ZGV2LVxcdTAwM2VuYXBpX2xpc3QsIGRldl9saXN0KSB7XFxuIDI2MzpcXHRcXHRcXHRpZiAoUkVBRF9PTkNFKG5hcGktXFx1MDAzZXBvbGxfb3duZXIpID09IHNtcF9wcm9jZXNzb3JfaWQoKSlcXG4gMjY0OlxcdFxcdFxcdFxcdHJldHVybiAxO1xcbiAyNjU6XFx0XFx0fVxcbiAyNjY6XFx0XFx0cmV0dXJuIDA7XFxuIDI2NzpcXHR9XFxuIDI2ODpcXHRcXG4gMjY5OlxcdC8qIGNhbGwgd2l0aCBJUlEgZGlzYWJsZWQgKi9cXG4gMjcwOlxcdHN0YXRpYyBuZXRkZXZfdHhfdCBfX25ldHBvbGxfc2VuZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAyNzE6XFx0e1xcbiAyNzI6XFx0XFx0bmV0ZGV2X3R4X3Qgc3RhdHVzID0gTkVUREVWX1RYX0JVU1k7XFxuIDI3MzpcXHRcXHRuZXRkZXZfdHhfdCByZXQgPSBORVRfWE1JVF9EUk9QO1xcbiAyNzQ6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4gMjc1OlxcdFxcdHVuc2lnbmVkIGxvbmcgdHJpZXM7XFxuIDI3NjpcXHRcXHQvKiBJdCBpcyB1cCB0byB0aGUgY2FsbGVyIHRvIGtlZXAgbnBpbmZvIGFsaXZlLiAqL1xcbiAyNzc6XFx0XFx0c3RydWN0IG5ldHBvbGxfaW5mbyAqbnBpbmZvO1xcbiAyNzg6XFx0XFxuIDI3OTpcXHRcXHRsb2NrZGVwX2Fzc2VydF9pcnFzX2Rpc2FibGVkKCk7XFxuIDI4MDpcXHRcXG4gMjgxOlxcdFxcdGRldiA9IG5wLVxcdTAwM2VkZXY7XFxuIDI4MjpcXHRcXHQvKiBucGluZm8tXFx1MDAzZXR4cSBiZWxvbmdzIHRvIG5wLVxcdTAwM2VkZXYsIHNvIHJldHJpZXMgbXVzdCBzdGF5IGJvdW5kIHRvIGl0LiAqL1xcbiAyODM6XFx0XFx0c2tiLVxcdTAwM2VkZXYgPSBkZXY7XFxuIDI4NDpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIDI4NTpcXHRcXHRucGluZm8gPSByY3VfZGVyZWZlcmVuY2VfYmgoZGV2LVxcdTAwM2VucGluZm8pO1xcbiAyODY6XFx0XFxuIDI4NzpcXHRcXHRpZiAoIW5waW5mbyB8fCAhbmV0aWZfcnVubmluZyhkZXYpIHx8ICFuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKSB7XFxuIDI4ODpcXHRcXHRcXHRkZXZfa2ZyZWVfc2tiX2lycShza2IpO1xcbiAyODk6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDI5MDpcXHRcXHR9XFxuIDI5MTpcXHRcXG4gMjkyOlxcdFxcdC8qIGRvbid0IGdldCBtZXNzYWdlcyBvdXQgb2Ygb3JkZXIsIGFuZCBubyByZWN1cnNpb24gKi9cXG4gMjkzOlxcdFxcdGlmIChza2JfcXVldWVfbGVuKFxcdTAwMjZucGluZm8tXFx1MDAzZXR4cSkgPT0gMCBcXHUwMDI2XFx1MDAyNiAhbmV0cG9sbF9vd25lcl9hY3RpdmUoZGV2KSkge1xcbiAyOTQ6XFx0XFx0XFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxO1xcbiAyOTU6XFx0XFxuIDI5NjpcXHRcXHRcXHR0eHEgPSBuZXRkZXZfY29yZV9waWNrX3R4KGRldiwgc2tiLCBOVUxMKTtcXG4gMjk3OlxcdFxcbiAyOTg6XFx0XFx0XFx0LyogdHJ5IHVudGlsIG5leHQgY2xvY2sgdGljayAqL1xcbiAyOTk6XFx0XFx0XFx0Zm9yICh0cmllcyA9IGppZmZpZXNfdG9fdXNlY3MoMSkvVVNFQ19QRVJfUE9MTDtcXG4gMzAwOlxcdFxcdFxcdCAgICAgdHJpZXMgXFx1MDAzZSAwOyAtLXRyaWVzKSB7XFxuIDMwMTpcXHRcXHRcXHRcXHRpZiAoSEFSRF9UWF9UUllMT0NLKGRldiwgdHhxKSkge1xcbiAzMDI6XFx0XFx0XFx0XFx0XFx0aWYgKCFuZXRpZl94bWl0X3N0b3BwZWQodHhxKSlcXG4gMzAzOlxcdFxcdFxcdFxcdFxcdFxcdHN0YXR1cyA9IG5ldHBvbGxfc3RhcnRfeG1pdChza2IsIGRldiwgdHhxKTtcXG4gMzA0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNDoyNzoyOS45NzE2ODg2NzFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzkxMzkzNDU4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldHBvbGwgVFggUXVldWUgYW5kIFBvdGVudGlhbCBPT00gVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSW4gYF9fbmV0cG9sbF9zZW5kX3NrYmAsIEkgc2VlIGEgY3JpdGljYWwgYXJlYSBjb25jZXJuaW5nIHRoZSBoYW5kbGluZyBvZiB0cmFuc21pc3Npb24gZmFpbHVyZXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHdoYXQgaGFwcGVucyBpbiB0aGUgZmFpbHVyZSBwYXRoLiBTcGVjaWZpY2FsbHksIGlmIGBkZXZfeG1pdF9jb21wbGV0ZShzdGF0dXMpYCByZXR1cm5zIGZhbHNlLCBpbXBseWluZyB0aGUgZGV2aWNlIGlzbid0IGltbWVkaWF0ZWx5IHJlYWR5IHRvIHNlbmQgdGhlIHBhY2tldC5cblxuRmlyc3QsIEkgc2VlIHRoZSBjb2RlIGNoZWNrcyBpZiB0aGUgYG5waW5mby1cdTAwM2V0eHFgIHF1ZXVlIGhhcyByZWFjaGVkIGl0cyBtYXhpbXVtIHNpemUsIGBORVRQT0xMX1RYUV9NQVhgLiAgSWYgaXQgKmhhcyosIHRoZSBwYWNrZXQgKGBza2JgKSBpcyBmcmVlZCBpbW1lZGlhdGVseSB1c2luZyBgZGV2X2tmcmVlX3NrYl9pcnEoc2tiKWAgYW5kIHRoZSBmdW5jdGlvbiBqdW1wcyB0byBgb3V0YCwgcmV0dXJuaW5nIGByZXRgIHdoaWNoLCBpbXBvcnRhbnRseSwgaXMgc2V0IHRvIGBORVRfWE1JVF9EUk9QYC5cblxuVGhlIGNydWNpYWwgcG9pbnQgaGl0cyBtZTogUHJldmlvdXNseSwgdGhlcmUgKndhcyBubyogbWF4aW11bSBzaXplIG9uIGBucGluZm8tXHUwMDNldHhxYCEgSWYgdGhlIG5ldHdvcmsgdHJhbnNtaXNzaW9uIGNvbnRpbnVvdXNseSBmYWlsZWQsIG9yIHdhcyBoYWx0ZWQsIHBhY2tldHMgY291bGQgYmUgZW5kbGVzc2x5IGFkZGVkIHRvIGBucGluZm8tXHUwMDNldHhxYC4gVGhpcywgd2l0aG91dCBhbnkgbGltaXQsIG9wZW5zIHRoZSBkb29yIHRvIGEgbWVtb3J5IGV4aGF1c3Rpb24gdnVsbmVyYWJpbGl0eSwgYSBjbGFzc2ljIE9PTSBzaXR1YXRpb24uICBUaGUgZmFjdCB0aGF0IHBhY2tldHMgd2VyZSBzaW1wbHkgcXVldWVkIGFuZCBub3QgZHJvcHBlZCwgZXNwZWNpYWxseSBnaXZlbiB0aGUgXCJvdXRcIiByZXR1cm4gc3RhdHVzLCBpcyBhIGh1Z2UgcmVkIGZsYWcuXG5cbk15IG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgYWN0dWFsbHkgcmVhY2hhYmxlLiBDYW4gSSB0cmlnZ2VyIHRoaXMgY29uZGl0aW9uIHdpdGhpbiBzeXprYWxsZXIgb3IgYSB2aXJ0dWFsIG1hY2hpbmU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgbmV0cG9sbGAgYW5kIGBuZXRjb25zb2xlYCBhcmUgY29uZmlndXJlZCBhbmQgdXNlZC4gV2hlcmUgYXJlIHRoZXNlIGZlYXR1cmVzIGV2ZW4gZW5hYmxlZD8gSSBuZWVkIHRvIGNoZWNrIGhvdyBgbmV0cG9sbGAgb3IgYG5ldGNvbnNvbGVgIGlzIGNvbmZpZ3VyZWQuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBfX25ldHBvbGxfc2V0dXBgIG9yIGBuZXRwb2xsX3NldHVwYCBpcyBjYWxsZWQuIEkgbmVlZCB0byBncmVwIGZvciBgbmV0cG9sbF9zZXR1cGAgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzExOCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA0OjI3OjMzLjg4NTYyNjUyMVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxMzQ1NDE1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRwb2xsX3NldHVwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MTM5Mj1zdGF0aWMgaW5saW5lIGludCBzbGF2ZV9lbmFibGVfbmV0cG9sbChzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xNDAxLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MTQwMjpcXHRlcnIgPSBfX25ldHBvbGxfc2V0dXAobnAsIHNsYXZlLVxcdTAwM2VkZXYpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTQwMy1cXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTE0NTE9c3RhdGljIHZvaWQgYm9uZF9uZXRwb2xsX2NsZWFudXAoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xNDYxLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MTQ2MjpzdGF0aWMgaW50IGJvbmRfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTQ2My17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTU5NDI9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBib25kX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU5NjAtI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo1OTYxOlxcdC5uZG9fbmV0cG9sbF9zZXR1cFxcdD0gYm9uZF9uZXRwb2xsX3NldHVwLFxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTk2Mi1cXHQubmRvX25ldHBvbGxfY2xlYW51cFxcdD0gYm9uZF9uZXRwb2xsX2NsZWFudXAsXFxuLS1cXG5kcml2ZXJzL25ldC9tYWN2bGFuLmM9MTEzNj1zdGF0aWMgdm9pZCBtYWN2bGFuX2Rldl9wb2xsX2NvbnRyb2xsZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy0xMTQwLVxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYzoxMTQxOnN0YXRpYyBpbnQgbWFjdmxhbl9kZXZfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy0xMTQyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy0xMTUyLVxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYzoxMTUzOlxcdGVyciA9IF9fbmV0cG9sbF9zZXR1cChuZXRwb2xsLCByZWFsX2Rldik7XFxuZHJpdmVycy9uZXQvbWFjdmxhbi5jLTExNTQtXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvbWFjdmxhbi5jPTExOTM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBtYWN2bGFuX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9tYWN2bGFuLmMtMTIxMi1cXHQubmRvX3BvbGxfY29udHJvbGxlclxcdD0gbWFjdmxhbl9kZXZfcG9sbF9jb250cm9sbGVyLFxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYzoxMjEzOlxcdC5uZG9fbmV0cG9sbF9zZXR1cFxcdD0gbWFjdmxhbl9kZXZfbmV0cG9sbF9zZXR1cCxcXG5kcml2ZXJzL25ldC9tYWN2bGFuLmMtMTIxNC1cXHQubmRvX25ldHBvbGxfY2xlYW51cFxcdD0gbWFjdmxhbl9kZXZfbmV0cG9sbF9jbGVhbnVwLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE2Mz1zdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjA1LSAqXFx0XFx0aXRzIEdGUF9BVE9NSUMgYWxsb2NhdGlvbiBmYWlscy4gTGlmZXRpbWUgYnJhY2tldHMgYVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMDY6ICpcXHRcXHRzdWNjZXNzZnVsIG5ldHBvbGxfc2V0dXAoKSAvIG5ldHBvbGxfY2xlYW51cCgpIHBhaXIgb24gQG5wLlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDctICogQHJlZmlsbF93cTpcXHRXb3JrIGl0ZW0gdGhhdCBhc3luY2hyb25vdXNseSB0b3BzIEBza2JfcG9vbCBiYWNrIHVwIHRvXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9NDQ5PXN0YXRpYyBpbnQgbmV0Y29uc190YWtlX2lwdjQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00NzgtICogVGVzdCB3aGV0aGVyIHRoZSBjYWxsZXIgbGVmdCBudC1cXHUwMDNlbG9jYWxfaXAgdW5zZXQsIHNvIHRoYXRcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NDc5OiAqIG5ldGNvbnNfbmV0cG9sbF9zZXR1cCgpIHNob3VsZCBhdXRvLXBvcHVsYXRlIGl0IGZyb20gdGhlIGVncmVzcyBkZXZpY2UuXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQ4MC0gKlxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTQ4Nz1zdGF0aWMgYm9vbCBuZXRjb25zX2xvY2FsX2lwX3Vuc2V0KGNvbnN0IHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDkzLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo0OTQ6c3RhdGljIGludCBuZXRjb25zX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDk1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01NTEtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjU1MjpcXHRlcnIgPSBfX25ldHBvbGxfc2V0dXAobnAsIG5kZXYpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01NTMtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz01NzY9c3RhdGljIHZvaWQgcmVzdW1lX3RhcmdldChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01Nzcte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo1Nzg6XFx0LyogSW5pdGlhbGlzZSB0aGUgc2tiIHBvb2wgYmVmb3JlIG5ldHBvbGxfc2V0dXAoKSBtYWtlcyBudC1cXHUwMDNlbnAuZGV2XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU3OS1cXHQgKiB2aXNpYmxlIHRvIHRhcmdldF9saXN0IHdhbGtlcnMgKGUuZy4gbmV0Y29uc29sZV9uZXRkZXZfZXZlbnQpLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU4NC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NTg1OlxcdGlmIChuZXRjb25zX25ldHBvbGxfc2V0dXAobnQpKSB7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU4Ni1cXHRcXHQvKiBuZXRwb2xsIGZhaWxzIHNldHVwIG9uY2UsIGRvIG5vdCB0cnkgYWdhaW4uICovXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9NjA5PXN0YXRpYyB2b2lkIHByb2Nlc3NfcmVzdW1lX3RhcmdldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjM0LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo2MzU6XFx0LyogbmV0cG9sbF9zZXR1cCgpIHRvb2sgYSBuZXRfZGV2aWNlIHJlZmVyZW5jZSBhbmQgZHJvcHBlZCB0aGUgUlROTFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy02MzYtXFx0ICogYmVmb3JlIHJldHVybmluZywgYWxsIHdoaWxlIHRoaXMgdGFyZ2V0IHdhcyBvZmYgdGFyZ2V0X2xpc3QgYW5kXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTAwMj1zdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDU1LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMDU2OlxcdFxcdC8qIEluaXRpYWxpc2UgdGhlIHNrYiBwb29sIGJlZm9yZSBuZXRwb2xsX3NldHVwKCkgc28gdGhlIHBvb2xcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA1Ny1cXHRcXHQgKiBpcyB2YWxpZCBhcyBzb29uIGFzIG50LVxcdTAwM2VucC5kZXYgYmVjb21lcyB2aXNpYmxlIHRvXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA2My1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTA2NDpcXHRcXHRyZXQgPSBuZXRjb25zX25ldHBvbGxfc2V0dXAobnQpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDY1LVxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNjIzPXN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmFsbG9jX3BhcmFtX3RhcmdldChjaGFyICp0YXJnZXRfY29uZmlnLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2NTQtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2NTU6XFx0LyogSW5pdGlhbGlzZSB0aGUgc2tiIHBvb2wgYmVmb3JlIG5ldHBvbGxfc2V0dXAoKSBzbyB0aGUgcG9vbCBpc1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjU2LVxcdCAqIHZhbGlkIGFzIHNvb24gYXMgbnQtXFx1MDAzZW5wLmRldiBiZWNvbWVzIHZpc2libGUuIFRoZSB0YXJnZXQgaXMgbm90XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY2MS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjY2MjpcXHRlcnIgPSBuZXRjb25zX25ldHBvbGxfc2V0dXAobnQpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjYzLVxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MTE0MD1zdGF0aWMgaW50IF9fdGVhbV9wb3J0X2VuYWJsZV9uZXRwb2xsKHN0cnVjdCB0ZWFtX3BvcnQgKnBvcnQpXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTExNDgtXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoxMTQ5OlxcdGVyciA9IF9fbmV0cG9sbF9zZXR1cChucCwgcG9ydC1cXHUwMDNlZGV2KTtcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTExNTAtXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz0yMDc4PXN0YXRpYyB2b2lkIHRlYW1fbmV0cG9sbF9jbGVhbnVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTIwODYtXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyMDg3OnN0YXRpYyBpbnQgdGVhbV9uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yMDg4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MjE3MD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHRlYW1fbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjE4NS1cXHQubmRvX3BvbGxfY29udHJvbGxlclxcdD0gdGVhbV9wb2xsX2NvbnRyb2xsZXIsXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyMTg2OlxcdC5uZG9fbmV0cG9sbF9zZXR1cFxcdD0gdGVhbV9uZXRwb2xsX3NldHVwLFxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjE4Ny1cXHQubmRvX25ldHBvbGxfY2xlYW51cFxcdD0gdGVhbV9uZXRwb2xsX2NsZWFudXAsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTE0NTU9c3RydWN0IG5ldF9kZXZpY2Vfb3BzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTUxMy1cXHR2b2lkICAgICAgICAgICAgICAgICAgICAoKm5kb19wb2xsX2NvbnRyb2xsZXIpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MTUxNDpcXHRpbnRcXHRcXHRcXHQoKm5kb19uZXRwb2xsX3NldHVwKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTE1MTUtXFx0dm9pZFxcdFxcdFxcdCgqbmRvX25ldHBvbGxfY2xlYW51cCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldHBvbGwuaD02Mj1zdGF0aWMgaW5saW5lIHZvaWQgbmV0cG9sbF9wb2xsX2VuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7IHJldHVybjsgfVxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRwb2xsLmgtNjQtXFxuaW5jbHVkZS9saW51eC9uZXRwb2xsLmg6NjU6aW50IF9fbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcXG5pbmNsdWRlL2xpbnV4L25ldHBvbGwuaC02Ni12b2lkIF9fbmV0cG9sbF9mcmVlKHN0cnVjdCBuZXRwb2xsICpucCk7XFxuLS1cXG5uZXQvODAyMXEvdmxhbl9kZXYuYz02OTA9c3RhdGljIHZvaWQgdmxhbl9kZXZfcG9sbF9jb250cm9sbGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvODAyMXEvdmxhbl9kZXYuYy02OTQtXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmM6Njk1OnN0YXRpYyBpbnQgdmxhbl9kZXZfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC84MDIxcS92bGFuX2Rldi5jLTY5Ni17XFxuLS1cXG5uZXQvODAyMXEvdmxhbl9kZXYuYy03MDYtXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmM6NzA3OlxcdGVyciA9IF9fbmV0cG9sbF9zZXR1cChuZXRwb2xsLCByZWFsX2Rldik7XFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtNzA4LVxcdGlmIChlcnIpIHtcXG4tLVxcbm5ldC84MDIxcS92bGFuX2Rldi5jPTEwNTM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2bGFuX25ldGRldl9vcHMgPSB7XFxuLS1cXG5uZXQvODAyMXEvdmxhbl9kZXYuYy0xMDc5LVxcdC5uZG9fcG9sbF9jb250cm9sbGVyXFx0PSB2bGFuX2Rldl9wb2xsX2NvbnRyb2xsZXIsXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmM6MTA4MDpcXHQubmRvX25ldHBvbGxfc2V0dXBcXHQ9IHZsYW5fZGV2X25ldHBvbGxfc2V0dXAsXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtMTA4MS1cXHQubmRvX25ldHBvbGxfY2xlYW51cFxcdD0gdmxhbl9kZXZfbmV0cG9sbF9jbGVhbnVwLFxcbi0tXFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYz0zMDY9c3RhdGljIGludCBfX2JyX25ldHBvbGxfZW5hYmxlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTMxNC1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjMxNTpcXHRlcnIgPSBfX25ldHBvbGxfc2V0dXAobnAsIHAtXFx1MDAzZWRldik7XFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0zMTYtXFx0aWYgKGVycikge1xcbi0tXFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYz0zMjU9aW50IGJyX25ldHBvbGxfZW5hYmxlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTMzMi1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjMzMzpzdGF0aWMgaW50IGJyX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTMzNC17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jPTQzOT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGJyX25ldGRldl9vcHMgPSB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTQ1MS0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjQ1MjpcXHQubmRvX25ldHBvbGxfc2V0dXBcXHQgPSBicl9uZXRwb2xsX3NldHVwLFxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtNDUzLVxcdC5uZG9fbmV0cG9sbF9jbGVhbnVwXFx0ID0gYnJfbmV0cG9sbF9jbGVhbnVwLFxcbi0tXFxubmV0L2NvcmUvbmV0cG9sbC5jPTM1Mz1FWFBPUlRfU1lNQk9MKG5ldHBvbGxfc2VuZF9za2IpO1xcbm5ldC9jb3JlL25ldHBvbGwuYy0zNTQtXFxubmV0L2NvcmUvbmV0cG9sbC5jOjM1NTppbnQgX19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxubmV0L2NvcmUvbmV0cG9sbC5jLTM1Ni17XFxuLS1cXG5uZXQvY29yZS9uZXRwb2xsLmMtMzgyLVxcdFxcdG9wcyA9IG5kZXYtXFx1MDAzZW5ldGRldl9vcHM7XFxubmV0L2NvcmUvbmV0cG9sbC5jOjM4MzpcXHRcXHRpZiAob3BzLVxcdTAwM2VuZG9fbmV0cG9sbF9zZXR1cCkge1xcbm5ldC9jb3JlL25ldHBvbGwuYzozODQ6XFx0XFx0XFx0ZXJyID0gb3BzLVxcdTAwM2VuZG9fbmV0cG9sbF9zZXR1cChuZGV2KTtcXG5uZXQvY29yZS9uZXRwb2xsLmMtMzg1LVxcdFxcdFxcdGlmIChlcnIpXFxuLS1cXG5uZXQvY29yZS9uZXRwb2xsLmMtNDA0LX1cXG5uZXQvY29yZS9uZXRwb2xsLmM6NDA1OkVYUE9SVF9TWU1CT0xfR1BMKF9fbmV0cG9sbF9zZXR1cCk7XFxubmV0L2NvcmUvbmV0cG9sbC5jLTQwNi1cXG4tLVxcbm5ldC9kc2EvdXNlci5jPTEzMDU9c3RhdGljIGludCBkc2FfdXNlcl9zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2RzYS91c2VyLmMtMTMxMy0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcXG5uZXQvZHNhL3VzZXIuYzoxMzE0OnN0YXRpYyBpbnQgZHNhX3VzZXJfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9kc2EvdXNlci5jLTEzMTUte1xcbi0tXFxubmV0L2RzYS91c2VyLmMtMTMyNC1cXG5uZXQvZHNhL3VzZXIuYzoxMzI1OlxcdGVyciA9IF9fbmV0cG9sbF9zZXR1cChuZXRwb2xsLCBjb25kdWl0KTtcXG5uZXQvZHNhL3VzZXIuYy0xMzI2LVxcdGlmIChlcnIpIHtcXG4tLVxcbm5ldC9kc2EvdXNlci5jPTI1ODY9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBkc2FfdXNlcl9uZXRkZXZfb3BzID0ge1xcbi0tXFxubmV0L2RzYS91c2VyLmMtMjU5Ni0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcXG5uZXQvZHNhL3VzZXIuYzoyNTk3OlxcdC5uZG9fbmV0cG9sbF9zZXR1cFxcdD0gZHNhX3VzZXJfbmV0cG9sbF9zZXR1cCxcXG5uZXQvZHNhL3VzZXIuYy0yNTk4LVxcdC5uZG9fbmV0cG9sbF9jbGVhbnVwXFx0PSBkc2FfdXNlcl9uZXRwb2xsX2NsZWFudXAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA0OjI3OjM1LjQ5OTA4NTk3NloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozODg3MzQ3OTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEludmVzdGlnYXRpb24gb2YgbmV0Y29uc29sZSBhbmQgbmV0cG9sbCBTZXR1cCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gaG93IGBuZXRjb25zX25ldHBvbGxfc2V0dXBgIHdvcmtzLiBJdCBzZWVtcyB0aGF0IGBuZXRjb25zb2xlYCwgd2hlbiBjb25maWd1cmVkIGVpdGhlciB0aHJvdWdoIGBjb25maWdmc2AgYXQgYC9zeXMva2VybmVsL2NvbmZpZy9uZXRjb25zb2xlL2Agb3Igd2l0aCBtb2R1bGUgcGFyYW1ldGVycyB1c2luZyBgbmV0Y29uc29sZT0uLi5gLCBlbmRzIHVwIGNhbGxpbmcgYF9fbmV0cG9sbF9zZXR1cGAuIE5vdywgdGhhdCBnZXRzIG1lIHRoaW5raW5nOiBDYW4gYG5ldGNvbnNvbGVgIGV2ZW4gKmJlKiByZWFjaGVkIHRocm91Z2ggYGNvbmZpZ2ZzYD8gSXQncyBiZWVuIGEgd2hpbGUsIGFuZCBJIG5lZWQgdG8gYmUgc3VyZS5cblxuTGV0J3Mgc2VlLCBJIHNob3VsZCBjaGVjayB0aGUgdXNlIG9mIGBORVRDT05TT0xFX0RZTkFNSUNgIGFuZCB0aGUgY29uZmlnZnMgdXNhZ2UgaW4gc3l6a2FsbGVyIG9yIGEgc3RhbmRhcmQgTGludXgga2VybmVsIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLiBBaCwgcmlnaHQsIG9mIGNvdXJzZSwgY29uZmlnZnMgaXMgc29tZXRoaW5nIHRoYXQgdXNlciBzcGFjZSBjYW4gZHluYW1pY2FsbHkgbW91bnQ7IHN5emthbGxlciBjYW4gZWFzaWx5IG1vdW50IGNvbmZpZ2ZzIGFuZCBjcmVhdGUgZW50cmllcywgc28gdGhhdCdzIGhlbHBmdWwuIFRoaXMgbWFrZXMgbWUgd29uZGVyLCBjYW4gYG5ldHBvbGxfc2VuZF9za2JgIGFjdHVhbGx5IGJlIGNhbGxlZCBpbiB0aGlzIHNjZW5hcmlvP1xuXG5UaW1lIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGl0c2VsZi4gT2theSwgaGVyZSB3ZSBhcmUgaW4gYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AuIFJpZ2h0LCBzbyBgbmV0cG9sbF9zZW5kX3VkcGAgaXMgd2hhdCB3ZSdyZSBhZnRlci4gQWhhISBXaGVuIGBwcmludGtgIGlzIGNhbGxlZCwgb3Igd2hlbiBzb21ldGhpbmcgd3JpdGVzIHRvIGAvZGV2L2ttc2dgLCB0aGUgbmV0Y29uc29sZSdzIHdyaXRlIGhhbmRsZXIsIGB3cml0ZV9tc2dgLCBpcyBpbnZva2VkLiBUaGF0J3MgdGhlIGNyaXRpY2FsIGxpbmsuIE5vdywgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoYXQgYHdyaXRlX21zZ2AgZnVuY3Rpb24gaW4gYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AgdG8gc2VlIHByZWNpc2VseSB3aGF0IHRyaWdnZXJzIHRoZSBvdXRwdXQsIGFuZCB3aGVyZSBpdCBnb2VzIGZyb20gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NTEzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA0OjI3OjM5LjM4NjQzNjk4OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY3OTkyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0cG9sbF9zZW5kX3VkcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIxNTA9c3RhdGljIHZvaWQgcHVzaF9pcHY2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE3My1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE3NDpzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTc1LVxcdFxcdFxcdCAgICBpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTEtLyoqXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMTI6ICogc2VuZF91ZHAgLSBXcmFwcGVyIGZvciBuZXRwb2xsX3NlbmRfdWRwIHRoYXQgY291bnRzIGVycm9yc1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjEzLSAqIEBudDogdGFyZ2V0IHRvIHNlbmQgbWVzc2FnZSB0b1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTYtICpcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIxNzogKiBDYWxscyBuZXRwb2xsX3NlbmRfdWRwIGFuZCBjbGFzc2lmaWVzIHRoZSByZXR1cm4gdmFsdWUuIElmIGFuIGVycm9yXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTgtICogb2NjdXJyZWQgaXQgaW5jcmVtZW50cyBzdGF0aXN0aWNzIGluIG50LVxcdTAwM2VzdGF0cyBhY2NvcmRpbmdseS5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIxOTogKiBPbmx5IGNhbGxzIG5ldHBvbGxfc2VuZF91ZHAgaWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBkaXNhYmxlZC5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIyMC0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjIyMT1zdGF0aWMgdm9pZCBzZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMjIte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjIzOlxcdGludCByZXN1bHQgPSBuZXRwb2xsX3NlbmRfdWRwKG50LCBtc2csIGxlbik7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMjQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA0OjI3OjM5LjQzMzI0MDgzN1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxODYxMDczMjExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGVzZSBgc2VuZF91ZHBgIGFuZCBgbmV0cG9sbF9zZW5kX3VkcGAgZnVuY3Rpb25zLiBSaWdodCBub3csIEknbSB0cnlpbmcgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIHRoZSBjb2RlLlxuXG4qKkludmVzdGlnYXRpbmcgQ2FsbCBTaXRlcyoqXG5cbkknbSB0aGlua2luZywgXCJXaGVyZSBlbHNlIGFyZSB0aGVzZSBmdW5jdGlvbnMgYWN0dWFsbHkgYmVpbmcgKnVzZWQqP1wiIEZpbmRpbmcgYWxsIHRoZSBjYWxsIHNpdGVzIGlzIGtleSBoZXJlLiBMZXQncyBzZWUuLi4gYSBxdWljayBjaGVjayBvZiB0aGUgY29kZWJhc2Ugc2hvdWxkIGRvIHRoZSB0cmljay4gQSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBiYXNlZCBvbiBwcmlvciBleHBlcmllbmNlLCB3b3VsZCBsaWtlbHkgYmUgYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AuIEl0J3MgYSBwcmltZSBzdXNwZWN0IGdpdmVuIGl0cyBsaWtlbHkgcmVsYXRpb24gdG8gbmV0d29yayBjb25zb2xlIGZ1bmN0aW9uYWxpdHksIGFuZCBzaG91bGQgZ2l2ZSBtZSBzb21lIGdvb2QgbGVhZHMgdG8gZm9sbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODUxMiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA0OjI3OjQxLjI5NDMxNjA1OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4MzI1OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VuZF91ZHBcXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIxNTA9c3RhdGljIHZvaWQgcHVzaF9pcHY2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE3My1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE3NDpzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTc1LVxcdFxcdFxcdCAgICBpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTEtLyoqXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMTI6ICogc2VuZF91ZHAgLSBXcmFwcGVyIGZvciBuZXRwb2xsX3NlbmRfdWRwIHRoYXQgY291bnRzIGVycm9yc1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjEzLSAqIEBudDogdGFyZ2V0IHRvIHNlbmQgbWVzc2FnZSB0b1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTYtICpcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIxNzogKiBDYWxscyBuZXRwb2xsX3NlbmRfdWRwIGFuZCBjbGFzc2lmaWVzIHRoZSByZXR1cm4gdmFsdWUuIElmIGFuIGVycm9yXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTgtICogb2NjdXJyZWQgaXQgaW5jcmVtZW50cyBzdGF0aXN0aWNzIGluIG50LVxcdTAwM2VzdGF0cyBhY2NvcmRpbmdseS5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIxOTogKiBPbmx5IGNhbGxzIG5ldHBvbGxfc2VuZF91ZHAgaWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBkaXNhYmxlZC5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIyMC0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIyMTpzdGF0aWMgdm9pZCBzZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMjIte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjIzOlxcdGludCByZXN1bHQgPSBuZXRwb2xsX3NlbmRfdWRwKG50LCBtc2csIGxlbik7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMjQtXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjIzOD1zdGF0aWMgdm9pZCBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjI3MC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjI3MTpcXHRzZW5kX3VkcChudCwgbnQtXFx1MDAzZWJ1ZiwgbXNnX2xlbik7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyNzItfVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIyODI9c3RhdGljIHZvaWQgc2VuZF9mcmFnbWVudGVkX2JvZHkoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMzY5LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMzcwOlxcdFxcdHNlbmRfdWRwKG50LCBudC1cXHUwMDNlYnVmLCBidWZfb2Zmc2V0KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjM3MS1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjQyMD1zdGF0aWMgdm9pZCBzZW5kX2V4dF9tc2dfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQyOC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQyOTpcXHQvKiBLZWVwcyB0aGUgcGF5bG9hZCBwaWNrZWQgYmVsb3cgYWxpdmUgdW50aWwgdGhlIGxhc3Qgc2VuZF91ZHAoKS4gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQzMC1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjQ1Mj1zdGF0aWMgdm9pZCBzZW5kX21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0NTktXFx0XFx0ZnJhZyA9IG1pbihsZWZ0LCBNQVhfUFJJTlRfQ0hVTkspO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDYwOlxcdFxcdHNlbmRfdWRwKG50LCB0bXAsIGZyYWcpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDYxLVxcdFxcdHRtcCArPSBmcmFnO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNDoyNzo0MS4zNDExNTE3NzdaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mjg3OTkxODI2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQ2FsbGVycyBvZiBgbmV0cG9sbF9zZW5kX3NrYmAqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIGNhbGxlcnMgb2YgYG5ldHBvbGxfc2VuZF9za2JgLiBMZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uLiBUaGlzIGlzIGNsZWFybHkgYSBjcml0aWNhbCBwYXRoIGZvciBuZXR3b3JrIHBvbGxpbmcgZHVyaW5nIGVtZXJnZW5jaWVzIG9yIGRlYnVnZ2luZywgc28gaXQncyB3b3J0aCB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlZ3JhdGlvbnMuXG5cbkkndmUgZ290IHNpeCBrZXkgY2FsbGluZyBjb250ZXh0czogYGJvbmRpbmdgLCBgbWFjdmxhbmAsIGB2bGFuYCwgYGJyaWRnZWAsIGB0ZWFtYCwgYW5kIGBkc2FgLiBFYWNoIG9uZSBjaGVja3MgYG5ldHBvbGxfdHhfcnVubmluZyhkZXYpYCBhbmQsIGlmIGl0J3Mgc2V0LCBjYWxscyBpdHMgb3duIG5ldHBvbGwtc3BlY2lmaWMgc2VuZCBmdW5jdGlvbiwgbGlrZSBgYm9uZF9uZXRwb2xsX3NlbmRfc2tiYCwgYG1hY3ZsYW5fbmV0cG9sbF9zZW5kX3NrYmAsIGFuZCBzbyBvbi4gRWFjaCBvZiB0aGVzZSBmdW5jdGlvbnMgaXMgbGlrZWx5IHRhaWxvcmVkIHRvIHRoZSBzcGVjaWZpYyBuZXR3b3JraW5nIGFic3RyYWN0aW9uLiBGb3IgZXhhbXBsZSwgYGJvbmRpbmdgIGNhbGxzIGBib25kX2dldF9zbGF2ZV9ieV9kZXZgIHRvIHNlbGVjdCB0aGUgcmlnaHQgc2xhdmUgZGV2aWNlIHRvIHNlbmQgdG8uIGBicmlkZ2VgIGp1c3QgY2FsbHMgYGJyX25ldHBvbGxfc2VuZF9za2JgLlxuXG5Ob3cgdGhlIHF1ZXN0aW9uIGlzLCAqaG93KiBpcyB0aGlzIGBuZXRwb2xsX3R4X3J1bm5pbmdgIGZsYWcgc2V0PyBJdCdzIGEga2V5IGNvbmRpdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN0YXRlIG1hY2hpbmUgYW5kIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIHRoaXMgbmV0cG9sbCBUWCBtb2RlLiBUaW1lIHRvIGdyZXAgZm9yIHRoYXQgZmxhZyBhbmQgc2VlIHdoZXJlIGl0J3MgYmVpbmcgbWFuaXB1bGF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTcxLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA0OjI3OjQ0LjIyMTA3Mjg5MloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyNjIxODMyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRwb2xsX3R4X3J1bm5pbmdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz0yOTc9bmV0ZGV2X3R4X3QgYm9uZF9kZXZfcXVldWVfeG1pdChzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzA1LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MzA2OlxcdGlmICh1bmxpa2VseShuZXRwb2xsX3R4X3J1bm5pbmcoYm9uZC1cXHUwMDNlZGV2KSkpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0zMDctXFx0XFx0cmV0dXJuIGJvbmRfbmV0cG9sbF9zZW5kX3NrYihib25kX2dldF9zbGF2ZV9ieV9kZXYoYm9uZCwgc2xhdmVfZGV2KSwgc2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfYnBmLmM9MjQ3PWludCBuZXR2c2NfbmRveGRwX3htaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGludCBuLFxcbi0tXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzY19icGYuYy0yNjgtXFx0aWYgKHZmX25ldGRldiBcXHUwMDI2XFx1MDAyNiBuZXRpZl9ydW5uaW5nKHZmX25ldGRldikgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjX2JwZi5jOjI2OTpcXHQgICAgbmV0aWZfY2Fycmllcl9vayh2Zl9uZXRkZXYpIFxcdTAwMjZcXHUwMDI2ICFuZXRwb2xsX3R4X3J1bm5pbmcobmRldikgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjX2JwZi5jLTI3MC1cXHQgICAgdmZfbmV0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9feGRwX3htaXQgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmM9NDQyPXN0YXRpYyBpbnQgbmV0dnNjX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgYm9vbCB4ZHBfdHgpXFxuLS1cXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjX2Rydi5jLTQ1OS1cXHRpZiAodmZfbmV0ZGV2IFxcdTAwMjZcXHUwMDI2IG5ldGlmX3J1bm5pbmcodmZfbmV0ZGV2KSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmM6NDYwOlxcdCAgICBuZXRpZl9jYXJyaWVyX29rKHZmX25ldGRldikgXFx1MDAyNlxcdTAwMjYgIW5ldHBvbGxfdHhfcnVubmluZyhuZXQpIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzY19kcnYuYy00NjEtXFx0ICAgIG5ldF9kZXZpY2VfY3R4LVxcdTAwM2VkYXRhX3BhdGhfaXNfdmYpXFxuLS1cXG5kcml2ZXJzL25ldC9tYWN2bGFuLmM9NTg5PXN0YXRpYyBuZXRkZXZfdHhfdCBtYWN2bGFuX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy01OTUtXFxuZHJpdmVycy9uZXQvbWFjdmxhbi5jOjU5NjpcXHRpZiAodW5saWtlbHkobmV0cG9sbF90eF9ydW5uaW5nKGRldikpKVxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy01OTctXFx0XFx0cmV0dXJuIG1hY3ZsYW5fbmV0cG9sbF9zZW5kX3NrYih2bGFuLCBza2IpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9pZl90ZWFtLmg9MjM3PXN0YXRpYyBpbmxpbmUgaW50IHRlYW1fZGV2X3F1ZXVlX3htaXQoc3RydWN0IHRlYW0gKnRlYW0sIHN0cnVjdCB0ZWFtX3BvcnQgKnBvcnQsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3RlYW0uaC0yNDQtXFx0c2tiLVxcdTAwM2VkZXYgPSBwb3J0LVxcdTAwM2VkZXY7XFxuaW5jbHVkZS9saW51eC9pZl90ZWFtLmg6MjQ1OlxcdGlmICh1bmxpa2VseShuZXRwb2xsX3R4X3J1bm5pbmcobmV0ZGV2X2Zyb21fcHJpdih0ZWFtKSkpKSB7XFxuaW5jbHVkZS9saW51eC9pZl90ZWFtLmgtMjQ2LVxcdFxcdHRlYW1fbmV0cG9sbF9zZW5kX3NrYihwb3J0LCBza2IpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRwb2xsLmg9ODk9c3RhdGljIGlubGluZSB2b2lkIG5ldHBvbGxfcG9sbF91bmxvY2sodm9pZCAqaGF2ZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0cG9sbC5oLTk2LVxcbmluY2x1ZGUvbGludXgvbmV0cG9sbC5oOjk3OnN0YXRpYyBpbmxpbmUgYm9vbCBuZXRwb2xsX3R4X3J1bm5pbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5pbmNsdWRlL2xpbnV4L25ldHBvbGwuaC05OC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldHBvbGwuaD0xMDc9c3RhdGljIGlubGluZSB2b2lkIG5ldHBvbGxfcG9sbF91bmxvY2sodm9pZCAqaGF2ZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0cG9sbC5oLTEwOS19XFxuaW5jbHVkZS9saW51eC9uZXRwb2xsLmg6MTEwOnN0YXRpYyBpbmxpbmUgYm9vbCBuZXRwb2xsX3R4X3J1bm5pbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5pbmNsdWRlL2xpbnV4L25ldHBvbGwuaC0xMTEte1xcbi0tXFxuaW5jbHVkZS9uZXQvYm9uZGluZy5oPTEwMz1zdGF0aWMgaW5saW5lIGludCBpc19uZXRwb2xsX3R4X2Jsb2NrZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmluY2x1ZGUvbmV0L2JvbmRpbmcuaC0xMDUtXFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNm5ldHBvbGxfYmxvY2tfdHgpKVxcbmluY2x1ZGUvbmV0L2JvbmRpbmcuaDoxMDY6XFx0XFx0cmV0dXJuIG5ldHBvbGxfdHhfcnVubmluZyhkZXYpO1xcbmluY2x1ZGUvbmV0L2JvbmRpbmcuaC0xMDctXFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvODAyMXEvdmxhbl9kZXYuYz0xMDA9c3RhdGljIG5ldGRldl90eF90IHZsYW5fZGV2X2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtMTIyLVxcdGxlbiA9IHNrYi1cXHUwMDNlbGVuO1xcbm5ldC84MDIxcS92bGFuX2Rldi5jOjEyMzpcXHRpZiAodW5saWtlbHkobmV0cG9sbF90eF9ydW5uaW5nKGRldikpKVxcbm5ldC84MDIxcS92bGFuX2Rldi5jLTEyNC1cXHRcXHRyZXR1cm4gdmxhbl9uZXRwb2xsX3NlbmRfc2tiKHZsYW4sIHNrYik7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jPTMwPW5ldGRldl90eF90IGJyX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTkzLVxcdH0gZWxzZSBpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoZGVzdCkpIHtcXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjk0OlxcdFxcdGlmICh1bmxpa2VseShuZXRwb2xsX3R4X3J1bm5pbmcoZGV2KSkpIHtcXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTk1LVxcdFxcdFxcdGJyX2Zsb29kKGJyLCBza2IsIEJSX1BLVF9NVUxUSUNBU1QsIGZhbHNlLCB0cnVlLCB2aWQpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmM9NzM9c3RhdGljIHZvaWQgX19icl9mb3J3YXJkKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnRvLFxcbi0tXFxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtMTAxLVxcdH0gZWxzZSB7XFxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmM6MTAyOlxcdFxcdGlmICh1bmxpa2VseShuZXRwb2xsX3R4X3J1bm5pbmcodG8tXFx1MDAzZWJyLVxcdTAwM2VkZXYpKSkge1xcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jLTEwMy1cXHRcXHRcXHRza2JfcHVzaChza2IsIEVUSF9ITEVOKTtcXG4tLVxcbm5ldC9kc2EvdXNlci5jPTg5Nj1uZXRkZXZfdHhfdCBkc2FfZW5xdWV1ZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9kc2EvdXNlci5jLTkwMC1cXHQgKi9cXG5uZXQvZHNhL3VzZXIuYzo5MDE6XFx0aWYgKHVubGlrZWx5KG5ldHBvbGxfdHhfcnVubmluZyhkZXYpKSlcXG5uZXQvZHNhL3VzZXIuYy05MDItXFx0XFx0cmV0dXJuIGRzYV91c2VyX25ldHBvbGxfc2VuZF9za2IoZGV2LCBza2IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNDoyNzo0NS43NDcyOTgxNjlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzA2Mjg5MzM4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgYG5ldHBvbGxfdHhfcnVubmluZ2AgRGVmaW5pdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBuZXRwb2xsX3R4X3J1bm5pbmdgIHZhcmlhYmxlLCBhbmQgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMsIG9mIGNvdXJzZSwgdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCB0aGUgZGVmaW5pdGlvbiB3aXRoaW4gYGluY2x1ZGUvbGludXgvbmV0cG9sbC5oYC4gSSdtIGFzc3VtaW5nIGl0J3MgYSBjcml0aWNhbCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlIG9yIGZsYWcgcmVsYXRlZCB0byBuZXRwb2xsJ3MgdHJhbnNtaXQgcGF0aC4gS25vd2luZyB0aGUgZXhhY3QgZGF0YSB0eXBlLCB0aGUgY29udGV4dCBpbiB3aGljaCBpdCdzIGRlY2xhcmVkLCBhbmQgYW55IGFzc29jaWF0ZWQgY29tbWVudHMgd2lsbCBwcm92aWRlIHRoZSBmb3VuZGF0aW9uYWwgdW5kZXJzdGFuZGluZyBJIG5lZWQuIEknbSBob3BpbmcgdG8gcXVpY2tseSBncmFzcCBpdHMgcm9sZSBpbiBtYW5hZ2luZyB0cmFuc21pdCBzdGF0ZSBhbmQgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMsIGdpdmVuIG5ldHBvbGwncyBpbmhlcmVudCBjb21wbGV4aXRpZXMgcmVnYXJkaW5nIGludGVycnVwdCBjb250ZXh0IGFuZCBwb3RlbnRpYWxseSBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzIHdpdGggb3RoZXIgbmV0d29yayBzdGFja3MuIEknbGwgYmUgbG9va2luZyBmb3IgaGludHMgYWJvdXQgYXRvbWljaXR5LCBtZW1vcnkgYmFycmllcnMsIGFuZCBwb3RlbnRpYWwgbG9jayB1c2FnZSBhcm91bmQgdGhpcyB2YXJpYWJsZS4gTXkgZ29hbCBpcyB0byBxdWlja2x5IHBpbnBvaW50IGl0cyBmdW5jdGlvbiBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBnb3RjaGFzIGZvciB0aGUgY3VycmVudCBkZWJ1Z2dpbmcgb3IgZGV2ZWxvcG1lbnQgdGFzayBhdCBoYW5kLiBMZXQncyBzZWUgd2hhdCB0aGUgaGVhZGVyIGZpbGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE4NzcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNDoyNzo0OC44MTAxOTQzNDNaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQxMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9uZXRwb2xsLmhcIixcbiAgXCJGaXJzdExpbmVcIjogOTAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgOTA6XFx0e1xcbiAgOTE6XFx0XFx0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gaGF2ZTtcXG4gIDkyOlxcdFxcbiAgOTM6XFx0XFx0aWYgKG5hcGkpXFxuICA5NDpcXHRcXHRcXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2bmFwaS1cXHUwMDNlcG9sbF9vd25lciwgLTEpO1xcbiAgOTU6XFx0fVxcbiAgOTY6XFx0XFxuICA5NzpcXHRzdGF0aWMgaW5saW5lIGJvb2wgbmV0cG9sbF90eF9ydW5uaW5nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuICA5ODpcXHR7XFxuICA5OTpcXHRcXHRyZXR1cm4gaXJxc19kaXNhYmxlZCgpO1xcbiAxMDA6XFx0fVxcbiAxMDE6XFx0XFxuIDEwMjpcXHQjZWxzZVxcbiAxMDM6XFx0c3RhdGljIGlubGluZSB2b2lkICpuZXRwb2xsX3BvbGxfbG9jayhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXFxuIDEwNDpcXHR7XFxuIDEwNTpcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMTA2OlxcdH1cXG4gMTA3OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRwb2xsX3BvbGxfdW5sb2NrKHZvaWQgKmhhdmUpXFxuIDEwODpcXHR7XFxuIDEwOTpcXHR9XFxuIDExMDpcXHRzdGF0aWMgaW5saW5lIGJvb2wgbmV0cG9sbF90eF9ydW5uaW5nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIDExMTpcXHR7XFxuIDExMjpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDExMzpcXHR9XFxuIDExNDpcXHQjZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDQ6Mjc6NDguODEwMjYwNTIzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEyNjM2MTA3MDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IE5ldHBvbGwgQ29udW5kcnVtKipcblxuT2theSwgc28gYG5ldHBvbGxfdHhfcnVubmluZ2AgaXMgZ2l2aW5nIG1lIGBpcnFzX2Rpc2FibGVkKClgLiBUaGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVuIHRoZSBgdmxhbi1cdTAwM2VuZXRwb2xsYCBvciBgYm9uZC1cdTAwM2VzbGF2ZS1cdTAwM2VucGAgc3RydWN0dXJlcyBhcmUgYWN0dWFsbHkgc2V0IHVwLiBMZXQncyB0cmFjZSBpdCBiYWNrLlxuXG5SaWdodCwgaW4gYHZsYW5fZGV2X25ldHBvbGxfc2V0dXBgLCB0aGVyZSdzIGEgYGt6YWxsb2NgIGZvciBgbmV0cG9sbGAgYW5kIGEgY2FsbCB0byBgX19uZXRwb2xsX3NldHVwYC4gVGhhdOKAmXMgd2hlcmUgaXQncyBoYXBwZW5pbmcuIEhvdyBkb2VzICp0aGF0KiBnZXQgY2FsbGVkPyBBaCwgaXQncyBgdmxhbl9uZXRkZXZfb3BzLm5kb19uZXRwb2xsX3NldHVwYCEgQW5kIHRoYXQsIGluIHR1cm4sIGlzIGNhbGxlZCBpbmRpcmVjdGx5IGZyb20gYF9fbmV0cG9sbF9zZXR1cGAhIExvb2s6IGlmIGBkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fbmV0cG9sbF9zZXR1cGAgZXhpc3RzLCBpdCBnZXRzIGNhbGxlZCBmcm9tIGBfX25ldHBvbGxfc2V0dXBgLiBTbywgbmV0Y29uc29sZSBpcyBzZXR0aW5nIHVwIG5ldHBvbGwgb24gdGhlc2UgdmlydHVhbCBkZXZpY2Vz4oCUdmxhbiwgYm9uZCwgYnJpZGdlLCB0ZWFtLCBldGMu4oCUd2hlbiBuZXRjb25zb2xlIGlzIHVzZWQuXG5cbkJ1dCBob3cgaXMgbmV0Y29uc29sZSAqY29uZmlndXJlZCo/IENhbiB1c2Vyc3BhY2UgZXZlbiBjb25maWd1cmUgaXQ/IFRoaXMgaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIGNoZWNrIHRoZSBuZXRjb25zb2xlIGRyaXZlciBpdHNlbGYgKGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgKS4gTGV0J3MganVtcCB0byBhcm91bmQgbGluZSAxMDAwIGluIGBuZXRjb25zb2xlLmNgIG9yIHNlYXJjaCBmb3IgY29uZmlnZnMgaW4gdGhhdCBmaWxlIHRvIGdldCBhIGNsdWUgYWJvdXQgaG93IHVzZXJzcGFjZSBpbnRlcmFjdHMgd2l0aCBpdC4gVGhhdCBzaG91bGQgdGVsbCBtZSBob3cgdGhpcyB3aG9sZSB0aGluZyBpcyB0cmlnZ2VyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNDc1LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDQ6Mjg6MDEuNDQ2MzcwMTlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzMzgwMjg4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWdmc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQzLSNpbmNsdWRlIFxcdTAwM2NuZXQvYWRkcmNvbmYuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NDQ6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbmZpZ2ZzLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQ1LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXFx1MDAzZVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE2Mz1zdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTcxLSAqIEBsaXN0OlxcdExpbmtzIHRoaXMgdGFyZ2V0IGludG8gdGhlIHRhcmdldF9saXN0LlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzI6ICogQGdyb3VwOlxcdExpbmtzIHVzIGludG8gdGhlIGNvbmZpZ2ZzIHN1YnN5c3RlbSBoaWVyYXJjaHkuXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE3MzogKiBAdXNlcmRhdGFfZ3JvdXA6XFx0TGlua3MgdG8gdGhlIHVzZXJkYXRhIGNvbmZpZ2ZzIGhpZXJhcmNoeVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzQtICogQHVzZXJkYXRhOlxcdFxcdENhY2hlZCwgZm9ybWF0dGVkIHVzZXJkYXRhIHBheWxvYWQuIFJDVSBwcm90ZWN0ZWQuXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjEwPXN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQyLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDM6c3RhdGljIHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gbmV0Y29uc29sZV9zdWJzeXM7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0NC1zdGF0aWMgREVGSU5FX01VVEVYKGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleCk7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjQ2PXN0YXRpYyBpbnQgX19pbml0IGR5bmFtaWNfbmV0Y29uc29sZV9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ5LVxcdG11dGV4X2luaXQoXFx1MDAyNm5ldGNvbnNvbGVfc3Vic3lzLnN1X211dGV4KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjUwOlxcdHJldHVybiBjb25maWdmc19yZWdpc3Rlcl9zdWJzeXN0ZW0oXFx1MDAyNm5ldGNvbnNvbGVfc3Vic3lzKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjUxLX1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNTM9c3RhdGljIHZvaWQgX19leGl0IGR5bmFtaWNfbmV0Y29uc29sZV9leGl0KHZvaWQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1NC17XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI1NTpcXHRjb25maWdmc191bnJlZ2lzdGVyX3N1YnN5c3RlbShcXHUwMDI2bmV0Y29uc29sZV9zdWJzeXMpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTYtfVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1OS0gKiBUYXJnZXRzIHRoYXQgd2VyZSBjcmVhdGVkIGJ5IHBhcnNpbmcgdGhlIGJvb3QvbW9kdWxlIG9wdGlvbiBzdHJpbmdcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjYwOiAqIGRvIG5vdCBleGlzdCBpbiB0aGUgY29uZmlnZnMgaGllcmFyY2h5IChhbmQgaGF2ZSBOVUxMIG5hbWVzKSBhbmQgd2lsbFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjEtICogbmV2ZXIgZ28gYXdheSwgc28gbWFrZSB0aGVzZSBhIG5vLW9wIGZvciB0aGVtLlxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTMwND1zdGF0aWMgdm9pZCBuZXRjb25zb2xlX3RhcmdldF9wdXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMDctXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjMwODpzdGF0aWMgdm9pZCBwb3B1bGF0ZV9jb25maWdmc19pdGVtKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMwOS1cXHRcXHRcXHRcXHQgICBpbnQgY21kbGluZV9jb3VudClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz05MDA9c3RhdGljIHNzaXplX3QgdHJhbnNtaXRfZXJyb3JzX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTE0LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo5MTU6LyogY29uZmlnZnMgaGVscGVyIHRvIGRpc3BsYXkgaWYgY3B1X25yIHN5c2RhdGEgZmVhdHVyZSBpcyBlbmFibGVkICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTkxNi1zdGF0aWMgc3NpemVfdCBzeXNkYXRhX2NwdV9ucl9lbmFibGVkX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTI3LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo5Mjg6LyogY29uZmlnZnMgaGVscGVyIHRvIGRpc3BsYXkgaWYgdGFza25hbWUgc3lzZGF0YSBmZWF0dXJlIGlzIGVuYWJsZWQgKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTI5LXN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfdGFza25hbWVfZW5hYmxlZF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz05ODI9c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9tc2dpZF9lbmFibGVkX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk5NS0vKlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo5OTY6ICogVGhpcyBvbmUgaXMgc3BlY2lhbCAtLSB0YXJnZXRzIGNyZWF0ZWQgdGhyb3VnaCB0aGUgY29uZmlnZnMgaW50ZXJmYWNlXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk5Ny0gKiBhcmUgbm90IGVuYWJsZWQgKGFuZCB0aGUgY29ycmVzcG9uZGluZyBuZXRwb2xsIGFjdGl2YXRlZCkgYnkgZGVmYXVsdC5cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMDAyPXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwNTEtXFx0XFx0ICogU2tpcCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKCkgLS0gYWxsIHRoZSBhdHRyaWJ1dGVzIGFyZVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMDUyOlxcdFxcdCAqIGFscmVhZHkgY29uZmlndXJlZCB2aWEgY29uZmlnZnMuIEp1c3QgcHJpbnQgdGhlbSBvdXQuXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwNTMtXFx0XFx0ICovXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTMzNz1zdGF0aWMgc3NpemVfdCB1c2VyZGF0dW1fdmFsdWVfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzQxLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMzQyOi8qIE5hdmlnYXRlIGNvbmZpZ2ZzIGFuZCBjYWxjdWxhdGUgdGhlIGxlbnRnaCBvZiB0aGUgZm9ybWF0dGVkIHN0cmluZ1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzQzLSAqIHJlcHJlc2VudGluZyB1c2VyZGF0YS5cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNTE3PXN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfdGFza25hbWVfZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU0NS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU0NjovKiBjb25maWdmcyBoZWxwZXIgdG8gc3lzZGF0YSBjcHVfbnIgZmVhdHVyZSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTQ3LXN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfY3B1X25yX2VuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE1ODQ9Q09ORklHRlNfQVRUUihzeXNkYXRhXywgbXNnaWRfZW5hYmxlZCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1ODUtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1ODY6c3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKnVzZXJkYXR1bV9hdHRyc1tdID0ge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTg3LVxcdFxcdTAwMjZ1c2VyZGF0dW1fYXR0cl92YWx1ZSxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNTkxPXN0YXRpYyB2b2lkIHVzZXJkYXR1bV9yZWxlYXNlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTk1LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNTk2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnZnNfaXRlbV9vcGVyYXRpb25zIHVzZXJkYXR1bV9vcHMgPSB7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1OTctXFx0LnJlbGVhc2UgPSB1c2VyZGF0dW1fcmVsZWFzZSxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNjI5PXN0YXRpYyB2b2lkIHVzZXJkYXR1bV9kcm9wKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLCBzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY0Mi1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY0MzpzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2F0dHJpYnV0ZSAqdXNlcmRhdGFfYXR0cnNbXSA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY0NC1cXHRcXHUwMDI2c3lzZGF0YV9hdHRyX2NwdV9ucl9lbmFibGVkLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2NTAtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NTE6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdmc19ncm91cF9vcGVyYXRpb25zIHVzZXJkYXRhX29wcyA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY1Mi1cXHQubWFrZV9pdGVtXFx0XFx0PSB1c2VyZGF0dW1fbWFrZV9pdGVtLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE2NzM9Q09ORklHRlNfQVRUUl9STygsIHRyYW5zbWl0X2Vycm9ycyk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2NzQtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NzU6c3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKm5ldGNvbnNvbGVfdGFyZ2V0X2F0dHJzW10gPSB7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2NzYtXFx0XFx1MDAyNmF0dHJfZW5hYmxlZCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNjk0PXN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfdGFyZ2V0X3JlbGVhc2Uoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3MDEtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE3MDI6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdmc19pdGVtX29wZXJhdGlvbnMgbmV0Y29uc29sZV90YXJnZXRfaXRlbV9vcHMgPSB7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3MDMtXFx0LnJlbGVhc2VcXHRcXHQ9IG5ldGNvbnNvbGVfdGFyZ2V0X3JlbGVhc2UsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTcxMj1zdGF0aWMgdm9pZCBpbml0X3RhcmdldF9jb25maWdfZ3JvdXAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzE3LVxcdFxcdFxcdFxcdCAgICBcXHUwMDI2dXNlcmRhdGFfdHlwZSk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE3MTg6XFx0Y29uZmlnZnNfYWRkX2RlZmF1bHRfZ3JvdXAoXFx1MDAyNm50LVxcdTAwM2V1c2VyZGF0YV9ncm91cCwgXFx1MDAyNm50LVxcdTAwM2Vncm91cCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3MTktfVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE3NDI9c3RhdGljIHN0cnVjdCBjb25maWdfZ3JvdXAgKm1ha2VfbmV0Y29uc29sZV90YXJnZXQoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTc0OC1cXHQvKiBDaGVja2luZyBpZiBhIHRhcmdldCBieSB0aGlzIG5hbWUgd2FzIGNyZWF0ZWQgYXQgYm9vdCB0aW1lLiAgSWYgc28sXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE3NDk6XFx0ICogYXR0YWNoIGEgY29uZmlnZnMgZW50cnkgdG8gdGhhdCB0YXJnZXQuICBUaGlzIGVuYWJsZXMgZHluYW1pY1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzUwLVxcdCAqIGNvbnRyb2wuXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTc3Nj1zdGF0aWMgdm9pZCBkcm9wX25ldGNvbnNvbGVfdGFyZ2V0KHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4MjctXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4Mjg6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdmc19ncm91cF9vcGVyYXRpb25zIG5ldGNvbnNvbGVfc3Vic3lzX2dyb3VwX29wcyA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTgyOS1cXHQubWFrZV9ncm91cFxcdD0gbWFrZV9uZXRjb25zb2xlX3RhcmdldCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xODMzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSBuZXRjb25zb2xlX3N1YnN5c190eXBlID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4MzctXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4Mzg6LyogVGhlIG5ldGNvbnNvbGUgY29uZmlnZnMgc3Vic3lzdGVtICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4Mzk6c3RhdGljIHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gbmV0Y29uc29sZV9zdWJzeXMgPSB7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4NDAtXFx0LnN1X2dyb3VwXFx0PSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg0Ny1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTg0ODpzdGF0aWMgdm9pZCBwb3B1bGF0ZV9jb25maWdmc19pdGVtKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4NDktXFx0XFx0XFx0XFx0ICAgaW50IGNtZGxpbmVfY291bnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjYyMz1zdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19wYXJhbV90YXJnZXQoY2hhciAqdGFyZ2V0X2NvbmZpZyxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjU3LVxcdCAqIHlldCBvbiB0YXJnZXRfbGlzdCwgc28gYSBuZXRkZXYgZXZlbnQgY2Fubm90IHJlYWNoIGl0IGhlcmUsIGJ1dFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjU4OlxcdCAqIG1pcnJvciB0aGUgY29uZmlnZnMgcGF0aCBmb3Igc3ltbWV0cnkuXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2NTktXFx0ICovXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY3NC1cXHR9XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2NzU6XFx0cG9wdWxhdGVfY29uZmlnZnNfaXRlbShudCwgY21kbGluZV9jb3VudCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2NzYtXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9Mjc5Nj1zdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cF9uZXRjb25zb2xlKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjgwOC1cXHQvKlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyODA5OlxcdCAqIFRhcmdldHMgY3JlYXRlZCB2aWEgY29uZmlnZnMgcGluIHJlZmVyZW5jZXMgb24gb3VyIG1vZHVsZVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yODEwLVxcdCAqIGFuZCB3b3VsZCBmaXJzdCBiZSBybWRpcigyKSdlZCBmcm9tIHVzZXJzcGFjZS4gV2UgcmVhY2hcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDQ6Mjg6MDEuNzgwMTgxMDY0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE2MDM3MDU5NDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk5ldGNvbnNvbGUncyBEeW5hbWljIFRhcmdldCBDcmVhdGlvbiBhbmQgUGFja2V0IEhhbmRsaW5nKipcblxuQWxyaWdodCwgdGhpcyBpcyBpbnRlcmVzdGluZy4gSSdtIHNlZWluZyB0aGF0IG5ldGNvbnNvbGUgdGFyZ2V0cyBjYW4gYmUgZHluYW1pY2FsbHkgY3JlYXRlZCB1c2luZyBjb25maWdmcyDigJMgYnJpbGxpYW50ISBKdXN0IGBta2RpciAvc3lzL2tlcm5lbC9jb25maWcvbmV0Y29uc29sZS90YXJnZXQxYCBhbmQgY29uZmlndXJlIGl0LiBTZXR0aW5nIHRoZSBgZGV2X25hbWVgIGFuZCBlbmFibGluZyBpdCBnZXRzIHRoaW5ncyByb2xsaW5nLiBTZXR0aW5nIGBlbmFibGVkYCB0byBgMWAgdHJpZ2dlcnMgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cChudClgLiAgVGhlbiwgc3RhbmRhcmQgYHByaW50a2AgbWVzc2FnZXMgYXJlIHJvdXRlZCB0aHJvdWdoIGBuZXRwb2xsX3NlbmRfc2tiKG5wLCBza2IpYC5cblxuTm93LCB3aGVuIGBuZXRwb2xsX3NlbmRfc2tiYCBraWNrcyBpbiwgaXQgbW92ZXMgaW50byBgX19uZXRwb2xsX3NlbmRfc2tiKG5wLCBza2IpYC4gVGhlIHJlYWwgbWVhdCBvZiBpdCBpcyB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgZGV2aWNlIHRyYW5zbWl0IGZhaWxzIG9yIHRoZSBxdWV1ZSBpcyBzYXR1cmF0ZWQuIEl0J3Mgc3VwcG9zZWQgdG8gcXVldWUgaW50byBgbnBpbmZvLVx1MDAzZXR4cWAsIGJ1dCB0aGVyZSdzIGEgcGF0Y2ggaGVyZS4uLlxuXG5Ib2xkIG9uLCBJIHNlZSB3aGF0IHRoaXMgcGF0Y2ggaXMgZG9pbmcuIElmIHRoZSBkZXZpY2UgeG1pdCBpc24ndCBjb21wbGV0ZSwgYW5kIHRoZSBxdWV1ZSBsZW5ndGggZXhjZWVkcyBgTkVUUE9MTF9UWFFfTUFYYCwgaXQgKmRyb3BzKiB0aGUgU0tCIHJpZ2h0IHRoZXJlIHdpdGggYGRldl9rZnJlZV9za2JfaXJxKHNrYilgISBUaGF0J3MgYSBjcnVjaWFsIHJhdGUtbGltaXRpbmcgbWVjaGFuaXNtLiAgT3RoZXJ3aXNlLCBpdCBxdWV1ZXMgdGhlIFNLQiBhbmQgc2NoZWR1bGVzIGEgZGVsYXllZCB3b3JrIHdpdGggYHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZucGluZm8tXHUwMDNldHhfd29yaywwKWAuXG5cbkFuZCBmaW5hbGx5LCBgcXVldWVfcHJvY2Vzc2DigKYgSSBuZWVkIHRvIGNoZWNrIG91dCB3aGF0IHRoYXQgd29yayBpdGVtIGlzIGRvaW5nIGluIGBuZXQvY29yZS9uZXRwb2xsLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBxdWV1ZWQgU0tCcyBhcmUgYWN0dWFsbHkgcHJvY2Vzc2VkIGZvciB0cmFuc21pc3Npb24uICBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHRoZSBkZXRhaWxzIG9mIHRoYXQgcHJvY2Vzc2luZyBsb29wLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTk4MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNDoyODoxNy44MTcyNDMyNzlaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL25ldHBvbGwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA5MDpcXHRzdGF0aWMgdm9pZCBxdWV1ZV9wcm9jZXNzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gIDkxOlxcdHtcXG4gIDkyOlxcdFxcdHN0cnVjdCBuZXRwb2xsX2luZm8gKm5waW5mbyA9XFxuICA5MzpcXHRcXHRcXHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5ldHBvbGxfaW5mbywgdHhfd29yay53b3JrKTtcXG4gIDk0OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuICA5NTpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiAgOTY6XFx0XFxuICA5NzpcXHRcXHR3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKFxcdTAwMjZucGluZm8tXFx1MDAzZXR4cSkpKSB7XFxuICA5ODpcXHRcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLVxcdTAwM2VkZXY7XFxuICA5OTpcXHRcXHRcXHRzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7XFxuIDEwMDpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgcV9pbmRleDtcXG4gMTAxOlxcdFxcbiAxMDI6XFx0XFx0XFx0aWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpIHx8ICFuZXRpZl9ydW5uaW5nKGRldikpIHtcXG4gMTAzOlxcdFxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAxMDQ6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDEwNTpcXHRcXHRcXHR9XFxuIDEwNjpcXHRcXG4gMTA3OlxcdFxcdFxcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcXG4gMTA4OlxcdFxcdFxcdC8qIGNoZWNrIGlmIHNrYi1cXHUwMDNlcXVldWVfbWFwcGluZyBpcyBzdGlsbCB2YWxpZCAqL1xcbiAxMDk6XFx0XFx0XFx0cV9pbmRleCA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpO1xcbiAxMTA6XFx0XFx0XFx0aWYgKHVubGlrZWx5KHFfaW5kZXggXFx1MDAzZT0gZGV2LVxcdTAwM2VyZWFsX251bV90eF9xdWV1ZXMpKSB7XFxuIDExMTpcXHRcXHRcXHRcXHRxX2luZGV4ID0gcV9pbmRleCAlIGRldi1cXHUwMDNlcmVhbF9udW1fdHhfcXVldWVzO1xcbiAxMTI6XFx0XFx0XFx0XFx0c2tiX3NldF9xdWV1ZV9tYXBwaW5nKHNrYiwgcV9pbmRleCk7XFxuIDExMzpcXHRcXHRcXHR9XFxuIDExNDpcXHRcXHRcXHR0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgcV9pbmRleCk7XFxuIDExNTpcXHRcXHRcXHRIQVJEX1RYX0xPQ0soZGV2LCB0eHEsIHNtcF9wcm9jZXNzb3JfaWQoKSk7XFxuIDExNjpcXHRcXHRcXHRpZiAobmV0aWZfeG1pdF9mcm96ZW5fb3Jfc3RvcHBlZCh0eHEpIHx8XFxuIDExNzpcXHRcXHRcXHQgICAgIWRldl94bWl0X2NvbXBsZXRlKG5ldHBvbGxfc3RhcnRfeG1pdChza2IsIGRldiwgdHhxKSkpIHtcXG4gMTE4OlxcdFxcdFxcdFxcdHNrYl9xdWV1ZV9oZWFkKFxcdTAwMjZucGluZm8tXFx1MDAzZXR4cSwgc2tiKTtcXG4gMTE5OlxcdFxcdFxcdFxcdEhBUkRfVFhfVU5MT0NLKGRldiwgdHhxKTtcXG4gMTIwOlxcdFxcdFxcdFxcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcXG4gMTIxOlxcdFxcbiAxMjI6XFx0XFx0XFx0XFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFxcdTAwMjZucGluZm8tXFx1MDAzZXR4X3dvcmssIEhaLzEwKTtcXG4gMTIzOlxcdFxcdFxcdFxcdHJldHVybjtcXG4gMTI0OlxcdFxcdFxcdH1cXG4gMTI1OlxcdFxcdFxcdEhBUkRfVFhfVU5MT0NLKGRldiwgdHhxKTtcXG4gMTI2OlxcdFxcdFxcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcXG4gMTI3OlxcdFxcdH1cXG4gMTI4OlxcdH1cXG4gMTI5OlxcdFxcbiAxMzA6XFx0c3RhdGljIGludCBuZXRpZl9sb2NhbF94bWl0X2FjdGl2ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiAxMzE6XFx0e1xcbiAxMzI6XFx0XFx0aW50IGk7XFxuIDEzMzpcXHRcXG4gMTM0OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBkZXYtXFx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKykge1xcbiAxMzU6XFx0XFx0XFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIGkpO1xcbiAxMzY6XFx0XFxuIDEzNzpcXHRcXHRcXHRpZiAobmV0aWZfdHhfb3duZWQodHhxLCBzbXBfcHJvY2Vzc29yX2lkKCkpKVxcbiAxMzg6XFx0XFx0XFx0XFx0cmV0dXJuIDE7XFxuIDEzOTpcXHRcXHR9XFxuIDE0MDpcXHRcXG4gMTQxOlxcdFxcdHJldHVybiAwO1xcbiAxNDI6XFx0fVxcbiAxNDM6XFx0XFxuIDE0NDpcXHRzdGF0aWMgdm9pZCBwb2xsX29uZV9uYXBpKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSlcXG4gMTQ1OlxcdHtcXG4gMTQ2OlxcdFxcdGludCB3b3JrO1xcbiAxNDc6XFx0XFxuIDE0ODpcXHRcXHQvKiBJZiB3ZSBzZXQgdGhpcyBiaXQgYnV0IHNlZSB0aGF0IGl0IGhhcyBhbHJlYWR5IGJlZW4gc2V0LFxcbiAxNDk6XFx0XFx0ICogdGhhdCBpbmRpY2F0ZXMgdGhhdCBuYXBpIGhhcyBiZWVuIGRpc2FibGVkIGFuZCB3ZSBuZWVkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA0OjI4OjE3LjgxNzM4OTcxOVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDA1MTQyNjU1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldGNvbnNvbGUgVFggUGF0aCBhbmQgUG90ZW50aWFsIFBhY2tldCBEcm9wcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyBmb2N1c2VkIG9uIHRoZSBgcXVldWVfcHJvY2Vzc2AgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgaWYgdGhlIGRldmljZSB0cmFuc21pdCBpc24ndCBpbW1lZGlhdGVseSBjb21wbGV0ZSAoYCFkZXZfeG1pdF9jb21wbGV0ZSguLi4pYCksIHRoZSBjb2RlIHF1ZXVlcyB0aGUgU0tCIChgc2tiX3F1ZXVlX2hlYWRgKSwgdW5sb2NrcyB0aGUgaGFyZHdhcmUsIHJlc3RvcmVzIGludGVycnVwdHMsIGFuZCB0aGVuIHNjaGVkdWxlcyBhIGRlbGF5ZWQgd29yayBpdGVtLiBUaGlzIHNlZW1zIHByZXR0eSBzdGFuZGFyZC5cblxuTm93LCB0aGUgY3J1Y2lhbCBwb2ludCBpcyBjb21wYXJpbmcgdGhpcyB0byAqYmVmb3JlKiB0aGUgcGF0Y2guIEkgcmVjYWxsIHRoYXQgaWYgdGhlIGRldmljZSB3YXMgc3RvcHBlZCBvciBjb250aW51b3VzbHkgZmFpbGluZyB0byB0cmFuc21pdCwgbmV3IG5ldGNvbnNvbGUgbWVzc2FnZXMgKGZyb20gYHByaW50a2Agb3IgYGRtZXNnYCkgd291bGQgdHJpZ2dlciBgbmV0cG9sbF9zZW5kX3NrYmAsIHdoaWNoIHRoZW4gY2FsbHMgYF9fbmV0cG9sbF9zZW5kX3NrYmAuXG5cbkluIHRoZSBwcmUtcGF0Y2ggdmVyc2lvbiwgd2l0aGluIGBfX25ldHBvbGxfc2VuZF9za2JgLCBhIGNoZWNrIGBza2JfcXVldWVfbGVuKFx1MDAyNm5waW5mby1cdTAwM2V0eHEpID09IDBgIHdvdWxkIGJlIGZhbHNlIGJlY2F1c2UgdGhlcmUncyBhbHJlYWR5IGFuIFNLQiBxdWV1ZWQuIFRoaXMgd291bGQgY2F1c2UgbGluZXMgMjkzLTMyMiB0byBiZSBza2lwcGVkLiBDcml0aWNhbGx5LCB0aGUgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24gdW5jb25kaXRpb25hbGx5IHF1ZXVlZCBldmVyeSBuZXcgU0tCIHVzaW5nIGBza2JfcXVldWVfdGFpbChcdTAwMjZucGluZm8tXHUwMDNldHhxLCBza2IpYC5cblxuSG93ZXZlciwgdGhlIHVwZGF0ZWQgY29kZSBpbnRyb2R1Y2VzIGEgbWF4aW11bSBxdWV1ZSBsZW5ndGggY2hlY2s6IGBpZiAoc2tiX3F1ZXVlX2xlbihcdTAwMjZucGluZm8tXHUwMDNldHhxKSBcdTAwM2U9IE5FVFBPTExfVFhRX01BWClgLiBJZiB0aGUgcXVldWUgaXMgZnVsbCwgdGhlIG5ldyBTS0IgaXMgbm93ICpkcm9wcGVkKiB3aXRoIGBkZXZfa2ZyZWVfc2tiX2lycShza2IpYCEgVGhpcyBpcyB0aGUgZnVuZGFtZW50YWwgY2hhbmdlLiBJZiBgZGV2X3htaXRfY29tcGxldGUoc3RhdHVzKWAgaXMgZmFsc2UgKGxpa2VseSBkdWUgdG8gYE5FVERFVl9UWF9CVVNZYCksIHRoZSBTS0IgZW5kcyB1cCBpbiB0aGlzIG5ldyBkcm9wIHBhdGggd2hlbiB0aGUgcXVldWUgaXMgZnVsbC5cblxuQSBxdWVzdGlvbiB0aGF0IGFyb3NlIGR1cmluZyBteSBhbmFseXNpcyBpcyBpZiBgX19uZXRwb2xsX3NlbmRfc2tiYCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gWWVzLCBpdCdzIGRlZmluZWQgYXMgYHN0YXRpYyBuZXRkZXZfdHhfdCBfX25ldHBvbGxfc2VuZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKWAuIFRoaXMgbWVhbnMgaXQncyBvbmx5IHZpc2libGUgd2l0aGluIHRoaXMgdHJhbnNsYXRpb24gdW5pdC4gSXQncyBjYWxsZWQgYnkgdGhlIHB1YmxpYyBmdW5jdGlvbiBgbmV0cG9sbF9zZW5kX3NrYihzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IpYC4gVGhpcyBvcGVucyB0aGUgcG9zc2liaWxpdHkgb2YgaW5saW5pbmcuIFNpbmNlIGBfX25ldHBvbGxfc2VuZF9za2JgIGlzIG9ubHkgZXZlciBjYWxsZWQgZnJvbSBgbmV0cG9sbF9zZW5kX3NrYmAsIGl0IHNob3VsZCBiZSBzYWZlIHRvIGlubGluZSB0aGUgZm9ybWVyIGludG8gdGhlIGxhdHRlci4gVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIHF1aWNrbHkgZ3JlcCB0aGUgY29kZSB0byBjaGVjayB0aGF0IHRoZXJlIGFyZSBubyBvdGhlciBjYWxsIHNpdGVzIGZvciBgX19uZXRwb2xsX3NlbmRfc2tiYCB3aXRoaW4gYG5ldHBvbGwuY2AuIFRoaXMgd291bGQgc3RyZWFtbGluZSB0aGUgY29kZSBhbmQgcmVkdWNlIHRoZSBmdW5jdGlvbiBjYWxsIG92ZXJoZWFkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzY3NSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA0OjI4OjQxLjg2ODgxOTM0N1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3MDY4ODExNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX25ldHBvbGxfc2VuZF9za2JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvbmV0cG9sbC5jPTI1OD1zdGF0aWMgaW50IG5ldHBvbGxfb3duZXJfYWN0aXZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvY29yZS9uZXRwb2xsLmMtMjY5LS8qIGNhbGwgd2l0aCBJUlEgZGlzYWJsZWQgKi9cXG5uZXQvY29yZS9uZXRwb2xsLmM6MjcwOnN0YXRpYyBuZXRkZXZfdHhfdCBfX25ldHBvbGxfc2VuZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9jb3JlL25ldHBvbGwuYy0yNzEte1xcbi0tXFxubmV0L2NvcmUvbmV0cG9sbC5jPTMzOD1uZXRkZXZfdHhfdCBuZXRwb2xsX3NlbmRfc2tiKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL25ldHBvbGwuYy0zNDctXFx0XFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xcbm5ldC9jb3JlL25ldHBvbGwuYzozNDg6XFx0XFx0cmV0ID0gX19uZXRwb2xsX3NlbmRfc2tiKG5wLCBza2IpO1xcbm5ldC9jb3JlL25ldHBvbGwuYy0zNDktXFx0XFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNDoyODo0My41Mzk1MTI5MTNaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTkzODM2MzcxNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYF9fbmV0cG9sbF9zZW5kX3NrYmAgYW5kIGl0cyBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIGBfX25ldHBvbGxfc2VuZF9za2JgIGlzIGEgc3RhdGljIGZ1bmN0aW9uIGFuZCBvbmx5IGNhbGxlZCBmcm9tIGBuZXRwb2xsX3NlbmRfc2tiYCwgc28gdGhlIGNvbXBpbGVyIGlzICpsaWtlbHkqIHRvIGlubGluZSBpdC4gVGhhdCBtZWFucyBgbmV0cG9sbF9zZW5kX3NrYmAgZGVmaW5pdGVseSBuZWVkcyB0byBiZSBpbiB0aGUgRm9jdXNTeW1ib2xzIGxpc3QsIGFuZCB3ZSBjYW4gaW5jbHVkZSBgX19uZXRwb2xsX3NlbmRfc2tiYCB0b28sIGJ1dCBvbmx5IGlmIGl0ICppc24ndCogYmVpbmcgaW5saW5lZC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBpcyB0aGlzIGNoYW5nZSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmc/IExldCdzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdC5cblxuVGhlIGd1aWRlbGluZXMgYXJlIHByZXR0eSBjbGVhcjogUmVhY2hhYmlsaXR5IGlzIHRoZSBwcmltYXJ5IGdhdGUuIFdlIGNhbiBvbmx5IGZ1enogY29kZSB0aGF0IGV4ZWN1dGVzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVW5yZWFjaGFibGUgY29kZSBpcyBhIG5vLWdvLiBXZSBoYXZlIG5lZ2F0aXZlIGNyaXRlcmlhIGxpa2Ugbm9uLWtlcm5lbCwgbm9uLWV4ZWN1dGFibGUgY2hhbmdlcyBhbmQgdW5yZWFjaGFibGUgaGFyZHdhcmUgb3IgZXhlY3V0aW9uIHBhdGhzLiAgVGhpbmdzIGxpa2UgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycyB0aGF0IG5lZWQgcGh5c2ljYWwgQVNJQ3Mgb3IgUENJIGhvdC11bnBsdWcgYXJlIG91dC4gUG9zaXRpdmUgY3JpdGVyaWEgaW5jbHVkZSBjb3JlIHN1YnN5c3RlbXMsIHJlZmFjdG9yaW5ncywgYXNzZXJ0aW9ucywgYW5kIHJlYWNoYWJsZSBkcml2ZXJzL3Byb3RvY29scy5cblxuUmlnaHQsIHRoZSBtb2RpZmllZCBmaWxlIGlzIGBuZXQvY29yZS9uZXRwb2xsLmNgLCBhbmQgdGhhdCdzIHBhcnQgb2YgY29yZSBuZXR3b3JraW5nISBHb29kIHN0YXJ0LiBUaGUgY2hhbmdlIGl0c2VsZiBpcyBpbiBgX19uZXRwb2xsX3NlbmRfc2tiKClgIGFuZCBpcyByZWxhdGVkIHRvIHRoZSB0cmFuc21pdCBxdWV1ZTogSXQgY2FwcyB0aGUgcXVldWUgbGVuZ3RoIGFuZCBmcmVlcyBza2JzIG9uIG92ZXJmbG93IHRvIHByZXZlbnQgdW5ib3VuZGVkIG1lbW9yeSBjb25zdW1wdGlvbiB3aGVuIHRoZSBlZ3Jlc3MgbmV0ZGV2IGlzIGJ1c3kuIGBuZXRwb2xsYCBzdXBwb3J0cyB2aXJ0dWFsIGRldmljZXM6IGR1bW15LCB2ZXRoLCBicmlkZ2UsIGJvbmQsIHRlYW0sIG1hY3ZsYW4sIHdpdGggYG5ldGNvbnNvbGVgIG9yIGJvbmRpbmcvYnJpZGdlL3RlYW0uICBEZWZpbml0ZWx5IHNvdW5kcyBsaWtlIHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIGV4ZXJjaXNlZCBpbiBhIHN0YW5kYXJkIHNldHVwLlxuXG5MZXQncyBjaGVjayB0aGUgY29uZmlndXJhdGlvbnMuIExvb2tpbmcgYXQgdGhlIGBNYWtlZmlsZWAsIGBvYmotJChDT05GSUdfTkVUUE9MTCkgKz0gbmV0cG9sbC5vYCwgdGhlbiBgS2NvbmZpZ2A6IHdlIG5lZWQgYE5FVFBPTExgLCB3aGljaCBpcyBhIGBkZWZfYm9vbGAgZm9yIGBORVRDT05TT0xFYC4gYE5FVENPTlNPTEVgIHJlcXVpcmVzIGBQUklOVEtgLCBhbmQgdGhlcmUncyBhbHNvIGBORVRDT05TT0xFX0RZTkFNSUNgIHRoYXQgZGVwZW5kcyBvbiBgTkVUQ09OU09MRWAgYW5kIGBDT05GSUdGU19GU2AuIEluIGBpbmNsdWRlL2xpbnV4L25ldHBvbGwuaGAsIGBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUmAgaXMgYGRlZl9ib29sIE5FVFBPTExgLlxuXG5JJ20gZ29pbmcgdG8gbG9vayBmb3Igb3RoZXIgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBvciBzZWxlY3Rpb25zIG9mIGBORVRQT0xMYCB1c2luZyBhIGdyZXBwZXIuIEp1c3QgdG8gYmUgdGhvcm91Z2guIEJ1dCwgYmFzZWQgb24gd2hhdCBJJ3ZlIHNlZW4sIGl0IGxvb2tzIHZlcnkgcHJvbWlzaW5nLiBUaGlzIGNoYW5nZSwgaW4gY29yZSBuZXR3b3JraW5nLCBhZmZlY3RpbmcgYSBmdW5jdGlvbiB0aGF0J3MgcGFydCBvZiBgbmV0cG9sbGAgd2hpY2ggaXMgY29uZmlndXJhYmxlIGZvciB2aXJ0dWFsIGRldmljZXMsIHNlZW1zICp2ZXJ5KiByZWFjaGFibGUuIEknZCBsZWFuIHRvd2FyZHMgdGhpcyBiZWluZyBhIGhpZ2gtcHJpb3JpdHkgZnV6eiB0YXJnZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MjAxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA0OjI5OjAyLjkyMzE1MTk4NVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA1NjcwOTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5FVFBPTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlPTI3PW9iai0kKENPTkZJR19ORVRfUEtUR0VOKSArPSBwa3RnZW4ub1xcbm5ldC9jb3JlL01ha2VmaWxlOjI4Om9iai0kKENPTkZJR19ORVRQT0xMKSArPSBuZXRwb2xsLm9cXG5uZXQvY29yZS9NYWtlZmlsZS0yOS1vYmotJChDT05GSUdfRklCX1JVTEVTKSArPSBmaWJfcnVsZXMub1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9NzYxMj12b2lkIG5ldGlmX25hcGlfYWRkX3dlaWdodF9sb2NrZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTc2MzEtXFx0bmFwaS1cXHUwMDNlZGV2ID0gZGV2O1xcbm5ldC9jb3JlL2Rldi5jOjc2MzI6I2lmZGVmIENPTkZJR19ORVRQT0xMXFxubmV0L2NvcmUvZGV2LmMtNzYzMy1cXHRuYXBpLVxcdTAwM2Vwb2xsX293bmVyID0gLTE7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMzI5OT1zdGF0aWMgdm9pZCBfX2luaXQgbmV0X2Rldl9zdHJ1Y3RfY2hlY2sodm9pZClcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEzMzQ0LVxcdENBQ0hFTElORV9BU1NFUlRfR1JPVVBfTUVNQkVSKHN0cnVjdCBuZXRfZGV2aWNlLCBuZXRfZGV2aWNlX3JlYWRfcngsIG5kX25ldCk7XFxubmV0L2NvcmUvZGV2LmM6MTMzNDU6I2lmZGVmIENPTkZJR19ORVRQT0xMXFxubmV0L2NvcmUvZGV2LmMtMTMzNDYtXFx0Q0FDSEVMSU5FX0FTU0VSVF9HUk9VUF9NRU1CRVIoc3RydWN0IG5ldF9kZXZpY2UsIG5ldF9kZXZpY2VfcmVhZF9yeCwgbnBpbmZvKTtcXG4tLVxcbm5ldC9jb3JlL25ldHBvbGwuYy00Ni0gKi9cXG5uZXQvY29yZS9uZXRwb2xsLmM6NDc6I2RlZmluZSBORVRQT0xMX1RYUV9NQVhcXHQxMDI0XFxubmV0L2NvcmUvbmV0cG9sbC5jLTQ4LVxcbi0tXFxubmV0L2NvcmUvbmV0cG9sbC5jPTI3MD1zdGF0aWMgbmV0ZGV2X3R4X3QgX19uZXRwb2xsX3NlbmRfc2tiKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL25ldHBvbGwuYy0zMjQtXFx0aWYgKCFkZXZfeG1pdF9jb21wbGV0ZShzdGF0dXMpKSB7XFxubmV0L2NvcmUvbmV0cG9sbC5jOjMyNTpcXHRcXHRpZiAoc2tiX3F1ZXVlX2xlbihcXHUwMDI2bnBpbmZvLVxcdTAwM2V0eHEpIFxcdTAwM2U9IE5FVFBPTExfVFhRX01BWCkge1xcbm5ldC9jb3JlL25ldHBvbGwuYy0zMjYtXFx0XFx0XFx0ZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTtcXG4tLVxcbm5ldC9jb3JlL25ldHBvbGwuYz0zNTU9aW50IF9fbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbi0tXFxubmV0L2NvcmUvbmV0cG9sbC5jLTM2MC1cXG5uZXQvY29yZS9uZXRwb2xsLmM6MzYxOlxcdGlmIChuZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIFxcdTAwMjYgSUZGX0RJU0FCTEVfTkVUUE9MTCkge1xcbm5ldC9jb3JlL25ldHBvbGwuYy0zNjItXFx0XFx0bnBfZXJyKG5wLCBcXFwiJXMgZG9lc24ndCBzdXBwb3J0IHBvbGxpbmcsIGFib3J0aW5nXFxcXG5cXFwiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNDoyOTowMy4yMjg4MzE3NVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxODYxMDM4NDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW52ZXN0aWdhdGluZyBgTkVUUE9MTGAgQ3Jvc3MtUmVmZXJlbmNlcyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBicm9hZGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IGBORVRQT0xMYCBpcyB1dGlsaXplZCB0aHJvdWdob3V0IHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzcGFjZS4gSXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBicm9hZGVyIEtjb25maWcgbGFuZHNjYXBlLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBvciBjb25mbGljdHMgdGhhdCBtaWdodCBhcmlzZSBmcm9tIGhvdyBpdCdzIGNvbmZpZ3VyZWQgaW4gb3RoZXIgYXJlYXMuIEknbSB0aGlua2luZywgXCJMZXQncyBjaGVjayBgTkVUUE9MTGAgaW4gb3RoZXIgS2NvbmZpZ3MuXCIgVGhhdCdzIHRoZSBmaXJzdCBsb2dpY2FsIHN0ZXAuIEdldCBhIGNvbXByZWhlbnNpdmUgb3ZlcnZpZXcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMjE3LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDQ6Mjk6MDUuMDg5ODcyODIyWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzg0MDM2NTU0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgTkVUUE9MTHxkZXBlbmRzIG9uIE5FVFBPTExcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA0OjI5OjA3LjQ3MzkxNjkxNloiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNjY3NjM0OTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipDaGVja2luZyB0aGUgYE5FVENPTlNPTEVgIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIGJlZm9yZSB3ZSBkaXZlIGRlZXBlciwgbGV0J3MganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdCBgTkVUQ09OU09MRWAgaXMgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEl0J3MgYSBmdW5kYW1lbnRhbCBlbGVtZW50IGZvci4uLiB3ZWxsLCB5b3Uga25vdywgbmV0d29yayBjb25zb2xlIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBpdCdzIHNldCB1cCBiZWZvcmUgZ29pbmcgZnVydGhlciB3aXRoIHRyb3VibGVzaG9vdGluZyBvciBhbnkgb3RoZXIgcmVsYXRlZCB0YXNrLCBhcyBgTkVUQ09OU09MRWAgaXMgdGhlIGZvdW5kYXRpb24gb24gd2hpY2ggbWFueSBuZXR3b3JrLXJlbGF0ZWQgdGFza3MgZGVwZW5kLiBJdOKAmXMgdGhlIG9idmlvdXMgZmlyc3QgdGhpbmcgdG8gdmVyaWZ5LiBBIHF1aWNrIGNoZWNrIG9mIHRoZSBLY29uZmlnIGZpbGVzIHdpbGwgZWl0aGVyIHByb3ZpZGUgYW4gaW5zdGFudCBjb25maXJtYXRpb24gYW5kIGVuYWJsZSBtZSB0byBnZXQgYSBydW5uaW5nIGtlcm5lbC4gSXQgd2lsbCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQgYmVmb3JlIEkgcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE0MDAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNDoyOTowOS4xNDE1NTQ3MjJaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjY2NTQyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJcXFxcYk5FVENPTlNPTEVcXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz0zMTg9Y29uZmlnIE1BQ1NFQ1xcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMjYtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozMjc6Y29uZmlnIE5FVENPTlNPTEVcXG5kcml2ZXJzL25ldC9LY29uZmlnLTMyOC1cXHR0cmlzdGF0ZSBcXFwiTmV0d29yayBjb25zb2xlIGxvZ2dpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9MzM0PWNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzNS1cXHRib29sIFxcXCJEeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiBsb2dnaW5nIHRhcmdldHNcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozMzY6XFx0ZGVwZW5kcyBvbiBORVRDT05TT0xFIFxcdTAwMjZcXHUwMDI2IFNZU0ZTIFxcdTAwMjZcXHUwMDI2IENPTkZJR0ZTX0ZTIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG5kcml2ZXJzL25ldC9LY29uZmlnOjMzNzpcXHRcXHRcXHQhKE5FVENPTlNPTEU9eSBcXHUwMDI2XFx1MDAyNiBDT05GSUdGU19GUz1tKVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzM4LVxcdHNlbGVjdCBQUklOVEtfRVhFQ1VUSU9OX0NUWFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz0zNDU9Y29uZmlnIE5FVENPTlNPTEVfRVhURU5ERURfTE9HXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNDYtXFx0Ym9vbCBcXFwiU2V0IGtlcm5lbCBleHRlbmRlZCBtZXNzYWdlIGJ5IGRlZmF1bHRcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozNDc6XFx0ZGVwZW5kcyBvbiBORVRDT05TT0xFXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNDgtXFx0ZGVmYXVsdCBuXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTM2Nz1jb25maWcgTkVUUE9MTFxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzY4OlxcdGRlZl9ib29sIE5FVENPTlNPTEVcXG5kcml2ZXJzL25ldC9LY29uZmlnLTM2OS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhbHhlZGEveGdtYWMuYz0xMzc4PXN0YXRpYyBpcnFyZXR1cm5fdCB4Z21hY19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FseGVkYS94Z21hYy5jLTE0MjctI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FseGVkYS94Z21hYy5jOjE0Mjg6LyogUG9sbGluZyByZWNlaXZlIC0gdXNlZCBieSBORVRDT05TT0xFIGFuZCBvdGhlciBkaWFnbm9zdGljIHRvb2xzXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FseGVkYS94Z21hYy5jLTE0MjktICogdG8gYWxsb3cgbmV0d29yayBJL08gd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLiAqL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2Ftc3VuZy9zeGdiZS9zeGdiZV9tYWluLmM9MTg0OT1zdGF0aWMgdm9pZCBzeGdiZV9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2Ftc3VuZy9zeGdiZS9zeGdiZV9tYWluLmMtMTkxOS0gKiBEZXNjcmlwdGlvbjpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zYW1zdW5nL3N4Z2JlL3N4Z2JlX21haW4uYzoxOTIwOiAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSBORVRDT05TT0xFIGFuZCBvdGhlciBkaWFnbm9zdGljIHRvb2xzXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2Ftc3VuZy9zeGdiZS9zeGdiZV9tYWluLmMtMTkyMS0gKiB0byBhbGxvdyBuZXR3b3JrIEkvTyB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC92aWEvdmlhLXZlbG9jaXR5LmM9MjI5MD1zdGF0aWMgaW50IHZlbG9jaXR5X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC92aWEvdmlhLXZlbG9jaXR5LmMtMjM2Ny0gKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3ZpYS92aWEtdmVsb2NpdHkuYzoyMzY4OiAqICBVc2VkIGJ5IE5FVENPTlNPTEUgYW5kIG90aGVyIGRpYWdub3N0aWMgdG9vbHMgdG8gYWxsb3cgbmV0d29yayBJL1BcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC92aWEvdmlhLXZlbG9jaXR5LmMtMjM2OS0gKiAgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNDoyOTowOS4yNjgyMjY0NFoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5ODg5MTg5OTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgbmV0Y29uc29sZWAgYW5kIGBuZXRwb2xsYCBDb25maWd1cmF0aW9uIGFuZCBDb2RlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGBORVRDT05TT0xFYCBhbmQgYE5FVFBPTExgIGNvbmZpZ3VyYXRpb24sIGFuZCBpdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBgTkVUQ09OU09MRWAgc2V0cyBgTkVUUE9MTGAsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGVuIGBORVRDT05TT0xFX0RZTkFNSUNgIGVuYWJsZXMgdGhlIGFiaWxpdHkgdG8gZHluYW1pY2FsbHkgcmVjb25maWd1cmUgdGhlIHRhcmdldCB2aWEgY29uZmlnZnMgLSB3aGljaCBpcyBrZXkgZm9yIHRvb2xzIGxpa2Ugc3l6a2FsbGVyIG9yIHVzZXJzcGFjZSBwcm9ncmFtcy4gU28sIHRob3NlIHR3byBhcmUgdGhlIG1haW4gY29uZmlncyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLiBBY3R1YWxseSwgYE5FVFBPTExgIGlzIGp1c3QgYSBgZGVmX2Jvb2xgIHRoYXQgbWlycm9ycyB0aGUgdmFsdWUgb2YgYE5FVENPTlNPTEVgLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgY29kZS4gSSdtIGZvY3VzaW5nIG9uIHRoZSBhZmZlY3RlZCBmdW5jdGlvbnMsIHVzaW5nIHRoZSBGb2N1c1N5bWJvbHMgdG8gdGFyZ2V0IHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gZGlyZWN0bHkgbW9kaWZpZWQsIG9yIGFyZSBjYWxsZWQuIEkgc2VlIHRoYXQgdGhlIGZ1bmN0aW9uIHRoYXQncyBkaXJlY3RseSBtb2RpZmllZCBpcyBgX19uZXRwb2xsX3NlbmRfc2tiYC4gVGhlcmUncyBhbHNvIGEgbm9uLXN0YXRpYyBleHBvcnRlZCB3cmFwcGVyIGZ1bmN0aW9uLCBgbmV0cG9sbF9zZW5kX3NrYmAuIEFuZCB0aGVuLCB0aGUgZW50cnkgcG9pbnRzIGBuZXRwb2xsX3NlbmRfdWRwYCBhbmQgdGhlIGBxdWV1ZV9wcm9jZXNzYCwgdGhhdCB3b3JrcyBvbiBgbnBpbmZvLVx1MDAzZXR4cWAgLSB3aGljaCBpcyBhIHNpZ25pZmljYW50IHBhcnQgb2YgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS4gSSBzaG91bGQgbm90ZSB0aGF0IGBxdWV1ZV9wcm9jZXNzYCBpcyBzdGF0aWMgaW4gYG5ldC9jb3JlL25ldHBvbGwuY2AsIHNvIGl0J3Mgbm90IGRpcmVjdGx5IGV4cG9ydGVkLCBhbmQgaXQgbG9va3MgbGlrZSBhIHdvcmsgaGFuZGxlciBmb3IgYFx1MDAyNm5waW5mby1cdTAwM2V0eF93b3JrYC4gVGhlIGBuZXRwb2xsX3NlbmRfc2tiYCBpcyBleHBvcnRlZCB1c2luZyBgRVhQT1JUX1NZTUJPTGAuXG5cbkkndmUgYWxzbyBjaGVja2VkIHRoZSBmdWxsIGxpc3Qgb2YgZnVuY3Rpb25zIGluIGBuZXQvY29yZS9uZXRwb2xsLmNgLCBhbmQgdGhhdCBjb25maXJtcyB0aGF0IG9ubHkgdGhlIHRocmVlIGZ1bmN0aW9ucyAtIGBfX25ldHBvbGxfc2VuZF9za2JgLCBgbmV0cG9sbF9zZW5kX3NrYmAsIGFuZCBgcXVldWVfcHJvY2Vzc2AgaGF2ZSBiZWVuIHRvdWNoZWQuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgYWN0dWFsIGRpZmYuIFRoZSBjb2RlIGNoYW5nZXMgYXJlIGFsbCB3aXRoaW4gYF9fbmV0cG9sbF9zZW5kX3NrYmAuIFRoZSBrZXkgYWRkaXRpb24gaXMgYSBjaGVjayBvbiB0aGUgbnVtYmVyIG9mIHBhY2tldHMgaGVsZCBpbiBgbnBpbmZvLVx1MDAzZXR4cWAuIEl0IGxvb2tzIGxpa2UgdGhlcmUncyBhIG5ldyBgTkVUUE9MTF9UWFFfTUFYYCBsaW1pdCAoZGVmaW5lZCBhcyAxMDI0KSwgYW5kIGlmIHRoZSBxdWV1ZSBleGNlZWRzIHRoYXQsIHRoZSBuZXcgY29kZSB3aWxsIGRyb3AgdGhlIHBhY2tldCBpbnN0ZWFkIG9mIGdyb3dpbmcgdGhlIHF1ZXVlIGluZGVmaW5pdGVseS4gVGhhdCBtYWtlcyBzZW5zZSwgdG8gcHJldmVudCByZXNvdXJjZSBleGhhdXN0aW9uIGZyb20gYSBzdGFsbGVkIGRldmljZSwgYW5kIHRoYXQncyBhIGdvb2QgY2hhbmdlLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuIGluIGRyaXZlcnMuXG5cbkkndmUgZG91YmxlLWNoZWNrZWQgdGhhdCB0aGVyZSBhcmUgbm8gb3RoZXIgY2hhbmdlcyBpbiB0aGUgSEVBRCBjb21taXQsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjM1NCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNDoyOToxOS4xNTc0MTk0OTRaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODI5ODUxNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkVUUE9MTF9UWFFfTUFYXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL25ldHBvbGwuYy00Ni0gKi9cXG5uZXQvY29yZS9uZXRwb2xsLmM6NDc6I2RlZmluZSBORVRQT0xMX1RYUV9NQVhcXHQxMDI0XFxubmV0L2NvcmUvbmV0cG9sbC5jLTQ4LVxcbi0tXFxubmV0L2NvcmUvbmV0cG9sbC5jPTI3MD1zdGF0aWMgbmV0ZGV2X3R4X3QgX19uZXRwb2xsX3NlbmRfc2tiKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL25ldHBvbGwuYy0zMjQtXFx0aWYgKCFkZXZfeG1pdF9jb21wbGV0ZShzdGF0dXMpKSB7XFxubmV0L2NvcmUvbmV0cG9sbC5jOjMyNTpcXHRcXHRpZiAoc2tiX3F1ZXVlX2xlbihcXHUwMDI2bnBpbmZvLVxcdTAwM2V0eHEpIFxcdTAwM2U9IE5FVFBPTExfVFhRX01BWCkge1xcbm5ldC9jb3JlL25ldHBvbGwuYy0zMjYtXFx0XFx0XFx0ZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDQ6Mjk6MjAuNjQwNDExMzEyWiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE2OTYzMjY0NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBuZXQvY29yZS9uZXRwb2xsLmMqKlxuXG5Pa2F5LCBsZXQncyBzZWUsIHRoZSBgZ2l0IGxvZyAtMWAgc2hvd3MgYSByZWNlbnQgY29tbWl0IG1vZGlmeWluZyBgbmV0L2NvcmUvbmV0cG9sbC5jYC4gVGhpcyBpcyBpbnRlcmVzdGluZzsgSSBzZWUgdGhlIGludHJvZHVjdGlvbiBvZiBhIHF1ZXVlIGxlbmd0aCBjaGVjayB3aXRoaW4gYF9fbmV0cG9sbF9zZW5kX3NrYmAuIFNwZWNpZmljYWxseSwgaXQgY2hlY2tzIGlmIGBza2JfcXVldWVfbGVuKFx1MDAyNm5waW5mby1cdTAwM2V0eHEpYCBleGNlZWRzIGBORVRQT0xMX1RYUV9NQVhgLiBJZiBpdCBkb2VzLCB0aGUgU0tCIGlzIGRyb3BwZWQgdXNpbmcgYGRldl9rZnJlZV9za2JfaXJxKHNrYilgLCByZXR1cm5pbmcgYE5FVF9YTUlUX0RST1BgLiBUaGlzIHByb3RlY3RzIGFnYWluc3QgdW5ib3VuZGVkIHF1ZXVlIGdyb3d0aCBpbiBgbnBpbmZvLVx1MDAzZXR4cWAuXG5cblRoaXMgY29kZSBsaXZlcyB3aXRoaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0sIHdoaWNoIG1lYW5zIGl0IGNhbiBiZSByZWFjaGVkIHRocm91Z2ggdmlydHVhbCBuZXR3b3JrIGRldmljZXMsIG5ldGNvbnNvbGUsIGR5bmFtaWMgbmV0Y29uc29sZSwgb3IgZXZlbiBuZXR3b3JraW5nIHN0YWNrcyBsaWtlIGJvbmRpbmcsIHRlYW1pbmcsIG9yIGJyaWRnaW5nLCAqaWYqIG5ldHBvbGwgaXMgZW5hYmxlZC4gVGhlIHBvdGVudGlhbCBoZXJlIGZvciBmdXp6aW5nIGlzIHNpZ25pZmljYW50LiBJJ20gdGhpbmtpbmcgd2UgY291bGQgdW5jb3ZlciBpc3N1ZXMgYXJvdW5kIHBhY2tldCBkcm9wcGluZyBzY2VuYXJpb3MsIHJlZmNvdW50aW5nIG9mIFNLQnMgYW5kIHRoZWlyIGxpZmVjeWNsZSwgZXNwZWNpYWxseSBhcm91bmQgZnJlZWluZyB0aGUgU0tCIHdpdGggYGRldl9rZnJlZV9za2JfaXJxYCB3aGVuIGNhbGxlcnMgbWF5IGV4cGVjdCBzb21ldGhpbmcgZGlmZmVyZW50LCBvciBldmVuIGRvdWJsZS1mcmVlcy4gV2Ugc2hvdWxkIGFsc28gYmUgb24gdGhlIGxvb2tvdXQgZm9yIGxvY2tkZXAgaXNzdWVzIGFuZCBwb3RlbnRpYWwgc3RhdGUtaGFuZGxpbmcgcHJvYmxlbXMgd2hlbiB0aGlzIHF1ZXVlIG92ZXJmbG93cy5cblxuVGhlcmVmb3JlLCBteSBldmFsdWF0aW9uOlxuXG4qICAgKipXb3J0aEZ1enppbmc6IHRydWUqKiAoZGVmaW5pdGVseSB3b3J0aCB0aGUgZWZmb3J0KVxuKiAgICoqRW5hYmxlQ29uZmlnczogW1wiTkVUUE9MTFwiLCBcIk5FVENPTlNPTEVcIiwgXCJORVRDT05TT0xFX0RZTkFNSUNcIl0qKiAod2UgbmVlZCB0aG9zZSBlbmFibGVkIHRvIGhpdCB0aGlzIGNvZGUpXG4qICAgKipGb2N1c1N5bWJvbHM6IFtcIl9fbmV0cG9sbF9zZW5kX3NrYlwiLCBcIm5ldHBvbGxfc2VuZF9za2JcIiwgXCJxdWV1ZV9wcm9jZXNzXCJdKiogKFRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0byB0YXJnZXQgZm9yIGZ1enppbmcuIEkgaW5jbHVkZSBgcXVldWVfcHJvY2Vzc2AgYmVjYXVzZSBpZiBzb21ldGhpbmcgaXMgd3Jvbmcgd2l0aCBhIHF1ZXVlLCB3ZSBzaG91bGQgYmUgYWJsZSB0byB0cmlnZ2VyIGl0LCBhbmQgdGhpcyBpcyB3aGVyZSBpdCBoYXBwZW5zKS5cblxuTm93LCBsZXQncyBtYWtlIHN1cmUgZXZlcnl0aGluZyByZXF1aXJlZCBpcyBpbiBwbGFjZS4gV2UgbmVlZDpcblxuKiAgIGBXb3J0aEZ1enppbmdgOiBCb29sZWFuIC0gQ2hlY2shXG4qICAgYEZvY3VzU3ltYm9sc2A6IExpc3Qgb2Ygc3RyaW5ncyB3aXRoIHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdG8gZm9jdXMgb24gLSBDaGVjayFcbiogICBgRW5hYmxlQ29uZmlnc2A6IExpc3Qgb2Ygc3RyaW5ncyB3aXRob3V0IHRoZSBgQ09ORklHX2AgcHJlZml4IC0gQ2hlY2shXG4qICAgYFJlYXNvbmluZ2A6IENvbmNpc2UgZXhwbGFuYXRpb24gb2YgdGhlIHZlcmRpY3QgLSBDaGVjayFcblxuRXZlcnl0aGluZyBpcyBzb3VuZC4gVGltZSB0byBydW4gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM5MjQsIk91dHB1dFRva2VucyI6MTc5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA0OjI5OjM3LjYwMzY3ODU0MloiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3NDcyNTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRQT0xMXCIsXG4gICAgXCJORVRDT05TT0xFXCIsXG4gICAgXCJORVRDT05TT0xFX0RZTkFNSUNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX25ldHBvbGxfc2VuZF9za2JcIixcbiAgICBcIm5ldHBvbGxfc2VuZF9za2JcIixcbiAgICBcInF1ZXVlX3Byb2Nlc3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgcXVldWUgbGVuZ3RoIGxpbWl0IChORVRQT0xMX1RYUV9NQVgpIGluIF9fbmV0cG9sbF9zZW5kX3NrYigpIGluIG5ldC9jb3JlL25ldHBvbGwuYyB0byBwcmV2ZW50IHVuYm91bmRlZCBza2IgcXVldWUgZ3Jvd3RoIHdoZW4gYSBkZXZpY2UgaXMgc3RhbGxlZCBvciBidXN5LiBDb3JlIG5ldHdvcmtpbmcgY29kZSBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlcyBhbmQgbmV0Y29uc29sZSAoaW5jbHVkaW5nIGR5bmFtaWNhbGx5IHJlY29uZmlndXJlZCB0YXJnZXRzIHZpYSBjb25maWdmcykuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3Qgc2tiIGxpZmVjeWNsZSwgcXVldWUgb3ZlcmZsb3cgaGFuZGxpbmcsIGFuZCBwYWNrZXQgZHJvcCBlZGdlIGNhc2VzIGluIHRoZSBuZXRwb2xsIHRyYW5zbWl0IHBhdGguXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUUE9MTFwiLFxuICAgIFwiTkVUQ09OU09MRVwiLFxuICAgIFwiTkVUQ09OU09MRV9EWU5BTUlDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19uZXRwb2xsX3NlbmRfc2tiXCIsXG4gICAgXCJuZXRwb2xsX3NlbmRfc2tiXCIsXG4gICAgXCJxdWV1ZV9wcm9jZXNzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHF1ZXVlIGxlbmd0aCBsaW1pdCAoTkVUUE9MTF9UWFFfTUFYKSBpbiBfX25ldHBvbGxfc2VuZF9za2IoKSBpbiBuZXQvY29yZS9uZXRwb2xsLmMgdG8gcHJldmVudCB1bmJvdW5kZWQgc2tiIHF1ZXVlIGdyb3d0aCB3aGVuIGEgZGV2aWNlIGlzIHN0YWxsZWQgb3IgYnVzeS4gQ29yZSBuZXR3b3JraW5nIGNvZGUgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgdmlydHVhbCBuZXR3b3JrIGRldmljZXMgYW5kIG5ldGNvbnNvbGUgKGluY2x1ZGluZyBkeW5hbWljYWxseSByZWNvbmZpZ3VyZWQgdGFyZ2V0cyB2aWEgY29uZmlnZnMpLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHNrYiBsaWZlY3ljbGUsIHF1ZXVlIG92ZXJmbG93IGhhbmRsaW5nLCBhbmQgcGFja2V0IGRyb3AgZWRnZSBjYXNlcyBpbiB0aGUgbmV0cG9sbCB0cmFuc21pdCBwYXRoLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNDoyOTozNy42NzExNTgyOTFaIiwiU2VxIjo0NywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MTI4MjQ3MDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDQ6Mjk6MzcuNjcxNTgwMDkxWiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzUxMjc4MjA4OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBxdWV1ZSBsZW5ndGggY2FwIChORVRQT0xMX1RYUV9NQVggPSAxMDI0KSBvbiB0aGUgbmV0cG9sbCB0cmFuc21pc3Npb24gcXVldWUgKG5waW5mby1cXHUwMDNldHhxKSBpbiBuZXQvY29yZS9uZXRwb2xsLmMgdG8gcHJldmVudCB1bmJvdW5kZWQgcXVldWUgZ3Jvd3RoIHdoZW4gdHJhbnNtaXNzaW9uIHN0YWxscy4gSWYgdGhlIHF1ZXVlIGxpbWl0IGlzIHJlYWNoZWQsIHRoZSBza2IgaXMgZnJlZWQgd2l0aCBkZXZfa2ZyZWVfc2tiX2lycShza2IpIGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyBORVRfWE1JVF9EUk9QLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnk6XFxuMS4gTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcyBhcmUgY3JlYXRlZCBvciByZWFkLiBUaGUgcXVldWUgbGVuZ3RoIGNoZWNrIG9wZXJhdGVzIG9uIG5waW5mby1cXHUwMDNldHhxLCBhbiBhbHJlYWR5IGluaXRpYWxpemVkIHNrX2J1ZmZfaGVhZC5cXG4yLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBzbyB0aGVyZSBpcyBubyByaXNrIG9mIGtlcm5lbCBpbmZvcm1hdGlvbiBkaXNjbG9zdXJlLlxcbjMuIE5vIGJ1ZmZlciBib3VuZHMgb3IgcGFja2V0IHBheWxvYWQgb2Zmc2V0cyBhcmUgbW9kaWZpZWQgaW4gd2F5cyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSBieXRlcy5cXG5cXG5BbnkgcG90ZW50aWFsIGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhpcyBjaGFuZ2UgKGUuZy4sIHBhY2tldCBsaWZlY3ljbGUgZXJyb3JzIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWZyZWUgb2YgdGhlIHNrYikgYXJlIGFkZHJlc3NlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIG1lbW9yeSBkZWJ1Z2dpbmcsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5MDgxNGFhMTU5MmU1Y2M2NzViZjE5OTVkMmUxODRlNmJiZjk5MWU1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMDQ6MjY6NDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRwb2xsLmMgYi9uZXQvY29yZS9uZXRwb2xsLmNcbmluZGV4IGZlMWUwY2RhNWQ2YmYuLjhmZDY0MDk1NWU0NjMgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9uZXRwb2xsLmNcbisrKyBiL25ldC9jb3JlL25ldHBvbGwuY1xuQEAgLTM4LDYgKzM4LDE0IEBAXG4gXG4gI2RlZmluZSBVU0VDX1BFUl9QT0xMXHQ1MFxuIFxuKy8qXG4rICogQ2FwIG9uIHNrYnMgcGFya2VkIGluIG5waW5mby1cdTAwM2V0eHEgd2hpbGUgdGhlIGRldmljZSBpcyBidXN5LiBUaGUgcXVldWVcbisgKiBleGlzdHMgdG8gcmlkZSBvdXQgYSB0cmFuc2llbnQgc3RhbGw7IGEgcHJvZHVjZXIgdGhhdCBvdXRydW5zIHRoZVxuKyAqIGRldmljZSBmb3IgbG9uZ2VyIHRoYW4gdGhhdCBtdXN0IGxvc2UgcGFja2V0cywgbm90IGdyb3cgaXQgd2l0aG91dFxuKyAqIGJvdW5kLlxuKyAqL1xuKyNkZWZpbmUgTkVUUE9MTF9UWFFfTUFYXHQxMDI0XG4rXG4gLypcbiAgKiBjYXJyaWVyX3RpbWVvdXQgaXMgbmV0Y29uc29sZS1zcGVjaWZpYyBhbmQgb25seSBrZXB0IGhlcmUgdG8gcHJlc2VydmUgdGhlXG4gICogbmV0cG9sbC5jYXJyaWVyX3RpbWVvdXQgbW9kdWxlLXBhcmFtZXRlciBBQkkuIEl0cyB2YWx1ZSBpcyBleHBvc2VkIHRvXG5AQCAtMzE0LDYgKzMyMiwxMCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgX19uZXRwb2xsX3NlbmRfc2tiKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdH1cbiBcbiBcdGlmICghZGV2X3htaXRfY29tcGxldGUoc3RhdHVzKSkge1xuK1x0XHRpZiAoc2tiX3F1ZXVlX2xlbihcdTAwMjZucGluZm8tXHUwMDNldHhxKSBcdTAwM2U9IE5FVFBPTExfVFhRX01BWCkge1xuK1x0XHRcdGRldl9rZnJlZV9za2JfaXJxKHNrYik7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbiBcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2bnBpbmZvLVx1MDAzZXR4cSwgc2tiKTtcbiBcdFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNm5waW5mby1cdTAwM2V0eF93b3JrLDApO1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDQ6Mjk6MzcuNjcxNTgxMzcxWiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjExOTEwNTM2NjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy5cblxuKipBbmFseXppbmcgdGhpcyBLZXJuZWwgUGF0Y2gqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoaXMgcGF0Y2guIEZpcnN0IHRoaW5ncyBmaXJzdCwgaXQncyBoaXR0aW5nIGBuZXQvY29yZS9uZXRwb2xsLmNgLCB3aGljaCwgYXMgeW91IGtub3csIGRlYWxzIHdpdGggbmV0d29yayBwb2xsaW5nLiBHb29kLCB0aGF0IG5hcnJvd3MgdGhlIGZvY3VzLiBMZXQncyBnZXQgdGhlIGNvbnRleHQsIEknbGwgdXNlIGByZWFkLWZpbGVgIHRvIGdldCB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGF0IGZpbGUsIGFuZCBJJ2xsIGp1bXAgcmlnaHQgYXJvdW5kIGxpbmUgMzE0LiBUaGF0J3MgdXN1YWxseSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgdG8gc2VlIHdoZXJlIHRoaXMgcGF0Y2ggaXMgc2xvdHRlZCBpbiBhbmQgdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgbG9naWMuIFRpbWUgdG8gZGl2ZSBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI3MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDQ6Mjk6NDkuNTgyMTIxMzZaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODMyMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvbmV0cG9sbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMwMDpcXHRcXHRcXHQgICAgIHRyaWVzIFxcdTAwM2UgMDsgLS10cmllcykge1xcbiAzMDE6XFx0XFx0XFx0XFx0aWYgKEhBUkRfVFhfVFJZTE9DSyhkZXYsIHR4cSkpIHtcXG4gMzAyOlxcdFxcdFxcdFxcdFxcdGlmICghbmV0aWZfeG1pdF9zdG9wcGVkKHR4cSkpXFxuIDMwMzpcXHRcXHRcXHRcXHRcXHRcXHRzdGF0dXMgPSBuZXRwb2xsX3N0YXJ0X3htaXQoc2tiLCBkZXYsIHR4cSk7XFxuIDMwNDpcXHRcXG4gMzA1OlxcdFxcdFxcdFxcdFxcdEhBUkRfVFhfVU5MT0NLKGRldiwgdHhxKTtcXG4gMzA2OlxcdFxcbiAzMDc6XFx0XFx0XFx0XFx0XFx0aWYgKGRldl94bWl0X2NvbXBsZXRlKHN0YXR1cykpXFxuIDMwODpcXHRcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gMzA5OlxcdFxcbiAzMTA6XFx0XFx0XFx0XFx0fVxcbiAzMTE6XFx0XFxuIDMxMjpcXHRcXHRcXHRcXHQvKiB0aWNrbGUgZGV2aWNlIG1heWJlIHRoZXJlIGlzIHNvbWUgY2xlYW51cCAqL1xcbiAzMTM6XFx0XFx0XFx0XFx0bmV0cG9sbF9wb2xsX2RldihucC1cXHUwMDNlZGV2KTtcXG4gMzE0OlxcdFxcbiAzMTU6XFx0XFx0XFx0XFx0dWRlbGF5KFVTRUNfUEVSX1BPTEwpO1xcbiAzMTY6XFx0XFx0XFx0fVxcbiAzMTc6XFx0XFxuIDMxODpcXHRcXHRcXHRXQVJOX09OQ0UoIWlycXNfZGlzYWJsZWQoKSxcXG4gMzE5OlxcdFxcdFxcdFxcdFxcXCJuZXRwb2xsX3NlbmRfc2tiX29uX2RldigpOiAlcyBlbmFibGVkIGludGVycnVwdHMgaW4gcG9sbCAoJXBTKVxcXFxuXFxcIixcXG4gMzIwOlxcdFxcdFxcdFxcdGRldi1cXHUwMDNlbmFtZSwgZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fc3RhcnRfeG1pdCk7XFxuIDMyMTpcXHRcXG4gMzIyOlxcdFxcdH1cXG4gMzIzOlxcdFxcbiAzMjQ6XFx0XFx0aWYgKCFkZXZfeG1pdF9jb21wbGV0ZShzdGF0dXMpKSB7XFxuIDMyNTpcXHRcXHRcXHRpZiAoc2tiX3F1ZXVlX2xlbihcXHUwMDI2bnBpbmZvLVxcdTAwM2V0eHEpIFxcdTAwM2U9IE5FVFBPTExfVFhRX01BWCkge1xcbiAzMjY6XFx0XFx0XFx0XFx0ZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTtcXG4gMzI3OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiAzMjg6XFx0XFx0XFx0fVxcbiAzMjk6XFx0XFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNm5waW5mby1cXHUwMDNldHhxLCBza2IpO1xcbiAzMzA6XFx0XFx0XFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFxcdTAwMjZucGluZm8tXFx1MDAzZXR4X3dvcmssMCk7XFxuIDMzMTpcXHRcXHR9XFxuIDMzMjpcXHRcXHRyZXQgPSBORVRERVZfVFhfT0s7XFxuIDMzMzpcXHRvdXQ6XFxuIDMzNDpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gMzM1OlxcdFxcdHJldHVybiByZXQ7XFxuIDMzNjpcXHR9XFxuIDMzNzpcXHRcXG4gMzM4OlxcdG5ldGRldl90eF90IG5ldHBvbGxfc2VuZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAzMzk6XFx0e1xcbiAzNDA6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gMzQxOlxcdFxcdG5ldGRldl90eF90IHJldDtcXG4gMzQyOlxcdFxcbiAzNDM6XFx0XFx0aWYgKHVubGlrZWx5KCFucCkpIHtcXG4gMzQ0OlxcdFxcdFxcdGRldl9rZnJlZV9za2JfaXJxKHNrYik7XFxuIDM0NTpcXHRcXHRcXHRyZXQgPSBORVRfWE1JVF9EUk9QO1xcbiAzNDY6XFx0XFx0fSBlbHNlIHtcXG4gMzQ3OlxcdFxcdFxcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcXG4gMzQ4OlxcdFxcdFxcdHJldCA9IF9fbmV0cG9sbF9zZW5kX3NrYihucCwgc2tiKTtcXG4gMzQ5OlxcdFxcdFxcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDQ6Mjk6NDkuNTgyMjA2OVoiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNTU3MjE2ODY0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldHBvbGwgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBzZWUgYSBgZGlmZmAgb3V0cHV0LCB3aGljaCBtZWFucyB3ZSdyZSBsb29raW5nIGF0IGNoYW5nZXMgdG8gdGhlIGBuZXRwb2xsLmNgIGZpbGUgaW4gdGhlIGBuZXQvY29yZWAgZGlyZWN0b3J5LiBUaGUgcHJpbWFyeSBmb2N1cyBzZWVtcyB0byBiZSBhIG5ldyBkZWZpbml0aW9uLCBgTkVUUE9MTF9UWFFfTUFYYCwgc2V0IHRvIDEwMjQuIFRoaXMgaXMgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGUgY29tbWVudCBjbGFyaWZpZXMgdGhhdCBpdCdzIGEgY2FwIG9uIHRoZSBudW1iZXIgb2YgU0tCcyAoc29ja2V0IGJ1ZmZlcikgcGFya2VkIGluIHRoZSBgbnBpbmZvLVx1MDAzZXR4cWAgcXVldWUgd2hpbGUgdGhlIG5ldHdvcmsgZGV2aWNlIGlzIGJ1c3kuIFRoZSBjb21tZW50IGNsZWFybHkgc3RhdGVzIHRoZSBxdWV1ZSBleGlzdHMgdG8gaGFuZGxlIGJyaWVmIGRldmljZSBzdGFsbHMsIGFuZCB0aGUgaW1wbGVtZW50YXRpb24gd2lsbCBiZWdpbiBkaXNjYXJkaW5nIHBhY2tldHMgb25jZSBpdCBoaXRzIHRoYXQgbGltaXQuIFRoYXQncyBnb29kLCBwcmV2ZW50cyBhbiB1bmJvdW5kZWQgcXVldWUgdGhhdCBjb3VsZCBsZWFkIHRvIG1lbW9yeSBleGhhdXN0aW9uLiBTbywgaW5zdGVhZCBvZiBsZXR0aW5nIGl0IGdyb3cgaW5kZWZpbml0ZWx5IGlmIHRoZSBkZXZpY2UgaXMgcGVyc2lzdGVudGx5IGJ1c3ksIHdlJ3JlIG5vdyBpbXBsZW1lbnRpbmcgYmFja3ByZXNzdXJlIGFuZCBkcm9wcGluZyBwYWNrZXRzIGFmdGVyIGEgdGhyZXNob2xkLiBTbWFydC5cblxuVGhlbiwgdGhlcmUncyBhIG5ldyBgaWZgIGJsb2NrIGluc2lkZSBgX19uZXRwb2xsX3NlbmRfc2tiYC4gSWYgdGhlIGRldmljZSB0cmFuc21pdCBpc24ndCBjb21wbGV0ZSAobWVhbmluZyBpdCdzIGJ1c3kpLCBhbmQgdGhlIGB0eHFgIGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYE5FVFBPTExfVFhRX01BWGAsIHRoZSBTS0IgaXMgZnJlZWQsIGFuZCB3ZSBgZ290byBvdXRgLiBPdGhlcndpc2UsIHRoZSBTS0IgaXMgcXVldWVkIGFuZCBhIGRlbGF5ZWQgd29yayBpdGVtIGlzIHNjaGVkdWxlZC4gVGhlIG5ldyBpbXBsZW1lbnRhdGlvbiBwcmV2ZW50cyBhbiB1bmJvdW5kZWQgaW5jcmVhc2UgaW4gdGhlIHNpemUgb2YgYG5waW5mby1cdTAwM2V0eHFgIGJ5IGRpc2NhcmRpbmcgcGFja2V0cyBpZiB0aGUgZGV2aWNlIGlzIHRvbyBzbG93LlxuXG5Ob3csIEknbSBqdXN0IGN1cmlvdXMgYWJvdXQgaG93IGBfX25ldHBvbGxfc2VuZF9za2JgIGhhbmRsZXMgdGhlIHJldHVybiB2YWx1ZSBvciBhbnkgZXJyb3JzLiBMZXQgbWUgcXVpY2tseSBzY2FuIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBzcGVjaWZpY2FsbHkgbGluZXMgMjcwLTMwMCBvZiB0aGUgc2FtZSBmaWxlLCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBsb2NhbCB2YXJpYWJsZXMgYmVpbmcgdXNlZCBhbmQgaG93IGVycm9ycyBtaWdodCBiZSBoYW5kbGVkIG9yIGlmIHRoZSByZXR1cm4gdmFyaWFibGUgaXMgaW5pdGlhbGl6ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNDQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNDozMDowNS4xNTQzNzkwNTFaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvbmV0cG9sbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3MCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI3MDpcXHRzdGF0aWMgbmV0ZGV2X3R4X3QgX19uZXRwb2xsX3NlbmRfc2tiKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gMjcxOlxcdHtcXG4gMjcyOlxcdFxcdG5ldGRldl90eF90IHN0YXR1cyA9IE5FVERFVl9UWF9CVVNZO1xcbiAyNzM6XFx0XFx0bmV0ZGV2X3R4X3QgcmV0ID0gTkVUX1hNSVRfRFJPUDtcXG4gMjc0OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuIDI3NTpcXHRcXHR1bnNpZ25lZCBsb25nIHRyaWVzO1xcbiAyNzY6XFx0XFx0LyogSXQgaXMgdXAgdG8gdGhlIGNhbGxlciB0byBrZWVwIG5waW5mbyBhbGl2ZS4gKi9cXG4gMjc3OlxcdFxcdHN0cnVjdCBuZXRwb2xsX2luZm8gKm5waW5mbztcXG4gMjc4OlxcdFxcbiAyNzk6XFx0XFx0bG9ja2RlcF9hc3NlcnRfaXJxc19kaXNhYmxlZCgpO1xcbiAyODA6XFx0XFxuIDI4MTpcXHRcXHRkZXYgPSBucC1cXHUwMDNlZGV2O1xcbiAyODI6XFx0XFx0LyogbnBpbmZvLVxcdTAwM2V0eHEgYmVsb25ncyB0byBucC1cXHUwMDNlZGV2LCBzbyByZXRyaWVzIG11c3Qgc3RheSBib3VuZCB0byBpdC4gKi9cXG4gMjgzOlxcdFxcdHNrYi1cXHUwMDNlZGV2ID0gZGV2O1xcbiAyODQ6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiAyODU6XFx0XFx0bnBpbmZvID0gcmN1X2RlcmVmZXJlbmNlX2JoKGRldi1cXHUwMDNlbnBpbmZvKTtcXG4gMjg2OlxcdFxcbiAyODc6XFx0XFx0aWYgKCFucGluZm8gfHwgIW5ldGlmX3J1bm5pbmcoZGV2KSB8fCAhbmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSkge1xcbiAyODg6XFx0XFx0XFx0ZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTtcXG4gMjg5OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAyOTA6XFx0XFx0fVxcbiAyOTE6XFx0XFxuIDI5MjpcXHRcXHQvKiBkb24ndCBnZXQgbWVzc2FnZXMgb3V0IG9mIG9yZGVyLCBhbmQgbm8gcmVjdXJzaW9uICovXFxuIDI5MzpcXHRcXHRpZiAoc2tiX3F1ZXVlX2xlbihcXHUwMDI2bnBpbmZvLVxcdTAwM2V0eHEpID09IDAgXFx1MDAyNlxcdTAwMjYgIW5ldHBvbGxfb3duZXJfYWN0aXZlKGRldikpIHtcXG4gMjk0OlxcdFxcdFxcdHN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTtcXG4gMjk1OlxcdFxcbiAyOTY6XFx0XFx0XFx0dHhxID0gbmV0ZGV2X2NvcmVfcGlja190eChkZXYsIHNrYiwgTlVMTCk7XFxuIDI5NzpcXHRcXG4gMjk4OlxcdFxcdFxcdC8qIHRyeSB1bnRpbCBuZXh0IGNsb2NrIHRpY2sgKi9cXG4gMjk5OlxcdFxcdFxcdGZvciAodHJpZXMgPSBqaWZmaWVzX3RvX3VzZWNzKDEpL1VTRUNfUEVSX1BPTEw7XFxuIDMwMDpcXHRcXHRcXHQgICAgIHRyaWVzIFxcdTAwM2UgMDsgLS10cmllcykge1xcbiAzMDE6XFx0XFx0XFx0XFx0aWYgKEhBUkRfVFhfVFJZTE9DSyhkZXYsIHR4cSkpIHtcXG4gMzAyOlxcdFxcdFxcdFxcdFxcdGlmICghbmV0aWZfeG1pdF9zdG9wcGVkKHR4cSkpXFxuIDMwMzpcXHRcXHRcXHRcXHRcXHRcXHRzdGF0dXMgPSBuZXRwb2xsX3N0YXJ0X3htaXQoc2tiLCBkZXYsIHR4cSk7XFxuIDMwNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDQ6MzA6MDUuMTU0NDYyMDYxWiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc2NDQ5MTc5NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogTkVUUE9MTCBUWCBRdWV1ZSBMaW1pdCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBzYWZlIGZyb20gYSBLTVNBTiBwZXJzcGVjdGl2ZSwgYW5kIEknbSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAuIExldCdzIHdhbGsgdGhyb3VnaCB0aGUgbG9naWMuXG5cbkZpcnN0LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNhcCwgYE5FVFBPTExfVFhRX01BWGAsIG9uIHRoZSBzaXplIG9mIHRoZSBgbnBpbmZvLVx1MDAzZXR4cWAgcXVldWUuIFRoaXMgaXMgYSBjcnVjaWFsIGFkZGl0aW9uIHRvIHByZXZlbnQgdW5ib3VuZGVkIHF1ZXVlIGdyb3d0aCwgd2hpY2ggY291bGQgbGVhZCB0byBvdXQtb2YtbWVtb3J5IHNpdHVhdGlvbnMgb3IgcmVzb3VyY2UgZXhoYXVzdGlvbi4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyB0aGlzOiBpZiB0aGUgcXVldWUgaXMgZnVsbCAobGVuZ3RoIGV4Y2VlZHMgYE5FVFBPTExfVFhRX01BWGApLCB0aGUgaW5jb21pbmcgYHNrYmAgaXMgZnJlZWQgdXNpbmcgYGRldl9rZnJlZV9za2JfaXJxKHNrYilgIGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyBgTkVUX1hNSVRfRFJPUGAuXG5cbk5vdywgY29uc2lkZXJpbmcgS01TQU4ncyBwdXJwb3NlOiBpdCdzIGRlc2lnbmVkIHRvIGNhdGNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBpbmZvcm1hdGlvbiBsZWFrcywgcGFydGljdWxhcmx5IHRob3NlIHRoYXQgY291bGQgZXhwb3NlIGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuIERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYW55IG9mIHRob3NlIHJpc2tzPyBJJ3ZlIHN5c3RlbWF0aWNhbGx5IGNoZWNrZWQgdGhlIG1haW4gdGhyZWF0IHZlY3RvcnMuXG5cbjEuICAqKlVzZXItU3BhY2UgSW50ZXJhY3Rpb25zOioqIFRoZSBjb2RlIGRvZXNuJ3QgbW9kaWZ5IG9yIGludHJvZHVjZSBhbnkgbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSB2aWEgYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIG5ldGxpbmsgU0tCIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycy4gTmV0cG9sbCBpcyBpbnRlcm5hbCwgc28gbm90aGluZyBlc2NhcGVzLlxuMi4gICoqVW5pbml0aWFsaXplZCBWYXJpYWJsZSBVc2FnZToqKiBUaGVyZSdzIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzLiBUaGUgcXVldWUgbGVuZ3RoIGNoZWNrLCBgc2tiX3F1ZXVlX2xlbihcdTAwMjZucGluZm8tXHUwMDNldHhxKWAsIGlzIG9wZXJhdGluZyBvbiBhIHN0YW5kYXJkLCBpbml0aWFsaXplZCBgc3RydWN0IHNrX2J1ZmZfaGVhZGAuXG4zLiAgKipEYXRhIFN0cnVjdHVyZSBJbml0aWFsaXphdGlvbjoqKiBUaGlzIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgbGF0ZXIgcmVhZC5cbjQuICAqKkJ1ZmZlciBBY2Nlc3MvTGVuZ3RoIElzc3VlczoqKiBJdCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGJvdW5kcyBjaGVja3Mgb3IgbGVuZ3RoIG1hbmlwdWxhdGlvbnMgdGhhdCBtaWdodCBjcmVhdGUgb3Bwb3J0dW5pdGllcyB0byByZWFkIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgaW4gZXhpc3RpbmcgYnVmZmVycy4gSXQgKnByZXZlbnRzKiB1bmJvdW5kZWQgYnVmZmVyIGdyb3d0aC5cbjUuICAqKk1lbW9yeSBNYW5hZ2VtZW50OioqIFRoZSBwYXRjaCAqZnJlZXMqIGEgYnVmZmVyIGlmIHRoZSBxdWV1ZSBpcyBmdWxsLCB1c2luZyBgZGV2X2tmcmVlX3NrYl9pcnEoc2tiKWAuIEFueSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBvciByZWZlcmVuY2UgY291bnQgaXNzdWVzIHJlbGF0ZWQgdG8gdGhlIGBza2JgIGFyZSB0aGluZ3MgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBtZW1vcnkgZGV0ZWN0b3JzIGFyZSBhbHJlYWR5IGRlc2lnbmVkIHRvIGhhbmRsZS5cblxuVGhlcmVmb3JlLCB0aGUgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcy4gS0FTQU4gd2lsbCBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBsaWZlY3ljbGUgZXJyb3JzLlxuXG5UaGUgcnVsZSBzdGF0ZXM6IFwiVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwgTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cIiBUaGlzIGFwcGxpZXMgaGVyZSwgYXMgS0FTQU4gYW5kIHN0YW5kYXJkIGNoZWNrcyBhbHJlYWR5IGNvdmVyIHRoZSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBjb25jZXJucyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlLiBTaW5jZSB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSB0aGUgKnNwZWNpZmljKiBzZXQgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCBvbmx5IEtNU0FOIHdvdWxkIGRldGVjdCwgS01TQU4gaXMgbm90IGp1c3RpZmllZC4gVGhlIHBhdGNoIG9ubHkgbGltaXRzIHF1ZXVlIGxlbmd0aCBhbmQgaWYgdGhlIGNhcCBpcyByZWFjaGVkLCBzaW1wbHkgZHJvcHMgcGFja2V0cy5cblxuU28sIEkgd2lsbCBub3cgcHJlcGFyZSB0aGUgc3BlY2lmaWMgcmVhc29uaW5nIGFzIGBLTVNBTlJlYXNvbmluZ2A6XG5UaGUgcGF0Y2ggYWRkcyBhIGxlbmd0aCBsaW1pdCAoYE5FVFBPTExfVFhRX01BWGApIG9uIGBucGluZm8tXHUwMDNldHhxYCBpbiBgX19uZXRwb2xsX3NlbmRfc2tiKClgIHRvIGF2b2lkIHVuYm91bmRlZCBtZW1vcnkgZ3Jvd3RoIHdoZW4gdGhlIGRldmljZSBpcyBjb25nZXN0ZWQuIElmIHRoZSBxdWV1ZSBsZW5ndGggZXhjZWVkcyB0aGUgdGhyZXNob2xkLCB0aGUgaW5jb21pbmcgc2tiIGlzIGZyZWVkIHZpYSBgZGV2X2tmcmVlX3NrYl9pcnEoc2tiKWAgYW5kIGRyb3BwZWQuIEtNU0FOIGlzIG5vdCBuZWVkZWQgYmVjYXVzZSB0aGUgcGF0Y2ggZG9lcyBub3QgY3JlYXRlLCB0b3VjaCwgb3IgcmVhZCBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcywgbm9yIGRvZXMgaXQgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBNZW1vcnkgc2FmZXR5IGNvbmNlcm5zIHJlbGF0ZWQgdG8gc2tiIGxpZmVjeWNsZSBvciBxdWV1ZSBoYW5kbGluZyBhcmUgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgY2hlY2tzLiBEZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QganVzdGlmaWVkLlxuXG5JJ20gY29uZmlkZW50IGluIGludm9raW5nIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3NTAsIk91dHB1dFRva2VucyI6MjY4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTg5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDQ6MzA6MTIuNzk5MzgyNjY5WiIsIlNlcSI6NTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgcXVldWUgbGVuZ3RoIGNhcCAoTkVUUE9MTF9UWFFfTUFYID0gMTAyNCkgb24gdGhlIG5ldHBvbGwgdHJhbnNtaXNzaW9uIHF1ZXVlIChucGluZm8tXFx1MDAzZXR4cSkgaW4gbmV0L2NvcmUvbmV0cG9sbC5jIHRvIHByZXZlbnQgdW5ib3VuZGVkIHF1ZXVlIGdyb3d0aCB3aGVuIHRyYW5zbWlzc2lvbiBzdGFsbHMuIElmIHRoZSBxdWV1ZSBsaW1pdCBpcyByZWFjaGVkLCB0aGUgc2tiIGlzIGZyZWVkIHdpdGggZGV2X2tmcmVlX3NrYl9pcnEoc2tiKSBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMgTkVUX1hNSVRfRFJPUC5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OlxcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMgYXJlIGNyZWF0ZWQgb3IgcmVhZC4gVGhlIHF1ZXVlIGxlbmd0aCBjaGVjayBvcGVyYXRlcyBvbiBucGluZm8tXFx1MDAzZXR4cSwgYW4gYWxyZWFkeSBpbml0aWFsaXplZCBza19idWZmX2hlYWQuXFxuMi4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiBrZXJuZWwgaW5mb3JtYXRpb24gZGlzY2xvc3VyZS5cXG4zLiBObyBidWZmZXIgYm91bmRzIG9yIHBhY2tldCBwYXlsb2FkIG9mZnNldHMgYXJlIG1vZGlmaWVkIGluIHdheXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgYnl0ZXMuXFxuXFxuQW55IHBvdGVudGlhbCBidWdzIHJlc3VsdGluZyBmcm9tIHRoaXMgY2hhbmdlIChlLmcuLCBwYWNrZXQgbGlmZWN5Y2xlIGVycm9ycyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIG9mIHRoZSBza2IpIGFyZSBhZGRyZXNzZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBtZW1vcnkgZGVidWdnaW5nLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHF1ZXVlIGxlbmd0aCBjYXAgKE5FVFBPTExfVFhRX01BWCA9IDEwMjQpIG9uIHRoZSBuZXRwb2xsIHRyYW5zbWlzc2lvbiBxdWV1ZSAobnBpbmZvLVxcdTAwM2V0eHEpIGluIG5ldC9jb3JlL25ldHBvbGwuYyB0byBwcmV2ZW50IHVuYm91bmRlZCBxdWV1ZSBncm93dGggd2hlbiB0cmFuc21pc3Npb24gc3RhbGxzLiBJZiB0aGUgcXVldWUgbGltaXQgaXMgcmVhY2hlZCwgdGhlIHNrYiBpcyBmcmVlZCB3aXRoIGRldl9rZnJlZV9za2JfaXJxKHNrYikgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zIE5FVF9YTUlUX0RST1AuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeTpcXG4xLiBObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzIGFyZSBjcmVhdGVkIG9yIHJlYWQuIFRoZSBxdWV1ZSBsZW5ndGggY2hlY2sgb3BlcmF0ZXMgb24gbnBpbmZvLVxcdTAwM2V0eHEsIGFuIGFscmVhZHkgaW5pdGlhbGl6ZWQgc2tfYnVmZl9oZWFkLlxcbjIuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIHNvIHRoZXJlIGlzIG5vIHJpc2sgb2Yga2VybmVsIGluZm9ybWF0aW9uIGRpc2Nsb3N1cmUuXFxuMy4gTm8gYnVmZmVyIGJvdW5kcyBvciBwYWNrZXQgcGF5bG9hZCBvZmZzZXRzIGFyZSBtb2RpZmllZCBpbiB3YXlzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ5dGVzLlxcblxcbkFueSBwb3RlbnRpYWwgYnVncyByZXN1bHRpbmcgZnJvbSB0aGlzIGNoYW5nZSAoZS5nLiwgcGFja2V0IGxpZmVjeWNsZSBlcnJvcnMgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtZnJlZSBvZiB0aGUgc2tiKSBhcmUgYWRkcmVzc2VkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgbWVtb3J5IGRlYnVnZ2luZywgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow79m96[1] Phase: Succeeded StartedAt: 2026-09-14 04:30:24 +0000 UTC FinishedAt: 2026-09-14 04:30:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow79m96[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-14 04:30:24 +0000 UTC FinishedAt: 2026-09-14 04:30:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow79m96[2] Phase: Succeeded StartedAt: 2026-09-14 04:30:24 +0000 UTC FinishedAt: 2026-09-14 04:47:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow79m96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETPOLL","NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__netpoll_send_skb","netpoll_send_skb","queue_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETPOLL","NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"91f8cc47-d49e-4903-a1c8-5ec06dcb491f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-09-14 04:30:24 +0000 UTC FinishedAt: 2026-09-14 04:47:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETPOLL","NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__netpoll_send_skb","netpoll_send_skb","queue_process"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETPOLL","NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"91f8cc47-d49e-4903-a1c8-5ec06dcb491f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow79m96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETPOLL","NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__netpoll_send_skb","netpoll_send_skb","queue_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETPOLL","NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"91f8cc47-d49e-4903-a1c8-5ec06dcb491f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-14 04:30:24 +0000 UTC FinishedAt: 2026-09-14 04:30:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow79m96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETPOLL","NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__netpoll_send_skb","netpoll_send_skb","queue_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETPOLL","NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"91f8cc47-d49e-4903-a1c8-5ec06dcb491f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-14 04:30:24 +0000 UTC FinishedAt: 2026-09-14 04:30:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETPOLL","NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow79m96/series-workflow79m96-convert-artifact-878695544/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow79m96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETPOLL","NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__netpoll_send_skb","netpoll_send_skb","queue_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETPOLL","NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"91f8cc47-d49e-4903-a1c8-5ec06dcb491f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-14 04:30:34 +0000 UTC FinishedAt: 2026-09-14 04:47:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow79m96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETPOLL","NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__netpoll_send_skb","netpoll_send_skb","queue_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETPOLL","NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"91f8cc47-d49e-4903-a1c8-5ec06dcb491f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-14 04:30:34 +0000 UTC FinishedAt: 2026-09-14 04:47:03 +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:*33196232-cda0-4066-90e8-171124661bc3,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-workflow79m96/series-workflow79m96-convert-artifact-878695544/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": "a86c96bc-5cba-4060-9137-43cb8c9298d2", "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-workflow79m96/series-workflow79m96-build-action-215324974/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow79m96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETPOLL","NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__netpoll_send_skb","netpoll_send_skb","queue_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETPOLL","NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"91f8cc47-d49e-4903-a1c8-5ec06dcb491f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-14 04:30:34 +0000 UTC FinishedAt: 2026-09-14 04:46:53 +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:*33196232-cda0-4066-90e8-171124661bc3,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-workflow79m96/series-workflow79m96-convert-artifact-878695544/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": "a86c96bc-5cba-4060-9137-43cb8c9298d2", "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-workflow79m96/series-workflow79m96-build-action-215324974/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow79m96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETPOLL","NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__netpoll_send_skb","netpoll_send_skb","queue_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETPOLL","NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"91f8cc47-d49e-4903-a1c8-5ec06dcb491f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-14 04:47:03 +0000 UTC FinishedAt: 2026-09-14 04:47:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow79m96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETPOLL","NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__netpoll_send_skb","netpoll_send_skb","queue_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETPOLL","NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"91f8cc47-d49e-4903-a1c8-5ec06dcb491f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-14 04:47:03 +0000 UTC FinishedAt: 2026-09-14 04:47:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow79m96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETPOLL","NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__netpoll_send_skb","netpoll_send_skb","queue_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETPOLL","NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"91f8cc47-d49e-4903-a1c8-5ec06dcb491f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-14 04:47:03 +0000 UTC FinishedAt: 2026-09-14 04:47:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow79m96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETPOLL","NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__netpoll_send_skb","netpoll_send_skb","queue_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETPOLL","NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"91f8cc47-d49e-4903-a1c8-5ec06dcb491f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-14 04:47:03 +0000 UTC FinishedAt: 2026-09-14 04:47:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETPOLL","NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"91f8cc47-d49e-4903-a1c8-5ec06dcb491f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow79m96/series-workflow79m96-convert-artifact-4107216863/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow79m96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETPOLL","NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__netpoll_send_skb","netpoll_send_skb","queue_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETPOLL","NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"91f8cc47-d49e-4903-a1c8-5ec06dcb491f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Failed StartedAt: 2026-09-14 04:47:13 +0000 UTC FinishedAt: 2026-09-14 04:47:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow79m96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETPOLL","NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__netpoll_send_skb","netpoll_send_skb","queue_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETPOLL","NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"91f8cc47-d49e-4903-a1c8-5ec06dcb491f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Failed StartedAt: 2026-09-14 04:47:13 +0000 UTC FinishedAt: 2026-09-14 04:47:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a86c96bc-5cba-4060-9137-43cb8c9298d2,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-workflow79m96/series-workflow79m96-build-action-215324974/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil